diff --git a/CLAUDE.md b/CLAUDE.md index 70485d35b..d2819b7d4 100644 --- a/CLAUDE.md +++ b/CLAUDE.md @@ -14,9 +14,25 @@ beside the behavioural `spec.md` for the same capability. Crust Render is a toy, physically-based path tracer written in safe Rust (edition 2024), inspired by PBRT, *Ray Tracing in One Weekend*, and Autodesk Standard Surface / OpenPBR. Scenes are loaded exclusively from **USD** (`.usda` / `.usdc` / `.usdz`) via the pure-Rust -[`openusd`](https://github.com/mxpv/openusd) crate (its GitHub `main`, patched over 0.8 in -the workspace `Cargo.toml`; typed schemas in `openusd-schemas`, which every stage must be -opened with — `usd_import::stage_builder()`). Do not add loaders for any other scene or mesh format. +[`openusd`](https://github.com/mxpv/openusd) crate (typed schemas in `openusd-schemas`, +which every stage must be opened with — `usd_import::stage_builder()`). The importer is +moving onto [Moho](https://github.com/doubleailes/Moho), a Hydra-2.0-style scene index over +openusd that Mantle's IPR and Obsidian also consume (`openspec/changes/moho-import`). Do not add loaders for any other scene or mesh format. + +**openusd only through Moho.** No crate depends on `openusd` or `openusd-schemas` +itself: every crate names them as `moho::openusd` and `moho::openusd_schemas` (a file +adds `use moho::openusd;`), so Moho's pin is the stack's and the build carries one +openusd by construction; `crust-core/tests/one_openusd.rs` fails if a manifest names +openusd directly. openusd's features are Moho's: `moho/mmap`, `moho/serde`, and the +schema families (`skel`, `proc`, `media`, …; `geom`, `lux`, `render`, `shade`, `vol` are +always on). `moho` is pinned by `rev` in `[workspace.dependencies]`; bump in order: +**Moho, then crust-render, then Mantle**. To co-develop with a local Moho checkout, pass a Cargo config +file with a path patch rather than editing `.cargo/config.toml` (it is tracked): + +```bash +printf '[patch."https://github.com/doubleailes/Moho"]\nmoho = { path = "../Moho/crates/moho" }\n' > /tmp/moho.toml +cargo --config /tmp/moho.toml test -p crust-core # rewrites Cargo.lock's moho entry: restore it before committing +``` ## Where things are documented @@ -144,8 +160,9 @@ with CMake against OpenUSD 26 from `hydra/pixi.toml`, outside `cargo build`. Imp it — a wrapper adds a vtable hop per texel fetch that LTO cannot remove. - `scene/usd_import/` siblings share through `pub(super)` and import each other explicitly — no `use super::*`, so a file's `use` block is its real dependency list. -- The USD import is single-threaded and reads the time code from a thread-local - (`EvalTimeScope`); parallelising it means threading the time explicitly. +- The USD import reads USD through Moho's scene index, which owns the time: a reader + takes the index's time, or a time code passed to it explicitly (`crust ls`, the + stage facts). No reader keeps the time in a thread-local. - No RNG outside `openqmc`: stratified draws through keyed sub-domains (`K_*` in `tracer/path.rs`), incidental ones through `draw_rnd` / `domain.rng()`. @@ -176,8 +193,9 @@ without the other (full list: `docs/architecture.md` § Invariants): an MCP edit applied in place ↔ a full re-import of the same layer (`crust_core::live` rebuilds through the import's own functions; a material property the import bakes into geometry or a world flag belongs in `Signature`, in `rt_world.rs`). -- Anything keyed on a prototype path is scoped by the stage epoch - (`ImportCaches::epoch`): `/__Prototype_N` is renumbered per masked stage. +- Anything keyed on a prototype is keyed by Moho's propagated prototype path (or a + point instancer's copy), which is stable across a streamed import's stages, never + by openusd's `/__Prototype_N`, which is renumbered per masked stage. - `Material::resolve` must return exactly what per-query shading would (pinned for every material by `crust-core/tests/resolve.rs`); build it with `Resolution::new`, which takes the emission from the parameters *before* `into_resolved` — the type allows no other order. diff --git a/Cargo.lock b/Cargo.lock index 2c537c015..82f271aca 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -599,16 +599,16 @@ name = "crust-core" version = "0.8.0" dependencies = [ "criterion", + "crust-core", "crust-jit", "crust-mtlx", "crust-nn", "crust-rt", "glam", + "moho", "ocio", "openqmc-rs", "opensubdiv-rs", - "openusd", - "openusd-schemas", "rayon", "serde", "serde_json", @@ -623,7 +623,6 @@ dependencies = [ "crust-assets", "crust-core", "crust-render", - "openusd", "tracing", ] @@ -669,8 +668,7 @@ dependencies = [ "glam", "image", "indicatif", - "openusd", - "openusd-schemas", + "moho", "ptex-rust", "rmcp", "schemars", @@ -1280,6 +1278,15 @@ dependencies = [ "simd-adler32", ] +[[package]] +name = "moho" +version = "0.1.0" +source = "git+https://github.com/doubleailes/Moho?rev=d09cc946def933d3f0b3aa66c3b5249aff7c91d4#d09cc946def933d3f0b3aa66c3b5249aff7c91d4" +dependencies = [ + "openusd", + "openusd-schemas", +] + [[package]] name = "moxcms" version = "0.8.1" @@ -1398,7 +1405,7 @@ source = "git+https://github.com/doubleailes/OpenSubdiv-rs?tag=0.5.0#c672796f958 [[package]] name = "openusd" version = "0.8.0" -source = "git+https://github.com/mxpv/openusd?branch=main#68a867a69f3fb429a30f9e1155a0a30a3d2cdf9f" +source = "git+https://github.com/doubleailes/openusd?rev=d7d2a29406871508b6ec3ffe9173a5941b1c6123#d7d2a29406871508b6ec3ffe9173a5941b1c6123" dependencies = [ "bitflags 2.13.2", "bytemuck", @@ -1420,7 +1427,7 @@ dependencies = [ [[package]] name = "openusd-build" version = "0.8.0" -source = "git+https://github.com/mxpv/openusd?branch=main#68a867a69f3fb429a30f9e1155a0a30a3d2cdf9f" +source = "git+https://github.com/doubleailes/openusd?rev=d7d2a29406871508b6ec3ffe9173a5941b1c6123#d7d2a29406871508b6ec3ffe9173a5941b1c6123" dependencies = [ "openusd", "prettyplease", @@ -1435,7 +1442,7 @@ dependencies = [ [[package]] name = "openusd-schemas" version = "0.8.0" -source = "git+https://github.com/mxpv/openusd?branch=main#68a867a69f3fb429a30f9e1155a0a30a3d2cdf9f" +source = "git+https://github.com/doubleailes/openusd?rev=d7d2a29406871508b6ec3ffe9173a5941b1c6123#d7d2a29406871508b6ec3ffe9173a5941b1c6123" dependencies = [ "bitflags 2.13.2", "derive_more", @@ -2333,7 +2340,7 @@ version = "0.1.11" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c2a7b1c03c876122aa43f3020e6c3c3ee5c05081c9a00739faf7503aeba10d22" dependencies = [ - "windows-sys 0.61.2", + "windows-sys 0.52.0", ] [[package]] diff --git a/Cargo.toml b/Cargo.toml index 8644a1d4f..0add28158 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -80,14 +80,16 @@ half = "2.7" # converts them into the working space (`crust_core::color`). From crates.io # (doubleailes/ocio-rs#2); the committed `Cargo.lock` pins the exact version. ocio = "0.2.0" -# The USD reader and its typed schema views, versioned in lockstep. Declared -# once so crust-core (the import) and crust-render (the MCP session's override -# layer, the probe examples) can never name different versions of the stage -# they share; `[patch.crates-io]` below swaps both for GitHub `main`. No -# default features (openusd has none since 0.8): each member adds the ones it -# needs — crust-core's `mmap` and schema families, crust-render's `serde`. -openusd = { version = "0.8", default-features = false } -openusd-schemas = { version = "0.8", default-features = false } +# Moho, the Hydra-2.0-style scene index over openusd that the import reads the +# stage through, pinned by rev. It is also the only way crust reaches openusd: +# every crate names `moho::openusd` and `moho::openusd_schemas`, so Moho's pin +# is the stack's and there is one openusd in the build by construction +# (`crust-core/tests/one_openusd.rs` fails if a crate depends on openusd +# directly). openusd's features are Moho's: `mmap`, `serde`, and the schema +# families `media`, `physics`, `proc`, `semantics`, `skel`, `ui` (`geom`, `lux`, +# `render`, `shade`, `vol` are always on). Bump order: Moho, then crust-render, +# then Mantle. +moho = { git = "https://github.com/doubleailes/Moho", rev = "d09cc946def933d3f0b3aa66c3b5249aff7c91d4" } # The hot loops are spread across crates: the integrator in `crust-core` # calls the kernel in `crust-rt`, which calls `glam`'s SIMD vector ops. @@ -142,11 +144,3 @@ codegen-units = 1 inherits = "release" panic = "unwind" -# openusd tracks its GitHub `main` rather than the 0.8.0 release, to take its -# fixes as they land. A patch rather than a `git =` in `[workspace.dependencies]`, -# so the requirement stays the release's `0.8` and dropping this section is the -# whole revert to it. Cargo.lock pins the commit; `cargo update -p -# openusd -p openusd-schemas` moves it. -[patch.crates-io] -openusd = { git = "https://github.com/mxpv/openusd", branch = "main" } -openusd-schemas = { git = "https://github.com/mxpv/openusd", branch = "main" } diff --git a/crates/crust-core/Cargo.toml b/crates/crust-core/Cargo.toml index e5b48ddd5..52bcd0923 100644 --- a/crates/crust-core/Cargo.toml +++ b/crates/crust-core/Cargo.toml @@ -25,8 +25,13 @@ jit = ["dep:crust-jit"] # `unsafe`, which this feature alone compiles. Off here and on in the # renderer, like `jit`; `CRUST_USD_MMAP=0` turns it off at run time. # openusd's own `mmap`, and with it `memmap2`, is compiled in only with this -# feature: openusd has no default features since 0.8. -mmap = ["openusd/mmap"] +# feature, forwarded through Moho: openusd has no default features since 0.8. +mmap = ["moho/mmap"] +# Test-only: every import is compared with the baseline recorded from the +# direct importer (`src/parity.rs`, the `moho-import` change). Turned on for +# this crate's tests by the dev-dependency on itself below, and for +# crust-render's by its own; never by a build that ships. +parity = [] [dependencies] utils = { path = "../utils" } @@ -35,16 +40,16 @@ crust-rt = { path = "../crust-rt" } rayon.workspace = true glam.workspace = true tracing.workspace = true -openusd.workspace = true -# The typed schema views (UsdGeom / UsdLux / UsdShade / UsdRender) left the -# core crate in openusd 0.7 and ship separately, versioned in lockstep. UsdSkel, -# UsdVol, UsdProc and UsdMedia are compiled in for their types alone: the import -# composes a prim's xformOps only when the schema registry knows it is -# Xformable, and a SkelRoot, Volume, GenerativeProcedural or SpatialAudio from a -# family left out is unknown, so its transform would be dropped. With them, -# every Xformable type C++ USD defines is known (the remaining families, -# UsdPhysics, UsdUI and UsdSemantics, define none). -openusd-schemas = { workspace = true, features = ["geom", "lux", "shade", "render", "skel", "vol", "proc", "media"] } +# The scene index the import reads the stage through (`scene/usd_import/`), and +# crust's one way to openusd and its typed schema views (`moho::openusd`, +# `moho::openusd_schemas`). UsdGeom, UsdLux, UsdShade, UsdRender and UsdVol are +# always on in Moho; UsdSkel, UsdProc and UsdMedia are compiled in for their +# types alone: the import composes a prim's xformOps only when the schema +# registry knows it is Xformable, and a SkelRoot, GenerativeProcedural or +# SpatialAudio from a family left out is unknown, so its transform would be +# dropped. With them, every Xformable type C++ USD defines is known (UsdPhysics, +# UsdUI and UsdSemantics define none). +moho = { workspace = true, features = ["skel", "proc", "media"] } # Pure-Rust OpenSubdiv port (Far topology refinement + Sdc rules) driving # Catmull-Clark subdivision at USD import: zero dependencies, # `forbid(unsafe_code)`. Pinned to a release tag; the committed `Cargo.lock` @@ -68,6 +73,8 @@ serde = { version = "1.0.229", features = ["derive"] } serde_json = "1.0.151" [dev-dependencies] +# The import-parity check (`parity` feature) on for every test of this crate. +crust-core = { path = ".", features = ["parity"] } criterion = "0.8" # `std` for `tracing::subscriber::with_default`, which the import tests use # to check which warnings a stage's render settings produce. diff --git a/crates/crust-core/src/lib.rs b/crates/crust-core/src/lib.rs index 5ae719ca7..3ad508f4b 100644 --- a/crates/crust-core/src/lib.rs +++ b/crates/crust-core/src/lib.rs @@ -41,6 +41,9 @@ mod lux; mod material; mod medium; pub mod names; +/// Import parity against the direct importer's baselines; test-only. +#[cfg(feature = "parity")] +pub mod parity; mod pdf; pub mod place; pub mod precomp; diff --git a/crates/crust-core/src/live.rs b/crates/crust-core/src/live.rs index 20fc84b80..8a4db38d8 100644 --- a/crates/crust-core/src/live.rs +++ b/crates/crust-core/src/live.rs @@ -85,11 +85,52 @@ pub struct Provenance { pub(crate) stage: StageFacts, } +#[cfg(feature = "parity")] +impl Provenance { + /// Writes the provenance into an import-parity digest + /// ([`crate::parity`]), maps sorted by key so it is stable text. + pub(crate) fn parity_digest(&self, out: &mut String) { + use std::fmt::Write as _; + let mut materials: Vec<_> = self.materials.iter().collect(); + materials.sort_by(|a, b| a.0.cmp(b.0)); + for (path, origin) in materials { + let _ = writeln!(out, "provenance material {path}: {origin:?}"); + } + for read in &self.material_reads { + let _ = writeln!(out, "provenance material read: {read:?}"); + } + for source in &self.arc_sources { + let _ = writeln!(out, "provenance arc source: {source}"); + } + let mut lights: Vec<_> = self.lights.iter().collect(); + lights.sort_by(|a, b| a.0.cmp(b.0)); + for (path, origin) in lights { + let _ = writeln!(out, "provenance light {path}: {origin:?}"); + } + for (ids, path) in &self.geometry { + let _ = writeln!(out, "provenance geometry {ids:?}: {path}"); + } + for mesh in &self.meshes { + let _ = writeln!(out, "provenance mesh: {mesh:?}"); + } + for (i, slot) in self.mesh_slots.iter().enumerate() { + let _ = writeln!(out, "provenance mesh slot {i}: {slot:?}"); + } + let _ = writeln!(out, "provenance spheres: {:?}", self.spheres); + let _ = writeln!(out, "provenance volumes: {:?}", self.volumes); + // The working space by name: `Space` is an id interned per process, + // in whatever order the process met the spaces. + let mut stage = self.stage.clone(); + let working = stage.working.take().map(|w| w.name().to_owned()); + let _ = writeln!(out, "provenance stage: {stage:?} working {working:?}"); + } +} + /// The slots one material fills. #[derive(Clone, Debug, Default, PartialEq, Eq)] pub struct MaterialOrigin { /// Every `World` slot whose material is this prim's: by `Arc` identity, - /// every streamed epoch's `Arc` of it included. + /// every streamed chunk's `Arc` of it included. pub slots: Vec, /// Whether a mesh displaced by it: its geometry depends on its inputs. pub displaced: bool, diff --git a/crates/crust-core/src/parity.rs b/crates/crust-core/src/parity.rs new file mode 100644 index 000000000..71fa2378d --- /dev/null +++ b/crates/crust-core/src/parity.rs @@ -0,0 +1,502 @@ +//! Import parity: every import compared with a baseline recorded from Crust's +//! direct importer (the `moho-import` change, spec `import-parity`). +//! +//! Compiled only with the test-only `parity` feature, which crust-core's and +//! crust-render's tests turn on through a dev-dependency. With it, every +//! successful [`load_scene`](crate::scene) ends in [`check_import`]: the scene's +//! [`digest`] is compared with the baseline recorded for that stage and those +//! options under `crust-core/tests/data/import_baselines/`, and any difference +//! panics on the importing thread, naming the stage and the first line that +//! differs. So every import a test performs — a committed sample, a fixture a +//! test writes, a live session's re-import — is checked, without a call site +//! having to ask. +//! +//! - `CRUST_RECORD_BASELINES=1` writes the baselines instead of comparing. It +//! recorded them from the direct importer before anything migrated; after +//! that it is a behavioural change of its own, never a way to accept a +//! migration's difference. +//! - `CRUST_PARITY_IMAGES=1` also imports the stage a second time and renders +//! it at 16 spp with the indirect clamp off, comparing a hash of its pixels +//! (the `.image` baseline). With it, `CRUST_RECORD_BASELINES=1` records only +//! the images; the digests are still compared. Meant for `cargo test --release`: an unoptimised +//! build renders too slowly for every import of the suite. +//! +//! One difference is a listed exception (`import-parity`): a shutter whose +//! offsets `f32` cannot hold exactly. The index reads a transform at the +//! shutter's ends as Hydra does, at `f32` offsets from the frame, so the +//! ends' matrices may not be the direct importer's `f64` ones bit for bit. +//! For such a scene an import that differs from the direct baseline is +//! accepted when it equals the `.f32-shutter` baseline beside it, recorded +//! from the index with `CRUST_RECORD_F32_SHUTTER=1`, and that baseline differs +//! from the direct one in geometry lines only. +//! +//! A baseline is keyed by a hash of every layer the import composed (paths and +//! text, with the stage's directory written as `$DIR`), the import options, the +//! environment switches and the importing test (its thread's name), so a +//! fixture written to a fresh temporary directory finds its baseline again. +//! Tests run on their own named threads, as libtest runs them by default; with +//! `--test-threads=1` they share one, and the keys move. + +use std::cell::Cell; +use std::fmt::Write as _; +use std::path::{Path, PathBuf}; + +use crate::rt_world::Fnv; +use crate::scene::Scene; + +/// Where the baselines live. +pub fn baseline_dir() -> PathBuf { + Path::new(env!("CARGO_MANIFEST_DIR")).join("tests/data/import_baselines") +} + +thread_local! { + /// Set while [`check_import`] re-imports a stage to render it, so the + /// nested import is not itself checked. + static NESTED: Cell = const { Cell::new(false) }; +} + +/// Whether `CRUST_RECORD_BASELINES` asks to record rather than compare. +fn recording() -> bool { + std::env::var("CRUST_RECORD_BASELINES").is_ok_and(|v| v == "1") +} + +/// Whether `CRUST_PARITY_IMAGES` asks for the 16 spp image hash too. +fn with_images() -> bool { + std::env::var("CRUST_PARITY_IMAGES").is_ok_and(|v| v == "1") +} + +/// Rewrites the machine- and run-specific paths in `text`: the stage's +/// directory as `$DIR`, the workspace as `$ROOT`, the temporary directory as +/// `$TMP`, so a digest recorded on one machine compares on another. +pub fn normalise(text: &str, stage: &Path) -> String { + let mut out = text.to_owned(); + let mut dirs: Vec<(String, &str)> = Vec::new(); + if let Some(dir) = stage.parent().filter(|d| !d.as_os_str().is_empty()) { + if let Ok(abs) = std::path::absolute(dir) { + dirs.push((abs.display().to_string(), "$DIR")); + } + if let Ok(canon) = dir.canonicalize() { + dirs.push((canon.display().to_string(), "$DIR")); + } + dirs.push((dir.display().to_string(), "$DIR")); + } + let root = Path::new(env!("CARGO_MANIFEST_DIR")).join("../.."); + if let Ok(root) = root.canonicalize() { + dirs.push((root.display().to_string(), "$ROOT")); + } + let tmp = std::env::temp_dir(); + if let Ok(canon) = tmp.canonicalize() { + dirs.push((canon.display().to_string(), "$TMP")); + } + dirs.push((tmp.display().to_string(), "$TMP")); + // Longest first, so a directory inside another is replaced before it. + dirs.sort_by_key(|(d, _)| std::cmp::Reverse(d.len())); + for (dir, name) in dirs { + if dir.len() > 1 { + out = out.replace(&dir, name); + } + } + out +} + +/// The scene's import-parity digest, as stable text: one fact per line, so +/// two digests are compared by their first differing line. +/// +/// It covers the geometry in id order ([`crate::World`]'s pieces, materials, +/// flags and side tables), the light list, the volumes, the camera, the +/// settings, the AOV request, the warnings in order, the provenance, the +/// layers and the scene's [`crate::scene::Source`]. A material's parameters +/// and a light's radiance are not in it — no material or light describes +/// itself — and are covered by the 16 spp image (`CRUST_PARITY_IMAGES=1`). +pub fn digest(scene: &Scene, stage: &Path) -> String { + let mut out = String::new(); + let _ = writeln!(out, "time: {:?}", scene.time); + let _ = writeln!(out, "working space: {}", scene.working_space.name()); + let _ = writeln!(out, "camera path: {:?}", scene.camera_path); + let _ = writeln!(out, "camera: {:?}", scene.camera); + let _ = writeln!(out, "settings prim: {:?}", scene.settings_prim); + let _ = writeln!(out, "settings: {:?}", scene.settings); + let _ = writeln!(out, "aovs: {:?}", scene.aovs); + let _ = writeln!(out, "pass: {:?}", scene.pass); + let _ = writeln!(out, "source: {:?}", scene.source); + for layer in &scene.layers { + let _ = writeln!(out, "layer: {}", layer.display()); + } + for w in &scene.warnings { + let _ = writeln!(out, "warning: {w:?}"); + } + let lights = &scene.lights; + let _ = writeln!(out, "lights: {}", lights.count()); + for i in 0..lights.count() { + let kind = match lights.light(i) { + crate::light::LightKind::Area(_) => "area", + crate::light::LightKind::Distant(_) => "distant", + crate::light::LightKind::Dome(_) => "dome", + }; + let _ = writeln!( + out, + "light {i}: {kind} name {:?} lpe {:?} pmf {:?} shadow {:?} restricted {} nee-only {} \ + twinned {} gains {:?}", + lights.name(i), + lights.lpe_tag(i), + lights.pmf(i), + lights.shadow_mask(i), + lights.restricted(i), + lights.nee_only(i), + lights.twinned(i), + lights.lobe_gains(i), + ); + } + let _ = writeln!(out, "volumes: {}", scene.volumes.len()); + for (i, v) in scene.volumes.iter().enumerate() { + let _ = writeln!( + out, + "volume {i}: sigma_s {:?} sigma_a {:?} g {:?} emission {:?} mask {:?} class {} \ + homogeneous {}", + v.sigma_s, + v.sigma_a, + v.g, + v.emission, + v.mask, + v.light_class, + v.is_homogeneous(), + ); + } + scene.world.parity_digest(&mut out); + if let Some(p) = &scene.provenance { + p.parity_digest(&mut out); + } + normalise(&out, stage) +} + +/// `text` with each native prototype's number written `#` +/// (`/__Prototype_12/geo` → `/__Prototype_#/geo`): the one listed parity +/// exception (spec `import-parity`). openusd numbers a stage's prototypes in +/// the order something first asks for them, and the scene index's population +/// walk asks in another order than the direct importer's walk did, so the +/// same prototype gets another number. The number is an artifact of the +/// composition, not of the scene — USD gives prototype names no stability — +/// and a streamed import numbers each chunk's stage from 0, so the number +/// cannot even be mapped between two imports; only the digit run is written +/// out, everything else in the path is compared. +pub fn without_prototype_numbers(text: &str) -> String { + const MARK: &str = "__Prototype_"; + let mut out = String::with_capacity(text.len()); + let mut rest = text; + while let Some(at) = rest.find(MARK) { + let after = &rest[at + MARK.len()..]; + let digits = after.len() - after.trim_start_matches(|c: char| c.is_ascii_digit()).len(); + out.push_str(&rest[..at + MARK.len()]); + if digits > 0 { + out.push('#'); + } + rest = &after[digits..]; + } + out.push_str(rest); + out +} + +/// The first line where `actual` differs from `expected`, with its number; +/// `None` when they are equal. Prototype numbers are not compared +/// ([`without_prototype_numbers`]). +pub fn first_difference(expected: &str, actual: &str) -> Option { + let (expected, actual) = ( + without_prototype_numbers(expected), + without_prototype_numbers(actual), + ); + let mut a = expected.lines(); + let mut b = actual.lines(); + let mut n = 1; + loop { + match (a.next(), b.next()) { + (None, None) => return None, + (x, y) if x == y => n += 1, + (x, y) => { + return Some(format!( + "line {n}:\n baseline: {}\n import: {}", + x.unwrap_or(""), + y.unwrap_or("") + )); + } + } + } +} + +/// The key a stage's baselines are stored under. Its inputs: every layer the +/// import composed (its path and text, directories normalised), the import +/// options and the environment switches ([`crate::config`]); and who imported +/// it — the test, by its thread's name, or for a `crust` process the command +/// line — since a host's asset loader and colour config are not in the +/// options. A test importing the same files twice numbers the imports. +pub fn key(stage: &Path, options: &crate::UsdImportOptions, scene: &Scene) -> String { + let mut hash = Fnv::default(); + let mut layers: Vec<&Path> = scene.layers.iter().map(PathBuf::as_path).collect(); + if !layers.contains(&stage) { + layers.push(stage); + } + for layer in layers { + hash.bytes(normalise(&layer.display().to_string(), stage).as_bytes()); + let text = std::fs::read(layer).unwrap_or_default(); + hash.bytes(normalise(&String::from_utf8_lossy(&text), stage).as_bytes()); + } + hash.bytes(normalise(&format!("{options:?}"), stage).as_bytes()); + hash.bytes(format!("{:?}", crate::config()).as_bytes()); + let thread = std::thread::current() + .name() + .unwrap_or("unnamed") + .to_owned(); + hash.bytes(thread.as_bytes()); + if thread == "main" { + let args: Vec = std::env::args().skip(1).collect(); + hash.bytes(normalise(&args.join(" "), stage).as_bytes()); + } + let content = hash.0; + let nth = SEEN.with(|seen| { + let mut seen = seen.borrow_mut(); + let n = seen.entry(content).or_insert(0u32); + *n += 1; + *n + }); + let name = stage + .file_name() + .map(|n| { + n.to_string_lossy() + .replace(|c: char| !c.is_ascii_alphanumeric(), "_") + }) + .unwrap_or_default(); + format!("{name}-{content:016x}-{nth}") +} + +thread_local! { + /// How many times this thread imported each key's inputs. + static SEEN: std::cell::RefCell> = Default::default(); +} + +/// The 16 spp image of a freshly imported `scene`, indirect clamp off, as a +/// hash of its pixels. +fn image_hash(scene: Scene) -> String { + let settings = scene + .settings + .with_samples_per_pixel(16) + .with_indirect_clamp(0.0); + let (w, h) = settings.get_dimensions(); + let renderer = crate::Renderer::new(scene.camera, scene.world, scene.lights, settings) + .with_volumes(scene.volumes); + let buffer = renderer.render(); + let mut hash = Fnv::default(); + for y in 0..h { + for x in 0..w { + hash.floats(&buffer.get_pixel(x, y).to_array()); + } + } + format!("{w}x{h} 16spp clamp-off {:016x}\n", hash.0) +} + +/// Compares `scene`, just imported from `stage` with `options`, with its +/// baselines, or records them (module docs). `reimport` imports the stage +/// again, for the image. +/// +/// # Panics +/// On any difference from the baseline, or a missing baseline: this is a +/// test-only check, and a panic fails the test that imported the stage. +pub fn check_import( + stage: &Path, + options: &crate::UsdImportOptions, + scene: &Scene, + reimport: &dyn Fn() -> Result, +) { + if NESTED.with(Cell::get) { + return; + } + let dir = baseline_dir(); + let key = key(stage, options, scene); + let inexact = inexact_shutter(scene); + let record_f32 = std::env::var("CRUST_RECORD_F32_SHUTTER").is_ok_and(|v| v == "1"); + let mut files = vec![(dir.join(format!("{key}.digest")), digest(scene, stage))]; + if with_images() { + NESTED.with(|n| n.set(true)); + let again = reimport(); + NESTED.with(|n| n.set(false)); + match again { + Ok(again) => files.push((dir.join(format!("{key}.image")), image_hash(again))), + Err(e) => panic!( + "parity: re-importing {} for its image failed: {e}", + stage.display() + ), + } + } + for (file, actual) in files { + // With images on, the digests are compared, never recorded: the image + // run (an optimised build) records only the images, and checks that it + // imports exactly what the unoptimised run recorded. + let is_image = file.extension().is_some_and(|e| e == "image"); + if record_f32 && inexact && (is_image || !with_images()) { + let alt = f32_shutter(&file); + if let Err(e) = std::fs::write(&alt, actual) { + panic!("parity: cannot record {}: {e}", alt.display()); + } + continue; + } + if recording() && (is_image || !with_images()) { + if let Err(e) = + std::fs::create_dir_all(&dir).and_then(|()| std::fs::write(&file, actual)) + { + panic!("parity: cannot record {}: {e}", file.display()); + } + continue; + } + let Ok(expected) = std::fs::read_to_string(&file) else { + panic!( + "parity: no baseline {} for {} — record the direct importer's with \ + CRUST_RECORD_BASELINES=1", + file.display(), + stage.display() + ); + }; + if let Some(diff) = first_difference(&expected, &actual) { + if inexact && accepted_f32_shutter(&file, &expected, &actual, is_image) { + continue; + } + panic!( + "parity: importing {} differs from its baseline {}, {diff}", + stage.display(), + file.display() + ); + } + } +} + +/// Whether the scene's shutter opens an interval at offsets `f32` cannot +/// hold exactly: the listed exception (module docs). +fn inexact_shutter(scene: &Scene) -> bool { + let Some(prov) = &scene.provenance else { + return false; + }; + let shutter = &prov.stage.shutter; + shutter.interval.is_some() + && shutter + .offsets + .iter() + .map(|bits| f64::from_bits(*bits)) + .any(|x| f64::from(x as f32) != x) +} + +/// The `.f32-shutter` baseline beside `file`. +fn f32_shutter(file: &Path) -> PathBuf { + let ext = file + .extension() + .map(|e| e.to_string_lossy().into_owned()) + .unwrap_or_default(); + file.with_extension(format!("f32-shutter.{ext}")) +} + +/// Whether `actual`, differing from the direct baseline `expected`, is the +/// listed exception: equal to the `.f32-shutter` baseline, which differs +/// from the direct one in geometry lines only (a digest) or is the image of +/// that import. +fn accepted_f32_shutter(file: &Path, expected: &str, actual: &str, is_image: bool) -> bool { + let Ok(alt) = std::fs::read_to_string(f32_shutter(file)) else { + return false; + }; + if first_difference(&alt, actual).is_some() { + return false; + } + is_image + || (expected.lines().count() == alt.lines().count() + && expected + .lines() + .zip(alt.lines()) + .all(|(a, b)| a == b || (a.starts_with("geom ") && b.starts_with("geom ")))) +} + +#[cfg(test)] +mod tests { + use super::*; + + #[test] + fn the_first_difference_is_named() { + let a = "camera: x\ngeom 0: a\ngeom 1: b\n"; + let b = "camera: x\ngeom 0: b\ngeom 1: a\n"; + let diff = first_difference(a, b).expect("they differ"); + assert!(diff.starts_with("line 2:"), "{diff}"); + assert!( + diff.contains("geom 0: a") && diff.contains("geom 0: b"), + "{diff}" + ); + assert_eq!(first_difference(a, a), None); + assert!(first_difference(a, "camera: x\n").is_some()); + } + + /// Two scenes with the same two spheres attached in the other order. + fn two_spheres(swapped: bool) -> Scene { + use crate::rt::Geometry; + let mut world = crate::WorldBuilder::new(); + let mut spheres = [ + Geometry::Sphere { + center: glam::Vec3A::ZERO, + radius: 1.0, + }, + Geometry::Sphere { + center: glam::Vec3A::X, + radius: 0.5, + }, + ]; + if swapped { + spheres.reverse(); + } + for s in spheres { + world.attach( + s, + std::sync::Arc::new(crate::OpenPBR::diffuse(glam::Vec3A::splat(0.5))), + ); + } + let camera = crate::Camera::new( + glam::Vec3A::new(0.0, 0.0, 5.0), + glam::Vec3A::ZERO, + glam::Vec3A::Y, + 40.0, + 1.0, + 0.0, + 5.0, + ); + Scene::new( + camera, + world.commit(), + crate::LightList::new(), + Default::default(), + ) + } + + #[test] + fn a_reordered_geometry_is_named_by_its_id() { + let stage = Path::new("scene.usda"); + let a = digest(&two_spheres(false), stage); + let b = digest(&two_spheres(true), stage); + let diff = first_difference(&a, &b).expect("the order differs"); + assert!(diff.contains("geom 0:"), "{diff}"); + assert_eq!( + first_difference(&a, &digest(&two_spheres(false), stage)), + None + ); + } + + #[test] + fn prototype_numbers_are_not_compared() { + assert_eq!( + without_prototype_numbers("/__Prototype_83/MATERIAL /__Prototype_/x __Prototype_7"), + "/__Prototype_#/MATERIAL /__Prototype_/x __Prototype_#" + ); + assert_eq!( + first_difference("/__Prototype_1/a\n", "/__Prototype_0/a\n"), + None + ); + assert!(first_difference("/__Prototype_1/a\n", "/__Prototype_0/b\n").is_some()); + } + + #[test] + fn paths_are_written_relative_to_the_stage() { + let stage = std::env::temp_dir().join("parity-test/scene.usda"); + let text = format!("layer: {}", stage.display()); + assert_eq!(normalise(&text, &stage), "layer: $DIR/scene.usda"); + } +} diff --git a/crates/crust-core/src/rt_world.rs b/crates/crust-core/src/rt_world.rs index cb45ec7f0..9f7e0f22f 100644 --- a/crates/crust-core/src/rt_world.rs +++ b/crates/crust-core/src/rt_world.rs @@ -1926,6 +1926,127 @@ impl World { } } +#[cfg(feature = "parity")] +impl World { + /// Writes every geometry of the world into an import-parity digest + /// ([`crate::parity`]), one line per `geom_id`: the material, by the + /// order its `Arc` was first met and its [`Signature`]; the light class, + /// holdout and transparent-emitter flags; the side tables' presence, + /// sharing and mirrored flag; the placement scale; the motion; and a hash + /// of every piece a ray of each category sees, in world space at shutter + /// open (an instance's pieces included, through its transform). + pub(crate) fn parity_digest(&self, out: &mut String) { + use std::fmt::Write as _; + let mut materials: std::collections::HashMap = Default::default(); + let mut tables: std::collections::HashMap = Default::default(); + let ordinal = |seen: &mut std::collections::HashMap, ptr: usize| { + let n = seen.len(); + *seen.entry(ptr).or_insert(n) + }; + let masks = [ + ("all", MASK_ALL), + ("camera", crust_rt::MASK_CAMERA), + ("shadow", crust_rt::MASK_SHADOW), + ("indirect", crust_rt::MASK_INDIRECT), + ]; + let _ = writeln!( + out, + "world: {} geometries, {:?} top level, {:?} unique, motion {}", + self.count(), + self.primitive_breakdown(), + self.unique_primitive_breakdown(), + self.has_motion() + ); + for id in 0..self.count() as u32 { + let m = &self.materials[id as usize]; + let mat = ordinal(&mut materials, Arc::as_ptr(m) as *const () as usize); + let t = &self.faces[id as usize]; + let mut table = |a: Option| a.map(|p| ordinal(&mut tables, p)); + let map = table(t.map.as_ref().map(|a| Arc::as_ptr(a) as usize)); + let uv = table(t.uv.as_ref().map(|a| Arc::as_ptr(a) as usize)); + let shading = table(t.shading.as_ref().map(|a| Arc::as_ptr(a) as usize)); + let strands = table(t.strands.as_ref().map(|a| Arc::as_ptr(a) as usize)); + let aov = self + .primvars + .binary_search_by_key(&id, |(i, ..)| *i) + .ok() + .map(|i| { + ( + table(Some(Arc::as_ptr(&self.primvars[i].1) as usize)), + self.primvars[i].2, + ) + }); + let motion: Vec<&Motion> = self + .motion + .iter() + .filter(|(a, b, _)| (*a..=*b).contains(&id)) + .map(|(.., m)| m) + .collect(); + let mut pieces = String::new(); + for (name, mask) in masks { + let mut hash = Fnv::default(); + let mut n = 0u64; + self.scene.visit(id..id + 1, mask, |_, piece| { + n += 1; + match piece { + crust_rt::Piece::Triangle(v) => { + for p in v { + hash.floats(&p.to_array()); + } + } + crust_rt::Piece::Bounds(b) => { + hash.floats(&b.minimum.to_array()); + hash.floats(&b.maximum.to_array()); + } + } + }); + let _ = write!(pieces, " {name}={n}:{:016x}", hash.0); + } + let _ = writeln!( + out, + "geom {id}: material #{mat} {:?} class {} holdout {} transparent {} map {map:?} uv \ + {uv:?} shading {shading:?} strands {strands:?} aov {aov:?} swapped {} curves {} scale {:?} motion \ + {motion:?} pieces{pieces}", + Signature::of(m.as_ref(), t.curves), + self.light_class(id), + self.is_holdout(id), + self.is_transparent_emitter(id), + t.swapped, + t.curves, + t.scale, + ); + } + } +} + +/// FNV-1a over the bit patterns of floats: exact, and stable across runs and +/// machines, as an import-parity digest needs ([`World::parity_digest`]). +#[cfg(feature = "parity")] +pub(crate) struct Fnv(pub(crate) u64); + +#[cfg(feature = "parity")] +impl Default for Fnv { + fn default() -> Self { + Fnv(0xcbf2_9ce4_8422_2325) + } +} + +#[cfg(feature = "parity")] +impl Fnv { + pub(crate) fn bytes(&mut self, bytes: &[u8]) { + for b in bytes { + self.0 ^= u64::from(*b); + self.0 = self.0.wrapping_mul(0x0000_0100_0000_01b3); + } + } + + pub(crate) fn floats(&mut self, floats: &[f32]) { + for f in floats { + self.bytes(&f.to_bits().to_le_bytes()); + } + } +} + /// The properties of a material the world and the geometry were built on: /// two materials with the same signature can swap slots without a re-import. #[derive(Debug, PartialEq)] diff --git a/crates/crust-core/src/scene/displace.rs b/crates/crust-core/src/scene/displace.rs index 1e86e6683..f51618265 100644 --- a/crates/crust-core/src/scene/displace.rs +++ b/crates/crust-core/src/scene/displace.rs @@ -3,7 +3,7 @@ //! Pure: local-space points, polygon topology, per-vertex charts and a //! [`Displacement`] in, displaced points and shading normals out. No USD, no //! texture loading — the samplers are resolved before this runs — so it may -//! fan out over rayon without touching the import's thread-local time. See +//! fan out over rayon, off the importing thread. See //! "Displacement" in `openspec/specs/usd-scene-import/design.md`. //! //! Two rules carry the whole design: diff --git a/crates/crust-core/src/scene/subdiv/adaptive.rs b/crates/crust-core/src/scene/subdiv/adaptive.rs index afcdc3689..33475fd60 100644 --- a/crates/crust-core/src/scene/subdiv/adaptive.rs +++ b/crates/crust-core/src/scene/subdiv/adaptive.rs @@ -1,6 +1,7 @@ //! Per-face adaptive tessellation on the limit surface. use glam::Vec3A; +use moho::openusd; use opensubdiv_rs::far::{ FVarChannelDescriptor, PrimvarRefiner, TopologyDescriptor, TopologyRefinerFactory, }; diff --git a/crates/crust-core/src/scene/subdiv/mod.rs b/crates/crust-core/src/scene/subdiv/mod.rs index 87a356225..6e7e9965c 100644 --- a/crates/crust-core/src/scene/subdiv/mod.rs +++ b/crates/crust-core/src/scene/subdiv/mod.rs @@ -32,6 +32,7 @@ //! [`opensubdiv-rs`]: https://github.com/doubleailes/OpenSubdiv-rs //! [`FVarLinearInterpolation`]: sdc::FVarLinearInterpolation +use moho::openusd; mod adaptive; mod normals; #[cfg(test)] diff --git a/crates/crust-core/src/scene/subdiv/normals.rs b/crates/crust-core/src/scene/subdiv/normals.rs index 1295c1c61..71fb9ba9d 100644 --- a/crates/crust-core/src/scene/subdiv/normals.rs +++ b/crates/crust-core/src/scene/subdiv/normals.rs @@ -1,6 +1,7 @@ //! Smooth per-vertex shading normals, for refined meshes and unrefined cages. use glam::Vec3A; +use moho::openusd; use openusd::gf::Vec3f; use super::topology::validate_cage; diff --git a/crates/crust-core/src/scene/subdiv/uniform.rs b/crates/crust-core/src/scene/subdiv/uniform.rs index 1ec411ba7..6fe789e93 100644 --- a/crates/crust-core/src/scene/subdiv/uniform.rs +++ b/crates/crust-core/src/scene/subdiv/uniform.rs @@ -1,5 +1,6 @@ //! Uniform refinement: the cage refined to one level and snapped to the limit. +use moho::openusd; use opensubdiv_rs::far::{ FVarChannelDescriptor, PrimvarRefiner, TopologyDescriptor, TopologyRefinerFactory, UniformOptions, diff --git a/crates/crust-core/src/scene/usd_import/adaptive.rs b/crates/crust-core/src/scene/usd_import/adaptive.rs index e7dae4c03..86b3992ea 100644 --- a/crates/crust-core/src/scene/usd_import/adaptive.rs +++ b/crates/crust-core/src/scene/usd_import/adaptive.rs @@ -9,6 +9,7 @@ //! `openspec/specs/usd-scene-import/design.md`. use glam::{DMat3, Mat3, Mat4 as GMat4, Vec3}; +use moho::openusd; use openusd::gf::Vec3f; /// Below this a distance, a stretch or an edge length is treated as zero. diff --git a/crates/crust-core/src/scene/usd_import/assets.rs b/crates/crust-core/src/scene/usd_import/assets.rs index 004fe624b..4cfb7f2b8 100644 --- a/crates/crust-core/src/scene/usd_import/assets.rs +++ b/crates/crust-core/src/scene/usd_import/assets.rs @@ -5,6 +5,7 @@ //! crust-core decodes nothing itself. use crate::record_warning; +use moho::openusd; use std::collections::{HashMap, HashSet}; use std::fmt::Display; use std::hash::Hash; @@ -13,11 +14,9 @@ use std::sync::Arc; use std::time::{Duration, Instant}; use openusd::sdf; -use openusd::usd::Attribute; use tracing::debug; use super::ImportCaches; -use super::attrs::value_at; /// Runs one host decode, adding its wall time to `asset_time` — the "Load /// assets" phase, which the traversal figure has subtracted out (see @@ -151,50 +150,23 @@ pub(super) fn load_ptex( loaded } -/// An `asset`-valued attribute as a filesystem path — the one rule every -/// asset reference (textures, Ptex, IES profiles, light and dome maps) is -/// resolved by. -/// -/// openusd anchors default-sourced asset paths against the layer that -/// authored them and reports the result in `resolved_path` — which is what -/// makes a production stage's `../../../textures/foo.ptx` work at all, since -/// the layer authoring it is nested several directories below the root (the -/// Moana island's lights author `../textures/islandsun.exr` relative to -/// `usd/island.usda`). -/// -/// But openusd reports the anchored path only when it names a file that -/// exists — and a ``-tokened texture path never does, since it names a -/// set. So such a value arrives with no `resolved_path` at all, and an -/// **unresolved** relative path is anchored here against the layer that -/// authored it: the strongest spec in the attribute's property stack, the -/// layer whose opinion supplies the value, which is exactly what USD anchors -/// against. Anchoring it against the root layer was wrong for any texture -/// authored in a sublayer or reference: ALab's look layers sit five -/// directories below `entry.usda` and author `@../../texture/….exr@`, -/// and 1 718 texture sets failed to load. The root layer (`stage_path`) is -/// only the last resort, when the authoring layer is unknown. -pub(super) fn asset_path(attr: &Attribute, stage_path: &Path) -> Option { - let value = value_at(attr)?; - let resolved = matches!(&value, sdf::Value::AssetPath(p) - if p.resolved_path().is_some_and(|r| !r.is_empty())); - let authored = value.as_str().map(str::to_owned); - if !resolved - && let Some(authored) = authored.filter(|a| !a.is_empty() && Path::new(a).is_relative()) - && let Some(layer_dir) = attr - .property_stack() - .ok() - .and_then(|stack| stack.into_iter().next()) - .and_then(|site| Path::new(&site.layer).parent().map(Path::to_path_buf)) - .filter(|d| !d.as_os_str().is_empty()) - { - return Some(layer_dir.join(authored)); - } - asset_value_path(&value, stage_path) -} - /// An asset value as a path: openusd's `resolved_path` when it has one, else -/// the authored string, a relative one anchored against the root layer. -fn asset_value_path(value: &sdf::Value, stage_path: &Path) -> Option { +/// the authored string, a relative one anchored against the directory of the +/// layer that authors it (`layer_dir`, read off the stage: +/// `stage_facts::authoring_layer_dir`), the root layer's when that is unknown. +/// +/// openusd's value resolution anchors an `asset` value on its authoring layer +/// and records where it resolves even when no file is there (a `` set, +/// a missing texture), and the scene index carries that value, so an asset +/// authored in a sublayer or a reference (ALab's look layers, five directories +/// below `entry.usda`) reaches the host from its own layer's directory. A +/// path authored as a `string` carries no resolution: `layer_dir` anchors it +/// as the direct importer did (`tests/asset_anchoring.rs`). +pub(super) fn asset_value_path( + value: &sdf::Value, + stage_path: &Path, + layer_dir: &dyn Fn() -> Option, +) -> Option { let (authored, resolved) = match value { sdf::Value::AssetPath(p) => (p.as_str().to_string(), p.resolved_path()), sdf::Value::String(p) => (p.clone(), None), @@ -212,10 +184,11 @@ fn asset_value_path(value: &sdf::Value, stage_path: &Path) -> Option { if candidate.is_absolute() { return Some(candidate.to_path_buf()); } - Some( + let dir = layer_dir().unwrap_or_else(|| { stage_path .parent() .unwrap_or_else(|| Path::new(".")) - .join(candidate), - ) + .to_path_buf() + }); + Some(dir.join(candidate)) } diff --git a/crates/crust-core/src/scene/usd_import/attrs.rs b/crates/crust-core/src/scene/usd_import/attrs.rs index 01c8b1cca..61355fa95 100644 --- a/crates/crust-core/src/scene/usd_import/attrs.rs +++ b/crates/crust-core/src/scene/usd_import/attrs.rs @@ -1,90 +1,20 @@ //! Typed readers for authored attributes: the `crust:*` custom attributes, the //! per-prim geometry flags (ray mask, motion), the subdivision level, and -//! schema-attribute value decoding. Every read resolves at [`eval_time`]. +//! schema-attribute value decoding. Every stage read takes its time code. use crate::warning; -use glam::{Vec3, Vec3A}; +use glam::Vec3A; +use moho::openusd; use openusd::gf::Vec3f; use openusd::sdf; -use openusd::usd::{Attribute, Prim}; - -use crate::color::Space; -use crate::ray::{MASK_ALL, MASK_CAMERA, MASK_INDIRECT, MASK_SHADOW, RayMask}; - -use super::time::eval_time; // ----------------------------------------------------------------------- // Per-prim geometry attributes (visibility mask, motion) // ----------------------------------------------------------------------- -/// `crust:rayMask` — which ray categories see this geometry (bit 0 camera, -/// bit 1 shadow, bit 2 indirect; default: all). E.g. `crust:rayMask = 6` -/// makes a light-blocker invisible to the camera. -pub(super) fn prim_ray_mask(prim: &Prim) -> RayMask { - custom_i32(prim, "crust:rayMask") - .map(|m| RayMask(m as u32)) - .unwrap_or(MASK_ALL) -} - /// RenderMan's per-light camera visibility, which published assets carry /// (the Moana island's `islandPrman.usda` authors it on every light). -const RI_CAMERA_VISIBILITY: &str = "primvars:ri:attributes:visibility:camera"; - -/// Whether the camera sees a light, when anything says: crust's own -/// `crust:light:cameraVisible` first, RenderMan's primvar (an int, non-zero -/// meaning visible) as the portable fallback. -fn authored_camera_visibility(prim: &Prim) -> Option { - custom_bool(prim, "crust:light:cameraVisible") - .or_else(|| custom_bool(prim, RI_CAMERA_VISIBILITY)) -} - -/// Ray mask for a light's *source geometry*, and whether that source is a -/// transparent emitter. -/// -/// By default the surface is invisible to camera rays — lights sit in frame -/// without showing up — and is then an emitter and nothing else: shadow rays -/// do not see it, so it never occludes another light, and a bounce ray that -/// crosses it collects its emission and goes on past it (the integrator's -/// pass-through walk; `World::is_transparent_emitter`). That is the OpenUSD -/// reference delegate's rule: Typhoon (hdEmbree) builds geometry for a light -/// only when it is `visibleInPrimaryRay`. -/// -/// `crust:light:cameraVisible = true` (or RenderMan's -/// `primvars:ri:attributes:visibility:camera = 1`) opts the surface back in -/// as a solid emitter that every ray category sees and that occludes, like a -/// lamp bulb (classic Cornell-box look). An authored `crust:rayMask` wins -/// outright and keeps the source solid on the bounce side, whatever bits it -/// clears: it is the escape hatch for a scene that wants a hidden light to -/// occlude. -pub(super) fn light_ray_mask(prim: &Prim) -> (RayMask, bool) { - if let Some(m) = custom_i32(prim, "crust:rayMask") { - return (RayMask(m as u32), false); - } - if authored_camera_visibility(prim).unwrap_or(false) { - (MASK_CAMERA | MASK_SHADOW | MASK_INDIRECT, false) - } else { - (MASK_INDIRECT, true) - } -} - -/// Which escaping rays see a light at infinity: every category, unless the -/// camera is told not to (same attributes and precedence as -/// [`light_ray_mask`], but visible by default — a dome is the sky behind -/// the scene unless something hides it). `crust:rayMask` does not apply: a -/// light at infinity has no geometry to mask. -pub(super) fn infinite_light_escape_mask(prim: &Prim) -> RayMask { - if authored_camera_visibility(prim).unwrap_or(true) { - MASK_ALL - } else { - RayMask(MASK_ALL.0 & !MASK_CAMERA.0) - } -} - -/// `crust:motion:translate` — a world-space translation the prim moves -/// through over the shutter interval (transform motion blur). -pub(super) fn prim_motion_translate(prim: &Prim) -> Option { - custom_color3(prim, "crust:motion:translate").map(|v| Vec3::new(v.x, v.y, v.z)) -} +pub(super) const RI_CAMERA_VISIBILITY: &str = "primvars:ri:attributes:visibility:camera"; /// The refinement level a subdivision surface (any scheme but `none`) gets /// when neither the host nor the stage's `RenderSettings` names one: 0, so @@ -181,30 +111,6 @@ pub(super) fn resolve_adaptive_max_level(host: Option, authored: Option Option { - let value = attr.get_at::(eval_time()).ok().flatten()?; - match attr.fallback_value() { - Ok(Some(fallback)) if fallback == value => attr.has_authored_value().ok()?.then_some(value), - _ => Some(value), - } -} - -/// The value of `prim`'s attribute `name` at [`eval_time`] — [`value_at`] by -/// name. -pub(super) fn prim_value(prim: &Prim, name: &str) -> Option { - value_at(&prim.attribute(name)) -} - /// A scalar float, whatever precision it was authored in. pub(super) fn decode_f32(v: sdf::Value) -> Option { match v { @@ -327,130 +233,6 @@ pub(super) fn decode_vec3f_array(v: sdf::Value) -> Option> { } } -pub(super) fn custom_i32(prim: &Prim, name: &str) -> Option { - prim_value(prim, name).and_then(decode_i32) -} - -pub(super) fn custom_f32(prim: &Prim, name: &str) -> Option { - prim_value(prim, name).and_then(decode_f32) -} - -pub(super) fn custom_bool(prim: &Prim, name: &str) -> Option { - prim_value(prim, name).and_then(decode_bool) -} - -pub(super) fn custom_token(prim: &Prim, name: &str) -> Option { - prim_value(prim, name).and_then(decode_text) -} - -pub(super) fn custom_color3(prim: &Prim, name: &str) -> Option { - prim_value(prim, name).and_then(decode_vec3) -} - -/// A colour attribute in the working space: [`custom_color3`], converted -/// from the space its `colorSpace` metadatum names (see [`in_working`]). -pub(super) fn custom_color(prim: &Prim, name: &str, working: Space) -> Option { - custom_color3(prim, name).map(|c| in_working(&prim.attribute(name), c, working)) -} - -/// The colour space an attribute's value is authored in, as -/// `UsdColorSpaceAPI::ComputeColorSpaceName` resolves it: the attribute's own -/// `colorSpace` metadatum, else the `colorSpace:name` of its prim, else of the -/// nearest ancestor that authors one — through the OCIO config. `None` when -/// nothing names one (the value is then already in the working space; USD's -/// own fallback, `lin_rec709_scene`, is deliberately not applied — see -/// `docs/color_management.md`). A name the config does not know is refused -/// with a warning, and is `None` too. -pub(super) fn attr_color_space(attr: &Attribute) -> Option { - let name = own_color_space_name(attr).or_else(|| { - let stage = attr.stage(); - let mut path = Some(attr.path().prim_path()); - while let Some(p) = path.filter(|p| !p.is_abs_root()) { - let named = prim_value(&super::prim_at(stage, p.clone()), "colorSpace:name") - .and_then(decode_text) - .filter(|n| !n.is_empty()); - if named.is_some() { - return named; - } - path = p.parent(); - } - None - })?; - named_space(attr, &name) -} - -/// The colour space an attribute's *own* `colorSpace` metadatum names, -/// ignoring any `colorSpace:name` on its prim or ancestors — for a value -/// whose encoding is a convention of the attribute rather than of the scene: -/// a texture file (whose decode `sourceColorSpace` or the file itself -/// decides) or a display-encoded colour such as PxrDisneyBsdf's `baseColor`. -/// A scope's `colorSpace:name = "acescg"` says its *linear colour values* are -/// ACEScg; applied to an sRGB albedo file it would read it as linear, and to -/// a displacement map it would mix its channels. -pub(super) fn attr_own_color_space(attr: &Attribute) -> Option { - let name = own_color_space_name(attr)?; - named_space(attr, &name) -} - -fn own_color_space_name(attr: &Attribute) -> Option { - attr.metadata::("colorSpace") - .ok() - .flatten() - .and_then(decode_text) - .filter(|n| !n.is_empty()) -} - -/// `name` through the OCIO config, warning when it does not know it. -fn named_space(attr: &Attribute, name: &str) -> Option { - let space = Space::named(name); - if space.is_none() { - warning!( - ColorUnknownSpace, - at = attr.path(), - "{}: colorSpace `{name}` is not defined by the OCIO config — the value is used as \ - authored", - attr.path() - ); - } - space -} - -/// An authored colour in the working space. A value whose attribute names -/// its space with `colorSpace` metadata is converted from it; one that names -/// none is taken as already in the working space — UsdLux's "in the rendering -/// color space", and the rule every unmanaged input follows -/// ([`crate::color`]). -pub(super) fn in_working(attr: &Attribute, rgb: Vec3A, working: Space) -> Vec3A { - match attr_color_space(attr) { - Some(space) => crate::color::convert(rgb, space, working), - None => rgb, - } -} - -pub(super) fn custom_f32_array(prim: &Prim, name: &str) -> Option> { - prim_value(prim, name).and_then(decode_f32_array) -} - -pub(super) fn custom_i32_array(prim: &Prim, name: &str) -> Option> { - prim_value(prim, name).and_then(decode_i32_array) -} - -pub(super) fn attr_f32(attr: &Attribute) -> Option { - value_at(attr).and_then(decode_f32) -} - -pub(super) fn attr_f64(attr: &Attribute) -> Option { - value_at(attr).and_then(decode_f64) -} - -pub(super) fn attr_bool(attr: &Attribute) -> Option { - value_at(attr).and_then(decode_bool) -} - -pub(super) fn attr_vec3(attr: &Attribute) -> Option { - value_at(attr).and_then(decode_vec3) -} - #[cfg(test)] mod tests { use super::*; diff --git a/crates/crust-core/src/scene/usd_import/camera.rs b/crates/crust-core/src/scene/usd_import/camera.rs index b2442fa5f..a54315c85 100644 --- a/crates/crust-core/src/scene/usd_import/camera.rs +++ b/crates/crust-core/src/scene/usd_import/camera.rs @@ -1,9 +1,11 @@ //! `UsdGeomCamera` → [`Camera`]. use glam::{Mat4 as GMat4, Vec3, Vec3A}; -use openusd::sdf; -use openusd::usd::{Prim, Stage}; -use openusd_schemas::geom::{Camera as UsdCamera, CameraSchema, StageMetadata, tokens}; +use moho::openusd::sdf; +use moho::openusd::usd::Stage; +use moho::openusd_schemas; +use moho::scene_index::SceneIndex; +use moho::tokens::prim_type; use openusd_schemas::render::{AspectRatioConformPolicy, conform_aperture}; use tracing::debug; @@ -11,10 +13,9 @@ use crate::camera::{Camera, MAX_CLIP_PLANES}; use crate::tracer::RenderSettings; use crate::warning; -use super::attrs::{attr_f32, attr_f64, decode_text, value_at}; -use super::prim_at; +use super::attrs::decode_text; +use super::index::data::{PrimData, stage_metadata}; use super::products::{Framing, valid_pixel_aspect}; -use super::xform::compose_with_parent; /// One `UsdGeomCamera` as all its readers see it: [`build_camera`], which /// builds the render camera, [`screen_projection`], which adaptive @@ -56,34 +57,37 @@ struct CameraFrame { height: f32, } +/// The camera at `path` in `scene`, when the prim there is one. +fn camera_at(scene: &dyn SceneIndex, path: &sdf::Path) -> Option { + let cam = PrimData::at(scene, path); + (cam.ty() == prim_type::CAMERA).then_some(cam) +} + impl CameraFrame { - fn read( - cam: &UsdCamera, - stage: &Stage, - prim: &Prim, - settings: &RenderSettings, - framing: Framing, - ) -> Self { - let world = local_to_world(stage, prim); - let focal_length = attr_f32(&cam.focal_length_attr()).unwrap_or(50.0); - let horiz_aperture = attr_f32(&cam.horizontal_aperture_attr()).unwrap_or(20.955); + /// `cam`'s frame, its world transform `world` (the transforms still read + /// through the bridge until they move to the index, `moho-import` 5.1). + fn read(cam: &PrimData, world: GMat4, settings: &RenderSettings, framing: Framing) -> Self { + let focal_length = cam.custom_f32("focalLength").unwrap_or(50.0); + let horiz_aperture = cam.custom_f32("horizontalAperture").unwrap_or(20.955); let (w, h) = settings.get_dimensions(); let (width, height) = (w as f32, h as f32); // An unauthored vertical aperture is the schema's fallback, conformed // like any other: under `expandAperture` an image wider than // 20.955 × 15.2908 widens the horizontal aperture, as USD frames it. - let vert_aperture = - attr_f32(&cam.vertical_aperture_attr()).unwrap_or(FALLBACK_VERTICAL_APERTURE); + let vert_aperture = cam + .custom_f32("verticalAperture") + .unwrap_or(FALLBACK_VERTICAL_APERTURE); let aperture = [horiz_aperture, vert_aperture]; let (conformed, pixel_aspect) = conform(framing.policy, (w, h), framing.pixel_aspect, aperture); // USD reads a token that names no projection as perspective. - let orthographic = value_at(&cam.projection_attr()) + let orthographic = cam + .value("projection") .and_then(decode_text) .is_some_and(|p| p == "orthographic"); let offset = [ - attr_f32(&cam.horizontal_aperture_offset_attr()).unwrap_or(0.0), - attr_f32(&cam.vertical_aperture_offset_attr()).unwrap_or(0.0), + cam.custom_f32("horizontalApertureOffset").unwrap_or(0.0), + cam.custom_f32("verticalApertureOffset").unwrap_or(0.0), ]; CameraFrame { eye: world.transform_point3(Vec3::ZERO), @@ -184,7 +188,7 @@ fn conform( i32::try_from(width).unwrap_or(i32::MAX), i32::try_from(height).unwrap_or(i32::MAX), ]; - let conformed = conform_aperture(policy, resolution, pixel_aspect, aperture); + let conformed = conform_aperture(Some(policy), resolution, pixel_aspect, aperture); let (size, pixel_aspect) = (conformed.aperture_size, conformed.pixel_aspect_ratio); // A pixel aspect `adjustPixelAspectRatio` derived that no EXR can hold // (an aperture over a million times wider than the image, or a @@ -192,7 +196,7 @@ fn conform( // square-pixel frame that keeps the whole aperture, `expandAperture`. if !valid_pixel_aspect(pixel_aspect) { let size = conform_aperture( - AspectRatioConformPolicy::ExpandAperture, + Some(AspectRatioConformPolicy::ExpandAperture), resolution, 1.0, aperture, @@ -231,26 +235,29 @@ pub(super) struct CameraLens { /// The lens of the camera at `prim`, read as [`build_camera`] reads it. pub(super) fn camera_lens( + scene: &dyn SceneIndex, stage: &Stage, - prim: &Prim, + path: &sdf::Path, settings: &RenderSettings, framing: Framing, + time: Option, ) -> Option { - let cam = UsdCamera::get(stage, prim.path().clone()).ok().flatten()?; + let cam = camera_at(scene, path)?; + let world = super::xform::stage_local_to_world(stage, path, time); Some(lens( &cam, - &CameraFrame::read(&cam, stage, prim, settings, framing), + &CameraFrame::read(&cam, world, settings, framing), )) } -fn lens(cam: &UsdCamera, frame: &CameraFrame) -> CameraLens { +fn lens(cam: &PrimData, frame: &CameraFrame) -> CameraLens { CameraLens { focal_length: frame.focal_length, aperture: frame.aperture, conformed_aperture: frame.conformed, aperture_offset: frame.offset, - f_stop: attr_f32(&cam.f_stop_attr()).unwrap_or(0.0), - focus_distance: attr_f32(&cam.focus_distance_attr()).unwrap_or(10.0), + f_stop: cam.custom_f32("fStop").unwrap_or(0.0), + focus_distance: cam.custom_f32("focusDistance").unwrap_or(10.0), } } @@ -306,9 +313,9 @@ struct Clipping { refusals: ClippingRefusals, } -fn clipping(cam: &UsdCamera) -> Clipping { +fn clipping(cam: &PrimData) -> Clipping { let mut refusals = ClippingRefusals::default(); - let range = value_at(&cam.clipping_range_attr()).and_then(|v| match v { + let range = cam.value("clippingRange").and_then(|v| match v { sdf::Value::Vec2f(r) => Some([r.x, r.y]), sdf::Value::Vec2d(r) => Some([r.x as f32, r.y as f32]), _ => None, @@ -323,7 +330,7 @@ fn clipping(cam: &UsdCamera) -> Clipping { } None => (0.0, f32::INFINITY), }; - let authored: Vec<[f32; 4]> = match value_at(&cam.clipping_planes_attr()) { + let authored: Vec<[f32; 4]> = match cam.value("clippingPlanes") { Some(sdf::Value::Vec4fVec(v)) => v.iter().map(|p| [p.x, p.y, p.z, p.w]).collect(), Some(sdf::Value::Vec4dVec(v)) => v .iter() @@ -404,14 +411,17 @@ impl RenderCamera { /// The camera at `prim` and its exposure scale, `None` when `prim` is not a /// camera on `stage`. pub(super) fn build_camera( + scene: &dyn SceneIndex, stage: &Stage, - prim: &Prim, + path: &sdf::Path, settings: &RenderSettings, framing: Framing, + time: Option, ) -> Option { - let cam = UsdCamera::get(stage, prim.path().clone()).ok().flatten()?; - let frame = CameraFrame::read(&cam, stage, prim, settings, framing); - let (camera, refused_meters_per_unit) = lens_camera(&cam, stage, &frame, settings); + let cam = camera_at(scene, path)?; + let world = super::xform::stage_local_to_world(stage, path, time); + let frame = CameraFrame::read(&cam, world, settings, framing); + let (camera, refused_meters_per_unit) = lens_camera(&cam, scene, &frame, settings); let clip = clipping(&cam); let camera = camera.with_clipping(clip.near, clip.far, &clip.planes); let read = lens(&cam, &frame); @@ -449,18 +459,16 @@ impl ShutterOffsets { } } -fn offsets(cam: &UsdCamera) -> ShutterOffsets { +fn offsets(cam: &PrimData) -> ShutterOffsets { ShutterOffsets { - open: attr_f64(&cam.shutter_open_attr()).unwrap_or(0.0), - close: attr_f64(&cam.shutter_close_attr()).unwrap_or(0.0), + open: cam.custom_f64("shutter:open").unwrap_or(0.0), + close: cam.custom_f64("shutter:close").unwrap_or(0.0), } } -/// The shutter of the camera at `prim`, `None` when `prim` is not a camera -/// on `stage`. -pub(super) fn shutter_offsets(stage: &Stage, prim: &Prim) -> Option { - let cam = UsdCamera::get(stage, prim.path().clone()).ok().flatten()?; - Some(offsets(&cam)) +/// The shutter of the camera at `path`, `None` when no camera is there. +pub(super) fn shutter_offsets(scene: &dyn SceneIndex, path: &sdf::Path) -> Option { + Some(offsets(&camera_at(scene, path)?)) } /// The interval motion is measured over, read before the traversal from the @@ -526,12 +534,12 @@ impl Shutter { /// exactly 1. `exposure:fStop` is the photometric f-stop; the lens's /// depth-of-field `fStop` does not enter. Unchecked: a zero `exposure:fStop` /// gives infinity, which the import refuses once the camera is chosen. -fn exposure_scale(cam: &UsdCamera) -> f32 { - let time = attr_f32(&cam.exposure_time_attr()).unwrap_or(1.0); - let iso = attr_f32(&cam.exposure_iso_attr()).unwrap_or(100.0); - let f_stop = attr_f32(&cam.exposure_f_stop_attr()).unwrap_or(1.0); - let responsivity = attr_f32(&cam.exposure_responsivity_attr()).unwrap_or(1.0); - let exponent = attr_f32(&cam.exposure_attr()).unwrap_or(0.0); +fn exposure_scale(cam: &PrimData) -> f32 { + let time = cam.custom_f32("exposure:time").unwrap_or(1.0); + let iso = cam.custom_f32("exposure:iso").unwrap_or(100.0); + let f_stop = cam.custom_f32("exposure:fStop").unwrap_or(1.0); + let responsivity = cam.custom_f32("exposure:responsivity").unwrap_or(1.0); + let exponent = cam.custom_f32("exposure").unwrap_or(0.0); (time * iso * 2.0_f32.powf(exponent) * responsivity) / (100.0 * f_stop * f_stop) } @@ -540,16 +548,14 @@ const FALLBACK_METERS_PER_UNIT: f64 = 0.01; /// The stage's authored `metersPerUnit` (C++ `UsdGeomGetStageMetersPerUnit`, /// which reads only the root and session layers), `None` when no layer -/// authors it. Unchecked: [`lens_diameter`] refuses a value that is not a -/// length. -fn authored_meters_per_unit(stage: &Stage) -> Option { - if !stage - .has_authored_stage_metadata(tokens::METERS_PER_UNIT) - .unwrap_or(false) - { - return None; +/// authors it: the root's `__usdStageMetadata/metersPerUnit/{value, +/// authored}` (Moho's M3). Unchecked: [`lens_diameter`] refuses a value that +/// is not a length. +fn authored_meters_per_unit(scene: &dyn SceneIndex) -> Option { + match stage_metadata(scene, "metersPerUnit")? { + (sdf::Value::Double(m), true) => Some(m), + _ => None, } - stage.meters_per_unit().ok().flatten() } /// The lens diameter in scene units: `focalLength / fStop` millimetres, @@ -560,7 +566,7 @@ fn authored_meters_per_unit(stage: &Stage) -> Option { /// that is not finite, not positive, or so small that the diameter overflows /// `f32` is refused and reads as the fallback. fn lens_diameter( - stage: &Stage, + scene: &dyn SceneIndex, focal_length: f32, f_stop: f32, depth_of_field: bool, @@ -571,7 +577,7 @@ fn lens_diameter( let diameter = |meters_per_unit: f64| { (f64::from(focal_length) / f64::from(f_stop) * 0.001 / meters_per_unit) as f32 }; - match authored_meters_per_unit(stage) { + match authored_meters_per_unit(scene) { // A unit so small that the diameter overflows `f32` is no length // either: the lens would offset every ray to infinity. Some(m) if m.is_finite() && m > 0.0 && diameter(m).is_finite() => (diameter(m), None), @@ -583,8 +589,8 @@ fn lens_diameter( /// The ray-generating camera of `frame`, from its transform and lens, and /// the stage unit its lens refused. fn lens_camera( - cam: &UsdCamera, - stage: &Stage, + cam: &PrimData, + scene: &dyn SceneIndex, frame: &CameraFrame, settings: &RenderSettings, ) -> (Camera, Option) { @@ -617,7 +623,7 @@ fn lens_camera( let vfov_deg = 2.0 * frame.tan_half_vfov().atan().to_degrees(); let (aperture, refused_meters_per_unit) = - lens_diameter(stage, frame.focal_length, f_stop, settings.depth_of_field()); + lens_diameter(scene, frame.focal_length, f_stop, settings.depth_of_field()); // A pinhole has no focus plane, and USD's `focusDistance = 0` (what // GfCamera writes, and a DCC camera with focus off) would put the image // plane on the eye: every ray would have no direction. A pinhole's rays @@ -659,13 +665,16 @@ fn lens_camera( /// the aperture conformed. The same [`CameraFrame`] as [`build_camera`]'s. /// `None` when `prim` is not a camera on `stage`. pub(super) fn screen_projection( + scene: &dyn SceneIndex, stage: &Stage, - prim: &Prim, + path: &sdf::Path, settings: &RenderSettings, framing: Framing, + time: Option, ) -> Option { - let cam = UsdCamera::get(stage, prim.path().clone()).ok().flatten()?; - let frame = CameraFrame::read(&cam, stage, prim, settings, framing); + let cam = camera_at(scene, path)?; + let world = super::xform::stage_local_to_world(stage, path, time); + let frame = CameraFrame::read(&cam, world, settings, framing); if frame.orthographic { // Pixels per world unit at every distance, and the window's half // extents and centre in place of the tangents. A shifted window views @@ -765,31 +774,75 @@ pub(super) struct ScreenProjection { pub(super) centre: [f32; 2], } -/// Composed local-to-world by walking the prim path upwards. Slower than -/// tracking it during DFS, but exact and only used at build_camera time. -pub(super) fn local_to_world(stage: &Stage, prim: &Prim) -> GMat4 { - let mut ancestors: Vec = Vec::new(); - let mut cur_path = prim.path().clone(); - ancestors.push(prim_at(stage, cur_path.clone())); - while let Some(parent) = cur_path.parent() { - cur_path = parent; - ancestors.push(prim_at(stage, cur_path.clone())); - if cur_path.as_str() == "/" { - break; - } - } - ancestors.reverse(); - ancestors - .iter() - .fold(GMat4::IDENTITY, |acc, p| compose_with_parent(p, acc)) -} - #[cfg(test)] mod tests { + use super::super::prim_at; use super::*; use crate::scene::usd_import::settings::CameraChoice; use crate::scene::usd_import::{read_camera_ahead, stage_builder}; - use openusd::usd::InitialLoadSet; + use moho::openusd::usd::InitialLoadSet; + use moho::openusd::usd::Prim; + + // The readers take a scene index; these build one over the test's stage, + // so each test reads its camera as the import does. + fn scene_of(stage: &Stage) -> crate::scene::usd_import::index::Input { + crate::scene::usd_import::index::input_chain(stage.clone(), None, false) + } + + fn build_camera( + stage: &Stage, + prim: &Prim, + settings: &RenderSettings, + framing: Framing, + ) -> Option { + let scene = scene_of(stage); + super::build_camera( + scene.chain.as_ref(), + stage, + prim.path(), + settings, + framing, + None, + ) + } + + fn camera_lens( + stage: &Stage, + prim: &Prim, + settings: &RenderSettings, + framing: Framing, + ) -> Option { + let scene = scene_of(stage); + super::camera_lens( + scene.chain.as_ref(), + stage, + prim.path(), + settings, + framing, + None, + ) + } + + fn screen_projection( + stage: &Stage, + prim: &Prim, + settings: &RenderSettings, + framing: Framing, + ) -> Option { + let scene = scene_of(stage); + super::screen_projection( + scene.chain.as_ref(), + stage, + prim.path(), + settings, + framing, + None, + ) + } + + fn authored_meters_per_unit(stage: &Stage) -> Option { + super::authored_meters_per_unit(scene_of(stage).chain.as_ref()) + } /// A stage on a `.usda` holding `metadata` and nothing else. fn stage(name: &str, metadata: &str) -> Stage { @@ -830,8 +883,10 @@ mod tests { .open(path_str) .expect("stage opens"); let named = named.map(|p| CameraChoice::Requested(sdf::path(p).unwrap())); + let scene = crate::scene::usd_import::index::input_chain(index.clone(), frame, true); read_camera_ahead( &index, + scene.chain.as_ref(), &path, path_str, named.as_ref(), diff --git a/crates/crust-core/src/scene/usd_import/implicit.rs b/crates/crust-core/src/scene/usd_import/implicit.rs index 744f6ccf7..5c109c720 100644 --- a/crates/crust-core/src/scene/usd_import/implicit.rs +++ b/crates/crust-core/src/scene/usd_import/implicit.rs @@ -17,23 +17,19 @@ //! shapes" in `openspec/specs/usd-scene-import/design.md`. use crate::warning; +use moho::{openusd, openusd_schemas}; use std::collections::BTreeMap; use std::f64::consts::{FRAC_PI_2, PI, TAU}; use glam::Vec3; use openusd::gf::Vec3f; -use openusd::usd::Prim; -use openusd_schemas::geom::{ - Axis as UsdAxis, Capsule, Capsule_1, Capsule_1Schema, CapsuleSchema, Cone, ConeSchema, Cube, - CubeSchema, Cylinder, Cylinder_1, Cylinder_1Schema, CylinderSchema, Plane, PlaneSchema, -}; +use openusd_schemas::geom::Axis as UsdAxis; use tracing::debug; use super::adaptive::{Aabb, Cull, ScreenProjection}; -use super::attrs::attr_f64; +use super::index::data::PrimData; use super::materials::BoundMaterial; use super::mesh::{MeshPlace, MeshSource}; -use super::time::eval_time; /// An implicit shape's spine (`Cylinder`, `Cone`, `Capsule`) or normal /// (`Plane`) axis. @@ -444,16 +440,11 @@ pub(super) enum Shape { } /// `attr` at the render's time code, else the schema fallback `or`. -fn length_or(attr: &openusd::usd::Attribute, or: f64) -> f64 { - attr_f64(attr).unwrap_or(or) -} - /// `axis` at the render's time code, unauthored (or blocked) reading the /// schema fallback, `Z`. -fn axis_of(attr: &openusd::usd::Attribute) -> Axis { - attr.get_at::(eval_time()) - .ok() - .flatten() +fn axis_of(prim: &PrimData) -> Axis { + prim.resolved("axis") + .and_then(|v| UsdAxis::try_from(v).ok()) .unwrap_or_default() .into() } @@ -464,65 +455,59 @@ impl Shape { /// Every prim the walks do not read otherwise comes through here — each /// transform, material and shader — so one `Gprim` test turns those away /// before the seven schema tests. - pub(super) fn read(prim: &Prim) -> Option { - if !prim.is_a("Gprim").unwrap_or(false) { - return None; - } - let prim = || prim.clone(); - if let Ok(Some(s)) = Cube::from_prim(prim()) { - return Some(Shape::Cuboid { - size: length_or(&s.size_attr(), 2.0), - }); - } - if let Ok(Some(s)) = Plane::from_prim(prim()) { - return Some(Shape::Plane { - width: length_or(&s.width_attr(), 2.0), - length: length_or(&s.length_attr(), 2.0), - axis: axis_of(&s.axis_attr()), - }); - } - if let Ok(Some(s)) = Cylinder::from_prim(prim()) { - let radius = length_or(&s.radius_attr(), 1.0); - return Some(Shape::Cylinder { - r_bottom: radius, - r_top: radius, - height: length_or(&s.height_attr(), 2.0), - axis: axis_of(&s.axis_attr()), - }); - } - if let Ok(Some(s)) = Cylinder_1::from_prim(prim()) { - return Some(Shape::Cylinder { - r_bottom: length_or(&s.radius_bottom_attr(), 1.0), - r_top: length_or(&s.radius_top_attr(), 1.0), - height: length_or(&s.height_attr(), 2.0), - axis: axis_of(&s.axis_attr()), - }); - } - if let Ok(Some(s)) = Cone::from_prim(prim()) { - return Some(Shape::Cone { - radius: length_or(&s.radius_attr(), 1.0), - height: length_or(&s.height_attr(), 2.0), - axis: axis_of(&s.axis_attr()), - }); - } - if let Ok(Some(s)) = Capsule::from_prim(prim()) { - let radius = length_or(&s.radius_attr(), 0.5); - return Some(Shape::Capsule { - r_bottom: radius, - r_top: radius, - height: length_or(&s.height_attr(), 1.0), - axis: axis_of(&s.axis_attr()), - }); - } - if let Ok(Some(s)) = Capsule_1::from_prim(prim()) { - return Some(Shape::Capsule { - r_bottom: length_or(&s.radius_bottom_attr(), 0.5), - r_top: length_or(&s.radius_top_attr(), 0.5), - height: length_or(&s.height_attr(), 1.0), - axis: axis_of(&s.axis_attr()), - }); + pub(super) fn read(prim: &PrimData) -> Option { + use moho::tokens::prim_type as t; + // The Hydra type names the shape; `Cylinder_1` and `Capsule_1` share + // theirs with `Cylinder` and `Capsule`, and are told apart by the + // attributes their schema declares (`radiusBottom` for the `_1`s). + let length_or = |name: &str, or: f64| prim.custom_f64(name).unwrap_or(or); + let axis = || axis_of(prim); + match prim.ty() { + t::CUBE => Some(Shape::Cuboid { + size: length_or("size", 2.0), + }), + t::PLANE => Some(Shape::Plane { + width: length_or("width", 2.0), + length: length_or("length", 2.0), + axis: axis(), + }), + t::CYLINDER if prim.has_attribute("radiusBottom") => Some(Shape::Cylinder { + r_bottom: length_or("radiusBottom", 1.0), + r_top: length_or("radiusTop", 1.0), + height: length_or("height", 2.0), + axis: axis(), + }), + t::CYLINDER => { + let radius = length_or("radius", 1.0); + Some(Shape::Cylinder { + r_bottom: radius, + r_top: radius, + height: length_or("height", 2.0), + axis: axis(), + }) + } + t::CONE => Some(Shape::Cone { + radius: length_or("radius", 1.0), + height: length_or("height", 2.0), + axis: axis(), + }), + t::CAPSULE if prim.has_attribute("radiusBottom") => Some(Shape::Capsule { + r_bottom: length_or("radiusBottom", 0.5), + r_top: length_or("radiusTop", 0.5), + height: length_or("height", 1.0), + axis: axis(), + }), + t::CAPSULE => { + let radius = length_or("radius", 0.5); + Some(Shape::Capsule { + r_bottom: radius, + r_top: radius, + height: length_or("height", 1.0), + axis: axis(), + }) + } + _ => None, } - None } /// The largest radius of a curved shape, which its radial count is chosen @@ -794,7 +779,7 @@ impl ImplicitPolicy { /// `bound` without its displacement, which an implicit shape does not apply: /// it has no chart to displace along, and a warning names the prim. -pub(super) fn undisplaced(prim: &Prim, bound: BoundMaterial) -> BoundMaterial { +pub(super) fn undisplaced(prim: &PrimData, bound: BoundMaterial) -> BoundMaterial { if bound.displacement.is_some() { warning!( GeomImplicitDisplacement, @@ -839,7 +824,10 @@ mod tests { root.children() .expect("children") .into_iter() - .map(|p| (p.path().to_string(), Shape::read(&p))) + .map(|p| { + let data = super::super::index::data::PrimData::test_at(&stage, p.path()); + (p.path().to_string(), Shape::read(&data)) + }) .collect() } @@ -1021,7 +1009,16 @@ mod tests { .expect("stage opens"); let options = crate::UsdImportOptions::default(); let valid = ValidOptions::check(&options).expect("valid options"); - let read = read_index(&index, &path, path_str, &options, &valid).expect("index read"); + let scene = crate::scene::usd_import::index::input_chain(index.clone(), None, true); + let read = read_index( + &index, + scene.chain.as_ref(), + &path, + path_str, + &options, + &valid, + ) + .expect("index read"); assert!(read.subdiv.adaptive.is_none(), "no edge length: uniform"); (read.projection, scope.finish()) } diff --git a/crates/crust-core/src/scene/usd_import/index/data.rs b/crates/crust-core/src/scene/usd_import/index/data.rs new file mode 100644 index 000000000..e89e9cc70 --- /dev/null +++ b/crates/crust-core/src/scene/usd_import/index/data.rs @@ -0,0 +1,493 @@ +//! A prim of the scene index as the index readers see it: its Hydra type, and +//! Moho's generic attribute data (`__usdAttributes`, `__usdRelationships`), +//! read with the direct importer's authored-versus-fallback rule. +//! +//! The direct readers took an attribute's value only when a layer authored it +//! or it differed from its schema fallback (`attrs::value_at`): an unauthored +//! attribute resolves to its fallback, so that is "the value when authored". +//! [`PrimData::value`] applies the same rule to the generic data, which +//! carries each value with whether it is authored, so a reader moved onto the +//! index takes the same values as the one it replaces. The decoders are the +//! direct readers' own (`attrs::decode_*`), so the two cannot disagree on +//! which authored types they accept. + +use moho::data_source::{ContainerHandle, DataSource, locate}; +use moho::locator::Locator; +use moho::openusd::sdf; +use moho::scene_index::{SceneIndex, SceneIndexHandle}; +use moho::tokens::usd as generic; + +use super::super::attrs::{decode_bool, decode_f32, decode_i32, decode_text, decode_vec3}; + +/// One prim of a scene index, for an index reader. +#[derive(Clone)] +pub(in crate::scene::usd_import) struct PrimData { + path: sdf::Path, + ty: String, + data: Option, + /// The index the prim was read from, when the reader may walk to its + /// ancestors ([`PrimData::in_index`]). + index: Option, + /// For a prim of a prototype the instancing chain re-roots, + /// `(data root, name root)`: its data are read under Moho's propagated + /// prototype (or point-instancer copy), and it is named, in warnings and + /// provenance, under the USD prototype it comes from (`primOrigin`). + /// The path values its data hold (binding targets, connections) are left + /// as the index re-rooted them (Moho's M11). + rebase: Option<(sdf::Path, sdf::Path)>, + /// For a point instancer's copy of a prim inside a native instance (Moho's + /// M12), `(the instance's propagated prototype, the instance)`: the copy's + /// path values that name the rest of the instance (a material beside the + /// target) lie under the propagated prototype, outside the copy, and are + /// named under the instance ([`PrimData::name_of`]). + outer: Option<(sdf::Path, sdf::Path)>, +} + +impl PrimData { + /// The prim at `path` in `index`; [`PrimData::is_defined`] says whether + /// one is there. + pub(in crate::scene::usd_import) fn at(index: &dyn SceneIndex, path: &sdf::Path) -> Self { + let prim = index.prim(path); + PrimData { + path: path.clone(), + ty: prim.ty.as_str().to_owned(), + data: prim.data, + index: None, + rebase: None, + outer: None, + } + } + + /// The prim at `data` in `index`, under the re-rooted prototype at + /// `data_root`, named under `name_root`, the USD prototype it comes from + /// (see the `rebase` field). + pub(in crate::scene::usd_import) fn rebased( + index: &SceneIndexHandle, + data: &sdf::Path, + data_root: &sdf::Path, + name_root: &sdf::Path, + ) -> Self { + let path = Self::move_root(data, data_root, name_root).unwrap_or_else(|| data.clone()); + PrimData { + path, + rebase: Some((data_root.clone(), name_root.clone())), + ..PrimData::in_index(index, data) + } + } + + /// The name of `path`, a path value the prim's data hold: under the USD + /// prototype it comes from when it lies under the re-rooted one + /// ([`PrimData::rebased`]), else itself. + pub(in crate::scene::usd_import) fn name_of(&self, path: &sdf::Path) -> sdf::Path { + [&self.rebase, &self.outer] + .into_iter() + .flatten() + .find_map(|(data_root, name_root)| Self::move_root(path, data_root, name_root)) + .unwrap_or_else(|| path.clone()) + } + + /// The prim with `outer` (see the field): how a point instancer's copy of + /// a prim inside a native instance names what the instance holds. + pub(in crate::scene::usd_import) fn with_outer( + mut self, + outer: Option<(sdf::Path, sdf::Path)>, + ) -> Self { + self.outer = outer; + self + } + + /// `path` moved from under `from` to under `to`, when it lies there. + fn move_root(path: &sdf::Path, from: &sdf::Path, to: &sdf::Path) -> Option { + if path == from { + return Some(to.clone()); + } + let rest = path.as_str().strip_prefix(from.as_str())?; + if !rest.starts_with('/') { + return None; + } + sdf::Path::new(format!("{to}{rest}").as_str()).ok() + } + + /// The prim's children in the index it was read from, in the index's + /// order. + pub(in crate::scene::usd_import) fn children(&self) -> Vec { + let Some(index) = &self.index else { + return Vec::new(); + }; + if let Some((data_root, name_root)) = &self.rebase { + let data = Self::move_root(&self.path, name_root, data_root) + .unwrap_or_else(|| self.path.clone()); + return index + .children(&data) + .into_iter() + .filter(|c| c.name() != Some(moho::tokens::instancing::PROPAGATED_ROOT)) + .map(|c| { + PrimData::rebased(index, &c, data_root, name_root) + .with_outer(self.outer.clone()) + }) + .collect(); + } + index + .children(&self.path) + .into_iter() + .map(|child| PrimData::in_index(index, &child)) + .collect() + } + + /// [`PrimData::at`], keeping `index` so the reader can walk to the + /// prim's ancestors ([`PrimData::parent`]). + pub(in crate::scene::usd_import) fn in_index( + index: &SceneIndexHandle, + path: &sdf::Path, + ) -> Self { + PrimData { + index: Some(index.clone()), + ..PrimData::at(index.as_ref(), path) + } + } + + /// The prim at `path` of a scene index over `stage`, at the default time: + /// how a unit test reads a prim as the import does. + #[cfg(test)] + pub(in crate::scene::usd_import) fn test_at( + stage: &moho::openusd::usd::Stage, + path: &sdf::Path, + ) -> Self { + let input = super::input_chain(stage.clone(), None, false); + PrimData::in_index(&input.chain, path) + } + + /// The prim's parent in the index it was read from with + /// [`PrimData::in_index`]; `None` at the root or without an index. + pub(in crate::scene::usd_import) fn parent(&self) -> Option { + let parent = self.path.parent()?; + let index = self.index.as_ref()?; + if let Some((data_root, name_root)) = &self.rebase { + // Within the prototype, its re-rooted data; above its root, the + // USD prototype's own ancestors (the pseudo-root), as the stage + // walks them. + return Some(match Self::move_root(&parent, name_root, data_root) { + Some(data) => PrimData::rebased(index, &data, data_root, name_root) + .with_outer(self.outer.clone()), + None => PrimData::in_index(index, &parent), + }); + } + Some(PrimData::in_index(index, &parent)) + } + + /// The path of attribute `name`, for a warning that names it. + pub(in crate::scene::usd_import) fn attribute_path(&self, name: &str) -> String { + format!("{}.{name}", self.path) + } + + pub(in crate::scene::usd_import) fn path(&self) -> &sdf::Path { + &self.path + } + + /// Whether a prim is at the path. + #[allow(dead_code)] + pub(in crate::scene::usd_import) fn is_defined(&self) -> bool { + self.data.is_some() + } + + /// The Hydra prim type (`renderSettings`, `mesh`, …), empty for none. + pub(in crate::scene::usd_import) fn ty(&self) -> &str { + &self.ty + } + + /// The USD prim type name (`Shader`, `Xform`), empty for a typeless prim: + /// `__usdPrimInfo/typeName` (Hydra's `UsdImagingUsdPrimInfoSchema`, + /// Moho's M8), for a reader the Hydra type does not tell enough. + pub(in crate::scene::usd_import) fn usd_type(&self) -> String { + use moho::tokens::usd_prim_info as info; + match self + .locate([info::USD_PRIM_INFO, info::TYPE_NAME]) + .and_then(|d| d.value()) + { + Some(sdf::Value::Token(t)) => t.as_str().to_owned(), + Some(sdf::Value::String(s)) => s, + _ => String::new(), + } + } + + /// Whether the prim's USD type is `schema` or derives from it, as the + /// schema registry says (`UsdPrim::IsA`): the typed views' `get`. + pub(in crate::scene::usd_import) fn is_a(&self, schema: &str) -> bool { + let ty = self.usd_type(); + !ty.is_empty() + && moho::openusd_schemas::schema_registry().is_a( + &moho::openusd::tf::Token::from(ty.as_str()), + &moho::openusd::tf::Token::from(schema), + ) + } + + /// The API schemas applied to the prim (`ShapingAPI`, `CollectionAPI:x`): + /// `__usdPrimInfo/apiSchemas` (Moho's M8). + pub(in crate::scene::usd_import) fn api_schemas(&self) -> Vec { + use moho::tokens::usd_prim_info as info; + match self + .locate([info::USD_PRIM_INFO, info::API_SCHEMAS]) + .and_then(|d| d.value()) + { + Some(sdf::Value::TokenVec(v)) => v.iter().map(|t| t.as_str().to_owned()).collect(), + Some(sdf::Value::StringVec(v)) => v, + _ => Vec::new(), + } + } + + /// The index the prim was read from with [`PrimData::in_index`], if any. + pub(in crate::scene::usd_import) fn index(&self) -> Option<&SceneIndexHandle> { + self.index.as_ref() + } + + /// The data source at `locator` under the prim. + pub(in crate::scene::usd_import) fn locate( + &self, + locator: [&str; N], + ) -> Option { + locate(self.data.as_ref()?, &Locator::new(locator)) + } + + /// The generic entry of attribute `name`, when the prim has it. + fn attribute(&self, name: &str) -> Option { + self.locate([generic::ATTRIBUTES, name])? + .as_container() + .cloned() + } + + /// Whether the prim has attribute `name` (authored, or declared by its + /// schema). + pub(in crate::scene::usd_import) fn has_attribute(&self, name: &str) -> bool { + self.attribute(name).is_some() + } + + /// Whether a layer authors attribute `name`'s value. + pub(in crate::scene::usd_import) fn authored(&self, name: &str) -> bool { + self.attribute(name) + .and_then(|a| a.get(&generic::AUTHORED.into())) + .and_then(|d| d.value()) + .is_some_and(|v| matches!(v, sdf::Value::Bool(true))) + } + + /// Attribute `name`'s value at the index's time when a layer authors it, + /// else `None` — the direct readers' `value_at`: an unauthored attribute + /// resolves to its schema fallback, which the readers take as + /// "unauthored". + pub(in crate::scene::usd_import) fn value(&self, name: &str) -> Option { + if !self.authored(name) { + return None; + } + self.attribute(name)?.get(&generic::VALUE.into())?.value() + } + + /// Whether attribute `name`'s value might differ at another time + /// (`UsdAttribute::ValueMightBeTimeVarying`): its generic + /// `mightBeTimeVarying` (Moho's M9), which needs no index time. + pub(in crate::scene::usd_import) fn might_vary(&self, name: &str) -> bool { + self.attribute(name) + .and_then(|a| a.get(&generic::MIGHT_BE_TIME_VARYING.into())) + .and_then(|d| d.value()) + .is_some_and(|v| matches!(v, sdf::Value::Bool(true))) + } + + /// Attribute `name`'s value at the index's time, authored or its schema + /// fallback — a typed read (`Attribute::get_at`), not `value_at`. + pub(in crate::scene::usd_import) fn resolved(&self, name: &str) -> Option { + self.attribute(name)?.get(&generic::VALUE.into())?.value() + } + + /// Attribute `name`'s metadatum `key` (`interpolation`, `elementSize`, + /// `colorSpace`), when authored. + pub(in crate::scene::usd_import) fn metadata( + &self, + name: &str, + key: &str, + ) -> Option { + self.attribute(name)?.get(&key.into())?.value() + } + + /// Attribute `name`'s value type name (`normal3f[]`, `color3f`), empty + /// when the prim has no such attribute. + pub(in crate::scene::usd_import) fn type_name(&self, name: &str) -> String { + match self + .attribute(name) + .and_then(|a| a.get(&generic::TYPE_NAME.into())) + .and_then(|d| d.value()) + { + Some(sdf::Value::Token(t)) => t.as_str().to_owned(), + Some(sdf::Value::String(s)) => s, + _ => String::new(), + } + } + + pub(in crate::scene::usd_import) fn custom_i32_array(&self, name: &str) -> Option> { + self.value(name) + .and_then(super::super::attrs::decode_i32_array) + } + + pub(in crate::scene::usd_import) fn custom_f32_array(&self, name: &str) -> Option> { + self.value(name) + .and_then(super::super::attrs::decode_f32_array) + } + + /// A colour attribute in the working space: `attrs::custom_color`, its + /// space from [`color_space`]. + pub(in crate::scene::usd_import) fn custom_color( + &self, + name: &str, + working: crate::color::Space, + ) -> Option { + let rgb = self.value(name).and_then(decode_vec3)?; + Some(match color_space(self, name) { + Some(space) => crate::color::convert(rgb, space, working), + None => rgb, + }) + } + + pub(in crate::scene::usd_import) fn custom_i32(&self, name: &str) -> Option { + self.value(name).and_then(decode_i32) + } + + pub(in crate::scene::usd_import) fn custom_f32(&self, name: &str) -> Option { + self.value(name).and_then(decode_f32) + } + + pub(in crate::scene::usd_import) fn custom_f64(&self, name: &str) -> Option { + self.value(name).and_then(super::super::attrs::decode_f64) + } + + pub(in crate::scene::usd_import) fn custom_bool(&self, name: &str) -> Option { + self.value(name).and_then(decode_bool) + } + + pub(in crate::scene::usd_import) fn custom_token(&self, name: &str) -> Option { + self.value(name).and_then(decode_text) + } + + #[allow(dead_code)] + pub(in crate::scene::usd_import) fn custom_color3(&self, name: &str) -> Option { + self.value(name).and_then(decode_vec3) + } + + /// The connections attribute `name` authors, each a property path. + pub(in crate::scene::usd_import) fn connections(&self, name: &str) -> Vec { + match self.metadata(name, generic::CONNECTIONS) { + Some(sdf::Value::PathVec(targets)) => targets, + _ => Vec::new(), + } + } + + /// The names of the prim's attributes, the schema's declared ones + /// included, in the order the prim lists them. + pub(in crate::scene::usd_import) fn attribute_names(&self) -> Vec { + self.locate([generic::ATTRIBUTES]) + .and_then(|d| d.as_container().map(|c| c.names())) + .unwrap_or_default() + .into_iter() + .map(|n| n.as_str().to_owned()) + .collect() + } + + /// The forwarded targets of relationship `name` (a target that is itself a + /// relationship replaced by its targets), empty when it has none. + pub(in crate::scene::usd_import) fn forwarded_targets(&self, name: &str) -> Vec { + match self + .locate([generic::RELATIONSHIPS, name, generic::FORWARDED_TARGETS]) + .and_then(|d| d.value()) + { + Some(sdf::Value::PathVec(targets)) => targets, + _ => Vec::new(), + } + } + + /// Whether the prim has relationship `name`. + pub(in crate::scene::usd_import) fn has_relationship(&self, name: &str) -> bool { + self.locate([generic::RELATIONSHIPS, name]).is_some() + } + + /// The targets of relationship `name`, empty when it has none or the prim + /// has no such relationship. + pub(in crate::scene::usd_import) fn targets(&self, name: &str) -> Vec { + match self + .locate([generic::RELATIONSHIPS, name, generic::TARGETS]) + .and_then(|d| d.value()) + { + Some(sdf::Value::PathVec(targets)) => targets, + _ => Vec::new(), + } + } +} + +/// The stage metadatum `field` from the absolute root's `__usdStageMetadata` +/// (Moho's M3), with whether a layer authors it. +pub(in crate::scene::usd_import) fn stage_metadata( + index: &dyn SceneIndex, + field: &str, +) -> Option<(sdf::Value, bool)> { + let root = PrimData::at(index, &sdf::Path::abs_root()); + let value = root + .locate([generic::STAGE_METADATA, field, generic::VALUE])? + .value()?; + let authored = matches!( + root.locate([generic::STAGE_METADATA, field, generic::AUTHORED]) + .and_then(|d| d.value()), + Some(sdf::Value::Bool(true)) + ); + Some((value, authored)) +} + +/// The colour space attribute `name` of `prim` is authored in, as +/// `attrs::attr_color_space` resolves it on the stage: the attribute's own +/// `colorSpace` metadatum, else the `colorSpace:name` of its prim, else of +/// the nearest ancestor that authors one (walked in the index `prim` was read +/// from, [`PrimData::in_index`]) — through the OCIO config. A name the config +/// does not know is refused with a warning, and is `None` too. +pub(in crate::scene::usd_import) fn color_space( + prim: &PrimData, + name: &str, +) -> Option { + let own = prim + .metadata(name, generic::COLOR_SPACE) + .and_then(decode_text) + .filter(|n| !n.is_empty()); + let named = own.or_else(|| { + let mut at = Some(prim.clone()); + while let Some(p) = at.filter(|p| !p.path.is_abs_root()) { + let named = p + .value("colorSpace:name") + .and_then(decode_text) + .filter(|n| !n.is_empty()); + if named.is_some() { + return named; + } + at = p.parent(); + } + None + })?; + let space = crate::color::Space::named(&named); + if space.is_none() { + let at = prim.attribute_path(name); + crate::warning!( + ColorUnknownSpace, + at = at.as_str(), + "{at}: colorSpace `{named}` is not defined by the OCIO config — the value is used as \ + authored" + ); + } + space +} + +/// `crust:rayMask` — `attrs::prim_ray_mask` read from the generic data. +pub(in crate::scene::usd_import) fn ray_mask(prim: &PrimData) -> crate::ray::RayMask { + prim.custom_i32("crust:rayMask") + .map(|m| crate::ray::RayMask(m as u32)) + .unwrap_or(crate::ray::MASK_ALL) +} + +/// `crust:motion:translate` — `attrs::prim_motion_translate` read from the +/// generic data. +pub(in crate::scene::usd_import) fn motion_translate(prim: &PrimData) -> Option { + prim.value("crust:motion:translate") + .and_then(decode_vec3) + .map(|v| glam::Vec3::new(v.x, v.y, v.z)) +} diff --git a/crates/crust-core/src/scene/usd_import/index/instancers.rs b/crates/crust-core/src/scene/usd_import/index/instancers.rs new file mode 100644 index 000000000..0fb21cf1f --- /dev/null +++ b/crates/crust-core/src/scene/usd_import/index/instancers.rs @@ -0,0 +1,58 @@ +//! Moho's instancers, as the instancing reader finds them in an input's +//! instancing chain ([`super::Input::chain`]): a native instance's propagated +//! prototype (`instance` → its instancer's `instancerTopology`), and a +//! point instancer's prototype copies (`ForInstancer`, in the order of +//! its `prototypes` targets), as UsdImaging's prototype propagation names +//! them. + +use moho::openusd::sdf; +use moho::scene_index::SceneIndex; +use moho::tokens::instancing as t; + +use super::data::PrimData; + +fn paths(value: Option) -> Vec { + match value { + Some(sdf::Value::PathVec(v)) => v, + _ => Vec::new(), + } +} + +/// The prototype root the native instance at `path` places: its +/// instancer's `instancerTopology/prototypes` entry at its +/// `prototypeIndex` — Moho's `MohoNiPropagatedPrototypes///prototype`. +pub(in crate::scene::usd_import) fn native_prototype( + inst: &dyn SceneIndex, + path: &sdf::Path, +) -> Option { + let prim = PrimData::at(inst, path); + let instancer = paths( + prim.locate([t::INSTANCE, t::INSTANCER]) + .and_then(|d| d.value()), + ) + .pop()?; + let index = match prim + .locate([t::INSTANCE, t::PROTOTYPE_INDEX]) + .and_then(|d| d.value()) + { + Some(sdf::Value::Int(i)) => usize::try_from(i).ok()?, + _ => 0, + }; + instancer_prototypes(inst, &instancer) + .into_iter() + .nth(index) +} + +/// The prototypes the instancer at `path` places, as its +/// `instancerTopology/prototypes` names them: a point instancer's +/// `ForInstancer` copies, in its `prototypes` targets' order. +pub(in crate::scene::usd_import) fn instancer_prototypes( + inst: &dyn SceneIndex, + path: &sdf::Path, +) -> Vec { + paths( + PrimData::at(inst, path) + .locate([t::INSTANCER_TOPOLOGY, t::PROTOTYPES]) + .and_then(|d| d.value()), + ) +} diff --git a/crates/crust-core/src/scene/usd_import/index/mod.rs b/crates/crust-core/src/scene/usd_import/index/mod.rs new file mode 100644 index 000000000..94579d1fa --- /dev/null +++ b/crates/crust-core/src/scene/usd_import/index/mod.rs @@ -0,0 +1,233 @@ +//! The import through Moho, the Hydra-2.0-style scene index over openusd +//! (the `moho-import` change): the scene indices the import reads a stage +//! through, and the walk over them ([`walk`]). +//! +//! # Layout (design D4) +//! +//! - **One stage** (fewer than [`MIN_STREAM_CHUNKS`](super::MIN_STREAM_CHUNKS) +//! subtrees, or `CRUST_STREAM_IMPORT=0`): one [`Input`] over the `LoadAll` +//! stage, light linking over it with the stage as membership oracle — the +//! shape of `moho::chain::standard`. +//! - **Streamed**: light linking over a `MergingSceneIndex` (the shape of +//! `moho::chain::merged`), whose weakest, permanent input is the payload-free +//! scene, and to which each chunk's masked stage is added in turn, walked and +//! removed ([`Streamed`]). +//! +//! Crust opens every stage itself, with its own `stage_builder()` (the schema +//! registry, the `mmap` resolver), and hands it to the index. openusd is named +//! through Moho's re-exports here, so the types that cross the Moho boundary +//! are visible as such (design D2). +//! +//! # What is read where +//! +//! Every input's chain is `moho::chain::input` ([`input_chain`]), the +//! instancing filters included, under a top of `chain::standard`'s or +//! `chain::merged`'s shape; prototypes are read at Moho's propagated paths. +//! Every reader reads the scene index alone; what is not imaging data is +//! read off the stage in one place, [`stage_facts`] (design D7). + +use std::rc::Rc; + +use moho::filter::{LightLinkingSceneIndex, MaterialNodeResolvingSceneIndex, MergingSceneIndex}; +use moho::openusd::sdf; +use moho::openusd::usd::{Stage, TimeCode}; +use moho::scene_index::{CollectionMembership, SceneIndexHandle}; +use moho::stage::StageSceneIndex; + +pub(super) mod data; +pub(super) mod instancers; +pub(super) mod network; +pub(super) mod stage_facts; +pub(super) mod walk; + +/// One input of the import: a stage's scene index and the chain over it. +pub(super) struct Input { + /// The stage index, which owns the stage while the input lives. + pub(super) stage: Rc, + /// `moho::chain::input` over it: the native and point instancing + /// filters, flattening, material binding resolution and render settings + /// flattening. + pub(super) chain: SceneIndexHandle, +} + +/// The input over `stage`, at the import's `time` (`None` reads default +/// values: the index's time is then left unset, which is Moho's default time). +/// `include_unloaded` exposes the prims of unloaded payloads, as the +/// payload-free scene input needs to hold each chunk's root. +pub(super) fn input_chain(stage: Stage, time: Option, include_unloaded: bool) -> Input { + let index = StageSceneIndex::new(); + index.set_include_unloaded_prims(include_unloaded); + if let Some(t) = time { + index.set_time(TimeCode::new(t)); + } + index.set_stage(stage); + let chain = moho::chain::input(index.clone()); + Input { + stage: index, + chain, + } +} + +/// A single-stage import's index: one input with light linking over it, +/// judged by the stage, and the material-node resolution last +/// (`moho::chain::standard`'s shape). +pub(super) struct Single { + pub(super) input: Input, + /// The top of the chain: what the material readers read, and every + /// reader once the families move. + pub(super) top: SceneIndexHandle, +} + +impl Single { + pub(super) fn new(stage: Stage, time: Option) -> Self { + let input = input_chain(stage, time, false); + let membership: Rc = input.stage.clone(); + let top = MaterialNodeResolvingSceneIndex::new(LightLinkingSceneIndex::new( + input.chain.clone(), + Some(membership), + )); + Single { input, top } + } +} + +/// A streamed import's index: light linking over a merging index of the +/// payload-free scene input and the chunk being walked, and the +/// material-node resolution last, which fills a network's node outside the +/// chunk from the merged inputs (`moho::chain::merged`'s shape). +pub(super) struct Streamed { + merging: Rc, + /// The scene input, weakest and permanent. + scene: Input, + /// The side input (design D4): a stage masked to the prims the chunks + /// depend on and no input holds (`moho::streaming::unresolved`), + /// weaker than the chunk and stronger than the scene input, with what + /// its stage is masked to. + side: std::cell::RefCell)>>, + /// The top of the chain: what the material readers read, and every + /// reader once the families move. + pub(super) top: SceneIndexHandle, + time: Option, +} + +impl Streamed { + /// Over the payload-free scene input ([`input_chain`] over the import's + /// index stage, unloaded prims included). + pub(super) fn new(scene: Input, time: Option) -> Self { + let merging = MergingSceneIndex::new(); + merging.add_input_scene(scene.chain.clone(), sdf::Path::abs_root()); + let input: SceneIndexHandle = merging.clone(); + let top = MaterialNodeResolvingSceneIndex::new(LightLinkingSceneIndex::new(input, None)); + Streamed { + merging, + scene, + side: std::cell::RefCell::new(None), + top, + time, + } + } + + /// Adds the chunk at `root`, read from its masked `stage`, as the + /// strongest input. + pub(super) fn add_chunk(&self, stage: Stage, root: &sdf::Path) -> Input { + let chunk = input_chain(stage, self.time, false); + self.merging + .insert_input_scene(0, chunk.chain.clone(), root.clone()); + chunk + } + + /// Removes a chunk added by [`Streamed::add_chunk`]; its stage is freed + /// when the returned input is dropped. + pub(super) fn remove_chunk(&self, chunk: &Input) { + self.merging.remove_input_scene(&chunk.chain); + } + + /// Grows the side input until the merged index holds everything the + /// chunk just added depends on, or a round resolves nothing new: each + /// round opens a stage (`open`) masked to what the side stage held and + /// to every unresolved path not under it, and replaces the side input + /// with one over that stage, inserted after the chunk. A path no stage + /// holds (a dangling binding) stays unresolved and, once masked in, + /// opens nothing more. At most `rounds` opens per chunk. Returns the + /// side stage and its mask when they changed. + pub(super) fn resolve_outside( + &self, + rounds: usize, + open: &dyn Fn(Vec) -> Option, + ) -> Option<(Stage, Vec)> { + let mut changed = None; + for _ in 0..rounds { + let mask: Vec = self + .side + .borrow() + .as_ref() + .map(|(_, m)| m.clone()) + .unwrap_or_default(); + let covered = |p: &sdf::Path| mask.iter().any(|m| p.has_prefix(m)); + let missing: Vec = moho::streaming::unresolved(self.merging.as_ref()) + .into_iter() + .filter(|p| !covered(p)) + .collect(); + if missing.is_empty() { + break; + } + let mut paths = mask.clone(); + paths.extend(missing); + paths.sort(); + paths.dedup(); + let Some(stage) = open(paths.clone()) else { + break; + }; + let input = input_chain(stage.clone(), self.time, false); + if let Some((old, _)) = self.side.borrow_mut().take() { + self.merging.remove_input_scene(&old.chain); + } + // After the chunk (position 0), before the scene input. + self.merging + .insert_input_scene(1, input.chain.clone(), sdf::Path::abs_root()); + *self.side.borrow_mut() = Some((input, paths.clone())); + changed = Some((stage, paths)); + } + changed + } + + /// Removes the side input, after the last chunk. + pub(super) fn remove_side(&self) { + if let Some((old, _)) = self.side.borrow_mut().take() { + self.merging.remove_input_scene(&old.chain); + } + } + + /// The scene input, for the stage facts and the materials it holds. + pub(super) fn scene(&self) -> &Input { + &self.scene + } +} + +#[cfg(test)] +mod tests { + use super::*; + + /// The Cornell box read through the bridge chain lists its prims with + /// their Hydra types. + #[test] + fn the_cornell_box_lists_its_prims_with_hydra_types() { + let path = concat!(env!("CARGO_MANIFEST_DIR"), "/../../samples/cornellbox.usda"); + let stage = super::super::stage_builder() + .load(moho::openusd::usd::InitialLoadSet::LoadAll) + .open(path) + .expect("the Cornell box opens"); + let single = Single::new(stage, None); + let mut types = std::collections::BTreeMap::::new(); + let mut stack = vec![sdf::Path::abs_root()]; + while let Some(path) = stack.pop() { + let ty = single.top.prim(&path).ty; + if !ty.as_str().is_empty() { + *types.entry(ty.as_str().to_owned()).or_default() += 1; + } + stack.extend(single.top.children(&path)); + } + assert!(types.get("mesh").is_some_and(|n| *n >= 5), "{types:?}"); + assert_eq!(types.get("camera"), Some(&1), "{types:?}"); + assert!(types.contains_key("material"), "{types:?}"); + } +} diff --git a/crates/crust-core/src/scene/usd_import/index/network.rs b/crates/crust-core/src/scene/usd_import/index/network.rs new file mode 100644 index 000000000..0ebf9840f --- /dev/null +++ b/crates/crust-core/src/scene/usd_import/index/network.rs @@ -0,0 +1,384 @@ +//! A material's shading networks as the scene index gives them: Moho's +//! `material` data source, Hydra's material network schema — per render +//! context, the shader nodes reachable from the terminals, each with its +//! identifier, its parameters (the values its authored inputs carry, a +//! connection to an interface input followed) and its input connections to +//! upstream nodes' outputs. +//! +//! The readers that build Crust's materials (`preview`, `mtlx_network`, +//! `materials`) walk these networks, and read a node's own attributes, where +//! the direct readers read the shader input itself rather than what it is +//! connected to, from the node prim's generic data ([`Network::prim`]). + +use std::collections::{BTreeMap, HashSet}; + +use moho::data_source::{ContainerHandle, DataSource}; +use moho::openusd::sdf; +use moho::tokens::material as t; + +use super::data::PrimData; + +/// A node's input connection: the upstream node's name and output. +#[derive(Clone, Debug, PartialEq, Eq)] +pub(in crate::scene::usd_import) struct Connection { + pub(in crate::scene::usd_import) node: String, + pub(in crate::scene::usd_import) output: String, +} + +/// A node parameter: the value an authored input carries (an interface +/// input's, when connected to one), its type name and its value attribute's +/// own `colorSpace`. +#[derive(Clone, Debug, Default)] +pub(in crate::scene::usd_import) struct Parameter { + pub(in crate::scene::usd_import) value: Option, + #[allow(dead_code)] + pub(in crate::scene::usd_import) type_name: Option, + pub(in crate::scene::usd_import) color_space: Option, + /// For a value graph ([`graph`]) only: the graph's own interface input + /// the parameter is connected to, a channel the host supplies per + /// evaluation, `value` its default. + pub(in crate::scene::usd_import) interface: Option, +} + +/// One shader node. +#[derive(Clone, Debug, Default)] +pub(in crate::scene::usd_import) struct Node { + /// `info:id`, empty when the shader authors none. + pub(in crate::scene::usd_import) id: String, + pub(in crate::scene::usd_import) parameters: BTreeMap, + pub(in crate::scene::usd_import) connections: BTreeMap>, +} + +/// One render context's network. +#[derive(Clone, Debug, Default)] +pub(in crate::scene::usd_import) struct Network { + /// The material prim the network belongs to. + pub(in crate::scene::usd_import) material: sdf::Path, + /// By node name: the node's path relative to the material, or its stage + /// path when it lies outside the material. + pub(in crate::scene::usd_import) nodes: BTreeMap, + /// By terminal (`surface`, `displacement`, `volume`). + pub(in crate::scene::usd_import) terminals: BTreeMap, +} + +fn container(source: Option) -> Option { + source?.as_container().cloned() +} + +fn token(source: Option) -> Option { + match source?.value()? { + sdf::Value::Token(t) => Some(t.as_str().to_owned()), + sdf::Value::String(s) => Some(s), + _ => None, + } +} + +fn connection(source: &ContainerHandle) -> Option { + Some(Connection { + node: token(source.get(&t::UPSTREAM_NODE_PATH.into()))?, + output: token(source.get(&t::UPSTREAM_NODE_OUTPUT_NAME.into()))?, + }) +} + +fn node(source: &ContainerHandle) -> Node { + let mut node = Node { + id: token(source.get(&t::NODE_IDENTIFIER.into())).unwrap_or_default(), + ..Node::default() + }; + if let Some(parameters) = container(source.get(&t::PARAMETERS.into())) { + for name in parameters.names() { + let Some(p) = container(parameters.get(&name)) else { + continue; + }; + node.parameters.insert( + name.as_str().to_owned(), + Parameter { + value: p.get(&t::VALUE.into()).and_then(|d| d.value()), + type_name: token(p.get(&t::TYPE_NAME.into())), + color_space: token(p.get(&t::COLOR_SPACE.into())), + interface: None, + }, + ); + } + } + if let Some(connections) = container(source.get(&t::INPUT_CONNECTIONS.into())) { + for name in connections.names() { + let Some(links) = connections.get(&name).and_then(|d| d.as_vector().cloned()) else { + continue; + }; + let links: Vec = (0..links.len()) + .filter_map(|i| container(links.get(i))) + .filter_map(|c| connection(&c)) + .collect(); + node.connections.insert(name.as_str().to_owned(), links); + } + } + node +} + +/// The networks of the material `material`, by render context (`""` the +/// universal one); empty for a prim that is not a material. +pub(in crate::scene::usd_import) fn networks(material: &PrimData) -> BTreeMap { + let mut out = BTreeMap::new(); + let Some(contexts) = container(material.locate([t::MATERIAL])) else { + return out; + }; + for context in contexts.names() { + let Some(network) = container(contexts.get(&context)) else { + continue; + }; + let mut n = Network { + material: material.path().clone(), + ..Network::default() + }; + if let Some(nodes) = container(network.get(&t::NODES.into())) { + for name in nodes.names() { + if let Some(source) = container(nodes.get(&name)) { + n.nodes.insert(name.as_str().to_owned(), node(&source)); + } + } + } + if let Some(terminals) = container(network.get(&t::TERMINALS.into())) { + for name in terminals.names() { + if let Some(c) = container(terminals.get(&name)).and_then(|c| connection(&c)) { + n.terminals.insert(name.as_str().to_owned(), c); + } + } + } + out.insert(context.as_str().to_owned(), n); + } + out +} + +impl Network { + /// The stage path of the node named `name`. + pub(in crate::scene::usd_import) fn path(&self, name: &str) -> Option { + if name.starts_with('/') { + sdf::Path::new(name).ok() + } else { + sdf::Path::new(format!("{}/{name}", self.material).as_str()).ok() + } + } + + /// The node named `name`'s prim, for its own attributes, read by `at` + /// (the walked index, through the bridge where the material is named + /// inside an instance). + pub(in crate::scene::usd_import) fn prim( + &self, + at: &dyn Fn(&sdf::Path) -> PrimData, + name: &str, + ) -> Option { + Some(at(&self.path(name)?)) + } + + /// The node a terminal reads, with its name. + pub(in crate::scene::usd_import) fn terminal(&self, terminal: &str) -> Option<(&str, &Node)> { + let c = self.terminals.get(terminal)?; + self.nodes + .get_key_value(&c.node) + .map(|(k, v)| (k.as_str(), v)) + } +} + +/// The terminal `terminal` resolved over `contexts` in order, the universal +/// context last when not listed (`UsdShadeMaterial::ComputeSurfaceSource`): +/// the first context with that terminal commits, and its node is `None` +/// when the terminal's source is no shader. +pub(in crate::scene::usd_import) fn resolve<'a>( + networks: &'a BTreeMap, + terminal: &str, + contexts: &[&str], +) -> Option<(&'a Network, Option<(&'a str, &'a Node)>)> { + let universal_listed = contexts.contains(&""); + contexts + .iter() + .copied() + .chain((!universal_listed).then_some("")) + .find_map(|context| { + let network = networks.get(context)?; + network + .terminals + .contains_key(terminal) + .then(|| (network, network.terminal(terminal))) + }) +} + +/// How many forwarding hops (graph outputs, interface inputs) one connection +/// of a value graph may take before the walk gives up on it: a cycle, in +/// practice. +const MAX_HOPS: usize = 32; + +/// What a value graph's `outputs:` reads. +#[derive(Clone, Debug)] +pub(in crate::scene::usd_import) enum GraphOutput { + /// A shader node's output. + Node(Connection), + /// A value: the output's own, an interface input's, or (with + /// [`Parameter::interface`]) the graph's interface channel. + Value(Parameter), +} + +/// A `NodeGraph` read as a value graph (a sample filter's): its shader nodes, +/// as a material [`Network`] holds them (named by stage path), and its +/// outputs. +#[derive(Clone, Debug, Default)] +pub(in crate::scene::usd_import) struct Graph { + pub(in crate::scene::usd_import) network: Network, + /// Each `outputs:`, by attribute path: the name, its USD type and + /// what it reads. + pub(in crate::scene::usd_import) outputs: Vec<(String, String, GraphOutput)>, + /// What could not be followed, for one warning per graph. + pub(in crate::scene::usd_import) reported: Vec, +} + +/// The value graph at `graph`, read from the prims' generic data +/// (`__usdAttributes`): a sample filter's graph is no material, so the +/// scene index gives it no `material` network. Connections are followed as +/// a material network's are (`UsdShadeConnectableAPI`'s value-producing +/// attributes: through `NodeGraph` outputs and interface inputs to a shader +/// output or a value), except that one to the graph's own interface input +/// is that channel ([`Parameter::interface`]). A node is a prim whose USD +/// type is `Shader` (`__usdPrimInfo/typeName`). +pub(in crate::scene::usd_import) fn graph( + at: &dyn Fn(&sdf::Path) -> PrimData, + graph: &sdf::Path, +) -> Graph { + let prim = at(graph); + let mut walk = GraphWalk { + at, + graph: graph.clone(), + active: HashSet::new(), + out: Graph { + network: Network { + material: graph.clone(), + ..Network::default() + }, + ..Graph::default() + }, + }; + let mut names: Vec = prim + .attribute_names() + .into_iter() + .filter(|n| n.starts_with("outputs:")) + .collect(); + names.sort_by_key(|n| prim.attribute_path(n)); + for full in names { + let Some(name) = full.strip_prefix("outputs:") else { + continue; + }; + let usd_type = prim.type_name(&full); + match walk.resolve(&prim, &full, 0) { + Some(output) => walk.out.outputs.push((name.to_owned(), usd_type, output)), + None => walk + .out + .reported + .push(format!("{graph}.outputs:{name}: connects to nothing")), + } + } + walk.out +} + +struct GraphWalk<'a> { + at: &'a dyn Fn(&sdf::Path) -> PrimData, + graph: sdf::Path, + /// Shader prims being walked, for cycle detection. + active: HashSet, + out: Graph, +} + +impl GraphWalk<'_> { + /// Where attribute `name` of `prim` leads: an upstream shader output, a + /// value, or the graph's interface channel. `None` when it leads nowhere + /// (an unconnected, unauthored input; a cycle). + fn resolve(&mut self, prim: &PrimData, name: &str, hops: usize) -> Option { + let Some(target) = prim.connections(name).into_iter().next() else { + // An input or output with no connection forwards its own value, + // if it has one. + return prim.value(name).map(|value| { + GraphOutput::Value(Parameter { + value: Some(value), + type_name: Some(prim.type_name(name)).filter(|t| !t.is_empty()), + color_space: color_space_of(prim, name), + interface: None, + }) + }); + }; + if hops >= MAX_HOPS { + self.out.reported.push(format!( + "{}: connection chain too long — cut", + prim.attribute_path(name) + )); + return None; + } + let (prim_path, prop) = target.split_property()?; + let prop = prop.to_owned(); + let upstream = (self.at)(&prim_path); + if prim_path == self.graph + && let Some(channel) = prop.strip_prefix("inputs:") + { + return Some(GraphOutput::Value(Parameter { + value: upstream.value(&prop), + type_name: Some(upstream.type_name(&prop)).filter(|t| !t.is_empty()), + color_space: color_space_of(&upstream, &prop), + interface: Some(channel.to_owned()), + })); + } + match prop.strip_prefix("outputs:") { + Some(output) if upstream.usd_type() == "Shader" => { + let node = self.node(&upstream)?; + Some(GraphOutput::Node(Connection { + node, + output: output.to_owned(), + })) + } + // A container's output or interface input forwards whatever it + // is connected to, or its own value. + _ => self.resolve(&upstream, &prop, hops + 1), + } + } + + /// The node for the shader prim `prim`, walking it (and everything + /// upstream of it) on first use; its name is its stage path. + fn node(&mut self, prim: &PrimData) -> Option { + let name = prim.path().to_string(); + if self.out.network.nodes.contains_key(&name) { + return Some(name); + } + if !self.active.insert(name.clone()) { + self.out + .reported + .push(format!("{name}: connection cycle — cut")); + return None; + } + let mut node = Node { + id: prim.custom_token("info:id").unwrap_or_default(), + ..Node::default() + }; + for full in prim.attribute_names() { + let Some(input) = full.strip_prefix("inputs:") else { + continue; + }; + match self.resolve(prim, &full, 0) { + Some(GraphOutput::Node(c)) => { + node.connections.insert(input.to_owned(), vec![c]); + } + Some(GraphOutput::Value(p)) => { + node.parameters.insert(input.to_owned(), p); + } + None => {} + } + } + self.active.remove(&name); + self.out.network.nodes.insert(name.clone(), node); + Some(name) + } +} + +/// Attribute `name`'s own authored `colorSpace`. +fn color_space_of(prim: &PrimData, name: &str) -> Option { + match prim.metadata(name, moho::tokens::usd::COLOR_SPACE)? { + sdf::Value::Token(t) => Some(t.as_str().to_owned()), + sdf::Value::String(s) => Some(s), + _ => None, + } +} diff --git a/crates/crust-core/src/scene/usd_import/index/stage_facts.rs b/crates/crust-core/src/scene/usd_import/index/stage_facts.rs new file mode 100644 index 000000000..d4244e84e --- /dev/null +++ b/crates/crust-core/src/scene/usd_import/index/stage_facts.rs @@ -0,0 +1,400 @@ +//! What the import reads from a stage that is not scene description (design +//! D7), kept in one place so every such read is visible: the layers a scene +//! composed, the files of its root layer stack, the `invisible` overrides +//! its strongest layer authors, a material's `.mtlx` reference, an arc +//! that composes nothing ([`mtlx_reference`]), and the specs a material +//! composes from elsewhere ([`foreign_spec_paths`]). They describe the stage's files and layer +//! specs — a host's business, not a scene index's — so they are read from the +//! stage, never from Moho. A stage-wide fact Moho does carry is read there: +//! the time range's authored-ness, from the absolute root's +//! `__usdStageMetadata` ([`time_range`]). + +use moho::openusd; +use std::path::Path; + +use moho::data_source::locate; +use moho::locator::Locator; +use moho::openusd::sdf; +use moho::openusd::usd::Stage; +use moho::scene_index::SceneIndex; +use moho::tokens::usd as generic; + +/// The identifiers of every layer `stage` composed ([`crate::Scene::layers`]): +/// a file list, not scene description. +pub(in crate::scene::usd_import) fn layer_identifiers(stage: &Stage) -> Vec { + stage.layer_identifiers().into_iter().collect() +} + +/// The identifiers of `stage`'s root layer stack, strongest first +/// ([`crate::scene::Source::layer_stack`]): a file list, not scene description. +pub(in crate::scene::usd_import) fn layer_stack(stage: &Stage) -> Vec { + stage.layer_stack() +} + +/// The stage's `startTimeCode` and `endTimeCode`, from the absolute root's +/// `__usdStageMetadata` in `index`, when both are authored (Moho's M3: Hydra's +/// scene globals give values only). +pub(in crate::scene::usd_import) fn time_range(index: &dyn SceneIndex) -> Option<(f64, f64)> { + let root = index.prim(&sdf::Path::abs_root()).data?; + let field = |name: &str| -> Option { + let at = |leaf: &str| locate(&root, &Locator::new([generic::STAGE_METADATA, name, leaf])); + let authored = matches!(at(generic::AUTHORED)?.value()?, sdf::Value::Bool(true)); + match at(generic::VALUE)?.value()? { + sdf::Value::Double(v) if authored => Some(v), + _ => None, + } + }; + Some((field("startTimeCode")?, field("endTimeCode")?)) +} + +/// The files behind layer `identifiers`, sorted and without repeats: a layer +/// inside a package is the package file, a relative identifier is anchored +/// to the root layer `root`'s directory, file format arguments are dropped, +/// and an anonymous layer, which has no file, is left out. +pub(in crate::scene::usd_import) fn layer_files( + identifiers: &std::collections::BTreeSet, + root: &Path, +) -> Vec { + let dir = root.parent().unwrap_or(Path::new("")); + let files: std::collections::BTreeSet = identifiers + .iter() + .filter(|id| !sdf::Layer::is_anonymous_identifier(id)) + .map(|id| { + let id = id.split(":SDF_FORMAT_ARGS:").next().unwrap_or(id); + let file = openusd::ar::split_package_relative_path_outer(id) + .map(|(package, _)| package) + .unwrap_or_else(|| id.to_owned()); + let file = Path::new(&file); + if file.is_absolute() { + file.to_path_buf() + } else { + dir.join(file) + } + }) + .collect(); + files.into_iter().collect() +} + +/// The files of the root layer stack `identifiers`, in their order: each +/// mapped as [`layer_files`] maps it and made absolute against the working +/// directory (links not resolved), an anonymous layer left out, and a +/// package met twice kept once, where it is strongest. +pub(in crate::scene::usd_import) fn stack_files( + identifiers: &[String], + root: &Path, +) -> Vec { + let mut files: Vec = Vec::new(); + for id in identifiers { + let one = std::collections::BTreeSet::from([id.clone()]); + for file in layer_files(&one, root) { + // Absolute, so the same layer stamps the same path whatever the + // working directory and however the stage path was typed. + let file = std::path::absolute(&file).unwrap_or(file); + if !files.contains(&file) { + files.push(file); + } + } + } + files +} + +/// The prims the strongest layer of `stage`'s root layer stack — its session +/// layer when it has one, else its root layer — hides with an `over`: a +/// `visibility` spec on an `over` prim whose default or a time sample is +/// `invisible`. What a session or override layer hid of the scene beneath +/// it; a prim the layer itself defines invisible is the scene's own. +pub(in crate::scene::usd_import) fn invisible_overrides(stage: &Stage) -> u32 { + let strongest = stage.session_layer().unwrap_or_else(|| stage.root_layer()); + let data = strongest.data(); + let invisible = |v: &sdf::Value| matches!(v, sdf::Value::Token(t) if t.as_str() == "invisible"); + let mut count = 0u32; + for path in data.spec_paths() { + if !path.is_property() || !path.as_str().ends_with(".visibility") { + continue; + } + let prim = path.prim_path(); + let is_over = matches!( + data.try_field(&prim, "specifier"), + Ok(Some(v)) if matches!(&*v, sdf::Value::Specifier(sdf::Specifier::Over)) + ); + if !is_over { + continue; + } + let default = matches!(data.try_field(&path, "default"), Ok(Some(v)) if invisible(&v)); + let sampled = matches!( + data.try_field(&path, "timeSamples"), + Ok(Some(v)) if matches!(&*v, sdf::Value::TimeSamples(samples) + if samples.iter().any(|(_, v)| invisible(v))) + ); + if default || sampled { + count = count.saturating_add(1); + } + } + count +} + +/// Why the host's pass is not a `RenderPass`, for its error: no prim there, or +/// the USD type the prim has. The USD type name is what the user authored and +/// reads in the error, and the scene index carries Hydra types only (a +/// `Scope` or an `Xform` has none), so it is read from the stage. +pub(in crate::scene::usd_import) fn not_a_pass(stage: &Stage, pass: &sdf::Path) -> String { + let prim = super::super::prim_at(stage, pass.clone()); + if !prim.is_valid().unwrap_or(false) { + return "there is no prim at this path on the stage".to_string(); + } + match prim.type_name().ok().flatten() { + Some(t) if !t.as_str().is_empty() => format!("a {} is not a RenderPass", t.as_str()), + _ => "a typeless prim is not a RenderPass".to_string(), + } +} + +/// The `.mtlx` file and material node a `Material` prim references, if any. +/// +/// Read off the *layer specs* rather than the composed prim, because there is +/// nothing composed to read: without a MaterialX file-format plugin the +/// reference resolves to no layer at all, so the arc survives only as authored +/// metadata. The first `.mtlx` found wins. +/// +/// Not scene description the index can give (design D7): the arc to a file no +/// file-format plugin reads composes nothing, so Moho has nothing to carry. +/// It moves to the composed shader prims when `mtlx-format-plugin` lands. +pub(in crate::scene::usd_import) fn mtlx_reference( + stage: &Stage, + mat_path: &sdf::Path, +) -> Option<(std::path::PathBuf, String)> { + // The composed stage path is not where the reference is *authored*: a shot + // layer referencing `teapot.usda` sees the material at + // `/World/Teapot/Looks/TeapotCeramic`, while the arc is authored at + // `/Teapot/Looks/TeapotCeramic` inside the asset layer. Only the prim's + // composition graph knows both, so the candidate spec paths come from its + // nodes rather than from the stage path. + let mut paths = vec![mat_path.clone()]; + if let Ok(graph) = super::super::prim_at(stage, mat_path.clone()) + .prim_index() + .graph() + { + for node in graph.all_nodes() { + let p = node.path().clone(); + if !paths.contains(&p) { + paths.push(p); + } + } + } + + for id in stage.layer_identifiers() { + let Some(layer) = stage.layer(&id) else { + continue; + }; + // Every candidate path against every layer. The cross product is a + // handful of lookups — a material's graph has a few nodes and a stage + // a few layers — and it sidesteps having to map a node's `LayerId` + // back to an identifier, which openusd does not expose. + for path in &paths { + let Ok(Some(spec)) = layer.prim(path.clone()) else { + continue; + }; + let Ok(Some(sdf::Value::ReferenceListOp(list))) = spec.field("references") else { + continue; + }; + // Every list-op bucket, because which one a reference lands in + // depends on whether it was authored as `prepend`, `append` or a + // bare assignment — and all three mean "this material is that + // document". + let items = list + .explicit_items() + .iter() + .chain(list.prepended_items().iter()) + .chain(list.appended_items().iter()) + .chain(list.added_items().iter()); + for r in items { + if !r.asset_path.to_ascii_lowercase().ends_with(".mtlx") { + continue; + } + // Anchored against the *authoring layer's* directory, the same + // rule `asset_path` follows for textures and for the + // same reason: `Looks/teapot_ceramic_ldX.mtlx` is relative to + // `teapot.usda`, which need not be the stage root. + let base = std::path::Path::new(&id).parent()?.to_path_buf(); + let file = base.join(&r.asset_path); + let node = crate::materialx::material_node_of(r.prim_path.as_str()) + .unwrap_or_default() + .to_string(); + return Some((file, node)); + } + } + } + None +} + +/// The paths of the specs the prims at `paths` compose from outside `root`: +/// an `inherits`, `specializes` or `references` arc's target, a referenced +/// layer's prim. Composition arcs are not scene description the index gives +/// (design D7): they say which layer specs an in-place edit of a material +/// would reach (`material_reads`, [`crate::live`]). +pub(in crate::scene::usd_import) fn foreign_spec_paths( + stage: &Stage, + paths: &[sdf::Path], + root: &sdf::Path, +) -> Vec { + let mut out = Vec::new(); + for path in paths { + let prim = super::super::prim_at(stage, path.clone()); + for site in prim.prim_stack().unwrap_or_default() { + if !site.path.has_prefix(root) { + out.push(site.path.to_string()); + } + } + } + out +} + +/// Why the collection `name` of the prim at `path` has no membership: the +/// error openusd's membership query gives, which the scene index (Hydra's +/// collections schema) does not carry. For the `light_link.unreadable_collection` +/// diagnostic only (design D7). +pub(in crate::scene::usd_import) fn collection_error( + stage: &Stage, + path: &sdf::Path, + name: &str, +) -> Option { + let prim = super::super::prim_at(stage, path.clone()); + moho::openusd::usd::CollectionAPI::from_prim_unchecked(prim, name) + .membership_query() + .err() + .map(|e| e.to_string()) +} + +/// Why the prim at `path` has no local transform at `time`: the error +/// openusd's `XformQuery` gives for its op stack, which the scene index +/// (Hydra's xform schema) does not carry. For the `xform.uncomposable` +/// diagnostic only (design D7). +pub(in crate::scene::usd_import) fn xform_error( + stage: &Stage, + path: &sdf::Path, + time: Option, +) -> Option { + use moho::openusd_schemas::geom::XformQuery; + let prim = super::super::prim_at(stage, path.clone()); + let time = time.map(moho::openusd::usd::TimeCode::new); + match XformQuery::for_prim(&prim) { + Err(e) => Some(e.to_string()), + Ok(query) => query.local_transform(time).err().map(|e| e.to_string()), + } +} + +/// The paths of the prim specs `path` composes from (`prim_stack`), prim +/// sites only: which layers' specs an edit would reach, for provenance +/// (design D7) — not scene description. +pub(in crate::scene::usd_import) fn prim_stack_paths( + stage: &Stage, + path: &sdf::Path, +) -> Vec { + super::super::prim_at(stage, path.clone()) + .prim_stack() + .unwrap_or_default() + .into_iter() + .filter(|site| site.path.is_prim()) + .map(|site| site.path.to_string()) + .collect() +} + +/// Whether the prim at `path` is instanceable with a composition arc but has +/// no prototype: for `instancing.instanceable_without_prototype` only, a +/// state the scene index (which names an instance by its prototype) cannot +/// show (design D7). +pub(in crate::scene::usd_import) fn instance_without_prototype( + stage: &Stage, + path: &sdf::Path, +) -> bool { + let prim = super::super::prim_at(stage, path.clone()); + prim.is_instance().unwrap_or(false) && !matches!(prim.prototype(), Ok(Some(_))) +} + +/// The stage's top-level subtrees: the children of its one root prim, or its +/// root prims when it has several. The unit `stream_roots` streams, and the +/// scope adaptive subdivision counts native placements in — in every import +/// mode, so that streaming cannot change which prototypes are shared. +/// +/// An import-strategy read, not scene data: which subtrees the import +/// streams one masked stage at a time is the host's decision, made on the +/// stage it opens (design D7). +pub(in crate::scene::usd_import) fn subtree_roots(stage: &Stage) -> Vec { + let pseudo_root = super::super::prim_at(stage, sdf::Path::abs_root()); + let Ok(top) = pseudo_root.children() else { + return Vec::new(); + }; + match top.as_slice() { + [only] => match only.children() { + Ok(children) => children.iter().map(|c| c.path().clone()).collect(), + Err(_) => Vec::new(), + }, + many => many.iter().map(|p| p.path().clone()).collect(), + } +} + +/// What a placement tool edits on the prim at `path`: whether it is +/// `Xformable`, its authored `xformOpOrder`, and the composed default value +/// of its op `place_op`. Authoring facts for writing a transform back to a +/// layer (`crust_core::live::PrimFrame`), not scene description (design D7): +/// the transforms themselves are composed from the scene index. `None` when +/// the stage holds no prim there. +pub(in crate::scene::usd_import) fn authored_ops( + stage: &Stage, + path: &sdf::Path, + place_op: &str, +) -> Option { + use moho::openusd_schemas::geom::{Xformable, XformableSchema}; + let prim = stage + .prim(path.clone()) + .ok() + .filter(|p| p.is_valid().unwrap_or(false))?; + let xf = Xformable::from_prim(prim.clone()).ok().flatten(); + let order = xf + .as_ref() + .and_then(|xf| xf.xform_op_order().ok().flatten()) + .map(|o| o.iter().map(|t| t.as_str().to_string()).collect()) + .unwrap_or_default(); + let place = prim + .attribute(place_op) + .get::() + .ok() + .flatten() + .map(|m| glam::DMat4::from_cols_array(&m.0)); + Some(AuthoredOps { + xformable: xf.is_some(), + order, + place, + }) +} + +/// [`authored_ops`]' answer. +pub(in crate::scene::usd_import) struct AuthoredOps { + pub(in crate::scene::usd_import) xformable: bool, + pub(in crate::scene::usd_import) order: Vec, + pub(in crate::scene::usd_import) place: Option, +} + +/// The directory of the layer that authors the value of the attribute at +/// `attr` (following its connections to an interface input that supplies +/// it): where a relative asset path the value holds is anchored, as USD +/// anchors an asset path on its layer. Which layer authors an opinion is a +/// fact of the layer stack, not scene description (design D7). `None` when +/// the stage holds no such opinion. +pub(in crate::scene::usd_import) fn authoring_layer_dir( + stage: &Stage, + attr: &sdf::Path, +) -> Option { + let mut at = attr.clone(); + // An interface chain is short; the bound keeps a cycle from looping. + for _ in 0..16 { + let (prim, name) = at.split_property()?; + let attribute = super::super::prim_at(stage, prim).attribute(name); + if attribute.has_authored_value().unwrap_or(false) { + let site = attribute.property_stack().ok()?.into_iter().next()?; + let dir = Path::new(&site.layer).parent()?.to_path_buf(); + return (!dir.as_os_str().is_empty()).then_some(dir); + } + at = attribute.connections().ok()?.into_iter().next()?; + } + None +} diff --git a/crates/crust-core/src/scene/usd_import/index/walk.rs b/crates/crust-core/src/scene/usd_import/index/walk.rs new file mode 100644 index 000000000..922a448ad --- /dev/null +++ b/crates/crust-core/src/scene/usd_import/index/walk.rs @@ -0,0 +1,121 @@ +//! The walk over the scene index (design D5): from the absolute root, over the +//! index's children, with the direct traversal's stack discipline (push in +//! order, pop last-first), because geometry ids, light-link runs, pass flags +//! and provenance depend on visit order, and bitwise image parity on geometry +//! order. +//! +//! The children come from one input's chain — the single stage's, or the +//! chunk's own masked stage while streaming — never from the merging index +//! above a chunk root, whose children are not the stage's namespace order +//! (Moho's merged order: inputs strongest first). Pruning reads the index: an +//! abstract or inactive prim is absent from it, and `purpose` and `visibility` +//! are each prim's own resolved values from the generic attribute data, pruning +//! the subtree where a non-render purpose or `invisible` is authored, as the +//! direct importer did. (Hydra's flattened purpose lets a child's authored +//! purpose override an ancestor's `proxy`; Crust's rule prunes the subtree, so +//! the flattened value would change what renders.) + +use glam::Mat4 as GMat4; +use moho::data_source::locate; +use moho::locator::Locator; +use moho::openusd::sdf; +use moho::openusd::usd::Stage; +use moho::scene_index::SceneIndex; +use moho::tokens::usd as generic; + +use super::super::xform::Timing; +use super::super::{ImportCtx, Prune, visit_prim}; +use super::Input; + +/// Walks `input`'s chain into `ctx`, reading each prim's families through the +/// bridge on `stage`, the stage `input` was built over. `top` is the top of +/// the import's chain, over `input` (and, streamed, the other inputs): what +/// the material readers read. +pub(in crate::scene::usd_import) fn walk( + stage: &Stage, + input: &Input, + top: &moho::scene_index::SceneIndexHandle, + ctx: &mut ImportCtx, +) { + let index: &dyn SceneIndex = input.chain.as_ref(); + if let Some(pass) = &mut ctx.pass { + pass.begin_chunk(input); + } + ctx.caches.scene = Some((input.chain.clone(), stage.clone())); + ctx.caches.top = Some(top.clone()); + ctx.caches.stage_index = Some(input.stage.clone()); + ctx.caches.inst = Some(input.chain.clone()); + let mut stack: Vec<(sdf::Path, GMat4, bool, Timing)> = vec![( + sdf::Path::abs_root(), + GMat4::IDENTITY, + false, + Timing::Static, + )]; + while let Some((path, parent_world, parent_hidden, parent_timing)) = stack.pop() { + let pruned = prune(index, &path); + let Some((world, hidden, timing)) = visit_prim( + stage, + index, + &path, + pruned, + parent_world, + parent_hidden, + &parent_timing, + ctx, + ) else { + continue; + }; + for child in children(index, &path) { + stack.push((child, world, hidden, timing.clone())); + } + } + ctx.caches.scene = None; + ctx.caches.top = None; + ctx.caches.stage_index = None; + ctx.caches.inst = None; +} + +/// The children the walk descends into: the index's, less the prototypes +/// the stage index lists under the absolute root (as UsdImaging does), which +/// the direct traversal never reached from the root — an instance takes its +/// prototype's geometry through the instancing reader. +pub(in crate::scene::usd_import) fn children( + index: &dyn SceneIndex, + path: &sdf::Path, +) -> Vec { + let mut children = index.children(path); + // Moho's propagated prototypes are reached through their instances; + // openusd's `/__Prototype_N` the instancing filter already hides. + children.retain(|c| c.name() != Some(moho::tokens::instancing::PROPAGATED_ROOT)); + children +} + +/// Why the walk leaves `path` and its subtree out, from the index: its own +/// `purpose` (`proxy`, `guide`) and `visibility` (`invisible`). +pub(in crate::scene::usd_import) fn prune( + index: &dyn SceneIndex, + path: &sdf::Path, +) -> Option { + if path.is_abs_root() { + return None; + } + let data = index.prim(path).data?; + let token = |name: &str| { + let value = locate( + &data, + &Locator::new([generic::ATTRIBUTES, name, generic::VALUE]), + )? + .value()?; + match value { + moho::openusd::sdf::Value::Token(t) => Some(t.as_str().to_owned()), + moho::openusd::sdf::Value::String(s) => Some(s), + _ => None, + } + }; + match token("purpose").as_deref() { + Some("proxy") => return Some(Prune::Purpose("proxy")), + Some("guide") => return Some(Prune::Purpose("guide")), + _ => {} + } + (token("visibility").as_deref() == Some("invisible")).then_some(Prune::Invisible) +} diff --git a/crates/crust-core/src/scene/usd_import/instancing.rs b/crates/crust-core/src/scene/usd_import/instancing.rs index b14e158a3..687e8a60c 100644 --- a/crates/crust-core/src/scene/usd_import/instancing.rs +++ b/crates/crust-core/src/scene/usd_import/instancing.rs @@ -19,6 +19,7 @@ //! (`docs/moana_profile.md`). use crate::warning; +use moho::openusd; use std::sync::Arc; use std::time::Instant; @@ -27,11 +28,7 @@ use crust_rt::{ }; use glam::{Affine3A, Mat4 as GMat4, Vec3, Vec3A}; use openusd::sdf; -use openusd::usd::{Prim, Stage}; -use openusd_schemas::geom::{ - BasisCurves as UsdBasisCurves, Mesh as UsdMesh, NurbsCurves as UsdNurbsCurves, PointInstancer, - PointInstancerSchema, Sphere as UsdSphere, -}; +use openusd::usd::Stage; use std::collections::{BTreeMap, BTreeSet}; use tracing::debug; @@ -39,19 +36,17 @@ use crate::material::Material; use crate::primvars::PrimvarTable; use crate::rt_world::{FaceMap, UvMap, WorldBuilder}; -use super::attrs::{ - custom_token, decode_i32_array, decode_i64_array, decode_vec3f_array, prim_motion_translate, - prim_ray_mask, value_at, -}; +use super::ImportCaches; +use super::attrs::{decode_i32_array, decode_i64_array, decode_vec3f_array}; use super::implicit::{Shape, undisplaced}; -use super::materials::{resolve_bound, resolve_material}; +use super::index::data::PrimData; +use super::materials::{resolve_bound_data, resolve_material_data}; use super::mesh::{ MeshNeeds, MeshPlace, constant_table, mesh_source, placement_scale, with_constant_primvars, }; use super::shapes::{Curves, curve_segments, curves_scene, nurbs_curve_segments, sphere_radius}; use super::strands::StrandRequest; -use super::xform::{Span, compose_with_parent}; -use super::{ImportCaches, WalkScope, prim_at, prune_reason}; +use super::xform::{Span, compose_index}; use crate::strands::StrandTable; /// How deep prototypes may nest before the importer gives up. USD forbids @@ -63,10 +58,10 @@ const MAX_INSTANCE_NESTING: usize = 8; /// How a prototype version is placed, which decides how adaptive subdivision /// refines its meshes (see "Only unshared geometry is adaptive" in the design /// record). In uniform subdivision every version is [`ProtoPlace::Shared`]. -/// A curves prim in a prototype, read under whichever schema it has. +/// A curves prim in a prototype, by which schema it has. enum Curve { - Basis(UsdBasisCurves), - Nurbs(UsdNurbsCurves), + Basis, + Nurbs, } #[derive(Clone, Copy, Debug)] @@ -80,6 +75,78 @@ pub(super) enum ProtoPlace { Unshared(GMat4), } +/// A prototype as the instancing reader finds it: its root in the input's +/// instancing chain — Moho's propagated prototype +/// (`MohoNiPropagatedPrototypes///prototype`) or a point +/// instancer's `ForInstancer` copy — which keys its cached parts, and the USD +/// prim it comes from (`/__Prototype_N`, or the instancer's target), which +/// names it in warnings and at which its prims are read until Moho's M11 +/// re-roots the path values inside propagated prototypes. +#[derive(Clone, Debug)] +pub(super) struct ProtoRoot { + pub(super) index: sdf::Path, + pub(super) usd: sdf::Path, + /// For a point instancer's copy of a prim inside a native instance, + /// `(the instance's propagated prototype, the instance)`, which names + /// what the copy's data point to beside it (`PrimData::with_outer`). + pub(super) outer: Option<(sdf::Path, sdf::Path)>, +} + +impl ProtoRoot { + /// The USD path of the prim at `path` under the index root. + fn usd_of(&self, path: &sdf::Path) -> sdf::Path { + if path == &self.index { + return self.usd.clone(); + } + path.as_str() + .strip_prefix(self.index.as_str()) + .and_then(|rest| sdf::Path::new(format!("{}{rest}", self.usd).as_str()).ok()) + .unwrap_or_else(|| path.clone()) + } + + /// The prototype caches' key: the root in the instancing chain, stable + /// across a streamed import's stages (a propagated prototype, a copy). + /// No epoch: openusd's per-stage `/__Prototype_N` is never a root the + /// chain holds, so it keys nothing (a native instance always resolves to + /// its propagated prototype; checked on every fixture and sample when the + /// epoch went, `moho-import` 13.1). + fn key(&self) -> String { + self.index.to_string() + } + + /// A root named by its USD path alone, where the instancing chain gives + /// no other (read as before). + fn usd(path: &sdf::Path) -> Self { + ProtoRoot { + index: path.clone(), + usd: path.clone(), + outer: None, + } + } +} + +/// The prim at `prim`'s USD path in the walked input's stage scene index, +/// before any filter: its local `xform`. +fn xform_at(caches: &ImportCaches<'_>, path: &sdf::Path) -> PrimData { + match &caches.stage_index { + Some(index) => PrimData::at(index.as_ref(), path), + None => caches.prim_data(path), + } +} + +/// The children the prototype walk descends into, from the instancing +/// chain: the prim's own, less the scopes Moho propagates nested instances' +/// prototypes into (reached through their instances). +fn proto_children(caches: &ImportCaches<'_>, path: &sdf::Path) -> Vec { + let Some(inst) = &caches.inst else { + return Vec::new(); + }; + inst.children(path) + .into_iter() + .filter(|c| c.name() != Some(moho::tokens::instancing::PROPAGATED_ROOT)) + .collect() +} + /// What a hit on one geometry of a [`ProtoPart`] resolves to: the material /// and texture tables `World` keys by `geom_id`. #[derive(Clone)] @@ -185,7 +252,7 @@ impl ProtoPart { /// "geometry that exists only to be instanced". pub(super) fn collect_proto_parts( stage: &Stage, - root: &Prim, + proto: &ProtoRoot, caches: &mut ImportCaches<'_>, depth: usize, place: ProtoPlace, @@ -194,26 +261,68 @@ pub(super) fn collect_proto_parts( if depth > MAX_INSTANCE_NESTING { warning!( InstancingNestingTooDeep, - at = root.path(), + at = proto.usd, "Prototype {} exceeds {MAX_INSTANCE_NESTING} levels of instance nesting — not expanded", - root.path() + proto.usd ); return parts; } - let mut stack: Vec<(Prim, GMat4)> = vec![(root.clone(), GMat4::IDENTITY)]; + let Some(inst) = caches.inst.clone() else { + return parts; + }; + // Walked in the instancing chain, each prim read at its re-rooted path + // and named by its USD path (`ProtoRoot`). A root that is itself an + // instance (a point instancer's prototype authored instanceable) is read + // through its own propagated prototype, named under the root. + let redirected; + let proto = match super::index::instancers::native_prototype(inst.as_ref(), &proto.index) { + Some(index) => { + redirected = ProtoRoot { + index, + usd: proto.usd.clone(), + outer: None, + }; + &redirected + } + None => proto, + }; + // A native prototype's root stands for the instance prim, whose + // transform the placement already carries. + let native_root = proto.usd.as_str().starts_with("/__Prototype"); + let mut stack: Vec<(sdf::Path, GMat4)> = vec![(proto.index.clone(), GMat4::IDENTITY)]; // Mesh parts found by the walk, as (index into `parts`, mesh slot). Their // kernel scenes are built together once the walk is done — in parallel, // see `MeshArena::commit_slots` — and each part holds a placeholder until // then. let mut pending_meshes: Vec<(usize, u32)> = Vec::new(); - while let Some((prim, parent_local)) = stack.pop() { - if prototype_prunes(&prim, root, true) { + while let Some((at, parent_local)) = stack.pop() { + let name = proto.usd_of(&at); + // Its data: in the instancing chain at its re-rooted path, named by + // its USD path (Moho's M11 re-roots the path values it holds). + let pdata = + PrimData::rebased(&inst, &at, &proto.index, &proto.usd).with_outer(proto.outer.clone()); + // The same pruning as the top-level walk, abstractness aside: purpose + // and visibility, from the index (an inactive prim it does not hold). + if let Some(reason) = super::index::walk::prune(inst.as_ref(), &at) { + debug!("Skipping {reason} prim {name} (prototype {})", proto.usd); continue; } - let this_local = part_local(&prim, root, parent_local); - if prim.path() != root.path() || !is_native_prototype(root) { - caches.motion.in_prototype(&prim); + let is_root = at == proto.index; + let xform = xform_at(caches, &name); + // A point instancer prototype's root contributes its own transform, + // applied before the per-instance one, as + // `UsdGeomPointInstancer::ComputeInstanceTransformsAtTime` composes it + // by default (`IncludeProtoXform`): composed here rather than folded + // into each placement, so a descendant whose stack resets drops it + // like any other ancestor's. + let this_local = if is_root && native_root { + GMat4::IDENTITY + } else { + compose_index(stage, &xform, parent_local, caches.time) + }; + if !is_root || !native_root { + caches.motion.in_prototype(&xform, &name); } // A native instance nested in this prototype: splice its prototype's @@ -223,43 +332,60 @@ pub(super) fn collect_proto_parts( // Always the shared version: `count_placements` does not descend // into instances, so nothing says this placement is the only one. // Each part keeps its own mask, as at a top-level instance. - if prim.path() != root.path() && prim.is_instance().unwrap_or(false) { - match prim.prototype() { - Ok(Some(inner)) => { - let inner_parts = prototype_parts(stage, &inner, caches, depth + 1); - parts.extend(inner_parts.iter().map(|part| ProtoPart { - local: this_local * part.local, - ..part.clone() - })); - continue; - } - _ => warning!( + if !is_root { + use moho::tokens::usd_prim_info as info; + let inner_usd = match pdata + .locate([info::USD_PRIM_INFO, info::NI_PROTOTYPE_PATH]) + .and_then(|d| d.value()) + { + Some(sdf::Value::PathVec(mut v)) => v.pop(), + _ => None, + }; + if let (Some(usd), Some(index)) = ( + inner_usd, + super::index::instancers::native_prototype(inst.as_ref(), &at), + ) { + let inner = ProtoRoot { + index, + usd, + outer: None, + }; + let inner_parts = prototype_parts(stage, &inner, caches, depth + 1); + parts.extend(inner_parts.iter().map(|part| ProtoPart { + local: this_local * part.local, + ..part.clone() + })); + continue; + } + if super::index::stage_facts::instance_without_prototype(stage, &name) { + warning!( InstancingInstanceableWithoutPrototype, - at = prim.path(), + at = name, "Prim {} is instanceable but has no prototype — importing directly", - prim.path() - ), + name + ); } } - let mask = prim_ray_mask(&prim); + let mask = super::index::data::ray_mask(&pdata); // Volumes first, as at the top level: a `crust:volume:*` prim is a // volume whatever its schema, so a volume `Cube` must never be read // as a box. Volumes live outside the surface BVH entirely (their // bounds must not occlude shadow rays), so they cannot ride an // instance transform. Say so rather than dropping silently. - if custom_token(&prim, "crust:volume:type").is_some() { + if pdata.custom_token("crust:volume:type").is_some() { warning!( VolumeInPrototype, - at = prim.path(), + at = &name, "Volume at {} is inside a prototype — volumes cannot be instanced, skipped", - prim.path() + &name ); - } else if let Ok(Some(mesh)) = UsdMesh::get(stage, prim.path().clone()) { - let bound = resolve_bound(stage, &prim, caches); + } else if pdata.is_a("Mesh") { + let bound = resolve_bound_data(stage, &pdata, caches); let material = bound.material; - let displacement = super::mesh::prim_displacement(&prim, bound.displacement); + let data = pdata.clone(); + let displacement = super::mesh::prim_displacement(&data, bound.displacement); let displacement = displacement.as_deref(); // Unshared: the part's own world transform, for adaptive subdivision. let part_world = match place { @@ -271,8 +397,8 @@ pub(super) fn collect_proto_parts( // marks the slot as ineligible for baking, so a mesh used both // directly and as a prototype is not stored twice. if let Some(src) = mesh_source( - &prim, - &mesh, + &data, + &data, MeshNeeds::of( &*material, displacement, @@ -283,7 +409,7 @@ pub(super) fn collect_proto_parts( part_world .as_ref() .map_or(MeshPlace::Shared, MeshPlace::World), - ) && let Some(slot) = caches.meshes.intern(&prim, src, &material, displacement) + ) && let Some(slot) = caches.meshes.intern(&data, src, &material, displacement) { let faces = caches.meshes.slots[slot as usize].faces.clone(); let uvs = caches.meshes.slots[slot as usize].uvs.clone(); @@ -294,9 +420,9 @@ pub(super) fn collect_proto_parts( Arc::make_mut(&mut part.slots)[0].primvars = primvars; parts.push(part); } - } else if let Ok(Some(sphere)) = UsdSphere::get(stage, prim.path().clone()) { - let material = resolve_material(stage, &prim, caches); - let radius = sphere_radius(&sphere); + } else if pdata.is_a("Sphere") { + let material = resolve_material_data(stage, &pdata, caches); + let radius = sphere_radius(&pdata); let mut b = RtSceneBuilder::new(); // Local-space sphere at the origin: unlike the top-level // sphere path, which bakes the centre into world space, this @@ -306,7 +432,8 @@ pub(super) fn collect_proto_parts( center: Vec3A::ZERO, radius, }); - let primvars = constant_table(&prim, &*material, caches.working).map(Arc::new); + let data = pdata.clone(); + let primvars = constant_table(&data, &*material, caches.working).map(Arc::new); let mut part = ProtoPart::leaf( Arc::new(b.commit_with(crate::commit_options())), this_local, @@ -317,18 +444,22 @@ pub(super) fn collect_proto_parts( ); Arc::make_mut(&mut part.slots)[0].primvars = primvars; parts.push(part); - } else if let Some(read) = match UsdBasisCurves::get(stage, prim.path().clone()) { - Ok(Some(curves)) => Some(Curve::Basis(curves)), - _ => match UsdNurbsCurves::get(stage, prim.path().clone()) { - Ok(Some(curves)) => Some(Curve::Nurbs(curves)), - _ => None, - }, + } else if let Some(read) = { + let data = pdata.clone(); + if data.is_a("BasisCurves") { + Some(Curve::Basis) + } else if data.is_a("NurbsCurves") { + Some(Curve::Nurbs) + } else { + None + } } { - let material = resolve_material(stage, &prim, caches); + let material = resolve_material_data(stage, &pdata, caches); let request = StrandRequest::of(&*material, caches.working, &caches.meshes.primvars); + let data = pdata.clone(); let imported = match &read { - Curve::Basis(c) => curve_segments(&prim, c, request.as_ref()), - Curve::Nurbs(c) => nurbs_curve_segments(&prim, c, request.as_ref()), + Curve::Basis => curve_segments(&data, &data, request.as_ref()), + Curve::Nurbs => nurbs_curve_segments(&data, &data, request.as_ref()), }; if let Some(Curves { batches, strands }) = imported { let mut part = ProtoPart::leaf( @@ -344,23 +475,25 @@ pub(super) fn collect_proto_parts( slot.strands = strands.map(Arc::new); parts.push(part); } - } else if let Some(shape) = Shape::read(&prim) { + } else if let Some(shape) = Shape::read(&pdata) { // An implicit shape is a mesh once tessellated, so it is a part // like any mesh: interned, built at the end of the walk. - let material = undisplaced(&prim, resolve_bound(stage, &prim, caches)).material; + let data = pdata.clone(); + let material = undisplaced(&data, resolve_bound_data(stage, &pdata, caches)).material; let part_world = match place { ProtoPlace::Unshared(world) => Some(world * this_local), ProtoPlace::Shared => None, }; let src = caches.implicit.source( - prim.path(), + &name, &shape, part_world .as_ref() .map_or(MeshPlace::Shared, MeshPlace::World), ); - let src = with_constant_primvars(src, &prim, &*material, caches.working); - if let Some(slot) = caches.meshes.intern(&prim, src, &material, None) { + let data = pdata.clone(); + let src = with_constant_primvars(src, &data, &*material, caches.working); + if let Some(slot) = caches.meshes.intern(&data, src, &material, None) { let faces = caches.meshes.slots[slot as usize].faces.clone(); let uvs = caches.meshes.slots[slot as usize].uvs.clone(); let primvars = caches.meshes.slots[slot as usize].primvars.clone(); @@ -370,7 +503,7 @@ pub(super) fn collect_proto_parts( Arc::make_mut(&mut part.slots)[0].primvars = primvars; parts.push(part); } - } else if let Ok(Some(instancer)) = PointInstancer::get(stage, prim.path().clone()) { + } else if pdata.is_a("PointInstancer") { // A PointInstancer inside a prototype: expand it into nested // sub-scenes rather than flattening. Flattening would multiply // the *outer* instance count by this instancer's, which is @@ -379,8 +512,8 @@ pub(super) fn collect_proto_parts( // outer instances, not 250 000. parts.extend(nested_instancer_parts( stage, - &prim, - &instancer, + &pdata, + &at, this_local, mask, caches, @@ -390,13 +523,12 @@ pub(super) fn collect_proto_parts( // Its prototypes are reached through it, never drawn directly. continue; } else { - caches.unread.saw(&prim); + caches.unread.saw(&pdata); } - if let Ok(children) = prim.children() { - for child in children { - stack.push((child, this_local)); - } + let children = proto_children(caches, &at); + for child in children { + stack.push((child, this_local)); } } // Committing is also what marks each slot as ineligible for baking, so a @@ -409,51 +541,6 @@ pub(super) fn collect_proto_parts( parts } -/// Whether the prototype walk leaves `prim` and its subtree out: the same -/// pruning as the top-level traversal ([`prune_reason`], abstractness -/// aside). `report` logs why. -fn prototype_prunes(prim: &Prim, root: &Prim, report: bool) -> bool { - // Visibility counts from the prototype root down, as UsdImaging - // computes it for a prototype: an invisible part of a prototype is - // missing from every instance. No camera is taken from a prototype, - // so here an invisible subtree is simply pruned. - if let Some(reason) = prune_reason(prim, WalkScope::Prototype) { - if report { - debug!( - "Skipping {reason} prim {} (prototype {})", - prim.path(), - root.path() - ); - } - return true; - } - false -} - -/// `prim`'s transform in its prototype's frame, given its parent's. -/// -/// A native prototype root contributes nothing: it stands for the instance -/// prim, whose transform the placement already carries. A `PointInstancer` -/// prototype root contributes its own transform, applied before the -/// per-instance one, as `UsdGeomPointInstancer::ComputeInstanceTransformsAtTime` -/// composes it by default (`IncludeProtoXform`). It is applied here rather -/// than folded into each placement so that a descendant whose stack lists -/// `!resetXformStack!` drops it like any other ancestor's, and a singular -/// root hides only the parts that inherit it. -fn part_local(prim: &Prim, root: &Prim, parent_local: GMat4) -> GMat4 { - if prim.path() == root.path() && is_native_prototype(root) { - GMat4::IDENTITY - } else { - compose_with_parent(prim, parent_local) - } -} - -/// Whether `root` is a native instance's prototype (`/__Prototype_N`) rather -/// than a prim a `PointInstancer` targets. -fn is_native_prototype(root: &Prim) -> bool { - root.is_prototype().unwrap_or(false) -} - /// What a prototype's mesh part holds until its kernel scene is built at the /// end of the walk (see `collect_proto_parts`). Never attached to anything. fn placeholder_scene() -> Arc { @@ -480,17 +567,23 @@ fn placeholder_scene() -> Arc { #[allow(clippy::too_many_arguments)] fn nested_instancer_parts( stage: &Stage, - prim: &Prim, - instancer: &PointInstancer, + data: &PrimData, + at: &sdf::Path, local: GMat4, mask: RayMask, caches: &mut ImportCaches<'_>, depth: usize, place: ProtoPlace, ) -> Vec { - let Some(layout) = read_instancer(prim, instancer, true) else { + let Some(mut layout) = read_instancer(data, true) else { return Vec::new(); }; + // Targets the index re-rooted (inside a propagated prototype) are named + // by the USD prims they come from. + let held = layout.targets.clone(); + for target in &mut layout.targets { + *target = data.name_of(target); + } // Which version of its prototype each placement draws: the shared one // (`None`), or — in adaptive mode, inside an unshared prototype, for a // target this instancer places once — one built for that placement. @@ -517,10 +610,11 @@ fn nested_instancer_parts( } else { (0..layout.targets.len()).map(|k| (k, None)).collect() }; + let roots = proto_roots(caches, at, &layout.targets, &held, &|p| data.name_of(p)); let groups: BTreeMap<(usize, Option), Option> = versions .into_iter() .map(|(k, placed)| { - let target = &layout.targets[k]; + let target = &roots[k]; let group = match (placed, place) { (Some(i), ProtoPlace::Unshared(world)) => { let inner = world * local * layout.placements[i].1; @@ -579,7 +673,7 @@ fn nested_instancer_parts( debug!( "Expanded nested PointInstancer at {} ({} instances of {} prototype(s) -> {} slot(s))", - prim.path(), + data.path(), layout.placements.len(), layout.targets.len(), slots.len() @@ -648,11 +742,11 @@ fn group_parts(parts: &[ProtoPart]) -> Option { /// built. fn prototype_group( stage: &Stage, - proto_path: &sdf::Path, + proto_path: &ProtoRoot, caches: &mut ImportCaches<'_>, depth: usize, ) -> Option { - let key = (caches.epoch, proto_path.to_string()); + let key = proto_path.key(); if let Some(group) = caches.groups.get(&key) { return group.clone(); } @@ -666,7 +760,7 @@ fn prototype_group( /// root frame to world) and not cached: no other placement can use it. fn unshared_group( stage: &Stage, - proto_path: &sdf::Path, + proto_path: &ProtoRoot, caches: &mut ImportCaches<'_>, depth: usize, world: GMat4, @@ -679,7 +773,7 @@ fn unshared_group( /// [`TOP_LEVEL_GROUP_MIN_PARTS`] parts, else its parts one instance each. fn placed_parts( stage: &Stage, - proto_path: &sdf::Path, + proto_path: &ProtoRoot, caches: &mut ImportCaches<'_>, place: ProtoPlace, ) -> Arc> { @@ -717,7 +811,7 @@ const TOP_LEVEL_GROUP_MIN_PARTS: usize = 64; pub(super) fn emit_native_instance( stage: &Stage, world: &mut WorldBuilder, - prim: &Prim, + path: &sdf::Path, proto_path: &sdf::Path, span: Span, caches: &mut ImportCaches<'_>, @@ -727,20 +821,32 @@ pub(super) fn emit_native_instance( caches .meshes .primvars - .report_placement(prim, "the instance prim"); + .report_placement(&caches.prim_data(path), "the instance prim"); let world_xf = span.open; + let root = match caches + .inst + .as_ref() + .and_then(|inst| super::index::instancers::native_prototype(inst.as_ref(), path)) + { + Some(index) => ProtoRoot { + index, + usd: proto_path.clone(), + outer: None, + }, + None => ProtoRoot::usd(proto_path), + }; // Adaptive subdivision refines a prototype by its size on screen only when // this is its one placement in its top-level subtree. let place = if caches.meshes.subdiv.adaptive.is_some() - && caches.placement_count(prim.path(), proto_path) == 1 + && caches.placement_count(path, &root.index) == 1 { ProtoPlace::Unshared(world_xf) } else { ProtoPlace::Shared }; - let parts = placed_parts(stage, proto_path, caches, place); + let parts = placed_parts(stage, &root, caches, place); let first = world.count(); - let motion = prim_motion_translate(prim); + let motion = super::index::data::motion_translate(&caches.prim_data(path)); attach_proto_parts( world, &parts, @@ -751,7 +857,7 @@ pub(super) fn emit_native_instance( ); debug!( "Instance {} uses prototype {proto_path} ({} instance(s), geom ids {first}..{})", - prim.path(), + path, parts.len(), world.count() ); @@ -878,28 +984,21 @@ struct InstancerLayout { /// `orientations` (half) where both are authored, and `invisibleIds` /// prunes by `ids`, with the array index standing in as the id where `ids` /// is absent. -fn read_instancer( - prim: &Prim, - instancer: &PointInstancer, - report: bool, -) -> Option { - let targets = match instancer.prototypes_rel().targets() { - Ok(t) if !t.is_empty() => t, - _ => { - if report { - warning!( - InstancingNoPrototypes, - at = prim.path(), - "PointInstancer at {} has no `prototypes` targets — skipped", - prim.path() - ); - } - return None; +fn read_instancer(prim: &PrimData, report: bool) -> Option { + let targets = prim.targets("prototypes"); + if targets.is_empty() { + if report { + warning!( + InstancingNoPrototypes, + at = prim.path(), + "PointInstancer at {} has no `prototypes` targets — skipped", + prim.path() + ); } - }; + return None; + } - let Some(proto_indices) = value_at(&instancer.proto_indices_attr()).and_then(decode_i32_array) - else { + let Some(proto_indices) = prim.value("protoIndices").and_then(decode_i32_array) else { if report { warning!( InstancingNoProtoIndices, @@ -911,13 +1010,15 @@ fn read_instancer( return None; }; - let positions = value_at(&instancer.positions_attr()) + let positions = prim + .value("positions") .and_then(decode_vec3f_array) .unwrap_or_default(); - let scales = value_at(&instancer.scales_attr()).and_then(decode_vec3f_array); - let orientations = instance_orientations(instancer); - let ids = value_at(&instancer.ids_attr()).and_then(decode_i64_array); - let invisible: std::collections::HashSet = value_at(&instancer.invisible_ids_attr()) + let scales = prim.value("scales").and_then(decode_vec3f_array); + let orientations = instance_orientations(prim); + let ids = prim.value("ids").and_then(decode_i64_array); + let invisible: std::collections::HashSet = prim + .value("invisibleIds") .and_then(decode_i64_array) .map(|v| v.into_iter().collect()) .unwrap_or_default(); @@ -982,19 +1083,75 @@ fn read_instancer( }) } +/// The prototype roots a point instancer at `at` (in the instancing chain) +/// places, one per target: its `ForInstancer` copies, named by the targets +/// they copy (`primOrigin`'s USD source, in the targets' order). `held` are +/// the targets as the instancing chain holds them (re-rooted inside a +/// propagated prototype), and `name` names a path it holds. +fn proto_roots( + caches: &ImportCaches<'_>, + at: &sdf::Path, + targets: &[sdf::Path], + held: &[sdf::Path], + name: &dyn Fn(&sdf::Path) -> sdf::Path, +) -> Vec { + let copies = caches + .inst + .as_ref() + .map(|inst| super::index::instancers::instancer_prototypes(inst.as_ref(), at)) + .unwrap_or_default(); + targets + .iter() + .zip(held) + .enumerate() + .map(|(k, (target, held))| match copies.get(k) { + Some(index) => ProtoRoot { + index: index.clone(), + usd: target.clone(), + outer: caches + .inst + .as_ref() + .and_then(|inst| enclosing_instance(inst.as_ref(), held)) + .map(|(prototype, instance)| (prototype, name(&instance))), + }, + None => ProtoRoot::usd(target), + }) + .collect() +} + +/// For a point-instancer target inside a native instance (an instance proxy, +/// Moho's M12), `(the instance's propagated prototype, the instance)`: the +/// nearest ancestor of `target` the instancing chain holds as an instance. +fn enclosing_instance( + inst: &dyn moho::scene_index::SceneIndex, + target: &sdf::Path, +) -> Option<(sdf::Path, sdf::Path)> { + let mut at = target.parent(); + while let Some(path) = at { + if path.is_abs_root() { + return None; + } + if let Some(prototype) = super::index::instancers::native_prototype(inst, &path) { + return Some((prototype, path)); + } + at = path.parent(); + } + None +} + /// A prototype's parts, from the cache or freshly built. fn prototype_parts( stage: &Stage, - proto_path: &sdf::Path, + proto_path: &ProtoRoot, caches: &mut ImportCaches<'_>, depth: usize, ) -> Arc> { - let key = (caches.epoch, proto_path.to_string()); + let key = proto_path.key(); if let Some(parts) = caches.protos.get(&key) { debug!( - "Prototype {} (epoch {}): reusing {} cached part(s)", - key.1, - key.0, + "Prototype {} ({}): reusing {} cached part(s)", + proto_path.usd, + key, parts.len() ); return parts.clone(); @@ -1013,7 +1170,7 @@ fn prototype_parts( /// A prototype's parts built for its one placement, uncached. fn unshared_parts( stage: &Stage, - proto_path: &sdf::Path, + proto_path: &ProtoRoot, caches: &mut ImportCaches<'_>, depth: usize, world: GMat4, @@ -1029,14 +1186,14 @@ fn unshared_parts( fn build_parts( stage: &Stage, - proto_path: &sdf::Path, + root: &ProtoRoot, caches: &mut ImportCaches<'_>, depth: usize, place: ProtoPlace, ) -> Vec { let started = Instant::now(); - let root = prim_at(stage, proto_path.clone()); - let parts = collect_proto_parts(stage, &root, caches, depth, place); + let proto_path = &root.usd; + let parts = collect_proto_parts(stage, root, caches, depth, place); if parts.is_empty() { warning!( InstancingEmptyPrototype, @@ -1045,8 +1202,8 @@ fn build_parts( ); } else { debug!( - "Prototype {proto_path} (epoch {}, nesting depth {depth}, {}): built {} part(s) in {:?}", - caches.epoch, + "Prototype {proto_path} ({}, nesting depth {depth}, {}): built {} part(s) in {:?}", + root.index, match place { ProtoPlace::Shared => "shared", ProtoPlace::Unshared(_) => "placed once", @@ -1074,12 +1231,8 @@ fn target_counts(layout: &InstancerLayout, frame: &GMat4) -> Vec { /// The drawn placements of each target of `instancer` at world transform /// `world`, for [`count_placements`](super::count_placements): read quietly, /// since the traversal reads the same instancer again and reports it then. -pub(super) fn instancer_target_counts( - prim: &Prim, - instancer: &PointInstancer, - world: &GMat4, -) -> Vec<(String, usize)> { - let Some(layout) = read_instancer(prim, instancer, false) else { +pub(super) fn instancer_target_counts(prim: &PrimData, world: &GMat4) -> Vec<(String, usize)> { + let Some(layout) = read_instancer(prim, false) else { return Vec::new(); }; let counts = target_counts(&layout, world); @@ -1099,13 +1252,12 @@ pub(super) fn instancer_target_counts( pub(super) fn emit_point_instancer( stage: &Stage, world: &mut WorldBuilder, - prim: &Prim, - instancer: &PointInstancer, + path: &sdf::Path, span: Span, caches: &mut ImportCaches<'_>, ) { let world_xf = span.open; - let Some(layout) = read_instancer(prim, instancer, true) else { + let Some(layout) = read_instancer(&caches.prim_data(path), true) else { return; }; // Per-instance primvars, and any above the instancer, do not reach the @@ -1113,7 +1265,10 @@ pub(super) fn emit_point_instancer( caches .meshes .primvars - .report_placement(prim, "the PointInstancer"); + .report_placement(&caches.prim_data(path), "the PointInstancer"); + let roots = proto_roots(caches, path, &layout.targets, &layout.targets, &|p| { + p.clone() + }); // The version of its prototype each placement draws: the shared one, or — // in adaptive mode, for a target this instancer places once — one built // for that placement. @@ -1125,7 +1280,7 @@ pub(super) fn emit_point_instancer( .iter() .map(|t| { if adaptive { - caches.placement_count(prim.path(), t) + caches.placement_count(path, t) } else { 0 } @@ -1163,10 +1318,7 @@ pub(super) fn emit_point_instancer( Some(i) => ProtoPlace::Unshared(world_xf * layout.placements[i].1), None => ProtoPlace::Shared, }; - ( - (k, placed), - placed_parts(stage, &layout.targets[k], caches, place), - ) + ((k, placed), placed_parts(stage, &roots[k], caches, place)) }) .collect(); @@ -1204,7 +1356,7 @@ pub(super) fn emit_point_instancer( debug!( "Imported PointInstancer at {} ({} instances of {} prototype(s): {} kernel instances attached, geom ids {first}..{}{})", - prim.path(), + path, layout.placements.len(), layout.targets.len(), attached, @@ -1219,12 +1371,12 @@ pub(super) fn emit_point_instancer( /// Per-instance rotations, preferring single-precision `orientationsf` /// over half-precision `orientations` as USD specifies. -fn instance_orientations(instancer: &PointInstancer) -> Option> { +fn instance_orientations(prim: &PrimData) -> Option> { let quat = |w: f32, x: f32, y: f32, z: f32| glam::Quat::from_xyzw(x, y, z, w).normalize(); - if let Some(sdf::Value::QuatfVec(v)) = value_at(&instancer.orientationsf_attr()) { + if let Some(sdf::Value::QuatfVec(v)) = prim.value("orientationsf") { return Some(v.iter().map(|q| quat(q.w, q.x, q.y, q.z)).collect()); } - match value_at(&instancer.orientations_attr()) { + match prim.value("orientations") { Some(sdf::Value::QuathVec(v)) => Some( v.iter() .map(|q| quat(q.w.to_f32(), q.x.to_f32(), q.y.to_f32(), q.z.to_f32())) diff --git a/crates/crust-core/src/scene/usd_import/light_links.rs b/crates/crust-core/src/scene/usd_import/light_links.rs index 62e240f74..025d5c6cd 100644 --- a/crates/crust-core/src/scene/usd_import/light_links.rs +++ b/crates/crust-core/src/scene/usd_import/light_links.rs @@ -1,10 +1,14 @@ //! `collection:lightLink` and `collection:shadowLink`: which receivers a //! light illuminates, and which occluders shadow it. //! -//! Membership is openusd's own (`CollectionAPI::membership_query`), so -//! every `UsdCollectionAPI` rule — nearest opinion wins, `includeRoot`, -//! expansion rules, nested collections with cycles broken — is the -//! reference's. What crust adds is *when* it is asked. A light can be +//! Membership is each collection's complete membership expression, as the +//! scene index gives it (`collections//membershipExpression`, which +//! Moho computes from openusd's own membership query as UsdImaging's +//! collection adapter does), so every `UsdCollectionAPI` rule — nearest +//! opinion wins, `includeRoot`, expansion rules, nested collections with +//! cycles broken — is the reference's. Crust judges it itself rather than +//! reading Moho's `categories` (design D9). What crust adds is *when* it is +//! asked. A light can be //! traversed after the geometry it links, and when streaming in a different //! chunk whose stage is gone by the end, so nothing is decided at emission: //! @@ -31,10 +35,13 @@ //! its camera-visible geometry. use crate::warning; +use moho::openusd; use std::collections::HashMap; +use moho::scene_index::SceneIndexHandle; use openusd::sdf; -use openusd::usd::{CollectionAPI, MembershipQuery, Prim, Stage}; +use openusd::sdf::path_expr::{PathExpressionEval, PredicateLibrary}; +use openusd::usd::{CollectionAPI, Stage}; use tracing::debug; use crate::light::{EVERY_CLASS, Light, LightLinks as RuntimeLinks, LightList}; @@ -42,8 +49,7 @@ use crate::ray::{MASK_CAMERA, MASK_SHADOW, RayMask}; use crate::rt_world::WorldBuilder; use crate::volume::VolumeRegion; -use super::attrs::{custom_bool, custom_token, prim_value}; -use super::prim_at; +use super::index::data::PrimData; /// The mask bits that carry shadow classes (design D3): 3–30 for the most /// populated classes, 31 shared by the rest. @@ -53,14 +59,26 @@ const OVERFLOW_BIT: u32 = 1 << 31; /// How many shadow classes get a bit of their own (3–30). const ALLOCATED: usize = 28; +/// A link collection's membership: its complete membership expression, +/// evaluated. +pub(super) struct Membership(PathExpressionEval<()>); + +impl Membership { + fn is_included(&self, path: &sdf::Path) -> bool { + self.0.match_path(path, &|_| ()).value + } +} + /// Reads one of a light's link collections (`lightLink` / `shadowLink`) as a -/// membership query, or `None` when it restricts nothing (UsdLux's fallback: -/// `includeRoot = 1` and no `includes` / `excludes`). +/// membership, or `None` when it restricts nothing (UsdLux's fallback: +/// `includeRoot = 1` and no `includes` / `excludes`). `prim` is the light as +/// one input of the index holds it, and `stage` that input's stage, for +/// the one diagnostic the index does not carry. /// /// UsdLux gives these two collections an `includeRoot` fallback of **true**, /// where `UsdCollectionAPI`'s is false. openusd resolves it from `LightAPI`'s -/// schema, so an unauthored `includeRoot` already reaches the query. -pub(super) fn link_query(stage: &Stage, prim: &Prim, name: &str) -> Option { +/// schema, so an unauthored `includeRoot` already reaches the expression. +pub(super) fn link_query(stage: &Stage, prim: &PrimData, name: &str) -> Option { let Opinions { includes, excludes, @@ -81,37 +99,48 @@ pub(super) fn link_query(stage: &Stage, prim: &Prim, name: &str) -> Option q, - Err(e) => { - warning!( - LightLinkUnreadableCollection, - at = prim.path(), - "{}: collection:{name} unreadable ({e}) — read as the default", - prim.path() - ); - return None; - } + use moho::tokens::collections as c; + let expr = match prim + .locate([c::COLLECTIONS, name, c::MEMBERSHIP_EXPRESSION]) + .and_then(|d| d.value()) + { + Some(sdf::Value::PathExpression(e)) => Some(e), + _ => None, }; - for t in includes.iter().chain(&excludes) { - if inside_instance(stage, t) { - warning!( - LightLinkTargetInInstance, - at = prim.path(), - "{}: collection:{name} targets {t}, inside an instance — membership is \ - judged on the instance, so the target cannot be told apart from its \ - siblings", - prim.path() - ); - break; + let eval = expr.and_then(|e| PathExpressionEval::build(&e, &PredicateLibrary::new()).ok()); + let Some(eval) = eval else { + // The index carries no expression for a collection whose membership + // query fails; why it fails is read off the stage (design D7). + let e = super::index::stage_facts::collection_error(stage, prim.path(), name) + .unwrap_or_else(|| "no membership expression".to_owned()); + warning!( + LightLinkUnreadableCollection, + at = prim.path(), + "{}: collection:{name} unreadable ({e}) — read as the default", + prim.path() + ); + return None; + }; + if let Some(index) = prim.index() { + for t in includes.iter().chain(&excludes) { + if inside_instance(index, t) { + warning!( + LightLinkTargetInInstance, + at = prim.path(), + "{}: collection:{name} targets {t}, inside an instance — membership is \ + judged on the instance, so the target cannot be told apart from its \ + siblings", + prim.path() + ); + break; + } } } - Some(query) + Some(Membership(eval)) } /// A link collection's authored opinions, as far as membership depends on -/// them — what two stages must agree on to be interchangeable for it. +/// them — what two inputs must agree on to be interchangeable for it. #[derive(PartialEq)] pub(super) struct Opinions { pub(super) includes: Vec, @@ -121,31 +150,32 @@ pub(super) struct Opinions { pub(super) expression: bool, } -pub(super) fn opinions(prim: &Prim, name: &str) -> Opinions { +/// A link collection's opinions, from the light's generic data. +pub(super) fn opinions(prim: &PrimData, name: &str) -> Opinions { let prop = |suffix: &str| format!("collection:{name}:{suffix}"); - let targets = |suffix: &str| { - prim.relationship(prop(suffix)) - .targets() - .unwrap_or_default() - }; Opinions { - includes: targets("includes"), - excludes: targets("excludes"), - include_root: custom_bool(prim, &prop("includeRoot")), - expansion_rule: custom_token(prim, &prop("expansionRule")), - expression: prim_value(prim, &prop("membershipExpression")).is_some(), + includes: prim.targets(&prop("includes")), + excludes: prim.targets(&prop("excludes")), + include_root: prim.custom_bool(&prop("includeRoot")), + expansion_rule: prim.custom_token(&prop("expansionRule")), + expression: prim.value(&prop("membershipExpression")).is_some(), } } -/// Whether some strict ancestor of `path` is a native instance, i.e. `path` -/// names geometry inside a prototype. -pub(super) fn inside_instance(stage: &Stage, path: &sdf::Path) -> bool { +/// Whether some strict ancestor of `path` is a native instance in `index` +/// (its `__usdPrimInfo` names a prototype), i.e. `path` names geometry +/// inside a prototype. +pub(super) fn inside_instance(index: &SceneIndexHandle, path: &sdf::Path) -> bool { + use moho::tokens::usd_prim_info as info; let mut p = path.parent(); while let Some(a) = p { if a.is_abs_root() { return false; } - if prim_at(stage, a.clone()).is_instance().unwrap_or(false) { + if PrimData::at(index.as_ref(), &a) + .locate([info::USD_PRIM_INFO, info::NI_PROTOTYPE_PATH]) + .is_some() + { return true; } p = a.parent(); @@ -158,8 +188,8 @@ struct Pending { path: sdf::Path, /// Its place in the import's [`LightList`] when it was added. index: usize, - light: Option, - shadow: Option, + light: Option, + shadow: Option, } /// The traversal's record of receivers and linked lights. @@ -244,38 +274,39 @@ impl LightLinks { /// Records a light just added at `index` of the import's light list, if /// either of its links restricts it. /// - /// Two stages can answer, and each can be wrong. The traversed `chunk` + /// Two inputs can answer, and each can be wrong. The traversed `chunk` /// has every opinion, payloads included, but a streamed chunk is /// composed under a population mask that keeps only its own subtree, so /// a collection nested in another subtree (a rig's `Scope` of light - /// groups, say) resolves to nothing there. `whole`, the index stage, has - /// every subtree but no payload, so a link a payload authors is missing - /// there. So `whole` is used only when it holds the light's link - /// opinions exactly as the chunk does; otherwise the chunk is, and a - /// nested collection it cannot see is warned about. + /// groups, say) resolves to nothing there. `whole`, the payload-free + /// scene input, has every subtree but no payload, so a link a payload + /// authors is missing there. So `whole` is used only when it holds the + /// light's link opinions exactly as the chunk does; otherwise the chunk + /// is, and a nested collection it cannot see is warned about. Each is + /// an input's chain with its stage. pub(super) fn light_added( &mut self, - whole: Option<&Stage>, - chunk: &Stage, + whole: Option<(&SceneIndexHandle, &Stage)>, + chunk: (&SceneIndexHandle, &Stage), path: &sdf::Path, index: usize, ) { - let on_chunk = prim_at(chunk, path.clone()); - let same = |w: &Stage| { - let on_whole = prim_at(w, path.clone()); - let agrees = on_whole.is_valid().unwrap_or(false) + let on_chunk = PrimData::in_index(chunk.0, path); + let from_whole = whole.and_then(|(w, stage)| { + let on_whole = PrimData::in_index(w, path); + let agrees = on_whole.is_defined() && ["lightLink", "shadowLink"] .iter() .all(|n| opinions(&on_whole, n) == opinions(&on_chunk, n)); - agrees.then_some(on_whole) - }; - let (stage, prim) = match whole.and_then(|w| same(w).map(|p| (w, p))) { + agrees.then_some((stage, on_whole)) + }); + let (stage, prim) = match from_whole { Some(found) => found, None => { for name in ["lightLink", "shadowLink"] { let missing = opinions(&on_chunk, name).includes.into_iter().find(|t| { CollectionAPI::instance_at_path(t).is_some_and(|(owner, _)| { - !prim_at(chunk, owner).is_valid().unwrap_or(false) + !PrimData::at(chunk.0.as_ref(), &owner).is_defined() }) }); if let Some(t) = missing { @@ -288,7 +319,7 @@ impl LightLinks { ); } } - (chunk, on_chunk) + (chunk.1, on_chunk) } }; let light = link_query(stage, &prim, "lightLink"); @@ -504,9 +535,9 @@ impl Key { /// Each path's class and the classes' keys, over the given queries. fn classify<'q>( paths: &[&sdf::Path], - queries: impl Iterator, + queries: impl Iterator, ) -> (Vec, Vec) { - let queries: Vec<&MembershipQuery> = queries.collect(); + let queries: Vec<&Membership> = queries.collect(); let words = queries.len().div_ceil(64); let mut ids: HashMap = HashMap::new(); let mut classes: Vec = Vec::new(); @@ -694,4 +725,128 @@ mod tests { } assert_eq!(index_remap(3, &[]), [Some(0), Some(1), Some(2)]); } + + /// Agreement with Moho's light linking (design D9): Moho's `categories` + /// (its `LightLinkingSceneIndex`) include a receiver in a light's + /// `lightLink` category exactly when crust's judgement of the same + /// membership expression does — on one stage (`chain::standard`'s + /// shape) and streamed, the light and its receivers in different + /// chunks, every input present (`chain::merged`'s shape). What would let + /// crust read `categories` instead (the open question). + mod agreement { + use moho::openusd::sdf; + use moho::scene_index::SceneIndex; + + use super::super::{Membership, link_query}; + use crate::scene::usd_import::index::data::PrimData; + use crate::scene::usd_import::index::{Single, Streamed, input_chain}; + use crate::scene::usd_import::{open_stage_masked, stage_builder}; + + const STAGE: &str = r#"#usda 1.0 +def Xform "World" +{ + def Scope "Lights" + { + def SphereLight "key" (prepend apiSchemas = ["CollectionAPI:lightLink"]) + { + rel collection:lightLink:includes = [, ] + uniform bool collection:lightLink:includeRoot = 0 + } + } + def Xform "A" { def Mesh "M" { int[] faceVertexCounts = [3] int[] faceVertexIndices = [0, 1, 2] point3f[] points = [(0,0,0), (1,0,0), (0,1,0)] } } + def Xform "B" { def Mesh "M" { int[] faceVertexCounts = [3] int[] faceVertexIndices = [0, 1, 2] point3f[] points = [(0,0,0), (1,0,0), (0,1,0)] } } + def Xform "C" + { + def Mesh "M" { int[] faceVertexCounts = [3] int[] faceVertexIndices = [0, 1, 2] point3f[] points = [(0,0,0), (1,0,0), (0,1,0)] } + def Xform "Inner" { def Mesh "M" { int[] faceVertexCounts = [3] int[] faceVertexIndices = [0, 1, 2] point3f[] points = [(0,0,0), (1,0,0), (0,1,0)] } } + } +} +"#; + const LIGHT: &str = "/World/Lights/key"; + const RECEIVERS: [(&str, bool); 4] = [ + ("/World/A/M", true), + ("/World/B/M", false), + ("/World/C/M", false), + ("/World/C/Inner/M", true), + ]; + + fn path(p: &str) -> sdf::Path { + sdf::Path::new(p).unwrap() + } + + /// The stage, in a file of its own per test: tests run at once. + fn write(name: &str) -> std::path::PathBuf { + let dir = std::env::temp_dir().join("crust_light_link_agreement"); + std::fs::create_dir_all(&dir).unwrap(); + let file = dir.join(format!("{name}.usda")); + std::fs::write(&file, STAGE).unwrap(); + file + } + + /// Whether Moho's `categories` of `receiver` in `top` hold the + /// light's `lightLink` category. + fn moho_says(top: &dyn SceneIndex, receiver: &str) -> bool { + use moho::tokens::{collections, light}; + let category = PrimData::at(top, &path(LIGHT)) + .locate([light::LIGHT, light::LIGHT_LINK]) + .and_then(|d| d.value()); + let Some(sdf::Value::Token(category)) = category else { + panic!("the light has a lightLink category"); + }; + PrimData::at(top, &path(receiver)) + .locate([collections::CATEGORIES]) + .and_then(|d| d.as_container().map(|c| c.names())) + .unwrap_or_default() + .contains(&category) + } + + fn crust_says(membership: &Membership, receiver: &str) -> bool { + membership.is_included(&path(receiver)) + } + + #[test] + fn on_one_stage() { + let file = write("one_stage"); + let stage = stage_builder().open(file.to_str().unwrap()).unwrap(); + let single = Single::new(stage.clone(), None); + let light = PrimData::in_index(&single.input.chain, &path(LIGHT)); + let membership = link_query(&stage, &light, "lightLink").expect("restricts"); + for (receiver, expected) in RECEIVERS { + assert_eq!(crust_says(&membership, receiver), expected, "{receiver}"); + assert_eq!( + moho_says(single.top.as_ref(), receiver), + expected, + "{receiver}" + ); + } + } + + #[test] + fn streamed_with_every_input_present() { + let file = write("streamed"); + let name = file.to_str().unwrap(); + let index = stage_builder() + .load(moho::openusd::usd::InitialLoadSet::LoadNone) + .open(name) + .unwrap(); + let streamed = Streamed::new(input_chain(index, None, true), None); + let mut chunks = Vec::new(); + for root in ["/World/Lights", "/World/A", "/World/B", "/World/C"] { + let stage = open_stage_masked(&file, name, Some(vec![path(root)])).unwrap(); + chunks.push((streamed.add_chunk(stage.clone(), &path(root)), stage)); + } + // The light as its own chunk holds it. + let (lights, lights_stage) = &chunks[0]; + let light = PrimData::in_index(&lights.chain, &path(LIGHT)); + let membership = link_query(lights_stage, &light, "lightLink").expect("restricts"); + for (receiver, expected) in RECEIVERS { + assert_eq!(crust_says(&membership, receiver), expected, "{receiver}"); + assert_eq!( + moho_says(streamed.top.as_ref(), receiver), + expected, + "{receiver}" + ); + } + } + } } diff --git a/crates/crust-core/src/scene/usd_import/lights.rs b/crates/crust-core/src/scene/usd_import/lights.rs index 754aad6aa..d5a613d47 100644 --- a/crates/crust-core/src/scene/usd_import/lights.rs +++ b/crates/crust-core/src/scene/usd_import/lights.rs @@ -1,18 +1,14 @@ -//! UsdLux lights → [`LightList`] entries (and their emissive scene geometry). +//! UsdLux lights → [`LightList`] entries (and their emissive scene geometry), +//! read from the scene index: each light's inputs from its prim's generic +//! data (`__usdAttributes`, the `light` container's source), its USD type and +//! applied API schemas from `__usdPrimInfo` (Moho's M8). The light's +//! transform is the walk's. use crate::{record_warning, warning}; use std::sync::Arc; use crust_rt::Geometry; use glam::{Affine3A, Mat3A, Mat4 as GMat4, Vec3, Vec3A}; -use openusd::usd::{Attribute, Prim, Stage}; -use openusd_schemas::geom::StageMetadata; -use openusd_schemas::lux::{ - BoundableLightBaseSchema, CylinderLight, CylinderLightSchema, DiskLight, DiskLightSchema, - DistantLight as UsdDistantLight, DistantLightSchema, DomeLight, DomeLight_1, DomeLight_1Schema, - DomeLightSchema, LightAPI, NonboundableLightBaseSchema, PoleAxis, RectLight, RectLightSchema, - ShapingAPI, SphereLight, SphereLightSchema, -}; use tracing::debug; use crate::color::Space; @@ -25,11 +21,10 @@ use crate::lux::{IesShaping, Shaping, distant_illuminance, distant_size_factor}; use crate::material::Emissive; use crate::rt_world::WorldBuilder; -use super::assets::{asset_path, cached_asset, explained, timed_asset}; -use super::attrs::{ - attr_bool, attr_f32, attr_own_color_space, attr_vec3, custom_bool, custom_color, custom_f32, - custom_token, decode_text, in_working, infinite_light_escape_mask, light_ray_mask, value_at, -}; +use super::assets::{asset_value_path, cached_asset, explained, timed_asset}; +use super::attrs::{RI_CAMERA_VISIBILITY, decode_text, decode_vec3}; +use super::index::data::{PrimData, color_space, stage_metadata}; +use super::materials::named_space; use super::{ImportCaches, ImportCtx}; /// The `LightAPI` quantities every UsdLux light shares. @@ -59,7 +54,7 @@ pub(super) struct LightInputs { } /// Reads [`LightInputs`], warning about a non-finite value. -pub(super) fn light_inputs(prim: &Prim, light: &LightAPI) -> LightInputs { +pub(super) fn light_inputs(prim: &PrimData) -> LightInputs { // A non-finite value would reach both MIS halves as NaN radiance, so it // falls back to the schema default like the shaping inputs do. let finite = |name: &str, v: Option, fallback: f32| match v { @@ -74,9 +69,9 @@ pub(super) fn light_inputs(prim: &Prim, light: &LightAPI) -> LightInputs { } v => v.unwrap_or(fallback), }; - let intensity = finite("intensity", attr_f32(&light.intensity_attr()), 1.0); - let exposure = finite("exposure", attr_f32(&light.exposure_attr()), 0.0); - let color = match attr_vec3(&light.color_attr()) { + let intensity = finite("intensity", prim.custom_f32("inputs:intensity"), 1.0); + let exposure = finite("exposure", prim.custom_f32("inputs:exposure"), 0.0); + let color = match prim.value("inputs:color").and_then(decode_vec3) { Some(c) if !c.is_finite() => { warning!( LightNonFiniteInput, @@ -93,29 +88,35 @@ pub(super) fn light_inputs(prim: &Prim, light: &LightAPI) -> LightInputs { intensity, exposure, color, - normalize: attr_bool(&light.normalize_attr()).unwrap_or(false), + normalize: prim.custom_bool("inputs:normalize").unwrap_or(false), gains: LobeGains { - diffuse: finite("diffuse", attr_f32(&light.diffuse_attr()), 1.0), - specular: finite("specular", attr_f32(&light.specular_attr()), 1.0), + diffuse: finite("diffuse", prim.custom_f32("inputs:diffuse"), 1.0), + specular: finite("specular", prim.custom_f32("inputs:specular"), 1.0), }, } } /// Reads the shared `LightAPI` inputs. -fn lux_params(prim: &Prim, light: &LightAPI, working: Space) -> LuxParams { +fn lux_params(prim: &PrimData, working: Space) -> LuxParams { let LightInputs { intensity, exposure, color, normalize, gains, - } = light_inputs(prim, light); - let color = in_working(&light.color_attr(), color, working); + } = light_inputs(prim); + let color = match color_space(prim, "inputs:color") { + Some(space) => crate::color::convert(color, space, working), + None => color, + }; let gain = intensity * 2f32.powf(exposure); let mut emission = color * gain; - if attr_bool(&light.enable_color_temperature_attr()).unwrap_or(false) { - let kelvin = attr_f32(&light.color_temperature_attr()).unwrap_or(6500.0); + if prim + .custom_bool("inputs:enableColorTemperature") + .unwrap_or(false) + { + let kelvin = prim.custom_f32("inputs:colorTemperature").unwrap_or(6500.0); // The blackbody leaves the Rec.709 gamut below ~1900 K; clamp the // product, not the factor, so a negative channel cannot flip sign // against a negative `color`. @@ -141,17 +142,14 @@ fn lux_params(prim: &Prim, light: &LightAPI, working: Space) -> LuxParams { /// applied the schema's `cone:angle = 90` is in force (Hydra hands the /// delegate the schema fallback), without it there is no such attribute and /// the cone is open (hdEmbree's own default, 180°). openusd does not report -/// schema fallbacks for applied API schemas, so that rule is applied here. +/// schema fallbacks for applied API schemas, so that rule is applied here; +/// whether the API is applied is `__usdPrimInfo/apiSchemas`. fn lux_shaping( - stage: &Stage, - prim: &Prim, + prim: &PrimData, light_to_world: Mat3A, caches: &mut ImportCaches, ) -> Option { - let applied = ShapingAPI::get(stage, prim.path().clone()) - .ok() - .flatten() - .is_some(); + let applied = prim.api_schemas().iter().any(|a| a == "ShapingAPI"); // A non-finite authored value survives every formula below and turns the // light's radiance — both MIS halves of it — into NaN. Such a value is // refused and replaced by the input's fallback, with a warning. @@ -170,13 +168,13 @@ fn lux_shaping( let mut shaping = Shaping::new(light_to_world); shaping.focus = finite( "inputs:shaping:focus", - custom_f32(prim, "inputs:shaping:focus"), + prim.custom_f32("inputs:shaping:focus"), ) .unwrap_or(0.0); // The schema's fallback is black, not white ("The default tint is // black", usdLux/schema.usda): unauthored, focus darkens off-axis // emission rather than leaving it neutral, exactly as in hdEmbree. - shaping.focus_tint = match custom_color(prim, "inputs:shaping:focusTint", caches.working) { + shaping.focus_tint = match prim.custom_color("inputs:shaping:focusTint", caches.working) { Some(c) if !c.is_finite() => { warning!( LightNonFiniteInput, @@ -190,7 +188,7 @@ fn lux_shaping( }; shaping.cone_angle_deg = finite( "inputs:shaping:cone:angle", - custom_f32(prim, "inputs:shaping:cone:angle"), + prim.custom_f32("inputs:shaping:cone:angle"), ) .unwrap_or(if applied { Shaping::SCHEMA_CONE_ANGLE_DEG @@ -199,14 +197,15 @@ fn lux_shaping( }); shaping.cone_softness = finite( "inputs:shaping:cone:softness", - custom_f32(prim, "inputs:shaping:cone:softness"), + prim.custom_f32("inputs:shaping:cone:softness"), ) .unwrap_or(0.0); - let ies_file = asset_path( - &prim.attribute("inputs:shaping:ies:file"), - caches.stage_path, - ); + let ies_file = prim.value("inputs:shaping:ies:file").and_then(|v| { + asset_value_path(&v, caches.stage_path, &|| { + caches.layer_dir(prim.path(), "inputs:shaping:ies:file") + }) + }); if let Some(path) = ies_file { let assets = caches.assets; let profile = cached_asset( @@ -230,10 +229,12 @@ fn lux_shaping( profile, angle_scale: finite( "inputs:shaping:ies:angleScale", - custom_f32(prim, "inputs:shaping:ies:angleScale"), + prim.custom_f32("inputs:shaping:ies:angleScale"), ) .unwrap_or(0.0), - normalize: custom_bool(prim, "inputs:shaping:ies:normalize").unwrap_or(false), + normalize: prim + .custom_bool("inputs:shaping:ies:normalize") + .unwrap_or(false), }); } @@ -293,7 +294,7 @@ fn perpendicular(a: Vec3A, b: Vec3A) -> bool { fn emit_round_light( world: &mut WorldBuilder, lights: &mut LightList, - prim: &Prim, + prim: &PrimData, unit: UnitShape, world_xf: GMat4, radius: f32, @@ -423,16 +424,10 @@ fn emit_round_light( /// transform — a non-uniform scale makes an ellipsoid. `treatAsPoint` is a /// hint for renderers without area lights and is ignored, as the schema /// permits. -pub(super) fn emit_sphere_light( - stage: &Stage, - ctx: &mut ImportCtx, - prim: &Prim, - light: &SphereLight, - world_xf: GMat4, -) { - let radius = attr_f32(&light.radius_attr()).unwrap_or(0.5); - let params = lux_params(prim, &light.light_api(), ctx.caches.working); - let shaping = lux_shaping(stage, prim, linear_part(world_xf), &mut ctx.caches); +pub(super) fn emit_sphere_light(ctx: &mut ImportCtx, prim: &PrimData, world_xf: GMat4) { + let radius = prim.custom_f32("inputs:radius").unwrap_or(0.5); + let params = lux_params(prim, ctx.caches.working); + let shaping = lux_shaping(prim, linear_part(world_xf), &mut ctx.caches); emit_round_light( &mut ctx.world, &mut ctx.lights, @@ -448,16 +443,10 @@ pub(super) fn emit_sphere_light( /// `UsdLuxDiskLight`: a disk of `inputs:radius` (0.5) in the local XY /// plane, emitting from one side, along local −Z. -pub(super) fn emit_disk_light( - stage: &Stage, - ctx: &mut ImportCtx, - prim: &Prim, - light: &DiskLight, - world_xf: GMat4, -) { - let radius = attr_f32(&light.radius_attr()).unwrap_or(0.5); - let params = lux_params(prim, &light.light_api(), ctx.caches.working); - let shaping = lux_shaping(stage, prim, linear_part(world_xf), &mut ctx.caches); +pub(super) fn emit_disk_light(ctx: &mut ImportCtx, prim: &PrimData, world_xf: GMat4) { + let radius = prim.custom_f32("inputs:radius").unwrap_or(0.5); + let params = lux_params(prim, ctx.caches.working); + let shaping = lux_shaping(prim, linear_part(world_xf), &mut ctx.caches); emit_round_light( &mut ctx.world, &mut ctx.lights, @@ -475,17 +464,11 @@ pub(super) fn emit_disk_light( /// `inputs:length` (1) along local X, centred on the origin, emitting /// outward from its side and not from its end caps. `treatAsLine` is /// ignored, as `treatAsPoint` is. -pub(super) fn emit_cylinder_light( - stage: &Stage, - ctx: &mut ImportCtx, - prim: &Prim, - light: &CylinderLight, - world_xf: GMat4, -) { - let radius = attr_f32(&light.radius_attr()).unwrap_or(0.5); - let length = attr_f32(&light.length_attr()).unwrap_or(1.0); - let params = lux_params(prim, &light.light_api(), ctx.caches.working); - let shaping = lux_shaping(stage, prim, linear_part(world_xf), &mut ctx.caches); +pub(super) fn emit_cylinder_light(ctx: &mut ImportCtx, prim: &PrimData, world_xf: GMat4) { + let radius = prim.custom_f32("inputs:radius").unwrap_or(0.5); + let length = prim.custom_f32("inputs:length").unwrap_or(1.0); + let params = lux_params(prim, ctx.caches.working); + let shaping = lux_shaping(prim, linear_part(world_xf), &mut ctx.caches); emit_round_light( &mut ctx.world, &mut ctx.lights, @@ -508,8 +491,13 @@ pub(super) fn emit_cylinder_light( /// stored" — already in the working space — and keeps that space: the /// environment's importance sampling weighs its texels by the working /// space's luminance, which `ColorSpace::RAW` would lose. -fn texture_color_space(file: &openusd::usd::Attribute, working: Space) -> crate::ColorSpace { - match attr_own_color_space(file) { +fn texture_color_space(prim: &PrimData, file: &str, working: Space) -> crate::ColorSpace { + let own = prim + .metadata(file, moho::tokens::usd::COLOR_SPACE) + .and_then(decode_text) + .filter(|n| !n.is_empty()) + .and_then(|name| named_space(&prim.attribute_path(file), &name)); + match own { Some(space) if space.is_data() => crate::ColorSpace::new(working, working), Some(space) => crate::ColorSpace::new(space, working), None => crate::ColorSpace::AUTO.into_working(working), @@ -518,10 +506,17 @@ fn texture_color_space(file: &openusd::usd::Attribute, working: Space) -> crate: /// `RectLight`'s `inputs:texture:file`, decoded by the host. Cached by /// resolved path: a rig commonly reuses one card texture on many lights. -fn rect_light_texture(prim: &Prim, caches: &mut ImportCaches) -> Option> { - let file = prim.attribute("inputs:texture:file"); - let path = asset_path(&file, caches.stage_path)?; - let space = texture_color_space(&file, caches.working); +fn rect_light_texture( + prim: &PrimData, + caches: &mut ImportCaches, +) -> Option> { + let file = "inputs:texture:file"; + let path = prim.value(file).and_then(|v| { + asset_value_path(&v, caches.stage_path, &|| { + caches.layer_dir(prim.path(), file) + }) + })?; + let space = texture_color_space(prim, file, caches.working); let assets = caches.assets; let loaded = cached_asset( &mut caches.light_textures, @@ -561,15 +556,9 @@ fn rect_light_texture(prim: &Prim, caches: &mut ImportCaches) -> Option 0.0 && height > 0.0) { warning!( LightDegenerateShape, @@ -580,8 +569,8 @@ pub(super) fn emit_rect_light( ); return; } - let params = lux_params(prim, &light.light_api(), ctx.caches.working); - let shaping = lux_shaping(stage, prim, linear_part(world_xf), &mut ctx.caches); + let params = lux_params(prim, ctx.caches.working); + let shaping = lux_shaping(prim, linear_part(world_xf), &mut ctx.caches); let texture = rect_light_texture(prim, &mut ctx.caches); let corner = world_xf.transform_point3(Vec3::new(-0.5 * width, -0.5 * height, 0.0)); @@ -688,8 +677,7 @@ pub(super) fn emit_rect_light( /// rays find it by escaping along a direction inside its cone. pub(super) fn emit_distant_light( lights: &mut LightList, - prim: &Prim, - light: &UsdDistantLight, + prim: &PrimData, world_xf: GMat4, working: Space, ) { @@ -702,8 +690,8 @@ pub(super) fn emit_distant_light( ); return; } - let angle = attr_f32(&light.angle_attr()).unwrap_or(0.53).max(0.0); - let params = lux_params(prim, &light.light_api(), working); + let angle = prim.custom_f32("inputs:angle").unwrap_or(0.53).max(0.0); + let params = lux_params(prim, working); let direction = Vec3A::new(direction.x, direction.y, direction.z); // Everything becomes the illuminance the *authored* cone delivers to a @@ -739,60 +727,59 @@ pub(super) fn emit_distant_light( } /// What [`emit_dome_light`] reads from either dome schema. `DomeLight_1` -/// does not derive from `DomeLight`, so each view answers for its own -/// declarations. +/// does not derive from `DomeLight`, so each answers for its own +/// declarations; both name the same inputs. pub(super) struct DomeInputs { schema: &'static str, - light_api: LightAPI, - texture_file: Attribute, - texture_format: Attribute, /// Turns the dome's own frame onto its pole axis, before the prim's /// transform: the identity, or +90° about X for a +Z pole. pole: Mat3A, } impl DomeInputs { - /// A `UsdLuxDomeLight`, whose pole is +Y whatever the stage's up axis. - /// Its schema declares no `poleAxis`, and an authored one is ignored, - /// as OpenUSD's imaging reads it only through `UsdLuxDomeLight_1`. - pub(super) fn dome_light(light: &DomeLight) -> Self { - Self { - schema: "DomeLight", - light_api: light.light_api(), - texture_file: light.texture_file_attr(), - texture_format: light.texture_format_attr(), - pole: Mat3A::IDENTITY, + /// The dome `prim` is, by its USD type: `None` for a prim that is no dome. + /// + /// A `UsdLuxDomeLight`'s pole is +Y whatever the stage's up axis. Its + /// schema declares no `poleAxis`, and an authored one is ignored, as + /// OpenUSD's imaging reads it only through `UsdLuxDomeLight_1`. + /// + /// A `UsdLuxDomeLight_1`'s `poleAxis` puts its top pole on +Z when it is + /// `Z`, or `scene` (the fallback) on a stage whose `upAxis` is `Z`. That + /// is OpenUSD's `_GetDomeOffset` (`usdImaging/domeLight_1Adapter.cpp`): a + /// +90° rotation about X, for the dome alone. Typhoon (hdEmbree) never + /// applies it; crust follows the schema. + pub(super) fn of(prim: &PrimData) -> Option { + if prim.is_a("DomeLight") { + return Some(Self { + schema: "DomeLight", + pole: Mat3A::IDENTITY, + }); } - } - - /// A `UsdLuxDomeLight_1`, whose `poleAxis` puts its top pole on +Z when - /// it is `Z`, or `scene` (the fallback) on a stage whose `upAxis` is - /// `Z`. That is OpenUSD's `_GetDomeOffset` (`usdImaging/ - /// domeLight_1Adapter.cpp`): a +90° rotation about X, for the dome - /// alone. Typhoon (hdEmbree) never applies it; crust follows the schema. - pub(super) fn dome_light_1(stage: &Stage, light: &DomeLight_1) -> Self { - let z_pole = match light.pole_axis().ok().flatten().unwrap_or_default() { - PoleAxis::Z => true, - PoleAxis::Y => false, - // A stage takes its metadata from its root layer; unauthored - // reads as UsdGeom's fallback, Y. - PoleAxis::SceneUp => stage - .up_axis() - .ok() - .flatten() - .is_some_and(|axis| axis.as_str() == "Z"), - }; - Self { - schema: "DomeLight_1", - light_api: light.light_api(), - texture_file: light.texture_file_attr(), - texture_format: light.texture_format_attr(), - // Columns are the images of local X, Y, Z: +Y → +Z, +Z → −Y. - pole: if z_pole { - Mat3A::from_cols(Vec3A::X, Vec3A::Z, -Vec3A::Y) - } else { - Mat3A::IDENTITY - }, + match prim.is_a("DomeLight_1") { + true => { + let z_pole = match prim.resolved("poleAxis").and_then(decode_text).as_deref() { + Some("Z") => true, + Some("Y") => false, + // `scene`, the fallback: the stage's `upAxis`, whose + // own fallback is Y. + _ => prim.index().is_some_and(|index| { + stage_metadata(index.as_ref(), "upAxis") + .and_then(|(v, _)| decode_text(v)) + .is_some_and(|axis| axis == "Z") + }), + }; + Some(Self { + schema: "DomeLight_1", + // Columns are the images of local X, Y, Z: +Y → +Z, + // +Z → −Y. + pole: if z_pole { + Mat3A::from_cols(Vec3A::X, Vec3A::Z, -Vec3A::Y) + } else { + Mat3A::IDENTITY + }, + }) + } + false => None, } } } @@ -812,11 +799,20 @@ impl DomeInputs { /// rotation, orient the sky. pub(super) fn emit_dome_light( ctx: &mut ImportCtx, - prim: &Prim, + prim: &PrimData, dome: &DomeInputs, world_xf: GMat4, ) { - let (lights, stage_path, assets) = (&mut ctx.lights, ctx.stage_path, ctx.assets); + // The authoring layer anchors the path, not the root layer: the Moana + // island's lights author `../textures/islandsun.exr` relative to + // `usd/island.usda` (see `asset_value_path`). + let file = "inputs:texture:file"; + let texture_path = prim.value(file).and_then(|v| { + asset_value_path(&v, ctx.stage_path, &|| { + ctx.caches.layer_dir(prim.path(), file) + }) + }); + let (lights, assets) = (&mut ctx.lights, ctx.assets); let working = ctx.caches.working; // Accumulates time spent in the host's decoder, so the report can // separate "decoding a 14k HDRI" from the rest of the traversal. @@ -826,18 +822,15 @@ pub(super) fn emit_dome_light( emission: tint, gains, .. - } = lux_params(prim, &dome.light_api, working); + } = lux_params(prim, working); - let format = value_at(&dome.texture_format).and_then(decode_text); - // The authoring layer anchors the path, not the root layer: the Moana - // island's lights author `../textures/islandsun.exr` relative to - // `usd/island.usda` (see `asset_path`). - let map = match asset_path(&dome.texture_file, stage_path) { + let format = prim.value("inputs:texture:format").and_then(decode_text); + let map = match texture_path { Some(texture) => match format.as_deref() { // `automatic` infers from the image; for the equirectangular // images a dome light normally carries that means latlong. None | Some("latlong") | Some("automatic") => { - let space = texture_color_space(&dome.texture_file, working); + let space = texture_color_space(prim, file, working); let failed = &mut ctx.caches.failed_assets; let loaded = timed_asset(asset_time, || { explained(failed, &texture, || { @@ -903,7 +896,7 @@ pub(super) fn emit_dome_light( /// — the label a light group `` selects. Other renderers' tag /// attributes are not read yet: their exact names are still to be checked /// against real exports. -fn tag_last(lights: &mut LightList, prim: &Prim, gains: LobeGains) { +fn tag_last(lights: &mut LightList, prim: &PrimData, gains: LobeGains) { let index = lights.count() - 1; lights.set_name(index, &prim.path().to_string()); if gains != LobeGains::ONE { @@ -915,8 +908,40 @@ fn tag_last(lights: &mut LightList, prim: &Prim, gains: LobeGains) { ); lights.set_lobe_gains(index, gains); } - if let Some(tag) = custom_token(prim, "crust:light:lpeTag") { + if let Some(tag) = prim.custom_token("crust:light:lpeTag") { debug!("{}: LPE tag {tag:?}", prim.path()); lights.set_lpe_tag(index, Some(&tag)); } } + +/// `crust:light:cameraVisible` first, RenderMan's primvar (an int, non-zero +/// meaning visible) as the portable fallback (`attrs::light_ray_mask`). +fn authored_camera_visibility(prim: &PrimData) -> Option { + prim.custom_bool("crust:light:cameraVisible") + .or_else(|| prim.custom_bool(RI_CAMERA_VISIBILITY)) +} + +/// Ray mask for a light's source geometry, and whether that source is a +/// transparent emitter: `attrs::light_ray_mask`, from generic data. +fn light_ray_mask(prim: &PrimData) -> (crate::ray::RayMask, bool) { + use crate::ray::{MASK_CAMERA, MASK_INDIRECT, MASK_SHADOW, RayMask}; + if let Some(m) = prim.custom_i32("crust:rayMask") { + return (RayMask(m as u32), false); + } + if authored_camera_visibility(prim).unwrap_or(false) { + (MASK_CAMERA | MASK_SHADOW | MASK_INDIRECT, false) + } else { + (MASK_INDIRECT, true) + } +} + +/// Which escaping rays see a light at infinity: +/// `attrs::infinite_light_escape_mask`, from generic data. +fn infinite_light_escape_mask(prim: &PrimData) -> crate::ray::RayMask { + use crate::ray::{MASK_ALL, MASK_CAMERA, RayMask}; + if authored_camera_visibility(prim).unwrap_or(true) { + MASK_ALL + } else { + RayMask(MASK_ALL.0 & !MASK_CAMERA.0) + } +} diff --git a/crates/crust-core/src/scene/usd_import/listing.rs b/crates/crust-core/src/scene/usd_import/listing.rs index 5364ddcf0..acf96ee50 100644 --- a/crates/crust-core/src/scene/usd_import/listing.rs +++ b/crates/crust-core/src/scene/usd_import/listing.rs @@ -9,37 +9,36 @@ //! the import refuses for its evaluated values (a zero radius, a transform //! that collapses it) is still listed; see [`ListKind::Light`]. +use moho::{openusd, openusd_schemas}; use std::collections::HashSet; use std::path::Path; use std::time::Instant; use openusd::sdf; -use openusd::usd::{InitialLoadSet, Prim, Stage}; +use openusd::usd::{Attribute, CollectionAPI, InitialLoadSet, Prim, Stage}; use openusd_schemas::geom::{ BasisCurves as UsdBasisCurves, Camera as UsdCamera, Mesh as UsdMesh, NurbsCurves as UsdNurbsCurves, PointInstancer, PointInstancerSchema, Sphere as UsdSphere, }; +use openusd_schemas::geom::{Capsule, Capsule_1, Cone, Cube, Cylinder, Cylinder_1, Plane}; use openusd_schemas::lux::{ - CylinderLight, DiskLight, DistantLight, DomeLight, DomeLight_1, LightAPI, RectLight, - SphereLight, + CylinderLight, DiskLight, DistantLight, DomeLight, DomeLight_1, RectLight, SphereLight, }; use openusd_schemas::render::Pass as UsdRenderPass; -use openusd_schemas::shade::Material as UsdMaterial; +use openusd_schemas::shade::{ + BindingStrength, CollectionBinding, Material as UsdMaterial, MaterialBindingAPI, Shader, + TerminalSource, +}; use tracing::debug; -use super::attrs::custom_token; +use super::attrs::decode_text; use super::camera::camera_lens; -use super::implicit::Shape; -use super::lights::{LightInputs, light_inputs}; -use super::materials::{bound_material, surface_shader_id}; +use super::index::data::PrimData; +use super::lights::light_inputs; +use super::materials::{RENDER_BINDING_PURPOSE, SURFACE_RENDER_CONTEXTS}; use super::products::{Framing, import_render_products}; -use super::settings::{ - CameraPick, import_render_settings, pick_camera, render_source, wanted_camera, -}; -use super::time::EvalTimeScope; -use super::{ - Prune, WalkScope, open_stage, prim_at, prune_reason, release_stage, stage_builder, stream_roots, -}; +use super::settings::{CameraPick, import_render_settings, pick_camera, wanted_camera}; +use super::{Prune, open_stage, prim_at, release_stage, stage_builder, stream_roots}; use crate::scene::{CameraRecord, LightRecord, ListKind, ListRecord, MaterialRecord, PassRecord}; use crate::tracer::RenderSettings; @@ -51,7 +50,7 @@ pub(crate) fn list_prims(path: &Path, kind: ListKind) -> Result, cra let chunks = stream_roots(&open_index(path, path_str)?); let mut found = Found::default(); for_each_chunk(path, path_str, &chunks, |stage| { - collect(stage, kind, Order::Authored, |prim, _| { + collect(stage, kind, Order::Authored, None, |prim, _| { found.push(prim.path().to_string(), ()); }); })?; @@ -77,7 +76,6 @@ pub(crate) fn list_records( { return Err(crate::Error::InvalidFrame(t)); } - let _time_scope = EvalTimeScope::enter(frame); let started = Instant::now(); let path_str = utf8(path)?; let index = open_index(path, path_str)?; @@ -85,13 +83,17 @@ pub(crate) fn list_records( // What the import reads before it meets a camera: the settings (the // image's aspect, which the aperture is conformed to) and the camera it // was told to use. - let products = import_render_products(&index, None, None); - let mut settings = import_render_settings(&index, None); + // The settings the import would read, through the scene index as the + // import reads them. + let scene = super::index::input_chain(index.clone(), frame, true); + let products = import_render_products(scene.chain.as_ref(), None, None); + let mut settings = import_render_settings(scene.chain.as_ref(), None); if let Some((w, h)) = products.resolution { settings = settings.with_resolution(w, h); } let framing = products.framing; - let wanted = wanted_camera(None, products.camera, &index, None); + let wanted = wanted_camera(None, products.camera, scene.chain.as_ref(), None); + drop(scene); drop(index); let mut found: Found = Found::default(); @@ -100,20 +102,25 @@ pub(crate) fn list_records( let mut first_camera: Option = None; let mut bound: HashSet = HashSet::new(); for_each_chunk(path, path_str, &chunks, |stage| { - collect(stage, kind, Order::Authored, |prim, hidden| { - if let Some(r) = record(stage, prim, kind, hidden, &settings, framing) { + // A camera's lens is read as the import reads it, through the scene + // index of the stage it is on. + let scene = matches!(kind, ListKind::Camera | ListKind::Light) + .then(|| super::index::input_chain(stage.clone(), frame, false)); + collect(stage, kind, Order::Authored, frame, |prim, hidden| { + let scene = scene.as_ref().map(|s| s.chain.as_ref()); + if let Some(r) = record(stage, scene, prim, kind, hidden, &settings, framing, frame) { found.push(prim.path().to_string(), r); } }); match kind { ListKind::Camera if first_camera.is_none() => { - collect(stage, kind, Order::Import, |prim, _| { + collect(stage, kind, Order::Import, frame, |prim, _| { if first_camera.is_none() { first_camera = Some(prim.path().to_string()); } }); } - ListKind::Material => bound_materials(stage, &mut bound), + ListKind::Material => bound_materials(stage, &mut bound, frame), _ => {} } })?; @@ -195,18 +202,21 @@ fn for_each_chunk( /// One listed prim's record, its derived fields (`is_render_camera`, /// `bound`) left for the caller, who has seen every chunk. +#[allow(clippy::too_many_arguments)] fn record( stage: &Stage, + scene: Option<&dyn moho::scene_index::SceneIndex>, prim: &Prim, kind: ListKind, hidden: bool, settings: &RenderSettings, framing: Framing, + frame: Option, ) -> Option { let path = prim.path().to_string(); Some(match kind { ListKind::Camera => { - let lens = camera_lens(stage, prim, settings, framing)?; + let lens = camera_lens(scene?, stage, prim.path(), settings, framing, frame)?; ListRecord::Camera(CameraRecord { path, focal_length_mm: lens.focal_length, @@ -220,24 +230,21 @@ fn record( }) } ListKind::Light => { - let p = || prim.path().clone(); - let (kind, inputs) = if let Ok(Some(_)) = SphereLight::get(stage, p()) { - read("sphere", prim) - } else if let Ok(Some(_)) = RectLight::get(stage, p()) { - read("rect", prim) - } else if let Ok(Some(_)) = DiskLight::get(stage, p()) { - read("disk", prim) - } else if let Ok(Some(_)) = CylinderLight::get(stage, p()) { - read("cylinder", prim) - } else if let Ok(Some(_)) = DistantLight::get(stage, p()) { - read("distant", prim) - } else if let Ok(Some(_)) = DomeLight::get(stage, p()) { - read("dome", prim) - } else if let Ok(Some(_)) = DomeLight_1::get(stage, p()) { - read("dome", prim) - } else { - return None; - }; + // Read as the import reads it, through the scene index. + let data = PrimData::at(scene?, prim.path()); + let kind = [ + ("SphereLight", "sphere"), + ("RectLight", "rect"), + ("DiskLight", "disk"), + ("CylinderLight", "cylinder"), + ("DistantLight", "distant"), + ("DomeLight", "dome"), + ("DomeLight_1", "dome"), + ] + .into_iter() + .find(|(schema, _)| data.is_a(schema)) + .map(|(_, kind)| kind)?; + let inputs = light_inputs(&data); ListRecord::Light(LightRecord { path, kind, @@ -248,25 +255,17 @@ fn record( }) } ListKind::Material => ListRecord::Material(MaterialRecord { - surface: surface_shader_id(stage, prim.path()), + surface: surface_shader_id(stage, prim.path(), frame), path, bound: false, }), ListKind::Pass => ListRecord::Pass(PassRecord { - render_source: render_source(stage, prim.path()).map(|t| t.to_string()), + render_source: pass_render_source(stage, prim.path()).map(|t| t.to_string()), path, }), }) } -/// A light's type name and its `LightAPI` inputs. -fn read(kind: &'static str, prim: &Prim) -> (&'static str, LightInputs) { - ( - kind, - light_inputs(prim, &LightAPI::from_prim_unchecked(prim.clone())), - ) -} - /// The materials the import's binding resolution ([`bound_material`]) /// resolves the geometry prims it renders to — meshes, spheres, curves and /// implicit shapes, @@ -274,12 +273,12 @@ fn read(kind: &'static str, prim: &Prim) -> (&'static str, LightInputs) { /// prototype walked once in its place, a `PointInstancer`'s `prototypes` /// targets walked once each in prototype scope (they render through it, a /// `class` prototype included). -fn bound_materials(stage: &Stage, out: &mut HashSet) { +fn bound_materials(stage: &Stage, out: &mut HashSet, frame: Option) { let mut prototypes: HashSet = HashSet::new(); let mut stack: Vec<(Prim, WalkScope)> = vec![(prim_at(stage, sdf::Path::abs_root()), WalkScope::Stage)]; while let Some((prim, scope)) = stack.pop() { - if prune_reason(&prim, scope).is_some() { + if prune_reason(&prim, scope, frame).is_some() { continue; } if prim.is_instance().unwrap_or(false) @@ -308,7 +307,7 @@ fn bound_materials(stage: &Stage, out: &mut HashSet) { || matches!(UsdSphere::get(stage, p()), Ok(Some(_))) || matches!(UsdBasisCurves::get(stage, p()), Ok(Some(_))) || matches!(UsdNurbsCurves::get(stage, p()), Ok(Some(_))) - || (custom_token(&prim, "crust:volume:type").is_none() && Shape::read(&prim).is_some()); + || (custom_token(&prim, "crust:volume:type", frame).is_none() && is_shape(&prim)); if geometry && let Some(m) = bound_material(stage, &prim) { out.insert(m.to_string()); } @@ -364,10 +363,16 @@ impl Found { /// Calls `found` with each `kind` prim a walk of `stage` meets, in `order`, /// and whether it is under an invisible ancestor. -fn collect(stage: &Stage, kind: ListKind, order: Order, mut found: impl FnMut(&Prim, bool)) { +fn collect( + stage: &Stage, + kind: ListKind, + order: Order, + frame: Option, + mut found: impl FnMut(&Prim, bool), +) { let mut stack: Vec<(Prim, bool)> = vec![(prim_at(stage, sdf::Path::abs_root()), false)]; while let Some((prim, parent_hidden)) = stack.pop() { - let Visit::Enter { hidden } = visit(stage, &prim, kind, parent_hidden) else { + let Visit::Enter { hidden } = visit(stage, &prim, kind, parent_hidden, frame) else { continue; }; if is_kind(stage, &prim, kind) { @@ -385,7 +390,7 @@ fn collect(stage: &Stage, kind: ListKind, order: Order, mut found: impl FnMut(&P /// Whether the walk for `kind` enters `prim`, following the import: /// -/// - **cameras** — [`super::traverse_into`]'s rules: every [`prune_reason`] +/// - **cameras** — the walk's rules ([`super::visit_prim`]): every [`prune_reason`] /// but invisibility prunes; an invisible subtree is still walked, as the /// render walks it for cameras; an instance with a prototype (and every /// instance under an invisible ancestor) and a visible `PointInstancer`, @@ -398,8 +403,14 @@ fn collect(stage: &Stage, kind: ListKind, order: Order, mut found: impl FnMut(&P /// bound only from inside it). /// - **passes** — every `RenderPass` `--pass` accepts: only an inactive /// subtree prunes. -fn visit(stage: &Stage, prim: &Prim, kind: ListKind, parent_hidden: bool) -> Visit { - let pruned = prune_reason(prim, WalkScope::Stage); +fn visit( + stage: &Stage, + prim: &Prim, + kind: ListKind, + parent_hidden: bool, + frame: Option, +) -> Visit { + let pruned = prune_reason(prim, WalkScope::Stage, frame); let is_instance = prim.is_instance().unwrap_or(false); let has_prototype = || matches!(prim.prototype(), Ok(Some(_))); let is_instancer = || { @@ -459,3 +470,304 @@ fn is_kind(stage: &Stage, prim: &Prim, kind: ListKind) -> bool { ListKind::Pass => matches!(UsdRenderPass::get(stage, path()), Ok(Some(_))), } } + +/// The first target of the pass at `path`'s `renderSource`, read off the +/// listed stage: `crust ls` reads the stage it lists, not a scene index. +fn pass_render_source(stage: &Stage, path: &sdf::Path) -> Option { + use openusd_schemas::render::{Pass, PassSchema}; + Pass::get(stage, path.clone()) + .ok() + .flatten()? + .render_source_rel() + .targets() + .ok()? + .into_iter() + .next() +} + +// ----------------------------------------------------------------------- +// The stage readers only the listing uses +// ----------------------------------------------------------------------- +// +// `crust ls` walks the stage, not the scene index, so these read openusd +// directly: the import's pruning rule, binding resolution and shader ids as +// the direct importer read them, and attribute values with its +// authored-versus-fallback rule (the scene index's generic data carry the +// same rule for the import, `index::data`). + +/// Where a prim is met, which decides whether [`Prune::Abstract`] applies. +#[derive(Clone, Copy, PartialEq, Eq)] +enum WalkScope { + /// The stage's own namespace: the top-level traversal and the placement + /// count that must agree with it. + Stage, + /// Inside a prototype, reached through an instance. A prototype is + /// commonly authored under a `class` prim, so abstractness does not prune + /// here. + Prototype, +} + +/// [`Prune`]'s rule read on the stage, for a listing that walks the stage: +/// abstractness (in the stage's own namespace only) and activity, then +/// purpose and visibility at `time`. +fn prune_reason(prim: &Prim, scope: WalkScope, time: Option) -> Option { + if scope == WalkScope::Stage && prim.is_abstract().unwrap_or(false) { + return Some(Prune::Abstract); + } + if !prim.is_active().unwrap_or(true) { + return Some(Prune::Inactive); + } + let token = |name: &str| prim_value(prim, name, time); + if let Some(v) = token("purpose") { + match v.as_str() { + Some("proxy") => return Some(Prune::Purpose("proxy")), + Some("guide") => return Some(Prune::Purpose("guide")), + _ => {} + } + } + token("visibility") + .is_some_and(|v| v.as_str() == Some("invisible")) + .then_some(Prune::Invisible) +} + +/// The material bound to `prim` for a final render, resolved the way +/// `UsdShadeMaterialBindingAPI::ComputeBoundMaterial` does. +/// +/// Two things this has to get right that a direct lookup on the prim does not: +/// +/// - **Inheritance.** A binding on an ancestor applies to every prim beneath +/// it, and production assets bind on the group: ALab binds each asset's +/// `GEO` scope, never its meshes. openusd-schemas' `bound_material` +/// walks the ancestors (binding strength and collection bindings included), +/// but only from a prim that *carries* `MaterialBindingAPI`, and +/// `MaterialBindingAPI::get` returns `None` for any other — which is every +/// mesh under a bound group. So the walk starts at the nearest ancestor +/// that has the API. Skipping the API-less prims in between loses nothing: +/// USD disregards a binding on a prim without the API applied. +/// - **Purpose.** ALab authors `material:binding:full` and +/// `material:binding:preview` and almost never the all-purpose relationship, +/// so asking for `""` alone found nothing on 7 256 prims. +/// - **Targets outside the stage.** openusd-schemas' `bound_material` +/// answers with the `Material` prim, and so `None` wherever the winning +/// target is not one *on this stage* — which a streamed import's masked +/// stage makes of every material outside the chunk (the Cornell box binds +/// `/scene/Looks/…` from five sibling chunks). That answer would drop the +/// binding: no material provenance for `crust mcp`, no +/// `material.fallback_default` warning. So when it answers nothing, the +/// binding is read as the *winning* binding's target instead +/// ([`winning_binding_target`]), which the resolution then composes on the +/// stage it keeps for materials outside the chunk (`materials::material_stage`), +/// reporting it unresolvable only when it is not there either. It has to +/// be the winner, strength and +/// collections included: a weaker binding that does resolve would render +/// its material where the winner's default grey belongs. +pub(super) fn bound_material(stage: &Stage, prim: &Prim) -> Option { + let api = nearest_binding_api(stage, prim.path().clone())?; + match api.bound_material(RENDER_BINDING_PURPOSE) { + Ok(Some(material)) => Some(material.path().clone()), + _ => winning_binding_target(stage, api.path()), + } +} + +/// The `MaterialBindingAPI` of `path` or its nearest ancestor carrying it. +fn nearest_binding_api(stage: &Stage, path: sdf::Path) -> Option { + let mut path = Some(path); + while let Some(p) = path { + if p.is_abs_root() { + return None; + } + if let Ok(Some(api)) = MaterialBindingAPI::get(stage, p.clone()) { + return Some(api); + } + path = p.parent(); + } + None +} + +/// The target of the binding that wins for `queried`, as openusd-schemas' +/// `bound_material` chooses it, but answering the target path whether or not +/// it is a `Material` on this stage. [`RENDER_BINDING_PURPOSE`] is resolved +/// across the whole ancestor chain before the all-purpose binding; within a +/// purpose the closest binding wins unless an ancestor's is +/// `strongerThanDescendants` (the topmost such then wins); at one prim a +/// collection binding including `queried` beats the direct one, in native +/// property order. The walk visits only prims carrying `MaterialBindingAPI`. +fn winning_binding_target(stage: &Stage, queried: &sdf::Path) -> Option { + [RENDER_BINDING_PURPOSE, ""] + .into_iter() + .find_map(|purpose| { + let mut winner = None; + let mut at = Some(queried.clone()); + while let Some(api) = at.and_then(|p| nearest_binding_api(stage, p)) { + if let Some((target, strength)) = winning_binding_at(stage, &api, queried, purpose) + && (winner.is_none() || strength == BindingStrength::StrongerThanDescendants) + { + winner = Some(target); + } + at = api.path().parent(); + } + winner + }) +} + +/// The binding that wins at `api`'s prim for `queried` and one `purpose`, as +/// `(target, strength)`: a collection binding whose collection includes +/// `queried`, in native property order, else the direct binding. +fn winning_binding_at( + stage: &Stage, + api: &MaterialBindingAPI, + queried: &sdf::Path, + purpose: &str, +) -> Option<(sdf::Path, BindingStrength)> { + let prefix = "material:binding:collection:"; + for name in api.authored_property_names().unwrap_or_default() { + let Some(rest) = name.as_str().strip_prefix(prefix) else { + continue; + }; + // `:` is purpose-restricted; anything else is + // all-purpose, as C++ `_GetMaterialPurpose` counts tokens. + let (binding_purpose, binding_name) = match rest.split_once(':') { + Some((p, n)) if !n.contains(':') => (p, n), + _ => ("", rest), + }; + if binding_purpose != purpose { + continue; + } + let Ok(Some(binding)) = + CollectionBinding::new(api.collection_binding_rel(binding_name, purpose)) + else { + continue; + }; + let (collection, target) = (binding.collection_path(), binding.material_path().clone()); + if collection_includes(stage, collection, queried) { + let strength = api + .path() + .append_property(name.as_str()) + .ok() + .and_then(|rel| stage.field::(rel, "bindMaterialAs").ok()) + .and_then(|v| match v { + Some(sdf::Value::Token(t)) => BindingStrength::from_token(t), + _ => None, + }) + .unwrap_or_default(); + return Some((target, strength)); + } + } + let binding = api.direct_binding(purpose).ok()??; + let strength = binding.strength().unwrap_or_default(); + Some((binding.material_path().clone(), strength)) +} + +/// Whether the collection at `collection` (a `.collection:` +/// path) includes `queried`; a path that names no collection includes nothing. +fn collection_includes(stage: &Stage, collection: &sdf::Path, queried: &sdf::Path) -> bool { + let Some((prim, name)) = CollectionAPI::instance_at_path(collection) else { + return false; + }; + stage + .prim(prim) + .ok() + .and_then(|prim| { + CollectionAPI::from_prim_unchecked(prim, name) + .membership_query() + .ok() + }) + .is_some_and(|q| q.is_included(queried)) +} + +/// The `info:id` of the surface shader the import decodes the material at +/// `mat_path` from, in the import's order: a `PxrDisneyBsdf` child first +/// (see `materials::resolve_material_uncached`), else the shader the surface terminal +/// resolves to. `None` when there is none — a MaterialX reference composes +/// no shader prim. What `crust ls material --json` reports as `surface`. +fn surface_shader_id(stage: &Stage, mat_path: &sdf::Path, time: Option) -> Option { + if has_shader_id(stage, mat_path, "PxrDisneyBsdf", time) { + return Some("PxrDisneyBsdf".to_owned()); + } + let mat = UsdMaterial::get(stage, mat_path.clone()).ok().flatten()?; + terminal_shader(mat.surface_source(SURFACE_RENDER_CONTEXTS)) + .and_then(|s| shader_info_id(&s, time)) +} + +/// The first `Shader`-typed source driving a resolved terminal. +fn terminal_shader( + resolved: Result< + Option, + openusd_schemas::SchemaError, + >, +) -> Option { + resolved + .ok() + .flatten() + .and_then(|t| t.sources().iter().find_map(TerminalSource::shader).cloned()) +} + +fn shader_info_id(shader: &Shader, time: Option) -> Option { + // `UsdShadeNodeDefAPI::GetShaderId`: the composed `info:id` when the + // shader's implementation source is `id`. + if let Ok(Some(id)) = shader.node_def().shader_id() { + return Some(id.as_str().to_owned()); + } + // Otherwise the raw `info:id`, as the import has always read it whatever + // the implementation source says. + value_at(&shader.attribute("info:id"), time).and_then(decode_text) +} + +/// Whether the material has a child `Shader` prim with this `info:id`. +/// +/// Cheaper and more reliable than resolving a render-context output for the +/// question actually being asked — "does this material shade with X" — since a +/// material may declare several context outputs and USD gives no ordering +/// between them without a configured render context. +fn has_shader_id(stage: &Stage, mat_path: &sdf::Path, id: &str, time: Option) -> bool { + let Ok(children) = prim_at(stage, mat_path.clone()).children() else { + return false; + }; + children + .iter() + .any(|c| custom_token(c, "info:id", time).as_deref() == Some(id)) +} + +/// `attr`'s value at time code `time`, or `None` when it is unauthored, blocked +/// or unreadable. +/// +/// openusd resolves an unauthored schema attribute to its schema fallback, +/// and the importer's readers take `None` as "unauthored": a product inherits +/// the settings' resolution and a camera's focus distance is crust's 10, not +/// the schema's 0. So a +/// value equal to the fallback is asked whether a layer authored it — only +/// then, since a value that differs from the fallback was authored, and an +/// attribute no schema declares (`crust:*`, primvars, shader inputs) has none. +fn value_at(attr: &Attribute, time: Option) -> Option { + let value = attr + .get_at::(time.map(openusd::usd::TimeCode::new)) + .ok() + .flatten()?; + match attr.fallback_value() { + Ok(Some(fallback)) if fallback == value => attr.has_authored_value().ok()?.then_some(value), + _ => Some(value), + } +} + +/// The value of `prim`'s attribute `name` at `time` — [`value_at`] by +/// name. +fn prim_value(prim: &Prim, name: &str, time: Option) -> Option { + value_at(&prim.attribute(name), time) +} + +fn custom_token(prim: &Prim, name: &str, time: Option) -> Option { + prim_value(prim, name, time).and_then(decode_text) +} + +/// Whether `prim` is one of the seven shapes `implicit::Shape::read` reads, from +/// its USD type alone: what `crust ls` asks of the stage it lists. +fn is_shape(prim: &Prim) -> bool { + let prim = || prim.clone(); + matches!(Cube::from_prim(prim()), Ok(Some(_))) + || matches!(Plane::from_prim(prim()), Ok(Some(_))) + || matches!(Cylinder::from_prim(prim()), Ok(Some(_))) + || matches!(Cylinder_1::from_prim(prim()), Ok(Some(_))) + || matches!(Cone::from_prim(prim()), Ok(Some(_))) + || matches!(Capsule::from_prim(prim()), Ok(Some(_))) + || matches!(Capsule_1::from_prim(prim()), Ok(Some(_))) +} diff --git a/crates/crust-core/src/scene/usd_import/live.rs b/crates/crust-core/src/scene/usd_import/live.rs index c3fd46844..13506c2d5 100644 --- a/crates/crust-core/src/scene/usd_import/live.rs +++ b/crates/crust-core/src/scene/usd_import/live.rs @@ -9,17 +9,17 @@ //! of the streaming import is, or the payload-free index stage for the //! settings. +use moho::openusd; use std::path::Path; use std::sync::Arc; use openusd::sdf; -use openusd::usd::{InitialLoadSet, Prim, Stage}; +use openusd::usd::{InitialLoadSet, Stage}; use std::collections::{BTreeMap, HashMap}; use crust_rt::Geometry; use glam::Affine3A; -use openusd_schemas::geom::{Mesh as UsdMesh, Sphere as UsdSphere}; use crate::light::LightList; use crate::live::{ @@ -29,7 +29,10 @@ use crate::material::Material; use crate::rt_world::{GeometryEdit, World, WorldBuilder}; use crate::{AssetLoader, Warning}; -use super::camera::{build_camera, local_to_world}; +use moho::scene_index::SceneIndexHandle; + +use super::camera::build_camera; +use super::index::data::PrimData; use super::light_links::LightLinks; use super::materials::{resolve_displacement, resolve_fresh}; use super::mesh::{ @@ -37,11 +40,10 @@ use super::mesh::{ mesh_source, placement_scale, }; use super::shapes::emit_sphere; -use super::time::EvalTimeScope; -use super::xform::{Span, compose_with_parent}; +use super::xform::Span; use super::{ ImportCaches, ImportCtx, ValidOptions, apply_exposure, asks_about_time, emit_light, frame_pose, - invisible_overrides, open_stage, open_stage_masked, prim_at, read_index, stage_builder, + open_stage, open_stage_masked, read_index, stage_builder, }; /// Warning codes a settings change can move, by family: the settings, the @@ -74,7 +76,6 @@ pub(crate) fn rebuild( let working = facts .working .ok_or_else(|| Structural("the scene was not imported from a stage".into()))?; - let _time = EvalTimeScope::enter(facts.options.frame); let mut update = Update::default(); if change.settings { update.settings = Some(refresh_settings(prov, layer, path_str, warnings)?); @@ -156,32 +157,30 @@ fn prim_path(path: &str) -> Result { } /// Refuses a material whose network reads a prim outside it: a stage masked -/// to the material does not compose it, where the import's stage did. -fn closed_network(stage: &Stage, root: &sdf::Path) -> Result<(), Structural> { - let mut stack = vec![prim_at(stage, root.clone())]; +/// to the material does not compose it, where the import's stage did. Read +/// from the generic connections of the material's prims in `index`. +fn closed_network(index: &SceneIndexHandle, root: &sdf::Path) -> Result<(), Structural> { + let mut stack = vec![PrimData::in_index(index, root)]; while let Some(prim) = stack.pop() { - for attr in prim.authored_attributes().unwrap_or_default() { - for target in attr.connections().unwrap_or_default() { + for name in prim.attribute_names() { + for target in prim.connections(&name) { if !target.prim_path().has_prefix(root) { return Err(Structural(format!( "{} connects to {target}, outside {root}", - attr.path() + prim.attribute_path(&name) ))); } } } - stack.extend(prim.children().unwrap_or_default()); + stack.extend(prim.children()); } Ok(()) } -/// Whether `path` is a `Shader` prim on `stage`. -fn is_shader(stage: &Stage, path: &sdf::Path) -> bool { - stage - .prim(path.clone()) - .ok() - .and_then(|p| p.type_name().ok().flatten()) - .is_some_and(|t| t.as_str() == "Shader") +/// Whether `path` is a `Shader` prim in `index`: its USD type, +/// `__usdPrimInfo/typeName`. +fn is_shader(index: &SceneIndexHandle, path: &sdf::Path) -> bool { + PrimData::at(index.as_ref(), path).usd_type() == "Shader" } /// A distinct mesh's slot and the content key it has now. @@ -198,13 +197,21 @@ struct Rebuilding<'a> { impl Rebuilding<'_> { fn caches(&self) -> ImportCaches<'_> { - ImportCaches::new( + let mut caches = ImportCaches::new( self.assets, self.layer, SubdivPolicy::new(self.prov.stage.subdiv_level), self.working, self.prov.stage.mtlx_library.clone(), - ) + ); + caches.time = self.prov.stage.options.frame; + caches + } + + /// A scene index over `stage`, at the import's time, for the readers + /// that have moved onto it: the same readers as the import's. + fn scene(&self, stage: &Stage) -> super::index::Input { + super::index::input_chain(stage.clone(), self.prov.stage.options.frame, false) } fn masked(&self, path: &sdf::Path) -> Result { @@ -234,10 +241,11 @@ impl Rebuilding<'_> { let scope = crate::WarningScope::enter(); let built = (|| { let stage = self.masked(&mat_path)?; - closed_network(&stage, &mat_path)?; + let scene = self.scene(&stage); + closed_network(&scene.chain, &mat_path)?; for shader in shaders { let shader = prim_path(shader)?; - if shader.has_prefix(&mat_path) && !is_shader(&stage, &shader) { + if shader.has_prefix(&mat_path) && !is_shader(&scene.chain, &shader) { return Err(Structural(format!("{shader} is not a shader of {path}"))); } } @@ -273,8 +281,16 @@ impl Rebuilding<'_> { let scope = crate::WarningScope::enter(); let built = (|| { let stage = self.masked(&light_path)?; - let prim = prim_at(&stage, light_path.clone()); - let world_xf = local_to_world(&stage, &prim); + // The light's transform and inputs from an index over the masked + // stage, as the import reads them. + let scene = self.scene(&stage); + let stage_index: SceneIndexHandle = scene.stage.clone(); + let world_xf = super::xform::index_local_to_world( + &stage, + &stage_index, + &light_path, + self.prov.stage.options.frame, + ); let mut world = WorldBuilder::new(); // Ids are handed out in attach order: claiming the ones before // the light's gives its geometry the ids it had. @@ -283,7 +299,8 @@ impl Rebuilding<'_> { world.reserve_slot(filler.clone(), crate::ray::RayMask(0)); } let mut ctx = scratch_ctx(self, world); - if !emit_light(&stage, &mut ctx, &prim, world_xf) { + let light = PrimData::in_index(&scene.chain, &light_path); + if !emit_light(&mut ctx, &light, world_xf) { return Err(Structural(format!("{path} is no longer a light"))); } let geoms = origin.geoms.start..ctx.world.count() as u32; @@ -408,20 +425,22 @@ impl Rebuilding<'_> { id: u32, world: &World, ) -> Result { - let prim = prim_at(stage, prim_path(prim_str)?); - let Ok(Some(sphere)) = UsdSphere::get(stage, prim.path().clone()) else { + let path = prim_path(prim_str)?; + let scene = self.scene(stage); + if !PrimData::at(scene.chain.as_ref(), &path).is_a("Sphere") { return Err(Structural(format!("{prim_str} is not a Sphere"))); - }; - let world_xf = local_to_world(stage, &prim); + } + let world_xf = + super::xform::stage_local_to_world(stage, &path, self.prov.stage.options.frame); // Emitted alone, at id 0: a sphere's geometry and tables do not // depend on its id, so the edit is re-addressed rather than the // scratch world padded up to the id, which made a batch of spheres // quadratic. let mut scratch = WorldBuilder::new(); + let data = super::index::data::PrimData::in_index(&scene.chain, &path); let placed = emit_sphere( &mut scratch, - &prim, - &sphere, + &data, Span::fixed(world_xf), world.material_of(id).clone(), self.working, @@ -447,8 +466,9 @@ impl Rebuilding<'_> { batch: &[SlotKey], ) -> Result<(GeometryEdit, Option), Structural> { let id = origin.geom_id; - let prim = prim_at(stage, prim_path(prim_str)?); - let world_xf = local_to_world(stage, &prim); + let path = prim_path(prim_str)?; + let world_xf = + super::xform::stage_local_to_world(stage, &path, self.prov.stage.options.frame); // A singular placement is baked at attach time, with no slot: a // fresh import would build it another way. if world_xf.determinant().abs() < 1e-12 { @@ -476,9 +496,9 @@ impl Rebuilding<'_> { }; return Ok((world.edit_with(id, geometry, scale), None)); } - let Ok(Some(mesh)) = UsdMesh::get(stage, prim.path().clone()) else { + if !PrimData::at(self.scene(stage).chain.as_ref(), &path).is_a("Mesh") { return Err(Structural(format!("{prim_str} is not a Mesh"))); - }; + } let slot_facts = self .prov .mesh_slots @@ -492,9 +512,11 @@ impl Rebuilding<'_> { let mut caches = self.caches(); let meshes = &mut caches.meshes; let needs = MeshNeeds::of(&*material, None, &meshes.primvars, meshes.working); + let scene = self.scene(stage); + let data = super::index::data::PrimData::in_index(&scene.chain, &path); let src = mesh_source( - &prim, - &mesh, + &data, + &data, needs, &mut meshes.subdiv, MeshPlace::World(&world_xf), @@ -531,7 +553,7 @@ impl Rebuilding<'_> { ))); } let slot = meshes - .intern(&prim, src, &material, None) + .intern(&data, src, &material, None) .ok_or_else(|| Structural(format!("{prim_str} produces no triangles")))?; let s = &mut meshes.slots[slot as usize]; let geom = s @@ -587,6 +609,8 @@ fn scratch_ctx<'a>(r: &'a Rebuilding<'a>, world: WorldBuilder) -> ImportCtx<'a> framing: Default::default(), stage_path: r.layer, index: None, + scene_input: None, + whole: None, assets: r.assets, layers: Default::default(), } @@ -622,8 +646,16 @@ fn refresh_settings( .load(InitialLoadSet::LoadNone) .open(path_str) .map_err(|e| Structural(format!("cannot open the stage: {e}")))?; - let read = read_index(&index, layer, path_str, &facts.options, &options) - .map_err(|e| Structural(format!("the settings: {e}")))?; + let scene = super::index::input_chain(index.clone(), facts.options.frame, true); + let read = read_index( + &index, + scene.chain.as_ref(), + layer, + path_str, + &facts.options, + &options, + ) + .map_err(|e| Structural(format!("the settings: {e}")))?; if Some(read.working) != facts.working { return Err(Structural("the working colour space changed".into())); } @@ -713,16 +745,23 @@ fn refresh_settings( "the products ask for other primvars than the geometry kept".into(), )); } - let invisible_overrides = invisible_overrides(&index); + let invisible_overrides = super::index::stage_facts::invisible_overrides(&index); let motion_blur = read.settings.motion_blur() && read.shutter.interval.is_some(); drop(index); let camera = target.to_string(); let camera = camera.as_str(); let stage = open_stage(layer, path_str, Some(target.clone())) .map_err(|e| Structural(format!("cannot open the stage: {e}")))?; - let prim: Prim = prim_at(&stage, target.clone()); - let rc = build_camera(&stage, &prim, &read.settings, read.products.framing) - .ok_or_else(|| Structural(format!("{camera} is no longer a camera")))?; + let scene = super::index::input_chain(stage.clone(), facts.options.frame, false); + let rc = build_camera( + scene.chain.as_ref(), + &stage, + &target, + &read.settings, + read.products.framing, + facts.options.frame, + ) + .ok_or_else(|| Structural(format!("{camera} is no longer a camera")))?; rc.warn_lens_units(Some(camera)); rc.warn_clipping(Some(camera)); let settings = apply_exposure( @@ -755,7 +794,9 @@ fn refresh_settings( /// Each of `paths` as the import composes it: on a stage masked to them with /// payloads loaded (so ops a payload authors count), at the import's time -/// code, through the traversal's own [`compose_with_parent`]. +/// code, composed from a scene index over that stage as the walk composes +/// (`xform::stage_local_to_world`), with the ops a placement edits read in +/// `stage_facts` ([`super::index::stage_facts::authored_ops`]). pub(crate) fn prim_frames( prov: &Provenance, layer: &Path, @@ -765,7 +806,6 @@ pub(crate) fn prim_frames( let path_str = layer .to_str() .ok_or_else(|| Structural("the layer path is not UTF-8".into()))?; - let _time = EvalTimeScope::enter(prov.stage.options.frame); let prims = paths .iter() .map(|p| prim_path(p)) @@ -777,39 +817,21 @@ pub(crate) fn prim_frames( prims .iter() .map(|path| { - let prim = stage - .prim(path.clone()) - .ok() - .filter(|p| p.is_valid().unwrap_or(false)) + let ops = super::index::stage_facts::authored_ops(&stage, path, place_op) .ok_or_else(|| Structural(format!("{path} is not a prim of the stage")))?; - use openusd_schemas::geom::XformableSchema; - let xf = openusd_schemas::geom::Xformable::from_prim(prim.clone()) - .ok() - .flatten(); - let order: Vec = xf - .as_ref() - .and_then(|xf| xf.xform_op_order().ok().flatten()) - .map(|o| o.iter().map(|t| t.as_str().to_string()).collect()) - .unwrap_or_default(); let parent = path .parent() - .map(|p| local_to_world(&stage, &prim_at(&stage, p))) + .map(|p| super::xform::stage_local_to_world(&stage, &p, prov.stage.options.frame)) .unwrap_or(glam::Mat4::IDENTITY); - let world = compose_with_parent(&prim, parent); - let place = prim - .attribute(place_op) - .get::() - .ok() - .flatten() - .map(|m| glam::DMat4::from_cols_array(&m.0)); + let world = super::xform::stage_local_to_world(&stage, path, prov.stage.options.frame); Ok(PrimFrame { path: path.to_string(), - xformable: xf.is_some(), - resets_xform_stack: order.iter().any(|e| e == "!resetXformStack!"), + xformable: ops.xformable, + resets_xform_stack: ops.order.iter().any(|e| e == "!resetXformStack!"), parent_to_world: parent.as_dmat4(), local_to_world: world.as_dmat4(), - xform_op_order: order, - place_op: place, + xform_op_order: ops.order, + place_op: ops.place, }) }) .collect() diff --git a/crates/crust-core/src/scene/usd_import/materials.rs b/crates/crust-core/src/scene/usd_import/materials.rs index 2a1906808..f53eec3c3 100644 --- a/crates/crust-core/src/scene/usd_import/materials.rs +++ b/crates/crust-core/src/scene/usd_import/materials.rs @@ -3,39 +3,36 @@ //! `PxrDisneyBsdf` and MaterialX references. use crate::warning; +use moho::openusd; use std::collections::HashMap; use std::sync::Arc; use std::time::Instant; use glam::Vec3A; use openusd::sdf; -use openusd::usd::{CollectionAPI, Prim, PrimPredicate, Stage}; -use openusd_schemas::shade::{ - BindingStrength, CollectionBinding, Connectable, Material as UsdMaterial, MaterialBindingAPI, - ProducerFilter, Shader, TerminalSource, -}; +use openusd::usd::Stage; use tracing::debug; use crate::color::Space; use crate::material::{DispRemap, Displacement, DisplacementValue, Material, OpenPBR}; -use super::assets::{asset_path, load_ptex, load_uv_texture}; -use super::attrs::{ - attr_bool, attr_f32, attr_own_color_space, attr_vec3, custom_color3, custom_f32, custom_token, - decode_number, decode_text, in_working, value_at, -}; +use super::ImportCaches; +use super::assets::{asset_value_path, load_ptex, load_uv_texture}; +use super::attrs::{decode_number, decode_text}; use super::preview::{preview_displacement, preview_surface_material}; -use super::{ImportCaches, prim_at}; /// Memoizes resolved materials by binding path (and shares one default), /// so prims bound to the same USD material get pointer-identical Arcs — /// which is what lets `MeshKey` recognize shared mesh geometry. #[derive(Default)] pub(super) struct MaterialCache { - pub(super) by_path: HashMap<(u32, String), CachedMaterial>, + pub(super) by_path: HashMap, + /// While a material bound inside a re-rooted prototype is resolved, its + /// name and the path the instancing chain holds it at ([`MatSource`]). + pub(super) reading: Option<(sdf::Path, sdf::Path)>, pub(super) default: Option>, /// Resolved `.ptx` path -> the opened texture, or `None` if it could not - /// be opened. Keyed by filesystem path, so it needs no epoch scoping. + /// be opened. Keyed by filesystem path. pub(super) ptex: HashMap<(String, crate::ColorSpace), Option>>, /// `(resolved path, colour space)` -> the opened UV texture. Keyed by /// filesystem path for the same reason as `ptex`, and by colour space @@ -43,9 +40,6 @@ pub(super) struct MaterialCache { /// map is raw; the albedo beside it is display-encoded) and the decode /// happens once, at load. pub(super) textures: HashMap<(String, crate::ColorSpace), Option>>, - /// Which stage the prototype-scoped entries belong to; see - /// [`MaterialCache::key`]. Kept in step with [`ImportCaches::epoch`]. - pub(super) epoch: u32, /// The displacement of the `.mtlx` material the last resolution loaded, /// handed from [`load_mtlx_material`] to [`cached_material`], which keeps /// it with the material: the document is compiled once, for both. @@ -89,27 +83,32 @@ pub(super) fn mtlx_library() -> Arc { Arc::new(library) } -/// A stage masked to the materials streamed chunks bind from outside -/// themselves, kept across chunks and released with the last -/// ([`super::traverse_stage`]). +/// The side stage of a streamed import (design D4): masked to the prims the +/// chunks depend on that no input holds (`moho::streaming::unresolved`), +/// read by the side input of the merged index, kept across chunks and +/// released with the last ([`super::traverse_stage`]). /// -/// A chunk's mask is its subtree, so a `Material` in a sibling subtree — a -/// top-level `/MaterialX/Materials` scope beside the geometry, as a DCC's -/// MaterialX export writes it — is not on the stage that traverses the +/// A chunk's mask is its subtree, so a `Material` in another chunk's payload, +/// or a shared node graph there, is not on the stage that traverses the /// geometry bound to it. Re-opening the chunk with a wider mask would /// compose its geometry twice; this stage composes the materials alone. #[derive(Default)] pub(super) struct OutsideMaterials { - /// What `stage` is masked to: every out-of-chunk binding target met so - /// far, found or not, so that a dangling binding opens nothing twice. - mask: Vec, - stage: Option, + /// What `stage` is masked to: every path the chunks depended on outside + /// every input so far, found or not, so that a dangling binding opens + /// nothing twice. + pub(super) mask: Vec, + pub(super) stage: Option, + /// The payload-free scene input's chain and stage, while a streamed + /// import walks its chunks: a material no payload hides composes there. + pub(super) scene: Option<(moho::scene_index::SceneIndexHandle, Stage)>, } impl OutsideMaterials { /// Drops the stage, handing back the layers it composed. pub(super) fn release(&mut self) -> Vec { self.mask.clear(); + self.scene = None; self.stage .take() .map(|s| s.layer_identifiers()) @@ -128,32 +127,39 @@ impl MaterialCache { } } - /// Each material prim the cache resolved → the `world` slots holding it - /// and whether a mesh was displaced by it ([`crate::live::Provenance`]). - /// By `Arc` identity: a slot holds exactly the `Arc` the cache handed out. - /// Prototype-scoped paths (`/__Prototype_N`, renumbered per streamed - /// stage) are left out: no edit names one, and two epochs' `Arc`s under - /// one such path are different materials. /// `(prim read, material reading it)` for every material the cache /// resolved, prototype-scoped ones included ([`material_reads`]). pub(super) fn reads(&self) -> Vec<(String, String)> { let mut reads: Vec<(String, String)> = self .by_path - .iter() - .flat_map(|((_, path), cached)| cached.reads.iter().map(|r| (r.clone(), path.clone()))) + .values() + .flat_map(|cached| { + cached + .reads + .iter() + .map(|r| (r.clone(), cached.name.clone())) + }) .collect(); reads.sort(); reads.dedup(); reads } + /// Each material prim the cache resolved → the `world` slots holding it + /// and whether a mesh was displaced by it ([`crate::live::Provenance`]). + /// By `Arc` identity: a slot holds exactly the `Arc` the cache handed out. + /// Materials named under openusd's `/__Prototype_N` (renumbered per + /// streamed stage) are left out: no edit names one, and two chunks' + /// materials, cached apart under their propagated paths, can share one + /// such name. pub(super) fn origins( &self, world: &crate::World, ) -> HashMap { let mut by_arc: HashMap<*const (), &str> = HashMap::new(); let mut out: HashMap = HashMap::new(); - for ((_, path), cached) in &self.by_path { + for cached in self.by_path.values() { + let path = &cached.name; if path.starts_with("/__Prototype") { continue; } @@ -177,34 +183,19 @@ impl MaterialCache { self.default.get_or_insert_with(default_material).clone() } - /// Cache key for a bound material path. - /// - /// Authored scene paths are stable across stages, so they key on the - /// path alone and a material shared by several subtrees resolves to - /// one `Arc` — which is what lets the mesh cache deduplicate across - /// them. Paths *inside* a prototype are not stable: prototypes are - /// numbered per composition, so under the streaming importer every - /// stage has its own `/__Prototype_0`, and keying those on the path - /// alone hands one chunk's material to the next chunk's geometry. - /// Those are therefore scoped by epoch. - /// - /// This bit the streaming importer for real: on the Moana island it - /// silently merged distinct meshes onto shared materials, losing - /// 5 835 258 triangles. No single element reproduces it — it needs - /// two chunks that both carry prototype-internal materials. - pub(super) fn key(&self, path: &str) -> (u32, String) { - let epoch = if path.starts_with("/__Prototype") { - self.epoch - } else { - 0 - }; - (epoch, path.to_string()) + /// Cache key for a bound material path: the path itself, stable across a + /// streamed import's stages (a material inside a prototype is read at + /// Moho's propagated path, M11), so a material shared by several subtrees + /// resolves to one `Arc`, which is what lets the mesh cache deduplicate + /// across them. + pub(super) fn key(&self, path: &str) -> String { + path.to_string() } } /// A prim's resolved material and the displacement it defines, if any. /// -/// Cached together per `(epoch, path)` ([`CachedMaterial`]), the displacement +/// Cached together per material key ([`MaterialCache::key`]), the displacement /// resolved the first time a mesh asks: displacement is a property of the /// material, but it is consumed once at import rather /// than per hit, so it lives beside the [`Material`] instead of inside it. @@ -224,6 +215,9 @@ pub(super) struct BoundMaterial { /// material's displacement program is compiled with the document, so it is /// kept here until then. pub(super) struct CachedMaterial { + /// The material's name: its USD path, which the key differs from for a + /// material read inside a re-rooted prototype. + name: String, material: Arc, /// The prims outside the material that its network reads (see /// [`material_reads`]). @@ -237,161 +231,49 @@ pub(super) struct CachedMaterial { /// The binding purpose a final render resolves: USD's `full`, falling back to /// the all-purpose binding (`bound_material` does the fallback). /// `preview` is for interactive proxies and is never consulted. -const RENDER_BINDING_PURPOSE: &str = "full"; - -/// The material bound to `prim` for a final render, resolved the way -/// `UsdShadeMaterialBindingAPI::ComputeBoundMaterial` does. -/// -/// Two things this has to get right that a direct lookup on the prim does not: -/// -/// - **Inheritance.** A binding on an ancestor applies to every prim beneath -/// it, and production assets bind on the group: ALab binds each asset's -/// `GEO` scope, never its meshes. openusd-schemas' `bound_material` -/// walks the ancestors (binding strength and collection bindings included), -/// but only from a prim that *carries* `MaterialBindingAPI`, and -/// `MaterialBindingAPI::get` returns `None` for any other — which is every -/// mesh under a bound group. So the walk starts at the nearest ancestor -/// that has the API. Skipping the API-less prims in between loses nothing: -/// USD disregards a binding on a prim without the API applied. -/// - **Purpose.** ALab authors `material:binding:full` and -/// `material:binding:preview` and almost never the all-purpose relationship, -/// so asking for `""` alone found nothing on 7 256 prims. -/// - **Targets outside the stage.** openusd-schemas' `bound_material` -/// answers with the `Material` prim, and so `None` wherever the winning -/// target is not one *on this stage* — which a streamed import's masked -/// stage makes of every material outside the chunk (the Cornell box binds -/// `/scene/Looks/…` from five sibling chunks). That answer would drop the -/// binding: no material provenance for `crust mcp`, no -/// `material.fallback_default` warning. So when it answers nothing, the -/// binding is read as the *winning* binding's target instead -/// ([`winning_binding_target`]), which the resolution then composes on the -/// stage it keeps for materials outside the chunk ([`material_stage`]), -/// reporting it unresolvable only when it is not there either. It has to -/// be the winner, strength and -/// collections included: a weaker binding that does resolve would render -/// its material where the winner's default grey belongs. -pub(super) fn bound_material(stage: &Stage, prim: &Prim) -> Option { - let api = nearest_binding_api(stage, prim.path().clone())?; - match api.bound_material(RENDER_BINDING_PURPOSE) { - Ok(Some(material)) => Some(material.path().clone()), - _ => winning_binding_target(stage, api.path()), - } -} - -/// The `MaterialBindingAPI` of `path` or its nearest ancestor carrying it. -fn nearest_binding_api(stage: &Stage, path: sdf::Path) -> Option { - let mut path = Some(path); - while let Some(p) = path { - if p.is_abs_root() { - return None; - } - if let Ok(Some(api)) = MaterialBindingAPI::get(stage, p.clone()) { - return Some(api); - } - path = p.parent(); - } - None -} - -/// The target of the binding that wins for `queried`, as openusd-schemas' -/// `bound_material` chooses it, but answering the target path whether or not -/// it is a `Material` on this stage. [`RENDER_BINDING_PURPOSE`] is resolved -/// across the whole ancestor chain before the all-purpose binding; within a -/// purpose the closest binding wins unless an ancestor's is -/// `strongerThanDescendants` (the topmost such then wins); at one prim a -/// collection binding including `queried` beats the direct one, in native -/// property order. The walk visits only prims carrying `MaterialBindingAPI`. -fn winning_binding_target(stage: &Stage, queried: &sdf::Path) -> Option { +pub(super) const RENDER_BINDING_PURPOSE: &str = "full"; + +/// The material bound to `prim` for a render, from the scene index's resolved +/// `materialBindings` (Moho's `MaterialBindingResolvingSceneIndex`): the +/// `full` purpose's, else the all-purpose one's — USD's `ComputeBoundMaterial`, +/// as `listing::bound_material` resolves it on the stage (the closest +/// binding, unless an ancestor's is `strongerThanDescendants`; a collection +/// binding including the prim over the direct one), answered +/// whether or not the target is a `Material` the walked stage holds. +pub(super) fn index_bound_material(prim: &super::index::data::PrimData) -> Option { + use moho::tokens::material_bindings as t; [RENDER_BINDING_PURPOSE, ""] .into_iter() .find_map(|purpose| { - let mut winner = None; - let mut at = Some(queried.clone()); - while let Some(api) = at.and_then(|p| nearest_binding_api(stage, p)) { - if let Some((target, strength)) = winning_binding_at(stage, &api, queried, purpose) - && (winner.is_none() || strength == BindingStrength::StrongerThanDescendants) - { - winner = Some(target); - } - at = api.path().parent(); + match prim + .locate([t::MATERIAL_BINDINGS, purpose, t::PATH])? + .value()? + { + sdf::Value::PathVec(mut paths) if paths.len() == 1 => paths.pop(), + _ => None, } - winner }) } -/// The binding that wins at `api`'s prim for `queried` and one `purpose`, as -/// `(target, strength)`: a collection binding whose collection includes -/// `queried`, in native property order, else the direct binding. -fn winning_binding_at( - stage: &Stage, - api: &MaterialBindingAPI, - queried: &sdf::Path, - purpose: &str, -) -> Option<(sdf::Path, BindingStrength)> { - let prefix = "material:binding:collection:"; - for name in api.authored_property_names().unwrap_or_default() { - let Some(rest) = name.as_str().strip_prefix(prefix) else { - continue; - }; - // `:` is purpose-restricted; anything else is - // all-purpose, as C++ `_GetMaterialPurpose` counts tokens. - let (binding_purpose, binding_name) = match rest.split_once(':') { - Some((p, n)) if !n.contains(':') => (p, n), - _ => ("", rest), - }; - if binding_purpose != purpose { - continue; - } - let Ok(Some(binding)) = - CollectionBinding::new(api.collection_binding_rel(binding_name, purpose)) - else { - continue; - }; - let (collection, target) = (binding.collection_path(), binding.material_path().clone()); - if collection_includes(stage, collection, queried) { - let strength = api - .path() - .append_property(name.as_str()) - .ok() - .and_then(|rel| stage.field::(rel, "bindMaterialAs").ok()) - .and_then(|v| match v { - Some(sdf::Value::Token(t)) => BindingStrength::from_token(t), - _ => None, - }) - .unwrap_or_default(); - return Some((target, strength)); - } - } - let binding = api.direct_binding(purpose).ok()??; - let strength = binding.strength().unwrap_or_default(); - Some((binding.material_path().clone(), strength)) -} - -/// Whether the collection at `collection` (a `.collection:` -/// path) includes `queried`; a path that names no collection includes nothing. -fn collection_includes(stage: &Stage, collection: &sdf::Path, queried: &sdf::Path) -> bool { - let Some((prim, name)) = CollectionAPI::instance_at_path(collection) else { - return false; - }; - stage - .prim(prim) - .ok() - .and_then(|prim| { - CollectionAPI::from_prim_unchecked(prim, name) - .membership_query() - .ok() - }) - .is_some_and(|q| q.is_included(queried)) -} - /// The material bound to `prim`, for a prim that cannot be displaced /// (spheres, curves): its displacement is not resolved. pub(super) fn resolve_material( stage: &Stage, - prim: &Prim, + path: &sdf::Path, caches: &mut ImportCaches<'_>, ) -> Arc { - match cached_material(stage, prim, caches) { + let data = caches.prim_data(path); + resolve_material_data(stage, &data, caches) +} + +/// [`resolve_material`] for a prim read as `data` (a prototype's prim in the +/// instancing chain). +pub(super) fn resolve_material_data( + stage: &Stage, + data: &super::index::data::PrimData, + caches: &mut ImportCaches<'_>, +) -> Arc { + match cached_material(stage, data, caches) { Some((key, _)) => caches.materials.by_path[&key].material.clone(), None => caches.materials.default_material(), } @@ -400,10 +282,21 @@ pub(super) fn resolve_material( /// The material bound to `prim`, with its displacement. pub(super) fn resolve_bound( stage: &Stage, - prim: &Prim, + path: &sdf::Path, + caches: &mut ImportCaches<'_>, +) -> BoundMaterial { + let data = caches.prim_data(path); + resolve_bound_data(stage, &data, caches) +} + +/// [`resolve_bound`] for a prim read as `data` (a prototype's prim in the +/// instancing chain). +pub(super) fn resolve_bound_data( + stage: &Stage, + data: &super::index::data::PrimData, caches: &mut ImportCaches<'_>, ) -> BoundMaterial { - let Some((key, mat_path)) = cached_material(stage, prim, caches) else { + let Some((key, mat_path)) = cached_material(stage, data, caches) else { return BoundMaterial { material: caches.materials.default_material(), displacement: None, @@ -420,7 +313,10 @@ pub(super) fn resolve_bound( let mtlx = entry.mtlx.clone(); let displacement = if crate::config().displace { let home = material_stage(stage, &mat_path, caches); - resolve_displacement(&home, &mat_path, mtlx, caches).map(Arc::new) + caches.materials.reading = re_rooted(data, &mat_path); + let d = resolve_displacement(&home, &mat_path, mtlx, caches).map(Arc::new); + caches.materials.reading = None; + d } else { None }; @@ -440,31 +336,40 @@ pub(super) fn resolve_bound( /// and path; `None` for an unbound prim, which takes the default. fn cached_material( stage: &Stage, - prim: &Prim, + data: &super::index::data::PrimData, caches: &mut ImportCaches<'_>, -) -> Option<((u32, String), sdf::Path)> { - let Some(mat_path) = bound_material(stage, prim) else { +) -> Option<(String, sdf::Path)> { + let Some(target) = index_bound_material(data) else { debug!( "{} has no material binding — using default grey OpenPBR", - prim.path() + data.path() ); return None; }; - let key = caches.materials.key(mat_path.as_str()); + // A target the index re-rooted into a propagated prototype (Moho's M11) + // is the material read, and keys the cache: stable across stages. It is + // named, in warnings and provenance, by the USD prim it comes from. + let mat_path = data.name_of(&target); + let reading = re_rooted(data, &mat_path); + let key = match &reading { + Some((_, data_path)) => data_path.to_string(), + None => caches.materials.key(mat_path.as_str()), + }; if caches.materials.by_path.contains_key(&key) { return Some((key, mat_path)); } // Per *distinct* material, not per binding: a stage binding one material - // to 10 000 prims logs this once. The key carries the cache epoch, which - // is what keeps one streamed chunk's `/__Prototype_N` apart from the - // next's — see `MaterialCache::key`. - debug!("Resolving material {mat_path} (epoch {})", key.0); + // to 10 000 prims logs this once. + debug!("Resolving material {mat_path} ({key})"); let home = material_stage(stage, &mat_path, caches); + caches.materials.reading = reading; let (material, mtlx) = resolve_fresh(&home, &mat_path, caches); - let reads = material_reads(&home, &mat_path); + let reads = material_reads(&home, &mat_path, caches); + caches.materials.reading = None; caches.materials.by_path.insert( key.clone(), CachedMaterial { + name: mat_path.to_string(), material, reads, mtlx, @@ -474,178 +379,86 @@ fn cached_material( Some((key, mat_path)) } -/// How many times one material may widen the side stage while following its -/// network's connections out of the prims already masked in: one more prim -/// subtree per hop of a chain of shared node graphs. -const MAX_SIDE_STAGE_OPENS: usize = 8; - -/// The stage to resolve the material at `mat_path` on: `stage` itself when -/// its population mask holds the material's whole subtree and every prim its -/// network connects to — always, outside a streamed import — and otherwise -/// the stage [`OutsideMaterials`] keeps, masked to them. -/// -/// That stage is opened at the first miss it cannot answer, masked to every -/// binding target outside the chunk ([`outside_binding_targets`]), to the -/// material and the prims its connections reach ([`connected_outside`]), and -/// to all it was masked to before, so one chunk costs at most one open per -/// hop into a shared node graph, and a chunk binding nothing new none. -fn material_stage(stage: &Stage, mat_path: &sdf::Path, caches: &mut ImportCaches<'_>) -> Stage { +/// How many times one chunk may widen the side input while following what +/// its prims depend on out of the prims already masked in: one more prim +/// subtree per hop of a chain of shared node graphs +/// ([`super::index::Streamed::resolve_outside`]). +pub(super) const MAX_SIDE_STAGE_OPENS: usize = 8; + +/// The stage the material at `mat_path` composes on, for what is read off +/// the stage rather than the index (a `.mtlx` reference, the composition +/// arcs): `stage` when its population mask holds the material — always, +/// outside a streamed import — else the stage of the streamed import's +/// input that holds it ([`OutsideMaterials`]): the side stage when it is +/// masked in there, else the payload-free scene's when no payload hides it. +fn material_stage(stage: &Stage, mat_path: &sdf::Path, caches: &ImportCaches<'_>) -> Stage { // Prototypes are populated whatever the mask; their paths are not in it. - if mat_path.as_str().starts_with("/__Prototype") { + if mat_path.as_str().starts_with("/__Prototype") || stage.mask().includes_subtree(mat_path) { return stage.clone(); } - let mask = stage.mask(); - let mut need = vec![mat_path.clone()]; - if mask.includes_subtree(mat_path) { - let reached: Vec<_> = connected_outside(stage, mat_path) - .into_iter() - .filter(|t| !mask.includes_subtree(t)) - .collect(); - if reached.is_empty() { - return stage.clone(); - } - need.extend(reached); + let outside = &caches.materials.outside; + if let Some(side) = &outside.stage + && outside.mask.iter().any(|m| mat_path.has_prefix(m)) + { + return side.clone(); } - let Some(path_str) = caches.stage_path.to_str() else { - return stage.clone(); - }; - let mut bound: Option> = None; - for _ in 0..MAX_SIDE_STAGE_OPENS { - let outside = &mut caches.materials.outside; - let covered = |p: &sdf::Path| outside.mask.iter().any(|m| p.has_prefix(m)); - if let Some(side) = &outside.stage - && need.iter().all(covered) - { - // What the masked-in prims connect to, followed on the stage - // that holds them. - let more: Vec<_> = connected_outside(side, mat_path) - .into_iter() - .filter(|t| !covered(t)) - .collect(); - if more.is_empty() { - return side.clone(); - } - need.extend(more); - } - let started = Instant::now(); - // The mask moves only with a stage opened to it. - let mut paths = outside.mask.clone(); - paths.extend( - bound - .get_or_insert_with(|| outside_binding_targets(stage)) - .iter() - .cloned(), - ); - paths.extend(need.iter().cloned()); - paths.sort(); - paths.dedup(); - match super::open_stage_masked(caches.stage_path, path_str, Some(paths.clone())) { - Ok(side) => { - debug!( - "Opened a stage for {} material path(s) outside the chunk in {:?}", - paths.len(), - started.elapsed() - ); - let outside = &mut caches.materials.outside; - outside.mask = paths; - outside.stage = Some(side); - } - // Resolved on the chunk, the material reports itself - // unresolvable, as it did before this stage existed. - Err(e) => { - debug!("Could not open a stage for materials outside the chunk: {e}"); - return stage.clone(); - } - } - } - match &caches.materials.outside.stage { - Some(side) => side.clone(), - None => stage.clone(), - } -} - -/// The prims outside the material at `mat_path` that its network's -/// connections reach on `stage`, followed through each reached prim's own -/// subtree as far as `stage` populates it: a material wired into a shared -/// node graph, and that graph into another. -fn connected_outside(stage: &Stage, mat_path: &sdf::Path) -> Vec { - let mut roots = vec![mat_path.clone()]; - let mut next = 0; - while next < roots.len() { - let mut stack = vec![prim_at(stage, roots[next].clone())]; - next += 1; - while let Some(prim) = stack.pop() { - for attr in prim.authored_attributes().unwrap_or_default() { - for target in attr.connections().unwrap_or_default() { - let target = target.prim_path(); - if !roots.iter().any(|r| target.has_prefix(r)) { - roots.push(target); - } - } - } - stack.extend(prim.children().unwrap_or_default()); - } - } - roots.split_off(1) -} - -/// The prim paths every `material:binding*` relationship on `stage` targets -/// outside its population mask, instance proxies included. A collection -/// binding's collection is a property path and is skipped: its material is -/// the target that matters. -fn outside_binding_targets(stage: &Stage) -> Vec { - let mask = stage.mask(); - let mut paths = Vec::new(); - let _ = stage.traverse(PrimPredicate::DEFAULT_PROXIES, |p| paths.push(p.clone())); - let mut targets = Vec::new(); - for path in paths { - let prim = prim_at(stage, path); - for rel in prim.authored_relationships().unwrap_or_default() { - if !rel.name().starts_with("material:binding") { - continue; - } - targets.extend( - rel.targets() - .unwrap_or_default() - .into_iter() - .filter(|t| t.is_prim() && !mask.includes_subtree(t)), - ); - } + if let Some((index, scene)) = &outside.scene + && super::index::data::PrimData::at(index.as_ref(), mat_path).ty() + == moho::tokens::prim_type::MATERIAL + { + return scene.clone(); } - targets + stage.clone() } /// The prims outside the material at `mat_path` that its network reads: the /// paths of the specs its prims compose from elsewhere (an `inherits`, -/// `specializes` or `references` arc's target, a referenced layer's prim) and -/// the prims its connections reach. An in-place edit of a prim one of these -/// names would change this material too ([`crate::live`]). A path in another -/// layer's namespace may coincide with an edited one; that costs a full -/// import, never a stale material. -fn material_reads(stage: &Stage, mat_path: &sdf::Path) -> Vec { +/// `specializes` or `references` arc's target, a referenced layer's prim), +/// read off `home`, the stage that composes it ([`stage_facts`]), and the +/// prims its connections reach, from the prims' generic data in the index +/// the material is read from ([`MatSource`]). An in-place edit of a prim one +/// of these names would change this material too ([`crate::live`]). A path +/// in another layer's namespace may coincide with an edited one; that costs a +/// full import, never a stale material. +/// +/// [`stage_facts`]: super::index::stage_facts::foreign_spec_paths +fn material_reads(home: &Stage, mat_path: &sdf::Path, caches: &ImportCaches<'_>) -> Vec { + let src = MatSource::new(home, mat_path, caches); let mut reads = Vec::new(); - let mut stack = vec![prim_at(stage, mat_path.clone())]; + let mut paths = Vec::new(); + let mut stack = vec![src.prim.clone()]; while let Some(prim) = stack.pop() { - for site in prim.prim_stack().unwrap_or_default() { - if !site.path.has_prefix(mat_path) { - reads.push(site.path.to_string()); - } - } - for attr in prim.authored_attributes().unwrap_or_default() { - for target in attr.connections().unwrap_or_default() { - let target = target.prim_path(); + for name in prim.attribute_names() { + for target in prim.connections(&name) { + // Named where the material is: an instance proxy's + // connections are its prototype's, moved under the instance. + let target = prim.name_of(&target.prim_path()); if !target.has_prefix(mat_path) { reads.push(target.to_string()); } } } - stack.extend(prim.children().unwrap_or_default()); + paths.push(prim.path().clone()); + stack.extend(prim.children()); } + reads.extend(super::index::stage_facts::foreign_spec_paths( + home, &paths, mat_path, + )); reads.sort(); reads.dedup(); reads } +/// For a material bound inside a re-rooted prototype, `(its name, the path +/// the index holds it at)`: what [`MatSource`] reads while it is resolved. +fn re_rooted( + data: &super::index::data::PrimData, + name: &sdf::Path, +) -> Option<(sdf::Path, sdf::Path)> { + let target = index_bound_material(data)?; + (target != *name).then(|| (name.clone(), target)) +} + /// The material at `mat_path`, resolved without the cache, and the `.mtlx` /// displacement program compiled with it: what a cache miss stores, and what /// an in-place material update ([`super::live`]) rebuilds. @@ -672,54 +485,97 @@ pub(super) fn resolve_displacement( mtlx: Option>, caches: &mut ImportCaches<'_>, ) -> Option { - let found = if let Some(shader) = child_shader(stage, mat_path, "PxrDisplace") { - pxr_displacement(stage, mat_path, &shader, caches) + let src = MatSource::new(stage, mat_path, caches); + let found = if let Some(child) = src.child_with_id("PxrDisplace") { + // The node as the network has it; one no terminal reaches is read + // off its prim, authored inputs and connections as they stand. + let (network, name) = match src.node_at(child.path()) { + Some((network, name, _)) => (network.clone(), name.to_owned()), + None => detached_node(&src, &child), + }; + pxr_displacement(&src, &network, &name, caches) } else if let Some(field) = mtlx { Some(Displacement::new(DisplacementValue::Field { field, scale: 1.0, })) } else { - preview_displacement_of(stage, mat_path, caches) + preview_displacement_of(&src, caches) }?; // An authored bound on the material; a mesh prim's own overrides it. - let bound = custom_f32(&prim_at(stage, mat_path.clone()), "crust:displacementBound"); + let bound = src.prim.custom_f32("crust:displacementBound"); Some(found.with_authored_bound(bound)) } -/// The material's child `Shader` with this `info:id`, if any. -fn child_shader(stage: &Stage, mat_path: &sdf::Path, id: &str) -> Option { - let children = prim_at(stage, mat_path.clone()).children().ok()?; - // A token or a string, as `has_shader_id` accepts. - let child = children - .iter() - .find(|c| custom_token(c, "info:id").as_deref() == Some(id))?; - Shader::get(stage, child.path().clone()).ok().flatten() -} - -/// The value a shader input carries, its connection to the Material's -/// interface followed — how the island authors every parameter. -fn input_value(shader: &Shader, name: &str) -> Option { - shader - .input(name) - .value_producing_attributes(ProducerFilter::Any) - .ok()? - .into_iter() - .find_map(|a| value_at(a.attribute())) +/// A shader no terminal of the material reaches, as a one-node network named +/// by its stage path: its `info:id`, its authored inputs' values and its +/// inputs' connections, each to the upstream prim's output. +fn detached_node( + src: &MatSource, + prim: &super::index::data::PrimData, +) -> (super::index::network::Network, String) { + use super::index::network::{Connection, Network, Node, Parameter}; + let mut node = Node { + id: prim.custom_token("info:id").unwrap_or_default(), + ..Node::default() + }; + for name in prim.attribute_names() { + let Some(base) = name.strip_prefix("inputs:") else { + continue; + }; + let connections: Vec = prim + .connections(&name) + .into_iter() + .filter_map(|target| { + let (prim, prop) = target.split_property()?; + let output = prop.strip_prefix("outputs:")?.to_owned(); + Some(Connection { + node: prim.to_string(), + output, + }) + }) + .collect(); + if !connections.is_empty() { + node.connections.insert(base.to_owned(), connections); + } else if let Some(value) = prim.value(&name) { + node.parameters.insert( + base.to_owned(), + Parameter { + value: Some(value), + ..Parameter::default() + }, + ); + } + } + let name = prim.path().to_string(); + let mut network = Network { + material: src.path.clone(), + ..Network::default() + }; + network.nodes.insert(name.clone(), node); + (network, name) } -fn input_f32(shader: &Shader, name: &str) -> Option { - input_value(shader, name).and_then(decode_number) +/// A node parameter's number (`input_f32`). +fn param_f32(node: &super::index::network::Node, name: &str) -> Option { + node.parameters + .get(name) + .and_then(|p| p.value.clone()) + .and_then(decode_number) } -/// The shader whose output drives `shader.inputs:`, if one does. -fn upstream_shader(stage: &Stage, shader: &Shader, name: &str) -> Option { - let produced = shader - .input(name) - .value_producing_attributes(ProducerFilter::ShaderOutputsOnly) - .ok()?; - let source = produced.first()?; - Shader::get(stage, source.path().prim_path()).ok().flatten() +/// The node an input of `node` is connected to, with its name, when it is a +/// shader of the network (`upstream_shader`). +fn upstream<'n>( + network: &'n super::index::network::Network, + node: &str, + name: &str, +) -> Option<(&'n str, &'n super::index::network::Node)> { + let c = network.nodes.get(node)?.connections.get(name)?.first()?; + network + .nodes + .get_key_value(&c.node) + .map(|(k, v)| (k.as_str(), v)) } /// RenderMan's `PxrDisplace`, read the way `PxrDisneyBsdf` is: off the @@ -736,18 +592,15 @@ fn upstream_shader(stage: &Stage, shader: &Shader, name: &str) -> Option /// `dispScalar` (another blend operation, a UV `PxrTexture`) is refused with a /// warning, and so are `dispVector` / `modelDispVector`. fn pxr_displacement( - stage: &Stage, - mat_path: &sdf::Path, - displace: &Shader, + src: &MatSource, + network: &super::index::network::Network, + displace: &str, caches: &mut ImportCaches<'_>, ) -> Option { + let mat_path = &src.path; + let node = network.nodes.get(displace)?; for vector in ["dispVector", "modelDispVector"] { - let input = displace.input(vector); - let connected = input - .value_producing_attributes(ProducerFilter::ShaderOutputsOnly) - .ok() - .is_some_and(|p| !p.is_empty()); - if connected { + if node.connections.get(vector).is_some_and(|c| !c.is_empty()) { warning!( DisplacementVectorIgnored, at = mat_path, @@ -756,22 +609,22 @@ fn pxr_displacement( ); } } - let amount = input_f32(displace, "dispAmount").filter(|a| a.is_finite() && *a != 0.0)?; + let amount = param_f32(node, "dispAmount").filter(|a| a.is_finite() && *a != 0.0)?; - let Some(mut source) = upstream_shader(stage, displace, "dispScalar") else { + let Some((mut source, mut source_node)) = upstream(network, displace, "dispScalar") else { // A constant scalar: a uniform offset. - let s = input_f32(displace, "dispScalar").unwrap_or(0.0); + let s = param_f32(node, "dispScalar").unwrap_or(0.0); let c = amount * s; return (c != 0.0 && c.is_finite()) .then(|| Displacement::new(DisplacementValue::Constant(c))); }; let mut remap = DispRemap::None; - if shader_info_id(&source).as_deref() == Some("PxrDispTransform") { + if source_node.id == "PxrDispTransform" { // RenderMan's defaults for anything unauthored. - let mode = input_f32(&source, "dispRemapMode").unwrap_or(0.0) as i32; - let center = input_f32(&source, "dispCenter").unwrap_or(0.5); - let depth = input_f32(&source, "dispDepth").unwrap_or(1.0); - let height = input_f32(&source, "dispHeight").unwrap_or(1.0); + let mode = param_f32(source_node, "dispRemapMode").unwrap_or(0.0) as i32; + let center = param_f32(source_node, "dispCenter").unwrap_or(0.5); + let depth = param_f32(source_node, "dispDepth").unwrap_or(1.0); + let height = param_f32(source_node, "dispHeight").unwrap_or(1.0); remap = match mode { 1 => DispRemap::Centered { center }, 2 => DispRemap::DepthHeight { @@ -781,53 +634,57 @@ fn pxr_displacement( }, _ => DispRemap::None, }; - source = upstream_shader(stage, &source, "dispScalar")?; + (source, source_node) = upstream(network, source, "dispScalar")?; } - let refuse = |what: &Shader| { + let id = |n: &super::index::network::Node| (!n.id.is_empty()).then(|| n.id.clone()); + let refuse = |name: &str, what: &super::index::network::Node| { + let at = network + .path(name) + .map_or_else(|| name.to_owned(), |p| p.to_string()); warning!( DisplacementUnevaluated, at = mat_path, - "Material {mat_path}: PxrDisplace.dispScalar is driven by {} ({:?}), which \ + "Material {mat_path}: PxrDisplace.dispScalar is driven by {at} ({:?}), which \ crust does not evaluate — the surface is not displaced", - what.path(), - shader_info_id(what) + id(what) ); }; - let sources = match shader_info_id(&source).as_deref() { - Some("PxrPtexture") => vec![source], + let sources: Vec<(&str, &super::index::network::Node)> = match source_node.id.as_str() { + "PxrPtexture" => vec![(source, source_node)], // RenderMan's `PxrBlend` operation 18 is multiply — the island also // uses it to mask its bump colour. `resultR` of the blend is the // product of the two inputs' red channels. - Some("PxrBlend") if input_f32(&source, "operation").map(|o| o as i32) == Some(18) => { - let top = upstream_shader(stage, &source, "topRGB"); - let bottom = upstream_shader(stage, &source, "bottomRGB"); + "PxrBlend" if param_f32(source_node, "operation").map(|o| o as i32) == Some(18) => { + let top = upstream(network, source, "topRGB"); + let bottom = upstream(network, source, "bottomRGB"); match (top, bottom) { - (Some(t), Some(b)) - if [&t, &b] - .iter() - .all(|s| shader_info_id(s).as_deref() == Some("PxrPtexture")) => - { + (Some(t), Some(b)) if [t.1, b.1].iter().all(|s| s.id == "PxrPtexture") => { vec![t, b] } _ => { - refuse(&source); + refuse(source, source_node); return None; } } } _ => { - refuse(&source); + refuse(source, source_node); return None; } }; let mut maps = Vec::with_capacity(sources.len()); - for tex in &sources { + for (name, tex) in &sources { + let node = network.path(name); let file = tex - .input("filename") - .value_producing_attributes(ProducerFilter::Any) - .ok()? - .into_iter() - .find_map(|a| asset_path(a.attribute(), caches.stage_path))?; + .parameters + .get("filename") + .and_then(|p| p.value.as_ref()) + .and_then(|v| { + asset_value_path(v, caches.stage_path, &|| { + node.as_ref() + .and_then(|n| src.layer_dir(n, "inputs:filename")) + }) + })?; maps.push(crate::PtexRef(load_ptex( &file, crate::ColorSpace::RAW, @@ -844,18 +701,14 @@ fn pxr_displacement( /// The preview surface's `inputs:displacement`, when the material shades /// with a `UsdPreviewSurface`. -fn preview_displacement_of( - stage: &Stage, - mat_path: &sdf::Path, - caches: &mut ImportCaches<'_>, -) -> Option { - let mat = UsdMaterial::get(stage, mat_path.clone()).ok().flatten()?; - let resolved = mat.surface_source(SURFACE_RENDER_CONTEXTS).ok().flatten()?; - let shader = resolved.sources().iter().find_map(TerminalSource::shader)?; - if shader_info_id(shader).as_deref() != Some("UsdPreviewSurface") { +fn preview_displacement_of(src: &MatSource, caches: &mut ImportCaches<'_>) -> Option { + let (network, node) = + super::index::network::resolve(&src.networks, "surface", SURFACE_RENDER_CONTEXTS)?; + let (shader, node) = node?; + if node.id != "UsdPreviewSurface" { return None; } - preview_displacement(stage, mat_path, shader, caches) + preview_displacement(src, network, shader, caches) } /// Render contexts `surface_source` is asked for, strongest first. @@ -872,7 +725,7 @@ fn preview_displacement_of( /// [`super::mtlx_network`]) is used when nothing the universal or preview /// context names is decodable, so a stage that already rendered through its /// preview surface renders exactly as before. -const SURFACE_RENDER_CONTEXTS: &[&str] = &["", "glslfx", "mtlx"]; +pub(super) const SURFACE_RENDER_CONTEXTS: &[&str] = &["", "glslfx", "mtlx"]; /// Render contexts for the `volume` terminal. Only a MaterialX network can /// drive one (`ND_volume`, a VDF), so the universal terminal is read too, and @@ -884,6 +737,7 @@ fn resolve_material_uncached( mat_path: &sdf::Path, caches: &mut ImportCaches<'_>, ) -> Arc { + use super::index::network::resolve; // A material whose whole definition is a reference into a `.mtlx` composes // to a prim with a `Material` type name and *nothing inside it*, because // openusd ships no MaterialX file-format plugin. So every schema query @@ -895,7 +749,7 @@ fn resolve_material_uncached( // stage of ordinary USD materials should not pay for that. macro_rules! try_mtlx { () => { - if let Some((file, node)) = mtlx_reference(stage, mat_path) + if let Some((file, node)) = super::index::stage_facts::mtlx_reference(stage, mat_path) && let Some(m) = load_mtlx_material(&file, &node, mat_path, caches) { debug!( @@ -910,19 +764,17 @@ fn resolve_material_uncached( // Which shader ids are MaterialX: the standard `ND_…`, and the ids the // import's node library defines. let library = caches.materials.library.clone(); - let mat = match UsdMaterial::get(stage, mat_path.clone()) { - Ok(Some(m)) => m, - _ => { - try_mtlx!(); - warning!( - MaterialFallbackDefault, - at = mat_path, - "Material at {} not resolvable — using default grey OpenPBR", - mat_path - ); - return default_material(); - } - }; + let src = MatSource::new(stage, mat_path, caches); + if src.prim.ty() != moho::tokens::prim_type::MATERIAL { + try_mtlx!(); + warning!( + MaterialFallbackDefault, + at = mat_path, + "Material at {} not resolvable — using default grey OpenPBR", + mat_path + ); + return default_material(); + } // Checked before asking for the surface source, because that answer cannot // be trusted to name the network that matters. A material carrying several @@ -933,55 +785,60 @@ fn resolve_material_uncached( // `.connect`ed to the material's interface rather than authored as values. // Decoding that gives a material with every parameter at its default: the // island rendered uniformly pale and glossy instead of matte dark rock. - if has_shader_id(stage, mat_path, "PxrDisneyBsdf") { + if src.child_with_id("PxrDisneyBsdf").is_some() { debug!( "Material {mat_path}: PxrDisneyBsdf child shader — decoding it off the Material prim" ); - return Arc::new(disney_to_openpbr(stage, mat_path, caches)); + return Arc::new(disney_to_openpbr(&src, caches)); } + let is_mtlx = |id: &str| super::mtlx_network::is_mtlx_id(id, &library); // A `volume` terminal makes the material Typhoon's surface-volume // material: the volume is the medium inside the bound geometry, under the // MaterialX surface of the same network when there is one, and a // transparent medium boundary when there is none. - if let Some(volume) = terminal_shader(mat.volume_source(VOLUME_RENDER_CONTEXTS)).filter(|s| { - shader_info_id(s).is_some_and(|id| super::mtlx_network::is_mtlx_id(&id, &library)) - }) { + let volume = resolve(&src.networks, "volume", VOLUME_RENDER_CONTEXTS) + .and_then(|(network, node)| node.map(|(name, node)| (network, name, node))) + .filter(|(_, _, node)| is_mtlx(&node.id)); + if let Some((volume_network, volume_name, _)) = volume { // Each context is checked for MaterialX on its own: an `mtlx` // surface that is not a MaterialX shader must not hide a universal // one that is. - let is_mtlx = |s: &Shader| { - shader_info_id(s).is_some_and(|id| super::mtlx_network::is_mtlx_id(&id, &library)) + let mtlx_surface = |contexts: &[&str]| { + resolve(&src.networks, "surface", contexts) + .and_then(|(network, node)| node.map(|(name, node)| (network, name, node))) + .filter(|(_, _, node)| is_mtlx(&node.id)) }; - let surface = terminal_shader(mat.surface_source(&["mtlx"])) - .filter(is_mtlx) - .or_else(|| terminal_shader(mat.surface_source(&[""])).filter(is_mtlx)); + let surface = mtlx_surface(&["mtlx"]).or_else(|| mtlx_surface(&[""])); + let other = + resolve(&src.networks, "surface", SURFACE_RENDER_CONTEXTS).and_then(|(_, node)| node); if surface.is_none() - && let Some(other) = terminal_shader(mat.surface_source(SURFACE_RENDER_CONTEXTS)) + && let Some((_, other)) = other { warning!( MaterialVolumeIgnored, at = mat_path, "Material {mat_path}: the volume terminal is MaterialX but the surface ({}) \ is not — the volume is ignored", - shader_info_id(&other).unwrap_or_default() + other.id ); - } else if let Some(m) = - inline_mtlx_material(stage, mat_path, surface.as_ref(), Some(&volume), caches) - { - return m; + } else { + if let Some(m) = inline_mtlx_material( + &src, + surface.map(|(n, name, _)| (n, name)), + Some((volume_network, volume_name)), + caches, + ) { + return m; + } } } - // openusd 0.7 hands back the whole resolved terminal — every source - // driving it, in connection order — where 0.6 returned the one shader. - // The first source whose endpoint is a `Shader`-typed prim is that shader; - // a source can point at an untyped prim, which is USD's invalid-shader - // result and not something to decode. - let resolved = mat.surface_source(SURFACE_RENDER_CONTEXTS).ok().flatten(); - let Some(shader) = resolved - .as_ref() - .and_then(|terminal| terminal.sources().iter().find_map(TerminalSource::shader)) + // The surface terminal over the render contexts in preference order: the + // first context that has one commits, and its node is the shader (none + // when the terminal's source is no `Shader`, USD's invalid-shader result). + let Some((network, Some((shader, node)))) = + resolve(&src.networks, "surface", SURFACE_RENDER_CONTEXTS) else { // The MaterialX case reaches here when the material prim itself // composed (a wrapper layer `over`s it, so the prim exists) but @@ -996,19 +853,22 @@ fn resolve_material_uncached( return default_material(); }; - let shader_id = shader_info_id(shader); + let shader_id = (!node.id.is_empty()).then(|| node.id.clone()); debug!("Material {mat_path}: surface shader id = {shader_id:?}"); match shader_id.as_deref() { - Some("crust:openpbr") => decode_crust_openpbr(shader, caches.working, caches.luma), + Some("crust:openpbr") => match src.node(network, shader) { + Some(prim) => decode_crust_openpbr(&prim, caches.working, caches.luma), + None => default_material(), + }, Some("UsdPreviewSurface") => { // The preview surface may still be the Ptex-driven one — the Moana // island wires its `diffuseColor` to a Ptex node — so consult the // material's own interface input either way. - preview_surface_material(stage, mat_path, shader, caches) + preview_surface_material(&src, network, shader, caches) } - Some("PxrDisneyBsdf") => Arc::new(disney_to_openpbr(stage, mat_path, caches)), - Some(id) if super::mtlx_network::is_mtlx_id(id, &library) => { - inline_mtlx_material(stage, mat_path, Some(shader), None, caches) + Some("PxrDisneyBsdf") => Arc::new(disney_to_openpbr(&src, caches)), + Some(id) if is_mtlx(id) => { + inline_mtlx_material(&src, Some((network, shader)), None, caches) .unwrap_or_else(default_material) } Some(other) => { @@ -1033,49 +893,24 @@ fn resolve_material_uncached( } } -/// The `info:id` of the surface shader the import decodes the material at -/// `mat_path` from, in the import's order: a `PxrDisneyBsdf` child first -/// (see [`resolve_material_uncached`]), else the shader the surface terminal -/// resolves to. `None` when there is none — a MaterialX reference composes -/// no shader prim. What `crust ls material --json` reports as `surface`. -pub(super) fn surface_shader_id(stage: &Stage, mat_path: &sdf::Path) -> Option { - if has_shader_id(stage, mat_path, "PxrDisneyBsdf") { - return Some("PxrDisneyBsdf".to_owned()); - } - let mat = UsdMaterial::get(stage, mat_path.clone()).ok().flatten()?; - terminal_shader(mat.surface_source(SURFACE_RENDER_CONTEXTS)).and_then(|s| shader_info_id(&s)) -} - -/// The first `Shader`-typed source driving a resolved terminal. -fn terminal_shader( - resolved: Result< - Option, - openusd_schemas::SchemaError, - >, -) -> Option { - resolved - .ok() - .flatten() - .and_then(|t| t.sources().iter().find_map(TerminalSource::shader).cloned()) -} - -/// Builds a material from an inline MaterialX network: the shaders driving +/// Builds a material from an inline MaterialX network: the nodes driving /// the `surface` and `volume` terminals, translated into one document /// ([`super::mtlx_network`]) and compiled as a `.mtlx`'s would be. Textures /// arrive as absolute paths, so they resolve against nothing further. fn inline_mtlx_material( - stage: &Stage, - mat_path: &sdf::Path, - surface: Option<&Shader>, - volume: Option<&Shader>, + src: &MatSource, + surface: Option<(&super::index::network::Network, &str)>, + volume: Option<(&super::index::network::Network, &str)>, caches: &mut ImportCaches<'_>, ) -> Option> { + let mat_path = &src.path; let net = super::mtlx_network::translate( - stage, + &|p| src.at(p), caches.stage_path, + &|p, name| src.layer_dir(p, name), &caches.materials.library, - surface.map(|s| &**s), - volume.map(|s| &**s), + surface, + volume, ); if !net.reported.is_empty() { warning!( @@ -1105,34 +940,154 @@ fn inline_mtlx_material( ) } -pub(super) fn default_material() -> Arc { - Arc::new(OpenPBR::diffuse(Vec3A::new(0.5, 0.5, 0.5))) +/// A material as the index readers read it: its prim and its networks +/// ([`super::index::network`]) in a scene index — the walked input's when it +/// holds the material, else one over the stage the material was found on (a +/// material outside the chunk, or an in-place rebuild's) — and the nodes' +/// prims, for what a shader input authors itself. +pub(super) struct MatSource { + /// The material's path, in the namespace it is bound in. + pub(super) path: sdf::Path, + pub(super) prim: super::index::data::PrimData, + pub(super) networks: std::collections::BTreeMap, + index: moho::scene_index::SceneIndexHandle, + /// The input built over `stage`, when the walked one does not hold the + /// material: kept alive with the source. + _input: Option, + /// For a material inside a re-rooted prototype, `(the path the + /// instancing chain holds it at, its name)`: its prims are read there + /// and named here ([`super::index::data::PrimData::rebased`]). + rebase: Option<(sdf::Path, sdf::Path)>, + /// The stage that composes the material, for what is read off it: the + /// layer an asset value is authored in ([`MatSource::layer_dir`]). + stage: Stage, +} + +impl MatSource { + /// The material at `mat_path`, found on `home`. + pub(super) fn new(home: &Stage, mat_path: &sdf::Path, caches: &ImportCaches<'_>) -> Self { + use super::index::data::PrimData; + // A material bound inside a re-rooted prototype: read in the + // instancing chain, at the path the binding names (Moho's M11). + if let Some((name, data)) = &caches.materials.reading + && name == mat_path + && let Some(inst) = &caches.inst + { + let prim = PrimData::rebased(inst, data, data, name); + return MatSource { + path: mat_path.clone(), + networks: super::index::network::networks(&prim), + prim, + index: inst.clone(), + _input: None, + rebase: Some((data.clone(), name.clone())), + stage: home.clone(), + }; + } + // Read at the top of the import's chain, where the material-node + // resolution has filled a node outside the walked chunk (Moho's M10). + let walked = caches.top.as_ref().and_then(|top| { + let prim = PrimData::in_index(top, mat_path); + (prim.ty() == moho::tokens::prim_type::MATERIAL).then(|| (top.clone(), prim)) + }); + let (index, prim, input) = match walked { + Some((index, prim)) => (index, prim, None), + None => { + let input = super::index::input_chain(home.clone(), caches.time, false); + let prim = PrimData::in_index(&input.chain, mat_path); + (input.chain.clone(), prim, Some(input)) + } + }; + MatSource { + path: mat_path.clone(), + networks: super::index::network::networks(&prim), + prim, + index, + _input: input, + rebase: None, + stage: home.clone(), + } + } + + /// The directory of the layer authoring the value of attribute `name` of + /// the prim at `path` (read as the material is, so named by its USD + /// path): where a relative asset path in it is anchored. + pub(super) fn layer_dir(&self, path: &sdf::Path, name: &str) -> Option { + let attr = self.at(path).path().append_property(name).ok()?; + super::index::stage_facts::authoring_layer_dir(&self.stage, &attr) + } + + /// The prim at `path`, read as the material is. + pub(super) fn at(&self, path: &sdf::Path) -> super::index::data::PrimData { + use super::index::data::PrimData; + match &self.rebase { + Some((data, name)) => { + let at = path + .as_str() + .strip_prefix(name.as_str()) + .filter(|rest| rest.is_empty() || rest.starts_with('/')) + .and_then(|rest| sdf::Path::new(format!("{data}{rest}").as_str()).ok()) + .unwrap_or_else(|| path.clone()); + PrimData::rebased(&self.index, &at, data, name) + } + None => PrimData::in_index(&self.index, path), + } + } + + /// The prim of the node named `name` in `network`. + pub(super) fn node( + &self, + network: &super::index::network::Network, + name: &str, + ) -> Option { + network.prim(&|p| self.at(p), name) + } + + /// The material's child prim whose `info:id` is `id` (a token or a string, + /// as `has_shader_id` accepts), if any. + fn child_with_id(&self, id: &str) -> Option { + self.prim + .children() + .into_iter() + .find(|c| c.custom_token("info:id").as_deref() == Some(id)) + } + + /// The node at stage path `path` in any of the material's networks, with + /// its network and name. + fn node_at( + &self, + path: &sdf::Path, + ) -> Option<( + &super::index::network::Network, + &str, + &super::index::network::Node, + )> { + self.networks.values().find_map(|n| { + n.nodes + .iter() + .find(|(name, _)| n.path(name).as_ref() == Some(path)) + .map(|(name, node)| (n, name.as_str(), node)) + }) + } } -pub(super) fn shader_info_id(shader: &Shader) -> Option { - // `Shader::id()` is the higher-level accessor and does the correct - // `get::()` (which extracts from both String and Token variants). - if let Ok(Some(id)) = shader.id() { - return Some(id); +/// `name` through the OCIO config, warning at `at` (an attribute's path) when +/// it does not know it: `attrs::named_space`. +pub(super) fn named_space(at: &str, name: &str) -> Option { + let space = Space::named(name); + if space.is_none() { + warning!( + ColorUnknownSpace, + at = at, + "{at}: colorSpace `{name}` is not defined by the OCIO config — the value is used as \ + authored" + ); } - // Fallback for older openusd revisions or shaders that author info:id - // via a raw attribute rather than the schema helper. - value_at(&shader.attribute("info:id")).and_then(decode_text) + space } -/// Whether the material has a child `Shader` prim with this `info:id`. -/// -/// Cheaper and more reliable than resolving a render-context output for the -/// question actually being asked — "does this material shade with X" — since a -/// material may declare several context outputs and USD gives no ordering -/// between them without a configured render context. -fn has_shader_id(stage: &Stage, mat_path: &sdf::Path, id: &str) -> bool { - let Ok(children) = prim_at(stage, mat_path.clone()).children() else { - return false; - }; - children - .iter() - .any(|c| custom_token(c, "info:id").as_deref() == Some(id)) +pub(super) fn default_material() -> Arc { + Arc::new(OpenPBR::diffuse(Vec3A::new(0.5, 0.5, 0.5))) } /// Maps RenderMan's `PxrDisneyBsdf` onto [`OpenPBR`]. @@ -1156,16 +1111,13 @@ fn has_shader_id(stage: &Stage, mat_path: &sdf::Path, id: &str) -> bool { /// under a flat `1 − fuzz_weight`) replaced the base entirely — the lava rocks /// lost their Ptex detail and rendered as smooth blue-grey plastic. A weight is not a weight just because it shares a /// name, and there is no honest scalar between the two. -fn disney_to_openpbr( - stage: &Stage, - mat_path: &sdf::Path, - caches: &mut ImportCaches<'_>, -) -> OpenPBR { - let prim = prim_at(stage, mat_path.clone()); +fn disney_to_openpbr(src: &MatSource, caches: &mut ImportCaches<'_>) -> OpenPBR { + let mat_path = &src.path; + let prim = &src.prim; // Called with the whole attribute name, `inputs:` included: a literal, so // reading an input allocates no name. - let f = |n: &str| custom_f32(&prim, n); - let c = |n: &str| custom_color3(&prim, n); + let f = |n: &str| prim.custom_f32(n); + let c = |n: &str| prim.custom_color3(n); let mut o = OpenPBR { luma: caches.luma, @@ -1182,8 +1134,12 @@ fn disney_to_openpbr( // `colorSpace:name` does not, since it describes linear colour values and // this one is display-encoded by convention. if let Some(rgb) = c("inputs:baseColor") { - let source = - attr_own_color_space(&prim.attribute("inputs:baseColor")).unwrap_or(Space::G22_REC709); + let source = prim + .metadata("inputs:baseColor", "colorSpace") + .and_then(decode_text) + .filter(|n| !n.is_empty()) + .and_then(|n| named_space(&prim.attribute_path("inputs:baseColor"), &n)) + .unwrap_or(Space::G22_REC709); o.base_color = crate::color::convert(rgb, source, caches.working); } if let Some(v) = f("inputs:metallic") { @@ -1217,7 +1173,7 @@ fn disney_to_openpbr( o.geometry_thin_walled = v != 0.0; } - o.base_color_ptex = material_ptex(stage, mat_path, caches); + o.base_color_ptex = material_ptex(src, caches); debug!( "PxrDisneyBsdf {mat_path}: baseColor={:?} (authored {:?}) roughness={} metalness={} \ fuzz={} coat={} ior={} ptex={}", @@ -1233,74 +1189,6 @@ fn disney_to_openpbr( o } -/// The `.mtlx` file and material node a `Material` prim references, if any. -/// -/// Read off the *layer specs* rather than the composed prim, because there is -/// nothing composed to read: without a MaterialX file-format plugin the -/// reference resolves to no layer at all, so the arc survives only as authored -/// metadata. The first `.mtlx` found wins. -fn mtlx_reference(stage: &Stage, mat_path: &sdf::Path) -> Option<(std::path::PathBuf, String)> { - // The composed stage path is not where the reference is *authored*: a shot - // layer referencing `teapot.usda` sees the material at - // `/World/Teapot/Looks/TeapotCeramic`, while the arc is authored at - // `/Teapot/Looks/TeapotCeramic` inside the asset layer. Only the prim's - // composition graph knows both, so the candidate spec paths come from its - // nodes rather than from the stage path. - let mut paths = vec![mat_path.clone()]; - if let Ok(graph) = prim_at(stage, mat_path.clone()).prim_index().graph() { - for node in graph.all_nodes() { - let p = node.path().clone(); - if !paths.contains(&p) { - paths.push(p); - } - } - } - - for id in stage.layer_identifiers() { - let Some(layer) = stage.layer(&id) else { - continue; - }; - // Every candidate path against every layer. The cross product is a - // handful of lookups — a material's graph has a few nodes and a stage - // a few layers — and it sidesteps having to map a node's `LayerId` - // back to an identifier, which openusd does not expose. - for path in &paths { - let Ok(Some(spec)) = layer.prim(path.clone()) else { - continue; - }; - let Ok(Some(sdf::Value::ReferenceListOp(list))) = spec.field("references") else { - continue; - }; - // Every list-op bucket, because which one a reference lands in - // depends on whether it was authored as `prepend`, `append` or a - // bare assignment — and all three mean "this material is that - // document". - let items = list - .explicit_items() - .iter() - .chain(list.prepended_items().iter()) - .chain(list.appended_items().iter()) - .chain(list.added_items().iter()); - for r in items { - if !r.asset_path.to_ascii_lowercase().ends_with(".mtlx") { - continue; - } - // Anchored against the *authoring layer's* directory, the same - // rule `asset_path` follows for textures and for the - // same reason: `Looks/teapot_ceramic_ldX.mtlx` is relative to - // `teapot.usda`, which need not be the stage root. - let base = std::path::Path::new(&id).parent()?.to_path_buf(); - let file = base.join(&r.asset_path); - let node = crate::materialx::material_node_of(r.prim_path.as_str()) - .unwrap_or_default() - .to_string(); - return Some((file, node)); - } - } - } - None -} - /// Parses a `.mtlx` and turns the named material node into a [`Material`]. /// /// Asset paths inside the document are relative to the document itself (the @@ -1429,21 +1317,27 @@ fn compile_mtlx( /// `HwPtexTexture_1.file` for the GL preview both `.connect` to it — so /// reading it directly gets the file without walking either network. pub(super) fn material_ptex( - stage: &Stage, - mat_path: &sdf::Path, + src: &MatSource, caches: &mut ImportCaches<'_>, ) -> Option { - let prim = prim_at(stage, mat_path.clone()); - let path = asset_path(&prim.attribute("inputs:surfaceMap"), caches.stage_path)?; + let path = src.prim.value("inputs:surfaceMap").and_then(|v| { + asset_value_path(&v, caches.stage_path, &|| { + src.layer_dir(src.prim.path(), "inputs:surfaceMap") + }) + })?; let space = crate::ColorSpace::new(Space::G22_REC709, caches.working); - load_ptex(&path, space, mat_path, caches).map(crate::PtexRef) + load_ptex(&path, space, &src.path, caches).map(crate::PtexRef) } /// Decode a `crust:openpbr` shader into the OpenPBR material. Every input /// name is camelCase mirror of the Rust snake_case, e.g. `base_color` → /// `inputs:baseColor`, `subsurface_radius_scale` → `inputs:subsurfaceRadiusScale`. -fn decode_crust_openpbr(shader: &Shader, working: Space, luma: utils::Luma) -> Arc { +fn decode_crust_openpbr( + shader: &super::index::data::PrimData, + working: Space, + luma: utils::Luma, +) -> Arc { let mut o = OpenPBR { luma, ..OpenPBR::default() @@ -1451,15 +1345,13 @@ fn decode_crust_openpbr(shader: &Shader, working: Space, luma: utils::Luma) -> A // Inputs by their whole attribute name (`inputs:roughness`): the names are // literals, so none is built per read. - let f = |n: &str, d: f32| attr_f32(&shader.attribute(n)).unwrap_or(d); + let f = |n: &str, d: f32| shader.custom_f32(n).unwrap_or(d); // Every colour is authored in the working space unless its `colorSpace` // metadatum names another (`in_working`); `v` reads a vector that is not // a colour and is never converted. - let c = |n: &str, d: Vec3A| { - attr_vec3(&shader.attribute(n)).map_or(d, |v| in_working(&shader.attribute(n), v, working)) - }; - let v = |n: &str, d: Vec3A| attr_vec3(&shader.attribute(n)).unwrap_or(d); - let b = |n: &str, d: bool| attr_bool(&shader.attribute(n)).unwrap_or(d); + let c = |n: &str, d: Vec3A| shader.custom_color(n, working).unwrap_or(d); + let v = |n: &str, d: Vec3A| shader.custom_color3(n).unwrap_or(d); + let b = |n: &str, d: bool| shader.custom_bool(n).unwrap_or(d); // Base o.base_weight = f("inputs:baseWeight", o.base_weight); @@ -1536,3 +1428,107 @@ fn decode_crust_openpbr(shader: &Shader, working: Space, luma: utils::Luma) -> A Arc::new(o) } + +#[cfg(test)] +mod binding_tests { + use super::*; + use crate::scene::usd_import::index::data::PrimData; + use crate::scene::usd_import::index::input_chain; + + /// The scene index's resolved bindings agree with the direct resolution + /// (`bound_material`) on every prim of `stage`, a purpose-binding sample + /// and the collection, strength and nested-binding fixtures included. + fn agree(stage: &Stage) -> usize { + let input = input_chain(stage.clone(), None, false); + let mut bound = 0; + let mut stack = vec![sdf::Path::abs_root()]; + while let Some(path) = stack.pop() { + // Moho's propagated prototypes and point-instancer copies have no + // stage prim to compare with (and take Hydra's binding + // inheritance, the change's second behaviour change). + let rerooted = path + .as_str() + .contains(moho::tokens::instancing::PROPAGATED_ROOT) + || path.as_str().contains("/ForInstancer"); + if rerooted { + continue; + } + if !path.is_abs_root() { + let prim = super::super::prim_at(stage, path.clone()); + let direct = super::super::listing::bound_material(stage, &prim); + let index = index_bound_material(&PrimData::in_index(&input.chain, &path)); + assert_eq!(direct, index, "{path}"); + bound += usize::from(direct.is_some()); + } + stack.extend(input.chain.children(&path)); + } + bound + } + + fn open(text_or_sample: &str) -> Stage { + let path = if text_or_sample.ends_with(".usda") { + std::path::Path::new(env!("CARGO_MANIFEST_DIR")) + .join("../../samples") + .join(text_or_sample) + } else { + let dir = std::env::temp_dir().join("crust_binding_agreement"); + std::fs::create_dir_all(&dir).expect("temp dir"); + let path = dir.join(format!("{:016x}.usda", { + use std::hash::{Hash, Hasher}; + let mut h = std::collections::hash_map::DefaultHasher::new(); + text_or_sample.hash(&mut h); + h.finish() + })); + std::fs::write(&path, text_or_sample).expect("write stage"); + path + }; + super::super::stage_builder() + .load(openusd::usd::InitialLoadSet::LoadAll) + .open(path.to_str().expect("utf-8")) + .expect("stage opens") + } + + #[test] + fn index_bindings_agree_with_the_direct_resolution() { + for sample in [ + "purpose_bindings.usda", + "cornellbox.usda", + "instancing.usda", + "nested_instancing.usda", + "materialx_basic.usda", + "render_passes.usda", + ] { + agree(&open(sample)); + } + let fixture = r#"#usda 1.0 +def Xform "W" ( + prepend apiSchemas = ["MaterialBindingAPI", "CollectionAPI:set"] +) +{ + rel material:binding = + rel material:binding:full = (bindMaterialAs = "strongerThanDescendants") + rel material:binding:collection:pick = [, ] + prepend rel collection:set:includes = + def Mesh "Plain" (prepend apiSchemas = ["MaterialBindingAPI"]) + { + rel material:binding:full = + } + def Mesh "Picked" {} + def Xform "Deep" (prepend apiSchemas = ["MaterialBindingAPI"]) + { + rel material:binding = + def Mesh "Leaf" {} + } +} +def Scope "Looks" +{ + def Material "A" {} + def Material "B" {} + def Material "C" {} + def Material "D" {} + def Material "E" {} +} +"#; + assert!(agree(&open(fixture)) > 0, "the fixture binds something"); + } +} diff --git a/crates/crust-core/src/scene/usd_import/mesh.rs b/crates/crust-core/src/scene/usd_import/mesh.rs index 89de39aa5..040998e5d 100644 --- a/crates/crust-core/src/scene/usd_import/mesh.rs +++ b/crates/crust-core/src/scene/usd_import/mesh.rs @@ -3,18 +3,17 @@ //! (Ptex faces, UVs, texture density). use crate::warning; +use moho::openusd_schemas; use std::collections::HashMap; use std::hash::{Hash, Hasher}; use std::sync::Arc; use crust_rt::{Geometry, Scene as RtScene, SceneBuilder as RtSceneBuilder}; use glam::{Affine3A, Mat4 as GMat4, Vec3, Vec3A}; -use openusd::gf::Vec3f; -use openusd::sdf; -use openusd::usd::Prim; +use moho::openusd::gf::Vec3f; +use moho::openusd::sdf; use openusd_schemas::geom::{ - FaceVaryingLinearInterpolation, GprimSchema, InterpolateBoundary, Mesh as UsdMesh, MeshSchema, - Orientation, PointBasedSchema, SubdivisionScheme, + FaceVaryingLinearInterpolation, InterpolateBoundary, Orientation, SubdivisionScheme, }; use rayon::prelude::*; use tracing::debug; @@ -27,14 +26,11 @@ use crate::scene::displace::{self, VertexChart}; use crate::scene::subdiv; use super::adaptive::{self, Aabb, Cull, ScreenRate}; -use super::attrs::{attr_color_space, decode_text}; -use super::attrs::{ - custom_f32, custom_i32, custom_i32_array, decode_f32_array, decode_i32_array, - decode_vec3f_array, prim_motion_translate, prim_ray_mask, prim_value, value_at, -}; +use super::attrs::decode_text; +use super::attrs::{decode_f32_array, decode_i32_array, decode_vec3f_array}; +use super::index::data::{PrimData, color_space, motion_translate, ray_mask}; use super::materials::BoundMaterial; use super::products::{KeptPrimvar, PrimvarKeep}; -use super::time::eval_time; use super::xform::Span; /// Identity of an imported mesh's shared geometry: a content hash of the @@ -302,7 +298,7 @@ impl SubdivPolicy { /// `place`. fn level_for( &mut self, - prim: &Prim, + prim: &PrimData, points: &[Vec3f], counts: &[i32], indices: &[i32], @@ -358,22 +354,18 @@ pub(super) enum MeshPlace<'a> { /// A mesh's `subdivisionScheme`, unauthored (or blocked) reading the schema /// fallback, `catmullClark`. -fn subdivision_scheme(mesh: &UsdMesh) -> SubdivisionScheme { - mesh.subdivision_scheme_attr() - .get_at::(eval_time()) - .ok() - .flatten() +fn subdivision_scheme(mesh: &PrimData) -> SubdivisionScheme { + mesh.resolved("subdivisionScheme") + .and_then(|v| SubdivisionScheme::try_from(v).ok()) .unwrap_or_default() } /// Whether a mesh authors `orientation = leftHanded`: its faces wind /// clockwise seen from their front. Unauthored (or blocked) reads the schema /// fallback, `rightHanded`. -fn left_handed(mesh: &UsdMesh) -> bool { - mesh.orientation_attr() - .get_at::(eval_time()) - .ok() - .flatten() +fn left_handed(mesh: &PrimData) -> bool { + mesh.resolved("orientation") + .and_then(|v| Orientation::try_from(v).ok()) .is_some_and(|o| o == Orientation::LeftHanded) } @@ -445,7 +437,7 @@ impl MeshArena { /// many prims share it, and displacement cannot change what is shared. pub(super) fn intern( &mut self, - prim: &Prim, + prim: &PrimData, src: MeshSource, material: &Arc, displacement: Option<&Displacement>, @@ -536,7 +528,7 @@ impl MeshArena { /// and records what it did. fn displace( &mut self, - prim: &Prim, + prim: &PrimData, src: &MeshSource, verts: &[[f32; 3]], d: &Displacement, @@ -680,8 +672,8 @@ fn commit_mesh(geom: MeshGeom) -> RtScene { /// ([`place_mesh_source`]), which says whether its motion was dropped. pub(super) fn emit_mesh( world: &mut WorldBuilder, - prim: &Prim, - mesh: &UsdMesh, + prim: &PrimData, + mesh: &PrimData, span: Span, bound: BoundMaterial, meshes: &mut MeshArena, @@ -736,7 +728,7 @@ pub(super) fn emit_mesh( /// baked, so that motion is dropped (`xform.motion_ignored`). pub(super) fn place_mesh_source( world: &mut WorldBuilder, - prim: &Prim, + prim: &PrimData, src: MeshSource, span: Span, bound: BoundMaterial, @@ -750,8 +742,8 @@ pub(super) fn place_mesh_source( } = bound; let want_faces = material.face_texture().is_some(); let want_uvs = material.uses_uv(); - let mask = prim_ray_mask(prim); - let motion = prim_motion_translate(prim); + let mask = ray_mask(prim); + let motion = motion_translate(prim); // Non-invertible placements (a zero scale axis) cannot be instanced — // bake the degenerate transform into world-space triangles as before. @@ -1092,17 +1084,17 @@ pub(super) fn bake_indices(mut tris: Vec<[u32; 3]>, l2w: &Affine3A) -> Vec<[u32; /// Reads a mesh prim's authored arrays. `None` when any of the three /// required attributes is missing. -pub(super) fn mesh_arrays(mesh: &UsdMesh) -> Option<(Vec, Vec, Vec)> { - let points = value_at(&mesh.points_attr()).and_then(decode_vec3f_array)?; - let counts = value_at(&mesh.face_vertex_counts_attr()).and_then(decode_i32_array)?; - let indices = value_at(&mesh.face_vertex_indices_attr()).and_then(decode_i32_array)?; +pub(super) fn mesh_arrays(mesh: &PrimData) -> Option<(Vec, Vec, Vec)> { + let points = mesh.value("points").and_then(decode_vec3f_array)?; + let counts = mesh.value("faceVertexCounts").and_then(decode_i32_array)?; + let indices = mesh.value("faceVertexIndices").and_then(decode_i32_array)?; Some((points, counts, indices)) } /// A mesh's `holeIndices` as a mask over its `n_faces` faces, empty when it /// authors none. An entry naming no face is dropped. -pub(super) fn mesh_holes(prim: &Prim, n_faces: usize) -> Vec { - let Some(authored) = custom_i32_array(prim, "holeIndices") else { +pub(super) fn mesh_holes(prim: &PrimData, n_faces: usize) -> Vec { + let Some(authored) = prim.custom_i32_array("holeIndices") else { return Vec::new(); }; let mut holes = vec![false; n_faces]; @@ -1177,7 +1169,7 @@ impl UvSource { /// `n_face_vertices` the length of its `faceVertexIndices`, which a `constant` /// or `uniform` chart needs to be spread over the face-vertices. pub(super) fn mesh_uvs( - prim: &Prim, + prim: &PrimData, preferred: Option<&str>, counts: &[i32], n_face_vertices: usize, @@ -1189,7 +1181,7 @@ pub(super) fn mesh_uvs( "primvars:st0", "primvars:UVMap", ]) { - let values = match prim_value(prim, name) { + let values = match prim.value(name) { // `texCoord2f[]` and `float2[]` are the same bits; which one an // exporter writes is a matter of taste. Some(sdf::Value::Vec2fVec(v)) => v.iter().map(|p| [p.x, p.y]).collect::>(), @@ -1198,13 +1190,8 @@ pub(super) fn mesh_uvs( if values.is_empty() { continue; } - let indices = custom_i32_array(prim, &format!("{name}:indices")); - let interpolation = prim - .attribute(name) - .metadata::("interpolation") - .ok() - .flatten() - .and_then(decode_text); + let indices = prim.custom_i32_array(&format!("{name}:indices")); + let interpolation = prim.metadata(name, "interpolation").and_then(decode_text); // USD's fallback interpolation for a primvar is `constant`, but for // `st` in practice it is always authored; treating an unauthored // metadatum as faceVarying would mis-index a vertex-interpolated @@ -1344,8 +1331,8 @@ pub(super) enum RefinedFaces { /// `None` when the required attributes are missing (matching /// [`mesh_arrays`]); any subdivision problem warns and degrades to the cage. pub(super) fn mesh_source( - prim: &Prim, - mesh: &UsdMesh, + prim: &PrimData, + mesh: &PrimData, mut needs: MeshNeeds<'_>, policy: &mut SubdivPolicy, place: MeshPlace<'_>, @@ -1375,8 +1362,8 @@ pub(super) fn mesh_source( /// after the render vars' (the count of which the caller records), every face /// reversed when `left_handed` (which the caller records too). fn read_mesh_source( - prim: &Prim, - mesh: &UsdMesh, + prim: &PrimData, + mesh: &PrimData, needs: MeshNeeds<'_>, policy: &mut SubdivPolicy, place: MeshPlace<'_>, @@ -1455,7 +1442,7 @@ fn read_mesh_source( left_handed: false, }; - if custom_i32(prim, "crust:subdivisionLevel").is_some() { + if prim.custom_i32("crust:subdivisionLevel").is_some() { warning!( SubdivLegacyLevel, at = prim.path(), @@ -1733,8 +1720,8 @@ impl<'a> MeshNeeds<'a> { /// addresses here, so those children would read no map at all. Its cage keeps /// every triangle addressable, so it stays the cage. fn effective_scheme( - prim: &Prim, - mesh: &UsdMesh, + prim: &PrimData, + mesh: &PrimData, counts: &[i32], displacement: Option<&Displacement>, policy: &mut SubdivPolicy, @@ -1763,13 +1750,11 @@ fn effective_scheme( } /// The mesh's `interpolateBoundary`, mapped one to one. -fn vtx_boundary(mesh: &UsdMesh) -> opensubdiv_rs::sdc::VtxBoundaryInterpolation { +fn vtx_boundary(mesh: &PrimData) -> opensubdiv_rs::sdc::VtxBoundaryInterpolation { use opensubdiv_rs::sdc::VtxBoundaryInterpolation as B; match mesh - .interpolate_boundary_attr() - .get_at::(eval_time()) - .ok() - .flatten() + .resolved("interpolateBoundary") + .and_then(|v| InterpolateBoundary::try_from(v).ok()) .unwrap_or_default() { InterpolateBoundary::None => B::None, @@ -1789,23 +1774,23 @@ struct SharpnessArrays { } impl SharpnessArrays { - fn read(mesh: &UsdMesh) -> Self { - let ints = |attr| { - value_at(&attr) + fn read(mesh: &PrimData) -> Self { + let ints = |name: &str| { + mesh.value(name) .and_then(decode_i32_array) .unwrap_or_default() }; - let floats = |attr| { - value_at(&attr) + let floats = |name: &str| { + mesh.value(name) .and_then(decode_f32_array) .unwrap_or_default() }; SharpnessArrays { - crease_indices: ints(mesh.crease_indices_attr()), - crease_lengths: ints(mesh.crease_lengths_attr()), - crease_sharpnesses: floats(mesh.crease_sharpnesses_attr()), - corner_indices: ints(mesh.corner_indices_attr()), - corner_sharpnesses: floats(mesh.corner_sharpnesses_attr()), + crease_indices: ints("creaseIndices"), + crease_lengths: ints("creaseLengths"), + crease_sharpnesses: floats("creaseSharpnesses"), + corner_indices: ints("cornerIndices"), + corner_sharpnesses: floats("cornerSharpnesses"), } } } @@ -1815,8 +1800,8 @@ impl SharpnessArrays { /// then renders on the material's constant inputs, as every subdivided mesh did /// before charts were refined. fn refinable_chart<'a>( - prim: &Prim, - mesh: &UsdMesh, + prim: &PrimData, + mesh: &PrimData, uvs: Option<&'a UvSource>, n_points: usize, n_face_vertices: usize, @@ -1933,12 +1918,13 @@ impl MeshSource { /// which the Moana island authors on every displaced mesh, in object space, /// the same frame. A constant's bound stays exact. pub(super) fn prim_displacement( - prim: &Prim, + prim: &PrimData, displacement: Option>, ) -> Option> { let d = displacement?; - let authored = custom_f32(prim, "crust:displacementBound") - .or_else(|| custom_f32(prim, "primvars:displacementbound:sphere")); + let authored = prim + .custom_f32("crust:displacementBound") + .or_else(|| prim.custom_f32("primvars:displacementbound:sphere")); match authored { Some(bound) => Some(Arc::new((*d).clone().with_authored_bound(Some(bound)))), None => Some(d), @@ -2004,13 +1990,11 @@ fn owner_charts(src: &MeshSource, n_points: usize, d: &Displacement) -> Vec opensubdiv_rs::sdc::FVarLinearInterpolation { +fn face_varying_linear(mesh: &PrimData) -> opensubdiv_rs::sdc::FVarLinearInterpolation { use opensubdiv_rs::sdc::FVarLinearInterpolation as Osd; match mesh - .face_varying_linear_interpolation_attr() - .get_at::(eval_time()) - .ok() - .flatten() + .resolved("faceVaryingLinearInterpolation") + .and_then(|v| FaceVaryingLinearInterpolation::try_from(v).ok()) .unwrap_or_default() { FaceVaryingLinearInterpolation::None => Osd::None, @@ -2128,7 +2112,7 @@ pub(super) fn placement_scale(l2w: &Affine3A) -> f32 { /// `n_base_faces` is the *authored cage's* face count /// ([`MeshSource::base_face_count`]) — never the refined count: subdivision /// changes the mesh's face count but Ptex ids keep indexing the cage. -fn check_face_count(prim: &Prim, n_base_faces: usize, material: &dyn Material) { +fn check_face_count(prim: &PrimData, n_base_faces: usize, material: &dyn Material) { let Some(tex) = material.face_texture() else { return; }; @@ -2182,7 +2166,7 @@ impl PrimvarData { /// it does not author, and, with one warning per var and prim, for one whose /// type the var cannot read. pub(super) fn mesh_primvars( - prim: &Prim, + prim: &PrimData, keep: &PrimvarKeep, n_points: usize, n_faces: usize, @@ -2214,7 +2198,7 @@ enum Read { } fn read_mesh_primvar( - prim: &Prim, + prim: &PrimData, kept: &KeptPrimvar, n_points: usize, n_faces: usize, @@ -2234,7 +2218,7 @@ fn read_mesh_primvar( } } -fn refuse_kept(prim: &Prim, kept: &KeptPrimvar, type_name: &str, why: &str) -> Read { +fn refuse_kept(prim: &PrimData, kept: &KeptPrimvar, type_name: &str, why: &str) -> Read { warning!( PrimvarMismatch, at = prim.path(), @@ -2249,13 +2233,8 @@ fn refuse_kept(prim: &Prim, kept: &KeptPrimvar, type_name: &str, why: &str) -> R } /// `primvars:`'s type name on `prim`, for a warning. -fn type_of(prim: &Prim, name: &str) -> String { - prim.attribute(format!("primvars:{name}")) - .type_name() - .ok() - .flatten() - .map(|t| t.as_str().to_string()) - .unwrap_or_default() +fn type_of(prim: &PrimData, name: &str) -> String { + prim.type_name(&format!("primvars:{name}")) } /// The primvar `name` a material reads, as `prim` authors it, its colours @@ -2263,14 +2242,14 @@ fn type_of(prim: &Prim, name: &str) -> String { /// author, and, with a warning, for one that cannot be read. `counts` are the /// mesh's points, faces and face-vertices. fn shading_primvar( - prim: &Prim, + prim: &PrimData, name: &str, working: Option, counts: (usize, usize, usize), ) -> Option { let (type_name, why) = match decode_mesh_primvar(prim, name, working, counts) { // Authored empty: as on curves, a material reading it is told. - Ok(None) if prim_value(prim, &format!("primvars:{name}")).is_some() => { + Ok(None) if prim.value(&format!("primvars:{name}")).is_some() => { (type_of(prim, name), "authored empty".to_string()) } Ok(p) => return p, @@ -2292,7 +2271,7 @@ fn shading_primvar( /// interpolation is refused with a warning. pub(super) fn with_constant_primvars( mut src: MeshSource, - prim: &Prim, + prim: &PrimData, material: &dyn Material, working: crate::color::Space, ) -> MeshSource { @@ -2309,7 +2288,7 @@ pub(super) fn with_constant_primvars( /// The table of an analytic sphere `prim`, whose material reads `material`'s /// constant primvars: `None` when it reads none the prim authors. pub(super) fn constant_table( - prim: &Prim, + prim: &PrimData, material: &dyn Material, working: crate::color::Space, ) -> Option { @@ -2322,7 +2301,11 @@ pub(super) fn constant_table( } /// One primvar of [`with_constant_primvars`] and [`constant_table`]. -fn constant_primvar(prim: &Prim, name: &str, working: crate::color::Space) -> Option { +fn constant_primvar( + prim: &PrimData, + name: &str, + working: crate::color::Space, +) -> Option { let p = shading_primvar(prim, name, Some(working), (0, 0, 0))?; if p.interp == PrimvarInterp::Constant { return Some(p); @@ -2344,22 +2327,19 @@ fn constant_primvar(prim: &Prim, name: &str, working: crate::color::Space) -> Op /// authored empty, which the AOVs read as unauthored and a material is warned /// of), `Err` with its type and the reason for one that cannot be read. fn decode_mesh_primvar( - prim: &Prim, + prim: &PrimData, name: &str, working: Option, (n_points, n_faces, n_face_vertices): (usize, usize, usize), ) -> Result, (String, String)> { let attr_name = format!("primvars:{name}"); - let Some(value) = prim_value(prim, &attr_name) else { + let Some(value) = prim.value(&attr_name) else { return Ok(None); }; - let attr = prim.attribute(&attr_name); let type_name = type_of(prim, name); let refuse = |why: String| Err((type_name.clone(), why)); - if let Some(n) = attr - .metadata::("elementSize") - .ok() - .flatten() + if let Some(n) = prim + .metadata(&attr_name, "elementSize") .and_then(|v| match v { sdf::Value::Int(n) => Some(n), _ => None, @@ -2379,17 +2359,15 @@ fn decode_mesh_primvar( // One attribute, one colour space: resolved once, not per value. if let Some(working) = working && type_name.starts_with("color3") - && let Some(space) = attr_color_space(&attr) + && let Some(space) = color_space(prim, &attr_name) { for v in &mut values { let rgb = crate::color::convert(Vec3A::new(v.v[0], v.v[1], v.v[2]), space, working); *v = rgb.into(); } } - let interp = match attr - .metadata::("interpolation") - .ok() - .flatten() + let interp = match prim + .metadata(&attr_name, "interpolation") .and_then(decode_text) .as_deref() { @@ -2407,7 +2385,7 @@ fn decode_mesh_primvar( }; // Authored indices that are not an `int[]` are refused, never read as // absent: the values would then be read unindexed. - let indices = match prim_value(prim, &format!("{attr_name}:indices")) { + let indices = match prim.value(&format!("{attr_name}:indices")) { None => None, Some(v) => match decode_i32_array(v) { Some(indices) => Some(indices), @@ -2441,7 +2419,7 @@ fn decode_mesh_primvar( /// any primvar. `None`, with a warning, for ones that cannot be read — not a /// normal type, or authored empty, which never gives way to `normals` — and /// the mesh then renders faceted, as one authoring none does. -fn authored_normals(prim: &Prim, counts: (usize, usize, usize)) -> Option { +fn authored_normals(prim: &PrimData, counts: (usize, usize, usize)) -> Option { let primvar_type = type_of(prim, "normals"); let (attr, type_name, why) = match decode_mesh_primvar(prim, "normals", None, counts) { // The decoder reads any numeric triple; normals are the normal types. @@ -2452,7 +2430,7 @@ fn authored_normals(prim: &Prim, counts: (usize, usize, usize)) -> Option return Some(n), Err((type_name, why)) => ("primvars:normals", type_name, why), - Ok(None) if prim_value(prim, "primvars:normals").is_some() => ( + Ok(None) if prim.value("primvars:normals").is_some() => ( "primvars:normals", primvar_type, "authored empty".to_string(), @@ -2480,19 +2458,13 @@ fn is_normal_array(type_name: &str) -> bool { /// reads a primvar: never indexed, and `vertex` when its `interpolation` is /// unauthored, as the schema specifies. fn point_normals( - prim: &Prim, + prim: &PrimData, (n_points, n_faces, n_face_vertices): (usize, usize, usize), ) -> Result, (String, String)> { - let Some(value) = prim_value(prim, "normals") else { + let Some(value) = prim.value("normals") else { return Ok(None); }; - let attr = prim.attribute("normals"); - let type_name = attr - .type_name() - .ok() - .flatten() - .map(|t| t.as_str().to_string()) - .unwrap_or_default(); + let type_name = prim.type_name("normals"); let refuse = |why: String| Err((type_name.clone(), why)); // The schema declares `normal3f[]`, which wins over an authored type // (`Attribute::type_name`), so only the value's shape is checked. @@ -2502,10 +2474,8 @@ fn point_normals( if values.is_empty() { return refuse("authored empty".into()); } - let interp = match attr - .metadata::("interpolation") - .ok() - .flatten() + let interp = match prim + .metadata("normals", "interpolation") .and_then(decode_text) .as_deref() { @@ -3370,8 +3340,8 @@ mod subdiv_policy_tests { let scope = crate::WarningScope::enter(); for name in ["/W/A", "/W/B"] { let p = sdf::path(name).unwrap(); - let prim = super::super::prim_at(&stage, p.clone()); - let mesh = UsdMesh::get(&stage, p).unwrap().expect("a mesh"); + let prim = super::super::index::data::PrimData::test_at(&stage, &p); + let mesh = prim.clone(); let src = mesh_source( &prim, &mesh, @@ -3407,8 +3377,8 @@ mod subdiv_policy_tests { .open(path.to_str().unwrap()) .expect("stage opens"); let p = sdf::path("/World/CubeTextured").unwrap(); - let prim = super::super::prim_at(&stage, p.clone()); - let mesh = UsdMesh::get(&stage, p).unwrap().expect("a mesh"); + let prim = super::super::index::data::PrimData::test_at(&stage, &p); + let mesh = prim.clone(); let d = Displacement::new(DisplacementValue::Uv(UvInput { tex: None, output: TexOutput::R, @@ -3492,7 +3462,7 @@ mod displacement_tests { use crate::material::{DisplacementValue, OpenPBR}; use crate::scene::usd_import::stage_builder; use crate::{PtexRef, PtexTexture, Texture2D, TextureRef}; - use openusd::usd::Stage; + use moho::openusd::usd::Stage; /// A texture that jumps between neighbouring UV islands: every value /// differs on either side of a seam. @@ -3548,8 +3518,8 @@ mod displacement_tests { .open(path.to_str().unwrap()) .expect("stage opens"); let p = sdf::path(name).unwrap(); - let prim = super::super::prim_at(&stage, p.clone()); - let mesh = UsdMesh::get(&stage, p).unwrap().expect("a mesh"); + let prim = super::super::index::data::PrimData::test_at(&stage, &p); + let mesh = prim.clone(); let mut arena = MeshArena::new(policy); // Close enough that the near faces dice finer than the far ones. let eye = GMat4::IDENTITY; @@ -3739,20 +3709,20 @@ def Mesh "G" ]; for (name, attrs, want) in cases { let (stage, p) = ground_stage(&format!("bound_{name}"), attrs); - let prim = super::super::prim_at(&stage, p); + let prim = super::super::index::data::PrimData::test_at(&stage, &p); let d = prim_displacement(&prim, Some(material.clone())).unwrap(); assert_eq!(d.bound, want, "{name}"); } let unbounded = Arc::new(uv_displacement()); let (stage, p) = ground_stage("bound_unset", ""); - let prim = super::super::prim_at(&stage, p); + let prim = super::super::index::data::PrimData::test_at(&stage, &p); assert_eq!( prim_displacement(&prim, Some(unbounded)).unwrap().bound, None ); let constant = Arc::new(Displacement::new(DisplacementValue::Constant(-0.2))); let (stage, p) = ground_stage("bound_const", "float crust:displacementBound = 9"); - let prim = super::super::prim_at(&stage, p); + let prim = super::super::index::data::PrimData::test_at(&stage, &p); assert_eq!( prim_displacement(&prim, Some(constant)).unwrap().bound, Some(0.2) @@ -3764,8 +3734,8 @@ def Mesh "G" #[test] fn a_bound_too_small_warns_without_clamping() { let (stage, p) = ground_stage("too_small", "float crust:displacementBound = 0.01"); - let prim = super::super::prim_at(&stage, p.clone()); - let mesh = UsdMesh::get(&stage, p).unwrap().unwrap(); + let prim = super::super::index::data::PrimData::test_at(&stage, &p); + let mesh = prim.clone(); // 0.4 · x − 0.2 on `Jumpy`: up to 0.2 away, far past 0.01. let d = prim_displacement(&prim, Some(Arc::new(uv_displacement()))).unwrap(); let mut arena = MeshArena::new(SubdivPolicy::new(2)); @@ -3818,8 +3788,8 @@ def Mesh "T" .unwrap(); let stage = stage_builder().open(path.to_str().unwrap()).unwrap(); let p = sdf::path("/T").unwrap(); - let prim = super::super::prim_at(&stage, p.clone()); - let mesh = UsdMesh::get(&stage, p).unwrap().unwrap(); + let prim = super::super::index::data::PrimData::test_at(&stage, &p); + let mesh = prim.clone(); let d = ptex_displacement(); let mut arena = MeshArena::new(SubdivPolicy::new(2)); let scope = crate::WarningScope::enter(); @@ -3912,8 +3882,8 @@ mod uv_chart_tests { ("/W/Short", [0, 0, 0, 0, 0, 0, 0, 0]), ] { let p = sdf::path(name).unwrap(); - let prim = super::super::prim_at(&stage, p.clone()); - let usd = UsdMesh::get(&stage, p).unwrap().expect("a mesh"); + let prim = super::super::index::data::PrimData::test_at(&stage, &p); + let usd = prim.clone(); let (_, counts, indices) = mesh_arrays(&usd).unwrap(); let uv = mesh_uvs(&prim, None, &counts, indices.len()).expect("a chart"); assert!(uv.face_varying, "{name}"); @@ -3949,8 +3919,8 @@ def Mesh "M" .open(path.to_str().unwrap()) .expect("stage opens"); let p = sdf::path("/M").unwrap(); - let prim = super::super::prim_at(&stage, p.clone()); - let mesh = UsdMesh::get(&stage, p).unwrap().expect("a mesh"); + let prim = super::super::index::data::PrimData::test_at(&stage, &p); + let mesh = prim.clone(); let mut policy = SubdivPolicy::new(0); let src = mesh_source( &prim, @@ -4011,7 +3981,7 @@ def Mesh "G" (stage, sdf::path("/G").unwrap()) } - use openusd::usd::Stage; + use moho::openusd::usd::Stage; /// The mesh read under `policy` with a face table, and its triangles' /// cage faces. @@ -4022,8 +3992,8 @@ def Mesh "G" mut policy: SubdivPolicy, ) -> (MeshSource, Vec) { let (stage, p) = grid(name, scheme, holes); - let prim = super::super::prim_at(&stage, p.clone()); - let mesh = UsdMesh::get(&stage, p).unwrap().expect("a mesh"); + let prim = super::super::index::data::PrimData::test_at(&stage, &p); + let mesh = prim.clone(); let src = mesh_source( &prim, &mesh, diff --git a/crates/crust-core/src/scene/usd_import/mod.rs b/crates/crust-core/src/scene/usd_import/mod.rs index 41b4d3a46..9f7a53b9b 100644 --- a/crates/crust-core/src/scene/usd_import/mod.rs +++ b/crates/crust-core/src/scene/usd_import/mod.rs @@ -4,37 +4,45 @@ //! # Layout //! //! This module owns the import as a whole — [`load_scene`], the streaming -//! chunk loop, the prim traversal ([`traverse_into`]) and the state threaded -//! through it ([`ImportCtx`], [`ImportCaches`]). Each schema family is a -//! submodule that the traversal dispatches into: +//! chunk loop and the state threaded through it ([`ImportCtx`], +//! [`ImportCaches`]). Every stage is read through Moho's scene index +//! ([`index`]: the inputs, the walk, the prim data, the material networks, +//! the instancers, and [`index::stage_facts`], the one place that reads the +//! stage for what is not imaging data). The walk dispatches each prim, by its +//! Hydra type, to its family's index reader: //! -//! | module | reads | +//! | module | index reader of | //! |----------------|--------------------------------------------------------------| -//! | [`time`] | the time code every attribute read resolves at (`-f`) | -//! | [`settings`] | `UsdRenderSettings`, `crust:*` render attributes, camera choice | -//! | [`attrs`] | typed attribute readers, `crust:rayMask` / motion / subdivision | -//! | [`xform`] | `xformOp:*` stacks → world matrices | -//! | [`camera`] | `UsdGeomCamera` | -//! | [`mesh`] | `UsdGeomMesh`: interning, deferred bake-vs-instance, side tables | +//! | [`settings`] | `renderSettings` and its generic data: `crust:*` render attributes, camera choice | +//! | [`products`] | `renderProduct` / `renderVar`: outputs, resolution, AOVs | +//! | [`precomp`] | `crust:precomp` sample-filter graphs | +//! | [`passes`] | the active `renderPass` and its collections (`matte`, `cameraVisibility`) | +//! | [`attrs`] | the decoders every reader shares; subdivision and adaptive levels | +//! | [`xform`] | the local `xform` → world matrices, motion over the shutter | +//! | [`camera`] | `camera` | +//! | [`mesh`] | `mesh`: interning, deferred bake-vs-instance, side tables | //! | [`adaptive`] | the camera's projection; adaptive subdivision: a mesh's level from its size on screen | -//! | [`shapes`] | `UsdGeomSphere`, `UsdGeomBasisCurves` | -//! | [`implicit`] | `Cube`, `Plane`, `Cylinder`, `Cone`, `Capsule` (+ `_1`) → GeomUtil meshes | -//! | [`instancing`] | `PointInstancer` and native `instanceable` prototypes | -//! | [`lights`] | every UsdLux light type, shaping and IES | -//! | [`light_links`] | `collection:lightLink`: lights that illuminate nothing | -//! | [`passes`] | the active `RenderPass`: `matte` holdouts, `cameraVisibility` | -//! | [`materials`] | binding resolution, the material cache, shader dispatch | +//! | [`shapes`] | `sphere`, `basisCurves`, `nurbsCurves` | +//! | [`strands`] | curve primvars kept for shading | +//! | [`implicit`] | `cube`, `plane`, `cylinder`, `cone`, `capsule` (+ `_1`) → GeomUtil meshes | +//! | [`instancing`] | `instancer`: Moho's propagated prototypes and point-instancer copies | +//! | [`lights`] | every light type, shaping and IES | +//! | [`light_links`] | the lights' `lightLink` / `shadowLink` collections, judged after the last chunk | +//! | [`materials`] | `materialBindings`, the material cache, shader dispatch | //! | [`preview`] | `UsdPreviewSurface` + `UsdUVTexture` networks | //! | [`mtlx_network`] | inline MaterialX (`ND_*`) networks → crust-mtlx documents | +//! | [`assets`] | textures, Ptex and IES files, through the host's loader | //! | [`volume`] | `crust:volume:*` regions | -//! | [`listing`] | what a stage holds, without importing it (`crust ls`) | +//! | [`live`] | in-place rebuilds, through the same readers on a masked stage | +//! | [`listing`] | what a stage holds, without importing it (`crust ls`): the one walk of the stage itself | //! //! Submodules expose what their siblings need as `pub(super)` and import //! each other explicitly, so a file's `use super::…` block is its real -//! dependency list. The traversal is single-threaded; see [`time`] for why -//! that matters. +//! dependency list. A reader takes the index's time; a stage read (`crust +//! ls`, the stage facts) takes its time code explicitly. use crate::warning; +use moho::{openusd, openusd_schemas}; use std::collections::HashMap; use std::path::Path; use std::sync::Arc; @@ -60,20 +68,13 @@ use openusd::sdf; use openusd::usd::{ InitialLoadSet, Prim, SchemaRegistry, Stage, StageBuilder, StagePopulationMask, }; -use openusd_schemas::geom::{ - BasisCurves as UsdBasisCurves, Camera as UsdCamera, Mesh as UsdMesh, - NurbsCurves as UsdNurbsCurves, PointInstancer, Sphere as UsdSphere, -}; -use openusd_schemas::lux::{ - CylinderLight, DiskLight, DistantLight as UsdDistantLight, DomeLight, DomeLight_1, RectLight, - SphereLight, -}; mod adaptive; mod assets; mod attrs; mod camera; pub(crate) mod implicit; +mod index; mod instancing; mod light_links; mod lights; @@ -89,15 +90,11 @@ mod products; mod settings; mod shapes; mod strands; -mod time; mod volume; mod xform; use adaptive::{Frustum, ScreenProjection, ScreenRate}; -use attrs::{ - custom_token, prim_value, resolve_adaptive_max_level, resolve_subdiv_edge_length, - resolve_subdiv_level, -}; +use attrs::{resolve_adaptive_max_level, resolve_subdiv_edge_length, resolve_subdiv_level}; use camera::{ RenderCamera, Shutter, ShutterOffsets, build_camera, screen_projection, shutter_offsets, }; @@ -126,9 +123,8 @@ use settings::{ }; use shapes::{curve_segments, emit_curves, emit_sphere, nurbs_curve_segments}; use strands::StrandRequest; -use time::EvalTimeScope; use volume::emit_volume; -use xform::{Timing, TransformMotion, compose_with_parent}; +use xform::{Timing, TransformMotion, compose_index}; /// `Stage::prim` for a path that is already an `sdf::Path`. /// @@ -171,9 +167,9 @@ const MIN_STREAM_CHUNKS: usize = 4; /// layer — which is what [`MIN_STREAM_CHUNKS`] guards against on scenes /// too small for the excluded payloads to pay for them. /// -/// Getting this right depends on the caches distinguishing paths that -/// are stable across stages from paths that are not; see -/// [`MaterialCache::key`] and [`ImportCaches::epoch`]. +/// Getting this right depends on the caches keying on paths that are stable +/// across stages: Moho's propagated prototype paths, and the materials read +/// there ([`MaterialCache::key`]). fn stream_roots(stage: &Stage) -> Vec { // Escape hatch, and the way to A/B the two import paths against each // other on one scene: `CRUST_STREAM_IMPORT=0` forces a single stage. @@ -181,57 +177,53 @@ fn stream_roots(stage: &Stage) -> Vec { debug!("Streaming import disabled by CRUST_STREAM_IMPORT=0"); return Vec::new(); } - let chunks = subtree_roots(stage); + let chunks = index::stage_facts::subtree_roots(stage); if chunks.len() < MIN_STREAM_CHUNKS { return Vec::new(); } chunks } -/// The stage's top-level subtrees: the children of its one root prim, or its -/// root prims when it has several. The unit [`stream_roots`] streams, and the -/// scope adaptive subdivision counts native placements in — in every import -/// mode, so that streaming cannot change which prototypes are shared. -fn subtree_roots(stage: &Stage) -> Vec { - let pseudo_root = prim_at(stage, sdf::Path::abs_root()); - let Ok(top) = pseudo_root.children() else { - return Vec::new(); - }; - match top.as_slice() { - [only] => match only.children() { - Ok(children) => children.iter().map(|c| c.path().clone()).collect(), - Err(_) => Vec::new(), - }, - many => many.iter().map(|p| p.path().clone()).collect(), - } -} - /// Counts the native placements of every prototype on `stage`, per top-level /// subtree, into `caches.placements`: the same walk and pruning -/// ([`prune_reason`]) as [`traverse_into`], not +/// ([`index::walk::prune`]) as the walk ([`index::walk`]), not /// descending into an instance or a `PointInstancer`, whose contents the /// traversal does not reach directly either. -fn count_placements(stage: &Stage, caches: &mut ImportCaches<'_>) { - let mut stack = vec![(prim_at(stage, sdf::Path::abs_root()), GMat4::IDENTITY)]; - while let Some((prim, parent_world)) = stack.pop() { - if prune_reason(&prim, WalkScope::Stage).is_some() { +fn count_placements(stage: &Stage, input: &index::Input, caches: &mut ImportCaches<'_>) { + use moho::tokens::usd_prim_info as info; + let chain: &dyn moho::scene_index::SceneIndex = input.chain.as_ref(); + let stage_index: moho::scene_index::SceneIndexHandle = input.stage.clone(); + let mut stack = vec![(sdf::Path::abs_root(), GMat4::IDENTITY)]; + while let Some((path, parent_world)) = stack.pop() { + if index::walk::prune(chain, &path).is_some() { continue; } - let world = compose_with_parent(&prim, parent_world); - if prim.is_instance().unwrap_or(false) - && let Ok(Some(proto)) = prim.prototype() + let xform = index::data::PrimData::at(stage_index.as_ref(), &path); + let world = compose_index(stage, &xform, parent_world, caches.time); + let prim = index::data::PrimData::at(chain, &path); + let proto = match prim + .locate([info::USD_PRIM_INFO, info::NI_PROTOTYPE_PATH]) + .and_then(|d| d.value()) { + Some(sdf::Value::PathVec(mut v)) => v.pop(), + _ => None, + }; + if let Some(proto) = proto { + // Counted per propagated prototype, the key its parts are cached + // under: instances of one USD prototype bound differently are + // different prototypes (design D3b). + let proto = index::instancers::native_prototype(chain, &path).unwrap_or(proto); // A zero-scale placement draws nothing (`attach_proto_parts` // skips it), so it does not make its prototype shared. if world.determinant().abs() >= 1e-12 { - let key = (caches.subtree_of(prim.path()), proto.to_string()); + let key = (caches.subtree_of(&path), proto.to_string()); *caches.placements.entry(key).or_default() += 1; } continue; } - if let Ok(Some(instancer)) = PointInstancer::get(stage, prim.path().clone()) { - let subtree = caches.subtree_of(prim.path()); - for (target, n) in instancing::instancer_target_counts(&prim, &instancer, &world) { + if prim.is_a("PointInstancer") { + let subtree = caches.subtree_of(&path); + for (target, n) in instancing::instancer_target_counts(&prim, &world) { *caches .placements .entry((subtree.clone(), target)) @@ -239,15 +231,17 @@ fn count_placements(stage: &Stage, caches: &mut ImportCaches<'_>) { } continue; } - if let Ok(children) = prim.children() { - stack.extend(children.into_iter().map(|c| (c, world))); - } + stack.extend( + index::walk::children(chain, &path) + .into_iter() + .map(|c| (c, world)), + ); } } /// Everything a traversal accumulates, kept separate from the stage that /// feeds it so several stages can be walked into the same scene and each -/// dropped when done — see [`traverse_into`]. +/// dropped when done — see [`index::walk`]. struct ImportCtx<'a> { world: WorldBuilder, lights: LightList, @@ -296,224 +290,238 @@ struct ImportCtx<'a> { /// as the links are resolved, before the top-level BVH commit that is /// the import's memory peak. index: Option, + /// The scene input over `index` ([`index::input_chain`]): the streamed + /// import's merging index holds it while the chunks are walked. Dropped + /// with `index`. + scene_input: Option, + /// The scene input's chain, kept while the scene input itself is lent to + /// the streamed import's merging index: where light collections are + /// resolved ([`LightLinks::light_added`]). Dropped with `index`. + whole: Option, assets: &'a dyn AssetLoader, /// The identifiers of the layers the import's stages composed, each /// stage's added before it is released ([`Scene::layers`]). layers: std::collections::BTreeSet, } -/// Walks `root` and its subtree, emitting geometry, lights and volumes -/// into `ctx`. Takes the stage by reference and keeps nothing borrowed -/// from it, so the caller may drop the stage afterwards and walk another. -fn traverse_into(stage: &Stage, root: Prim, root_xf: GMat4, ctx: &mut ImportCtx) { - if let Some(pass) = &mut ctx.pass { - pass.begin_chunk(stage); +/// One prim of the walk over the scene index ([`index::walk`]), under `pruned`, the walk's verdict on +/// it: emits what it holds into `ctx`, and returns what its children inherit +/// (the world matrix, whether they are under an invisible ancestor, the +/// timing over the shutter), or `None` when the walk does not descend. +#[allow(clippy::too_many_arguments)] +fn visit_prim( + stage: &Stage, + index: &dyn moho::scene_index::SceneIndex, + path: &sdf::Path, + pruned: Option, + parent_world: GMat4, + parent_hidden: bool, + parent_timing: &Timing, + ctx: &mut ImportCtx, +) -> Option<(GMat4, bool, Timing)> { + if let Some(reason) = pruned.filter(|&r| r != Prune::Invisible) { + debug!("Skipping {reason} prim {}", path); + return None; } - // The flag is "under an invisible ancestor", which hides everything but - // cameras — see below. The timing is the parent's over the shutter - // ([`TransformMotion`]). - let mut stack: Vec<(Prim, GMat4, bool, Timing)> = vec![(root, root_xf, false, Timing::Static)]; - - while let Some((prim, parent_world, parent_hidden, parent_timing)) = stack.pop() { - let pruned = prune_reason(&prim, WalkScope::Stage); - if let Some(reason) = pruned.filter(|&r| r != Prune::Invisible) { - debug!("Skipping {reason} prim {}", prim.path()); - continue; - } - let this_world = compose_with_parent(&prim, parent_world); - if let Some(sources) = &mut ctx.arc_sources { - record_arc_sources(stage, &prim, sources); + let xform = ctx.caches.stage_prim(path); + // A native instance, by its prototype in `__usdPrimInfo`. + let prototype = { + use moho::tokens::usd_prim_info as info; + match ctx + .caches + .prim_data(path) + .locate([info::USD_PRIM_INFO, info::NI_PROTOTYPE_PATH]) + .and_then(|d| d.value()) + { + Some(sdf::Value::PathVec(mut v)) => v.pop(), + _ => None, } + }; + let this_world = compose_index(stage, &xform, parent_world, ctx.caches.time); + if let Some(sources) = &mut ctx.arc_sources { + record_arc_sources(stage, &ctx.caches.prim_data(path), sources); + } - // An invisible subtree draws nothing and lights nothing, but is still - // walked for cameras: a camera's own visibility only hides its gizmo - // in a viewport, and a rig hidden that way is still rendered through. - // Pruning it outright would make `--camera` fail on it and move the - // first-camera fallback. Instances are not entered — crust never - // takes a camera from a prototype. - let hidden = parent_hidden || pruned == Some(Prune::Invisible); - if hidden { - if !parent_hidden { - debug!("Skipping invisible prim {} and its subtree", prim.path()); - } - if prim.is_instance().unwrap_or(false) { - continue; - } - visit_camera(stage, &prim, ctx); - if let Ok(children) = prim.children() { - for child in children { - stack.push((child, this_world, true, Timing::Static)); - } - } - continue; + // An invisible subtree draws nothing and lights nothing, but is still + // walked for cameras: a camera's own visibility only hides its gizmo + // in a viewport, and a rig hidden that way is still rendered through. + // Pruning it outright would make `--camera` fail on it and move the + // first-camera fallback. Instances are not entered — crust never + // takes a camera from a prototype. + let hidden = parent_hidden || pruned == Some(Prune::Invisible); + if hidden { + if !parent_hidden { + debug!("Skipping invisible prim {} and its subtree", path); + } + if prototype.is_some() { + return None; } + visit_camera(index, stage, path, ctx); + return Some((this_world, true, Timing::Static)); + } - let timing = ctx - .caches + let timing = + ctx.caches .motion - .timing(&prim, &parent_timing, parent_world, this_world); - let span = ctx.caches.motion.span(this_world, &timing); - - // What this prim emits, for the light links: ids are handed out in - // traversal order, so the range recorded after dispatch is exactly - // this prim's (see `light_links`). - let geoms_before = ctx.world.count(); - let vols_before = ctx.volumes.len(); - let lights_before = ctx.lights.count(); - - // Native instancing: an `instanceable` prim with a composition arc - // shares one prototype with every other instance of it. Take the - // geometry from the prototype and place it — never descend into - // the instance's own (proxy) subtree, which would rebuild the same - // triangles once per instance. - if prim.is_instance().unwrap_or(false) { - match prim.prototype() { - Ok(Some(proto_path)) => { - ctx.caches.motion.drawn(&prim, &timing); - emit_native_instance( - stage, - &mut ctx.world, - &prim, - &proto_path, - span, - &mut ctx.caches, - ); - saw(ctx, prim.path(), geoms_before..ctx.world.count(), 0..0); - continue; - } - _ => warning!( - InstancingInstanceableWithoutPrototype, - at = prim.path(), - "Prim {} is instanceable but has no prototype — importing directly", - prim.path() - ), - } - } + .timing_index(stage, &xform, parent_timing, parent_world, this_world); + let span = ctx.caches.motion.span(this_world, &timing); + + // What this prim emits, for the light links: ids are handed out in + // traversal order, so the range recorded after dispatch is exactly + // this prim's (see `light_links`). + let geoms_before = ctx.world.count(); + let vols_before = ctx.volumes.len(); + let lights_before = ctx.lights.count(); + + // Native instancing: an `instanceable` prim with a composition arc + // shares one prototype with every other instance of it. Take the + // geometry from the prototype and place it — never descend into + // the instance's own (proxy) subtree, which would rebuild the same + // triangles once per instance. + if let Some(proto_path) = prototype { + ctx.caches.motion.drawn(path, &timing); + emit_native_instance( + stage, + &mut ctx.world, + path, + &proto_path, + span, + &mut ctx.caches, + ); + saw(ctx, path, geoms_before..ctx.world.count(), 0..0); + return None; + } else if index::stage_facts::instance_without_prototype(stage, path) { + warning!( + InstancingInstanceableWithoutPrototype, + at = path, + "Prim {} is instanceable but has no prototype — importing directly", + path + ); + } - // Dispatch by schema. Volume prims are checked first: a prim - // carrying `crust:volume:type` imports as a participating-media - // region only — never as geometry, so its bounds cannot occlude - // shadow rays, and a volume `Cube` is never a box. The geometry - // branches then go in the prototype walk's order - // (`collect_proto_parts`), and a geometry prim no branch reads is - // counted for `geom.unsupported_type`. - if let Ok(Some(instancer)) = PointInstancer::get(stage, prim.path().clone()) { - ctx.caches.motion.drawn(&prim, &timing); - emit_point_instancer( - stage, - &mut ctx.world, - &prim, - &instancer, - span, - &mut ctx.caches, - ); - saw(ctx, prim.path(), geoms_before..ctx.world.count(), 0..0); - // Prototypes are conventionally authored beneath the - // instancer; they are drawn through it, never on their own. - continue; - } else if custom_token(&prim, "crust:volume:type").is_some() { - ctx.caches.motion.unmoved(&prim, &timing); - emit_volume(&prim, this_world, &mut ctx.volumes, ctx.caches.working); - } else if let Ok(Some(mesh)) = UsdMesh::get(stage, prim.path().clone()) { - ctx.caches.motion.drawn(&prim, &timing); - let mat = resolve_bound(stage, &prim, &mut ctx.caches); - let baked_moving = emit_mesh( - &mut ctx.world, - &prim, - &mesh, - span, - mat, - &mut ctx.caches.meshes, - &mut ctx.pending_meshes, - ); - if baked_moving { - ctx.caches.motion.ignored.saw(&prim); - } - } else if let Ok(Some(sphere)) = UsdSphere::get(stage, prim.path().clone()) { - ctx.caches.motion.drawn(&prim, &timing); - let mat = resolve_material(stage, &prim, &mut ctx.caches); - if let Some(id) = emit_sphere( - &mut ctx.world, - &prim, - &sphere, - span, - mat, - ctx.caches.working, - ) { - ctx.spheres.push(id); - } - } else if let Ok(Some(curves)) = UsdBasisCurves::get(stage, prim.path().clone()) { - ctx.caches.motion.unmoved(&prim, &timing); - let mat = resolve_material(stage, &prim, &mut ctx.caches); - let request = StrandRequest::of(&*mat, ctx.caches.working, &ctx.caches.meshes.primvars); - let imported = curve_segments(&prim, &curves, request.as_ref()); - emit_curves(&mut ctx.world, &prim, imported, this_world, mat); - } else if let Ok(Some(curves)) = UsdNurbsCurves::get(stage, prim.path().clone()) { - ctx.caches.motion.unmoved(&prim, &timing); - let mat = resolve_material(stage, &prim, &mut ctx.caches); - let request = StrandRequest::of(&*mat, ctx.caches.working, &ctx.caches.meshes.primvars); - let imported = nurbs_curve_segments(&prim, &curves, request.as_ref()); - emit_curves(&mut ctx.world, &prim, imported, this_world, mat); - } else if let Some(shape) = Shape::read(&prim) { - ctx.caches.motion.drawn(&prim, &timing); - let bound = undisplaced(&prim, resolve_bound(stage, &prim, &mut ctx.caches)); - let src = ctx - .caches - .implicit - .source(prim.path(), &shape, MeshPlace::World(&span.open)); - let src = with_constant_primvars(src, &prim, &*bound.material, ctx.caches.working); - let baked_moving = place_mesh_source( - &mut ctx.world, - &prim, - src, - span, - bound, - &mut ctx.caches.meshes, - &mut ctx.pending_meshes, - ); - if baked_moving { - ctx.caches.motion.ignored.saw(&prim); - } - } else if visit_camera(stage, &prim, ctx) { - // Recorded (and built, if it is the one) inside the call. A - // moving camera is out of scope: it renders from the frame. - } else if emit_light(stage, ctx, &prim, this_world) { - ctx.caches.motion.unmoved(&prim, &timing); - } else { - ctx.caches.unread.saw(&prim); + // Dispatch by schema. Volume prims are checked first: a prim + // carrying `crust:volume:type` imports as a participating-media + // region only — never as geometry, so its bounds cannot occlude + // shadow rays, and a volume `Cube` is never a box. The geometry + // branches then go in the prototype walk's order + // (`collect_proto_parts`), and a geometry prim no branch reads is + // counted for `geom.unsupported_type`. + if ctx.caches.prim_data(path).is_a("PointInstancer") { + ctx.caches.motion.drawn(path, &timing); + emit_point_instancer(stage, &mut ctx.world, path, span, &mut ctx.caches); + saw(ctx, path, geoms_before..ctx.world.count(), 0..0); + // Prototypes are conventionally authored beneath the + // instancer; they are drawn through it, never on their own. + return None; + } else if ctx + .caches + .prim_data(path) + .custom_token("crust:volume:type") + .is_some() + { + ctx.caches.motion.unmoved(path, &timing); + let data = ctx.caches.prim_data(path); + emit_volume(&data, this_world, &mut ctx.volumes, ctx.caches.working); + } else if ctx.caches.prim_data(path).is_a("Mesh") { + ctx.caches.motion.drawn(path, &timing); + let mat = resolve_bound(stage, path, &mut ctx.caches); + let data = ctx.caches.prim_data(path); + let baked_moving = emit_mesh( + &mut ctx.world, + &data, + &data, + span, + mat, + &mut ctx.caches.meshes, + &mut ctx.pending_meshes, + ); + if baked_moving { + ctx.caches.motion.ignored.saw(path); + } + } else if ctx.caches.prim_data(path).is_a("Sphere") { + ctx.caches.motion.drawn(path, &timing); + let mat = resolve_material(stage, path, &mut ctx.caches); + let data = ctx.caches.prim_data(path); + if let Some(id) = emit_sphere(&mut ctx.world, &data, span, mat, ctx.caches.working) { + ctx.spheres.push(id); } - saw( - ctx, - prim.path(), - geoms_before..ctx.world.count(), - vols_before..ctx.volumes.len(), + } else if ctx.caches.prim_data(path).is_a("BasisCurves") { + ctx.caches.motion.unmoved(path, &timing); + let mat = resolve_material(stage, path, &mut ctx.caches); + let request = StrandRequest::of(&*mat, ctx.caches.working, &ctx.caches.meshes.primvars); + let data = ctx.caches.prim_data(path); + let imported = curve_segments(&data, &data, request.as_ref()); + emit_curves(&mut ctx.world, &data, imported, this_world, mat); + } else if ctx.caches.prim_data(path).is_a("NurbsCurves") { + ctx.caches.motion.unmoved(path, &timing); + let mat = resolve_material(stage, path, &mut ctx.caches); + let request = StrandRequest::of(&*mat, ctx.caches.working, &ctx.caches.meshes.primvars); + let data = ctx.caches.prim_data(path); + let imported = nurbs_curve_segments(&data, &data, request.as_ref()); + emit_curves(&mut ctx.world, &data, imported, this_world, mat); + } else if let Some(shape) = Shape::read(&ctx.caches.prim_data(path)) { + ctx.caches.motion.drawn(path, &timing); + let data = ctx.caches.prim_data(path); + let bound = undisplaced(&data, resolve_bound(stage, path, &mut ctx.caches)); + let src = ctx + .caches + .implicit + .source(path, &shape, MeshPlace::World(&span.open)); + let data = ctx.caches.prim_data(path); + let src = with_constant_primvars(src, &data, &*bound.material, ctx.caches.working); + let baked_moving = place_mesh_source( + &mut ctx.world, + &data, + src, + span, + bound, + &mut ctx.caches.meshes, + &mut ctx.pending_meshes, ); - // Every light adds at most one entry, so a grown list means `prim` - // is the light that grew it. - if ctx.lights.count() > lights_before { - ctx.links - .light_added(ctx.index.as_ref(), stage, prim.path(), lights_before); - if let Some(pass) = &ctx.pass { - pass.light_added(prim.path(), lights_before, &mut ctx.lights); - } - ctx.light_origins.push(( - prim.path().to_string(), - LightOrigin { - index: lights_before, - geoms: geoms_before as u32..ctx.world.count() as u32, - }, - )); + if baked_moving { + ctx.caches.motion.ignored.saw(path); } - - // Recurse. We push children onto the stack unconditionally; the - // per-prim dispatch above will pick up any typed schemas encountered. - if let Ok(children) = prim.children() { - for child in children { - stack.push((child, this_world, false, timing.clone())); - } + } else if visit_camera(index, stage, path, ctx) { + // Recorded (and built, if it is the one) inside the call. A + // moving camera is out of scope: it renders from the frame. + } else if emit_walked_light(ctx, path, this_world) { + ctx.caches.motion.unmoved(path, &timing); + } else { + ctx.caches.unread.saw(&ctx.caches.prim_data(path)); + } + saw( + ctx, + path, + geoms_before..ctx.world.count(), + vols_before..ctx.volumes.len(), + ); + // Every light adds at most one entry, so a grown list means `prim` + // is the light that grew it. + if ctx.lights.count() > lights_before { + let whole = ctx.whole.as_ref().zip(ctx.index.as_ref()); + let chunk = ctx + .caches + .scene + .as_ref() + .map(|(chain, stage)| (chain, stage)) + .unwrap_or_else(|| unreachable!("a light met outside a walk of the scene index")); + ctx.links.light_added(whole, chunk, path, lights_before); + if let Some(pass) = &ctx.pass { + pass.light_added(path, lights_before, &mut ctx.lights); } + ctx.light_origins.push(( + path.to_string(), + LightOrigin { + index: lights_before, + geoms: geoms_before as u32..ctx.world.count() as u32, + }, + )); } + + // Descend. The per-prim dispatch above picks up any typed schema the + // children carry. + Some((this_world, false, timing)) } /// Records that the prim at `path` emitted the geometries `geoms` and the @@ -533,22 +541,18 @@ fn saw( /// Adds the prims `prim` composes from to `sources`: the paths of its /// `prim_stack` sites other than its own (a site inside one of its variants -/// is its own), and a `PointInstancer`'s prototype targets. -fn record_arc_sources(stage: &Stage, prim: &Prim, sources: &mut Vec) { +/// is its own), read off the stage (design D7), and a `PointInstancer`'s +/// prototype targets. +fn record_arc_sources(stage: &Stage, prim: &index::data::PrimData, sources: &mut Vec) { let own = prim.path().as_str(); - for site in prim.prim_stack().unwrap_or_default() { - // Only prim sites: a layer's pseudo-root is no prim another composes. - if !site.path.is_prim() { - continue; - } - let path = without_variants(site.path.as_str()); + for path in index::stage_facts::prim_stack_paths(stage, prim.path()) { + let path = without_variants(&path); if path != own && !path.is_empty() { sources.push(path); } } - if let Ok(Some(instancer)) = PointInstancer::get(stage, prim.path().clone()) { - use openusd_schemas::geom::PointInstancerSchema; - for target in instancer.prototypes_rel().targets().unwrap_or_default() { + if prim.is_a("PointInstancer") { + for target in prim.targets("prototypes") { sources.push(target.to_string()); } } @@ -575,23 +579,21 @@ fn without_variants(path: &str) -> String { out.trim_end_matches('/').to_owned() } -/// Emits `prim` if it is a UsdLux light — the one dispatch the traversal -/// and an in-place light rebuild ([`live`]) share. `false` when it is not one. -fn emit_light(stage: &Stage, ctx: &mut ImportCtx, prim: &Prim, world_xf: GMat4) -> bool { - if let Ok(Some(light)) = SphereLight::get(stage, prim.path().clone()) { - emit_sphere_light(stage, ctx, prim, &light, world_xf); - } else if let Ok(Some(light)) = RectLight::get(stage, prim.path().clone()) { - emit_rect_light(stage, ctx, prim, &light, world_xf); - } else if let Ok(Some(light)) = DiskLight::get(stage, prim.path().clone()) { - emit_disk_light(stage, ctx, prim, &light, world_xf); - } else if let Ok(Some(light)) = CylinderLight::get(stage, prim.path().clone()) { - emit_cylinder_light(stage, ctx, prim, &light, world_xf); - } else if let Ok(Some(light)) = UsdDistantLight::get(stage, prim.path().clone()) { - emit_distant_light(&mut ctx.lights, prim, &light, world_xf, ctx.caches.working); - } else if let Ok(Some(light)) = DomeLight::get(stage, prim.path().clone()) { - emit_dome_light(ctx, prim, &DomeInputs::dome_light(&light), world_xf); - } else if let Ok(Some(light)) = DomeLight_1::get(stage, prim.path().clone()) { - let dome = DomeInputs::dome_light_1(stage, &light); +/// Emits the light `prim` (its data in the scene index) if it is a UsdLux +/// light, by its USD type as the schema registry types it (`IsA`) — the one dispatch the traversal and an in-place +/// light rebuild ([`live`]) share. `false` when it is not one. +fn emit_light(ctx: &mut ImportCtx, prim: &index::data::PrimData, world_xf: GMat4) -> bool { + if prim.is_a("SphereLight") { + emit_sphere_light(ctx, prim, world_xf); + } else if prim.is_a("RectLight") { + emit_rect_light(ctx, prim, world_xf); + } else if prim.is_a("DiskLight") { + emit_disk_light(ctx, prim, world_xf); + } else if prim.is_a("CylinderLight") { + emit_cylinder_light(ctx, prim, world_xf); + } else if prim.is_a("DistantLight") { + emit_distant_light(&mut ctx.lights, prim, world_xf, ctx.caches.working); + } else if let Some(dome) = DomeInputs::of(prim) { emit_dome_light(ctx, prim, &dome, world_xf); } else { return false; @@ -599,81 +601,59 @@ fn emit_light(stage: &Stage, ctx: &mut ImportCtx, prim: &Prim, world_xf: GMat4) true } +/// [`emit_light`] for the prim at `path` of the walk. +fn emit_walked_light(ctx: &mut ImportCtx, path: &sdf::Path, world_xf: GMat4) -> bool { + let light = ctx.caches.prim_data(path); + emit_light(ctx, &light, world_xf) +} + /// Records `prim` if it is a camera — as a candidate for the error listing /// alternatives, and built when it is the one to render through. `false` when /// it is not a camera. -fn visit_camera(stage: &Stage, prim: &Prim, ctx: &mut ImportCtx) -> bool { - if UsdCamera::get(stage, prim.path().clone()) - .ok() - .flatten() - .is_none() - { +fn visit_camera( + index: &dyn moho::scene_index::SceneIndex, + stage: &Stage, + path: &sdf::Path, + ctx: &mut ImportCtx, +) -> bool { + if index.prim(path).ty.as_str() != moho::tokens::prim_type::CAMERA { return false; } - ctx.cameras_seen.push(prim.path().clone()); + ctx.cameras_seen.push(path.clone()); let named = ctx.wanted_camera.as_ref().map(CameraChoice::path); - let is_named = named == Some(prim.path()); + let is_named = named == Some(path); // A named camera is built when met; otherwise only the first // camera is, and kept aside as the fallback while a named one // might still turn up later in the traversal. if ctx.camera.is_none() && (is_named || ctx.first_camera.is_none()) { - match build_camera(stage, prim, &ctx.settings, ctx.framing) { + match build_camera( + index, + stage, + path, + &ctx.settings, + ctx.framing, + ctx.caches.time, + ) { Some(c) if is_named || named.is_none() => { - debug!("Imported USD camera at {}", prim.path()); - ctx.camera = Some((c, prim.path().clone())); + debug!("Imported USD camera at {}", path); + ctx.camera = Some((c, path.clone())); } - Some(c) => ctx.first_camera = Some((c, prim.path().clone())), + Some(c) => ctx.first_camera = Some((c, path.clone())), None => warning!( CameraUnreadable, - at = prim.path(), + at = path, "Failed to build camera from {}", - prim.path() + path ), } } true } -/// Why a traversal leaves a prim and its whole subtree out of the render — -/// see [`prune_reason`]. -#[derive(Clone, Copy, PartialEq, Eq, Debug)] -pub(super) enum Prune { - /// A `class` prim: it exists only to be referenced or instanced. - Abstract, - /// `active = false`. - Inactive, - /// A purpose a final render does not draw (`"proxy"` / `"guide"`). - Purpose(&'static str), - /// `visibility = "invisible"`. - Invisible, -} - -impl std::fmt::Display for Prune { - fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { - match self { - Prune::Abstract => f.write_str("abstract (class)"), - Prune::Inactive => f.write_str("inactive"), - Prune::Purpose(p) => write!(f, "{p}-purpose"), - Prune::Invisible => f.write_str("invisible"), - } - } -} - -/// Where a prim is met, which decides whether [`Prune::Abstract`] applies. -#[derive(Clone, Copy, PartialEq, Eq)] -pub(super) enum WalkScope { - /// The stage's own namespace: the top-level traversal and the placement - /// count that must agree with it. - Stage, - /// Inside a prototype, reached through an instance. A prototype is - /// commonly authored under a `class` prim, so abstractness does not prune - /// here. - Prototype, -} - -/// The one pruning rule every walk applies, so that the traversal, the -/// placement count and the prototype walk cannot disagree about which prims -/// exist. +/// Why a traversal leaves a prim and its whole subtree out of the render: +/// the one pruning rule every walk applies ([`index::walk::prune`] on the +/// scene index, `listing`'s on the stage), so that they cannot disagree +/// about which prims exist. /// /// Each rule prunes a whole subtree, decided where the opinion is authored: /// @@ -694,27 +674,30 @@ pub(super) enum WalkScope { /// has it. It applies to lights as to geometry: ALab's rig parks three /// interior fills/bounces and a debug dome this way, and all four used to /// light the shot. The top-level traversal still walks an invisible -/// subtree for cameras (see [`traverse_into`]). +/// subtree for cameras (see [`visit_prim`]). /// /// Checked in that order, so the reason reported is the first that applies. -pub(super) fn prune_reason(prim: &Prim, scope: WalkScope) -> Option { - if scope == WalkScope::Stage && prim.is_abstract().unwrap_or(false) { - return Some(Prune::Abstract); - } - if !prim.is_active().unwrap_or(true) { - return Some(Prune::Inactive); - } - let token = |name: &str| prim_value(prim, name); - if let Some(v) = token("purpose") { - match v.as_str() { - Some("proxy") => return Some(Prune::Purpose("proxy")), - Some("guide") => return Some(Prune::Purpose("guide")), - _ => {} +#[derive(Clone, Copy, PartialEq, Eq, Debug)] +pub(super) enum Prune { + /// A `class` prim: it exists only to be referenced or instanced. + Abstract, + /// `active = false`. + Inactive, + /// A purpose a final render does not draw (`"proxy"` / `"guide"`). + Purpose(&'static str), + /// `visibility = "invisible"`. + Invisible, +} + +impl std::fmt::Display for Prune { + fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { + match self { + Prune::Abstract => f.write_str("abstract (class)"), + Prune::Inactive => f.write_str("inactive"), + Prune::Purpose(p) => write!(f, "{p}-purpose"), + Prune::Invisible => f.write_str("invisible"), } } - token("visibility") - .is_some_and(|v| v.as_str() == Some("invisible")) - .then_some(Prune::Invisible) } /// Drops a stage the traversal is done with, or — for a single-stage import @@ -892,6 +875,7 @@ impl ValidOptions { fn traverse_stage( path: &Path, path_str: &str, + time: Option, chunks: &[sdf::Path], skip_stage_teardown: bool, ctx: &mut ImportCtx, @@ -903,19 +887,34 @@ fn traverse_stage( CRUST_STREAM_IMPORT=0)" ); let stage = open_stage(path, path_str, None)?; + // The stage read through Moho (design D4), walked from the root. + let scene = index::Single::new(stage.clone(), time); if ctx.caches.meshes.subdiv.adaptive.is_some() { - count_placements(&stage, &mut ctx.caches); + count_placements(&stage, &scene.input, &mut ctx.caches); + } + index::walk::walk(&stage, &scene.input, &scene.top, ctx); + ctx.layers + .extend(index::stage_facts::layer_identifiers(&stage)); + if skip_stage_teardown { + // The index holds the stage too: left allocated with it. + std::mem::forget(scene); + } else { + drop(scene); } - traverse_into( - &stage, - prim_at(&stage, sdf::Path::abs_root()), - GMat4::IDENTITY, - ctx, - ); - ctx.layers.extend(stage.layer_identifiers()); release_stage(stage, skip_stage_teardown); } else { debug!("Streaming import over {} subtrees", chunks.len()); + // The payload-free scene as the merging index's weakest, permanent + // input, each chunk added over it in turn (design D4). + let Some(scene_input) = ctx.scene_input.take() else { + unreachable!("the scene input lives until the chunks are walked"); + }; + let scene = index::Streamed::new(scene_input, time); + ctx.caches.materials.outside.scene = scene + .scene() + .stage + .stage() + .map(|stage| (scene.scene().chain.clone(), stage)); for (n, chunk) in chunks.iter().enumerate() { // Per chunk rather than per prim: this is the loop whose memory // high-water mark the streaming import exists to bound, so the @@ -929,31 +928,55 @@ fn traverse_stage( None => vec![chunk.clone()], }; let stage = open_stage_masked(path, path_str, Some(mask))?; + // Walk from the root, not from `chunk`: a mask keeps the masked + // path's *ancestors* populated, so starting at the root picks up + // their transforms exactly as a full traversal would, while + // everything outside the chunk stays absent. The walk takes its + // children from the chunk's own input, in its stage's order + // (design D5). + let input = scene.add_chunk(stage.clone(), chunk); if ctx.caches.meshes.subdiv.adaptive.is_some() { - count_placements(&stage, &mut ctx.caches); + count_placements(&stage, &input, &mut ctx.caches); } - // Traverse from the root, not from `chunk`: a mask keeps the - // masked path's *ancestors* populated, so starting at the - // root picks up their transforms exactly as a full traversal - // would, while everything outside the chunk stays absent. - traverse_into( - &stage, - prim_at(&stage, sdf::Path::abs_root()), - GMat4::IDENTITY, - ctx, - ); + // What the chunk depends on and no input holds — a material in + // another chunk's payload, a node outside the chunk — comes from + // the side input (design D4). + let open = |paths: Vec| { + let started = Instant::now(); + let n = paths.len(); + match open_stage_masked(path, path_str, Some(paths)) { + Ok(side) => { + debug!( + "Opened a side stage for {n} path(s) outside the chunk in {:?}", + started.elapsed() + ); + Some(side) + } + Err(e) => { + debug!("Could not open a side stage for paths outside the chunk: {e}"); + None + } + } + }; + if let Some((side, mask)) = + scene.resolve_outside(materials::MAX_SIDE_STAGE_OPENS, &open) + { + ctx.caches.materials.outside.stage = Some(side); + ctx.caches.materials.outside.mask = mask; + } + index::walk::walk(&stage, &input, &scene.top, ctx); + scene.remove_chunk(&input); + drop(input); // Always dropped, the last chunk included: that is the memory // bound streaming exists for, and a streamed import's peak often // comes *after* the traversal — at the top-level BVH commit, on // the island — where a kept stage would stack on top of it. - ctx.layers.extend(stage.layer_identifiers()); + ctx.layers + .extend(index::stage_facts::layer_identifiers(&stage)); release_stage(stage, false); - // Separate this stage's prototypes from the next stage's — - // see ImportCaches::epoch. Deliberately not a clear: the - // mesh cache keys materials by Arc address, so nothing may - // be freed while it is live. - ctx.caches.epoch += 1; - ctx.caches.materials.epoch = ctx.caches.epoch; + // Nothing cached is cleared between stages: the mesh cache keys + // materials by `Arc` address, so nothing may be freed while it is + // live, and the caches' keys are stable across stages. debug!( "Chunk {}/{} done in {:?} — running totals: {} geometries, {} light(s), \ {} volume region(s), {} mesh placement(s) pending", @@ -966,6 +989,8 @@ fn traverse_stage( ctx.pending_meshes.len() ); } + scene.remove_side(); + drop(scene); // The materials the chunks bound from outside themselves, dropped // before the top-level commit as every chunk's stage is. let layers = ctx.caches.materials.outside.release(); @@ -1100,7 +1125,6 @@ pub(crate) fn load_scene( ) -> Result { let valid = ValidOptions::check(options)?; let time = valid.time; - let _time_scope = EvalTimeScope::enter(time); // Every coded warning this import raises, on this thread, is recorded // here and handed back on the scene. let warning_scope = crate::WarningScope::enter(); @@ -1128,8 +1152,14 @@ pub(crate) fn load_scene( path.display(), open_start.elapsed() ); + // The payload-free scene read through Moho: the scene input of a streamed + // import, and where stage-wide facts are read for any import. + let scene_input = index::input_chain(index.clone(), time, true); if let Some(t) = time { - check_time_range(&index, t); + check_time_range( + index::stage_facts::time_range(scene_input.chain.as_ref()), + t, + ); } let IndexRead { settings, @@ -1142,13 +1172,22 @@ pub(crate) fn load_scene( projection, dicing, shutter, - } = read_index(&index, path, path_str, options, &valid)?; + } = read_index( + &index, + scene_input.chain.as_ref(), + path, + path_str, + options, + &valid, + )?; let pass = valid.pass.as_ref(); - let render_settings = settings::render_settings_path(&index, pass).map(|p| p.to_string()); - let settings_prim = settings::read_settings_prim(&index, pass).map(|p| p.to_string()); + let render_settings = + settings::render_settings_path(scene_input.chain.as_ref(), pass).map(|p| p.to_string()); + let settings_prim = + settings::read_settings_prim(scene_input.chain.as_ref(), pass).map(|p| p.to_string()); let chunks = stream_roots(&index); let subtrees: std::collections::HashSet = if subdiv.adaptive.is_some() { - subtree_roots(&index) + index::stage_facts::subtree_roots(&index) .iter() .map(ToString::to_string) .collect() @@ -1194,19 +1233,23 @@ pub(crate) fn load_scene( shutter.offsets.open == 0.0, frame_posed, asks_time, - ), + ) + .with_frame(time), + time, ..ImportCaches::new(assets, path, subdiv, working, mtlx_library()) }, pending_meshes: Vec::new(), spheres: Vec::new(), arc_sources: options.keep_geometry.then(Vec::new), links: LightLinks::default(), - pass: pass.map(|p| ActivePass::read(&index, p)), + pass: pass.map(|p| ActivePass::read(scene_input.chain.as_ref(), p)), light_origins: Vec::new(), settings, framing: products.framing, stage_path: path, index: Some(index), + whole: Some(scene_input.chain.clone()), + scene_input: Some(scene_input), assets, layers: Default::default(), }; @@ -1218,6 +1261,7 @@ pub(crate) fn load_scene( traverse_stage( path, path_str, + time, &chunks, options.skip_stage_teardown, &mut ctx, @@ -1284,9 +1328,15 @@ pub(crate) fn load_scene( None => false, }); let mut root_stack = (Vec::new(), None); + ctx.scene_input = None; + ctx.whole = None; if let Some(index) = ctx.index.take() { - ctx.layers.extend(index.layer_identifiers()); - root_stack = (index.layer_stack(), Some(invisible_overrides(&index))); + ctx.layers + .extend(index::stage_facts::layer_identifiers(&index)); + root_stack = ( + index::stage_facts::layer_stack(&index), + Some(index::stage_facts::invisible_overrides(&index)), + ); } if !domes_seen_by_camera { debug!( @@ -1374,14 +1424,14 @@ pub(crate) fn load_scene( scene.camera_path = camera_path; scene.time = time; scene.warnings = warning_scope.finish(); - scene.layers = layer_files(&ctx.layers, path); + scene.layers = index::stage_facts::layer_files(&ctx.layers, path); scene.pass = ctx.pass.as_ref().map(ActivePass::summary); scene.settings_prim = settings_prim; scene.source = crate::scene::Source { lens, depth_of_field: scene.camera.has_depth_of_field(), motion_blur: scene.settings.motion_blur() && shutter.interval.is_some(), - layer_stack: stack_files(&root_stack.0, path), + layer_stack: index::stage_facts::stack_files(&root_stack.0, path), invisible_overrides: root_stack.1, }; scene.provenance = Some(Provenance { @@ -1422,92 +1472,12 @@ pub(crate) fn load_scene( mtlx_library: ctx.caches.materials.library.clone(), }, }); + // Test builds only: compare the scene with the direct importer's baseline. + #[cfg(feature = "parity")] + crate::parity::check_import(path, options, &scene, &|| load_scene(path, assets, options)); Ok(scene) } -/// The files behind layer `identifiers`, sorted and without repeats: a layer -/// inside a package is the package file, a relative identifier is anchored -/// to the root layer `root`'s directory, file format arguments are dropped, -/// and an anonymous layer, which has no file, is left out. -fn layer_files( - identifiers: &std::collections::BTreeSet, - root: &Path, -) -> Vec { - let dir = root.parent().unwrap_or(Path::new("")); - let files: std::collections::BTreeSet = identifiers - .iter() - .filter(|id| !sdf::Layer::is_anonymous_identifier(id)) - .map(|id| { - let id = id.split(":SDF_FORMAT_ARGS:").next().unwrap_or(id); - let file = openusd::ar::split_package_relative_path_outer(id) - .map(|(package, _)| package) - .unwrap_or_else(|| id.to_owned()); - let file = Path::new(&file); - if file.is_absolute() { - file.to_path_buf() - } else { - dir.join(file) - } - }) - .collect(); - files.into_iter().collect() -} - -/// The files of the root layer stack `identifiers`, in their order: each -/// mapped as [`layer_files`] maps it and made absolute against the working -/// directory (links not resolved), an anonymous layer left out, and a -/// package met twice kept once, where it is strongest. -fn stack_files(identifiers: &[String], root: &Path) -> Vec { - let mut files: Vec = Vec::new(); - for id in identifiers { - let one = std::collections::BTreeSet::from([id.clone()]); - for file in layer_files(&one, root) { - // Absolute, so the same layer stamps the same path whatever the - // working directory and however the stage path was typed. - let file = std::path::absolute(&file).unwrap_or(file); - if !files.contains(&file) { - files.push(file); - } - } - } - files -} - -/// The prims the strongest layer of `stage`'s root layer stack — its session -/// layer when it has one, else its root layer — hides with an `over`: a -/// `visibility` spec on an `over` prim whose default or a time sample is -/// `invisible`. What a session or override layer hid of the scene beneath -/// it; a prim the layer itself defines invisible is the scene's own. -pub(super) fn invisible_overrides(stage: &Stage) -> u32 { - let strongest = stage.session_layer().unwrap_or_else(|| stage.root_layer()); - let data = strongest.data(); - let invisible = |v: &sdf::Value| matches!(v, sdf::Value::Token(t) if t.as_str() == "invisible"); - let mut count = 0u32; - for path in data.spec_paths() { - if !path.is_property() || !path.as_str().ends_with(".visibility") { - continue; - } - let prim = path.prim_path(); - let is_over = matches!( - data.try_field(&prim, "specifier"), - Ok(Some(v)) if matches!(&*v, sdf::Value::Specifier(sdf::Specifier::Over)) - ); - if !is_over { - continue; - } - let default = matches!(data.try_field(&path, "default"), Ok(Some(v)) if invisible(&v)); - let sampled = matches!( - data.try_field(&path, "timeSamples"), - Ok(Some(v)) if matches!(&*v, sdf::Value::TimeSamples(samples) - if samples.iter().any(|(_, v)| invisible(v))) - ); - if default || sampled { - count = count.saturating_add(1); - } - } - count -} - /// What the import reads before it traverses anything: the index stage's /// render settings and products, and the stage-wide choices made from them. /// The settings carry the products' resolution, region and motion blur, and @@ -1534,6 +1504,7 @@ struct IndexRead { /// the two read the same settings by construction. fn read_index( index: &Stage, + scene: &dyn moho::scene_index::SceneIndex, path: &Path, path_str: &str, options: &crate::UsdImportOptions, @@ -1543,14 +1514,14 @@ fn read_index( // below goes through. let pass = valid.pass.as_ref(); if let Some(p) = pass { - settings::check_pass(index, p)?; + settings::check_pass(scene, index, p)?; debug!("Rendering pass {p}"); } // Render settings come first — the camera importer needs the aspect ratio. - let mut settings = import_render_settings(index, pass); + let mut settings = import_render_settings(scene, pass); // The products the render writes. The first one's camera and resolution // are the render's: the settings' own unless that product overrides them. - let products = import_render_products(index, Some(path), pass); + let products = import_render_products(scene, Some((path, index)), pass); if let Some((w, h)) = products.resolution { settings = settings.with_resolution(w, h); } @@ -1568,26 +1539,26 @@ fn read_index( settings = settings .with_motion_blur(products.motion_blur) .with_depth_of_field(products.depth_of_field); - let domes_seen_by_camera = dome_light_camera_visibility(index, pass); - let exposure_compensation = enable_exposure_compensation(index, pass); + let domes_seen_by_camera = dome_light_camera_visibility(scene, pass); + let exposure_compensation = enable_exposure_compensation(scene, pass); // The working colour space, before any colour is read: every texture // request and authored colour is converted into it. let working = valid .working - .unwrap_or_else(|| render_settings_color_space(index, pass)); + .unwrap_or_else(|| render_settings_color_space(scene, pass)); debug!("Rendering in {} ({})", working.label(), working.name()); // Geometry, not tracer, settings: every mesh whose scheme is not `none` // is refined to this one level, so it must be known before the traversal. let subdiv_level = resolve_subdiv_level( options.subdivision_level, - render_settings_subdiv_level(index, pass), + render_settings_subdiv_level(scene, pass), ); debug!("Subdivision level {subdiv_level} for every mesh whose subdivisionScheme is not none"); // Which camera to render through: the host's explicit choice, else the // stage's own `RenderSettings.camera`. Decided here, on the index stage, // because the traversal needs it before it meets any camera. let wanted_camera = - settings::wanted_camera(valid.camera.clone(), products.camera.clone(), index, pass); + settings::wanted_camera(valid.camera.clone(), products.camera.clone(), scene, pass); if let Some(choice) = &wanted_camera { debug!("Rendering through {choice}"); } @@ -1595,10 +1566,11 @@ fn read_index( // else the render camera. Products do not override it. let (dicer, shutter) = read_camera_ahead( index, + scene, path, path_str, wanted_camera.as_ref(), - render_settings_dicing_camera(index, pass).as_ref(), + render_settings_dicing_camera(scene, pass).as_ref(), &settings, products.framing, valid.time, @@ -1607,7 +1579,7 @@ fn read_index( debug!("Motion is measured over time codes {open} .. {close}"); } let dicing = dicer.authored.then(|| dicer.path.clone()).flatten(); - let (subdiv, projection) = subdiv_policy(index, options, pass, subdiv_level, dicer); + let (subdiv, projection) = subdiv_policy(scene, options, pass, subdiv_level, dicer); if let Some(t) = valid.time { // The sampler's frame seed follows the frame being rendered, so an // image sequence gets independent noise per frame instead of one @@ -1686,6 +1658,7 @@ struct Dicer { #[allow(clippy::too_many_arguments)] fn read_camera_ahead( index: &Stage, + scene: &dyn moho::scene_index::SceneIndex, path: &Path, path_str: &str, wanted_camera: Option<&CameraChoice>, @@ -1694,18 +1667,23 @@ fn read_camera_ahead( framing: products::Framing, frame: Option, ) -> Result<(Dicer, Shutter), crate::Error> { - let read_on = |stage: &Stage, at: &sdf::Path| { - let prim = prim_at(stage, at.clone()); - shutter_offsets(stage, &prim) - .map(|s| (screen_projection(stage, &prim, settings, framing), s)) + let read_on = |scene: &dyn moho::scene_index::SceneIndex, stage: &Stage, at: &sdf::Path| { + shutter_offsets(scene, at).map(|s| { + ( + screen_projection(scene, stage, at, settings, framing, frame), + s, + ) + }) }; let read = |camera_path: &sdf::Path| -> Result<_, crate::Error> { - Ok(match read_on(index, camera_path) { + Ok(match read_on(scene, index, camera_path) { Some(r) => Some(r), None => { let started = Instant::now(); let stage = open_stage(path, path_str, Some(camera_path.clone()))?; - let r = read_on(&stage, camera_path); + let masked = index::input_chain(stage.clone(), frame, false); + let r = read_on(masked.chain.as_ref(), &stage, camera_path); + drop(masked); release_stage(stage, false); debug!( "Read {camera_path} ahead of the traversal from a stage masked to it in {:?}", @@ -1750,10 +1728,10 @@ fn read_camera_ahead( Shutter::new(Some(camera_path.clone()), *offsets, frame) } None => { - let first = first_camera(index); + let first = first_camera(index, scene); let offsets = first .as_ref() - .and_then(|p| shutter_offsets(index, &prim_at(index, p.clone()))) + .and_then(|p| shutter_offsets(scene, p)) .unwrap_or_default(); Shutter::new(first, offsets, frame) } @@ -1766,12 +1744,13 @@ fn read_camera_ahead( Ok((dicer, shutter)) } -/// The first camera the traversal would meet, on the payload-free `index`: -/// the same walk order (a stack, so the last child first), the same pruning, -/// an invisible subtree still walked, instances and `PointInstancer`s not +/// The first camera the traversal would meet, on the payload-free scene: the +/// same walk order (a stack, so the last child first), the same pruning, an +/// invisible subtree still walked, instances and point instancers not /// entered, and one top-level subtree after another when the import streams. /// A camera inside an unloaded payload is not seen. -fn first_camera(index: &Stage) -> Option { +fn first_camera(index: &Stage, scene: &dyn moho::scene_index::SceneIndex) -> Option { + use moho::tokens::{prim_type, usd_prim_info}; let chunks = stream_roots(index); let roots = if chunks.is_empty() { vec![sdf::Path::abs_root()] @@ -1779,34 +1758,37 @@ fn first_camera(index: &Stage) -> Option { chunks }; for root in roots { - let mut stack = vec![(prim_at(index, root), false)]; - while let Some((prim, parent_hidden)) = stack.pop() { - let pruned = prune_reason(&prim, WalkScope::Stage); - if pruned.is_some_and(|r| r != Prune::Invisible) { + let mut stack = vec![(root, false)]; + while let Some((path, parent_hidden)) = stack.pop() { + let prim = index::data::PrimData::at(scene, &path); + if !path.is_abs_root() && !prim.is_defined() { continue; } - let hidden = parent_hidden || pruned == Some(Prune::Invisible); - if prim.is_instance().unwrap_or(false) { + let pruned = index::walk::prune(scene, &path); + if pruned.is_some_and(|r| r != Prune::Invisible) { continue; } - if UsdCamera::get(index, prim.path().clone()) - .ok() - .flatten() + let hidden = parent_hidden || pruned == Some(Prune::Invisible); + if prim + .locate([ + usd_prim_info::USD_PRIM_INFO, + usd_prim_info::NI_PROTOTYPE_PATH, + ]) .is_some() - { - return Some(prim.path().clone()); - } - if !hidden - && PointInstancer::get(index, prim.path().clone()) - .ok() - .flatten() - .is_some() { continue; } - if let Ok(children) = prim.children() { - stack.extend(children.into_iter().map(|c| (c, hidden))); + if prim.ty() == prim_type::CAMERA { + return Some(path); + } + if !hidden && prim.ty() == prim_type::INSTANCER { + continue; } + stack.extend( + index::walk::children(scene, &path) + .into_iter() + .map(|c| (c, hidden)), + ); } } None @@ -1917,7 +1899,7 @@ fn check_shutter_camera( /// silently. Finding the first camera's projection would take a traversal of /// its own. fn subdiv_policy( - index: &Stage, + scene: &dyn moho::scene_index::SceneIndex, options: &crate::UsdImportOptions, pass: Option<&sdf::Path>, subdiv_level: u32, @@ -1925,7 +1907,7 @@ fn subdiv_policy( ) -> (SubdivPolicy, Option) { let target = resolve_subdiv_edge_length( options.subdivision_edge_length, - render_settings_subdiv_edge_length(index, pass), + render_settings_subdiv_edge_length(scene, pass), ) .filter(|_| crate::config().subdiv); let Some(camera_path) = dicer.path else { @@ -1965,7 +1947,7 @@ fn subdiv_policy( }; let max = resolve_adaptive_max_level( options.subdivision_level, - render_settings_subdiv_level(index, pass), + render_settings_subdiv_level(scene, pass), ); info!( "Adaptive subdivision: unshared cage edges refined to at most {target} px through \ @@ -2002,38 +1984,42 @@ struct ImportCaches<'a> { /// until its representation is decided (see [`flush_meshes`]), then its /// committed kernel scene if it needed one. meshes: MeshArena, - /// `(epoch, prototype path)` → its shared parts, for both instancing - /// mechanisms. See [`ImportCaches::epoch`] for the epoch. A prototype placed - /// once in adaptive mode is built for its placement and not cached here. - protos: HashMap<(u32, String), Arc>>, + /// A prototype's root in the instancing chain → its shared parts, for both + /// instancing mechanisms: Moho's propagated prototype path (or a point + /// instancer's copy), stable across a streamed import's stages, so a + /// prototype is built once for the whole import (the change's third + /// behaviour change). A prototype placed once in adaptive mode is built + /// for its placement and not cached here. + protos: HashMap>>, /// The same prototypes as one [`ProtoPart`] each (see /// `instancing::group_parts`), `None` for one with no geometry. Same keys /// as `protos`. - groups: HashMap<(u32, String), Option>, + groups: HashMap>, /// Adaptive mode only: native placements per `(top-level subtree, /// prototype path)`, counted before the subtree is walked /// ([`count_placements`]). A prototype placed once in its subtree is /// unshared, and refined by its size on screen. placements: HashMap<(String, String), u32>, - /// The top-level subtrees placements are counted in ([`subtree_roots`]). + /// The top-level subtrees placements are counted in ([`index::stage_facts::subtree_roots`]). subtrees: std::collections::HashSet, - /// Which stage the entries above came from. - /// - /// Prototype paths (`/__Prototype_N`) are numbered per composition, so - /// under the streaming importer the same name denotes different - /// geometry in each stage. Bumping the epoch between stages keeps - /// those apart. - /// - /// It bumps rather than clearing because [`MeshKey`](mesh::MeshKey) identifies a - /// material by its `Arc` *address*: dropping the parts would free - /// material `Arc`s whose addresses a later allocation could reuse, - /// and a stale mesh-cache entry would then match the wrong material. - /// Nothing here is freed before the import ends, so those addresses - /// stay unique — and the mesh and material caches keep deduplicating - /// across stages, which is what stops streaming costing extra memory. - epoch: u32, /// The host's decoder, for materials that carry a texture asset. assets: &'a dyn AssetLoader, + /// The import's time code, for a scene index the readers build over a + /// stage of their own (a material outside the chunk). + time: Option, + /// The chain of the input being walked ([`index::walk`]), set for the + /// walk's duration so it does not keep a dropped chunk's stage alive. + scene: Option<(moho::scene_index::SceneIndexHandle, Stage)>, + /// The top of the import's chain while a walk runs ([`index::walk`]): + /// the material readers read networks there, after the material-node + /// resolution (Moho's M10). + top: Option, + /// The walked input's stage scene index, unfiltered, while a walk runs: + /// the local `xform` before the flattening ([`xform::compose_index`]). + stage_index: Option, + /// The walked input's instancing chain while a walk runs + /// ([`index::Input::chain`]): Moho's instancers and their prototypes. + inst: Option, /// Root layer, the fallback anchor for an asset path openusd handed back /// unresolved. stage_path: &'a Path, @@ -2082,14 +2068,11 @@ struct UnreadGprims { impl UnreadGprims { /// Counts `prim`, which every reading branch has passed over, when it is /// a `Gprim`: a camera, a light, a material or a transform is not one. - fn saw(&mut self, prim: &Prim) { - if !prim.is_a("Gprim").unwrap_or(false) { + fn saw(&mut self, prim: &index::data::PrimData) { + if !prim.is_a("Gprim") { return; } - let ty = match prim.type_name() { - Ok(Some(t)) => t.as_str().to_owned(), - _ => return, - }; + let ty = prim.usd_type(); match self.types.iter_mut().find(|(t, ..)| *t == ty) { Some((.., n)) => *n += 1, None => self.types.push((ty, prim.path().to_string(), 1)), @@ -2113,7 +2096,7 @@ impl UnreadGprims { } impl ImportCaches<'_> { - /// The top-level subtree `path` lies in, as [`subtree_roots`] partitions the + /// The top-level subtree `path` lies in, as [`index::stage_facts::subtree_roots`] partitions the /// stage; empty above every subtree. fn subtree_of(&self, path: &sdf::Path) -> String { let mut cur = Some(path.clone()); @@ -2152,7 +2135,6 @@ impl<'a> ImportCaches<'a> { groups: HashMap::new(), placements: HashMap::new(), subtrees: std::collections::HashSet::new(), - epoch: 0, assets, stage_path, asset_time: Duration::ZERO, @@ -2164,6 +2146,38 @@ impl<'a> ImportCaches<'a> { motion: TransformMotion::default(), working, luma: crate::color::luma(working), + time: None, + scene: None, + top: None, + stage_index: None, + inst: None, + } + } + + /// The prim at `path` of the walked input's stage scene index, before + /// any filter: what the transform reader reads. + fn stage_prim(&self, path: &sdf::Path) -> index::data::PrimData { + match (&self.stage_index, &self.scene) { + (Some(index), Some(_)) => index::data::PrimData::at(index.as_ref(), path), + _ => unreachable!("a reader reached outside a walk of the scene index"), + } + } + + /// The prim at `path` of the scene index being walked, for a reader that + /// has moved onto the index but is reached from one still bridged (a + /// prototype's parts through the instancing reader). + /// The directory of the layer authoring attribute `name` of the prim at + /// `path` on the walked input's stage: where a relative asset path in it + /// is anchored ([`assets::asset_value_path`]). + fn layer_dir(&self, path: &sdf::Path, name: &str) -> Option { + let (_, stage) = self.scene.as_ref()?; + index::stage_facts::authoring_layer_dir(stage, &path.append_property(name).ok()?) + } + + fn prim_data(&self, path: &sdf::Path) -> index::data::PrimData { + match &self.scene { + Some((scene, _)) => index::data::PrimData::in_index(scene, path), + None => unreachable!("a reader reached outside a walk of the scene index"), } } } diff --git a/crates/crust-core/src/scene/usd_import/mtlx_network.rs b/crates/crust-core/src/scene/usd_import/mtlx_network.rs index a69f3dca0..4042dc68c 100644 --- a/crates/crust-core/src/scene/usd_import/mtlx_network.rs +++ b/crates/crust-core/src/scene/usd_import/mtlx_network.rs @@ -9,14 +9,15 @@ //! stage, how Houdini and Maya export one, and how NVIDIA's Typhoon (the //! OpenUSD reference renderer's hdEmbree) receives every material it renders. //! -//! The network is translated node for node into the document crust-mtlx's -//! parser would have produced from the equivalent XML — the category and type -//! from the nodedef name, each input's literal formatted as the text a `value` -//! attribute holds and read back through the same -//! [`crust_mtlx::parse_literal`] — so a network shades exactly as the -//! same network in a `.mtlx` does. Connections through `NodeGraph` outputs and -//! through `Material` / `NodeGraph` interface inputs are followed to the -//! shader output or the literal they forward. +//! The network is read as the scene index gives it — the material's +//! `material` network ([`super::index::network`]), Hydra's material network +//! schema, its connections through `NodeGraph` outputs and interface inputs +//! already followed to a shader output or the value they forward — and +//! translated node for node into the document crust-mtlx's parser would have +//! produced from the equivalent XML: the category and type from the nodedef +//! name, each parameter's value formatted as the text a `value` attribute +//! holds and read back through the same [`crust_mtlx::parse_literal`], so a +//! network shades exactly as the same network in a `.mtlx` does. //! //! A shader id the import's MaterialX node library defines (a studio node //! whose nodedef name breaks the `ND_` convention) is read through its @@ -24,21 +25,16 @@ //! translated document is expanded against that library //! ([`crust_mtlx::Doc::expand`]), as a `.mtlx` is. -use std::collections::{HashMap, HashSet}; +use moho::openusd; +use std::collections::{BTreeSet, HashMap, HashSet}; use std::path::Path; use crust_mtlx::{Doc, Input, Library, Node, Source, Val}; use openusd::sdf; -use openusd::usd::{Attribute, Prim, Stage}; -use super::assets::asset_path; -use super::materials::shader_info_id; -use super::prim_at; -use super::time::eval_time; - -/// How many forwarding hops (graph outputs, interface inputs) one connection -/// may take before the translation gives up on it — a cycle, in practice. -const MAX_HOPS: usize = 32; +use super::assets::asset_value_path; +use super::index::data::PrimData; +use super::index::network::{self as shading, GraphOutput, Network as Shading, Parameter}; /// A translated network: the document, and the node each terminal names. pub(super) struct Network { @@ -55,27 +51,30 @@ pub(super) fn is_mtlx_id(id: &str, library: &Library) -> bool { id.starts_with("ND_") || library.nodedef(id).is_some() } -/// Translates the networks under the shader prims `surface` and `volume` -/// (either may be absent) into one document. +/// Translates the networks under the nodes `surface` and `volume` (either +/// may be absent; each a network and a node name in it, the networks of the +/// render contexts the terminals resolved in) into one document. `at` reads +/// a node's prim, for its `outputs:out` type. pub(super) fn translate( - stage: &Stage, + at: &dyn Fn(&sdf::Path) -> PrimData, stage_path: &Path, + layer_dir: &LayerDir<'_>, library: &Library, - surface: Option<&Prim>, - volume: Option<&Prim>, + surface: Option<(&Shading, &str)>, + volume: Option<(&Shading, &str)>, ) -> Network { let mut b = Builder { - stage, + at, stage_path, + layer_dir, library, nodes: Vec::new(), names: HashMap::new(), active: HashSet::new(), reported: Vec::new(), - interface: None, }; - let surface = surface.and_then(|p| b.node(p)); - let volume = volume.and_then(|p| b.node(p)); + let surface = surface.and_then(|(net, name)| b.node(net, name)); + let volume = volume.and_then(|(net, name)| b.node(net, name)); let mut doc = Doc::from_nodes(b.nodes); doc.expand(library); Network { @@ -86,9 +85,15 @@ pub(super) fn translate( } } +/// The directory of the layer authoring attribute `name` of the node prim at +/// `path` (a network path): where a relative `filename` it holds is anchored +/// ([`asset_value_path`]). +pub(super) type LayerDir<'a> = dyn Fn(&sdf::Path, &str) -> Option + 'a; + struct Builder<'s> { - stage: &'s Stage, + at: &'s dyn Fn(&sdf::Path) -> PrimData, stage_path: &'s Path, + layer_dir: &'s LayerDir<'s>, library: &'s Library, nodes: Vec, /// Shader prim path → its node's name (the path itself), once translated. @@ -96,9 +101,6 @@ struct Builder<'s> { /// Shader prims being translated, for cycle detection. active: HashSet, reported: Vec, - /// The value graph being translated ([`translate_value_graph`]), whose - /// own interface inputs are the host's channels rather than literals. - interface: Option, } /// A translated value graph: its document, and each of the graph prim's @@ -110,55 +112,49 @@ pub(super) struct ValueNetwork { pub(super) reported: Vec, } -/// Translates the `NodeGraph` prim `graph` as a value graph: its shaders -/// node for node, as [`translate`] does, except that a connection to one of -/// the graph's own interface inputs becomes a [`Source::Interface`] of that -/// name — a channel the host supplies per evaluation — carrying the input's -/// authored value as its default. +/// Translates the `NodeGraph` at `graph` as a value graph +/// ([`shading::graph`], read from generic data): its shaders node for node, +/// as [`translate`] does, except that a connection to one of the graph's own +/// interface inputs becomes a [`Source::Interface`] of that name — a channel +/// the host supplies per evaluation — carrying the input's authored value as +/// its default. pub(super) fn translate_value_graph( - stage: &Stage, + at: &dyn Fn(&sdf::Path) -> PrimData, stage_path: &Path, - graph: &Prim, + layer_dir: &LayerDir<'_>, + graph: &sdf::Path, ) -> ValueNetwork { - let path = graph.path().as_str().to_string(); + let path = graph.as_str().to_string(); + let read = shading::graph(at, graph); // A sample filter reads standard nodes only: no custom nodedef is // resolved, so the document needs no expansion. let library = Library::default(); let mut b = Builder { - stage, + at, stage_path, + layer_dir, library: &library, nodes: Vec::new(), names: HashMap::new(), active: HashSet::new(), - reported: Vec::new(), - interface: Some(path.clone()), + reported: read.reported, }; let mut outputs = Vec::new(); - let mut attrs = graph.attributes().unwrap_or_default(); - attrs.sort_by(|a, b| a.path().as_str().cmp(b.path().as_str())); - for attr in attrs { - let full = attr.path().split_property().map(|(_, n)| n.to_string()); - let Some(name) = full.as_deref().and_then(|n| n.strip_prefix("outputs:")) else { - continue; - }; - let usd_type = attr - .type_name() - .ok() - .flatten() - .map(|t| t.as_str().to_string()) - .unwrap_or_default(); - let resolved = b.resolve(&attr, 0); - match resolved { - Some(Resolved::Node { name: node, output }) => { - outputs.push((name.to_string(), node, output)); - } - Some(other) => { + for (name, usd_type, output) in read.outputs { + match output { + GraphOutput::Node(c) => match b.node(&read.network, &c.node) { + Some(node) => outputs.push((name, node, (c.output != "out").then_some(c.output))), + None => b + .reported + .push(format!("{path}.outputs:{name}: connects to nothing")), + }, + GraphOutput::Value(parameter) => { // An output wired straight to an interface input, or holding // a value: a `constant` node forwards it. let node = format!("{path}.outputs:{name}"); let mtype = mtlx_type(&usd_type); - if let Some(input) = b.resolved_input("value", &usd_type, other) { + let at = format!("{path}.outputs:{name}"); + if let Some(input) = b.parameter_input("value", &at, &usd_type, ¶meter) { b.nodes.push(Node { category: "constant".into(), name: node.clone(), @@ -168,12 +164,9 @@ pub(super) fn translate_value_graph( version: None, colorspace: None, }); - outputs.push((name.to_string(), node, None)); + outputs.push((name, node, None)); } } - None => b - .reported - .push(format!("{path}.outputs:{name}: connects to nothing")), } } ValueNetwork { @@ -184,242 +177,162 @@ pub(super) fn translate_value_graph( } impl Builder<'_> { - /// The node for the shader prim `prim`, translating it (and everything - /// upstream of it) on first use. `None` for a prim that is not a - /// MaterialX shader. - fn node(&mut self, prim: &Prim) -> Option { - let path = prim.path().as_str().to_string(); - if let Some(name) = self.names.get(&path) { + /// The node for the shader node `name` of `net`, translating it (and + /// everything upstream of it) on first use. `None` for a node that is not + /// a MaterialX shader, or that the network does not hold (a prim that is + /// no `Shader`). + fn node(&mut self, net: &Shading, name: &str) -> Option { + let path = net.path(name)?; + let key = path.as_str().to_string(); + if let Some(name) = self.names.get(&key) { return Some(name.clone()); } - if !self.active.insert(path.clone()) { - self.reported - .push(format!("{path}: connection cycle — cut")); + let node = net.nodes.get(name)?; + if !self.active.insert(key.clone()) { + self.reported.push(format!("{key}: connection cycle — cut")); return None; } - let shader = openusd_schemas::shade::Shader::get(self.stage, prim.path().clone()) - .ok() - .flatten(); - let id = shader.as_ref().and_then(shader_info_id); - let Some(id) = id.filter(|id| is_mtlx_id(id, self.library)) else { + if !is_mtlx_id(&node.id, self.library) { self.reported.push(format!( - "{path}: not a MaterialX shader ({}) — its input falls back to the default", - shader - .as_ref() - .and_then(shader_info_id) - .unwrap_or_else(|| "no info:id".into()) + "{key}: not a MaterialX shader ({}) — its input falls back to the default", + if node.id.is_empty() { + "no info:id" + } else { + &node.id + } )); - self.active.remove(&path); + self.active.remove(&key); return None; - }; + } // A library nodedef is named exactly, version included, so the // expansion instantiates that one and not its category's default. - let (category, type_name, version) = match self.library.nodedef(&id) { + let (category, type_name, version) = match self.library.nodedef(&node.id) { Some(def) => ( def.node.clone(), def.instance_type().to_string(), def.version.clone(), ), None => { - let (category, nd_type) = nodedef_category(&id); - let type_name = node_type(&category, nd_type, prim); + let (category, nd_type) = nodedef_category(&node.id); + let out = (self.at)(&path).type_name("outputs:out"); + let type_name = node_type( + &category, + nd_type, + Some(out.as_str()).filter(|t| !t.is_empty()), + ); (category, type_name, None) } }; + let names: BTreeSet<&String> = node + .parameters + .keys() + .chain(node.connections.keys()) + .collect(); let mut inputs = Vec::new(); - for attr in prim.attributes().unwrap_or_default() { - let full = attr.path().split_property().map(|(_, n)| n.to_string()); - let Some(name) = full.as_deref().and_then(|n| n.strip_prefix("inputs:")) else { - continue; + for input in names { + let at = format!("{key}.inputs:{input}"); + // As UsdImaging's graph walk: a connection wins over a value. + let made = match node.connections.get(input).and_then(|c| c.first()) { + Some(c) => self.node(net, &c.node).map(|upstream| { + let type_name = self + .nodes + .iter() + .find(|n| n.name == upstream) + .map(|n| n.type_name.clone()) + .unwrap_or_else(|| "float".to_string()); + Input { + name: input.clone(), + type_name, + source: Source::Node { + name: upstream, + output: (c.output != "out").then(|| c.output.clone()), + }, + colorspace: None, + text: None, + interface: None, + } + }), + None => match node.parameters.get(input) { + Some(p) => self.parameter_input(input, &at, "", p), + None => None, + }, }; - if let Some(input) = self.input(name, &attr) { - inputs.push(input); + if let Some(made) = made { + inputs.push(made); } } - self.active.remove(&path); - self.names.insert(path.clone(), path.clone()); + self.active.remove(&key); + self.names.insert(key.clone(), key.clone()); self.nodes.push(Node { category, - name: path.clone(), + name: key.clone(), type_name, inputs, graph: None, version, colorspace: None, }); - Some(path) - } - - /// One `inputs:` attribute as a MaterialX input: a connection to - /// the node it resolves to, or its literal. - fn input(&mut self, name: &str, attr: &Attribute) -> Option { - let usd_type = attr - .type_name() - .ok() - .flatten() - .map(|t| t.as_str().to_string()) - .unwrap_or_default(); - let resolved = self.resolve(attr, 0)?; - self.resolved_input(name, &usd_type, resolved) + Some(key) } - /// The input `name` (of USD type `usd_type`) as where its connection - /// ended. - fn resolved_input(&mut self, name: &str, usd_type: &str, resolved: Resolved) -> Option { - let usd_type = usd_type.to_string(); - match resolved { - Resolved::Interface { - attr, - name: channel, - } => { - let ty = attr - .type_name() - .ok() - .flatten() - .map(|t| t.as_str().to_string()) - .unwrap_or(usd_type); - let mtype = mtlx_type(&ty); - let default = attr - .get_at::(eval_time()) - .ok() - .flatten() - .and_then(|_| self.literal_text(&attr, mtype)) - .and_then(|text| literal_value(&text, mtype)); - let colorspace = attr - .metadata::("colorSpace") - .ok() - .flatten() - .and_then(|v| v.as_str().map(str::to_owned)); - Some(Input { - name: name.to_string(), - type_name: mtype.to_string(), - source: Source::Interface { - name: channel, - default, - }, - colorspace, - text: None, - interface: None, - }) - } - Resolved::Node { name: node, output } => { - let type_name = self - .nodes - .iter() - .find(|n| n.name == node) - .map(|n| n.type_name.clone()) - .unwrap_or_else(|| mtlx_type(&usd_type).to_string()); - Some(Input { - name: name.to_string(), - type_name, - source: Source::Node { name: node, output }, - colorspace: None, - text: None, - interface: None, - }) - } - Resolved::Value(owner) => { - let ty = owner - .type_name() - .ok() - .flatten() - .map(|t| t.as_str().to_string()) - .unwrap_or(usd_type); - let mtype = mtlx_type(&ty); - let text = self.literal_text(&owner, mtype)?; - let Some(value) = literal_value(&text, mtype) else { - // Left unauthored, so it takes its nodedef default. - self.reported - .push(format!("{}: {text:?} is not a {mtype} value", owner.path())); - return None; - }; - let source = Source::Value(value); - let colorspace = owner - .metadata::("colorSpace") - .ok() - .flatten() - .and_then(|v| v.as_str().map(str::to_owned)); - Some(Input { - name: name.to_string(), - type_name: mtype.to_string(), - source, - colorspace, - text: Some(text), - interface: None, - }) - } + /// The input `name` taking the parameter `p` (its USD type `usd_type` + /// when the parameter carries none): a literal, or the value graph's + /// interface channel. + fn parameter_input( + &mut self, + name: &str, + at: &str, + usd_type: &str, + p: &Parameter, + ) -> Option { + let ty = p.type_name.as_deref().unwrap_or(usd_type); + let mtype = mtlx_type(ty); + if let Some(channel) = &p.interface { + let default = p + .value + .as_ref() + .and_then(|v| self.literal_text(v, at, mtype)) + .and_then(|text| literal_value(&text, mtype)); + return Some(Input { + name: name.to_string(), + type_name: mtype.to_string(), + source: Source::Interface { + name: channel.clone(), + default, + }, + colorspace: p.color_space.clone(), + text: None, + interface: None, + }); } - } - - /// Follows `attr`'s connection — through graph outputs and interface - /// inputs — to a shader output or to the attribute whose value it takes. - /// `None` when it leads nowhere (an unconnected, unauthored interface - /// input, a non-MaterialX shader, a cycle): the input stays unauthored - /// and takes its nodedef default. - fn resolve(&mut self, attr: &Attribute, hops: usize) -> Option { - let targets = attr.connections().unwrap_or_default(); - let Some(target) = targets.first() else { - // An `inputs:` / `outputs:` with no connection forwards its own - // value, if it has one. - return attr - .get_at::(eval_time()) - .ok() - .flatten() - .map(|_| Resolved::Value(attr.clone())); - }; - if hops >= MAX_HOPS { + let text = self.literal_text(p.value.as_ref()?, at, mtype)?; + let Some(value) = literal_value(&text, mtype) else { + // Left unauthored, so it takes its nodedef default. self.reported - .push(format!("{}: connection chain too long — cut", attr.path())); + .push(format!("{at}: {text:?} is not a {mtype} value")); return None; - } - let (prim_path, prop) = target.split_property()?; - // An interface input of the value graph being translated: the - // host's channel, whatever value it authors. - if self.interface.as_deref() == Some(prim_path.as_str()) - && let Some(channel) = prop.strip_prefix("inputs:") - { - let attr = prim_at(self.stage, prim_path.clone()).attribute(prop); - return Some(Resolved::Interface { - attr, - name: channel.to_string(), - }); - } - let prim = prim_at(self.stage, prim_path); - let is_shader = prim - .type_name() - .ok() - .flatten() - .is_some_and(|t| t.as_str() == "Shader"); - match prop.strip_prefix("outputs:") { - Some(output) if is_shader => { - let name = self.node(&prim)?; - Some(Resolved::Node { - name, - output: (output != "out").then(|| output.to_string()), - }) - } - // A container's output or interface input forwards whatever it - // is connected to, or its own value. - _ => { - let next = prim.attribute(prop); - self.resolve(&next, hops + 1) - } - } + }; + Some(Input { + name: name.to_string(), + type_name: mtype.to_string(), + source: Source::Value(value), + colorspace: p.color_space.clone(), + text: Some(text), + interface: None, + }) } - /// An attribute's value as the text a MaterialX `value` attribute would - /// hold. `filename`s are resolved against the layer that authored them, - /// as every USD asset path is, and written absolute. - fn literal_text(&mut self, attr: &Attribute, mtype: &str) -> Option { - let value = attr.get_at::(eval_time()).ok().flatten()?; + /// A value as the text a MaterialX `value` attribute would hold. + /// `filename`s are written absolute, resolved as every USD asset path is. + fn literal_text(&mut self, value: &sdf::Value, at: &str, mtype: &str) -> Option { let join = |v: &[f64]| { v.iter() .map(|x| format!("{}", *x as f32)) .collect::>() .join(", ") }; - Some(match &value { + Some(match value { sdf::Value::Bool(b) => b.to_string(), sdf::Value::Int(i) => i.to_string(), sdf::Value::Float(x) => format!("{x}"), @@ -436,14 +349,20 @@ impl Builder<'_> { sdf::Value::Matrix3d(m) => join(&m.0), sdf::Value::String(s) => s.clone(), sdf::Value::Token(t) => t.as_str().to_string(), - sdf::Value::AssetPath(_) if mtype == "filename" => asset_path(attr, self.stage_path)? - .to_string_lossy() - .into_owned(), + sdf::Value::AssetPath(_) if mtype == "filename" => { + let layer_dir = || { + let attr = sdf::Path::new(at).ok()?; + let (prim, name) = attr.split_property()?; + (self.layer_dir)(&prim, name) + }; + asset_value_path(value, self.stage_path, &layer_dir)? + .to_string_lossy() + .into_owned() + } sdf::Value::AssetPath(p) => p.as_str().to_string(), other => { self.reported.push(format!( - "{}: value of type {:?} not translated", - attr.path(), + "{at}: value of type {:?} not translated", std::mem::discriminant(other) )); return None; @@ -452,21 +371,6 @@ impl Builder<'_> { } } -/// Where a connection ends. -enum Resolved { - /// A shader output: the node, and the output when not the default `out`. - Node { - name: String, - output: Option, - }, - /// The attribute whose value the input takes. - Value(Attribute), - /// An interface input of the value graph being translated - /// ([`translate_value_graph`]): the channel `name`, and the attribute - /// whose value is its default. - Interface { attr: Attribute, name: String }, -} - /// The MaterialX type tokens a nodedef name spells its signature with. const TYPES: [&str; 18] = [ "float", @@ -538,7 +442,7 @@ fn nodedef_category(id: &str) -> (String, Option<&str>) { /// The MaterialX type of a node: a closure or shader type when its category /// or signature says so, else its `outputs:out`'s USD type, else the /// signature's. -fn node_type(category: &str, signature: Option<&str>, prim: &Prim) -> String { +fn node_type(category: &str, signature: Option<&str>, out: Option<&str>) -> String { let closure = |t: &str| match t { "bsdf" => Some("BSDF"), "edf" => Some("EDF"), @@ -566,13 +470,7 @@ fn node_type(category: &str, signature: Option<&str>, prim: &Prim) -> String { return sig.to_string(); } } - let out = prim - .attribute("outputs:out") - .type_name() - .ok() - .flatten() - .map(|t| t.as_str().to_string()); - match out.as_deref().map(mtlx_type) { + match out.map(mtlx_type) { Some(t) if t != "string" => t.to_string(), _ => signature.unwrap_or("float").to_string(), } @@ -703,8 +601,27 @@ mod tests { let stage = super::super::stage_builder() .open(path.to_str().unwrap()) .expect("stage opens"); - let prim = super::super::prim_at(&stage, openusd::sdf::path("/S").unwrap()); - let net = translate(&stage, &path, &library, Some(&prim), None); + let network = super::shading::Network { + material: openusd::sdf::path("/").unwrap(), + nodes: [( + "/S".to_string(), + super::shading::Node { + id: "ND_k_v2".into(), + ..Default::default() + }, + )] + .into(), + ..Default::default() + }; + let at = |p: &openusd::sdf::Path| PrimData::test_at(&stage, p); + let net = translate( + &at, + &path, + &|_, _| None, + &library, + Some((&network, "/S")), + None, + ); assert!(net.doc.reported.is_empty(), "{:?}", net.doc.reported); let c = net .doc diff --git a/crates/crust-core/src/scene/usd_import/passes.rs b/crates/crust-core/src/scene/usd_import/passes.rs index dd7cc1744..caf8a7c9c 100644 --- a/crates/crust-core/src/scene/usd_import/passes.rs +++ b/crates/crust-core/src/scene/usd_import/passes.rs @@ -34,17 +34,30 @@ use crate::warning; use std::ops::Range; -use openusd::sdf; -use openusd::usd::{CollectionAPI, MembershipQuery, Prim, Stage}; -use openusd_schemas::render::{COLLECTION_CAMERA_VISIBILITY, COLLECTION_MATTE, COLLECTION_PRUNE}; +use std::rc::Rc; + +use moho::openusd::sdf; +use moho::openusd::usd::CollectionAPI; +use moho::scene_index::{CollectionMembership, SceneIndex}; +use moho::stage::StageSceneIndex; +use moho::tokens::usd_prim_info as prim_info; use tracing::debug; use crate::light::{Light, LightList}; + +// A `RenderPass`'s collections (`UsdRenderPass`'s schema). openusd-schemas +// dropped its constants for them at d7d2a29, keeping only the +// `renderVisibility` view (`Pass::render_visibility_collection`), so the +// names are spelled here. +const COLLECTION_CAMERA_VISIBILITY: &str = "cameraVisibility"; +const COLLECTION_PRUNE: &str = "prune"; +const COLLECTION_MATTE: &str = "matte"; use crate::ray::{MASK_CAMERA, RayMask}; use crate::rt_world::WorldBuilder; -use super::light_links::{Opinions, inside_instance, opinions}; -use super::prim_at; +use super::index::Input; +use super::index::data::PrimData; +use super::light_links::Opinions; /// `renderVisibility`, which `openusd-schemas` names no constant for. const COLLECTION_RENDER_VISIBILITY: &str = "renderVisibility"; @@ -91,11 +104,12 @@ impl Which { /// The active pass, through the traversal. pub(super) struct ActivePass { path: sdf::Path, - /// The chunk being walked's queries; `None` for a collection that - /// restricts nothing there. Decided per chunk, not on the index stage: - /// a pass can take its collections' opinions from a payload, which only - /// a chunk's stage loads. - queries: [Option; 2], + /// The chunk being walked's stage index, which answers membership for + /// each collection that restricts anything there (`None` for one that + /// does not). Decided per chunk, not on the payload-free scene: a pass can + /// take its collections' opinions from a payload, which only a chunk's + /// stage loads. + queries: [Option>; 2], /// Per collection, whether a target inside an instance / a nested /// collection a chunk does not compose was warned about already. warned_instance: [bool; 2], @@ -105,11 +119,13 @@ pub(super) struct ActivePass { } impl ActivePass { - /// The pass at `path` on the payload-free `index` stage, which + /// The pass at `path` on the payload-free scene, which /// [`super::settings::check_pass`] has found to be a `RenderPass`. Warns - /// once per collection it does not read that restricts anything. - pub(super) fn read(index: &Stage, path: &sdf::Path) -> Self { - let prim = prim_at(index, path.clone()); + /// once per collection it does not read that restricts anything (a pass's + /// `prune` and `renderVisibility` collections, which Moho lists among its + /// `collections`, M6; their opinions are read from the generic data). + pub(super) fn read(scene: &dyn SceneIndex, path: &sdf::Path) -> Self { + let prim = PrimData::at(scene, path); for (name, fallback_root) in [ (COLLECTION_PRUNE, false), (COLLECTION_RENDER_VISIBILITY, true), @@ -146,12 +162,13 @@ impl ActivePass { &self.path } - /// Builds the queries for the chunk `stage` is about to be walked from, - /// for each collection that restricts anything on that stage. - pub(super) fn begin_chunk(&mut self, stage: &Stage) { + /// Builds the queries for the chunk `input` is about to be walked from, + /// for each collection that restricts anything on its stage. + pub(super) fn begin_chunk(&mut self, input: &Input) { self.queries = [None, None]; - let prim = prim_at(stage, self.path.clone()); - if !prim.is_valid().unwrap_or(false) { + let index: &dyn SceneIndex = input.stage.as_ref(); + let prim = PrimData::at(index, &self.path); + if !prim.is_defined() { debug!( "Render pass {} is not composed on this chunk's stage", self.path @@ -160,18 +177,19 @@ impl ActivePass { } for (k, which) in [Which::Matte, Which::Camera].into_iter().enumerate() { if which.restricts(&opinions(&prim, which.name())) { - self.queries[k] = self.query(stage, &prim, which, k); + self.queries[k] = self.query(input, &prim, which, k); } } } fn query( &mut self, - stage: &Stage, - prim: &Prim, + input: &Input, + prim: &PrimData, which: Which, k: usize, - ) -> Option { + ) -> Option> { + let index: &dyn SceneIndex = input.stage.as_ref(); let name = which.name(); let path = &self.path; let o = opinions(prim, name); @@ -180,7 +198,7 @@ impl ActivePass { .includes .iter() .chain(&o.excludes) - .find(|t| inside_instance(stage, t)) + .find(|t| inside_instance(index, t)) { warning!( RenderPassTargetInInstance, @@ -193,7 +211,7 @@ impl ActivePass { if !self.warned_nested[k] && let Some(t) = o.includes.iter().find(|t| { CollectionAPI::instance_at_path(t) - .is_some_and(|(owner, _)| !prim_at(stage, owner).is_valid().unwrap_or(false)) + .is_some_and(|(owner, _)| !PrimData::at(index, &owner).is_defined()) }) { warning!( @@ -204,22 +222,28 @@ impl ActivePass { ); self.warned_nested[k] = true; } - match CollectionAPI::from_prim_unchecked(prim.clone(), name).membership_query() { - Ok(q) => Some(q), - Err(e) => { - debug!("{path}: collection:{name} unreadable ({e}) — read as its fallback"); - None - } + // The chunk's stage index judges membership through openusd's query, + // membership expressions and their predicates included. + if input.stage.includes(path, name, path).is_none() { + debug!("{path}: collection:{name} unreadable — read as its fallback"); + return None; } + Some(input.stage.clone()) } /// Whether the prim at `path` is held out, and whether it is hidden from /// the camera, by the chunk's queries. fn judge(&self, path: &sdf::Path) -> (bool, bool) { let [matte, camera] = &self.queries; + let includes = + |q: &Rc, which: Which| q.includes(&self.path, which.name(), path); ( - matte.as_ref().is_some_and(|q| q.is_included(path)), - camera.as_ref().is_some_and(|q| !q.is_included(path)), + matte + .as_ref() + .is_some_and(|q| includes(q, Which::Matte) == Some(true)), + camera + .as_ref() + .is_some_and(|q| includes(q, Which::Camera) == Some(false)), ) } @@ -287,3 +311,36 @@ impl ActivePass { } } } + +/// The opinions collection `name` authors on `prim`, from the generic data: +/// what decides whether it restricts anything, and what its warnings name. +fn opinions(prim: &PrimData, name: &str) -> Opinions { + let prop = |suffix: &str| format!("collection:{name}:{suffix}"); + Opinions { + includes: prim.targets(&prop("includes")), + excludes: prim.targets(&prop("excludes")), + include_root: prim.custom_bool(&prop("includeRoot")), + expansion_rule: prim.custom_token(&prop("expansionRule")), + expression: prim.value(&prop("membershipExpression")).is_some(), + } +} + +/// Whether some strict ancestor of `path` is a native instance (Moho's +/// `__usdPrimInfo/niPrototypePath`), i.e. `path` names geometry inside a +/// prototype. +fn inside_instance(index: &dyn SceneIndex, path: &sdf::Path) -> bool { + let mut p = path.parent(); + while let Some(a) = p { + if a.is_abs_root() { + return false; + } + if PrimData::at(index, &a) + .locate([prim_info::USD_PRIM_INFO, prim_info::NI_PROTOTYPE_PATH]) + .is_some() + { + return true; + } + p = a.parent(); + } + false +} diff --git a/crates/crust-core/src/scene/usd_import/precomp.rs b/crates/crust-core/src/scene/usd_import/precomp.rs index fc2f7b54a..ca271f504 100644 --- a/crates/crust-core/src/scene/usd_import/precomp.rs +++ b/crates/crust-core/src/scene/usd_import/precomp.rs @@ -9,12 +9,12 @@ //! a refused sample filter's outputs read their clear value, a refused display //! operation passes its input through, and an unbound input reads its default. +use moho::openusd; use std::collections::HashMap; use std::path::Path; use std::sync::Arc; use openusd::sdf; -use openusd::usd::{Prim, Stage}; use tracing::debug; use crate::aov::{AovRequest, AovSource, AovVar, FilterSource, Precision}; @@ -23,11 +23,11 @@ use crate::precomp::{ }; use crate::warning; -use super::assets::asset_path; -use super::attrs::{custom_bool, custom_f32, custom_i32, custom_token, decode_vec3, prim_value}; -use super::materials::shader_info_id; +use super::assets::asset_value_path; +use super::attrs::decode_vec3; +use super::index::data::PrimData; +use super::mtlx_network::LayerDir; use super::mtlx_network::translate_value_graph; -use super::prim_at; use super::products::FilterTarget; /// The name a sample filter input reads the beauty radiance by. @@ -37,23 +37,30 @@ const BEAUTY: &str = "beauty"; /// vars of `request` (`targets`, by var prim path) into their filters and /// dropping the ones that cannot be. `None` when the prim authors no filter /// list and no `crust:display`. +/// +/// Read from the scene index: the settings prim and the display filters from +/// their generic data, and the sample filters' graphs (no material, so no +/// `material` network) from their prims' generic data +/// ([`super::index::network::graph`]). Whether a prim is a `Shader` — whose +/// `info:id` alone names a display operation or a graph node — is its USD +/// type, `__usdPrimInfo/typeName`. pub(super) fn import_precomp( - stage: &Stage, + scene: &dyn moho::scene_index::SceneIndex, stage_path: &Path, + layer_dir: &LayerDir<'_>, settings: &sdf::Path, request: &mut AovRequest, targets: &HashMap, ) -> Option> { - let prim = prim_at(stage, settings.clone()); + let prim = PrimData::at(scene, settings); + // A list the prim authors, empty included; none when it has no such + // relationship (a `crust:*` relationship exists only where authored). let list = |name: &str| -> Option> { - let rel = prim.relationship(name); - rel.has_authored_targets() - .unwrap_or(false) - .then(|| rel.targets().unwrap_or_default()) + prim.has_relationship(name).then(|| prim.targets(name)) }; let sample_paths = list("crust:sampleFilters"); let display_paths = list("crust:displayFilters"); - let display_name = custom_token(&prim, "crust:display").filter(|d| !d.is_empty()); + let display_name = prim.custom_token("crust:display").filter(|d| !d.is_empty()); if sample_paths.is_none() && display_paths.is_none() && display_name.is_none() { // Filter vars with no filter to read. drop_unresolved(request, targets, &[], &[]); @@ -65,7 +72,7 @@ pub(super) fn import_precomp( // The sample filters' graphs first: a var reading one needs its outputs. let graphs: Vec = sample_paths .iter() - .map(|p| Graph::read(stage, stage_path, p)) + .map(|p| Graph::read(scene, stage_path, layer_dir, p)) .collect(); drop_unresolved(request, targets, &graphs, &display_paths); let vars = Vars::of(request); @@ -78,8 +85,9 @@ pub(super) fn import_precomp( let mut display: Vec = Vec::with_capacity(display_paths.len()); for (index, path) in display_paths.iter().enumerate() { let filter = read_display( - stage, + scene, stage_path, + layer_dir, path, index as u16, &display_paths, @@ -115,6 +123,11 @@ pub(super) fn import_precomp( Some(Arc::new(precomp)) } +/// Whether `prim` is a `Shader` (`UsdShadeShader`): its USD type. +fn is_shader(prim: &PrimData) -> bool { + prim.is_a("Shader") +} + /// Every var of the render, by layer name: the first var of that name wins, /// in product order. struct Vars<'a> { @@ -142,9 +155,14 @@ struct Graph { } impl Graph { - fn read(stage: &Stage, stage_path: &Path, path: &sdf::Path) -> Graph { - let prim = prim_at(stage, path.clone()); - let network = translate_value_graph(stage, stage_path, &prim); + fn read( + scene: &dyn moho::scene_index::SceneIndex, + stage_path: &Path, + layer_dir: &LayerDir<'_>, + path: &sdf::Path, + ) -> Graph { + let network = + translate_value_graph(&|p| PrimData::at(scene, p), stage_path, layer_dir, path); let roots: Vec<(&str, Option<&str>)> = network .outputs .iter() @@ -403,8 +421,9 @@ fn beauty_var() -> AovVar { /// Display filter `index` at `path`. #[allow(clippy::too_many_arguments)] fn read_display( - stage: &Stage, + scene: &dyn moho::scene_index::SceneIndex, stage_path: &Path, + layer_dir: &LayerDir<'_>, path: &sdf::Path, index: u16, paths: &[sdf::Path], @@ -412,11 +431,14 @@ fn read_display( earlier: &[DisplayFilter], vars: &Vars<'_>, ) -> DisplayFilter { - let prim = prim_at(stage, path.clone()); - let shader = openusd_schemas::shade::Shader::get(stage, path.clone()) - .ok() - .flatten(); - let id = shader.as_ref().and_then(shader_info_id).unwrap_or_default(); + let prim = PrimData::at(scene, path); + // A `Shader`'s `info:id` (`UsdShadeShader::GetIdAttr`), none on any + // other prim. + let id = if is_shader(&prim) { + prim.custom_token("info:id").unwrap_or_default() + } else { + String::new() + }; let names = ImageNames { path, index, @@ -429,13 +451,15 @@ fn read_display( let op = match id.as_str() { "crust:convolve" => Operation::Convolve { input: image("in"), - kernel_path: asset_path(&prim.attribute("inputs:kernel"), stage_path), + kernel_path: prim.value("inputs:kernel").and_then(|v| { + asset_value_path(&v, stage_path, &|| layer_dir(path, "inputs:kernel")) + }), kernel: None, - scale: custom_f32(&prim, "inputs:kernelScale").unwrap_or(1.0), + scale: prim.custom_f32("inputs:kernelScale").unwrap_or(1.0), normalize: input_bool(&prim, "inputs:normalize").unwrap_or(true), }, "crust:blur" => { - let radius = custom_f32(&prim, "inputs:radius").unwrap_or(1.0); + let radius = prim.custom_f32("inputs:radius").unwrap_or(1.0); if radius.is_nan() || radius > crate::precomp::MAX_BLUR_RADIUS { warning!( PrecompInvalidValue, @@ -458,17 +482,19 @@ fn read_display( } else { Field::Radial { center: float2(&prim, "inputs:center"), - strength: custom_f32(&prim, "inputs:strength").unwrap_or(0.0), + strength: prim.custom_f32("inputs:strength").unwrap_or(0.0), } }; Operation::VectorBlur { input: image("in"), field, - taps: custom_i32(&prim, "inputs:taps").unwrap_or(8).clamp(1, 256) as u32, + taps: prim.custom_i32("inputs:taps").unwrap_or(8).clamp(1, 256) as u32, } } "crust:merge" => { - let token = custom_token(&prim, "inputs:operation").unwrap_or_else(|| "over".into()); + let token = prim + .custom_token("inputs:operation") + .unwrap_or_else(|| "over".into()); let mode = token.parse::().unwrap_or_else(|()| { warning!( SettingsInvalidValue, @@ -483,7 +509,7 @@ fn read_display( b: image("b"), alpha: authored(&prim, "inputs:alpha").then(|| image("alpha")), mode, - mix: custom_f32(&prim, "inputs:mix").unwrap_or(1.0), + mix: prim.custom_f32("inputs:mix").unwrap_or(1.0), } } "crust:grade" => Operation::Grade { @@ -537,9 +563,11 @@ impl ImageNames<'_> { /// The image `token inputs:` names: a RenderVar, a sample-filter /// output (`.`), an earlier display filter (its prim /// name), or `beauty`. - fn image(&self, prim: &Prim, input: &str) -> Image { + fn image(&self, prim: &PrimData, input: &str) -> Image { let path = self.path; - let Some(name) = custom_token(prim, &format!("inputs:{input}")).filter(|n| !n.is_empty()) + let Some(name) = prim + .custom_token(&format!("inputs:{input}")) + .filter(|n| !n.is_empty()) else { warning!( PrecompUnboundInput, @@ -613,18 +641,19 @@ impl ImageNames<'_> { } } -fn authored(prim: &Prim, name: &str) -> bool { - prim_value(prim, name).is_some() +fn authored(prim: &PrimData, name: &str) -> bool { + prim.value(name).is_some() } /// A bool input, authored as a bool or an int. -fn input_bool(prim: &Prim, name: &str) -> Option { - custom_bool(prim, name).or_else(|| custom_i32(prim, name).map(|i| i != 0)) +fn input_bool(prim: &PrimData, name: &str) -> Option { + prim.custom_bool(name) + .or_else(|| prim.custom_i32(name).map(|i| i != 0)) } /// A `float2` (or `double2`) input. -fn float2(prim: &Prim, name: &str) -> Option<[f32; 2]> { - match prim_value(prim, name)? { +fn float2(prim: &PrimData, name: &str) -> Option<[f32; 2]> { + match prim.value(name)? { sdf::Value::Vec2f(v) => Some([v.x, v.y]), sdf::Value::Vec2d(v) => Some([v.x as f32, v.y as f32]), _ => None, @@ -632,8 +661,8 @@ fn float2(prim: &Prim, name: &str) -> Option<[f32; 2]> { } /// A `color3f` input, or a float in every channel. -fn color(prim: &Prim, name: &str) -> Option<[f32; 3]> { - let v = prim_value(prim, name)?; +fn color(prim: &PrimData, name: &str) -> Option<[f32; 3]> { + let v = prim.value(name)?; decode_vec3(v.clone()) .map(|c| c.to_array()) .or_else(|| super::attrs::decode_f32(v).map(|f| [f; 3])) diff --git a/crates/crust-core/src/scene/usd_import/preview.rs b/crates/crust-core/src/scene/usd_import/preview.rs index 2f4e2155b..1e5a82c75 100644 --- a/crates/crust-core/src/scene/usd_import/preview.rs +++ b/crates/crust-core/src/scene/usd_import/preview.rs @@ -1,24 +1,172 @@ -//! `UsdPreviewSurface` (+ `UsdUVTexture`) → [`OpenPBR`] / [`crate::PreviewSurface`]. +//! `UsdPreviewSurface` (+ `UsdUVTexture`) → [`OpenPBR`] / [`crate::PreviewSurface`], +//! read from the material's network in the scene index ([`super::index::network`]). use crate::warning; use std::sync::Arc; use glam::Vec3A; -use openusd::sdf; -use openusd::usd::Stage; -use openusd_schemas::shade; -use openusd_schemas::shade::{ - Connectable, ProducerFilter, ReadPreviewSurface, Shader, ShadingAttribute, -}; +use moho::openusd::sdf; use tracing::debug; use crate::color::Space; use crate::material::{Displacement, DisplacementValue, Material, OpenPBR}; use super::ImportCaches; -use super::assets::{asset_path, load_uv_texture}; -use super::attrs::{attr_own_color_space, decode_float4, in_working, value_at}; -use super::materials::{material_ptex, shader_info_id}; +use super::assets::{asset_value_path, load_uv_texture}; +use super::attrs::decode_float4; +use super::index::data::{PrimData, color_space}; +use super::index::network::{self, Network}; +use super::materials::{MatSource, material_ptex, named_space}; + +/// `UsdUVTexture`'s identifier and its inputs. +mod tk { + pub(super) const USD_UV_TEXTURE: &str = "UsdUVTexture"; + pub(super) const USD_PRIMVAR_READER_FLOAT2: &str = "UsdPrimvarReader_float2"; + pub(super) const FILE: &str = "file"; + pub(super) const ST: &str = "st"; + pub(super) const VARNAME: &str = "varname"; + pub(super) const SOURCE_COLOR_SPACE: &str = "sourceColorSpace"; + pub(super) const FALLBACK: &str = "fallback"; + pub(super) const SCALE: &str = "scale"; + pub(super) const BIAS: &str = "bias"; + pub(super) const WRAP_S: &str = "wrapS"; + pub(super) const WRAP_T: &str = "wrapT"; +} + +/// One `UsdPreviewSurface` input, as openusd-schemas' `read_preview_surface` +/// reads it: the `UsdUVTexture` feeding it (its first upstream node, when it +/// is one with a `file`), else the value the shader authors on the input +/// itself (an interface connection is not followed), else unset. +enum Channel { + Unset, + Value(T), + Texture, +} + +impl Channel { + fn value(&self) -> Option<&T> { + match self { + Channel::Value(v) => Some(v), + _ => None, + } + } + + fn textured(&self) -> bool { + matches!(self, Channel::Texture) + } + + fn is_set(&self) -> bool { + !matches!(self, Channel::Unset) + } +} + +/// A `UsdPreviewSurface` read off the network: its node and every channel. +struct PreviewRead { + diffuse_color: Channel, + emissive_color: Channel, + specular_color: Channel, + metallic: Channel, + roughness: Channel, + clearcoat: Channel, + clearcoat_roughness: Channel, + opacity: Channel, + opacity_threshold: Channel, + ior: Channel, + normal: Channel, + occlusion: Channel, +} + +/// Whether input `name` of the node `node` is fed by a `UsdUVTexture` with a +/// `file` value (`connected_texture_file`). +fn connected_texture(network: &Network, node: &str, name: &str) -> bool { + let Some(first) = network + .nodes + .get(node) + .and_then(|n| n.connections.get(name)) + .and_then(|c| c.first()) + else { + return false; + }; + network.nodes.get(&first.node).is_some_and(|tex| { + tex.id == tk::USD_UV_TEXTURE + && tex + .parameters + .get(tk::FILE) + .and_then(|p| p.value.as_ref()) + .and_then(sdf::Value::as_str) + .is_some() + }) +} + +fn color_channel(network: &Network, node: &str, prim: &PrimData, name: &str) -> Channel { + if connected_texture(network, node, name) { + return Channel::Texture; + } + match prim.resolved(&format!("inputs:{name}")) { + Some(sdf::Value::Vec3f(v)) => Channel::Value(Vec3A::new(v.x, v.y, v.z)), + Some(sdf::Value::Vec3d(v)) => { + Channel::Value(Vec3A::new(v.x as f32, v.y as f32, v.z as f32)) + } + Some(sdf::Value::Vec3h(v)) => { + Channel::Value(Vec3A::new(v.x.to_f32(), v.y.to_f32(), v.z.to_f32())) + } + _ => Channel::Unset, + } +} + +fn scalar_channel(network: &Network, node: &str, prim: &PrimData, name: &str) -> Channel { + if connected_texture(network, node, name) { + return Channel::Texture; + } + match prim.resolved(&format!("inputs:{name}")) { + Some(sdf::Value::Float(f)) => Channel::Value(f), + Some(sdf::Value::Double(d)) => Channel::Value(d as f32), + Some(sdf::Value::Half(h)) => Channel::Value(h.to_f32()), + Some(sdf::Value::Int(i)) => Channel::Value(i as f32), + _ => Channel::Unset, + } +} + +/// The material's `UsdPreviewSurface`, as `read_preview_surface` finds it: the +/// universal surface terminal, else the authored contexts' in sorted order; +/// `None` unless its first source is a `UsdPreviewSurface` node. +fn read_preview(src: &MatSource) -> Option { + let resolved = network::resolve(&src.networks, "surface", &[]).or_else(|| { + let mut contexts: Vec<&str> = src + .networks + .iter() + .filter(|(c, n)| !c.is_empty() && n.terminals.contains_key("surface")) + .map(|(c, _)| c.as_str()) + .collect(); + contexts.sort(); + (!contexts.is_empty()) + .then(|| network::resolve(&src.networks, "surface", &contexts)) + .flatten() + })?; + let (network, Some((node, shader))) = resolved else { + return None; + }; + if shader.id != "UsdPreviewSurface" { + return None; + } + let prim = src.node(network, node)?; + let c = |name: &str| color_channel(network, node, &prim, name); + let f = |name: &str| scalar_channel(network, node, &prim, name); + Some(PreviewRead { + diffuse_color: c("diffuseColor"), + emissive_color: c("emissiveColor"), + specular_color: c("specularColor"), + metallic: f("metallic"), + roughness: f("roughness"), + clearcoat: f("clearcoat"), + clearcoat_roughness: f("clearcoatRoughness"), + opacity: f("opacity"), + opacity_threshold: f("opacityThreshold"), + ior: f("ior"), + normal: c("normal"), + occlusion: f("occlusion"), + }) +} /// A `UsdPreviewSurface` material: its constants as an [`OpenPBR`], wrapped in /// a [`crate::PreviewSurface`] when any input is driven by a `UsdUVTexture`. @@ -26,20 +174,25 @@ use super::materials::{material_ptex, shader_info_id}; /// An untextured surface — and one whose every texture connection turned out /// unusable — stays the plain `OpenPBR` it always was, so it neither builds a /// UV table nor pays a per-hit evaluation. +/// +/// `shader` is the surface node the material resolves to (in `network`), whose +/// inputs are followed to textures and whose colours name their space. pub(super) fn preview_surface_material( - stage: &Stage, - mat_path: &sdf::Path, - shader: &Shader, + src: &MatSource, + network: &Network, + shader: &str, caches: &mut ImportCaches<'_>, ) -> Arc { use crate::material::preview_surface::Target; - let ps = shade::read_preview_surface(stage, mat_path).ok().flatten(); - let mut base = match &ps { - Some(ps) => preview_surface_openpbr(ps, shader, caches.working), - None => OpenPBR::diffuse(Vec3A::new(0.5, 0.5, 0.5)), + let mat_path = &src.path; + let shader_prim = src.node(network, shader); + let ps = read_preview(src); + let mut base = match (&ps, &shader_prim) { + (Some(ps), Some(prim)) => preview_surface_openpbr(ps, prim, caches.working), + _ => OpenPBR::diffuse(Vec3A::new(0.5, 0.5, 0.5)), }; - base.base_color_ptex = material_ptex(stage, mat_path, caches); + base.base_color_ptex = material_ptex(src, caches); base.luma = caches.luma; let Some(ps) = ps else { return Arc::new(base); @@ -49,20 +202,20 @@ pub(super) fn preview_surface_material( // to a `UsdUVTexture` output, which is the question; the walk below then // reads the whole node rather than just its file. let textured = [ - (Target::DiffuseColor, ps.diffuse_color.texture().is_some()), - (Target::EmissiveColor, ps.emissive_color.texture().is_some()), - (Target::Metallic, ps.metallic.texture().is_some()), - (Target::Roughness, ps.roughness.texture().is_some()), + (Target::DiffuseColor, ps.diffuse_color.textured()), + (Target::EmissiveColor, ps.emissive_color.textured()), + (Target::Metallic, ps.metallic.textured()), + (Target::Roughness, ps.roughness.textured()), // Translucency only: a textured cutout mask is read apart, below. ( Target::Opacity, - ps.opacity.texture().is_some() && opacity_transmission(&ps), + ps.opacity.textured() && opacity_transmission(&ps), ), - (Target::Ior, ps.ior.texture().is_some()), - (Target::Clearcoat, ps.clearcoat.texture().is_some()), + (Target::Ior, ps.ior.textured()), + (Target::Clearcoat, ps.clearcoat.textured()), ( Target::ClearcoatRoughness, - ps.clearcoat_roughness.texture().is_some(), + ps.clearcoat_roughness.textured(), ), ]; let mut inputs = Vec::new(); @@ -77,8 +230,8 @@ pub(super) fn preview_surface_material( for (target, is_textured) in textured { if is_textured && let Some((input, varname)) = preview_uv_input( - stage, - mat_path, + src, + network, shader, target.input_name(), if target.is_colour() { @@ -93,8 +246,8 @@ pub(super) fn preview_surface_material( inputs.push((target, input)); } } - let normal = if ps.normal.texture().is_some() { - preview_uv_input(stage, mat_path, shader, "normal", TexRole::Value, caches).map( + let normal = if ps.normal.textured() { + preview_uv_input(src, network, shader, "normal", TexRole::Value, caches).map( |(input, varname)| { note(varname); input @@ -106,8 +259,8 @@ pub(super) fn preview_surface_material( // `opacityThreshold > 0` with a textured opacity: the mask is sampled // per hit. (A constant one is already thresholded into // `geometry_opacity`.) - let cutout = if !opacity_transmission(&ps) && ps.opacity.texture().is_some() { - preview_uv_input(stage, mat_path, shader, "opacity", TexRole::Value, caches).map( + let cutout = if !opacity_transmission(&ps) && ps.opacity.textured() { + preview_uv_input(src, network, shader, "opacity", TexRole::Value, caches).map( |(input, varname)| { note(varname); let threshold = ps.opacity_threshold.value().copied().unwrap_or(0.0); @@ -180,62 +333,52 @@ enum TexRole { /// `role` says what the texture holds, which decides its decode (see /// [`TexRole`]). fn preview_uv_input( - stage: &Stage, - mat_path: &sdf::Path, - shader: &Shader, + src: &MatSource, + network: &Network, + shader: &str, name: &str, role: TexRole, caches: &mut ImportCaches<'_>, ) -> Option<(crate::material::preview_surface::UvInput, Option)> { use crate::material::preview_surface::{TexOutput, UvInput, Wrap}; - use shade::nodes::tokens as tk; - let surface_input = shader.input(name); - let produced = surface_input - .value_producing_attributes(ProducerFilter::ShaderOutputsOnly) - .ok()?; - let source = produced.first()?; - let output = match source { - ShadingAttribute::Output(o) => TexOutput::from_name(o.base_name()), - ShadingAttribute::Input(_) => None, - }; - let Some(output) = output else { + let mat_path = &src.path; + let source = network.nodes.get(shader)?.connections.get(name)?.first()?; + let Some(output) = TexOutput::from_name(&source.output) else { + let at = network + .path(&source.node) + .map_or_else(|| source.node.clone(), |p| p.to_string()); warning!( PreviewUnsupportedConnection, at = mat_path, - "UsdPreviewSurface at {mat_path}: {name} connects to {}, not a UsdUVTexture \ - r/g/b/a/rgb output — using its constant", - source.path() + "UsdPreviewSurface at {mat_path}: {name} connects to {at}.outputs:{}, not a \ + UsdUVTexture r/g/b/a/rgb output — using its constant", + source.output ); return None; }; - let tex = Shader::get(stage, source.path().prim_path()) - .ok() - .flatten()?; - if shader_info_id(&tex).as_deref() != Some(tk::USD_UV_TEXTURE) { + let tex = network.nodes.get(&source.node)?; + if tex.id != tk::USD_UV_TEXTURE { return None; } + let tex_path = network.path(&source.node)?; - // The value an input carries, connection followed. - let value = |input: &shade::Input| -> Option { - let produced = input.value_producing_attributes(ProducerFilter::Any).ok()?; - value_at(produced.first()?.attribute()) - }; - let token = |input: &str| value(&tex.input(input)).and_then(|v| v.as_str().map(str::to_owned)); - let float4 = |input: &str| value(&tex.input(input)).and_then(decode_float4); + // The value an input carries, an interface connection followed: the + // node's parameter. + let value = |input: &str| tex.parameters.get(input).and_then(|p| p.value.clone()); + let token = |input: &str| value(input).and_then(|v| v.as_str().map(str::to_owned)); + let float4 = |input: &str| value(input).and_then(decode_float4); - let file = tex - .input(tk::FILE) - .value_producing_attributes(ProducerFilter::Any) - .ok() - .and_then(|p| p.into_iter().next()) - .and_then(|a| asset_path(a.attribute(), caches.stage_path)); + let file = value(tk::FILE).and_then(|v| { + asset_value_path(&v, caches.stage_path, &|| { + src.layer_dir(&tex_path, "inputs:file") + }) + }); let Some(file) = file else { warning!( PreviewTextureWithoutFile, - at = tex.path(), - "UsdUVTexture {}: no inputs:file — {name} keeps its constant", - tex.path() + at = tex_path, + "UsdUVTexture {tex_path}: no inputs:file — {name} keeps its constant" ); return None; }; @@ -243,7 +386,7 @@ fn preview_uv_input( // metadatum, when authored, which wins over `sourceColorSpace`, the older // and coarser UsdUVTexture mechanism. Only the attribute's own: a scope's // `colorSpace:name` describes its colour values, not how an image file - // is encoded (see `attr_own_color_space`). + // is encoded (see `attrs::attr_own_color_space`). // // A texture that is not a colour is never moved to other primaries, // whatever the file or the working space: a change of primaries mixes a @@ -260,11 +403,11 @@ fn preview_uv_input( } } else { let file_space = tex - .input(tk::FILE) - .value_producing_attributes(ProducerFilter::Any) - .ok() - .and_then(|p| p.into_iter().next()) - .and_then(|a| attr_own_color_space(a.attribute())); + .parameters + .get(tk::FILE) + .and_then(|p| p.color_space.as_deref()) + .filter(|n| !n.is_empty()) + .and_then(|n| named_space(&format!("{tex_path}.inputs:{}", tk::FILE), n)); match file_space { Some(space) => crate::ColorSpace::new(space, caches.working), None => source, @@ -273,26 +416,23 @@ fn preview_uv_input( // Which chart the texture reads. crust carries one per mesh (see // `mesh_uvs`), so a reader naming another primvar is approximated by it. - let st = tex.input(tk::ST); let mut varname = None; - if let Some(reader) = st - .value_producing_attributes(ProducerFilter::ShaderOutputsOnly) - .ok() - .and_then(|p| p.into_iter().next()) - { - let reader = Shader::get(stage, reader.path().prim_path()).ok().flatten(); - let id = reader.as_ref().and_then(shader_info_id); - match (&reader, id.as_deref()) { + if let Some(reader) = tex.connections.get(tk::ST).and_then(|c| c.first()) { + let node = network.nodes.get(&reader.node); + let id = node.map(|n| n.id.clone()).filter(|id| !id.is_empty()); + match (node, id.as_deref()) { (Some(reader), Some(tk::USD_PRIMVAR_READER_FLOAT2)) => { - varname = - value(&reader.input(tk::VARNAME)).and_then(|v| v.as_str().map(str::to_owned)); + varname = reader + .parameters + .get(tk::VARNAME) + .and_then(|p| p.value.as_ref()) + .and_then(|v| v.as_str().map(str::to_owned)); } _ => warning!( PreviewUnreadSt, - at = tex.path(), - "UsdUVTexture {}: st is driven by {id:?}, which is not read — using the \ - mesh chart unchanged", - tex.path() + at = tex_path, + "UsdUVTexture {tex_path}: st is driven by {id:?}, which is not read — using the \ + mesh chart unchanged" ), } } @@ -308,7 +448,11 @@ fn preview_uv_input( // roughness map the dataset does not ship, and roughness 0 turned it into // a mirror where the schema's 0.5 is an ordinary surface. let fallback = float4(tk::FALLBACK) - .or_else(|| value_at(surface_input.attribute()).and_then(decode_float4)) + .or_else(|| { + src.node(network, shader)? + .value(&format!("inputs:{name}")) + .and_then(decode_float4) + }) .or_else(|| preview_surface_default(name)) .unwrap_or([0.0, 0.0, 0.0, 1.0]); let loaded = load_uv_texture(&file, space, mat_path, caches).map(crate::TextureRef); @@ -349,30 +493,28 @@ fn preview_uv_input( /// a shading input does. The texture's primvar reader names the chart the /// mesh reads when the surface itself reads none. pub(super) fn preview_displacement( - stage: &Stage, - mat_path: &sdf::Path, - shader: &Shader, + src: &MatSource, + network: &Network, + shader: &str, caches: &mut ImportCaches<'_>, ) -> Option { - let input = shader.input("displacement"); - let textured = input - .value_producing_attributes(ProducerFilter::ShaderOutputsOnly) - .ok() - .is_some_and(|p| !p.is_empty()); + let node = network.nodes.get(shader)?; + let textured = node + .connections + .get("displacement") + .is_some_and(|c| !c.is_empty()); let constant = |c: f32| { (c != 0.0 && c.is_finite()).then(|| Displacement::new(DisplacementValue::Constant(c))) }; if textured { - let Some((uv, varname)) = preview_uv_input( - stage, - mat_path, - shader, - "displacement", - TexRole::Data, - caches, - ) else { + let Some((uv, varname)) = + preview_uv_input(src, network, shader, "displacement", TexRole::Data, caches) + else { // Already warned about; the input keeps its own constant. - let own = value_at(input.attribute()).and_then(decode_float4)?; + let own = src + .node(network, shader)? + .value("inputs:displacement") + .and_then(decode_float4)?; return constant(own[0]); }; if uv.tex.is_none() { @@ -380,11 +522,10 @@ pub(super) fn preview_displacement( } return Some(Displacement::new(DisplacementValue::Uv(uv)).with_uv_primvar(varname)); } - let value = input - .value_producing_attributes(ProducerFilter::Any) - .ok() - .and_then(|p| p.into_iter().next()) - .and_then(|a| value_at(a.attribute())) + let value = node + .parameters + .get("displacement") + .and_then(|p| p.value.clone()) .and_then(decode_float4)?; let c = value[0]; (c != 0.0 && c.is_finite()).then(|| Displacement::new(DisplacementValue::Constant(c))) @@ -420,12 +561,16 @@ fn preview_surface_default(input: &str) -> Option<[f32; 4]> { /// /// The two colours are in the working space unless their `colorSpace` /// metadatum names another ([`in_working`]). -fn preview_surface_openpbr(ps: &ReadPreviewSurface, shader: &Shader, working: Space) -> OpenPBR { +fn preview_surface_openpbr(ps: &PreviewRead, shader: &PrimData, working: Space) -> OpenPBR { let mut o = OpenPBR::default(); - let color = |name: &str, rgb: Vec3A| in_working(&shader.attribute(name), rgb, working); + // `attrs::in_working`, the space from the shader's own attribute. + let color = |name: &str, rgb: Vec3A| match color_space(shader, name) { + Some(space) => crate::color::convert(rgb, space, working), + None => rgb, + }; if let Some(rgb) = ps.diffuse_color.value() { - o.base_color = color("inputs:diffuseColor", Vec3A::new(rgb[0], rgb[1], rgb[2])); + o.base_color = color("inputs:diffuseColor", *rgb); } if let Some(m) = ps.metallic.value() { o.base_metalness = *m; @@ -443,7 +588,7 @@ fn preview_surface_openpbr(ps: &ReadPreviewSurface, shader: &Shader, working: Sp } } if let Some(rgb) = ps.emissive_color.value() { - o.emission_color = color("inputs:emissiveColor", Vec3A::new(rgb[0], rgb[1], rgb[2])); + o.emission_color = color("inputs:emissiveColor", *rgb); let max = rgb[0].max(rgb[1]).max(rgb[2]); if max > 0.0 { o.emission_luminance = 1.0; @@ -472,6 +617,6 @@ fn preview_surface_openpbr(ps: &ReadPreviewSurface, shader: &Shader, working: Sp /// ALab authors all of its glass (opacity ≈ 0, ior ≈ 1.49). Above 0 it is a /// mask that keeps or discards each point whole, which is the host cutout /// `geometry_opacity` names and does not refract at all. -fn opacity_transmission(ps: &ReadPreviewSurface) -> bool { +fn opacity_transmission(ps: &PreviewRead) -> bool { ps.opacity_threshold.value().is_none_or(|t| *t <= 0.0) } diff --git a/crates/crust-core/src/scene/usd_import/products.rs b/crates/crust-core/src/scene/usd_import/products.rs index c9890f2fb..a483fa6c9 100644 --- a/crates/crust-core/src/scene/usd_import/products.rs +++ b/crates/crust-core/src/scene/usd_import/products.rs @@ -18,15 +18,14 @@ //! valid. use crate::warning; +use moho::openusd_schemas; use std::cell::RefCell; use std::collections::HashMap; -use openusd::sdf; -use openusd::usd::{Prim, Stage}; -use openusd_schemas::render::{ - AspectRatioConformPolicy, Product as RenderProduct, ProductSchema, - Settings as UsdRenderSettings, SettingsBaseSchema, SettingsSchema, Var as RenderVar, -}; +use moho::openusd::sdf; +use moho::scene_index::SceneIndex; +use moho::tokens::prim_type; +use openusd_schemas::render::AspectRatioConformPolicy; use tracing::debug; use crate::aov::{ @@ -35,8 +34,8 @@ use crate::aov::{ }; use crate::region::PixelRect; -use super::attrs::{custom_bool, custom_token, decode_bool, decode_number, prim_value, value_at}; -use super::prim_at; +use super::attrs::{decode_bool, decode_number}; +use super::index::data::PrimData; use super::settings::render_settings_path; const DRIVER_PARAMETERS: &str = "driver:parameters:"; @@ -159,25 +158,25 @@ struct Base { disable_depth_of_field: bool, } -fn read_resolution(view: &impl SettingsBaseSchema) -> Option<(usize, usize)> { - let v = value_at(&view.resolution_attr())?.try_as_vec_2i()?; +fn read_resolution(view: &PrimData) -> Option<(usize, usize)> { + let v = view.value("resolution")?.try_as_vec_2i()?; (v.x > 0 && v.y > 0).then_some((v.x as usize, v.y as usize)) } -fn read_data_window(view: &impl SettingsBaseSchema) -> Option<[f32; 4]> { - let v = value_at(&view.data_window_ndc_attr())?.try_as_vec_4f()?; +fn read_data_window(view: &PrimData) -> Option<[f32; 4]> { + let v = view.value("dataWindowNDC")?.try_as_vec_4f()?; Some([v.x, v.y, v.z, v.w]) } /// The authored `aspectRatioConformPolicy`; `None` when unauthored, or when /// it names none of the five policies, which is refused at the prim that /// authors it. -fn read_conform_policy(view: &impl SettingsBaseSchema) -> Option { - let value = value_at(&view.aspect_ratio_conform_policy_attr())?; +fn read_conform_policy(view: &PrimData) -> Option { + let value = view.value("aspectRatioConformPolicy")?; match AspectRatioConformPolicy::try_from(value.clone()) { Ok(policy) => Some(policy), Err(_) => { - let path = view.prim().path(); + let path = view.path(); warning!( ProductInvalidConformPolicy, at = path, @@ -203,12 +202,12 @@ fn describe_value(value: &sdf::Value) -> String { /// The authored `pixelAspectRatio`; `None` when unauthored, or when it is /// not a [`valid_pixel_aspect`], which is refused at the prim that authors /// it. -fn read_pixel_aspect(view: &impl SettingsBaseSchema) -> Option { - let value = value_at(&view.pixel_aspect_ratio_attr())?; +fn read_pixel_aspect(view: &PrimData) -> Option { + let value = view.value("pixelAspectRatio")?; match decode_number(value.clone()) { Some(a) if valid_pixel_aspect(a) => Some(a), _ => { - let path = view.prim().path(); + let path = view.path(); warning!( ProductInvalidPixelAspectRatio, at = path, @@ -221,8 +220,8 @@ fn read_pixel_aspect(view: &impl SettingsBaseSchema) -> Option { } } -fn read_camera(view: &impl SettingsBaseSchema) -> Option { - view.camera_rel().targets().ok()?.into_iter().next() +fn read_camera(view: &PrimData) -> Option { + view.targets("camera").into_iter().next() } impl Base { @@ -242,20 +241,23 @@ impl Base { } /// `view`'s authored opinions over `fallback`. - fn resolve(view: &impl SettingsBaseSchema, fallback: &Base) -> Base { + fn resolve(view: &PrimData, fallback: &Base) -> Base { Base { camera: read_camera(view).or_else(|| fallback.camera.clone()), resolution: read_resolution(view).or(fallback.resolution), data_window: read_data_window(view).or(fallback.data_window), conform: read_conform_policy(view).unwrap_or(fallback.conform), pixel_aspect: read_pixel_aspect(view).unwrap_or(fallback.pixel_aspect), - disable_motion_blur: value_at(&view.disable_motion_blur_attr()) + disable_motion_blur: view + .value("disableMotionBlur") .and_then(decode_bool) .unwrap_or(fallback.disable_motion_blur), - instantaneous_shutter: value_at(&view.instantaneous_shutter_attr()) + instantaneous_shutter: view + .value("instantaneousShutter") .and_then(decode_bool) .unwrap_or(fallback.instantaneous_shutter), - disable_depth_of_field: value_at(&view.disable_depth_of_field_attr()) + disable_depth_of_field: view + .value("disableDepthOfField") .and_then(decode_bool) .unwrap_or(fallback.disable_depth_of_field), } @@ -366,7 +368,7 @@ impl PrimvarKeep { /// Kept primvar `i`, which geometry prim `prim` does not author: when an /// ancestor authors it, warns — once per entry — that it is not /// inherited. Walks the ancestors once per `(entry, ancestor)`. - pub(crate) fn report_inherited(&self, prim: &Prim, i: usize) { + pub(crate) fn report_inherited(&self, prim: &PrimData, i: usize) { if self.warned.borrow().get(i).copied().unwrap_or(false) { return; } @@ -378,7 +380,7 @@ impl PrimvarKeep { .authored_on .borrow_mut() .entry(key) - .or_insert_with(|| prim_value(&a, &name).is_some()); + .or_insert_with(|| a.value(&name).is_some()); if authored { self.warn_not_inherited(i, Some(prim), &a, "an ancestor"); return; @@ -390,13 +392,13 @@ impl PrimvarKeep { /// An instance prim or a `PointInstancer` (`what`) placing geometry: /// warns, once per entry, about each kept primvar it or an ancestor /// authors, which the placed geometry does not inherit. - pub(crate) fn report_placement(&self, placement: &Prim, what: &str) { + pub(crate) fn report_placement(&self, placement: &PrimData, what: &str) { for i in 0..self.entries.len() { if self.warned.borrow().get(i).copied().unwrap_or(false) { continue; } let name = format!("primvars:{}", self.entries[i].name); - if prim_value(placement, &name).is_some() { + if placement.value(&name).is_some() { self.warn_not_inherited(i, None, placement, what); } else { self.report_inherited(placement, i); @@ -406,7 +408,7 @@ impl PrimvarKeep { /// Warns that kept primvar `i`, which `what` authors on `on` (above the /// geometry prim `below`, when one asked), is not inherited. - fn warn_not_inherited(&self, i: usize, below: Option<&Prim>, on: &Prim, what: &str) { + fn warn_not_inherited(&self, i: usize, below: Option<&PrimData>, on: &PrimData, what: &str) { let e = &self.entries[i]; let above = below.map_or(String::new(), |b| format!(" above {}", b.path())); warning!( @@ -456,25 +458,32 @@ impl PrimvarKeep { /// settings prim or the prim authors no `products` — the "write the single /// beauty EXR" case. /// -/// The precomp is read too when `stage_path` (the stage's file, which its -/// kernel asset paths resolve against) is given; a reader that only wants -/// the products' camera and framing (`crust ls`) passes `None`. +/// The precomp is read too when `stage_path` is given: the stage's file and +/// the stage, which its kernel asset paths resolve against (a relative one +/// on the layer authoring it); a reader that only wants the products' camera +/// and framing (`crust ls`) passes `None`. pub(super) fn import_render_products( - stage: &Stage, - stage_path: Option<&std::path::Path>, + scene: &dyn SceneIndex, + stage_path: Option<(&std::path::Path, &moho::openusd::usd::Stage)>, pass: Option<&sdf::Path>, ) -> RenderProducts { - let Some(path) = render_settings_path(stage, pass) else { + let Some(path) = render_settings_path(scene, pass) else { return RenderProducts::default(); }; - let Some(settings) = UsdRenderSettings::get(stage, path.clone()).ok().flatten() else { + let settings = PrimData::at(scene, &path); + if settings.ty() != prim_type::RENDER_SETTINGS { return RenderProducts::default(); - }; - let mut out = read_products(stage, &path, &settings); - if let Some(stage_path) = stage_path { + } + let mut out = read_products(scene, &path, &settings); + if let Some((stage_path, stage)) = stage_path { + let layer_dir = |prim: &sdf::Path, name: &str| { + let attr = prim.append_property(name).ok()?; + super::index::stage_facts::authoring_layer_dir(stage, &attr) + }; out.request.precomp = super::precomp::import_precomp( - stage, + scene, stage_path, + &layer_dir, &path, &mut out.request, &out.filter_targets, @@ -484,12 +493,9 @@ pub(super) fn import_render_products( } /// The products of the settings prim `path`, before the precomp is read. -fn read_products(stage: &Stage, path: &sdf::Path, settings: &UsdRenderSettings) -> RenderProducts { +fn read_products(scene: &dyn SceneIndex, path: &sdf::Path, settings: &PrimData) -> RenderProducts { let path = path.clone(); - let targets = settings - .products_rel() - .forwarded_targets() - .unwrap_or_default(); + let targets = settings.forwarded_targets("products"); let base = Base::resolve(settings, &Base::unauthored()); if targets.is_empty() { return RenderProducts { @@ -527,20 +533,19 @@ fn read_products(stage: &Stage, path: &sdf::Path, settings: &UsdRenderSettings) let mut refused: Vec = Vec::new(); for product_path in targets { - let Some(product) = RenderProduct::get(stage, product_path.clone()) - .ok() - .flatten() - else { + let product = PrimData::at(scene, &product_path); + if product.ty() != prim_type::RENDER_PRODUCT { warning!( ProductNotARenderProduct, at = product_path, "{path}.products targets {product_path}, which is not a RenderProduct; skipped" ); continue; - }; - let prim = prim_at(stage, product_path.clone()); - let product_type = - custom_token(&prim, "productType").unwrap_or_else(|| "raster".to_owned()); + } + let prim = &product; + let product_type = prim + .custom_token("productType") + .unwrap_or_else(|| "raster".to_owned()); if product_type != "raster" { warning!( ProductUnsupportedType, @@ -637,14 +642,10 @@ fn read_products(stage: &Stage, path: &sdf::Path, settings: &UsdRenderSettings) ); } - let name = custom_token(&prim, "productName").unwrap_or_default(); + let name = prim.custom_token("productName").unwrap_or_default(); let mut seen = Vec::new(); let mut product_vars = Vec::new(); - for var_path in product - .ordered_vars_rel() - .forwarded_targets() - .unwrap_or_default() - { + for var_path in product.forwarded_targets("orderedVars") { if seen.contains(&var_path) { debug!("{product_path}: {var_path} is targeted twice; using it once"); continue; @@ -653,7 +654,7 @@ fn read_products(stage: &Stage, path: &sdf::Path, settings: &UsdRenderSettings) let var = vars .entry(var_path.clone()) .or_insert_with(|| { - resolve_var(stage, &var_path, &mut out.primvars, &mut out.filter_targets) + resolve_var(scene, &var_path, &mut out.primvars, &mut out.filter_targets) }) .clone(); // One DFA holds every expression of the render, each accepting @@ -682,7 +683,7 @@ fn read_products(stage: &Stage, path: &sdf::Path, settings: &UsdRenderSettings) } product_vars.extend(var); } - let attributes = driver_attributes(&prim); + let attributes = driver_attributes(prim); debug!( "{product_path}: {:?} with {} var(s): {}", name, @@ -796,10 +797,9 @@ fn describe_resolution(resolution: Option<(usize, usize)>) -> String { /// `aov:` namespace, which configures vars), for the EXR header: /// `driver:parameters:OpenEXR:` as ``, the rest by their name /// without the prefix (`artist`, `comment`). -fn driver_attributes(prim: &Prim) -> Vec<(String, String)> { +fn driver_attributes(prim: &PrimData) -> Vec<(String, String)> { let mut out: Vec<(String, String)> = prim - .authored_property_names() - .unwrap_or_default() + .attribute_names() .into_iter() .filter_map(|name| { let name = name.as_str(); @@ -807,7 +807,7 @@ fn driver_attributes(prim: &Prim) -> Vec<(String, String)> { if key.starts_with("aov:") { return None; } - let value = custom_token(prim, name)?; + let value = prim.custom_token(name)?; let key = key.strip_prefix("OpenEXR:").unwrap_or(key); Some((key.to_owned(), value)) }) @@ -818,8 +818,8 @@ fn driver_attributes(prim: &Prim) -> Vec<(String, String)> { /// A float attribute authored as any numeric type — Houdini writes /// `clearValue` as a float, hand-written files as an int. -fn custom_number(prim: &Prim, name: &str) -> Option { - prim_value(prim, name).and_then(decode_number) +fn custom_number(prim: &PrimData, name: &str) -> Option { + prim.value(name).and_then(decode_number) } /// Components and precision of an Sdf type name or a Houdini @@ -900,22 +900,22 @@ fn type_fits(source: AovSource, components: usize, precision: Precision) -> bool /// Hydra's `multiSampled`, then Arnold, Karma and RenderMan filter /// attributes. `None` when none is authored (or the one authored names a /// rule crust does not have, which is warned). -fn authored_accumulation(prim: &Prim) -> Option { - if let Some(multi) = custom_bool(prim, "driver:parameters:aov:multiSampled") { +fn authored_accumulation(prim: &PrimData) -> Option { + if let Some(multi) = prim.custom_bool("driver:parameters:aov:multiSampled") { return Some(if multi { Accumulation::Filtered } else { Accumulation::Closest }); } - if let Some(filter) = custom_token(prim, "arnold:filter") { + if let Some(filter) = prim.custom_token("arnold:filter") { return Some(if filter == "closest_filter" { Accumulation::Closest } else { Accumulation::Filtered }); } - if let Some(filter) = custom_token(prim, "driver:parameters:aov:filter") { + if let Some(filter) = prim.custom_token("driver:parameters:aov:filter") { let f = filter.trim_start(); return Some( if f.starts_with("[\"closest\"") || f.starts_with("closest") { @@ -926,7 +926,7 @@ fn authored_accumulation(prim: &Prim) -> Option { ); } for name in ["ri:accumulationRule", "ri:displayChannel:filter"] { - if let Some(rule) = custom_token(prim, name) { + if let Some(rule) = prim.custom_token(name) { return match rule.as_str() { "zmin" => Some(Accumulation::Closest), "filter" | "" => Some(Accumulation::Filtered), @@ -949,12 +949,13 @@ fn authored_accumulation(prim: &Prim) -> Option { /// One RenderVar as a channel layer, or `None` (warned) when crust cannot /// honour it. fn resolve_var( - stage: &Stage, + scene: &dyn SceneIndex, path: &sdf::Path, keep: &mut PrimvarKeep, filters: &mut HashMap, ) -> Option { - if RenderVar::get(stage, path.clone()).ok().flatten().is_none() { + let prim = PrimData::at(scene, path); + if prim.ty() != prim_type::RENDER_VAR { warning!( AovNotARenderVar, at = path, @@ -962,30 +963,28 @@ fn resolve_var( ); return None; } - let prim = prim_at(stage, path.clone()); let prim_name = path.name().unwrap_or_default().to_owned(); - let name = custom_token(&prim, "driver:parameters:aov:name") + let name = prim + .custom_token("driver:parameters:aov:name") .filter(|n| !n.is_empty()) .unwrap_or(prim_name); - let channel_prefix = custom_token(&prim, "driver:parameters:aov:channel_prefix") - .or_else(|| custom_token(&prim, "driver:parameters:aov:husk:channel_prefix")); + let channel_prefix = prim + .custom_token("driver:parameters:aov:channel_prefix") + .or_else(|| prim.custom_token("driver:parameters:aov:husk:channel_prefix")); // A filter output: its `sourceType` and `sourceName` are ignored. - if let Some(target) = prim - .relationship("crust:filter") - .targets() - .ok() - .and_then(|t| t.into_iter().next()) - { + if let Some(target) = prim.targets("crust:filter").into_iter().next() { return resolve_filter_var(&prim, path, name, channel_prefix, target, filters); } - let source_type = custom_token(&prim, "sourceType").unwrap_or_else(|| "raw".to_owned()); - let source_name = custom_token(&prim, "sourceName").unwrap_or_default(); + let source_type = prim + .custom_token("sourceType") + .unwrap_or_else(|| "raw".to_owned()); + let source_name = prim.custom_token("sourceName").unwrap_or_default(); let mut expression = None; let mut primvar = None; let mut raw = false; - let raw_authored = custom_bool(&prim, "crust:aov:raw") == Some(true); - let variance = custom_bool(&prim, "crust:aov:variance") == Some(true); + let raw_authored = prim.custom_bool("crust:aov:raw") == Some(true); + let variance = prim.custom_bool("crust:aov:variance") == Some(true); if variance && source_type != "lpe" { warning!( AovInvalidVariance, @@ -1120,8 +1119,9 @@ fn resolve_var( }; // An expression's variance is one scalar: unauthored, it is a float. - let type_name = custom_token(&prim, "driver:parameters:aov:format") - .or_else(|| custom_token(&prim, "dataType")) + let type_name = prim + .custom_token("driver:parameters:aov:format") + .or_else(|| prim.custom_token("dataType")) .unwrap_or_else(|| if variance { "float" } else { "color3f" }.to_owned()); let Some((components, precision)) = parse_data_type(&type_name) else { warning!( @@ -1144,7 +1144,8 @@ fn resolve_var( } // The role is the `dataType`'s (Houdini's `aov:format` names only // the storage, `float3` for a `point3f`). - let role = custom_token(&prim, "dataType") + let role = prim + .custom_token("dataType") .and_then(|t| PrimvarRole::of_type(&t)) .or_else(|| PrimvarRole::of_type(&type_name)) .unwrap_or(PrimvarRole::Float); @@ -1234,17 +1235,18 @@ pub(super) struct FilterTarget { /// float or half channels, whose filter the precomp import resolves. Its /// source is a placeholder until then. fn resolve_filter_var( - prim: &Prim, + prim: &PrimData, path: &sdf::Path, name: String, channel_prefix: Option, target: sdf::Path, filters: &mut HashMap, ) -> Option { - let type_name = custom_token(prim, "driver:parameters:aov:format") - .or_else(|| custom_token(prim, "dataType")) + let type_name = prim + .custom_token("driver:parameters:aov:format") + .or_else(|| prim.custom_token("dataType")) .unwrap_or_else(|| "color3f".to_owned()); - let radiance = custom_bool(prim, "crust:filter:radiance").unwrap_or(true); + let radiance = prim.custom_bool("crust:filter:radiance").unwrap_or(true); let placeholder = |components: usize| { AovSource::Filter(FilterSource { display: false, @@ -1278,7 +1280,9 @@ fn resolve_filter_var( path.to_string(), FilterTarget { filter: target, - output: custom_token(prim, "crust:filter:output").filter(|o| !o.is_empty()), + output: prim + .custom_token("crust:filter:output") + .filter(|o| !o.is_empty()), }, ); Some(AovVar { @@ -1315,7 +1319,8 @@ mod tests { .open(path.to_str().unwrap()) .expect("stage opens"); let scope = crate::WarningScope::enter(); - let products = import_render_products(&stage, Some(&path), None); + let scene = crate::scene::usd_import::index::input_chain(stage.clone(), None, true); + let products = import_render_products(scene.chain.as_ref(), Some((&path, &stage)), None); (products, scope.finish()) } diff --git a/crates/crust-core/src/scene/usd_import/settings.rs b/crates/crust-core/src/scene/usd_import/settings.rs index 9245c260f..aca75dfac 100644 --- a/crates/crust-core/src/scene/usd_import/settings.rs +++ b/crates/crust-core/src/scene/usd_import/settings.rs @@ -2,11 +2,9 @@ //! which camera the render was told to use. use crate::warning; -use openusd::sdf; -use openusd::usd::{Prim, Stage}; -use openusd_schemas::render::{ - Pass as UsdRenderPass, PassSchema, Settings as UsdRenderSettings, SettingsBaseSchema, -}; +use moho::openusd::sdf; +use moho::scene_index::SceneIndex; +use moho::tokens::prim_type; use tracing::debug; use crate::color::Space; @@ -15,8 +13,8 @@ use crate::light::LightSelection; use crate::sampler::SamplerKind; use crate::tracer::{RenderSettings, SamplingStrategy}; -use super::attrs::{custom_bool, custom_f32, custom_i32, custom_token, value_at}; -use super::prim_at; +use super::index::data::{PrimData, stage_metadata}; +use super::index::stage_facts; const DEFAULT_GUIDING_TRAIN_ITERATIONS: u32 = 4; const DEFAULT_GUIDING_PROB: f32 = 0.5; @@ -48,19 +46,19 @@ impl CameraChoice { /// The camera a render is told to use: the host's `requested` path (the /// CLI's `--camera`), else the first RenderProduct's camera (`product_camera`, /// which is the settings' own when the product names none), else the stage's -/// `RenderSettings.camera`. Read off the payload-free `index`, before any +/// `RenderSettings.camera`. Read off the payload-free scene, before any /// traversal meets a camera. The one precedence the import and `crust ls` /// both follow. pub(super) fn wanted_camera( requested: Option, product_camera: Option, - index: &Stage, + scene: &dyn SceneIndex, pass: Option<&sdf::Path>, ) -> Option { match requested { Some(p) => Some(CameraChoice::Requested(p)), None => product_camera - .or_else(|| render_settings_camera(index, pass)) + .or_else(|| render_settings_camera(scene, pass)) .map(CameraChoice::Settings), } } @@ -111,72 +109,69 @@ impl std::fmt::Display for CameraChoice { /// `/Render/settings`. The one answer every settings reader, the products /// and the provenance take, so a pass's own settings reach all of them. /// [`check_render_source`] warns about a target this passes over. -pub(super) fn render_settings_path(stage: &Stage, pass: Option<&sdf::Path>) -> Option { - pass.and_then(|p| render_source(stage, p)) - .filter(|target| is_render_settings(stage, target)) - .or_else(|| { - UsdRenderSettings::stage_settings_path(stage) - .ok() - .flatten() - .or_else(|| sdf::path("/Render/settings").ok()) - }) +/// +/// Read from the scene index: the pass and the settings prim by their Hydra +/// types, `renderSettingsPrimPath` from the root's `__usdStageMetadata`. +pub(super) fn render_settings_path( + scene: &dyn SceneIndex, + pass: Option<&sdf::Path>, +) -> Option { + pass.and_then(|p| render_source(scene, p)) + .filter(|target| is_render_settings(scene, target)) + .or_else(|| stage_settings_path(scene).or_else(|| sdf::path("/Render/settings").ok())) +} + +/// The stage's `renderSettingsPrimPath` metadatum as a path, when it names +/// one (`UsdRenderSettings::GetStageRenderSettings`'s source). +fn stage_settings_path(scene: &dyn SceneIndex) -> Option { + match stage_metadata(scene, "renderSettingsPrimPath")?.0 { + sdf::Value::String(p) if !p.is_empty() => sdf::Path::new(p.as_str()).ok(), + sdf::Value::Token(p) if !p.as_str().is_empty() => sdf::Path::new(p.as_str()).ok(), + _ => None, + } } /// The `RenderSettings` prim the render reads: [`render_settings_path`] when a /// settings prim is there, `None` when the stage has none and the render runs /// on the defaults. What `crust check` reports; the provenance keeps the path /// itself, so an edit that authors settings there is still a settings edit. -pub(super) fn read_settings_prim(stage: &Stage, pass: Option<&sdf::Path>) -> Option { - render_settings_path(stage, pass).filter(|p| is_render_settings(stage, p)) +pub(super) fn read_settings_prim( + scene: &dyn SceneIndex, + pass: Option<&sdf::Path>, +) -> Option { + render_settings_path(scene, pass).filter(|p| is_render_settings(scene, p)) } /// The first target of `pass`'s `renderSource` relationship, if it authors one. -pub(super) fn render_source(stage: &Stage, pass: &sdf::Path) -> Option { - UsdRenderPass::get(stage, pass.clone()) - .ok() - .flatten()? - .render_source_rel() - .targets() - .ok()? - .into_iter() - .next() +pub(super) fn render_source(scene: &dyn SceneIndex, pass: &sdf::Path) -> Option { + let prim = PrimData::at(scene, pass); + if prim.ty() != prim_type::RENDER_PASS { + return None; + } + prim.targets("renderSource").into_iter().next() } -fn is_render_settings(stage: &Stage, path: &sdf::Path) -> bool { - path.is_prim() - && UsdRenderSettings::get(stage, path.clone()) - .ok() - .flatten() - .is_some() +fn is_render_settings(scene: &dyn SceneIndex, path: &sdf::Path) -> bool { + path.is_prim() && PrimData::at(scene, path).ty() == prim_type::RENDER_SETTINGS } /// Checks the host's `pass` names a `RenderPass` prim on `stage`, and warns /// when its `renderSource` targets something [`render_settings_path`] passes -/// over. Run once per import, on the index stage, before anything is read. -pub(super) fn check_pass(stage: &Stage, pass: &sdf::Path) -> Result<(), crate::Error> { - if UsdRenderPass::get(stage, pass.clone()) - .ok() - .flatten() - .is_none() - { - let prim = prim_at(stage, pass.clone()); - let why = if !prim.is_valid().unwrap_or(false) { - "there is no prim at this path on the stage".to_string() - } else { - match prim.type_name().ok().flatten() { - Some(t) if !t.as_str().is_empty() => { - format!("a {} is not a RenderPass", t.as_str()) - } - _ => "a typeless prim is not a RenderPass".to_string(), - } - }; +/// over. Run once per import, on the payload-free scene, before anything is +/// read. +pub(super) fn check_pass( + scene: &dyn SceneIndex, + stage: &moho::openusd::usd::Stage, + pass: &sdf::Path, +) -> Result<(), crate::Error> { + if PrimData::at(scene, pass).ty() != prim_type::RENDER_PASS { return Err(crate::Error::PassNotFound { path: pass.to_string(), - why, + why: stage_facts::not_a_pass(stage, pass), }); } - if let Some(target) = render_source(stage, pass) - && !is_render_settings(stage, &target) + if let Some(target) = render_source(scene, pass) + && !is_render_settings(scene, &target) { warning!( RenderPassRenderSourceInvalid, @@ -190,11 +185,15 @@ pub(super) fn check_pass(stage: &Stage, pass: &sdf::Path) -> Result<(), crate::E /// The first target of the render settings' `camera` relationship — the USD /// way for a stage to say which of its cameras is the shot camera. -pub(super) fn render_settings_camera(stage: &Stage, pass: Option<&sdf::Path>) -> Option { - let s = UsdRenderSettings::get(stage, render_settings_path(stage, pass)?) - .ok() - .flatten()?; - s.camera_rel().targets().ok()?.into_iter().next() +pub(super) fn render_settings_camera( + scene: &dyn SceneIndex, + pass: Option<&sdf::Path>, +) -> Option { + let prim = PrimData::at(scene, &render_settings_path(scene, pass)?); + if prim.ty() != prim_type::RENDER_SETTINGS { + return None; + } + prim.targets("camera").into_iter().next() } /// Whether the camera sees the lights at infinity at all: Hydra's @@ -203,13 +202,16 @@ pub(super) fn render_settings_camera(stage: &Stage, pass: Option<&sdf::Path>) -> /// winning when both are authored. Default `true`. `false` hides every dome, /// distant light and backdrop from camera rays whatever the lights themselves /// author; how they illuminate is unchanged. -pub(super) fn dome_light_camera_visibility(stage: &Stage, pass: Option<&sdf::Path>) -> bool { - let Some(path) = render_settings_path(stage, pass) else { +pub(super) fn dome_light_camera_visibility( + scene: &dyn SceneIndex, + pass: Option<&sdf::Path>, +) -> bool { + let Some(path) = render_settings_path(scene, pass) else { return DEFAULT_DOME_LIGHT_CAMERA_VISIBILITY; }; - let prim = prim_at(stage, path); - custom_bool(&prim, "crust:domeLightCameraVisibility") - .or_else(|| custom_bool(&prim, "domeLightCameraVisibility")) + let prim = PrimData::at(scene, &path); + prim.custom_bool("crust:domeLightCameraVisibility") + .or_else(|| prim.custom_bool("domeLightCameraVisibility")) .unwrap_or(DEFAULT_DOME_LIGHT_CAMERA_VISIBILITY) } @@ -218,13 +220,16 @@ pub(super) fn dome_light_camera_visibility(stage: &Stage, pass: Option<&sdf::Pat /// off the `RenderSettings` prim, with `crust:enableExposureCompensation` /// winning when both are authored. Default `true`. `false` renders at a scale /// of 1 whatever the camera authors. -pub(super) fn enable_exposure_compensation(stage: &Stage, pass: Option<&sdf::Path>) -> bool { - let Some(path) = render_settings_path(stage, pass) else { +pub(super) fn enable_exposure_compensation( + scene: &dyn SceneIndex, + pass: Option<&sdf::Path>, +) -> bool { + let Some(path) = render_settings_path(scene, pass) else { return DEFAULT_ENABLE_EXPOSURE_COMPENSATION; }; - let prim = prim_at(stage, path); - custom_bool(&prim, "crust:enableExposureCompensation") - .or_else(|| custom_bool(&prim, "enableExposureCompensation")) + let prim = PrimData::at(scene, &path); + prim.custom_bool("crust:enableExposureCompensation") + .or_else(|| prim.custom_bool("enableExposureCompensation")) .unwrap_or(DEFAULT_ENABLE_EXPOSURE_COMPENSATION) } @@ -234,9 +239,12 @@ pub(super) fn enable_exposure_compensation(stage: &Stage, pass: Option<&sdf::Pat /// ([`resolve_subdiv_level`](super::attrs::resolve_subdiv_level)) applies the /// host override, the default and the clamp. A geometry setting, not a /// tracer one, so it stays out of [`RenderSettings`]. -pub(super) fn render_settings_subdiv_level(stage: &Stage, pass: Option<&sdf::Path>) -> Option { - let prim = prim_at(stage, render_settings_path(stage, pass)?); - custom_i32(&prim, "crust:subdivisionLevel") +pub(super) fn render_settings_subdiv_level( + scene: &dyn SceneIndex, + pass: Option<&sdf::Path>, +) -> Option { + let prim = PrimData::at(scene, &render_settings_path(scene, pass)?); + prim.custom_i32("crust:subdivisionLevel") } /// `crust:subdivisionEdgeLength` as authored on the `RenderSettings` prim: the @@ -245,11 +253,11 @@ pub(super) fn render_settings_subdiv_level(stage: &Stage, pass: Option<&sdf::Pat /// applies the host override and refuses a bad value. A geometry setting, like /// [`render_settings_subdiv_level`]. pub(super) fn render_settings_subdiv_edge_length( - stage: &Stage, + scene: &dyn SceneIndex, pass: Option<&sdf::Path>, ) -> Option { - let prim = prim_at(stage, render_settings_path(stage, pass)?); - custom_f32(&prim, "crust:subdivisionEdgeLength") + let prim = PrimData::at(scene, &render_settings_path(scene, pass)?); + prim.custom_f32("crust:subdivisionEdgeLength") } /// The first target of `crust:dicingCamera` on the `RenderSettings` prim: the @@ -259,15 +267,11 @@ pub(super) fn render_settings_subdiv_edge_length( /// caller checks the target is a camera. A geometry setting, like /// [`render_settings_subdiv_level`]. pub(super) fn render_settings_dicing_camera( - stage: &Stage, + scene: &dyn SceneIndex, pass: Option<&sdf::Path>, ) -> Option { - let prim = prim_at(stage, render_settings_path(stage, pass)?); - prim.relationship("crust:dicingCamera") - .targets() - .ok()? - .into_iter() - .next() + let prim = PrimData::at(scene, &render_settings_path(scene, pass)?); + prim.targets("crust:dicingCamera").into_iter().next() } /// The working colour space the stage asks for: `renderingColorSpace` on the @@ -275,11 +279,14 @@ pub(super) fn render_settings_dicing_camera( /// Unauthored or empty is `lin_rec709`; a name the config does not know, or a /// space that is not scene-linear, is refused with a warning and is /// `lin_rec709` too. -pub(super) fn render_settings_color_space(stage: &Stage, pass: Option<&sdf::Path>) -> Space { - let Some(path) = render_settings_path(stage, pass) else { +pub(super) fn render_settings_color_space( + scene: &dyn SceneIndex, + pass: Option<&sdf::Path>, +) -> Space { + let Some(path) = render_settings_path(scene, pass) else { return Space::LIN_REC709; }; - match custom_token(&prim_at(stage, path.clone()), "renderingColorSpace") { + match PrimData::at(scene, &path).custom_token("renderingColorSpace") { Some(name) if !name.is_empty() => { crate::color::working_space(&name).unwrap_or_else(|why| { warning!( @@ -294,28 +301,28 @@ pub(super) fn render_settings_color_space(stage: &Stage, pass: Option<&sdf::Path } } -pub(super) fn import_render_settings(stage: &Stage, pass: Option<&sdf::Path>) -> RenderSettings { - let Some(path) = render_settings_path(stage, pass) else { +pub(super) fn import_render_settings( + scene: &dyn SceneIndex, + pass: Option<&sdf::Path>, +) -> RenderSettings { + let Some(path) = render_settings_path(scene, pass) else { return default_settings(); }; - let s = match UsdRenderSettings::get(stage, path.clone()).ok().flatten() { - Some(s) => s, - None => { - debug!( - "No UsdRenderSettings at {} — using defaults for render settings", - path - ); - return default_settings(); - } - }; + let prim = PrimData::at(scene, &path); + if prim.ty() != prim_type::RENDER_SETTINGS { + debug!( + "No UsdRenderSettings at {} — using defaults for render settings", + path + ); + return default_settings(); + } let d = RenderSettings::default(); let (mut w, mut h) = d.get_dimensions(); - let prim = prim_at(stage, path); // A side that is not positive is refused rather than cast: `-1 as usize` // is a frame no camera can be conformed to, nor any buffer allocated for. - if let Some(v2) = value_at(&s.resolution_attr()).and_then(|v| v.try_as_vec_2i()) { + if let Some(v2) = prim.value("resolution").and_then(|v| v.try_as_vec_2i()) { if v2.x > 0 && v2.y > 0 { w = v2.x as usize; h = v2.y as usize; @@ -331,13 +338,14 @@ pub(super) fn import_render_settings(stage: &Stage, pass: Option<&sdf::Path>) -> } // Custom `crust:*` attrs. We look them up on the RenderSettings prim. - let spp = - custom_i32(&prim, "crust:samplesPerPixel").map_or(d.samples_per_pixel(), |n| n as u32); + let spp = prim + .custom_i32("crust:samplesPerPixel") + .map_or(d.samples_per_pixel(), |n| n as u32); // `crust:maxDepth` counts shaded path vertices, not bounces: 1 is the // camera hit alone (visible emission and direct lighting), and 0 would // shade nothing — a black frame. Both 0 and a negative depth (which a // cast would wrap to `u32::MAX`) are refused. - let max_depth = match custom_i32(&prim, "crust:maxDepth") { + let max_depth = match prim.custom_i32("crust:maxDepth") { Some(n) if n < 1 => { let fallback = d.max_depth(); warning!( @@ -353,7 +361,7 @@ pub(super) fn import_render_settings(stage: &Stage, pass: Option<&sdf::Path>) -> }; // A negative minimum is refused rather than cast: `-1 as u32` is // `u32::MAX`, which would overflow the first check point. - let min_spp = match custom_i32(&prim, "crust:minSamplesPerPixel") { + let min_spp = match prim.custom_i32("crust:minSamplesPerPixel") { Some(n) if n < 0 => { let fallback = d.min_samples_per_pixel(); warning!( @@ -366,18 +374,25 @@ pub(super) fn import_render_settings(stage: &Stage, pass: Option<&sdf::Path>) -> Some(n) => n as u32, None => d.min_samples_per_pixel(), }; - let variance = custom_f32(&prim, "crust:varianceThreshold").unwrap_or(d.variance_threshold()); - let frame = custom_i32(&prim, "crust:frame").map_or(d.frame(), |n| n as isize); + let variance = prim + .custom_f32("crust:varianceThreshold") + .unwrap_or(d.variance_threshold()); + let frame = prim + .custom_i32("crust:frame") + .map_or(d.frame(), |n| n as isize); // Path guiding (opt-in). - let guiding = custom_bool(&prim, "crust:pathGuiding").unwrap_or(false); - let guiding_iters = custom_i32(&prim, "crust:guidingTrainIterations") + let guiding = prim.custom_bool("crust:pathGuiding").unwrap_or(false); + let guiding_iters = prim + .custom_i32("crust:guidingTrainIterations") .unwrap_or(DEFAULT_GUIDING_TRAIN_ITERATIONS as i32) .max(1) as u32; - let guiding_prob = custom_f32(&prim, "crust:guidingProb").unwrap_or(DEFAULT_GUIDING_PROB); + let guiding_prob = prim + .custom_f32("crust:guidingProb") + .unwrap_or(DEFAULT_GUIDING_PROB); // MIS strategy: `power` (default) | `balance` | `light` | `bsdf`. - let strategy = match custom_token(&prim, "crust:samplingStrategy") { + let strategy = match prim.custom_token("crust:samplingStrategy") { None => SamplingStrategy::PowerMis, Some(name) => name.parse().unwrap_or_else(|e| { warning!( @@ -390,7 +405,7 @@ pub(super) fn import_render_settings(stage: &Stage, pass: Option<&sdf::Path>) -> }; // Light selection: `power` (default) | `uniform` | `learned` | `neural`. - let light_selection = match custom_token(&prim, "crust:lightSelection") { + let light_selection = match prim.custom_token("crust:lightSelection") { None => LightSelection::Power, Some(name) => name.parse().unwrap_or_else(|e| { warning!( @@ -405,7 +420,7 @@ pub(super) fn import_render_settings(stage: &Stage, pass: Option<&sdf::Path>) -> // Pixel reconstruction filter: `box` | `triangle` (default) | `gaussian` // | `blackman` | `mitchell`, each at its conventional radius unless // `crust:pixelFilterRadius` overrides it (in pixels, from the center). - let mut filter = match custom_token(&prim, "crust:pixelFilter") { + let mut filter = match prim.custom_token("crust:pixelFilter") { None => PixelFilter::default(), Some(name) => name.parse().unwrap_or_else(|e| { warning!( @@ -416,12 +431,12 @@ pub(super) fn import_render_settings(stage: &Stage, pass: Option<&sdf::Path>) -> PixelFilter::default() }), }; - if let Some(radius) = custom_f32(&prim, "crust:pixelFilterRadius") { + if let Some(radius) = prim.custom_f32("crust:pixelFilterRadius") { filter = filter.with_radius(radius); } // The QMC sampler: `sobol` (default) | `sobolBn` | `lattice` | // `latticeBn` | `pmj` | `pmjBn`. - let sampler = match custom_token(&prim, "crust:sampler") { + let sampler = match prim.custom_token("crust:sampler") { None => SamplerKind::default(), Some(name) => name.parse().unwrap_or_else(|e| { warning!( @@ -435,13 +450,14 @@ pub(super) fn import_render_settings(stage: &Stage, pass: Option<&sdf::Path>) -> // Firefly clamp on indirect light, in the film's linear units (the // largest channel of one sample's indirect radiance). Unauthored takes // the engine default; an authored 0 leaves the estimator unbiased. - let indirect_clamp = - custom_f32(&prim, "crust:indirectClamp").unwrap_or(crate::tracer::DEFAULT_INDIRECT_CLAMP); + let indirect_clamp = prim + .custom_f32("crust:indirectClamp") + .unwrap_or(crate::tracer::DEFAULT_INDIRECT_CLAMP); // Adaptive sampling's cross-neighbour tolerance, in convergence-index // units; negative turns the comparison off. A non-finite value cannot // be compared against, so it is refused rather than silently disabling // the guard. - let neighbour_tolerance = match custom_f32(&prim, "crust:adaptiveNeighbourTolerance") { + let neighbour_tolerance = match prim.custom_f32("crust:adaptiveNeighbourTolerance") { Some(t) if t.is_finite() => t, Some(t) => { warning!( @@ -504,9 +520,9 @@ pub(super) fn import_render_settings(stage: &Stage, pass: Option<&sdf::Path>) -> /// a warning above it (a count multiplies every vertex's shadow rays, so a /// typo there is a render that never ends), else the default with a warning. /// Unauthored is the default. -fn light_sample_count(prim: &Prim, name: &str) -> u32 { +fn light_sample_count(prim: &PrimData, name: &str) -> u32 { use crate::tracer::{DEFAULT_LIGHT_SAMPLES, MAX_LIGHT_SAMPLES}; - match custom_i32(prim, name) { + match prim.custom_i32(name) { Some(n) if n >= 1 && n as u32 > MAX_LIGHT_SAMPLES => { warning!( SettingsLightSamplesClamped, @@ -533,12 +549,11 @@ fn light_sample_count(prim: &Prim, name: &str) -> u32 { /// sample past either end, so the render is well defined — but a frame off /// the end of the shot is far more often a typo than a request, and it would /// otherwise render a plausible, frozen image without a word. -pub(super) fn check_time_range(stage: &Stage, time: f64) { - if !stage.has_authored_time_code_range() { +pub(super) fn check_time_range(range: Option<(f64, f64)>, time: f64) { + let Some((start, end)) = range else { debug!("Rendering at time code {time}; the stage authors no startTimeCode/endTimeCode"); return; - } - let (start, end) = (stage.start_time_code(), stage.end_time_code()); + }; if time < start || time > end { warning!( TimeOutsideRange, diff --git a/crates/crust-core/src/scene/usd_import/shapes.rs b/crates/crust-core/src/scene/usd_import/shapes.rs index c5516ff5a..f3b44cf93 100644 --- a/crates/crust-core/src/scene/usd_import/shapes.rs +++ b/crates/crust-core/src/scene/usd_import/shapes.rs @@ -6,22 +6,15 @@ use std::sync::Arc; use crust_rt::{CubicCurveSegment, CurveSegment, Geometry, SceneBuilder as RtSceneBuilder}; use glam::{Affine3A, Mat3A, Mat4 as GMat4, Vec3A}; -use openusd::sdf; -use openusd::usd::Prim; -use openusd_schemas::geom::{ - BasisCurves as UsdBasisCurves, CurvesSchema, NurbsCurves as UsdNurbsCurves, NurbsCurvesSchema, - PointBasedSchema, Sphere as UsdSphere, SphereSchema, -}; +use moho::openusd::sdf; use tracing::debug; use crate::material::Material; use crate::rt_world::WorldBuilder; use crate::strands::StrandTable; -use super::attrs::{ - attr_f32, custom_token, decode_f32_array, decode_f64_array, decode_i32_array, - decode_vec3f_array, prim_motion_translate, prim_ray_mask, value_at, -}; +use super::attrs::{decode_f32_array, decode_f64_array, decode_i32_array, decode_vec3f_array}; +use super::index::data::{PrimData, motion_translate, ray_mask}; use super::lights::similarity_scale; use super::strands::{CurveCounts, StrandBuilder, StrandRequest, VertexRecipe}; use super::xform::Span; @@ -31,8 +24,8 @@ use super::xform::Span; // ----------------------------------------------------------------------- /// The authored `radius`, defaulting to USD's 1.0. -pub(super) fn sphere_radius(sphere: &UsdSphere) -> f32 { - attr_f32(&sphere.radius_attr()).unwrap_or(1.0) +pub(super) fn sphere_radius(sphere: &PrimData) -> f32 { + sphere.custom_f32("radius").unwrap_or(1.0) } /// A direct sphere over `span`. Under a similarity (uniform scale, no @@ -48,13 +41,12 @@ pub(super) fn sphere_radius(sphere: &UsdSphere) -> f32 { /// Returns the id only of a static analytic sphere. pub(super) fn emit_sphere( world: &mut WorldBuilder, - prim: &Prim, - sphere: &UsdSphere, + prim: &PrimData, span: Span, material: Arc, working: crate::color::Space, ) -> Option { - let radius = sphere_radius(sphere); + let radius = sphere_radius(prim); let open = Affine3A::from_mat4(span.open); // A singular open placement has no inverse and no volume: nothing to see. if collapses(open.matrix3) { @@ -75,8 +67,8 @@ pub(super) fn emit_sphere( center, scale ); - let mask = prim_ray_mask(prim); - let v = prim_motion_translate(prim); + let mask = ray_mask(prim); + let v = motion_translate(prim); let end = match span.close.filter(|_| span.moves()) { Some(close) => { let rel = Affine3A::from_mat4(close) * open.inverse(); @@ -266,12 +258,12 @@ fn basis_weights(m: &[[f32; 4]; 4]) -> [[f32; 4]; 4] { /// points covers `v` from `0` to `1` over its `n − 1` linear segments, or /// over its cubic spans in equal steps of its parameter. pub(super) fn curve_segments( - prim: &Prim, - curves: &UsdBasisCurves, + prim: &PrimData, + curves: &PrimData, request: Option<&StrandRequest>, ) -> Option { - let points = value_at(&curves.points_attr()).and_then(decode_vec3f_array); - let counts = value_at(&curves.curve_vertex_counts_attr()).and_then(decode_i32_array); + let points = curves.value("points").and_then(decode_vec3f_array); + let counts = curves.value("curveVertexCounts").and_then(decode_i32_array); let (points, counts) = match (points, counts) { (Some(p), Some(c)) => (p, c), _ => { @@ -285,14 +277,19 @@ pub(super) fn curve_segments( let pts: Vec = points.iter().map(|p| Vec3A::new(p.x, p.y, p.z)).collect(); // An authored but empty array is no widths at all: the default. - let widths: Vec = value_at(&curves.widths_attr()) + let widths: Vec = curves + .value("widths") .and_then(decode_f32_array) .filter(|w| !w.is_empty()) .unwrap_or_else(|| vec![1.0]); // USD defaults: type = cubic, basis = bezier. - let ty = custom_token(prim, "type").unwrap_or_else(|| "cubic".to_string()); - let basis_name = custom_token(prim, "basis").unwrap_or_else(|| "bezier".to_string()); + let ty = prim + .custom_token("type") + .unwrap_or_else(|| "cubic".to_string()); + let basis_name = prim + .custom_token("basis") + .unwrap_or_else(|| "bezier".to_string()); let (basis, vstep) = match basis_name.as_str() { "bezier" => (&BEZIER_M, 3usize), "bspline" => (&BSPLINE_M, 1), @@ -480,7 +477,7 @@ pub(super) fn curves_scene(batches: CurveBatches) -> crust_rt::Scene { /// its world transform. pub(super) fn emit_curves( world: &mut WorldBuilder, - prim: &Prim, + prim: &PrimData, curves: Option, world_xf: GMat4, material: Arc, @@ -504,7 +501,7 @@ pub(super) fn emit_curves( transform_end: None, }, material, - prim_ray_mask(prim), + ray_mask(prim), ); match strands { Some(table) => world.set_strands(id, Arc::new(table)), @@ -661,12 +658,12 @@ fn decode_ranges(v: sdf::Value) -> Option> { /// the straight cubics tracing them. Primvars are blossomed unweighted: a /// rational curve's are approximated with it. pub(super) fn nurbs_curve_segments( - prim: &Prim, - curves: &UsdNurbsCurves, + prim: &PrimData, + curves: &PrimData, request: Option<&StrandRequest>, ) -> Option { - let points = value_at(&curves.points_attr()).and_then(decode_vec3f_array); - let counts = value_at(&curves.curve_vertex_counts_attr()).and_then(decode_i32_array); + let points = curves.value("points").and_then(decode_vec3f_array); + let counts = curves.value("curveVertexCounts").and_then(decode_i32_array); let (points, counts) = match (points, counts) { (Some(p), Some(c)) => (p, c), _ => { @@ -679,10 +676,12 @@ pub(super) fn nurbs_curve_segments( }; let n_points = points.len(); let n_curves = counts.len(); - let orders = value_at(&curves.order_attr()) + let orders = curves + .value("order") .and_then(decode_i32_array) .unwrap_or_default(); - let knots = value_at(&curves.knots_attr()) + let knots = curves + .value("knots") .and_then(decode_f64_array) .unwrap_or_default(); let expected_knots: i64 = counts @@ -708,11 +707,13 @@ pub(super) fn nurbs_curve_segments( return None; } // An authored but empty array is no widths at all: the default. - let widths: Vec = value_at(&curves.widths_attr()) + let widths: Vec = curves + .value("widths") .and_then(decode_f32_array) .filter(|w| !w.is_empty()) .unwrap_or_else(|| vec![1.0]); - let mut weights = value_at(&curves.point_weights_attr()) + let mut weights = curves + .value("pointWeights") .and_then(decode_f64_array) .filter(|w| w.len() == n_points); // A zero, negative or non-finite weight has no projection back out of @@ -731,7 +732,8 @@ pub(super) fn nurbs_curve_segments( ); weights = None; } - let ranges = value_at(&curves.ranges_attr()) + let ranges = curves + .value("ranges") .and_then(decode_ranges) .filter(|r| r.len() == n_curves); let width_of = |global_idx: usize, curve_idx: usize| -> f64 { diff --git a/crates/crust-core/src/scene/usd_import/strands.rs b/crates/crust-core/src/scene/usd_import/strands.rs index 5e39a90fe..4cdc03743 100644 --- a/crates/crust-core/src/scene/usd_import/strands.rs +++ b/crates/crust-core/src/scene/usd_import/strands.rs @@ -10,15 +10,15 @@ use crust_mtlx::Val; use glam::Vec3A; -use openusd::sdf; -use openusd::usd::Prim; +use moho::openusd::sdf; use crate::color::Space; use crate::material::CurveNeeds; use crate::strands::{StrandSpan, StrandTable, StrandValues}; use crate::warning; -use super::attrs::{custom_i32_array, decode_text, in_working, prim_value}; +use super::attrs::decode_text; +use super::index::data::{PrimData, color_space}; use super::products::{KeptPrimvar, PrimvarKeep}; /// What a curves prim's material asks of it, and what reading it takes. @@ -219,12 +219,12 @@ pub(super) struct CurveCounts { impl StrandBuilder { /// Reads every primvar `request` asks for on `prim`, refusing (with a /// warning) any it cannot read, and the authored `primvars:curve:*`. - pub(super) fn new(prim: &Prim, request: &StrandRequest, counts: CurveCounts) -> Self { + pub(super) fn new(prim: &PrimData, request: &StrandRequest, counts: CurveCounts) -> Self { let reserved: Vec = prim - .attributes_in_namespace("primvars:curve") - .unwrap_or_default() + .attribute_names() .iter() - .map(|a| a.path().to_string()) + .filter(|n| n.starts_with("primvars:curve:")) + .map(|n| prim.attribute_path(n)) .collect(); if !reserved.is_empty() { warning!( @@ -300,7 +300,7 @@ impl StrandBuilder { /// when the material reads only the chart and the prim authors none: a /// table would then carry nothing a hit could read, and still cost its /// spans and take every hit off `World::intersect`'s plain path. - pub(super) fn finish(self, prim: &Prim) -> Option { + pub(super) fn finish(self, prim: &PrimData) -> Option { let done = |c: Option| -> Option { let c = c?; if c.overrun { @@ -355,7 +355,7 @@ impl StrandBuilder { /// prim's counts and the var's component count; `None`, with one warning per /// var and prim, for one the var cannot read, and silently for one that is /// not authored. -fn read_kept(prim: &Prim, kept: &KeptPrimvar, counts: CurveCounts) -> Option { +fn read_kept(prim: &PrimData, kept: &KeptPrimvar, counts: CurveCounts) -> Option { let channel = match decode_channel(prim, &kept.name, None, counts) { Ok(c) => c?, Err(why) => return refuse_kept(prim, kept, &why), @@ -367,7 +367,7 @@ fn read_kept(prim: &Prim, kept: &KeptPrimvar, counts: CurveCounts) -> Option Option { +fn refuse_kept(prim: &PrimData, kept: &KeptPrimvar, why: &str) -> Option { warning!( PrimvarMismatch, at = prim.path(), @@ -386,7 +386,7 @@ fn refuse_kept(prim: &Prim, kept: &KeptPrimvar, why: &str) -> Option { /// for one that is not authored. A `chart` must have two lanes, and is /// refused silently otherwise: the next name in the chart list is tried. fn read( - prim: &Prim, + prim: &PrimData, name: &str, working: Space, counts: CurveCounts, @@ -414,22 +414,16 @@ fn read( /// `Ok(None)` for one that is not authored; `Err` with the reason for one /// that cannot be read. fn decode_channel( - prim: &Prim, + prim: &PrimData, name: &str, working: Option, counts: CurveCounts, ) -> Result, String> { let attr_name = format!("primvars:{name}"); - let attr = prim.attribute(&attr_name); - let Some(value) = prim_value(prim, &attr_name) else { + let Some(value) = prim.value(&attr_name) else { return Ok(None); }; - let type_name = attr - .type_name() - .ok() - .flatten() - .map(|t| t.as_str().to_string()) - .unwrap_or_default(); + let type_name = prim.type_name(&attr_name); let color = type_name.starts_with("color3"); let Some(mut values) = decode(value) else { return Err(format!( @@ -439,12 +433,19 @@ fn decode_channel( if let Some(working) = working && color { + // `attrs::in_working`: converted from the space the attribute names, + // as authored when it names none. + let space = color_space(prim, &attr_name); for v in &mut values { - let rgb = in_working(&attr, Vec3A::new(v.v[0], v.v[1], v.v[2]), working); + let rgb = Vec3A::new(v.v[0], v.v[1], v.v[2]); + let rgb = match space { + Some(space) => crate::color::convert(rgb, space, working), + None => rgb, + }; *v = rgb.into(); } } - if let Some(indices) = custom_i32_array(prim, &format!("{attr_name}:indices")) { + if let Some(indices) = prim.custom_i32_array(&format!("{attr_name}:indices")) { let expanded: Option> = indices .iter() .map(|&i| usize::try_from(i).ok().and_then(|i| values.get(i).copied())) @@ -454,10 +455,8 @@ fn decode_channel( None => return Err("has indices out of its range".into()), } } - let interp = match attr - .metadata::("interpolation") - .ok() - .flatten() + let interp = match prim + .metadata(&attr_name, "interpolation") .and_then(decode_text) .as_deref() { diff --git a/crates/crust-core/src/scene/usd_import/time.rs b/crates/crust-core/src/scene/usd_import/time.rs deleted file mode 100644 index 399cc112e..000000000 --- a/crates/crust-core/src/scene/usd_import/time.rs +++ /dev/null @@ -1,53 +0,0 @@ -//! Evaluation time: the USD time code every attribute read resolves at. - -use std::marker::PhantomData; - -use openusd::usd::TimeCode; - -thread_local! { - /// The USD time code every attribute read in this import resolves at — - /// `None` for the attribute's *default* value, which is what the importer - /// read before a frame could be asked for. - /// - /// A thread-local rather than a parameter because the answer is the - /// same for every one of the ~40 read sites and several of them sit in - /// helpers that are handed only a `Prim` or an `Attribute`; threading a - /// time through all of them would change every signature in this module - /// to carry a value none of them decide. It is sound only because every - /// attribute read happens on the importing thread — the one piece of - /// rayon work, `MeshArena::commit_slots`, builds BVHs from arrays already - /// read and never touches the stage — and it is scoped by - /// [`EvalTimeScope`], so a second import on the same thread (the tests) - /// never sees a stale time. A change that reads attributes from a rayon - /// task must thread the time explicitly instead. - static EVAL_TIME: std::cell::Cell> = const { std::cell::Cell::new(None) }; -} - -/// Sets [`EVAL_TIME`] for the lifetime of one `load_scene` call and restores -/// whatever was there before, including on an early `?` return. -/// -/// `!Send`: the guard restores a thread-local, so dropping it on any other -/// thread than the one that entered it would restore the wrong thread's time. -/// The marker makes moving it into a rayon task a compile error. -#[must_use = "the evaluation time is restored when the scope is dropped"] -pub(super) struct EvalTimeScope(Option, PhantomData<*const ()>); - -impl EvalTimeScope { - pub(super) fn enter(time: Option) -> Self { - EvalTimeScope(EVAL_TIME.with(|t| t.replace(time)), PhantomData) - } -} - -impl Drop for EvalTimeScope { - fn drop(&mut self) { - EVAL_TIME.with(|t| t.set(self.0)); - } -} - -/// The time an attribute read resolves at: `None` reads the default value -/// (`Attribute::get`), `Some` resolves time samples at that code, falling -/// back to the default when the attribute has none — so a static attribute -/// reads the same either way and only animated ones move. -pub(super) fn eval_time() -> Option { - EVAL_TIME.with(|t| t.get()).map(TimeCode::new) -} diff --git a/crates/crust-core/src/scene/usd_import/volume.rs b/crates/crust-core/src/scene/usd_import/volume.rs index ccbd94cfa..056431c9d 100644 --- a/crates/crust-core/src/scene/usd_import/volume.rs +++ b/crates/crust-core/src/scene/usd_import/volume.rs @@ -2,15 +2,12 @@ use crate::warning; use glam::{Mat4 as GMat4, Vec3A}; -use openusd::usd::Prim; use tracing::debug; use crate::color::Space; use crate::volume::{DensityField, VolumeRegion}; -use super::attrs::{ - custom_color, custom_f32, custom_f32_array, custom_i32, custom_i32_array, custom_token, -}; +use super::index::data::PrimData; /// Import a `crust:volume:*` prim as a `VolumeRegion`. The local box is /// `[-size/2, size/2]^3` when the prim authors a `size` attribute (a @@ -18,28 +15,35 @@ use super::attrs::{ /// `[-0.5, 0.5]^3` otherwise; placement, orientation and scale come from /// the composed prim transform. pub(super) fn emit_volume( - prim: &Prim, + prim: &PrimData, world_xf: GMat4, volumes: &mut Vec, working: Space, ) { - let ty = custom_token(prim, "crust:volume:type").expect("checked by dispatch"); + let ty = prim + .custom_token("crust:volume:type") + .expect("checked by dispatch"); let field = match ty.as_str() { "homogeneous" => DensityField::Homogeneous, "smoke" => DensityField::Noise { - scale: custom_f32(prim, "crust:volume:noiseScale").unwrap_or(4.0), - octaves: custom_i32(prim, "crust:volume:noiseOctaves") + scale: prim.custom_f32("crust:volume:noiseScale").unwrap_or(4.0), + octaves: prim + .custom_i32("crust:volume:noiseOctaves") .unwrap_or(4) .max(1) as u32, - gain: custom_f32(prim, "crust:volume:noiseGain").unwrap_or(0.5), - lacunarity: custom_f32(prim, "crust:volume:noiseLacunarity").unwrap_or(2.0), - threshold: custom_f32(prim, "crust:volume:noiseThreshold").unwrap_or(0.3), - seed: custom_i32(prim, "crust:volume:noiseSeed").unwrap_or(0) as u32, + gain: prim.custom_f32("crust:volume:noiseGain").unwrap_or(0.5), + lacunarity: prim + .custom_f32("crust:volume:noiseLacunarity") + .unwrap_or(2.0), + threshold: prim + .custom_f32("crust:volume:noiseThreshold") + .unwrap_or(0.3), + seed: prim.custom_i32("crust:volume:noiseSeed").unwrap_or(0) as u32, }, "grid" => { - let dims = custom_i32_array(prim, "crust:volume:gridDims"); - let data = custom_f32_array(prim, "crust:volume:gridData"); + let dims = prim.custom_i32_array("crust:volume:gridDims"); + let data = prim.custom_f32_array("crust:volume:gridData"); match (dims, data) { (Some(d), Some(data)) if d.len() == 3 => { let (nx, ny, nz) = ( @@ -87,12 +91,18 @@ pub(super) fn emit_volume( // Per-channel coefficients, so they are colours in the working space // like any other: converted only when `colorSpace` names another. - let sigma_s = custom_color(prim, "crust:volume:sigmaS", working).unwrap_or(Vec3A::splat(0.5)); - let sigma_a = custom_color(prim, "crust:volume:sigmaA", working).unwrap_or(Vec3A::ZERO); - let emission = custom_color(prim, "crust:volume:emission", working).unwrap_or(Vec3A::ZERO); - let g = custom_f32(prim, "crust:volume:anisotropy").unwrap_or(0.0); - let density_scale = custom_f32(prim, "crust:volume:densityScale").unwrap_or(1.0); - let half = custom_f32(prim, "size").map_or(0.5, |s| s * 0.5); + let sigma_s = prim + .custom_color("crust:volume:sigmaS", working) + .unwrap_or(Vec3A::splat(0.5)); + let sigma_a = prim + .custom_color("crust:volume:sigmaA", working) + .unwrap_or(Vec3A::ZERO); + let emission = prim + .custom_color("crust:volume:emission", working) + .unwrap_or(Vec3A::ZERO); + let g = prim.custom_f32("crust:volume:anisotropy").unwrap_or(0.0); + let density_scale = prim.custom_f32("crust:volume:densityScale").unwrap_or(1.0); + let half = prim.custom_f32("size").map_or(0.5, |s| s * 0.5); debug!( "Imported {} volume at {} (densityScale={})", diff --git a/crates/crust-core/src/scene/usd_import/xform.rs b/crates/crust-core/src/scene/usd_import/xform.rs index ea2878cd8..a4d704466 100644 --- a/crates/crust-core/src/scene/usd_import/xform.rs +++ b/crates/crust-core/src/scene/usd_import/xform.rs @@ -3,12 +3,11 @@ use crate::warning; use glam::{Affine3A, Mat4 as GMat4, Vec3}; +use moho::{openusd, openusd_schemas}; use openusd::gf::Mat4d; use openusd::tf::Token; -use openusd::usd::Prim; -use openusd_schemas::geom::{XformQuery, Xformable, XformableSchema}; -use super::time::{EvalTimeScope, eval_time}; +use super::index::data::PrimData; /// USD authors 4x4 matrices as row-vector row-major (translation in the /// last row, indices 12..15). glam::Mat4 is column-major with the @@ -51,48 +50,48 @@ fn op_kind(entry: &str) -> Option<&str> { name.strip_prefix("xformOp:")?.split(':').next() } -/// Warns once, naming every `xformOpOrder` entry that is not a -/// `UsdGeomXformOp` kind: openusd reads each as identity. -fn warn_unknown_ops(xf: &Xformable) { - let Ok(Some(order)) = xf.xform_op_order() else { - return; - }; +/// `xformOpOrder`'s entries, as the prim composes it (its fallback, empty, +/// when unauthored). +fn op_order(prim: &PrimData) -> Vec { + match prim.resolved("xformOpOrder") { + Some(openusd::sdf::Value::TokenVec(v)) => v.iter().map(|t| t.as_str().to_owned()).collect(), + _ => Vec::new(), + } +} + +/// [`warn_unknown_ops`], from the prim's generic data. +fn warn_unknown_ops_data(prim: &PrimData) { + let order = op_order(prim); let unknown: Vec<&str> = order .iter() - .filter(|e| e.as_str() != "!resetXformStack!") + .map(String::as_str) + .filter(|e| *e != "!resetXformStack!") .filter(|e| !op_kind(e).is_some_and(|k| XFORM_OP_KINDS.contains(&k))) - .map(|e| e.as_str()) .collect(); if !unknown.is_empty() { warning!( XformUnknownOp, - at = xf.path(), + at = prim.path(), "{}: xformOpOrder lists {} — not a UsdGeomXformOp kind, read as identity", - xf.path(), + prim.path(), unknown.join(", ") ); } } -/// Warns when a prim whose type the schema registry does not know (a plugin or -/// studio schema) authors an `xformOpOrder`: it reads as not `Xformable`, so -/// its ops and the placement of everything under it are dropped, as in C++ -/// USD without that plugin. An untyped prim and a known type that is not -/// `Xformable` (a `Scope`, a `Material`) stay silent: C++ ignores their ops by -/// definition. -fn warn_unknown_type(prim: &Prim) { - let Ok(Some(ty)) = prim.type_name() else { - return; - }; - if ty.as_str().is_empty() || openusd_schemas::schema_registry().is_concrete_type(&ty) { +/// [`warn_unknown_type`], from the prim's USD type (`__usdPrimInfo`) and +/// generic data. +fn warn_unknown_type_data(prim: &PrimData) { + let ty = prim.usd_type(); + if ty.is_empty() + || openusd_schemas::schema_registry().is_concrete_type(&Token::from(ty.as_str())) + { return; } - let authors_ops = prim - .attribute("xformOpOrder") - .get::>() - .ok() - .flatten() - .is_some_and(|order| !order.is_empty()); + let authors_ops = match prim.resolved("xformOpOrder") { + Some(openusd::sdf::Value::TokenVec(v)) => !v.is_empty(), + _ => false, + }; if authors_ops { warning!( XformUnknownType, @@ -105,80 +104,145 @@ fn warn_unknown_type(prim: &Prim) { } } -/// `prim`'s transform given its parent's: `parent · local`, or `local` alone -/// when the prim's `xformOpOrder` lists `!resetXformStack!` — the one -/// composition rule every walk (the traversal, the placement count, the -/// prototype walk, a camera's ancestor chain) applies. -/// -/// openusd composes the stack as C++ `UsdGeomXformable` does, in `f64`, cast -/// once: a reset drops the ops listed before it, and a prim that is not -/// `Xformable` (the pseudo-root, an untyped prim, a `Scope`) contributes -/// nothing, whatever ops it authors. A stack openusd cannot compose (a -/// singular `transform` to invert) keeps the parent, with a warning. -pub(super) fn compose_with_parent(prim: &Prim, parent: GMat4) -> GMat4 { - compose(prim, parent, true) +/// The prim's local `xform` in the scene index — Moho's `xform` data, read +/// from the input's stage scene index, not the flattened chain, so the local +/// matrix stays `f64` until crust composes it as before — at `offset` from +/// the index's time, and whether it resets the stack. `None` when the +/// prim's ops have no effect (or its stack cannot be read): no `xform`. +/// `Some((None, resets))` when the local transform cannot be composed. +fn local_xform(prim: &PrimData, offset: f32) -> Option<(Option, bool)> { + use moho::tokens::xform as t; + let resets = matches!( + prim.locate([t::XFORM, t::RESET_XFORM_STACK]) + .and_then(|d| d.value()), + Some(openusd::sdf::Value::Bool(true)) + ); + let matrix = prim.locate([t::XFORM, t::MATRIX])?; + let local = match matrix.as_sampled().and_then(|s| s.value(offset)) { + Some(openusd::sdf::Value::Matrix4d(m)) => Some(m), + _ => None, + }; + Some((local, resets)) } -/// [`compose_with_parent`] at time code `time` rather than the import's, for -/// the shutter's ends ([`TransformMotion`]). Quiet: the read at the frame -/// already warned about anything in the stack, once. -pub(super) fn compose_at(prim: &Prim, parent: GMat4, time: f64) -> GMat4 { - let _at = EvalTimeScope::enter(Some(time)); - compose(prim, parent, false) +/// A prim's transform given its parent's, over the scene index (`parent · +/// local`, or `local` alone when its stack resets): `prim` is the prim in the +/// input's stage scene index, `stage` its stage (for the one diagnostic the +/// index does not carry, `xform.uncomposable`, design D7) and `time` the +/// index's time. +pub(super) fn compose_index( + stage: &openusd::usd::Stage, + prim: &PrimData, + parent: GMat4, + time: Option, +) -> GMat4 { + compose_data(stage, prim, parent, time, 0.0, true) } -fn compose(prim: &Prim, parent: GMat4, report: bool) -> GMat4 { - let Some(xf) = Xformable::from_prim(prim.clone()).ok().flatten() else { +/// The local-to-world of the prim at `path` on `stage`, for a reader that is +/// handed a stage rather than the walk's index (a camera's lens, a live +/// rebuild): [`index_local_to_world`] over a stage scene index of its own, at +/// time code `time` (`None`, the default time). +pub(super) fn stage_local_to_world( + stage: &openusd::usd::Stage, + path: &openusd::sdf::Path, + time: Option, +) -> GMat4 { + let index = moho::stage::StageSceneIndex::new(); + if let Some(t) = time { + index.set_time(openusd::usd::TimeCode::new(t)); + } + index.set_stage(stage.clone()); + let handle: moho::scene_index::SceneIndexHandle = index; + index_local_to_world(stage, &handle, path, time) +} + +/// A prim's local-to-world over the scene index: [`compose_index`] folded +/// from the root down `path`'s ancestors in the stage scene index `index` +/// over `stage`, at the index's `time` — `camera::local_to_world` (the +/// stage walk) on the index, for a reader outside the walk. +pub(super) fn index_local_to_world( + stage: &openusd::usd::Stage, + index: &moho::scene_index::SceneIndexHandle, + path: &openusd::sdf::Path, + time: Option, +) -> GMat4 { + let mut chain = vec![path.clone()]; + let mut cur = path.clone(); + while let Some(parent) = cur.parent() { + chain.push(parent.clone()); + if parent.is_abs_root() { + break; + } + cur = parent; + } + chain.iter().rev().fold(GMat4::IDENTITY, |acc, p| { + compose_index(stage, &PrimData::at(index.as_ref(), p), acc, time) + }) +} + +fn compose_data( + stage: &openusd::usd::Stage, + prim: &PrimData, + parent: GMat4, + time: Option, + offset: f32, + report: bool, +) -> GMat4 { + if !prim.is_a("Xformable") { if report { - warn_unknown_type(prim); + warn_unknown_type_data(prim); } return parent; - }; + } if report { - warn_unknown_ops(&xf); - } - let query = XformQuery::new(&xf); - let composed = query - .as_ref() - .map_err(|e| e.to_string()) - .and_then(|q| q.local_transform(eval_time()).map_err(|e| e.to_string())); - let local = match composed { - Ok(m) => usd_mat_to_glam(m), - Err(e) => { + warn_unknown_ops_data(prim); + } + let (local, resets) = match local_xform(prim, offset) { + Some((Some(m), resets)) => (usd_mat_to_glam(m), resets), + found => { + // No `xform`: the ops have no effect, or the stack cannot be read + // — which openusd says, when it is so. + let resets = found.is_some_and(|(_, r)| r); if report { - warning!( - XformUncomposable, - at = xf.path(), - "{}: could not compose its xformOp stack ({e}) — its local transform is \ - identity", - xf.path() - ); + let at = time.map(|t| t + f64::from(offset)); + if let Some(e) = super::index::stage_facts::xform_error(stage, prim.path(), at) { + warning!( + XformUncomposable, + at = prim.path(), + "{}: could not compose its xformOp stack ({e}) — its local transform is \ + identity", + prim.path() + ); + } } - GMat4::IDENTITY + (GMat4::IDENTITY, resets) } }; - if query.is_ok_and(|q| q.resets_xform_stack()) { - local - } else { - parent * local - } + if resets { local } else { parent * local } } -/// What `prim`'s own op stack says about time: whether the transform it -/// composes might differ at another time (C++ -/// `UsdGeomXformable::TransformMightBeTimeVarying`), and whether it resets -/// its parent's. A prim that is not `Xformable` neither varies nor resets. -fn own_timing(prim: &Prim) -> (bool, bool) { - let Some(xf) = Xformable::from_prim(prim.clone()).ok().flatten() else { +/// What the prim's own op stack says about time, from the scene index: whether the prim's local transform +/// might vary (`TransformMightBeTimeVarying`: its ops have an effect, Moho's +/// `xform` is there, and an op attribute might vary, its generic +/// `mightBeTimeVarying`, M9), and whether it resets its parent's. +fn own_timing_data(prim: &PrimData) -> (bool, bool) { + if !prim.is_a("Xformable") { return (false, false); - }; - match XformQuery::new(&xf) { - Ok(q) => ( - q.transform_might_be_time_varying().unwrap_or(false), - q.resets_xform_stack(), - ), - Err(_) => (false, false), } + let Some((_, resets)) = local_xform(prim, 0.0) else { + return (false, false); + }; + // The ops after the last reset, as `GetOrderedXformOps` lists them. + let order = op_order(prim); + let start = order + .iter() + .rposition(|e| e == "!resetXformStack!") + .map_or(0, |i| i + 1); + let varies = order[start..] + .iter() + .any(|e| prim.might_vary(e.strip_prefix("!invert!").unwrap_or(e))); + (varies, resets) } /// A moving prim's local-to-world at shutter open and at shutter close. @@ -263,10 +327,10 @@ pub(super) struct Tally { } impl Tally { - pub(super) fn saw(&mut self, prim: &Prim) { + pub(super) fn saw(&mut self, path: &openusd::sdf::Path) { self.count += 1; if self.first.is_none() { - self.first = Some(prim.path().to_string()); + self.first = Some(path.to_string()); } } } @@ -291,6 +355,9 @@ pub(super) struct TransformMotion { frame_pose: bool, /// Whether prims are asked about time at all. query: bool, + /// The frame, the scene index's time, from which the shutter's ends are + /// read as offsets ([`TransformMotion::timing_index`]). + frame: Option, /// Drawn prims whose transform varies over time, while the shutter /// moves nothing. pub(super) varying: Tally, @@ -345,15 +412,22 @@ impl TransformMotion { } } - /// `prim`'s timing, given its parent's (`parent`, at the frame - /// `parent_world`) and its own transform at the frame, `world`. A prim - /// moves when its own ops vary or its parent moves and it does not reset - /// the stack; it is then composed at both ends of the shutter, through - /// [`compose_at`] — so a static prim pays nothing, and a static child of a - /// moving parent two compositions. - pub(super) fn timing( + /// The frame the shutter's ends are offsets from (the index's time). + pub(super) fn with_frame(mut self, frame: Option) -> Self { + self.frame = frame; + self + } + + /// How `prim` (in the input's stage scene index) moves over the shutter, + /// below a parent timed `parent`. Its transform at the shutter's ends is + /// Moho's `xform/matrix` at those ends' offsets from the frame, `f32` + /// as Hydra's sampled data sources take them: an offset `f32` cannot hold + /// exactly reads another time than the direct importer's `f64` one, the + /// change's listed parity exception (`import-parity`). + pub(super) fn timing_index( &self, - prim: &Prim, + stage: &openusd::usd::Stage, + prim: &PrimData, parent: &Timing, parent_world: GMat4, world: GMat4, @@ -361,7 +435,7 @@ impl TransformMotion { if !self.query { return Timing::Static; } - let (varies, resets) = own_timing(prim); + let (varies, resets) = own_timing_data(prim); if !varies && (resets || *parent == Timing::Static) { return Timing::Static; } @@ -375,40 +449,46 @@ impl TransformMotion { close: parent_world, }, }; + let frame = self.frame.unwrap_or(0.0); + #[allow(clippy::cast_possible_truncation)] + let at = |end: f64, parent: GMat4| { + compose_data(stage, prim, parent, self.frame, (end - frame) as f32, false) + }; Timing::Moves(Box::new(Pair { open: if self.open_at_frame { world } else { - compose_at(prim, parent.open, open) + at(open, parent.open) }, - close: compose_at(prim, parent.close, close), + close: at(close, parent.close), })) } /// Counts `prim`, whose transform has `timing` but which gets no motion. - pub(super) fn unmoved(&mut self, prim: &Prim, timing: &Timing) { + pub(super) fn unmoved(&mut self, path: &openusd::sdf::Path, timing: &Timing) { match timing { Timing::Static => {} - Timing::Varies => self.varying.saw(prim), - Timing::Moves(_) => self.ignored.saw(prim), + Timing::Varies => self.varying.saw(path), + Timing::Moves(_) => self.ignored.saw(path), } } /// Counts a drawn prim whose transform varies but which the shutter does /// not move. - pub(super) fn drawn(&mut self, prim: &Prim, timing: &Timing) { + pub(super) fn drawn(&mut self, path: &openusd::sdf::Path, timing: &Timing) { if *timing == Timing::Varies { - self.varying.saw(prim); + self.varying.saw(path); } } /// Counts `prim`, inside a prototype, when its own ops vary: motion /// inside a prototype is not produced. - pub(super) fn in_prototype(&mut self, prim: &Prim) { - if self.query && own_timing(prim).0 { + /// `xform` is the prim in the stage scene index, `path` its name. + pub(super) fn in_prototype(&mut self, xform: &PrimData, path: &openusd::sdf::Path) { + if self.query && own_timing_data(xform).0 { match self.interval { - Some(_) => self.ignored.saw(prim), - None => self.varying.saw(prim), + Some(_) => self.ignored.saw(path), + None => self.varying.saw(path), } } } @@ -444,14 +524,7 @@ mod tests { let stage = stage_builder() .open(path.to_str().unwrap()) .expect("stage opens"); - [ - sdf::Path::abs_root(), - sdf::path("/W").unwrap(), - sdf::path("/W/P").unwrap(), - ] - .into_iter() - .map(|p| super::super::prim_at(&stage, p)) - .fold(GMat4::IDENTITY, |acc, p| compose_with_parent(&p, acc)) + stage_local_to_world(&stage, &sdf::path("/W/P").unwrap(), None) } fn assert_near(a: GMat4, b: GMat4) { @@ -558,10 +631,6 @@ mod tests { .expect("stage opens") } - fn prim(stage: &openusd::usd::Stage, path: &str) -> Prim { - super::super::prim_at(stage, sdf::path(path).unwrap()) - } - const ANIMATED: &str = r#"#usda 1.0 def Xform "A" { @@ -588,20 +657,45 @@ def Xform "Still" } "#; - /// At another time, then back: the read after it resolves at the outer - /// time again. + /// The input's stage scene index over `stage` at `time`, as the walk + /// reads transforms (before the flattening). + fn stage_index( + stage: &openusd::usd::Stage, + time: Option, + ) -> moho::scene_index::SceneIndexHandle { + let index = moho::stage::StageSceneIndex::new(); + if let Some(t) = time { + index.set_time(openusd::usd::TimeCode::new(t)); + } + index.set_stage(stage.clone()); + index + } + + /// `path` in `index`, as the walk reads it. + fn at_path(index: &moho::scene_index::SceneIndexHandle, path: &str) -> PrimData { + PrimData::in_index(index, &sdf::path(path).unwrap()) + } + + /// At an offset from the index's time: Moho's sampled `xform/matrix`. #[test] - fn compose_at_reads_another_time_and_restores_the_outer_one() { + fn an_offset_reads_another_time() { let stage = open("compose_at", ANIMATED); - let a = prim(&stage, "/A"); - let _frame = EvalTimeScope::enter(Some(2.0)); + let index = stage_index(&stage, Some(2.0)); + let a = at_path(&index, "/A"); let at = |m: GMat4| m.transform_point3(Vec3::ZERO); assert_eq!( - at(compose_at(&a, GMat4::IDENTITY, 7.0)), + at(compose_data( + &stage, + &a, + GMat4::IDENTITY, + Some(2.0), + 5.0, + false + )), Vec3::new(7.0, 0.0, 0.0) ); assert_eq!( - at(compose_with_parent(&a, GMat4::IDENTITY)), + at(compose_index(&stage, &a, GMat4::IDENTITY, Some(2.0))), Vec3::new(2.0, 0.0, 0.0) ); } @@ -612,12 +706,16 @@ def Xform "Still" #[test] fn the_shutter_pair_follows_moving_ancestors_but_not_a_reset() { let stage = open("pair", ANIMATED); - let _frame = EvalTimeScope::enter(Some(2.0)); - let motion = TransformMotion::new(Some((2.0, 3.0)), true, false, false); + let index = stage_index(&stage, Some(2.0)); + let motion = + TransformMotion::new(Some((2.0, 3.0)), true, false, false).with_frame(Some(2.0)); let timing = |path: &str, parent: Timing, parent_world: GMat4| { - let p = prim(&stage, path); - let world = compose_with_parent(&p, parent_world); - (motion.timing(&p, &parent, parent_world, world), world) + let p = at_path(&index, path); + let world = compose_index(&stage, &p, parent_world, Some(2.0)); + ( + motion.timing_index(&stage, &p, &parent, parent_world, world), + world, + ) }; let (still, _) = timing("/Still", Timing::Static, GMat4::IDENTITY); assert_eq!(still, Timing::Static); @@ -656,55 +754,64 @@ def Xform "Still" #[test] fn a_frame_pose_starts_at_the_frame_and_moves_by_the_shutter() { let stage = open("frame_pose", ANIMATED); - let _frame = EvalTimeScope::enter(Some(2.0)); - let a = prim(&stage, "/A"); - let world = compose_with_parent(&a, GMat4::IDENTITY); + let index = stage_index(&stage, Some(2.0)); + let a = at_path(&index, "/A"); + let world = compose_index(&stage, &a, GMat4::IDENTITY, Some(2.0)); let at = |m: GMat4| m.transform_point3(Vec3::ZERO); - let ends = |motion: &TransformMotion| { - let timing = motion.timing(&a, &Timing::Static, GMat4::IDENTITY, world); + let ends = |motion: TransformMotion| { + let motion = motion.with_frame(Some(2.0)); + let timing = motion.timing_index(&stage, &a, &Timing::Static, GMat4::IDENTITY, world); let span = motion.span(world, &timing); (at(span.open), at(span.close.expect("it moves"))) }; let centred = TransformMotion::new(Some((1.75, 2.25)), false, false, false); assert_eq!( - ends(¢red), + ends(centred), (Vec3::new(1.75, 0.0, 0.0), Vec3::new(2.25, 0.0, 0.0)) ); let posed = TransformMotion::new(Some((1.75, 2.25)), false, true, false); assert_eq!( - ends(&posed), + ends(posed), (Vec3::new(2.0, 0.0, 0.0), Vec3::new(2.5, 0.0, 0.0)) ); let at_frame = TransformMotion::new(Some((2.0, 2.5)), true, true, false); let unposed = TransformMotion::new(Some((2.0, 2.5)), true, false, false); - assert_eq!(ends(&at_frame), ends(&unposed)); + assert_eq!(ends(at_frame), ends(unposed)); } /// With an instantaneous shutter the question is still answered when - /// asked (for the warnings), but nothing is composed twice; unasked, a - /// moving prim reads static. A static stage with a shutter creates no - /// pair at all. + /// asked (for the warnings), at the default time too (M9), but nothing is + /// composed twice; unasked, a moving prim reads static. A static stage + /// with a shutter creates no pair at all. #[test] fn without_an_interval_a_varying_prim_varies_and_moves_nothing() { let stage = open("varies", ANIMATED); - let a = prim(&stage, "/A"); - let world = compose_with_parent(&a, GMat4::IDENTITY); + let index = stage_index(&stage, None); + let a = at_path(&index, "/A"); + let world = compose_index(&stage, &a, GMat4::IDENTITY, None); let asked = TransformMotion::new(None, true, false, true); assert_eq!( - asked.timing(&a, &Timing::Static, GMat4::IDENTITY, world), + asked.timing_index(&stage, &a, &Timing::Static, GMat4::IDENTITY, world), Timing::Varies ); let unasked = TransformMotion::new(None, true, false, false); assert_eq!( - unasked.timing(&a, &Timing::Static, GMat4::IDENTITY, world), + unasked.timing_index(&stage, &a, &Timing::Static, GMat4::IDENTITY, world), Timing::Static ); - let moving = TransformMotion::new(Some((0.0, 1.0)), true, false, false); - let still = prim(&stage, "/Still"); - let still_world = compose_with_parent(&still, GMat4::IDENTITY); + let moving = + TransformMotion::new(Some((0.0, 1.0)), true, false, false).with_frame(Some(0.0)); + let still = at_path(&index, "/Still"); + let still_world = compose_index(&stage, &still, GMat4::IDENTITY, None); assert_eq!( - moving.timing(&still, &Timing::Static, GMat4::IDENTITY, still_world), + moving.timing_index( + &stage, + &still, + &Timing::Static, + GMat4::IDENTITY, + still_world + ), Timing::Static ); } diff --git a/crates/crust-core/src/warnings.rs b/crates/crust-core/src/warnings.rs index 9ed6a52e8..df8efe280 100644 --- a/crates/crust-core/src/warnings.rs +++ b/crates/crust-core/src/warnings.rs @@ -20,9 +20,8 @@ //! counted, the first [`MAX_PRIMS`] distinct prims kept, in first-fire order. //! Outside a scope the macros only log. //! -//! The collector is a thread-local, like the import's evaluation time -//! (`usd_import/time.rs`), and sound for the same reason: every import-time -//! warning is raised on the importing thread. A warning raised from a rayon +//! The collector is a thread-local, sound because every import-time warning +//! is raised on the importing thread. A warning raised from a rayon //! task during an import is logged but not recorded; in a debug build it //! panics instead, so the mistake is found by the tests rather than by a //! report that silently misses it. diff --git a/crates/crust-core/tests/asset_anchoring.rs b/crates/crust-core/tests/asset_anchoring.rs new file mode 100644 index 000000000..840ab43b0 --- /dev/null +++ b/crates/crust-core/tests/asset_anchoring.rs @@ -0,0 +1,192 @@ +//! Relative asset paths authored in a referenced layer, below the root +//! layer's directory, are anchored against the layer that authors them, as +//! USD anchors them: a UsdUVTexture's file (a UDIM set and a plain file, both +//! absent from disk, so openusd resolves neither), a MaterialX `filename` +//! input, and a RectLight's texture. The test asserts the paths the host is +//! asked for, and the import's digest is compared with the direct importer's +//! baseline (the `parity` feature). + +#![allow(clippy::unwrap_used)] + +use crust_core::{AssetLoader, ColorSpace, Scene}; +use std::path::{Path, PathBuf}; +use std::sync::{Arc, Mutex}; + +const ASSET: &str = r#"#usda 1.0 +def Xform "Asset" +{ + def Mesh "Q" (prepend apiSchemas = ["MaterialBindingAPI"]) + { + uniform token subdivisionScheme = "none" + int[] faceVertexCounts = [4] + int[] faceVertexIndices = [0, 1, 2, 3] + point3f[] points = [(0, 0, 0), (1, 0, 0), (1, 1, 0), (0, 1, 0)] + texCoord2f[] primvars:st = [(0, 0), (1, 0), (1, 1), (0, 1)] (interpolation = "vertex") + rel material:binding = + } + def Mesh "R" (prepend apiSchemas = ["MaterialBindingAPI"]) + { + uniform token subdivisionScheme = "none" + int[] faceVertexCounts = [4] + int[] faceVertexIndices = [0, 1, 2, 3] + point3f[] points = [(2, 0, 0), (3, 0, 0), (3, 1, 0), (2, 1, 0)] + texCoord2f[] primvars:st = [(0, 0), (1, 0), (1, 1), (0, 1)] (interpolation = "vertex") + rel material:binding = + } + def RectLight "Card" + { + float inputs:width = 1 + float inputs:height = 1 + asset inputs:texture:file = @../cards/card.png@ + double3 xformOp:translate = (1, 1, 3) + uniform token[] xformOpOrder = ["xformOp:translate"] + } + def Scope "Looks" + { + def Material "M" + { + token outputs:surface.connect = + def Shader "S" + { + uniform token info:id = "UsdPreviewSurface" + color3f inputs:diffuseColor.connect = + float inputs:roughness.connect = + token outputs:surface + } + def Shader "T" + { + uniform token info:id = "UsdUVTexture" + asset inputs:file = @../tex/albedo..png@ + vector3f outputs:rgb + } + def Shader "U" + { + uniform token info:id = "UsdUVTexture" + asset inputs:file = @textures/rough.png@ + float outputs:r + } + } + def Material "X" + { + token outputs:mtlx:surface.connect = + def Shader "S" + { + uniform token info:id = "ND_standard_surface_surfaceshader" + color3f inputs:base_color.connect = + token outputs:out + } + def Shader "I" + { + uniform token info:id = "ND_image_color3" + asset inputs:file = @textures/base..png@ + color3f outputs:out + } + } + } +} +"#; + +const ROOT: &str = r#"#usda 1.0 +def Xform "World" +{ + def Camera "Cam" + { + double3 xformOp:translate = (1.5, 0.5, 6) + uniform token[] xformOpOrder = ["xformOp:translate"] + } + def Xform "Thing" (prepend references = @assets/deep/asset.usda@) {} +} +"#; + +/// The stage, written under a fresh directory: `root.usda`, and the asset two +/// directories below it. +fn stage() -> PathBuf { + let dir = std::env::temp_dir().join("crust_asset_anchoring"); + let _ = std::fs::remove_dir_all(&dir); + std::fs::create_dir_all(dir.join("assets/deep")).unwrap(); + std::fs::write(dir.join("assets/deep/asset.usda"), ASSET).unwrap(); + std::fs::write(dir.join("root.usda"), ROOT).unwrap(); + dir.join("root.usda") +} + +/// A host that records every texture path it is asked for, and decodes none. +#[derive(Default)] +struct Recording(Mutex>); + +impl AssetLoader for Recording { + fn load_environment(&self, path: &Path, _: ColorSpace) -> Option { + self.0.lock().unwrap().push(path.to_path_buf()); + None + } + fn load_texture(&self, path: &Path, _: ColorSpace) -> Option> { + self.0.lock().unwrap().push(path.to_path_buf()); + None + } + fn load_light_texture( + &self, + path: &Path, + _: ColorSpace, + ) -> Option> { + self.0.lock().unwrap().push(path.to_path_buf()); + None + } +} + +#[test] +fn relative_assets_in_a_referenced_layer_anchor_on_that_layer() { + let path = stage(); + let dir = path.parent().unwrap().display().to_string(); + let assets = Recording::default(); + Scene::from_usd_with_assets(&path, &assets).expect("imports"); + let mut asked: Vec = assets + .0 + .lock() + .unwrap() + .iter() + .map(|p| p.display().to_string().replacen(&dir, "$DIR", 1)) + .collect(); + asked.sort(); + asked.dedup(); + // Each anchored on `assets/deep/`, the authoring layer's directory, as + // USD anchors it, never on the root layer's. + assert_eq!( + asked, + [ + "$DIR/assets/deep/../cards/card.png", + "$DIR/assets/deep/../tex/albedo..png", + "$DIR/assets/deep/textures/base..png", + "$DIR/assets/deep/textures/rough.png", + ] + ); +} + +/// A texture file authored as a `string`, not an `asset`: USD does not +/// resolve it, and the importer anchors it on its authoring layer all the +/// same, as the direct importer did. +#[test] +fn a_string_typed_texture_path_anchors_on_its_layer_too() { + let dir = std::env::temp_dir().join("crust_asset_anchoring_string"); + let _ = std::fs::remove_dir_all(&dir); + std::fs::create_dir_all(dir.join("assets/deep")).unwrap(); + let asset = ASSET.replace( + "asset inputs:file = @textures/rough.png@", + "string inputs:file = \"textures/rough.png\"", + ); + std::fs::write(dir.join("assets/deep/asset.usda"), asset).unwrap(); + std::fs::write(dir.join("root.usda"), ROOT).unwrap(); + let assets = Recording::default(); + Scene::from_usd_with_assets(&dir.join("root.usda"), &assets).expect("imports"); + let root = dir.display().to_string(); + let asked: Vec = assets + .0 + .lock() + .unwrap() + .iter() + .map(|p| p.display().to_string().replacen(&root, "$DIR", 1)) + .filter(|p| p.contains("rough")) + .collect(); + // The image run (`CRUST_PARITY_IMAGES=1`) imports twice. + let mut asked = asked; + asked.dedup(); + assert_eq!(asked, ["$DIR/assets/deep/textures/rough.png"]); +} diff --git a/crates/crust-core/tests/data/import_baselines/PointInstancedMedCity_usd-951317bf2ce0f6ed-1.digest b/crates/crust-core/tests/data/import_baselines/PointInstancedMedCity_usd-951317bf2ce0f6ed-1.digest new file mode 100644 index 000000000..7ad74d6cf --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/PointInstancedMedCity_usd-951317bf2ce0f6ed-1.digest @@ -0,0 +1,17 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/Cameras/main_cam") +camera: Camera { origin: Vec3A(0.0, 0.0, 0.0), lower_left_corner: Vec3A(-0.27183646, -0.15290801, -1.0), horizontal: Vec3A(0.5436729, 0.0, 0.0), vertical: Vec3A(0.0, 0.30581602, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: Some(Vec4(0.0, 0.0, -1.0, -1.0)), far: Some(Vec4(0.0, 0.0, 1.0, 1000000.0)), planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: None +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 640, height: 360, region: PixelRect { x0: 0, y0: 0, x1: 640, y1: 360 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 50.0, aperture: [20.955, 15.2908], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 0.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/PointInstancedMedCity.usd"], invisible_overrides: Some(0) } +layer: $DIR/PointInstancedMedCity.usd +warning: Warning { code: InstancingEmptyPrototype, kind: Skipped, count: 8, prims: ["/MediterraneanHills/Buildings/Prototypes/prototype_0", "/MediterraneanHills/Buildings/Prototypes/prototype_1", "/MediterraneanHills/Buildings/Prototypes/prototype_2", "/MediterraneanHills/Buildings/Prototypes/prototype_3", "/MediterraneanHills/Buildings/Prototypes/prototype_4", "/MediterraneanHills/Buildings/Prototypes/prototype_5", "/MediterraneanHills/Buildings/Prototypes/prototype_6", "/MediterraneanHills/Buildings/Prototypes/prototype_7"], message: "Prototype /MediterraneanHills/Buildings/Prototypes/prototype_0 contributed no geometry" } +lights: 0 +volumes: 0 +world: 0 geometries, PrimitiveBreakdown { triangles: 0, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 0, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: true, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/Cameras/main_cam"), cameras: ["/Cameras/main_cam"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/Cameras/main_cam"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/PointInstancedMedCity_usd-951317bf2ce0f6ed-1.image b/crates/crust-core/tests/data/import_baselines/PointInstancedMedCity_usd-951317bf2ce0f6ed-1.image new file mode 100644 index 000000000..c734c5b1d --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/PointInstancedMedCity_usd-951317bf2ce0f6ed-1.image @@ -0,0 +1 @@ +640x360 16spp clamp-off a04a09c0d4b5e325 diff --git a/crates/crust-core/tests/data/import_baselines/absorber_usda-e5a517b5b36fd7e1-1.digest b/crates/crust-core/tests/data/import_baselines/absorber_usda-e5a517b5b36fd7e1-1.digest new file mode 100644 index 000000000..d5a034e45 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/absorber_usda-e5a517b5b36fd7e1-1.digest @@ -0,0 +1,22 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: None +camera: Camera { origin: Vec3A(15.0, 3.0, 3.0), lower_left_corner: Vec3A(4.8863316, -0.044797063, 4.174048), horizontal: Vec3A(1.2295314, 0.0, -6.147657), vertical: Vec3A(-0.44830504, 3.4967792, -0.08966101), u: Vec3A(0.19611613, 0.0, -0.9805807), v: Vec3A(-0.1271232, 0.991561, -0.02542464), lens_radius: 0.05, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: None +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 640, height: 360, region: PixelRect { x0: 0, y0: 0, x1: 640, y1: 360 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: None, depth_of_field: true, motion_blur: false, layer_stack: ["$DIR/absorber.usda"], invisible_overrides: Some(0) } +layer: $DIR/absorber.usda +warning: Warning { code: CameraMissing, kind: Skipped, count: 1, prims: [], message: "USD stage has no UsdGeomCamera — falling back to world::get_settings camera" } +lights: 1 +light 0: dome name Some("/World/Sky") lpe None pmf 1.0 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 1 geometries, PrimitiveBreakdown { triangles: 0, spheres: 1, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 0, spheres: 1, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +geom 0: material #0 Signature { kind: "MaterialX", cutout: false, straight: false, boundary: true, emits: false, uv: true, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:fb1e7d48790aec95 camera=1:fb1e7d48790aec95 shadow=1:fb1e7d48790aec95 indirect=1:fb1e7d48790aec95 +provenance material /World/Fog: MaterialOrigin { slots: [0], displaced: false } +provenance light /World/Sky: LightOrigin { index: 0, geoms: 0..0 } +provenance geometry 0..1: /World/Ball +provenance spheres: [0] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: None, cameras: [], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: None, offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/absorber_usda-e5a517b5b36fd7e1-1.image b/crates/crust-core/tests/data/import_baselines/absorber_usda-e5a517b5b36fd7e1-1.image new file mode 100644 index 000000000..284ab7d2f --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/absorber_usda-e5a517b5b36fd7e1-1.image @@ -0,0 +1 @@ +640x360 16spp clamp-off 124764322822d8dd diff --git a/crates/crust-core/tests/data/import_baselines/adaptive_bounded_usda-871964d811713ece-1.digest b/crates/crust-core/tests/data/import_baselines/adaptive_bounded_usda-871964d811713ece-1.digest new file mode 100644 index 000000000..13d96c40f --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/adaptive_bounded_usda-871964d811713ece-1.digest @@ -0,0 +1,21 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/World/Cam") +camera: Camera { origin: Vec3A(0.0, 0.0, 0.0), lower_left_corner: Vec3A(-2.7183647, -1.5290802, -10.0), horizontal: Vec3A(5.4367294, 0.0, 0.0), vertical: Vec3A(0.0, 3.0581603, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: Some("/Render/settings") +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 320, height: 180, region: PixelRect { x0: 0, y0: 0, x1: 320, y1: 180 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 50.0, aperture: [20.955, 15.2908], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 10.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/adaptive_bounded.usda"], invisible_overrides: Some(0) } +layer: $DIR/adaptive_bounded.usda +lights: 0 +volumes: 0 +world: 1 geometries, PrimitiveBreakdown { triangles: 128, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 128, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=128:19ba5b802c764acd camera=128:19ba5b802c764acd shadow=128:19ba5b802c764acd indirect=128:19ba5b802c764acd +provenance material /World/Height: MaterialOrigin { slots: [0], displaced: true } +provenance geometry 0..1: /World/Ground +provenance mesh: MeshOrigin { geom_id: 0, slot: 0, baked: true, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 11414414559242978054, n_points: 81, n_indices: 384, n_uvs: Some(81), smooth: true, material: 0 }), placements: 1, shared: false, displaced: true } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: Some(ScreenKey([0, 0, 0, 1142105526, 0, 0, 0, 3212836864, 0, 3196792357, 1065353216, 0, 3196792357, 0, 3212836864, 3189543914, 0, 1065353216, 3189543914, 0, 0, 3212836864, 1082130432, 3])), domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/World/Cam"), cameras: ["/World/Cam"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/World/Cam"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/adaptive_bounded_usda-871964d811713ece-1.image b/crates/crust-core/tests/data/import_baselines/adaptive_bounded_usda-871964d811713ece-1.image new file mode 100644 index 000000000..42d037249 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/adaptive_bounded_usda-871964d811713ece-1.image @@ -0,0 +1 @@ +320x180 16spp clamp-off 4581757b44c71325 diff --git a/crates/crust-core/tests/data/import_baselines/adaptive_unbounded_usda-6ab4975baebe18ef-1.digest b/crates/crust-core/tests/data/import_baselines/adaptive_unbounded_usda-6ab4975baebe18ef-1.digest new file mode 100644 index 000000000..643a0ebf9 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/adaptive_unbounded_usda-6ab4975baebe18ef-1.digest @@ -0,0 +1,21 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/World/Cam") +camera: Camera { origin: Vec3A(0.0, 0.0, 0.0), lower_left_corner: Vec3A(-2.7183647, -1.5290802, -10.0), horizontal: Vec3A(5.4367294, 0.0, 0.0), vertical: Vec3A(0.0, 3.0581603, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: Some("/Render/settings") +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 320, height: 180, region: PixelRect { x0: 0, y0: 0, x1: 320, y1: 180 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 50.0, aperture: [20.955, 15.2908], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 10.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/adaptive_unbounded.usda"], invisible_overrides: Some(0) } +layer: $DIR/adaptive_unbounded.usda +lights: 0 +volumes: 0 +world: 1 geometries, PrimitiveBreakdown { triangles: 128, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 128, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=128:19ba5b802c764acd camera=128:19ba5b802c764acd shadow=128:19ba5b802c764acd indirect=128:19ba5b802c764acd +provenance material /World/Height: MaterialOrigin { slots: [0], displaced: true } +provenance geometry 0..1: /World/Ground +provenance mesh: MeshOrigin { geom_id: 0, slot: 0, baked: true, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 11414414559242978054, n_points: 81, n_indices: 384, n_uvs: Some(81), smooth: true, material: 0 }), placements: 1, shared: false, displaced: true } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: Some(ScreenKey([0, 0, 0, 1142105526, 0, 0, 0, 3212836864, 0, 3196792357, 1065353216, 0, 3196792357, 0, 3212836864, 3189543914, 0, 1065353216, 3189543914, 0, 0, 3212836864, 1082130432, 3])), domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/World/Cam"), cameras: ["/World/Cam"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/World/Cam"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/adaptive_unbounded_usda-6ab4975baebe18ef-1.image b/crates/crust-core/tests/data/import_baselines/adaptive_unbounded_usda-6ab4975baebe18ef-1.image new file mode 100644 index 000000000..42d037249 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/adaptive_unbounded_usda-6ab4975baebe18ef-1.image @@ -0,0 +1 @@ +320x180 16spp clamp-off 4581757b44c71325 diff --git a/crates/crust-core/tests/data/import_baselines/adjust_aperture_height_usda-9d28c7b3a9cad9f9-1.digest b/crates/crust-core/tests/data/import_baselines/adjust_aperture_height_usda-9d28c7b3a9cad9f9-1.digest new file mode 100644 index 000000000..092de087f --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/adjust_aperture_height_usda-9d28c7b3a9cad9f9-1.digest @@ -0,0 +1,30 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/World/Cam") +camera: Camera { origin: Vec3A(0.0, 2.3, 8.5), lower_left_corner: Vec3A(-3.7419648, -1.1915421, -1.1075726), horizontal: Vec3A(7.4839296, -0.0, 0.0), vertical: Vec3A(0.0, 4.1996217, -0.59021837), u: Vec3A(1.0, -0.0, 0.0), v: Vec3A(0.0, 0.9902681, -0.13917312), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: Some("/Render/settings") +settings: RenderSettings { samples_per_pixel: 32, max_depth: 8, width: 240, height: 136, region: PixelRect { x0: 0, y0: 0, x1: 240, y1: 136 }, min_samples_per_pixel: 16, variance_threshold: 0.02, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 28.0, aperture: [20.955, 13.97], aperture_offset: [0.0, 0.0], conform: "adjustApertureHeight", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 10.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/adjust_aperture_height.usda", "$ROOT/samples/dome_backdrop.usda"], invisible_overrides: Some(0) } +layer: $ROOT/samples/dome_backdrop.usda +layer: $DIR/adjust_aperture_height.usda +lights: 1 +light 0: dome name Some("/World/Hdri") lpe None pmf 1.0 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 3 geometries, PrimitiveBreakdown { triangles: 2, spheres: 2, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 2, spheres: 2, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:f6fecef7f865e305 camera=2:f6fecef7f865e305 shadow=2:f6fecef7f865e305 indirect=2:f6fecef7f865e305 +geom 1: material #1 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:571f57a6ae5dd002 camera=1:571f57a6ae5dd002 shadow=1:571f57a6ae5dd002 indirect=1:571f57a6ae5dd002 +geom 2: material #2 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:bb4ca329e9417ce2 camera=1:bb4ca329e9417ce2 shadow=1:bb4ca329e9417ce2 indirect=1:bb4ca329e9417ce2 +provenance material /World/Looks/Clay: MaterialOrigin { slots: [1], displaced: false } +provenance material /World/Looks/Ground: MaterialOrigin { slots: [0], displaced: false } +provenance material /World/Looks/Mirror: MaterialOrigin { slots: [2], displaced: false } +provenance light /World/Hdri: LightOrigin { index: 0, geoms: 3..3 } +provenance geometry 0..1: /World/Floor +provenance geometry 1..2: /World/Matte +provenance geometry 2..3: /World/Mirror +provenance mesh: MeshOrigin { geom_id: 0, slot: 0, baked: true, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 10492340787237780741, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [1, 2] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/World/Cam"), cameras: ["/World/Cam"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/World/Cam"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/adjust_aperture_height_usda-9d28c7b3a9cad9f9-1.image b/crates/crust-core/tests/data/import_baselines/adjust_aperture_height_usda-9d28c7b3a9cad9f9-1.image new file mode 100644 index 000000000..a31c306ad --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/adjust_aperture_height_usda-9d28c7b3a9cad9f9-1.image @@ -0,0 +1 @@ +240x136 16spp clamp-off b3c21885e58a29da diff --git a/crates/crust-core/tests/data/import_baselines/adjust_aperture_width_usda-c50e2f84bef7e6b7-1.digest b/crates/crust-core/tests/data/import_baselines/adjust_aperture_width_usda-c50e2f84bef7e6b7-1.digest new file mode 100644 index 000000000..c709b09e2 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/adjust_aperture_width_usda-c50e2f84bef7e6b7-1.digest @@ -0,0 +1,30 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/World/Cam") +camera: Camera { origin: Vec3A(0.0, 2.3, 8.5), lower_left_corner: Vec3A(-4.4023113, -1.5620966, -1.0554943), horizontal: Vec3A(8.804623, -0.0, 0.0), vertical: Vec3A(0.0, 4.9407306, -0.6943745), u: Vec3A(1.0, -0.0, 0.0), v: Vec3A(0.0, 0.9902681, -0.13917312), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: Some("/Render/settings") +settings: RenderSettings { samples_per_pixel: 32, max_depth: 8, width: 240, height: 136, region: PixelRect { x0: 0, y0: 0, x1: 240, y1: 136 }, min_samples_per_pixel: 16, variance_threshold: 0.02, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 28.0, aperture: [20.955, 13.97], aperture_offset: [0.0, 0.0], conform: "adjustApertureWidth", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 10.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/adjust_aperture_width.usda", "$ROOT/samples/dome_backdrop.usda"], invisible_overrides: Some(0) } +layer: $ROOT/samples/dome_backdrop.usda +layer: $DIR/adjust_aperture_width.usda +lights: 1 +light 0: dome name Some("/World/Hdri") lpe None pmf 1.0 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 3 geometries, PrimitiveBreakdown { triangles: 2, spheres: 2, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 2, spheres: 2, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:f6fecef7f865e305 camera=2:f6fecef7f865e305 shadow=2:f6fecef7f865e305 indirect=2:f6fecef7f865e305 +geom 1: material #1 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:571f57a6ae5dd002 camera=1:571f57a6ae5dd002 shadow=1:571f57a6ae5dd002 indirect=1:571f57a6ae5dd002 +geom 2: material #2 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:bb4ca329e9417ce2 camera=1:bb4ca329e9417ce2 shadow=1:bb4ca329e9417ce2 indirect=1:bb4ca329e9417ce2 +provenance material /World/Looks/Clay: MaterialOrigin { slots: [1], displaced: false } +provenance material /World/Looks/Ground: MaterialOrigin { slots: [0], displaced: false } +provenance material /World/Looks/Mirror: MaterialOrigin { slots: [2], displaced: false } +provenance light /World/Hdri: LightOrigin { index: 0, geoms: 3..3 } +provenance geometry 0..1: /World/Floor +provenance geometry 1..2: /World/Matte +provenance geometry 2..3: /World/Mirror +provenance mesh: MeshOrigin { geom_id: 0, slot: 0, baked: true, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 10492340787237780741, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [1, 2] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/World/Cam"), cameras: ["/World/Cam"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/World/Cam"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/adjust_aperture_width_usda-c50e2f84bef7e6b7-1.image b/crates/crust-core/tests/data/import_baselines/adjust_aperture_width_usda-c50e2f84bef7e6b7-1.image new file mode 100644 index 000000000..9b1ded9a0 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/adjust_aperture_width_usda-c50e2f84bef7e6b7-1.image @@ -0,0 +1 @@ +240x136 16spp clamp-off 2a2ae02b81d14fd2 diff --git a/crates/crust-core/tests/data/import_baselines/agrees_with_spec_usda-985ed763a0957571-1.digest b/crates/crust-core/tests/data/import_baselines/agrees_with_spec_usda-985ed763a0957571-1.digest new file mode 100644 index 000000000..ee108c98f --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/agrees_with_spec_usda-985ed763a0957571-1.digest @@ -0,0 +1,18 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/World/cam") +camera: Camera { origin: Vec3A(0.0, 0.0, 5.0), lower_left_corner: Vec3A(-2.7183647, -1.5290802, -5.0), horizontal: Vec3A(5.4367294, 0.0, 0.0), vertical: Vec3A(0.0, 3.0581603, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: Some("/Render/settings") +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 32, height: 18, region: PixelRect { x0: 0, y0: 0, x1: 32, y1: 18 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [AovProduct { prim_path: "/Render/a", name: "a.exr", vars: [AovVar { prim_path: "/Render/beauty", name: "beauty", channel_prefix: None, source: Color, components: 4, precision: Float, accumulation: Filtered, clear: 0.0, expression: None, raw: false, variance: false }, AovVar { prim_path: "/Render/depth", name: "depth", channel_prefix: None, source: Depth, components: 1, precision: Float, accumulation: Closest, clear: inf, expression: None, raw: false, variance: false }], attributes: [] }, AovProduct { prim_path: "/Render/b", name: "b.exr", vars: [AovVar { prim_path: "/Render/depth", name: "depth", channel_prefix: None, source: Depth, components: 1, precision: Float, accumulation: Closest, clear: inf, expression: None, raw: false, variance: false }, AovVar { prim_path: "/Render/normal", name: "normal", channel_prefix: None, source: Normal, components: 3, precision: Float, accumulation: Filtered, clear: 0.0, expression: None, raw: false, variance: false }], attributes: [] }], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 50.0, aperture: [20.955, 15.2908], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 10.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/agrees_with_spec.usda"], invisible_overrides: Some(0) } +layer: $DIR/agrees_with_spec.usda +lights: 0 +volumes: 0 +world: 1 geometries, PrimitiveBreakdown { triangles: 0, spheres: 1, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 0, spheres: 1, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:fb1e7d48790aec95 camera=1:fb1e7d48790aec95 shadow=1:fb1e7d48790aec95 indirect=1:fb1e7d48790aec95 +provenance geometry 0..1: /World/ball +provenance spheres: [0] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/World/cam"), cameras: ["/World/other", "/World/cam"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/World/cam"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/agrees_with_spec_usda-985ed763a0957571-1.image b/crates/crust-core/tests/data/import_baselines/agrees_with_spec_usda-985ed763a0957571-1.image new file mode 100644 index 000000000..3013e04d8 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/agrees_with_spec_usda-985ed763a0957571-1.image @@ -0,0 +1 @@ +32x18 16spp clamp-off 988ca9561494bf25 diff --git a/crates/crust-core/tests/data/import_baselines/all_four_usda-6bc85ac5d7d4207b-1.digest b/crates/crust-core/tests/data/import_baselines/all_four_usda-6bc85ac5d7d4207b-1.digest new file mode 100644 index 000000000..b64b07375 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/all_four_usda-6bc85ac5d7d4207b-1.digest @@ -0,0 +1,22 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: None +camera: Camera { origin: Vec3A(15.0, 3.0, 3.0), lower_left_corner: Vec3A(4.8863316, -0.044797063, 4.174048), horizontal: Vec3A(1.2295314, 0.0, -6.147657), vertical: Vec3A(-0.44830504, 3.4967792, -0.08966101), u: Vec3A(0.19611613, 0.0, -0.9805807), v: Vec3A(-0.1271232, 0.991561, -0.02542464), lens_radius: 0.05, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: Some("/Render/settings") +settings: RenderSettings { samples_per_pixel: 3, max_depth: 32, width: 8, height: 8, region: PixelRect { x0: 0, y0: 0, x1: 8, y1: 8 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: Some(PassSummary { path: "/Render/Passes/all", holdouts: 1, camera_hidden: 1 }) +source: Source { lens: None, depth_of_field: true, motion_blur: false, layer_stack: ["$DIR/all_four.usda"], invisible_overrides: Some(0) } +layer: $DIR/all_four.usda +warning: Warning { code: RenderPassCollectionNotRead, kind: Skipped, count: 2, prims: ["/Render/Passes/all"], message: "/Render/Passes/all: collection:prune restricts what renders, which crust does not read — rendered as if it were unauthored" } +warning: Warning { code: CameraMissing, kind: Skipped, count: 1, prims: [], message: "USD stage has no UsdGeomCamera — falling back to world::get_settings camera" } +lights: 0 +volumes: 0 +world: 2 geometries, PrimitiveBreakdown { triangles: 0, spheres: 2, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 0, spheres: 2, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:468da3d80ce34d98 camera=0:cbf29ce484222325 shadow=1:468da3d80ce34d98 indirect=1:468da3d80ce34d98 +geom 1: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout true transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:d23ac7aa026facc8 camera=1:d23ac7aa026facc8 shadow=1:d23ac7aa026facc8 indirect=1:d23ac7aa026facc8 +provenance geometry 0..1: /World/Hidden +provenance geometry 1..2: /World/Held +provenance spheres: [0, 1] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: Some("/Render/Passes/all"), keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: None, cameras: [], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: None, offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/all_four_usda-6bc85ac5d7d4207b-1.image b/crates/crust-core/tests/data/import_baselines/all_four_usda-6bc85ac5d7d4207b-1.image new file mode 100644 index 000000000..8aad9360c --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/all_four_usda-6bc85ac5d7d4207b-1.image @@ -0,0 +1 @@ +8x8 16spp clamp-off 9fa9e040e0eedf25 diff --git a/crates/crust-core/tests/data/import_baselines/anamorphic_usda-c23c78df222208eb-1.digest b/crates/crust-core/tests/data/import_baselines/anamorphic_usda-c23c78df222208eb-1.digest new file mode 100644 index 000000000..d040507a6 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/anamorphic_usda-c23c78df222208eb-1.digest @@ -0,0 +1,40 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/scene/camera1") +camera: Camera { origin: Vec3A(0.0074343784, 1.9913422, 4.0133057), lower_left_corner: Vec3A(-4.9925594, -3.0086517, -0.98669434), horizontal: Vec3A(9.999988, 0.0, 0.0), vertical: Vec3A(0.0, 9.999988, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: Some(Vec4(0.0, 0.0, -1.0, 3.9133058)), far: Some(Vec4(0.0, 0.0, 1.0, 9995.986)), planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: Some("/Render/settings") +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 32, height: 16, region: PixelRect { x0: 0, y0: 0, x1: 32, y1: 16 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 12.700017, aperture: [25.4, 25.4], aperture_offset: [0.0, 0.0], conform: "adjustPixelAspectRatio", pixel_aspect: 0.5, f_stop: 0.0, focus_distance: 5.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/anamorphic.usda", "$ROOT/samples/cornellbox.usda"], invisible_overrides: Some(0) } +layer: $ROOT/samples/cornellbox.usda +layer: $DIR/anamorphic.usda +warning: Warning { code: MaterialFallbackDefault, kind: Skipped, count: 1, prims: ["/scene/Looks/initialShadingGroup"], message: "Material /scene/Looks/initialShadingGroup has no surface shader — using default grey OpenPBR" } +lights: 1 +light 0: dome name Some("/scene/Sky") lpe None pmf 1.0 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 5 geometries, PrimitiveBreakdown { triangles: 822, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 2 } top level, PrimitiveBreakdown { triangles: 1582, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 2 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.3585339 motion [] pieces all=760:2344ecf63e12c441 camera=760:2344ecf63e12c441 shadow=760:2344ecf63e12c441 indirect=760:2344ecf63e12c441 +geom 1: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.25 motion [] pieces all=800:4a8c9f44d777e131 camera=800:4a8c9f44d777e131 shadow=800:4a8c9f44d777e131 indirect=800:4a8c9f44d777e131 +geom 2: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=12:94a297badef437e1 camera=12:94a297badef437e1 shadow=12:94a297badef437e1 indirect=12:94a297badef437e1 +geom 3: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.2 motion [] pieces all=760:c2b60a75c52c78b9 camera=760:c2b60a75c52c78b9 shadow=760:c2b60a75c52c78b9 indirect=760:c2b60a75c52c78b9 +geom 4: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 4.0 motion [] pieces all=10:88b22fc3345d5b05 camera=10:88b22fc3345d5b05 shadow=10:88b22fc3345d5b05 indirect=10:88b22fc3345d5b05 +provenance material /scene/Looks/initialShadingGroup: MaterialOrigin { slots: [0, 1, 2, 3, 4], displaced: false } +provenance light /scene/Sky: LightOrigin { index: 0, geoms: 5..5 } +provenance geometry 0..1: /scene/pSphere2 +provenance geometry 1..2: /scene/pTorus1 +provenance geometry 2..3: /scene/pCube2 +provenance geometry 3..4: /scene/pSphere1 +provenance geometry 4..5: /scene/pCube1 +provenance mesh: MeshOrigin { geom_id: 0, slot: 0, baked: false, moving: false } +provenance mesh: MeshOrigin { geom_id: 1, slot: 1, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 2, slot: 2, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 3, slot: 0, baked: false, moving: false } +provenance mesh: MeshOrigin { geom_id: 4, slot: 3, baked: true, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 17119738035130870988, n_points: 382, n_indices: 1560, n_uvs: None, smooth: false, material: 0 }), placements: 2, shared: false, displaced: false } +provenance mesh slot 1: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 6096447469814747168, n_points: 400, n_indices: 1600, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 2: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 1739488954094729910, n_points: 8, n_indices: 24, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 3: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 12343188411137242430, n_points: 8, n_indices: 20, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: true, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/scene/camera1"), cameras: ["/scene/camera1"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/scene/camera1"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/anamorphic_usda-c23c78df222208eb-1.image b/crates/crust-core/tests/data/import_baselines/anamorphic_usda-c23c78df222208eb-1.image new file mode 100644 index 000000000..b47338751 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/anamorphic_usda-c23c78df222208eb-1.image @@ -0,0 +1 @@ +32x16 16spp clamp-off 660d8e5ef01f322d diff --git a/crates/crust-core/tests/data/import_baselines/ancestor_usda-3171d13289efaaff-1.digest b/crates/crust-core/tests/data/import_baselines/ancestor_usda-3171d13289efaaff-1.digest new file mode 100644 index 000000000..5e5703414 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/ancestor_usda-3171d13289efaaff-1.digest @@ -0,0 +1,27 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/World/cam") +camera: Camera { origin: Vec3A(0.0, 0.0, 10.0), lower_left_corner: Vec3A(-2.0955, -1.5716249, 0.0), horizontal: Vec3A(4.191, 0.0, 0.0), vertical: Vec3A(0.0, 3.1432498, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: Some("/Render/settings") +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 48, height: 36, region: PixelRect { x0: 0, y0: 0, x1: 48, y1: 36 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [AovProduct { prim_path: "/Render/p", name: "p.exr", vars: [AovVar { prim_path: "/Render/P", name: "P", channel_prefix: None, source: P, components: 3, precision: Float, accumulation: Closest, clear: 0.0, expression: None, raw: false, variance: false }, AovVar { prim_path: "/Render/objectId", name: "objectId", channel_prefix: None, source: Primvar(PrimvarSource { index: 0, components: 1, role: Integer }), components: 1, precision: Uint, accumulation: Closest, clear: 0.0, expression: None, raw: false, variance: false }], attributes: [] }], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 50.0, aperture: [20.955, 15.2908], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 10.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/ancestor.usda"], invisible_overrides: Some(0) } +layer: $DIR/ancestor.usda +warning: Warning { code: PrimvarNotInherited, kind: Skipped, count: 1, prims: ["/World/group"], message: "/Render/objectId asks for primvar \"objectId\", which an ancestor authors on /World/group above /World/group/b; crust does not inherit primvars yet, so the prims it would reach read the clear value" } +lights: 1 +light 0: dome name Some("/World/dome") lpe None pmf 1.0 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 2 geometries, PrimitiveBreakdown { triangles: 4, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 4, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:309fb8964eb82c56 camera=2:309fb8964eb82c56 shadow=2:309fb8964eb82c56 indirect=2:309fb8964eb82c56 +geom 1: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:24553fcc736621f6 camera=2:24553fcc736621f6 shadow=2:24553fcc736621f6 indirect=2:24553fcc736621f6 +provenance light /World/dome: LightOrigin { index: 0, geoms: 2..2 } +provenance geometry 0..1: /World/group/b +provenance geometry 1..2: /World/group/a +provenance mesh: MeshOrigin { geom_id: 0, slot: 0, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 1, slot: 1, baked: true, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 16274330774750285532, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 1: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 15356501520211640585, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/World/cam"), cameras: ["/World/cam"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [("objectId", 1)], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/World/cam"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/ancestor_usda-3171d13289efaaff-1.image b/crates/crust-core/tests/data/import_baselines/ancestor_usda-3171d13289efaaff-1.image new file mode 100644 index 000000000..ba50a87b7 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/ancestor_usda-3171d13289efaaff-1.image @@ -0,0 +1 @@ +48x36 16spp clamp-off 05a95d2ab1d58b45 diff --git a/crates/crust-core/tests/data/import_baselines/ancestor_usda-74843e3cc431dad3-1.digest b/crates/crust-core/tests/data/import_baselines/ancestor_usda-74843e3cc431dad3-1.digest new file mode 100644 index 000000000..d3dcb2f69 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/ancestor_usda-74843e3cc431dad3-1.digest @@ -0,0 +1,21 @@ +time: Some(5.0) +working space: Linear Rec.709 (sRGB) +camera path: Some("/World/cam") +camera: Camera { origin: Vec3A(0.0, 0.0, 8.0), lower_left_corner: Vec3A(-2.7183647, -1.5290802, -2.0), horizontal: Vec3A(5.4367294, 0.0, 0.0), vertical: Vec3A(0.0, 3.0581603, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: Some("/Render/settings") +settings: RenderSettings { samples_per_pixel: 16, max_depth: 2, width: 64, height: 36, region: PixelRect { x0: 0, y0: 0, x1: 64, y1: 36 }, min_samples_per_pixel: 16, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 5, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 50.0, aperture: [20.955, 15.2908], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 10.0 }), depth_of_field: false, motion_blur: true, layer_stack: ["$DIR/ancestor.usda"], invisible_overrides: Some(0) } +layer: $DIR/ancestor.usda +lights: 0 +volumes: 0 +world: 1 geometries, PrimitiveBreakdown { triangles: 0, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 1 } top level, PrimitiveBreakdown { triangles: 2, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 1 } unique, motion true +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [Affine([Affine3A { matrix3: Mat3A { x_axis: Vec3A(0.76604444, 0.0, -0.64278764), y_axis: Vec3A(0.0, 1.0, 0.0), z_axis: Vec3A(0.64278764, 0.0, 0.76604444) }, translation: Vec3A(1.5320889, 0.0, -1.2855753) }, Affine3A { matrix3: Mat3A { x_axis: Vec3A(0.6427876, 0.0, -0.7660445), y_axis: Vec3A(0.0, 1.0, 0.0), z_axis: Vec3A(0.7660445, 0.0, 0.6427876) }, translation: Vec3A(1.2855752, 0.0, -1.532089) }])] pieces all=2:a71a231fb19189b0 camera=2:a71a231fb19189b0 shadow=2:a71a231fb19189b0 indirect=2:a71a231fb19189b0 +provenance material /World/Glow: MaterialOrigin { slots: [0], displaced: false } +provenance geometry 0..1: /World/Turn/Card +provenance mesh: MeshOrigin { geom_id: 0, slot: 0, baked: false, moving: true } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 18250419415378433236, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: Some(5.0), camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/World/cam"), cameras: ["/World/cam"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/World/cam"), offsets: [0, 4607182418800017408], interval: Some([4617315517961601024, 4618441417868443648]), query: true, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/ancestor_usda-74843e3cc431dad3-1.image b/crates/crust-core/tests/data/import_baselines/ancestor_usda-74843e3cc431dad3-1.image new file mode 100644 index 000000000..65e2eebfe --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/ancestor_usda-74843e3cc431dad3-1.image @@ -0,0 +1 @@ +64x36 16spp clamp-off 1f4cffd87b5be6a4 diff --git a/crates/crust-core/tests/data/import_baselines/animated_no_shutter_usda-dc5451565381429f-1.digest b/crates/crust-core/tests/data/import_baselines/animated_no_shutter_usda-dc5451565381429f-1.digest new file mode 100644 index 000000000..6515fb9c9 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/animated_no_shutter_usda-dc5451565381429f-1.digest @@ -0,0 +1,21 @@ +time: Some(5.0) +working space: Linear Rec.709 (sRGB) +camera path: Some("/World/cam") +camera: Camera { origin: Vec3A(0.0, 0.0, 8.0), lower_left_corner: Vec3A(-2.7183647, -1.5290802, -2.0), horizontal: Vec3A(5.4367294, 0.0, 0.0), vertical: Vec3A(0.0, 3.0581603, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: Some("/Render/settings") +settings: RenderSettings { samples_per_pixel: 16, max_depth: 2, width: 64, height: 36, region: PixelRect { x0: 0, y0: 0, x1: 64, y1: 36 }, min_samples_per_pixel: 16, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 5, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 50.0, aperture: [20.955, 15.2908], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 10.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/animated_no_shutter.usda"], invisible_overrides: Some(0) } +layer: $DIR/animated_no_shutter.usda +lights: 0 +volumes: 0 +world: 1 geometries, PrimitiveBreakdown { triangles: 2, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 2, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:8f5d9187c4202473 camera=2:8f5d9187c4202473 shadow=2:8f5d9187c4202473 indirect=2:8f5d9187c4202473 +provenance material /World/Glow: MaterialOrigin { slots: [0], displaced: false } +provenance geometry 0..1: /World/Card +provenance mesh: MeshOrigin { geom_id: 0, slot: 0, baked: true, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 18250419415378433236, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: Some(5.0), camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/World/cam"), cameras: ["/World/cam"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/World/cam"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/animated_no_shutter_usda-dc5451565381429f-1.image b/crates/crust-core/tests/data/import_baselines/animated_no_shutter_usda-dc5451565381429f-1.image new file mode 100644 index 000000000..0e8a4d39e --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/animated_no_shutter_usda-dc5451565381429f-1.image @@ -0,0 +1 @@ +64x36 16spp clamp-off 51c3405b7660a8ac diff --git a/crates/crust-core/tests/data/import_baselines/animated_usda-84baf2836991de3b-1.digest b/crates/crust-core/tests/data/import_baselines/animated_usda-84baf2836991de3b-1.digest new file mode 100644 index 000000000..90a282557 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/animated_usda-84baf2836991de3b-1.digest @@ -0,0 +1,16 @@ +time: Some(1.0) +working space: Linear Rec.709 (sRGB) +camera path: Some("/cam") +camera: Camera { origin: Vec3A(0.0, 0.0, 0.0), lower_left_corner: Vec3A(-2.7183647, -1.5290802, -10.0), horizontal: Vec3A(5.4367294, 0.0, 0.0), vertical: Vec3A(0.0, 3.0581603, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: None +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 640, height: 360, region: PixelRect { x0: 0, y0: 0, x1: 640, y1: 360 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 1, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 50.0, aperture: [20.955, 15.2908], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 10.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/animated.usda"], invisible_overrides: Some(0) } +layer: $DIR/animated.usda +lights: 0 +volumes: 0 +world: 0 geometries, PrimitiveBreakdown { triangles: 0, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 0, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: Some(1.0), camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/cam"), cameras: ["/cam"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/cam"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/animated_usda-84baf2836991de3b-1.image b/crates/crust-core/tests/data/import_baselines/animated_usda-84baf2836991de3b-1.image new file mode 100644 index 000000000..c734c5b1d --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/animated_usda-84baf2836991de3b-1.image @@ -0,0 +1 @@ +640x360 16spp clamp-off a04a09c0d4b5e325 diff --git a/crates/crust-core/tests/data/import_baselines/animated_usda-e242162a2dbef33a-1.digest b/crates/crust-core/tests/data/import_baselines/animated_usda-e242162a2dbef33a-1.digest new file mode 100644 index 000000000..22cffd98d --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/animated_usda-e242162a2dbef33a-1.digest @@ -0,0 +1,16 @@ +time: Some(2.0) +working space: Linear Rec.709 (sRGB) +camera path: Some("/cam") +camera: Camera { origin: Vec3A(0.0, 0.0, 0.0), lower_left_corner: Vec3A(-2.7183647, -1.5290802, -10.0), horizontal: Vec3A(5.4367294, 0.0, 0.0), vertical: Vec3A(0.0, 3.0581603, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: None +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 640, height: 360, region: PixelRect { x0: 0, y0: 0, x1: 640, y1: 360 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 2, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 2.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 50.0, aperture: [20.955, 15.2908], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 10.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/animated.usda"], invisible_overrides: Some(0) } +layer: $DIR/animated.usda +lights: 0 +volumes: 0 +world: 0 geometries, PrimitiveBreakdown { triangles: 0, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 0, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: Some(2.0), camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/cam"), cameras: ["/cam"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/cam"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/animated_usda-e242162a2dbef33a-1.image b/crates/crust-core/tests/data/import_baselines/animated_usda-e242162a2dbef33a-1.image new file mode 100644 index 000000000..c734c5b1d --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/animated_usda-e242162a2dbef33a-1.image @@ -0,0 +1 @@ +640x360 16spp clamp-off a04a09c0d4b5e325 diff --git a/crates/crust-core/tests/data/import_baselines/animation_usda-0b34d79521209b48-1.digest b/crates/crust-core/tests/data/import_baselines/animation_usda-0b34d79521209b48-1.digest new file mode 100644 index 000000000..b00d760a3 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/animation_usda-0b34d79521209b48-1.digest @@ -0,0 +1,33 @@ +time: Some(5.5) +working space: Linear Rec.709 (sRGB) +camera path: Some("/World/Cam") +camera: Camera { origin: Vec3A(0.0, 1.5, 7.0), lower_left_corner: Vec3A(-5.6632595, -1.6855836, -3.0), horizontal: Vec3A(11.326519, 0.0, 0.0), vertical: Vec3A(0.0, 6.371167, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: Some("/Render/settings") +settings: RenderSettings { samples_per_pixel: 16, max_depth: 4, width: 96, height: 54, region: PixelRect { x0: 0, y0: 0, x1: 96, y1: 54 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 5, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 24.0, aperture: [20.955, 15.2908], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 10.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/animation.usda"], invisible_overrides: Some(0) } +layer: $DIR/animation.usda +warning: Warning { code: AssetUnsupportedByHost, kind: Skipped, count: 1, prims: [], message: "No asset loader: environment map $DIR/sky_gradient.exr ignored — the dome falls back to its uniform colour. Use Scene::from_usd_with_assets to supply one." } +lights: 2 +light 0: area name Some("/World/KeyLight") lpe None pmf 0.5 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 1: dome name Some("/World/Sky") lpe None pmf 0.5 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 4 geometries, PrimitiveBreakdown { triangles: 6, spheres: 1, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 6, spheres: 1, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +geom 0: material #0 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:9de8214b59f6ec57 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=2:9de8214b59f6ec57 +geom 1: material #1 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:be0b97004c4d3e85 camera=2:be0b97004c4d3e85 shadow=2:be0b97004c4d3e85 indirect=2:be0b97004c4d3e85 +geom 2: material #1 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:7fcf304865720e38 camera=2:7fcf304865720e38 shadow=2:7fcf304865720e38 indirect=2:7fcf304865720e38 +geom 3: material #1 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:bea3e18521bb41f8 camera=1:bea3e18521bb41f8 shadow=1:bea3e18521bb41f8 indirect=1:bea3e18521bb41f8 +provenance light /World/KeyLight: LightOrigin { index: 0, geoms: 0..1 } +provenance light /World/Sky: LightOrigin { index: 1, geoms: 4..4 } +provenance geometry 0..1: /World/KeyLight +provenance geometry 1..2: /World/Floor +provenance geometry 2..3: /World/Card +provenance geometry 3..4: /World/Mover +provenance mesh: MeshOrigin { geom_id: 1, slot: 0, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 2, slot: 1, baked: true, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 8416296582947184296, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 1: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 16017878447611219219, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [3] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: Some(5.5), camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/World/Cam"), cameras: ["/World/Cam"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/World/Cam"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/animation_usda-0b34d79521209b48-1.image b/crates/crust-core/tests/data/import_baselines/animation_usda-0b34d79521209b48-1.image new file mode 100644 index 000000000..9c33f4e88 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/animation_usda-0b34d79521209b48-1.image @@ -0,0 +1 @@ +96x54 16spp clamp-off 6f274e07f0941867 diff --git a/crates/crust-core/tests/data/import_baselines/animation_usda-5446fd76cda9ed55-1.digest b/crates/crust-core/tests/data/import_baselines/animation_usda-5446fd76cda9ed55-1.digest new file mode 100644 index 000000000..d14ea802e --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/animation_usda-5446fd76cda9ed55-1.digest @@ -0,0 +1,29 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/World/Cam") +camera: Camera { origin: Vec3A(0.0, 1.5, 7.0), lower_left_corner: Vec3A(-5.6632595, -1.6855836, -3.0), horizontal: Vec3A(11.326519, 0.0, 0.0), vertical: Vec3A(0.0, 6.371167, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: Some("/Render/settings") +settings: RenderSettings { samples_per_pixel: 16, max_depth: 4, width: 96, height: 54, region: PixelRect { x0: 0, y0: 0, x1: 96, y1: 54 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 24.0, aperture: [20.955, 15.2908], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 10.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/animation.usda"], invisible_overrides: Some(0) } +layer: $DIR/animation.usda +warning: Warning { code: AssetUnsupportedByHost, kind: Skipped, count: 1, prims: [], message: "No asset loader: environment map $DIR/sky_gradient.exr ignored — the dome falls back to its uniform colour. Use Scene::from_usd_with_assets to supply one." } +lights: 2 +light 0: area name Some("/World/KeyLight") lpe None pmf 0.5 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 1: dome name Some("/World/Sky") lpe None pmf 0.5 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 3 geometries, PrimitiveBreakdown { triangles: 4, spheres: 1, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 4, spheres: 1, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +geom 0: material #0 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:9de8214b59f6ec57 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=2:9de8214b59f6ec57 +geom 1: material #1 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:be0b97004c4d3e85 camera=2:be0b97004c4d3e85 shadow=2:be0b97004c4d3e85 indirect=2:be0b97004c4d3e85 +geom 2: material #1 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:a0eb7837d255c041 camera=1:a0eb7837d255c041 shadow=1:a0eb7837d255c041 indirect=1:a0eb7837d255c041 +provenance light /World/KeyLight: LightOrigin { index: 0, geoms: 0..1 } +provenance light /World/Sky: LightOrigin { index: 1, geoms: 3..3 } +provenance geometry 0..1: /World/KeyLight +provenance geometry 1..2: /World/Floor +provenance geometry 2..3: /World/Mover +provenance mesh: MeshOrigin { geom_id: 1, slot: 0, baked: true, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 8416296582947184296, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [2] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/World/Cam"), cameras: ["/World/Cam"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/World/Cam"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/animation_usda-5446fd76cda9ed55-1.image b/crates/crust-core/tests/data/import_baselines/animation_usda-5446fd76cda9ed55-1.image new file mode 100644 index 000000000..ade137ad6 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/animation_usda-5446fd76cda9ed55-1.image @@ -0,0 +1 @@ +96x54 16spp clamp-off d7315d89c57f5cf7 diff --git a/crates/crust-core/tests/data/import_baselines/animation_usda-7b809f697af333f7-1.digest b/crates/crust-core/tests/data/import_baselines/animation_usda-7b809f697af333f7-1.digest new file mode 100644 index 000000000..46f1a4b2e --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/animation_usda-7b809f697af333f7-1.digest @@ -0,0 +1,34 @@ +time: Some(25.0) +working space: Linear Rec.709 (sRGB) +camera path: Some("/World/Cam") +camera: Camera { origin: Vec3A(0.0, 1.5, 7.0), lower_left_corner: Vec3A(-5.6632595, -1.6855836, -3.0), horizontal: Vec3A(11.326519, 0.0, 0.0), vertical: Vec3A(0.0, 6.371167, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: Some("/Render/settings") +settings: RenderSettings { samples_per_pixel: 16, max_depth: 4, width: 96, height: 54, region: PixelRect { x0: 0, y0: 0, x1: 96, y1: 54 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 25, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 24.0, aperture: [20.955, 15.2908], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 10.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/animation.usda"], invisible_overrides: Some(0) } +layer: $DIR/animation.usda +warning: Warning { code: TimeOutsideRange, kind: Approximated, count: 1, prims: [], message: "Frame 25 is outside the stage's time range [1, 10]; animated attributes hold their nearest time sample" } +warning: Warning { code: AssetUnsupportedByHost, kind: Skipped, count: 1, prims: [], message: "No asset loader: environment map $DIR/sky_gradient.exr ignored — the dome falls back to its uniform colour. Use Scene::from_usd_with_assets to supply one." } +lights: 2 +light 0: area name Some("/World/KeyLight") lpe None pmf 0.5 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 1: dome name Some("/World/Sky") lpe None pmf 0.5 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 4 geometries, PrimitiveBreakdown { triangles: 6, spheres: 1, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 6, spheres: 1, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +geom 0: material #0 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:9de8214b59f6ec57 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=2:9de8214b59f6ec57 +geom 1: material #1 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:be0b97004c4d3e85 camera=2:be0b97004c4d3e85 shadow=2:be0b97004c4d3e85 indirect=2:be0b97004c4d3e85 +geom 2: material #1 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:ed529345c66d7d38 camera=2:ed529345c66d7d38 shadow=2:ed529345c66d7d38 indirect=2:ed529345c66d7d38 +geom 3: material #1 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:f4cee44c409d25a6 camera=1:f4cee44c409d25a6 shadow=1:f4cee44c409d25a6 indirect=1:f4cee44c409d25a6 +provenance light /World/KeyLight: LightOrigin { index: 0, geoms: 0..1 } +provenance light /World/Sky: LightOrigin { index: 1, geoms: 4..4 } +provenance geometry 0..1: /World/KeyLight +provenance geometry 1..2: /World/Floor +provenance geometry 2..3: /World/Card +provenance geometry 3..4: /World/Mover +provenance mesh: MeshOrigin { geom_id: 1, slot: 0, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 2, slot: 1, baked: true, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 8416296582947184296, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 1: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 646954679051529708, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [3] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: Some(25.0), camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/World/Cam"), cameras: ["/World/Cam"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/World/Cam"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/animation_usda-7b809f697af333f7-1.image b/crates/crust-core/tests/data/import_baselines/animation_usda-7b809f697af333f7-1.image new file mode 100644 index 000000000..e00ae509b --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/animation_usda-7b809f697af333f7-1.image @@ -0,0 +1 @@ +96x54 16spp clamp-off cc96346d932cc17c diff --git a/crates/crust-core/tests/data/import_baselines/animation_usda-87536adca26db1ce-1.digest b/crates/crust-core/tests/data/import_baselines/animation_usda-87536adca26db1ce-1.digest new file mode 100644 index 000000000..75511bc67 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/animation_usda-87536adca26db1ce-1.digest @@ -0,0 +1,28 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/World/Cam") +camera: Camera { origin: Vec3A(0.0, 1.5, 7.0), lower_left_corner: Vec3A(-5.6632595, -1.6855836, -3.0), horizontal: Vec3A(11.326519, 0.0, 0.0), vertical: Vec3A(0.0, 6.371167, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: Some("/Render/settings") +settings: RenderSettings { samples_per_pixel: 16, max_depth: 4, width: 96, height: 54, region: PixelRect { x0: 0, y0: 0, x1: 96, y1: 54 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 24.0, aperture: [20.955, 15.2908], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 10.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/animation.usda"], invisible_overrides: Some(0) } +layer: $DIR/animation.usda +lights: 2 +light 0: area name Some("/World/KeyLight") lpe None pmf 0.5 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 1: dome name Some("/World/Sky") lpe None pmf 0.5 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 3 geometries, PrimitiveBreakdown { triangles: 4, spheres: 1, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 4, spheres: 1, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +geom 0: material #0 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:9de8214b59f6ec57 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=2:9de8214b59f6ec57 +geom 1: material #1 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:be0b97004c4d3e85 camera=2:be0b97004c4d3e85 shadow=2:be0b97004c4d3e85 indirect=2:be0b97004c4d3e85 +geom 2: material #1 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:a0eb7837d255c041 camera=1:a0eb7837d255c041 shadow=1:a0eb7837d255c041 indirect=1:a0eb7837d255c041 +provenance light /World/KeyLight: LightOrigin { index: 0, geoms: 0..1 } +provenance light /World/Sky: LightOrigin { index: 1, geoms: 3..3 } +provenance geometry 0..1: /World/KeyLight +provenance geometry 1..2: /World/Floor +provenance geometry 2..3: /World/Mover +provenance mesh: MeshOrigin { geom_id: 1, slot: 0, baked: true, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 8416296582947184296, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [2] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: true, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/World/Cam"), cameras: ["/World/Cam"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/World/Cam"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/animation_usda-87536adca26db1ce-1.image b/crates/crust-core/tests/data/import_baselines/animation_usda-87536adca26db1ce-1.image new file mode 100644 index 000000000..365d51aa6 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/animation_usda-87536adca26db1ce-1.image @@ -0,0 +1 @@ +96x54 16spp clamp-off 63daa24ffb10c955 diff --git a/crates/crust-core/tests/data/import_baselines/animation_usda-a8098f0bc76c3026-1.digest b/crates/crust-core/tests/data/import_baselines/animation_usda-a8098f0bc76c3026-1.digest new file mode 100644 index 000000000..b344a2714 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/animation_usda-a8098f0bc76c3026-1.digest @@ -0,0 +1,34 @@ +time: Some(-3.0) +working space: Linear Rec.709 (sRGB) +camera path: Some("/World/Cam") +camera: Camera { origin: Vec3A(0.0, 1.5, 7.0), lower_left_corner: Vec3A(-5.6632595, -1.6855836, -3.0), horizontal: Vec3A(11.326519, 0.0, 0.0), vertical: Vec3A(0.0, 6.371167, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: Some("/Render/settings") +settings: RenderSettings { samples_per_pixel: 16, max_depth: 4, width: 96, height: 54, region: PixelRect { x0: 0, y0: 0, x1: 96, y1: 54 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: -3, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 24.0, aperture: [20.955, 15.2908], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 10.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/animation.usda"], invisible_overrides: Some(0) } +layer: $DIR/animation.usda +warning: Warning { code: TimeOutsideRange, kind: Approximated, count: 1, prims: [], message: "Frame -3 is outside the stage's time range [1, 10]; animated attributes hold their nearest time sample" } +warning: Warning { code: AssetUnsupportedByHost, kind: Skipped, count: 1, prims: [], message: "No asset loader: environment map $DIR/sky_gradient.exr ignored — the dome falls back to its uniform colour. Use Scene::from_usd_with_assets to supply one." } +lights: 2 +light 0: area name Some("/World/KeyLight") lpe None pmf 0.5 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 1: dome name Some("/World/Sky") lpe None pmf 0.5 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 4 geometries, PrimitiveBreakdown { triangles: 6, spheres: 1, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 6, spheres: 1, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +geom 0: material #0 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:9de8214b59f6ec57 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=2:9de8214b59f6ec57 +geom 1: material #1 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:be0b97004c4d3e85 camera=2:be0b97004c4d3e85 shadow=2:be0b97004c4d3e85 indirect=2:be0b97004c4d3e85 +geom 2: material #1 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:94f018d9446ce468 camera=2:94f018d9446ce468 shadow=2:94f018d9446ce468 indirect=2:94f018d9446ce468 +geom 3: material #1 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:18f450b5add08702 camera=1:18f450b5add08702 shadow=1:18f450b5add08702 indirect=1:18f450b5add08702 +provenance light /World/KeyLight: LightOrigin { index: 0, geoms: 0..1 } +provenance light /World/Sky: LightOrigin { index: 1, geoms: 4..4 } +provenance geometry 0..1: /World/KeyLight +provenance geometry 1..2: /World/Floor +provenance geometry 2..3: /World/Card +provenance geometry 3..4: /World/Mover +provenance mesh: MeshOrigin { geom_id: 1, slot: 0, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 2, slot: 1, baked: true, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 8416296582947184296, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 1: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 6200305205315686865, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [3] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: Some(-3.0), camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/World/Cam"), cameras: ["/World/Cam"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/World/Cam"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/animation_usda-a8098f0bc76c3026-1.image b/crates/crust-core/tests/data/import_baselines/animation_usda-a8098f0bc76c3026-1.image new file mode 100644 index 000000000..f3b1cc92a --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/animation_usda-a8098f0bc76c3026-1.image @@ -0,0 +1 @@ +96x54 16spp clamp-off bb48f209960474f7 diff --git a/crates/crust-core/tests/data/import_baselines/animation_usda-b620cb992a2b7c7d-1.digest b/crates/crust-core/tests/data/import_baselines/animation_usda-b620cb992a2b7c7d-1.digest new file mode 100644 index 000000000..d14ea802e --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/animation_usda-b620cb992a2b7c7d-1.digest @@ -0,0 +1,29 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/World/Cam") +camera: Camera { origin: Vec3A(0.0, 1.5, 7.0), lower_left_corner: Vec3A(-5.6632595, -1.6855836, -3.0), horizontal: Vec3A(11.326519, 0.0, 0.0), vertical: Vec3A(0.0, 6.371167, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: Some("/Render/settings") +settings: RenderSettings { samples_per_pixel: 16, max_depth: 4, width: 96, height: 54, region: PixelRect { x0: 0, y0: 0, x1: 96, y1: 54 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 24.0, aperture: [20.955, 15.2908], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 10.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/animation.usda"], invisible_overrides: Some(0) } +layer: $DIR/animation.usda +warning: Warning { code: AssetUnsupportedByHost, kind: Skipped, count: 1, prims: [], message: "No asset loader: environment map $DIR/sky_gradient.exr ignored — the dome falls back to its uniform colour. Use Scene::from_usd_with_assets to supply one." } +lights: 2 +light 0: area name Some("/World/KeyLight") lpe None pmf 0.5 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 1: dome name Some("/World/Sky") lpe None pmf 0.5 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 3 geometries, PrimitiveBreakdown { triangles: 4, spheres: 1, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 4, spheres: 1, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +geom 0: material #0 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:9de8214b59f6ec57 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=2:9de8214b59f6ec57 +geom 1: material #1 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:be0b97004c4d3e85 camera=2:be0b97004c4d3e85 shadow=2:be0b97004c4d3e85 indirect=2:be0b97004c4d3e85 +geom 2: material #1 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:a0eb7837d255c041 camera=1:a0eb7837d255c041 shadow=1:a0eb7837d255c041 indirect=1:a0eb7837d255c041 +provenance light /World/KeyLight: LightOrigin { index: 0, geoms: 0..1 } +provenance light /World/Sky: LightOrigin { index: 1, geoms: 3..3 } +provenance geometry 0..1: /World/KeyLight +provenance geometry 1..2: /World/Floor +provenance geometry 2..3: /World/Mover +provenance mesh: MeshOrigin { geom_id: 1, slot: 0, baked: true, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 8416296582947184296, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [2] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/World/Cam"), cameras: ["/World/Cam"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/World/Cam"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/animation_usda-b620cb992a2b7c7d-1.image b/crates/crust-core/tests/data/import_baselines/animation_usda-b620cb992a2b7c7d-1.image new file mode 100644 index 000000000..ade137ad6 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/animation_usda-b620cb992a2b7c7d-1.image @@ -0,0 +1 @@ +96x54 16spp clamp-off d7315d89c57f5cf7 diff --git a/crates/crust-core/tests/data/import_baselines/animation_usda-b620cb992a2b7c7d-2.digest b/crates/crust-core/tests/data/import_baselines/animation_usda-b620cb992a2b7c7d-2.digest new file mode 100644 index 000000000..d14ea802e --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/animation_usda-b620cb992a2b7c7d-2.digest @@ -0,0 +1,29 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/World/Cam") +camera: Camera { origin: Vec3A(0.0, 1.5, 7.0), lower_left_corner: Vec3A(-5.6632595, -1.6855836, -3.0), horizontal: Vec3A(11.326519, 0.0, 0.0), vertical: Vec3A(0.0, 6.371167, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: Some("/Render/settings") +settings: RenderSettings { samples_per_pixel: 16, max_depth: 4, width: 96, height: 54, region: PixelRect { x0: 0, y0: 0, x1: 96, y1: 54 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 24.0, aperture: [20.955, 15.2908], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 10.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/animation.usda"], invisible_overrides: Some(0) } +layer: $DIR/animation.usda +warning: Warning { code: AssetUnsupportedByHost, kind: Skipped, count: 1, prims: [], message: "No asset loader: environment map $DIR/sky_gradient.exr ignored — the dome falls back to its uniform colour. Use Scene::from_usd_with_assets to supply one." } +lights: 2 +light 0: area name Some("/World/KeyLight") lpe None pmf 0.5 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 1: dome name Some("/World/Sky") lpe None pmf 0.5 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 3 geometries, PrimitiveBreakdown { triangles: 4, spheres: 1, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 4, spheres: 1, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +geom 0: material #0 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:9de8214b59f6ec57 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=2:9de8214b59f6ec57 +geom 1: material #1 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:be0b97004c4d3e85 camera=2:be0b97004c4d3e85 shadow=2:be0b97004c4d3e85 indirect=2:be0b97004c4d3e85 +geom 2: material #1 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:a0eb7837d255c041 camera=1:a0eb7837d255c041 shadow=1:a0eb7837d255c041 indirect=1:a0eb7837d255c041 +provenance light /World/KeyLight: LightOrigin { index: 0, geoms: 0..1 } +provenance light /World/Sky: LightOrigin { index: 1, geoms: 3..3 } +provenance geometry 0..1: /World/KeyLight +provenance geometry 1..2: /World/Floor +provenance geometry 2..3: /World/Mover +provenance mesh: MeshOrigin { geom_id: 1, slot: 0, baked: true, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 8416296582947184296, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [2] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/World/Cam"), cameras: ["/World/Cam"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/World/Cam"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/animation_usda-b620cb992a2b7c7d-2.image b/crates/crust-core/tests/data/import_baselines/animation_usda-b620cb992a2b7c7d-2.image new file mode 100644 index 000000000..ade137ad6 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/animation_usda-b620cb992a2b7c7d-2.image @@ -0,0 +1 @@ +96x54 16spp clamp-off d7315d89c57f5cf7 diff --git a/crates/crust-core/tests/data/import_baselines/animation_usda-beee1323479cf47f-1.digest b/crates/crust-core/tests/data/import_baselines/animation_usda-beee1323479cf47f-1.digest new file mode 100644 index 000000000..e4788880c --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/animation_usda-beee1323479cf47f-1.digest @@ -0,0 +1,33 @@ +time: Some(7.75) +working space: Linear Rec.709 (sRGB) +camera path: Some("/World/Cam") +camera: Camera { origin: Vec3A(0.0, 1.5, 7.0), lower_left_corner: Vec3A(-5.6632595, -1.6855836, -3.0), horizontal: Vec3A(11.326519, 0.0, 0.0), vertical: Vec3A(0.0, 6.371167, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: Some("/Render/settings") +settings: RenderSettings { samples_per_pixel: 16, max_depth: 4, width: 96, height: 54, region: PixelRect { x0: 0, y0: 0, x1: 96, y1: 54 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 7, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 24.0, aperture: [20.955, 15.2908], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 10.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/animation.usda"], invisible_overrides: Some(0) } +layer: $DIR/animation.usda +warning: Warning { code: AssetUnsupportedByHost, kind: Skipped, count: 1, prims: [], message: "No asset loader: environment map $DIR/sky_gradient.exr ignored — the dome falls back to its uniform colour. Use Scene::from_usd_with_assets to supply one." } +lights: 2 +light 0: area name Some("/World/KeyLight") lpe None pmf 0.5 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 1: dome name Some("/World/Sky") lpe None pmf 0.5 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 4 geometries, PrimitiveBreakdown { triangles: 6, spheres: 1, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 6, spheres: 1, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +geom 0: material #0 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:9de8214b59f6ec57 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=2:9de8214b59f6ec57 +geom 1: material #1 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:be0b97004c4d3e85 camera=2:be0b97004c4d3e85 shadow=2:be0b97004c4d3e85 indirect=2:be0b97004c4d3e85 +geom 2: material #1 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:54de9d04136a3278 camera=2:54de9d04136a3278 shadow=2:54de9d04136a3278 indirect=2:54de9d04136a3278 +geom 3: material #1 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:e024edb0d5760ea2 camera=1:e024edb0d5760ea2 shadow=1:e024edb0d5760ea2 indirect=1:e024edb0d5760ea2 +provenance light /World/KeyLight: LightOrigin { index: 0, geoms: 0..1 } +provenance light /World/Sky: LightOrigin { index: 1, geoms: 4..4 } +provenance geometry 0..1: /World/KeyLight +provenance geometry 1..2: /World/Floor +provenance geometry 2..3: /World/Card +provenance geometry 3..4: /World/Mover +provenance mesh: MeshOrigin { geom_id: 1, slot: 0, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 2, slot: 1, baked: true, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 8416296582947184296, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 1: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 6253865641669692558, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [3] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: Some(7.75), camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/World/Cam"), cameras: ["/World/Cam"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/World/Cam"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/animation_usda-beee1323479cf47f-1.image b/crates/crust-core/tests/data/import_baselines/animation_usda-beee1323479cf47f-1.image new file mode 100644 index 000000000..9e4ca8fdb --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/animation_usda-beee1323479cf47f-1.image @@ -0,0 +1 @@ +96x54 16spp clamp-off 8c3e234c98d542ee diff --git a/crates/crust-core/tests/data/import_baselines/animation_usda-cca20ab6197e3823-1.digest b/crates/crust-core/tests/data/import_baselines/animation_usda-cca20ab6197e3823-1.digest new file mode 100644 index 000000000..51cfeff6f --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/animation_usda-cca20ab6197e3823-1.digest @@ -0,0 +1,33 @@ +time: Some(1.0) +working space: Linear Rec.709 (sRGB) +camera path: Some("/World/Cam") +camera: Camera { origin: Vec3A(0.0, 1.5, 7.0), lower_left_corner: Vec3A(-5.6632595, -1.6855836, -3.0), horizontal: Vec3A(11.326519, 0.0, 0.0), vertical: Vec3A(0.0, 6.371167, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: Some("/Render/settings") +settings: RenderSettings { samples_per_pixel: 16, max_depth: 4, width: 96, height: 54, region: PixelRect { x0: 0, y0: 0, x1: 96, y1: 54 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 1, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 24.0, aperture: [20.955, 15.2908], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 10.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/animation.usda"], invisible_overrides: Some(0) } +layer: $DIR/animation.usda +warning: Warning { code: AssetUnsupportedByHost, kind: Skipped, count: 1, prims: [], message: "No asset loader: environment map $DIR/sky_gradient.exr ignored — the dome falls back to its uniform colour. Use Scene::from_usd_with_assets to supply one." } +lights: 2 +light 0: area name Some("/World/KeyLight") lpe None pmf 0.5 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 1: dome name Some("/World/Sky") lpe None pmf 0.5 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 4 geometries, PrimitiveBreakdown { triangles: 6, spheres: 1, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 6, spheres: 1, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +geom 0: material #0 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:9de8214b59f6ec57 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=2:9de8214b59f6ec57 +geom 1: material #1 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:be0b97004c4d3e85 camera=2:be0b97004c4d3e85 shadow=2:be0b97004c4d3e85 indirect=2:be0b97004c4d3e85 +geom 2: material #1 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:94f018d9446ce468 camera=2:94f018d9446ce468 shadow=2:94f018d9446ce468 indirect=2:94f018d9446ce468 +geom 3: material #1 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:18f450b5add08702 camera=1:18f450b5add08702 shadow=1:18f450b5add08702 indirect=1:18f450b5add08702 +provenance light /World/KeyLight: LightOrigin { index: 0, geoms: 0..1 } +provenance light /World/Sky: LightOrigin { index: 1, geoms: 4..4 } +provenance geometry 0..1: /World/KeyLight +provenance geometry 1..2: /World/Floor +provenance geometry 2..3: /World/Card +provenance geometry 3..4: /World/Mover +provenance mesh: MeshOrigin { geom_id: 1, slot: 0, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 2, slot: 1, baked: true, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 8416296582947184296, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 1: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 6200305205315686865, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [3] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: Some(1.0), camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/World/Cam"), cameras: ["/World/Cam"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/World/Cam"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/animation_usda-cca20ab6197e3823-1.image b/crates/crust-core/tests/data/import_baselines/animation_usda-cca20ab6197e3823-1.image new file mode 100644 index 000000000..a8cbff83e --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/animation_usda-cca20ab6197e3823-1.image @@ -0,0 +1 @@ +96x54 16spp clamp-off 4d2db51977773c64 diff --git a/crates/crust-core/tests/data/import_baselines/animation_usda-cfe8a27d275b06f7-1.digest b/crates/crust-core/tests/data/import_baselines/animation_usda-cfe8a27d275b06f7-1.digest new file mode 100644 index 000000000..d14ea802e --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/animation_usda-cfe8a27d275b06f7-1.digest @@ -0,0 +1,29 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/World/Cam") +camera: Camera { origin: Vec3A(0.0, 1.5, 7.0), lower_left_corner: Vec3A(-5.6632595, -1.6855836, -3.0), horizontal: Vec3A(11.326519, 0.0, 0.0), vertical: Vec3A(0.0, 6.371167, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: Some("/Render/settings") +settings: RenderSettings { samples_per_pixel: 16, max_depth: 4, width: 96, height: 54, region: PixelRect { x0: 0, y0: 0, x1: 96, y1: 54 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 24.0, aperture: [20.955, 15.2908], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 10.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/animation.usda"], invisible_overrides: Some(0) } +layer: $DIR/animation.usda +warning: Warning { code: AssetUnsupportedByHost, kind: Skipped, count: 1, prims: [], message: "No asset loader: environment map $DIR/sky_gradient.exr ignored — the dome falls back to its uniform colour. Use Scene::from_usd_with_assets to supply one." } +lights: 2 +light 0: area name Some("/World/KeyLight") lpe None pmf 0.5 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 1: dome name Some("/World/Sky") lpe None pmf 0.5 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 3 geometries, PrimitiveBreakdown { triangles: 4, spheres: 1, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 4, spheres: 1, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +geom 0: material #0 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:9de8214b59f6ec57 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=2:9de8214b59f6ec57 +geom 1: material #1 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:be0b97004c4d3e85 camera=2:be0b97004c4d3e85 shadow=2:be0b97004c4d3e85 indirect=2:be0b97004c4d3e85 +geom 2: material #1 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:a0eb7837d255c041 camera=1:a0eb7837d255c041 shadow=1:a0eb7837d255c041 indirect=1:a0eb7837d255c041 +provenance light /World/KeyLight: LightOrigin { index: 0, geoms: 0..1 } +provenance light /World/Sky: LightOrigin { index: 1, geoms: 3..3 } +provenance geometry 0..1: /World/KeyLight +provenance geometry 1..2: /World/Floor +provenance geometry 2..3: /World/Mover +provenance mesh: MeshOrigin { geom_id: 1, slot: 0, baked: true, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 8416296582947184296, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [2] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/World/Cam"), cameras: ["/World/Cam"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/World/Cam"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/animation_usda-cfe8a27d275b06f7-1.image b/crates/crust-core/tests/data/import_baselines/animation_usda-cfe8a27d275b06f7-1.image new file mode 100644 index 000000000..ade137ad6 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/animation_usda-cfe8a27d275b06f7-1.image @@ -0,0 +1 @@ +96x54 16spp clamp-off d7315d89c57f5cf7 diff --git a/crates/crust-core/tests/data/import_baselines/animation_usda-d9cfa85be82eff7f-1.digest b/crates/crust-core/tests/data/import_baselines/animation_usda-d9cfa85be82eff7f-1.digest new file mode 100644 index 000000000..0e45c5aad --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/animation_usda-d9cfa85be82eff7f-1.digest @@ -0,0 +1,33 @@ +time: Some(7.0) +working space: Linear Rec.709 (sRGB) +camera path: Some("/World/Cam") +camera: Camera { origin: Vec3A(0.0, 1.5, 7.0), lower_left_corner: Vec3A(-5.6632595, -1.6855836, -3.0), horizontal: Vec3A(11.326519, 0.0, 0.0), vertical: Vec3A(0.0, 6.371167, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: Some("/Render/settings") +settings: RenderSettings { samples_per_pixel: 16, max_depth: 4, width: 96, height: 54, region: PixelRect { x0: 0, y0: 0, x1: 96, y1: 54 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 7, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 24.0, aperture: [20.955, 15.2908], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 10.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/animation.usda"], invisible_overrides: Some(0) } +layer: $DIR/animation.usda +warning: Warning { code: AssetUnsupportedByHost, kind: Skipped, count: 1, prims: [], message: "No asset loader: environment map $DIR/sky_gradient.exr ignored — the dome falls back to its uniform colour. Use Scene::from_usd_with_assets to supply one." } +lights: 2 +light 0: area name Some("/World/KeyLight") lpe None pmf 0.5 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 1: dome name Some("/World/Sky") lpe None pmf 0.5 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 4 geometries, PrimitiveBreakdown { triangles: 6, spheres: 1, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 6, spheres: 1, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +geom 0: material #0 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:9de8214b59f6ec57 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=2:9de8214b59f6ec57 +geom 1: material #1 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:be0b97004c4d3e85 camera=2:be0b97004c4d3e85 shadow=2:be0b97004c4d3e85 indirect=2:be0b97004c4d3e85 +geom 2: material #1 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:ec853032364bd1b8 camera=2:ec853032364bd1b8 shadow=2:ec853032364bd1b8 indirect=2:ec853032364bd1b8 +geom 3: material #1 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:f2c930e2e985552c camera=1:f2c930e2e985552c shadow=1:f2c930e2e985552c indirect=1:f2c930e2e985552c +provenance light /World/KeyLight: LightOrigin { index: 0, geoms: 0..1 } +provenance light /World/Sky: LightOrigin { index: 1, geoms: 4..4 } +provenance geometry 0..1: /World/KeyLight +provenance geometry 1..2: /World/Floor +provenance geometry 2..3: /World/Card +provenance geometry 3..4: /World/Mover +provenance mesh: MeshOrigin { geom_id: 1, slot: 0, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 2, slot: 1, baked: true, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 8416296582947184296, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 1: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 16263365991131358083, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [3] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: Some(7.0), camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/World/Cam"), cameras: ["/World/Cam"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/World/Cam"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/animation_usda-d9cfa85be82eff7f-1.image b/crates/crust-core/tests/data/import_baselines/animation_usda-d9cfa85be82eff7f-1.image new file mode 100644 index 000000000..249c64290 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/animation_usda-d9cfa85be82eff7f-1.image @@ -0,0 +1 @@ +96x54 16spp clamp-off a4cf10f126d1dd59 diff --git a/crates/crust-core/tests/data/import_baselines/animation_usda-dc0987b1e9c0a44b-1.digest b/crates/crust-core/tests/data/import_baselines/animation_usda-dc0987b1e9c0a44b-1.digest new file mode 100644 index 000000000..3a51c1026 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/animation_usda-dc0987b1e9c0a44b-1.digest @@ -0,0 +1,33 @@ +time: Some(10.0) +working space: Linear Rec.709 (sRGB) +camera path: Some("/World/Cam") +camera: Camera { origin: Vec3A(0.0, 1.5, 7.0), lower_left_corner: Vec3A(-5.6632595, -1.6855836, -3.0), horizontal: Vec3A(11.326519, 0.0, 0.0), vertical: Vec3A(0.0, 6.371167, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: Some("/Render/settings") +settings: RenderSettings { samples_per_pixel: 16, max_depth: 4, width: 96, height: 54, region: PixelRect { x0: 0, y0: 0, x1: 96, y1: 54 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 10, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 24.0, aperture: [20.955, 15.2908], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 10.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/animation.usda"], invisible_overrides: Some(0) } +layer: $DIR/animation.usda +warning: Warning { code: AssetUnsupportedByHost, kind: Skipped, count: 1, prims: [], message: "No asset loader: environment map $DIR/sky_gradient.exr ignored — the dome falls back to its uniform colour. Use Scene::from_usd_with_assets to supply one." } +lights: 2 +light 0: area name Some("/World/KeyLight") lpe None pmf 0.5 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 1: dome name Some("/World/Sky") lpe None pmf 0.5 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 4 geometries, PrimitiveBreakdown { triangles: 6, spheres: 1, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 6, spheres: 1, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +geom 0: material #0 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:9de8214b59f6ec57 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=2:9de8214b59f6ec57 +geom 1: material #1 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:be0b97004c4d3e85 camera=2:be0b97004c4d3e85 shadow=2:be0b97004c4d3e85 indirect=2:be0b97004c4d3e85 +geom 2: material #1 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:ed529345c66d7d38 camera=2:ed529345c66d7d38 shadow=2:ed529345c66d7d38 indirect=2:ed529345c66d7d38 +geom 3: material #1 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:f4cee44c409d25a6 camera=1:f4cee44c409d25a6 shadow=1:f4cee44c409d25a6 indirect=1:f4cee44c409d25a6 +provenance light /World/KeyLight: LightOrigin { index: 0, geoms: 0..1 } +provenance light /World/Sky: LightOrigin { index: 1, geoms: 4..4 } +provenance geometry 0..1: /World/KeyLight +provenance geometry 1..2: /World/Floor +provenance geometry 2..3: /World/Card +provenance geometry 3..4: /World/Mover +provenance mesh: MeshOrigin { geom_id: 1, slot: 0, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 2, slot: 1, baked: true, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 8416296582947184296, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 1: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 646954679051529708, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [3] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: Some(10.0), camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/World/Cam"), cameras: ["/World/Cam"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/World/Cam"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/animation_usda-dc0987b1e9c0a44b-1.image b/crates/crust-core/tests/data/import_baselines/animation_usda-dc0987b1e9c0a44b-1.image new file mode 100644 index 000000000..3ce938463 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/animation_usda-dc0987b1e9c0a44b-1.image @@ -0,0 +1 @@ +96x54 16spp clamp-off 3eaec3e041a51a7b diff --git a/crates/crust-core/tests/data/import_baselines/aov_format_usda-3d1985fd48e4fb2d-1.digest b/crates/crust-core/tests/data/import_baselines/aov_format_usda-3d1985fd48e4fb2d-1.digest new file mode 100644 index 000000000..3b9960028 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/aov_format_usda-3d1985fd48e4fb2d-1.digest @@ -0,0 +1,22 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/World/cam") +camera: Camera { origin: Vec3A(0.0, 0.0, 10.0), lower_left_corner: Vec3A(-2.0955, -1.5716249, 0.0), horizontal: Vec3A(4.191, 0.0, 0.0), vertical: Vec3A(0.0, 3.1432498, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: Some("/Render/settings") +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 48, height: 36, region: PixelRect { x0: 0, y0: 0, x1: 48, y1: 36 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [AovProduct { prim_path: "/Render/p", name: "p.exr", vars: [AovVar { prim_path: "/Render/P", name: "P", channel_prefix: None, source: P, components: 3, precision: Float, accumulation: Closest, clear: 0.0, expression: None, raw: false, variance: false }, AovVar { prim_path: "/Render/Pref_h", name: "Pref_h", channel_prefix: None, source: Primvar(PrimvarSource { index: 0, components: 3, role: Vector }), components: 3, precision: Half, accumulation: Closest, clear: 0.0, expression: None, raw: false, variance: false }, AovVar { prim_path: "/Render/Pref_f", name: "Pref_f", channel_prefix: None, source: Primvar(PrimvarSource { index: 0, components: 3, role: Vector }), components: 3, precision: Float, accumulation: Closest, clear: 0.0, expression: None, raw: false, variance: false }, AovVar { prim_path: "/Render/Cd_h", name: "Cd_h", channel_prefix: None, source: Primvar(PrimvarSource { index: 1, components: 3, role: Color }), components: 3, precision: Half, accumulation: Filtered, clear: 0.0, expression: None, raw: false, variance: false }], attributes: [] }], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 50.0, aperture: [20.955, 15.2908], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 10.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/aov_format.usda"], invisible_overrides: Some(0) } +layer: $DIR/aov_format.usda +lights: 1 +light 0: dome name Some("/World/dome") lpe None pmf 1.0 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 1 geometries, PrimitiveBreakdown { triangles: 2, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 2, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov Some((Some(0), false)) swapped false curves false scale 1.0 motion [] pieces all=2:32f1a52c797bfee5 camera=2:32f1a52c797bfee5 shadow=2:32f1a52c797bfee5 indirect=2:32f1a52c797bfee5 +provenance light /World/dome: LightOrigin { index: 0, geoms: 1..1 } +provenance geometry 0..1: /World/q +provenance mesh: MeshOrigin { geom_id: 0, slot: 0, baked: true, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 14779366758744255248, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/World/cam"), cameras: ["/World/cam"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [("rest", 3), ("displayColor", 3)], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/World/cam"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/aov_format_usda-3d1985fd48e4fb2d-1.image b/crates/crust-core/tests/data/import_baselines/aov_format_usda-3d1985fd48e4fb2d-1.image new file mode 100644 index 000000000..648a9f248 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/aov_format_usda-3d1985fd48e4fb2d-1.image @@ -0,0 +1 @@ +48x36 16spp clamp-off 54407d51eeed59ca diff --git a/crates/crust-core/tests/data/import_baselines/aovs_lookdev_usda-4a2c1502ba0a175e-1.digest b/crates/crust-core/tests/data/import_baselines/aovs_lookdev_usda-4a2c1502ba0a175e-1.digest new file mode 100644 index 000000000..69d9d3121 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/aovs_lookdev_usda-4a2c1502ba0a175e-1.digest @@ -0,0 +1,30 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/World/Cam") +camera: Camera { origin: Vec3A(0.0, 1.2, 6.0), lower_left_corner: Vec3A(-5.6632595, -1.9855835, -4.0), horizontal: Vec3A(11.326519, 0.0, 0.0), vertical: Vec3A(0.0, 6.371167, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: Some("/Render/settings") +settings: RenderSettings { samples_per_pixel: 16, max_depth: 4, width: 160, height: 90, region: PixelRect { x0: 0, y0: 0, x1: 160, y1: 90 }, min_samples_per_pixel: 8, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [AovProduct { prim_path: "/Render/Products/beauty", name: "renders/aovs_beauty.exr", vars: [AovVar { prim_path: "/Render/Products/Vars/C", name: "C", channel_prefix: None, source: Color, components: 4, precision: Float, accumulation: Filtered, clear: 0.0, expression: None, raw: false, variance: false }, AovVar { prim_path: "/Render/Products/Vars/sampleCount", name: "sampleCount", channel_prefix: None, source: SampleCount, components: 1, precision: Float, accumulation: Filtered, clear: 0.0, expression: None, raw: false, variance: false }, AovVar { prim_path: "/Render/Products/Vars/variance", name: "variance", channel_prefix: None, source: Variance, components: 1, precision: Float, accumulation: Filtered, clear: 0.0, expression: None, raw: false, variance: false }], attributes: [("artist", "crust samples")] }, AovProduct { prim_path: "/Render/Products/data", name: "renders/aovs_data.exr", vars: [AovVar { prim_path: "/Render/Products/Vars/Z", name: "Z", channel_prefix: None, source: Depth, components: 1, precision: Float, accumulation: Closest, clear: inf, expression: None, raw: false, variance: false }, AovVar { prim_path: "/Render/Products/Vars/distance", name: "distance", channel_prefix: None, source: Distance, components: 1, precision: Float, accumulation: Closest, clear: inf, expression: None, raw: false, variance: false }, AovVar { prim_path: "/Render/Products/Vars/P", name: "P", channel_prefix: None, source: P, components: 3, precision: Float, accumulation: Closest, clear: 0.0, expression: None, raw: false, variance: false }, AovVar { prim_path: "/Render/Products/Vars/Peye", name: "Peye", channel_prefix: None, source: Peye, components: 3, precision: Float, accumulation: Closest, clear: 0.0, expression: None, raw: false, variance: false }, AovVar { prim_path: "/Render/Products/Vars/N", name: "N", channel_prefix: None, source: Normal, components: 3, precision: Half, accumulation: Filtered, clear: 0.0, expression: None, raw: false, variance: false }, AovVar { prim_path: "/Render/Products/Vars/Neye", name: "Neye", channel_prefix: None, source: Neye, components: 3, precision: Float, accumulation: Filtered, clear: 0.0, expression: None, raw: false, variance: false }, AovVar { prim_path: "/Render/Products/Vars/st", name: "st", channel_prefix: None, source: St, components: 2, precision: Float, accumulation: Filtered, clear: 0.0, expression: None, raw: false, variance: false }, AovVar { prim_path: "/Render/Products/Vars/alpha", name: "alpha", channel_prefix: None, source: Alpha, components: 1, precision: Float, accumulation: Filtered, clear: 0.0, expression: None, raw: false, variance: false }], attributes: [] }], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 24.0, aperture: [20.955, 15.2908], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 10.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/aovs_lookdev.usda", "$ROOT/samples/aovs.usda"], invisible_overrides: Some(0) } +layer: $ROOT/samples/aovs.usda +layer: $DIR/aovs_lookdev.usda +warning: Warning { code: AovUnknownSource, kind: Skipped, count: 1, prims: ["/Render/Products/Vars/diffuse_direct"], message: "/Render/Products/Vars/diffuse_direct: unknown raw source \"diffuse_direct\"; no channel written (crust's AOV names are listed in the user documentation, usd/aovs)" } +lights: 2 +light 0: dome name Some("/World/Sky") lpe None pmf 0.5 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 1: area name Some("/World/KeyLight") lpe None pmf 0.5 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 3 geometries, PrimitiveBreakdown { triangles: 4, spheres: 1, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 4, spheres: 1, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +geom 0: material #0 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:e8a5ea9ee1d32838 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=2:e8a5ea9ee1d32838 +geom 1: material #1 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:cadf82024fa5b745 camera=2:cadf82024fa5b745 shadow=2:cadf82024fa5b745 indirect=2:cadf82024fa5b745 +geom 2: material #1 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:ee76fd7ed45c4a85 camera=1:ee76fd7ed45c4a85 shadow=1:ee76fd7ed45c4a85 indirect=1:ee76fd7ed45c4a85 +provenance light /World/KeyLight: LightOrigin { index: 1, geoms: 0..1 } +provenance light /World/Sky: LightOrigin { index: 0, geoms: 0..0 } +provenance geometry 0..1: /World/KeyLight +provenance geometry 1..2: /World/Floor +provenance geometry 2..3: /World/Ball +provenance mesh: MeshOrigin { geom_id: 1, slot: 0, baked: true, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 12300483381263303556, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [2] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: true }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/World/Cam"), cameras: ["/World/Cam"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/World/Cam"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/aovs_lookdev_usda-4a2c1502ba0a175e-1.image b/crates/crust-core/tests/data/import_baselines/aovs_lookdev_usda-4a2c1502ba0a175e-1.image new file mode 100644 index 000000000..6d0c7cc68 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/aovs_lookdev_usda-4a2c1502ba0a175e-1.image @@ -0,0 +1 @@ +160x90 16spp clamp-off 6d657218ffac01a2 diff --git a/crates/crust-core/tests/data/import_baselines/aovs_lookdev_usda-5ec9a160b78f998f-1.digest b/crates/crust-core/tests/data/import_baselines/aovs_lookdev_usda-5ec9a160b78f998f-1.digest new file mode 100644 index 000000000..69d9d3121 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/aovs_lookdev_usda-5ec9a160b78f998f-1.digest @@ -0,0 +1,30 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/World/Cam") +camera: Camera { origin: Vec3A(0.0, 1.2, 6.0), lower_left_corner: Vec3A(-5.6632595, -1.9855835, -4.0), horizontal: Vec3A(11.326519, 0.0, 0.0), vertical: Vec3A(0.0, 6.371167, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: Some("/Render/settings") +settings: RenderSettings { samples_per_pixel: 16, max_depth: 4, width: 160, height: 90, region: PixelRect { x0: 0, y0: 0, x1: 160, y1: 90 }, min_samples_per_pixel: 8, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [AovProduct { prim_path: "/Render/Products/beauty", name: "renders/aovs_beauty.exr", vars: [AovVar { prim_path: "/Render/Products/Vars/C", name: "C", channel_prefix: None, source: Color, components: 4, precision: Float, accumulation: Filtered, clear: 0.0, expression: None, raw: false, variance: false }, AovVar { prim_path: "/Render/Products/Vars/sampleCount", name: "sampleCount", channel_prefix: None, source: SampleCount, components: 1, precision: Float, accumulation: Filtered, clear: 0.0, expression: None, raw: false, variance: false }, AovVar { prim_path: "/Render/Products/Vars/variance", name: "variance", channel_prefix: None, source: Variance, components: 1, precision: Float, accumulation: Filtered, clear: 0.0, expression: None, raw: false, variance: false }], attributes: [("artist", "crust samples")] }, AovProduct { prim_path: "/Render/Products/data", name: "renders/aovs_data.exr", vars: [AovVar { prim_path: "/Render/Products/Vars/Z", name: "Z", channel_prefix: None, source: Depth, components: 1, precision: Float, accumulation: Closest, clear: inf, expression: None, raw: false, variance: false }, AovVar { prim_path: "/Render/Products/Vars/distance", name: "distance", channel_prefix: None, source: Distance, components: 1, precision: Float, accumulation: Closest, clear: inf, expression: None, raw: false, variance: false }, AovVar { prim_path: "/Render/Products/Vars/P", name: "P", channel_prefix: None, source: P, components: 3, precision: Float, accumulation: Closest, clear: 0.0, expression: None, raw: false, variance: false }, AovVar { prim_path: "/Render/Products/Vars/Peye", name: "Peye", channel_prefix: None, source: Peye, components: 3, precision: Float, accumulation: Closest, clear: 0.0, expression: None, raw: false, variance: false }, AovVar { prim_path: "/Render/Products/Vars/N", name: "N", channel_prefix: None, source: Normal, components: 3, precision: Half, accumulation: Filtered, clear: 0.0, expression: None, raw: false, variance: false }, AovVar { prim_path: "/Render/Products/Vars/Neye", name: "Neye", channel_prefix: None, source: Neye, components: 3, precision: Float, accumulation: Filtered, clear: 0.0, expression: None, raw: false, variance: false }, AovVar { prim_path: "/Render/Products/Vars/st", name: "st", channel_prefix: None, source: St, components: 2, precision: Float, accumulation: Filtered, clear: 0.0, expression: None, raw: false, variance: false }, AovVar { prim_path: "/Render/Products/Vars/alpha", name: "alpha", channel_prefix: None, source: Alpha, components: 1, precision: Float, accumulation: Filtered, clear: 0.0, expression: None, raw: false, variance: false }], attributes: [] }], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 24.0, aperture: [20.955, 15.2908], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 10.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/aovs_lookdev.usda", "$ROOT/samples/aovs.usda"], invisible_overrides: Some(0) } +layer: $ROOT/samples/aovs.usda +layer: $DIR/aovs_lookdev.usda +warning: Warning { code: AovUnknownSource, kind: Skipped, count: 1, prims: ["/Render/Products/Vars/diffuse_direct"], message: "/Render/Products/Vars/diffuse_direct: unknown raw source \"diffuse_direct\"; no channel written (crust's AOV names are listed in the user documentation, usd/aovs)" } +lights: 2 +light 0: dome name Some("/World/Sky") lpe None pmf 0.5 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 1: area name Some("/World/KeyLight") lpe None pmf 0.5 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 3 geometries, PrimitiveBreakdown { triangles: 4, spheres: 1, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 4, spheres: 1, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +geom 0: material #0 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:e8a5ea9ee1d32838 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=2:e8a5ea9ee1d32838 +geom 1: material #1 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:cadf82024fa5b745 camera=2:cadf82024fa5b745 shadow=2:cadf82024fa5b745 indirect=2:cadf82024fa5b745 +geom 2: material #1 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:ee76fd7ed45c4a85 camera=1:ee76fd7ed45c4a85 shadow=1:ee76fd7ed45c4a85 indirect=1:ee76fd7ed45c4a85 +provenance light /World/KeyLight: LightOrigin { index: 1, geoms: 0..1 } +provenance light /World/Sky: LightOrigin { index: 0, geoms: 0..0 } +provenance geometry 0..1: /World/KeyLight +provenance geometry 1..2: /World/Floor +provenance geometry 2..3: /World/Ball +provenance mesh: MeshOrigin { geom_id: 1, slot: 0, baked: true, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 12300483381263303556, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [2] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: true }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/World/Cam"), cameras: ["/World/Cam"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/World/Cam"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/aovs_lookdev_usda-5ec9a160b78f998f-1.image b/crates/crust-core/tests/data/import_baselines/aovs_lookdev_usda-5ec9a160b78f998f-1.image new file mode 100644 index 000000000..6d0c7cc68 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/aovs_lookdev_usda-5ec9a160b78f998f-1.image @@ -0,0 +1 @@ +160x90 16spp clamp-off 6d657218ffac01a2 diff --git a/crates/crust-core/tests/data/import_baselines/aovs_lookdev_usda-6a98ab5ed25ffa78-1.digest b/crates/crust-core/tests/data/import_baselines/aovs_lookdev_usda-6a98ab5ed25ffa78-1.digest new file mode 100644 index 000000000..ce8292a79 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/aovs_lookdev_usda-6a98ab5ed25ffa78-1.digest @@ -0,0 +1,30 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/World/Cam") +camera: Camera { origin: Vec3A(0.0, 1.2, 6.0), lower_left_corner: Vec3A(-5.6632595, -1.9855835, -4.0), horizontal: Vec3A(11.326519, 0.0, 0.0), vertical: Vec3A(0.0, 6.371167, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: Some("/Render/settings") +settings: RenderSettings { samples_per_pixel: 16, max_depth: 4, width: 160, height: 90, region: PixelRect { x0: 0, y0: 0, x1: 160, y1: 90 }, min_samples_per_pixel: 8, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [AovProduct { prim_path: "/Render/Products/beauty", name: "final/beauty.$F4.exr", vars: [AovVar { prim_path: "/Render/Products/Vars/C", name: "C", channel_prefix: None, source: Color, components: 4, precision: Float, accumulation: Filtered, clear: 0.0, expression: None, raw: false, variance: false }, AovVar { prim_path: "/Render/Products/Vars/sampleCount", name: "sampleCount", channel_prefix: None, source: SampleCount, components: 1, precision: Float, accumulation: Filtered, clear: 0.0, expression: None, raw: false, variance: false }, AovVar { prim_path: "/Render/Products/Vars/variance", name: "variance", channel_prefix: None, source: Variance, components: 1, precision: Float, accumulation: Filtered, clear: 0.0, expression: None, raw: false, variance: false }], attributes: [("artist", "crust samples")] }, AovProduct { prim_path: "/Render/Products/data", name: "renders/aovs_data.exr", vars: [AovVar { prim_path: "/Render/Products/Vars/Z", name: "Z", channel_prefix: None, source: Depth, components: 1, precision: Float, accumulation: Closest, clear: inf, expression: None, raw: false, variance: false }, AovVar { prim_path: "/Render/Products/Vars/distance", name: "distance", channel_prefix: None, source: Distance, components: 1, precision: Float, accumulation: Closest, clear: inf, expression: None, raw: false, variance: false }, AovVar { prim_path: "/Render/Products/Vars/P", name: "P", channel_prefix: None, source: P, components: 3, precision: Float, accumulation: Closest, clear: 0.0, expression: None, raw: false, variance: false }, AovVar { prim_path: "/Render/Products/Vars/Peye", name: "Peye", channel_prefix: None, source: Peye, components: 3, precision: Float, accumulation: Closest, clear: 0.0, expression: None, raw: false, variance: false }, AovVar { prim_path: "/Render/Products/Vars/N", name: "N", channel_prefix: None, source: Normal, components: 3, precision: Half, accumulation: Filtered, clear: 0.0, expression: None, raw: false, variance: false }, AovVar { prim_path: "/Render/Products/Vars/Neye", name: "Neye", channel_prefix: None, source: Neye, components: 3, precision: Float, accumulation: Filtered, clear: 0.0, expression: None, raw: false, variance: false }, AovVar { prim_path: "/Render/Products/Vars/st", name: "st", channel_prefix: None, source: St, components: 2, precision: Float, accumulation: Filtered, clear: 0.0, expression: None, raw: false, variance: false }, AovVar { prim_path: "/Render/Products/Vars/alpha", name: "alpha", channel_prefix: None, source: Alpha, components: 1, precision: Float, accumulation: Filtered, clear: 0.0, expression: None, raw: false, variance: false }], attributes: [] }], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 24.0, aperture: [20.955, 15.2908], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 10.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/aovs_lookdev.usda", "$ROOT/samples/aovs.usda"], invisible_overrides: Some(0) } +layer: $ROOT/samples/aovs.usda +layer: $DIR/aovs_lookdev.usda +warning: Warning { code: AovUnknownSource, kind: Skipped, count: 1, prims: ["/Render/Products/Vars/diffuse_direct"], message: "/Render/Products/Vars/diffuse_direct: unknown raw source \"diffuse_direct\"; no channel written (crust's AOV names are listed in the user documentation, usd/aovs)" } +lights: 2 +light 0: dome name Some("/World/Sky") lpe None pmf 0.5 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 1: area name Some("/World/KeyLight") lpe None pmf 0.5 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 3 geometries, PrimitiveBreakdown { triangles: 4, spheres: 1, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 4, spheres: 1, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +geom 0: material #0 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:e8a5ea9ee1d32838 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=2:e8a5ea9ee1d32838 +geom 1: material #1 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:cadf82024fa5b745 camera=2:cadf82024fa5b745 shadow=2:cadf82024fa5b745 indirect=2:cadf82024fa5b745 +geom 2: material #1 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:ee76fd7ed45c4a85 camera=1:ee76fd7ed45c4a85 shadow=1:ee76fd7ed45c4a85 indirect=1:ee76fd7ed45c4a85 +provenance light /World/KeyLight: LightOrigin { index: 1, geoms: 0..1 } +provenance light /World/Sky: LightOrigin { index: 0, geoms: 0..0 } +provenance geometry 0..1: /World/KeyLight +provenance geometry 1..2: /World/Floor +provenance geometry 2..3: /World/Ball +provenance mesh: MeshOrigin { geom_id: 1, slot: 0, baked: true, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 12300483381263303556, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [2] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: true }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/World/Cam"), cameras: ["/World/Cam"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/World/Cam"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/aovs_lookdev_usda-6a98ab5ed25ffa78-1.image b/crates/crust-core/tests/data/import_baselines/aovs_lookdev_usda-6a98ab5ed25ffa78-1.image new file mode 100644 index 000000000..6d0c7cc68 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/aovs_lookdev_usda-6a98ab5ed25ffa78-1.image @@ -0,0 +1 @@ +160x90 16spp clamp-off 6d657218ffac01a2 diff --git a/crates/crust-core/tests/data/import_baselines/aovs_lookdev_usda-6d6e4a8f31366652-1.digest b/crates/crust-core/tests/data/import_baselines/aovs_lookdev_usda-6d6e4a8f31366652-1.digest new file mode 100644 index 000000000..1228f3b29 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/aovs_lookdev_usda-6d6e4a8f31366652-1.digest @@ -0,0 +1,30 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/World/Cam") +camera: Camera { origin: Vec3A(0.0, 1.2, 6.0), lower_left_corner: Vec3A(-5.6632595, -1.9855835, -4.0), horizontal: Vec3A(11.326519, 0.0, 0.0), vertical: Vec3A(0.0, 6.371167, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: Some("/Render/settings") +settings: RenderSettings { samples_per_pixel: 16, max_depth: 4, width: 160, height: 90, region: PixelRect { x0: 0, y0: 0, x1: 160, y1: 90 }, min_samples_per_pixel: 8, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [AovProduct { prim_path: "/Render/Products/beauty", name: "final/beauty.exr", vars: [AovVar { prim_path: "/Render/Products/Vars/C", name: "C", channel_prefix: None, source: Color, components: 4, precision: Float, accumulation: Filtered, clear: 0.0, expression: None, raw: false, variance: false }, AovVar { prim_path: "/Render/Products/Vars/sampleCount", name: "sampleCount", channel_prefix: None, source: SampleCount, components: 1, precision: Float, accumulation: Filtered, clear: 0.0, expression: None, raw: false, variance: false }, AovVar { prim_path: "/Render/Products/Vars/variance", name: "variance", channel_prefix: None, source: Variance, components: 1, precision: Float, accumulation: Filtered, clear: 0.0, expression: None, raw: false, variance: false }], attributes: [("artist", "crust samples")] }, AovProduct { prim_path: "/Render/Products/data", name: "renders/aovs_data.exr", vars: [AovVar { prim_path: "/Render/Products/Vars/Z", name: "Z", channel_prefix: None, source: Depth, components: 1, precision: Float, accumulation: Closest, clear: inf, expression: None, raw: false, variance: false }, AovVar { prim_path: "/Render/Products/Vars/distance", name: "distance", channel_prefix: None, source: Distance, components: 1, precision: Float, accumulation: Closest, clear: inf, expression: None, raw: false, variance: false }, AovVar { prim_path: "/Render/Products/Vars/P", name: "P", channel_prefix: None, source: P, components: 3, precision: Float, accumulation: Closest, clear: 0.0, expression: None, raw: false, variance: false }, AovVar { prim_path: "/Render/Products/Vars/Peye", name: "Peye", channel_prefix: None, source: Peye, components: 3, precision: Float, accumulation: Closest, clear: 0.0, expression: None, raw: false, variance: false }, AovVar { prim_path: "/Render/Products/Vars/N", name: "N", channel_prefix: None, source: Normal, components: 3, precision: Half, accumulation: Filtered, clear: 0.0, expression: None, raw: false, variance: false }, AovVar { prim_path: "/Render/Products/Vars/Neye", name: "Neye", channel_prefix: None, source: Neye, components: 3, precision: Float, accumulation: Filtered, clear: 0.0, expression: None, raw: false, variance: false }, AovVar { prim_path: "/Render/Products/Vars/st", name: "st", channel_prefix: None, source: St, components: 2, precision: Float, accumulation: Filtered, clear: 0.0, expression: None, raw: false, variance: false }, AovVar { prim_path: "/Render/Products/Vars/alpha", name: "alpha", channel_prefix: None, source: Alpha, components: 1, precision: Float, accumulation: Filtered, clear: 0.0, expression: None, raw: false, variance: false }], attributes: [] }], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 24.0, aperture: [20.955, 15.2908], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 10.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/aovs_lookdev.usda", "$ROOT/samples/aovs.usda"], invisible_overrides: Some(0) } +layer: $ROOT/samples/aovs.usda +layer: $DIR/aovs_lookdev.usda +warning: Warning { code: AovUnknownSource, kind: Skipped, count: 1, prims: ["/Render/Products/Vars/diffuse_direct"], message: "/Render/Products/Vars/diffuse_direct: unknown raw source \"diffuse_direct\"; no channel written (crust's AOV names are listed in the user documentation, usd/aovs)" } +lights: 2 +light 0: dome name Some("/World/Sky") lpe None pmf 0.5 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 1: area name Some("/World/KeyLight") lpe None pmf 0.5 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 3 geometries, PrimitiveBreakdown { triangles: 4, spheres: 1, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 4, spheres: 1, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +geom 0: material #0 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:e8a5ea9ee1d32838 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=2:e8a5ea9ee1d32838 +geom 1: material #1 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:cadf82024fa5b745 camera=2:cadf82024fa5b745 shadow=2:cadf82024fa5b745 indirect=2:cadf82024fa5b745 +geom 2: material #1 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:ee76fd7ed45c4a85 camera=1:ee76fd7ed45c4a85 shadow=1:ee76fd7ed45c4a85 indirect=1:ee76fd7ed45c4a85 +provenance light /World/KeyLight: LightOrigin { index: 1, geoms: 0..1 } +provenance light /World/Sky: LightOrigin { index: 0, geoms: 0..0 } +provenance geometry 0..1: /World/KeyLight +provenance geometry 1..2: /World/Floor +provenance geometry 2..3: /World/Ball +provenance mesh: MeshOrigin { geom_id: 1, slot: 0, baked: true, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 12300483381263303556, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [2] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: true, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/World/Cam"), cameras: ["/World/Cam"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/World/Cam"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/aovs_lookdev_usda-6d6e4a8f31366652-1.image b/crates/crust-core/tests/data/import_baselines/aovs_lookdev_usda-6d6e4a8f31366652-1.image new file mode 100644 index 000000000..6d0c7cc68 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/aovs_lookdev_usda-6d6e4a8f31366652-1.image @@ -0,0 +1 @@ +160x90 16spp clamp-off 6d657218ffac01a2 diff --git a/crates/crust-core/tests/data/import_baselines/aovs_lookdev_usda-803d9a5b24ae0e42-1.digest b/crates/crust-core/tests/data/import_baselines/aovs_lookdev_usda-803d9a5b24ae0e42-1.digest new file mode 100644 index 000000000..21529408d --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/aovs_lookdev_usda-803d9a5b24ae0e42-1.digest @@ -0,0 +1,30 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/World/Cam") +camera: Camera { origin: Vec3A(0.0, 1.2, 6.0), lower_left_corner: Vec3A(-5.6632595, -1.9855835, -4.0), horizontal: Vec3A(11.326519, 0.0, 0.0), vertical: Vec3A(0.0, 6.371167, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: Some("/Render/settings") +settings: RenderSettings { samples_per_pixel: 16, max_depth: 4, width: 160, height: 90, region: PixelRect { x0: 0, y0: 0, x1: 160, y1: 90 }, min_samples_per_pixel: 8, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [AovProduct { prim_path: "/Render/Products/beauty", name: "final/beauty.$F4.exr", vars: [AovVar { prim_path: "/Render/Products/Vars/C", name: "C", channel_prefix: None, source: Color, components: 4, precision: Float, accumulation: Filtered, clear: 0.0, expression: None, raw: false, variance: false }, AovVar { prim_path: "/Render/Products/Vars/sampleCount", name: "sampleCount", channel_prefix: None, source: SampleCount, components: 1, precision: Float, accumulation: Filtered, clear: 0.0, expression: None, raw: false, variance: false }, AovVar { prim_path: "/Render/Products/Vars/variance", name: "variance", channel_prefix: None, source: Variance, components: 1, precision: Float, accumulation: Filtered, clear: 0.0, expression: None, raw: false, variance: false }], attributes: [("artist", "crust samples")] }, AovProduct { prim_path: "/Render/Products/data", name: "renders/aovs_data.exr", vars: [AovVar { prim_path: "/Render/Products/Vars/Z", name: "Z", channel_prefix: None, source: Depth, components: 1, precision: Float, accumulation: Closest, clear: inf, expression: None, raw: false, variance: false }, AovVar { prim_path: "/Render/Products/Vars/distance", name: "distance", channel_prefix: None, source: Distance, components: 1, precision: Float, accumulation: Closest, clear: inf, expression: None, raw: false, variance: false }, AovVar { prim_path: "/Render/Products/Vars/P", name: "P", channel_prefix: None, source: P, components: 3, precision: Float, accumulation: Closest, clear: 0.0, expression: None, raw: false, variance: false }, AovVar { prim_path: "/Render/Products/Vars/Peye", name: "Peye", channel_prefix: None, source: Peye, components: 3, precision: Float, accumulation: Closest, clear: 0.0, expression: None, raw: false, variance: false }, AovVar { prim_path: "/Render/Products/Vars/N", name: "N", channel_prefix: None, source: Normal, components: 3, precision: Half, accumulation: Filtered, clear: 0.0, expression: None, raw: false, variance: false }, AovVar { prim_path: "/Render/Products/Vars/Neye", name: "Neye", channel_prefix: None, source: Neye, components: 3, precision: Float, accumulation: Filtered, clear: 0.0, expression: None, raw: false, variance: false }, AovVar { prim_path: "/Render/Products/Vars/st", name: "st", channel_prefix: None, source: St, components: 2, precision: Float, accumulation: Filtered, clear: 0.0, expression: None, raw: false, variance: false }, AovVar { prim_path: "/Render/Products/Vars/alpha", name: "alpha", channel_prefix: None, source: Alpha, components: 1, precision: Float, accumulation: Filtered, clear: 0.0, expression: None, raw: false, variance: false }], attributes: [] }], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 24.0, aperture: [20.955, 15.2908], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 10.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/aovs_lookdev.usda", "$ROOT/samples/aovs.usda"], invisible_overrides: Some(0) } +layer: $ROOT/samples/aovs.usda +layer: $DIR/aovs_lookdev.usda +warning: Warning { code: AovUnknownSource, kind: Skipped, count: 1, prims: ["/Render/Products/Vars/diffuse_direct"], message: "/Render/Products/Vars/diffuse_direct: unknown raw source \"diffuse_direct\"; no channel written (crust's AOV names are listed in the user documentation, usd/aovs)" } +lights: 2 +light 0: dome name Some("/World/Sky") lpe None pmf 0.5 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 1: area name Some("/World/KeyLight") lpe None pmf 0.5 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 3 geometries, PrimitiveBreakdown { triangles: 4, spheres: 1, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 4, spheres: 1, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +geom 0: material #0 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:e8a5ea9ee1d32838 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=2:e8a5ea9ee1d32838 +geom 1: material #1 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:cadf82024fa5b745 camera=2:cadf82024fa5b745 shadow=2:cadf82024fa5b745 indirect=2:cadf82024fa5b745 +geom 2: material #1 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:ee76fd7ed45c4a85 camera=1:ee76fd7ed45c4a85 shadow=1:ee76fd7ed45c4a85 indirect=1:ee76fd7ed45c4a85 +provenance light /World/KeyLight: LightOrigin { index: 1, geoms: 0..1 } +provenance light /World/Sky: LightOrigin { index: 0, geoms: 0..0 } +provenance geometry 0..1: /World/KeyLight +provenance geometry 1..2: /World/Floor +provenance geometry 2..3: /World/Ball +provenance mesh: MeshOrigin { geom_id: 1, slot: 0, baked: true, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 12300483381263303556, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [2] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: true, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/World/Cam"), cameras: ["/World/Cam"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/World/Cam"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/aovs_lookdev_usda-803d9a5b24ae0e42-1.image b/crates/crust-core/tests/data/import_baselines/aovs_lookdev_usda-803d9a5b24ae0e42-1.image new file mode 100644 index 000000000..6d0c7cc68 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/aovs_lookdev_usda-803d9a5b24ae0e42-1.image @@ -0,0 +1 @@ +160x90 16spp clamp-off 6d657218ffac01a2 diff --git a/crates/crust-core/tests/data/import_baselines/aovs_lookdev_usda-c88cebf77c02e1c8-1.digest b/crates/crust-core/tests/data/import_baselines/aovs_lookdev_usda-c88cebf77c02e1c8-1.digest new file mode 100644 index 000000000..1bf86a093 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/aovs_lookdev_usda-c88cebf77c02e1c8-1.digest @@ -0,0 +1,30 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/World/Cam") +camera: Camera { origin: Vec3A(0.0, 1.2, 6.0), lower_left_corner: Vec3A(-5.6632595, -1.9855835, -4.0), horizontal: Vec3A(11.326519, 0.0, 0.0), vertical: Vec3A(0.0, 6.371167, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: Some("/Render/settings") +settings: RenderSettings { samples_per_pixel: 16, max_depth: 4, width: 160, height: 90, region: PixelRect { x0: 0, y0: 0, x1: 160, y1: 90 }, min_samples_per_pixel: 8, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [AovProduct { prim_path: "/Render/Products/beauty", name: "final/beauty.exr", vars: [AovVar { prim_path: "/Render/Products/Vars/C", name: "C", channel_prefix: None, source: Color, components: 4, precision: Float, accumulation: Filtered, clear: 0.0, expression: None, raw: false, variance: false }, AovVar { prim_path: "/Render/Products/Vars/sampleCount", name: "sampleCount", channel_prefix: None, source: SampleCount, components: 1, precision: Float, accumulation: Filtered, clear: 0.0, expression: None, raw: false, variance: false }, AovVar { prim_path: "/Render/Products/Vars/variance", name: "variance", channel_prefix: None, source: Variance, components: 1, precision: Float, accumulation: Filtered, clear: 0.0, expression: None, raw: false, variance: false }], attributes: [("artist", "crust samples")] }, AovProduct { prim_path: "/Render/Products/data", name: "renders/aovs_data.exr", vars: [AovVar { prim_path: "/Render/Products/Vars/Z", name: "Z", channel_prefix: None, source: Depth, components: 1, precision: Float, accumulation: Closest, clear: inf, expression: None, raw: false, variance: false }, AovVar { prim_path: "/Render/Products/Vars/distance", name: "distance", channel_prefix: None, source: Distance, components: 1, precision: Float, accumulation: Closest, clear: inf, expression: None, raw: false, variance: false }, AovVar { prim_path: "/Render/Products/Vars/P", name: "P", channel_prefix: None, source: P, components: 3, precision: Float, accumulation: Closest, clear: 0.0, expression: None, raw: false, variance: false }, AovVar { prim_path: "/Render/Products/Vars/Peye", name: "Peye", channel_prefix: None, source: Peye, components: 3, precision: Float, accumulation: Closest, clear: 0.0, expression: None, raw: false, variance: false }, AovVar { prim_path: "/Render/Products/Vars/N", name: "N", channel_prefix: None, source: Normal, components: 3, precision: Half, accumulation: Filtered, clear: 0.0, expression: None, raw: false, variance: false }, AovVar { prim_path: "/Render/Products/Vars/Neye", name: "Neye", channel_prefix: None, source: Neye, components: 3, precision: Float, accumulation: Filtered, clear: 0.0, expression: None, raw: false, variance: false }, AovVar { prim_path: "/Render/Products/Vars/st", name: "st", channel_prefix: None, source: St, components: 2, precision: Float, accumulation: Filtered, clear: 0.0, expression: None, raw: false, variance: false }, AovVar { prim_path: "/Render/Products/Vars/alpha", name: "alpha", channel_prefix: None, source: Alpha, components: 1, precision: Float, accumulation: Filtered, clear: 0.0, expression: None, raw: false, variance: false }], attributes: [] }], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 24.0, aperture: [20.955, 15.2908], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 10.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/aovs_lookdev.usda", "$ROOT/samples/aovs.usda"], invisible_overrides: Some(0) } +layer: $ROOT/samples/aovs.usda +layer: $DIR/aovs_lookdev.usda +warning: Warning { code: AovUnknownSource, kind: Skipped, count: 1, prims: ["/Render/Products/Vars/diffuse_direct"], message: "/Render/Products/Vars/diffuse_direct: unknown raw source \"diffuse_direct\"; no channel written (crust's AOV names are listed in the user documentation, usd/aovs)" } +lights: 2 +light 0: dome name Some("/World/Sky") lpe None pmf 0.5 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 1: area name Some("/World/KeyLight") lpe None pmf 0.5 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 3 geometries, PrimitiveBreakdown { triangles: 4, spheres: 1, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 4, spheres: 1, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +geom 0: material #0 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:e8a5ea9ee1d32838 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=2:e8a5ea9ee1d32838 +geom 1: material #1 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:cadf82024fa5b745 camera=2:cadf82024fa5b745 shadow=2:cadf82024fa5b745 indirect=2:cadf82024fa5b745 +geom 2: material #1 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:ee76fd7ed45c4a85 camera=1:ee76fd7ed45c4a85 shadow=1:ee76fd7ed45c4a85 indirect=1:ee76fd7ed45c4a85 +provenance light /World/KeyLight: LightOrigin { index: 1, geoms: 0..1 } +provenance light /World/Sky: LightOrigin { index: 0, geoms: 0..0 } +provenance geometry 0..1: /World/KeyLight +provenance geometry 1..2: /World/Floor +provenance geometry 2..3: /World/Ball +provenance mesh: MeshOrigin { geom_id: 1, slot: 0, baked: true, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 12300483381263303556, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [2] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: true }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/World/Cam"), cameras: ["/World/Cam"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/World/Cam"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/aovs_lookdev_usda-c88cebf77c02e1c8-1.image b/crates/crust-core/tests/data/import_baselines/aovs_lookdev_usda-c88cebf77c02e1c8-1.image new file mode 100644 index 000000000..6d0c7cc68 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/aovs_lookdev_usda-c88cebf77c02e1c8-1.image @@ -0,0 +1 @@ +160x90 16spp clamp-off 6d657218ffac01a2 diff --git a/crates/crust-core/tests/data/import_baselines/aovs_lpe_usda-96034a4139733157-1.digest b/crates/crust-core/tests/data/import_baselines/aovs_lpe_usda-96034a4139733157-1.digest new file mode 100644 index 000000000..2d93e233b --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/aovs_lpe_usda-96034a4139733157-1.digest @@ -0,0 +1,41 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/World/Cam") +camera: Camera { origin: Vec3A(0.0, 1.5, 7.0), lower_left_corner: Vec3A(-5.6632595, -1.6855836, -3.0), horizontal: Vec3A(11.326519, 0.0, 0.0), vertical: Vec3A(0.0, 6.371167, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: Some("/Render/settings") +settings: RenderSettings { samples_per_pixel: 64, max_depth: 8, width: 320, height: 180, region: PixelRect { x0: 0, y0: 0, x1: 320, y1: 180 }, min_samples_per_pixel: 16, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [AovProduct { prim_path: "/Render/Products/lpe", name: "renders/aovs_lpe.exr", vars: [AovVar { prim_path: "/Render/Products/Vars/beauty", name: "beauty", channel_prefix: None, source: Color, components: 4, precision: Float, accumulation: Filtered, clear: 0.0, expression: None, raw: false, variance: false }, AovVar { prim_path: "/Render/Products/Vars/diffuse_direct", name: "diffuse_direct", channel_prefix: None, source: Lpe, components: 3, precision: Float, accumulation: Filtered, clear: 0.0, expression: Some("C[LO]"), raw: false, variance: false }, AovVar { prim_path: "/Render/Products/Vars/diffuse_indirect", name: "diffuse_indirect", channel_prefix: None, source: Lpe, components: 3, precision: Float, accumulation: Filtered, clear: 0.0, expression: Some("C.+[LO]"), raw: false, variance: false }, AovVar { prim_path: "/Render/Products/Vars/glossy_direct", name: "glossy_direct", channel_prefix: None, source: Lpe, components: 3, precision: Float, accumulation: Filtered, clear: 0.0, expression: Some("C[LO]"), raw: false, variance: false }, AovVar { prim_path: "/Render/Products/Vars/glossy_indirect", name: "glossy_indirect", channel_prefix: None, source: Lpe, components: 3, precision: Float, accumulation: Filtered, clear: 0.0, expression: Some("C.+[LO]"), raw: false, variance: false }, AovVar { prim_path: "/Render/Products/Vars/specular", name: "specular", channel_prefix: None, source: Lpe, components: 3, precision: Float, accumulation: Filtered, clear: 0.0, expression: Some("C.*[LO]"), raw: false, variance: false }, AovVar { prim_path: "/Render/Products/Vars/transmission", name: "transmission", channel_prefix: None, source: Lpe, components: 3, precision: Float, accumulation: Filtered, clear: 0.0, expression: Some("C.*[LO]"), raw: false, variance: false }, AovVar { prim_path: "/Render/Products/Vars/volume", name: "volume", channel_prefix: None, source: Lpe, components: 3, precision: Float, accumulation: Filtered, clear: 0.0, expression: Some("C.*[LO]"), raw: false, variance: false }, AovVar { prim_path: "/Render/Products/Vars/emission", name: "emission", channel_prefix: None, source: Lpe, components: 3, precision: Float, accumulation: Filtered, clear: 0.0, expression: Some("C[LO]"), raw: false, variance: false }, AovVar { prim_path: "/Render/Products/Vars/key", name: "key", channel_prefix: None, source: Lpe, components: 3, precision: Float, accumulation: Filtered, clear: 0.0, expression: Some("C.*"), raw: false, variance: false }, AovVar { prim_path: "/Render/Products/Vars/fill", name: "fill", channel_prefix: None, source: Lpe, components: 3, precision: Float, accumulation: Filtered, clear: 0.0, expression: Some("C.*"), raw: false, variance: false }, AovVar { prim_path: "/Render/Products/Vars/sky_and_glow", name: "sky_and_glow", channel_prefix: None, source: Lpe, components: 3, precision: Float, accumulation: Filtered, clear: 0.0, expression: Some("C.*(|O)"), raw: false, variance: false }, AovVar { prim_path: "/Render/Products/Vars/coat", name: "coat", channel_prefix: None, source: Lpe, components: 3, precision: Float, accumulation: Filtered, clear: 0.0, expression: Some("C.*[LO]"), raw: false, variance: false }, AovVar { prim_path: "/Render/Products/Vars/albedo", name: "albedo", channel_prefix: None, source: Albedo, components: 3, precision: Float, accumulation: Filtered, clear: 0.0, expression: None, raw: false, variance: false }, AovVar { prim_path: "/Render/Products/Vars/N", name: "N", channel_prefix: None, source: Normal, components: 3, precision: Float, accumulation: Filtered, clear: 0.0, expression: None, raw: false, variance: false }, AovVar { prim_path: "/Render/Products/Vars/rawLight", name: "rawLight", channel_prefix: None, source: Lpe, components: 3, precision: Float, accumulation: Filtered, clear: 0.0, expression: Some("C[LO]"), raw: true, variance: false }, AovVar { prim_path: "/Render/Products/Vars/rawGI", name: "rawGI", channel_prefix: None, source: Lpe, components: 3, precision: Float, accumulation: Filtered, clear: 0.0, expression: Some("C.+[LO]"), raw: true, variance: false }, AovVar { prim_path: "/Render/Products/Vars/diffuse_albedo", name: "diffuse_albedo", channel_prefix: None, source: DiffuseFilter, components: 3, precision: Float, accumulation: Filtered, clear: 0.0, expression: None, raw: false, variance: false }], attributes: [] }], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 24.0, aperture: [20.955, 15.2908], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 10.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/aovs_lpe.usda"], invisible_overrides: Some(0) } +layer: $DIR/aovs_lpe.usda +lights: 3 +light 0: dome name Some("/World/Sky") lpe None pmf 0.33333334 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 1: area name Some("/World/Fill") lpe Some("fill") pmf 0.33333334 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 2: area name Some("/World/Key") lpe Some("key") pmf 0.33333334 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 1 +volume 0: sigma_s Vec3A(0.25, 0.25, 0.25) sigma_a Vec3A(0.02, 0.02, 0.02) g 0.2 emission Vec3A(0.0, 0.0, 0.0) mask RayMask(4294967295) class 65535 homogeneous true +world: 6 geometries, PrimitiveBreakdown { triangles: 2, spheres: 5, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 2, spheres: 5, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +geom 0: material #0 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:c97b221493d1a870 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=1:c97b221493d1a870 +geom 1: material #1 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:98380669d7d30875 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=1:98380669d7d30875 +geom 2: material #2 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:0d00d12a04370041 camera=1:0d00d12a04370041 shadow=1:0d00d12a04370041 indirect=1:0d00d12a04370041 +geom 3: material #3 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:58be77f6c22f1464 camera=1:58be77f6c22f1464 shadow=1:58be77f6c22f1464 indirect=1:58be77f6c22f1464 +geom 4: material #4 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:7040eda5700d5570 camera=1:7040eda5700d5570 shadow=1:7040eda5700d5570 indirect=1:7040eda5700d5570 +geom 5: material #5 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:6e02baf63b264ec5 camera=2:6e02baf63b264ec5 shadow=2:6e02baf63b264ec5 indirect=2:6e02baf63b264ec5 +provenance material /World/Materials/floor: MaterialOrigin { slots: [5], displaced: false } +provenance material /World/Materials/glass: MaterialOrigin { slots: [3], displaced: false } +provenance material /World/Materials/glow: MaterialOrigin { slots: [2], displaced: false } +provenance material /World/Materials/paint: MaterialOrigin { slots: [4], displaced: false } +provenance light /World/Fill: LightOrigin { index: 1, geoms: 0..1 } +provenance light /World/Key: LightOrigin { index: 2, geoms: 1..2 } +provenance light /World/Sky: LightOrigin { index: 0, geoms: 0..0 } +provenance geometry 0..1: /World/Fill +provenance geometry 1..2: /World/Key +provenance geometry 2..3: /World/Glow +provenance geometry 3..4: /World/Glass +provenance geometry 4..5: /World/Painted +provenance geometry 5..6: /World/Floor +provenance mesh: MeshOrigin { geom_id: 5, slot: 0, baked: true, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 4179031546807817238, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [2, 3, 4] +provenance volumes: ["/World/Haze"] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: true, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/World/Cam"), cameras: ["/World/Cam"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/World/Cam"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/aovs_lpe_usda-96034a4139733157-1.image b/crates/crust-core/tests/data/import_baselines/aovs_lpe_usda-96034a4139733157-1.image new file mode 100644 index 000000000..da26b1909 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/aovs_lpe_usda-96034a4139733157-1.image @@ -0,0 +1 @@ +320x180 16spp clamp-off a056342ef04b0777 diff --git a/crates/crust-core/tests/data/import_baselines/aovs_lpe_usda-a43dc2277f16c84f-1.digest b/crates/crust-core/tests/data/import_baselines/aovs_lpe_usda-a43dc2277f16c84f-1.digest new file mode 100644 index 000000000..86f91b38e --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/aovs_lpe_usda-a43dc2277f16c84f-1.digest @@ -0,0 +1,41 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/World/Cam") +camera: Camera { origin: Vec3A(0.0, 1.5, 7.0), lower_left_corner: Vec3A(-5.6632595, -1.6855836, -3.0), horizontal: Vec3A(11.326519, 0.0, 0.0), vertical: Vec3A(0.0, 6.371167, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: Some("/Render/settings") +settings: RenderSettings { samples_per_pixel: 64, max_depth: 8, width: 320, height: 180, region: PixelRect { x0: 0, y0: 0, x1: 320, y1: 180 }, min_samples_per_pixel: 16, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [AovProduct { prim_path: "/Render/Products/lpe", name: "renders/aovs_lpe.exr", vars: [AovVar { prim_path: "/Render/Products/Vars/beauty", name: "beauty", channel_prefix: None, source: Color, components: 4, precision: Float, accumulation: Filtered, clear: 0.0, expression: None, raw: false, variance: false }, AovVar { prim_path: "/Render/Products/Vars/diffuse_direct", name: "diffuse_direct", channel_prefix: None, source: Lpe, components: 3, precision: Float, accumulation: Filtered, clear: 0.0, expression: Some("C[LO]"), raw: false, variance: false }, AovVar { prim_path: "/Render/Products/Vars/diffuse_indirect", name: "diffuse_indirect", channel_prefix: None, source: Lpe, components: 3, precision: Float, accumulation: Filtered, clear: 0.0, expression: Some("C.+[LO]"), raw: false, variance: false }, AovVar { prim_path: "/Render/Products/Vars/glossy_direct", name: "glossy_direct", channel_prefix: None, source: Lpe, components: 3, precision: Float, accumulation: Filtered, clear: 0.0, expression: Some("C[LO]"), raw: false, variance: false }, AovVar { prim_path: "/Render/Products/Vars/glossy_indirect", name: "glossy_indirect", channel_prefix: None, source: Lpe, components: 3, precision: Float, accumulation: Filtered, clear: 0.0, expression: Some("C.+[LO]"), raw: false, variance: false }, AovVar { prim_path: "/Render/Products/Vars/specular", name: "specular", channel_prefix: None, source: Lpe, components: 3, precision: Float, accumulation: Filtered, clear: 0.0, expression: Some("C.*[LO]"), raw: false, variance: false }, AovVar { prim_path: "/Render/Products/Vars/transmission", name: "transmission", channel_prefix: None, source: Lpe, components: 3, precision: Float, accumulation: Filtered, clear: 0.0, expression: Some("C.*[LO]"), raw: false, variance: false }, AovVar { prim_path: "/Render/Products/Vars/volume", name: "volume", channel_prefix: None, source: Lpe, components: 3, precision: Float, accumulation: Filtered, clear: 0.0, expression: Some("C.*[LO]"), raw: false, variance: false }, AovVar { prim_path: "/Render/Products/Vars/emission", name: "emission", channel_prefix: None, source: Lpe, components: 3, precision: Float, accumulation: Filtered, clear: 0.0, expression: Some("C[LO]"), raw: false, variance: false }, AovVar { prim_path: "/Render/Products/Vars/key", name: "key", channel_prefix: None, source: Lpe, components: 3, precision: Float, accumulation: Filtered, clear: 0.0, expression: Some("C.*"), raw: false, variance: false }, AovVar { prim_path: "/Render/Products/Vars/fill", name: "fill", channel_prefix: None, source: Lpe, components: 3, precision: Float, accumulation: Filtered, clear: 0.0, expression: Some("C.*"), raw: false, variance: false }, AovVar { prim_path: "/Render/Products/Vars/sky_and_glow", name: "sky_and_glow", channel_prefix: None, source: Lpe, components: 3, precision: Float, accumulation: Filtered, clear: 0.0, expression: Some("C.*(|O)"), raw: false, variance: false }, AovVar { prim_path: "/Render/Products/Vars/coat", name: "coat", channel_prefix: None, source: Lpe, components: 3, precision: Float, accumulation: Filtered, clear: 0.0, expression: Some("C.*[LO]"), raw: false, variance: false }, AovVar { prim_path: "/Render/Products/Vars/albedo", name: "albedo", channel_prefix: None, source: Albedo, components: 3, precision: Float, accumulation: Filtered, clear: 0.0, expression: None, raw: false, variance: false }, AovVar { prim_path: "/Render/Products/Vars/N", name: "N", channel_prefix: None, source: Normal, components: 3, precision: Float, accumulation: Filtered, clear: 0.0, expression: None, raw: false, variance: false }, AovVar { prim_path: "/Render/Products/Vars/rawLight", name: "rawLight", channel_prefix: None, source: Lpe, components: 3, precision: Float, accumulation: Filtered, clear: 0.0, expression: Some("C[LO]"), raw: true, variance: false }, AovVar { prim_path: "/Render/Products/Vars/rawGI", name: "rawGI", channel_prefix: None, source: Lpe, components: 3, precision: Float, accumulation: Filtered, clear: 0.0, expression: Some("C.+[LO]"), raw: true, variance: false }, AovVar { prim_path: "/Render/Products/Vars/diffuse_albedo", name: "diffuse_albedo", channel_prefix: None, source: DiffuseFilter, components: 3, precision: Float, accumulation: Filtered, clear: 0.0, expression: None, raw: false, variance: false }], attributes: [] }], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 24.0, aperture: [20.955, 15.2908], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 10.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/aovs_lpe.usda"], invisible_overrides: Some(0) } +layer: $DIR/aovs_lpe.usda +lights: 3 +light 0: dome name Some("/World/Sky") lpe None pmf 0.33333334 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 1: area name Some("/World/Fill") lpe Some("fill") pmf 0.33333334 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 2: area name Some("/World/Key") lpe Some("key") pmf 0.33333334 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 1 +volume 0: sigma_s Vec3A(0.25, 0.25, 0.25) sigma_a Vec3A(0.02, 0.02, 0.02) g 0.2 emission Vec3A(0.0, 0.0, 0.0) mask RayMask(4294967295) class 65535 homogeneous true +world: 6 geometries, PrimitiveBreakdown { triangles: 2, spheres: 5, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 2, spheres: 5, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +geom 0: material #0 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:c97b221493d1a870 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=1:c97b221493d1a870 +geom 1: material #1 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:98380669d7d30875 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=1:98380669d7d30875 +geom 2: material #2 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:0d00d12a04370041 camera=1:0d00d12a04370041 shadow=1:0d00d12a04370041 indirect=1:0d00d12a04370041 +geom 3: material #3 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:58be77f6c22f1464 camera=1:58be77f6c22f1464 shadow=1:58be77f6c22f1464 indirect=1:58be77f6c22f1464 +geom 4: material #4 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:7040eda5700d5570 camera=1:7040eda5700d5570 shadow=1:7040eda5700d5570 indirect=1:7040eda5700d5570 +geom 5: material #5 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:6e02baf63b264ec5 camera=2:6e02baf63b264ec5 shadow=2:6e02baf63b264ec5 indirect=2:6e02baf63b264ec5 +provenance material /World/Materials/floor: MaterialOrigin { slots: [5], displaced: false } +provenance material /World/Materials/glass: MaterialOrigin { slots: [3], displaced: false } +provenance material /World/Materials/glow: MaterialOrigin { slots: [2], displaced: false } +provenance material /World/Materials/paint: MaterialOrigin { slots: [4], displaced: false } +provenance light /World/Fill: LightOrigin { index: 1, geoms: 0..1 } +provenance light /World/Key: LightOrigin { index: 2, geoms: 1..2 } +provenance light /World/Sky: LightOrigin { index: 0, geoms: 0..0 } +provenance geometry 0..1: /World/Fill +provenance geometry 1..2: /World/Key +provenance geometry 2..3: /World/Glow +provenance geometry 3..4: /World/Glass +provenance geometry 4..5: /World/Painted +provenance geometry 5..6: /World/Floor +provenance mesh: MeshOrigin { geom_id: 5, slot: 0, baked: true, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 4179031546807817238, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [2, 3, 4] +provenance volumes: ["/World/Haze"] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/World/Cam"), cameras: ["/World/Cam"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/World/Cam"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/aovs_lpe_usda-a43dc2277f16c84f-1.image b/crates/crust-core/tests/data/import_baselines/aovs_lpe_usda-a43dc2277f16c84f-1.image new file mode 100644 index 000000000..da26b1909 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/aovs_lpe_usda-a43dc2277f16c84f-1.image @@ -0,0 +1 @@ +320x180 16spp clamp-off a056342ef04b0777 diff --git a/crates/crust-core/tests/data/import_baselines/aovs_lpe_usda-a43dc2277f16c84f-2.digest b/crates/crust-core/tests/data/import_baselines/aovs_lpe_usda-a43dc2277f16c84f-2.digest new file mode 100644 index 000000000..86f91b38e --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/aovs_lpe_usda-a43dc2277f16c84f-2.digest @@ -0,0 +1,41 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/World/Cam") +camera: Camera { origin: Vec3A(0.0, 1.5, 7.0), lower_left_corner: Vec3A(-5.6632595, -1.6855836, -3.0), horizontal: Vec3A(11.326519, 0.0, 0.0), vertical: Vec3A(0.0, 6.371167, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: Some("/Render/settings") +settings: RenderSettings { samples_per_pixel: 64, max_depth: 8, width: 320, height: 180, region: PixelRect { x0: 0, y0: 0, x1: 320, y1: 180 }, min_samples_per_pixel: 16, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [AovProduct { prim_path: "/Render/Products/lpe", name: "renders/aovs_lpe.exr", vars: [AovVar { prim_path: "/Render/Products/Vars/beauty", name: "beauty", channel_prefix: None, source: Color, components: 4, precision: Float, accumulation: Filtered, clear: 0.0, expression: None, raw: false, variance: false }, AovVar { prim_path: "/Render/Products/Vars/diffuse_direct", name: "diffuse_direct", channel_prefix: None, source: Lpe, components: 3, precision: Float, accumulation: Filtered, clear: 0.0, expression: Some("C[LO]"), raw: false, variance: false }, AovVar { prim_path: "/Render/Products/Vars/diffuse_indirect", name: "diffuse_indirect", channel_prefix: None, source: Lpe, components: 3, precision: Float, accumulation: Filtered, clear: 0.0, expression: Some("C.+[LO]"), raw: false, variance: false }, AovVar { prim_path: "/Render/Products/Vars/glossy_direct", name: "glossy_direct", channel_prefix: None, source: Lpe, components: 3, precision: Float, accumulation: Filtered, clear: 0.0, expression: Some("C[LO]"), raw: false, variance: false }, AovVar { prim_path: "/Render/Products/Vars/glossy_indirect", name: "glossy_indirect", channel_prefix: None, source: Lpe, components: 3, precision: Float, accumulation: Filtered, clear: 0.0, expression: Some("C.+[LO]"), raw: false, variance: false }, AovVar { prim_path: "/Render/Products/Vars/specular", name: "specular", channel_prefix: None, source: Lpe, components: 3, precision: Float, accumulation: Filtered, clear: 0.0, expression: Some("C.*[LO]"), raw: false, variance: false }, AovVar { prim_path: "/Render/Products/Vars/transmission", name: "transmission", channel_prefix: None, source: Lpe, components: 3, precision: Float, accumulation: Filtered, clear: 0.0, expression: Some("C.*[LO]"), raw: false, variance: false }, AovVar { prim_path: "/Render/Products/Vars/volume", name: "volume", channel_prefix: None, source: Lpe, components: 3, precision: Float, accumulation: Filtered, clear: 0.0, expression: Some("C.*[LO]"), raw: false, variance: false }, AovVar { prim_path: "/Render/Products/Vars/emission", name: "emission", channel_prefix: None, source: Lpe, components: 3, precision: Float, accumulation: Filtered, clear: 0.0, expression: Some("C[LO]"), raw: false, variance: false }, AovVar { prim_path: "/Render/Products/Vars/key", name: "key", channel_prefix: None, source: Lpe, components: 3, precision: Float, accumulation: Filtered, clear: 0.0, expression: Some("C.*"), raw: false, variance: false }, AovVar { prim_path: "/Render/Products/Vars/fill", name: "fill", channel_prefix: None, source: Lpe, components: 3, precision: Float, accumulation: Filtered, clear: 0.0, expression: Some("C.*"), raw: false, variance: false }, AovVar { prim_path: "/Render/Products/Vars/sky_and_glow", name: "sky_and_glow", channel_prefix: None, source: Lpe, components: 3, precision: Float, accumulation: Filtered, clear: 0.0, expression: Some("C.*(|O)"), raw: false, variance: false }, AovVar { prim_path: "/Render/Products/Vars/coat", name: "coat", channel_prefix: None, source: Lpe, components: 3, precision: Float, accumulation: Filtered, clear: 0.0, expression: Some("C.*[LO]"), raw: false, variance: false }, AovVar { prim_path: "/Render/Products/Vars/albedo", name: "albedo", channel_prefix: None, source: Albedo, components: 3, precision: Float, accumulation: Filtered, clear: 0.0, expression: None, raw: false, variance: false }, AovVar { prim_path: "/Render/Products/Vars/N", name: "N", channel_prefix: None, source: Normal, components: 3, precision: Float, accumulation: Filtered, clear: 0.0, expression: None, raw: false, variance: false }, AovVar { prim_path: "/Render/Products/Vars/rawLight", name: "rawLight", channel_prefix: None, source: Lpe, components: 3, precision: Float, accumulation: Filtered, clear: 0.0, expression: Some("C[LO]"), raw: true, variance: false }, AovVar { prim_path: "/Render/Products/Vars/rawGI", name: "rawGI", channel_prefix: None, source: Lpe, components: 3, precision: Float, accumulation: Filtered, clear: 0.0, expression: Some("C.+[LO]"), raw: true, variance: false }, AovVar { prim_path: "/Render/Products/Vars/diffuse_albedo", name: "diffuse_albedo", channel_prefix: None, source: DiffuseFilter, components: 3, precision: Float, accumulation: Filtered, clear: 0.0, expression: None, raw: false, variance: false }], attributes: [] }], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 24.0, aperture: [20.955, 15.2908], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 10.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/aovs_lpe.usda"], invisible_overrides: Some(0) } +layer: $DIR/aovs_lpe.usda +lights: 3 +light 0: dome name Some("/World/Sky") lpe None pmf 0.33333334 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 1: area name Some("/World/Fill") lpe Some("fill") pmf 0.33333334 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 2: area name Some("/World/Key") lpe Some("key") pmf 0.33333334 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 1 +volume 0: sigma_s Vec3A(0.25, 0.25, 0.25) sigma_a Vec3A(0.02, 0.02, 0.02) g 0.2 emission Vec3A(0.0, 0.0, 0.0) mask RayMask(4294967295) class 65535 homogeneous true +world: 6 geometries, PrimitiveBreakdown { triangles: 2, spheres: 5, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 2, spheres: 5, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +geom 0: material #0 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:c97b221493d1a870 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=1:c97b221493d1a870 +geom 1: material #1 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:98380669d7d30875 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=1:98380669d7d30875 +geom 2: material #2 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:0d00d12a04370041 camera=1:0d00d12a04370041 shadow=1:0d00d12a04370041 indirect=1:0d00d12a04370041 +geom 3: material #3 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:58be77f6c22f1464 camera=1:58be77f6c22f1464 shadow=1:58be77f6c22f1464 indirect=1:58be77f6c22f1464 +geom 4: material #4 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:7040eda5700d5570 camera=1:7040eda5700d5570 shadow=1:7040eda5700d5570 indirect=1:7040eda5700d5570 +geom 5: material #5 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:6e02baf63b264ec5 camera=2:6e02baf63b264ec5 shadow=2:6e02baf63b264ec5 indirect=2:6e02baf63b264ec5 +provenance material /World/Materials/floor: MaterialOrigin { slots: [5], displaced: false } +provenance material /World/Materials/glass: MaterialOrigin { slots: [3], displaced: false } +provenance material /World/Materials/glow: MaterialOrigin { slots: [2], displaced: false } +provenance material /World/Materials/paint: MaterialOrigin { slots: [4], displaced: false } +provenance light /World/Fill: LightOrigin { index: 1, geoms: 0..1 } +provenance light /World/Key: LightOrigin { index: 2, geoms: 1..2 } +provenance light /World/Sky: LightOrigin { index: 0, geoms: 0..0 } +provenance geometry 0..1: /World/Fill +provenance geometry 1..2: /World/Key +provenance geometry 2..3: /World/Glow +provenance geometry 3..4: /World/Glass +provenance geometry 4..5: /World/Painted +provenance geometry 5..6: /World/Floor +provenance mesh: MeshOrigin { geom_id: 5, slot: 0, baked: true, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 4179031546807817238, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [2, 3, 4] +provenance volumes: ["/World/Haze"] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/World/Cam"), cameras: ["/World/Cam"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/World/Cam"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/aovs_lpe_usda-a43dc2277f16c84f-2.image b/crates/crust-core/tests/data/import_baselines/aovs_lpe_usda-a43dc2277f16c84f-2.image new file mode 100644 index 000000000..da26b1909 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/aovs_lpe_usda-a43dc2277f16c84f-2.image @@ -0,0 +1 @@ +320x180 16spp clamp-off a056342ef04b0777 diff --git a/crates/crust-core/tests/data/import_baselines/aovs_usda-8f7e50636c58d0eb-1.digest b/crates/crust-core/tests/data/import_baselines/aovs_usda-8f7e50636c58d0eb-1.digest new file mode 100644 index 000000000..6897e3dda --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/aovs_usda-8f7e50636c58d0eb-1.digest @@ -0,0 +1,29 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/World/Cam") +camera: Camera { origin: Vec3A(0.0, 1.2, 6.0), lower_left_corner: Vec3A(-5.6632595, -1.9855835, -4.0), horizontal: Vec3A(11.326519, 0.0, 0.0), vertical: Vec3A(0.0, 6.371167, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: Some("/Render/settings") +settings: RenderSettings { samples_per_pixel: 16, max_depth: 4, width: 160, height: 90, region: PixelRect { x0: 0, y0: 0, x1: 160, y1: 90 }, min_samples_per_pixel: 8, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [AovProduct { prim_path: "/Render/Products/beauty", name: "renders/aovs_beauty.exr", vars: [AovVar { prim_path: "/Render/Products/Vars/C", name: "C", channel_prefix: None, source: Color, components: 4, precision: Float, accumulation: Filtered, clear: 0.0, expression: None, raw: false, variance: false }, AovVar { prim_path: "/Render/Products/Vars/sampleCount", name: "sampleCount", channel_prefix: None, source: SampleCount, components: 1, precision: Float, accumulation: Filtered, clear: 0.0, expression: None, raw: false, variance: false }, AovVar { prim_path: "/Render/Products/Vars/variance", name: "variance", channel_prefix: None, source: Variance, components: 1, precision: Float, accumulation: Filtered, clear: 0.0, expression: None, raw: false, variance: false }], attributes: [("artist", "crust samples")] }, AovProduct { prim_path: "/Render/Products/data", name: "renders/aovs_data.exr", vars: [AovVar { prim_path: "/Render/Products/Vars/Z", name: "Z", channel_prefix: None, source: Depth, components: 1, precision: Float, accumulation: Closest, clear: inf, expression: None, raw: false, variance: false }, AovVar { prim_path: "/Render/Products/Vars/distance", name: "distance", channel_prefix: None, source: Distance, components: 1, precision: Float, accumulation: Closest, clear: inf, expression: None, raw: false, variance: false }, AovVar { prim_path: "/Render/Products/Vars/P", name: "P", channel_prefix: None, source: P, components: 3, precision: Float, accumulation: Closest, clear: 0.0, expression: None, raw: false, variance: false }, AovVar { prim_path: "/Render/Products/Vars/Peye", name: "Peye", channel_prefix: None, source: Peye, components: 3, precision: Float, accumulation: Closest, clear: 0.0, expression: None, raw: false, variance: false }, AovVar { prim_path: "/Render/Products/Vars/N", name: "N", channel_prefix: None, source: Normal, components: 3, precision: Half, accumulation: Filtered, clear: 0.0, expression: None, raw: false, variance: false }, AovVar { prim_path: "/Render/Products/Vars/Neye", name: "Neye", channel_prefix: None, source: Neye, components: 3, precision: Float, accumulation: Filtered, clear: 0.0, expression: None, raw: false, variance: false }, AovVar { prim_path: "/Render/Products/Vars/st", name: "st", channel_prefix: None, source: St, components: 2, precision: Float, accumulation: Filtered, clear: 0.0, expression: None, raw: false, variance: false }, AovVar { prim_path: "/Render/Products/Vars/alpha", name: "alpha", channel_prefix: None, source: Alpha, components: 1, precision: Float, accumulation: Filtered, clear: 0.0, expression: None, raw: false, variance: false }], attributes: [] }], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 24.0, aperture: [20.955, 15.2908], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 10.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/aovs.usda"], invisible_overrides: Some(0) } +layer: $DIR/aovs.usda +warning: Warning { code: AovUnknownSource, kind: Skipped, count: 1, prims: ["/Render/Products/Vars/diffuse_direct"], message: "/Render/Products/Vars/diffuse_direct: unknown raw source \"diffuse_direct\"; no channel written (crust's AOV names are listed in the user documentation, usd/aovs)" } +lights: 2 +light 0: dome name Some("/World/Sky") lpe None pmf 0.5 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 1: area name Some("/World/KeyLight") lpe None pmf 0.5 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 3 geometries, PrimitiveBreakdown { triangles: 4, spheres: 1, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 4, spheres: 1, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +geom 0: material #0 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:e8a5ea9ee1d32838 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=2:e8a5ea9ee1d32838 +geom 1: material #1 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:cadf82024fa5b745 camera=2:cadf82024fa5b745 shadow=2:cadf82024fa5b745 indirect=2:cadf82024fa5b745 +geom 2: material #1 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:ee76fd7ed45c4a85 camera=1:ee76fd7ed45c4a85 shadow=1:ee76fd7ed45c4a85 indirect=1:ee76fd7ed45c4a85 +provenance light /World/KeyLight: LightOrigin { index: 1, geoms: 0..1 } +provenance light /World/Sky: LightOrigin { index: 0, geoms: 0..0 } +provenance geometry 0..1: /World/KeyLight +provenance geometry 1..2: /World/Floor +provenance geometry 2..3: /World/Ball +provenance mesh: MeshOrigin { geom_id: 1, slot: 0, baked: true, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 12300483381263303556, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [2] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/World/Cam"), cameras: ["/World/Cam"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/World/Cam"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/aovs_usda-8f7e50636c58d0eb-1.image b/crates/crust-core/tests/data/import_baselines/aovs_usda-8f7e50636c58d0eb-1.image new file mode 100644 index 000000000..6d0c7cc68 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/aovs_usda-8f7e50636c58d0eb-1.image @@ -0,0 +1 @@ +160x90 16spp clamp-off 6d657218ffac01a2 diff --git a/crates/crust-core/tests/data/import_baselines/aovs_usda-8f7e50636c58d0eb-2.digest b/crates/crust-core/tests/data/import_baselines/aovs_usda-8f7e50636c58d0eb-2.digest new file mode 100644 index 000000000..6897e3dda --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/aovs_usda-8f7e50636c58d0eb-2.digest @@ -0,0 +1,29 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/World/Cam") +camera: Camera { origin: Vec3A(0.0, 1.2, 6.0), lower_left_corner: Vec3A(-5.6632595, -1.9855835, -4.0), horizontal: Vec3A(11.326519, 0.0, 0.0), vertical: Vec3A(0.0, 6.371167, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: Some("/Render/settings") +settings: RenderSettings { samples_per_pixel: 16, max_depth: 4, width: 160, height: 90, region: PixelRect { x0: 0, y0: 0, x1: 160, y1: 90 }, min_samples_per_pixel: 8, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [AovProduct { prim_path: "/Render/Products/beauty", name: "renders/aovs_beauty.exr", vars: [AovVar { prim_path: "/Render/Products/Vars/C", name: "C", channel_prefix: None, source: Color, components: 4, precision: Float, accumulation: Filtered, clear: 0.0, expression: None, raw: false, variance: false }, AovVar { prim_path: "/Render/Products/Vars/sampleCount", name: "sampleCount", channel_prefix: None, source: SampleCount, components: 1, precision: Float, accumulation: Filtered, clear: 0.0, expression: None, raw: false, variance: false }, AovVar { prim_path: "/Render/Products/Vars/variance", name: "variance", channel_prefix: None, source: Variance, components: 1, precision: Float, accumulation: Filtered, clear: 0.0, expression: None, raw: false, variance: false }], attributes: [("artist", "crust samples")] }, AovProduct { prim_path: "/Render/Products/data", name: "renders/aovs_data.exr", vars: [AovVar { prim_path: "/Render/Products/Vars/Z", name: "Z", channel_prefix: None, source: Depth, components: 1, precision: Float, accumulation: Closest, clear: inf, expression: None, raw: false, variance: false }, AovVar { prim_path: "/Render/Products/Vars/distance", name: "distance", channel_prefix: None, source: Distance, components: 1, precision: Float, accumulation: Closest, clear: inf, expression: None, raw: false, variance: false }, AovVar { prim_path: "/Render/Products/Vars/P", name: "P", channel_prefix: None, source: P, components: 3, precision: Float, accumulation: Closest, clear: 0.0, expression: None, raw: false, variance: false }, AovVar { prim_path: "/Render/Products/Vars/Peye", name: "Peye", channel_prefix: None, source: Peye, components: 3, precision: Float, accumulation: Closest, clear: 0.0, expression: None, raw: false, variance: false }, AovVar { prim_path: "/Render/Products/Vars/N", name: "N", channel_prefix: None, source: Normal, components: 3, precision: Half, accumulation: Filtered, clear: 0.0, expression: None, raw: false, variance: false }, AovVar { prim_path: "/Render/Products/Vars/Neye", name: "Neye", channel_prefix: None, source: Neye, components: 3, precision: Float, accumulation: Filtered, clear: 0.0, expression: None, raw: false, variance: false }, AovVar { prim_path: "/Render/Products/Vars/st", name: "st", channel_prefix: None, source: St, components: 2, precision: Float, accumulation: Filtered, clear: 0.0, expression: None, raw: false, variance: false }, AovVar { prim_path: "/Render/Products/Vars/alpha", name: "alpha", channel_prefix: None, source: Alpha, components: 1, precision: Float, accumulation: Filtered, clear: 0.0, expression: None, raw: false, variance: false }], attributes: [] }], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 24.0, aperture: [20.955, 15.2908], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 10.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/aovs.usda"], invisible_overrides: Some(0) } +layer: $DIR/aovs.usda +warning: Warning { code: AovUnknownSource, kind: Skipped, count: 1, prims: ["/Render/Products/Vars/diffuse_direct"], message: "/Render/Products/Vars/diffuse_direct: unknown raw source \"diffuse_direct\"; no channel written (crust's AOV names are listed in the user documentation, usd/aovs)" } +lights: 2 +light 0: dome name Some("/World/Sky") lpe None pmf 0.5 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 1: area name Some("/World/KeyLight") lpe None pmf 0.5 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 3 geometries, PrimitiveBreakdown { triangles: 4, spheres: 1, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 4, spheres: 1, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +geom 0: material #0 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:e8a5ea9ee1d32838 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=2:e8a5ea9ee1d32838 +geom 1: material #1 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:cadf82024fa5b745 camera=2:cadf82024fa5b745 shadow=2:cadf82024fa5b745 indirect=2:cadf82024fa5b745 +geom 2: material #1 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:ee76fd7ed45c4a85 camera=1:ee76fd7ed45c4a85 shadow=1:ee76fd7ed45c4a85 indirect=1:ee76fd7ed45c4a85 +provenance light /World/KeyLight: LightOrigin { index: 1, geoms: 0..1 } +provenance light /World/Sky: LightOrigin { index: 0, geoms: 0..0 } +provenance geometry 0..1: /World/KeyLight +provenance geometry 1..2: /World/Floor +provenance geometry 2..3: /World/Ball +provenance mesh: MeshOrigin { geom_id: 1, slot: 0, baked: true, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 12300483381263303556, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [2] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/World/Cam"), cameras: ["/World/Cam"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/World/Cam"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/aovs_usda-8f7e50636c58d0eb-2.image b/crates/crust-core/tests/data/import_baselines/aovs_usda-8f7e50636c58d0eb-2.image new file mode 100644 index 000000000..6d0c7cc68 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/aovs_usda-8f7e50636c58d0eb-2.image @@ -0,0 +1 @@ +160x90 16spp clamp-off 6d657218ffac01a2 diff --git a/crates/crust-core/tests/data/import_baselines/aovs_usda-90b4ce2557c1c46e-1.digest b/crates/crust-core/tests/data/import_baselines/aovs_usda-90b4ce2557c1c46e-1.digest new file mode 100644 index 000000000..26aae38c9 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/aovs_usda-90b4ce2557c1c46e-1.digest @@ -0,0 +1,29 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/World/Cam") +camera: Camera { origin: Vec3A(0.0, 1.2, 6.0), lower_left_corner: Vec3A(-5.6632595, -1.9855835, -4.0), horizontal: Vec3A(11.326519, 0.0, 0.0), vertical: Vec3A(0.0, 6.371167, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: Some("/Render/settings") +settings: RenderSettings { samples_per_pixel: 16, max_depth: 4, width: 160, height: 90, region: PixelRect { x0: 0, y0: 0, x1: 160, y1: 90 }, min_samples_per_pixel: 8, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [AovProduct { prim_path: "/Render/Products/beauty", name: "renders/aovs_beauty.exr", vars: [AovVar { prim_path: "/Render/Products/Vars/C", name: "C", channel_prefix: None, source: Color, components: 4, precision: Float, accumulation: Filtered, clear: 0.0, expression: None, raw: false, variance: false }, AovVar { prim_path: "/Render/Products/Vars/sampleCount", name: "sampleCount", channel_prefix: None, source: SampleCount, components: 1, precision: Float, accumulation: Filtered, clear: 0.0, expression: None, raw: false, variance: false }, AovVar { prim_path: "/Render/Products/Vars/variance", name: "variance", channel_prefix: None, source: Variance, components: 1, precision: Float, accumulation: Filtered, clear: 0.0, expression: None, raw: false, variance: false }], attributes: [("artist", "crust samples")] }, AovProduct { prim_path: "/Render/Products/data", name: "renders/aovs_data.exr", vars: [AovVar { prim_path: "/Render/Products/Vars/Z", name: "Z", channel_prefix: None, source: Depth, components: 1, precision: Float, accumulation: Closest, clear: inf, expression: None, raw: false, variance: false }, AovVar { prim_path: "/Render/Products/Vars/distance", name: "distance", channel_prefix: None, source: Distance, components: 1, precision: Float, accumulation: Closest, clear: inf, expression: None, raw: false, variance: false }, AovVar { prim_path: "/Render/Products/Vars/P", name: "P", channel_prefix: None, source: P, components: 3, precision: Float, accumulation: Closest, clear: 0.0, expression: None, raw: false, variance: false }, AovVar { prim_path: "/Render/Products/Vars/Peye", name: "Peye", channel_prefix: None, source: Peye, components: 3, precision: Float, accumulation: Closest, clear: 0.0, expression: None, raw: false, variance: false }, AovVar { prim_path: "/Render/Products/Vars/N", name: "N", channel_prefix: None, source: Normal, components: 3, precision: Half, accumulation: Filtered, clear: 0.0, expression: None, raw: false, variance: false }, AovVar { prim_path: "/Render/Products/Vars/Neye", name: "Neye", channel_prefix: None, source: Neye, components: 3, precision: Float, accumulation: Filtered, clear: 0.0, expression: None, raw: false, variance: false }, AovVar { prim_path: "/Render/Products/Vars/st", name: "st", channel_prefix: None, source: St, components: 2, precision: Float, accumulation: Filtered, clear: 0.0, expression: None, raw: false, variance: false }, AovVar { prim_path: "/Render/Products/Vars/alpha", name: "alpha", channel_prefix: None, source: Alpha, components: 1, precision: Float, accumulation: Filtered, clear: 0.0, expression: None, raw: false, variance: false }], attributes: [] }], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 24.0, aperture: [20.955, 15.2908], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 10.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/aovs.usda"], invisible_overrides: Some(0) } +layer: $DIR/aovs.usda +warning: Warning { code: AovUnknownSource, kind: Skipped, count: 1, prims: ["/Render/Products/Vars/diffuse_direct"], message: "/Render/Products/Vars/diffuse_direct: unknown raw source \"diffuse_direct\"; no channel written (crust's AOV names are listed in the user documentation, usd/aovs)" } +lights: 2 +light 0: dome name Some("/World/Sky") lpe None pmf 0.5 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 1: area name Some("/World/KeyLight") lpe None pmf 0.5 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 3 geometries, PrimitiveBreakdown { triangles: 4, spheres: 1, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 4, spheres: 1, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +geom 0: material #0 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:e8a5ea9ee1d32838 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=2:e8a5ea9ee1d32838 +geom 1: material #1 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:cadf82024fa5b745 camera=2:cadf82024fa5b745 shadow=2:cadf82024fa5b745 indirect=2:cadf82024fa5b745 +geom 2: material #1 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:ee76fd7ed45c4a85 camera=1:ee76fd7ed45c4a85 shadow=1:ee76fd7ed45c4a85 indirect=1:ee76fd7ed45c4a85 +provenance light /World/KeyLight: LightOrigin { index: 1, geoms: 0..1 } +provenance light /World/Sky: LightOrigin { index: 0, geoms: 0..0 } +provenance geometry 0..1: /World/KeyLight +provenance geometry 1..2: /World/Floor +provenance geometry 2..3: /World/Ball +provenance mesh: MeshOrigin { geom_id: 1, slot: 0, baked: true, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 12300483381263303556, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [2] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: true, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/World/Cam"), cameras: ["/World/Cam"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/World/Cam"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/aovs_usda-90b4ce2557c1c46e-1.image b/crates/crust-core/tests/data/import_baselines/aovs_usda-90b4ce2557c1c46e-1.image new file mode 100644 index 000000000..6d0c7cc68 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/aovs_usda-90b4ce2557c1c46e-1.image @@ -0,0 +1 @@ +160x90 16spp clamp-off 6d657218ffac01a2 diff --git a/crates/crust-core/tests/data/import_baselines/aovs_usda-cd31a05d6e49ceda-1.digest b/crates/crust-core/tests/data/import_baselines/aovs_usda-cd31a05d6e49ceda-1.digest new file mode 100644 index 000000000..26aae38c9 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/aovs_usda-cd31a05d6e49ceda-1.digest @@ -0,0 +1,29 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/World/Cam") +camera: Camera { origin: Vec3A(0.0, 1.2, 6.0), lower_left_corner: Vec3A(-5.6632595, -1.9855835, -4.0), horizontal: Vec3A(11.326519, 0.0, 0.0), vertical: Vec3A(0.0, 6.371167, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: Some("/Render/settings") +settings: RenderSettings { samples_per_pixel: 16, max_depth: 4, width: 160, height: 90, region: PixelRect { x0: 0, y0: 0, x1: 160, y1: 90 }, min_samples_per_pixel: 8, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [AovProduct { prim_path: "/Render/Products/beauty", name: "renders/aovs_beauty.exr", vars: [AovVar { prim_path: "/Render/Products/Vars/C", name: "C", channel_prefix: None, source: Color, components: 4, precision: Float, accumulation: Filtered, clear: 0.0, expression: None, raw: false, variance: false }, AovVar { prim_path: "/Render/Products/Vars/sampleCount", name: "sampleCount", channel_prefix: None, source: SampleCount, components: 1, precision: Float, accumulation: Filtered, clear: 0.0, expression: None, raw: false, variance: false }, AovVar { prim_path: "/Render/Products/Vars/variance", name: "variance", channel_prefix: None, source: Variance, components: 1, precision: Float, accumulation: Filtered, clear: 0.0, expression: None, raw: false, variance: false }], attributes: [("artist", "crust samples")] }, AovProduct { prim_path: "/Render/Products/data", name: "renders/aovs_data.exr", vars: [AovVar { prim_path: "/Render/Products/Vars/Z", name: "Z", channel_prefix: None, source: Depth, components: 1, precision: Float, accumulation: Closest, clear: inf, expression: None, raw: false, variance: false }, AovVar { prim_path: "/Render/Products/Vars/distance", name: "distance", channel_prefix: None, source: Distance, components: 1, precision: Float, accumulation: Closest, clear: inf, expression: None, raw: false, variance: false }, AovVar { prim_path: "/Render/Products/Vars/P", name: "P", channel_prefix: None, source: P, components: 3, precision: Float, accumulation: Closest, clear: 0.0, expression: None, raw: false, variance: false }, AovVar { prim_path: "/Render/Products/Vars/Peye", name: "Peye", channel_prefix: None, source: Peye, components: 3, precision: Float, accumulation: Closest, clear: 0.0, expression: None, raw: false, variance: false }, AovVar { prim_path: "/Render/Products/Vars/N", name: "N", channel_prefix: None, source: Normal, components: 3, precision: Half, accumulation: Filtered, clear: 0.0, expression: None, raw: false, variance: false }, AovVar { prim_path: "/Render/Products/Vars/Neye", name: "Neye", channel_prefix: None, source: Neye, components: 3, precision: Float, accumulation: Filtered, clear: 0.0, expression: None, raw: false, variance: false }, AovVar { prim_path: "/Render/Products/Vars/st", name: "st", channel_prefix: None, source: St, components: 2, precision: Float, accumulation: Filtered, clear: 0.0, expression: None, raw: false, variance: false }, AovVar { prim_path: "/Render/Products/Vars/alpha", name: "alpha", channel_prefix: None, source: Alpha, components: 1, precision: Float, accumulation: Filtered, clear: 0.0, expression: None, raw: false, variance: false }], attributes: [] }], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 24.0, aperture: [20.955, 15.2908], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 10.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/aovs.usda"], invisible_overrides: Some(0) } +layer: $DIR/aovs.usda +warning: Warning { code: AovUnknownSource, kind: Skipped, count: 1, prims: ["/Render/Products/Vars/diffuse_direct"], message: "/Render/Products/Vars/diffuse_direct: unknown raw source \"diffuse_direct\"; no channel written (crust's AOV names are listed in the user documentation, usd/aovs)" } +lights: 2 +light 0: dome name Some("/World/Sky") lpe None pmf 0.5 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 1: area name Some("/World/KeyLight") lpe None pmf 0.5 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 3 geometries, PrimitiveBreakdown { triangles: 4, spheres: 1, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 4, spheres: 1, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +geom 0: material #0 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:e8a5ea9ee1d32838 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=2:e8a5ea9ee1d32838 +geom 1: material #1 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:cadf82024fa5b745 camera=2:cadf82024fa5b745 shadow=2:cadf82024fa5b745 indirect=2:cadf82024fa5b745 +geom 2: material #1 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:ee76fd7ed45c4a85 camera=1:ee76fd7ed45c4a85 shadow=1:ee76fd7ed45c4a85 indirect=1:ee76fd7ed45c4a85 +provenance light /World/KeyLight: LightOrigin { index: 1, geoms: 0..1 } +provenance light /World/Sky: LightOrigin { index: 0, geoms: 0..0 } +provenance geometry 0..1: /World/KeyLight +provenance geometry 1..2: /World/Floor +provenance geometry 2..3: /World/Ball +provenance mesh: MeshOrigin { geom_id: 1, slot: 0, baked: true, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 12300483381263303556, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [2] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: true, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/World/Cam"), cameras: ["/World/Cam"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/World/Cam"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/aovs_usda-cd31a05d6e49ceda-1.image b/crates/crust-core/tests/data/import_baselines/aovs_usda-cd31a05d6e49ceda-1.image new file mode 100644 index 000000000..6d0c7cc68 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/aovs_usda-cd31a05d6e49ceda-1.image @@ -0,0 +1 @@ +160x90 16spp clamp-off 6d657218ffac01a2 diff --git a/crates/crust-core/tests/data/import_baselines/area_lights_usda-00d2dcd66a50f5a9-1.digest b/crates/crust-core/tests/data/import_baselines/area_lights_usda-00d2dcd66a50f5a9-1.digest new file mode 100644 index 000000000..ef7dd66d0 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/area_lights_usda-00d2dcd66a50f5a9-1.digest @@ -0,0 +1,25 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: None +camera: Camera { origin: Vec3A(15.0, 3.0, 3.0), lower_left_corner: Vec3A(4.8863316, -0.044797063, 4.174048), horizontal: Vec3A(1.2295314, 0.0, -6.147657), vertical: Vec3A(-0.44830504, 3.4967792, -0.08966101), u: Vec3A(0.19611613, 0.0, -0.9805807), v: Vec3A(-0.1271232, 0.991561, -0.02542464), lens_radius: 0.05, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: Some("/Render/settings") +settings: RenderSettings { samples_per_pixel: 3, max_depth: 32, width: 8, height: 8, region: PixelRect { x0: 0, y0: 0, x1: 8, y1: 8 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: Some(PassSummary { path: "/Render/Passes/pass", holdouts: 0, camera_hidden: 1 }) +source: Source { lens: None, depth_of_field: true, motion_blur: false, layer_stack: ["$DIR/area_lights.usda"], invisible_overrides: Some(0) } +layer: $DIR/area_lights.usda +warning: Warning { code: CameraMissing, kind: Skipped, count: 1, prims: [], message: "USD stage has no UsdGeomCamera — falling back to world::get_settings camera" } +lights: 2 +light 0: area name Some("/World/Panel") lpe None pmf 0.5 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 1: area name Some("/World/Bulb") lpe None pmf 0.5 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 2 geometries, PrimitiveBreakdown { triangles: 2, spheres: 1, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 2, spheres: 1, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +geom 0: material #0 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:894b34b3fec45c98 camera=0:cbf29ce484222325 shadow=2:894b34b3fec45c98 indirect=2:894b34b3fec45c98 +geom 1: material #1 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:d23ac7aa026facc8 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=1:d23ac7aa026facc8 +provenance light /World/Bulb: LightOrigin { index: 1, geoms: 1..2 } +provenance light /World/Panel: LightOrigin { index: 0, geoms: 0..1 } +provenance geometry 0..1: /World/Panel +provenance geometry 1..2: /World/Bulb +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: Some("/Render/Passes/pass"), keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: None, cameras: [], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: None, offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/area_lights_usda-00d2dcd66a50f5a9-1.image b/crates/crust-core/tests/data/import_baselines/area_lights_usda-00d2dcd66a50f5a9-1.image new file mode 100644 index 000000000..8aad9360c --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/area_lights_usda-00d2dcd66a50f5a9-1.image @@ -0,0 +1 @@ +8x8 16spp clamp-off 9fa9e040e0eedf25 diff --git a/crates/crust-core/tests/data/import_baselines/area_lights_usda-07bd34a97e44c0ab-1.digest b/crates/crust-core/tests/data/import_baselines/area_lights_usda-07bd34a97e44c0ab-1.digest new file mode 100644 index 000000000..498a07026 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/area_lights_usda-07bd34a97e44c0ab-1.digest @@ -0,0 +1,25 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: None +camera: Camera { origin: Vec3A(15.0, 3.0, 3.0), lower_left_corner: Vec3A(4.8863316, -0.044797063, 4.174048), horizontal: Vec3A(1.2295314, 0.0, -6.147657), vertical: Vec3A(-0.44830504, 3.4967792, -0.08966101), u: Vec3A(0.19611613, 0.0, -0.9805807), v: Vec3A(-0.1271232, 0.991561, -0.02542464), lens_radius: 0.05, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: Some("/Render/settings") +settings: RenderSettings { samples_per_pixel: 3, max_depth: 32, width: 8, height: 8, region: PixelRect { x0: 0, y0: 0, x1: 8, y1: 8 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: None, depth_of_field: true, motion_blur: false, layer_stack: ["$DIR/area_lights.usda"], invisible_overrides: Some(0) } +layer: $DIR/area_lights.usda +warning: Warning { code: CameraMissing, kind: Skipped, count: 1, prims: [], message: "USD stage has no UsdGeomCamera — falling back to world::get_settings camera" } +lights: 2 +light 0: area name Some("/World/Panel") lpe None pmf 0.5 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 1: area name Some("/World/Bulb") lpe None pmf 0.5 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 2 geometries, PrimitiveBreakdown { triangles: 2, spheres: 1, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 2, spheres: 1, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +geom 0: material #0 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:894b34b3fec45c98 camera=2:894b34b3fec45c98 shadow=2:894b34b3fec45c98 indirect=2:894b34b3fec45c98 +geom 1: material #1 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:d23ac7aa026facc8 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=1:d23ac7aa026facc8 +provenance light /World/Bulb: LightOrigin { index: 1, geoms: 1..2 } +provenance light /World/Panel: LightOrigin { index: 0, geoms: 0..1 } +provenance geometry 0..1: /World/Panel +provenance geometry 1..2: /World/Bulb +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: None, cameras: [], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: None, offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/area_lights_usda-07bd34a97e44c0ab-1.image b/crates/crust-core/tests/data/import_baselines/area_lights_usda-07bd34a97e44c0ab-1.image new file mode 100644 index 000000000..8aad9360c --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/area_lights_usda-07bd34a97e44c0ab-1.image @@ -0,0 +1 @@ +8x8 16spp clamp-off 9fa9e040e0eedf25 diff --git a/crates/crust-core/tests/data/import_baselines/area_lights_usda-6989a4d471c724cf-1.digest b/crates/crust-core/tests/data/import_baselines/area_lights_usda-6989a4d471c724cf-1.digest new file mode 100644 index 000000000..ef7dd66d0 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/area_lights_usda-6989a4d471c724cf-1.digest @@ -0,0 +1,25 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: None +camera: Camera { origin: Vec3A(15.0, 3.0, 3.0), lower_left_corner: Vec3A(4.8863316, -0.044797063, 4.174048), horizontal: Vec3A(1.2295314, 0.0, -6.147657), vertical: Vec3A(-0.44830504, 3.4967792, -0.08966101), u: Vec3A(0.19611613, 0.0, -0.9805807), v: Vec3A(-0.1271232, 0.991561, -0.02542464), lens_radius: 0.05, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: Some("/Render/settings") +settings: RenderSettings { samples_per_pixel: 3, max_depth: 32, width: 8, height: 8, region: PixelRect { x0: 0, y0: 0, x1: 8, y1: 8 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: Some(PassSummary { path: "/Render/Passes/pass", holdouts: 0, camera_hidden: 1 }) +source: Source { lens: None, depth_of_field: true, motion_blur: false, layer_stack: ["$DIR/area_lights.usda"], invisible_overrides: Some(0) } +layer: $DIR/area_lights.usda +warning: Warning { code: CameraMissing, kind: Skipped, count: 1, prims: [], message: "USD stage has no UsdGeomCamera — falling back to world::get_settings camera" } +lights: 2 +light 0: area name Some("/World/Panel") lpe None pmf 0.5 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 1: area name Some("/World/Bulb") lpe None pmf 0.5 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 2 geometries, PrimitiveBreakdown { triangles: 2, spheres: 1, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 2, spheres: 1, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +geom 0: material #0 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:894b34b3fec45c98 camera=0:cbf29ce484222325 shadow=2:894b34b3fec45c98 indirect=2:894b34b3fec45c98 +geom 1: material #1 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:d23ac7aa026facc8 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=1:d23ac7aa026facc8 +provenance light /World/Bulb: LightOrigin { index: 1, geoms: 1..2 } +provenance light /World/Panel: LightOrigin { index: 0, geoms: 0..1 } +provenance geometry 0..1: /World/Panel +provenance geometry 1..2: /World/Bulb +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: Some("/Render/Passes/pass"), keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: None, cameras: [], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: None, offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/area_lights_usda-6989a4d471c724cf-1.image b/crates/crust-core/tests/data/import_baselines/area_lights_usda-6989a4d471c724cf-1.image new file mode 100644 index 000000000..8aad9360c --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/area_lights_usda-6989a4d471c724cf-1.image @@ -0,0 +1 @@ +8x8 16spp clamp-off 9fa9e040e0eedf25 diff --git a/crates/crust-core/tests/data/import_baselines/area_lights_usda-9a0b2d022c966581-1.digest b/crates/crust-core/tests/data/import_baselines/area_lights_usda-9a0b2d022c966581-1.digest new file mode 100644 index 000000000..498a07026 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/area_lights_usda-9a0b2d022c966581-1.digest @@ -0,0 +1,25 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: None +camera: Camera { origin: Vec3A(15.0, 3.0, 3.0), lower_left_corner: Vec3A(4.8863316, -0.044797063, 4.174048), horizontal: Vec3A(1.2295314, 0.0, -6.147657), vertical: Vec3A(-0.44830504, 3.4967792, -0.08966101), u: Vec3A(0.19611613, 0.0, -0.9805807), v: Vec3A(-0.1271232, 0.991561, -0.02542464), lens_radius: 0.05, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: Some("/Render/settings") +settings: RenderSettings { samples_per_pixel: 3, max_depth: 32, width: 8, height: 8, region: PixelRect { x0: 0, y0: 0, x1: 8, y1: 8 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: None, depth_of_field: true, motion_blur: false, layer_stack: ["$DIR/area_lights.usda"], invisible_overrides: Some(0) } +layer: $DIR/area_lights.usda +warning: Warning { code: CameraMissing, kind: Skipped, count: 1, prims: [], message: "USD stage has no UsdGeomCamera — falling back to world::get_settings camera" } +lights: 2 +light 0: area name Some("/World/Panel") lpe None pmf 0.5 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 1: area name Some("/World/Bulb") lpe None pmf 0.5 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 2 geometries, PrimitiveBreakdown { triangles: 2, spheres: 1, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 2, spheres: 1, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +geom 0: material #0 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:894b34b3fec45c98 camera=2:894b34b3fec45c98 shadow=2:894b34b3fec45c98 indirect=2:894b34b3fec45c98 +geom 1: material #1 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:d23ac7aa026facc8 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=1:d23ac7aa026facc8 +provenance light /World/Bulb: LightOrigin { index: 1, geoms: 1..2 } +provenance light /World/Panel: LightOrigin { index: 0, geoms: 0..1 } +provenance geometry 0..1: /World/Panel +provenance geometry 1..2: /World/Bulb +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: None, cameras: [], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: None, offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/area_lights_usda-9a0b2d022c966581-1.image b/crates/crust-core/tests/data/import_baselines/area_lights_usda-9a0b2d022c966581-1.image new file mode 100644 index 000000000..8aad9360c --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/area_lights_usda-9a0b2d022c966581-1.image @@ -0,0 +1 @@ +8x8 16spp clamp-off 9fa9e040e0eedf25 diff --git a/crates/crust-core/tests/data/import_baselines/area_nothing_usda-bf90dbc7327fa98c-1.digest b/crates/crust-core/tests/data/import_baselines/area_nothing_usda-bf90dbc7327fa98c-1.digest new file mode 100644 index 000000000..1bf70920a --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/area_nothing_usda-bf90dbc7327fa98c-1.digest @@ -0,0 +1,19 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: None +camera: Camera { origin: Vec3A(15.0, 3.0, 3.0), lower_left_corner: Vec3A(4.8863316, -0.044797063, 4.174048), horizontal: Vec3A(1.2295314, 0.0, -6.147657), vertical: Vec3A(-0.44830504, 3.4967792, -0.08966101), u: Vec3A(0.19611613, 0.0, -0.9805807), v: Vec3A(-0.1271232, 0.991561, -0.02542464), lens_radius: 0.05, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: None +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 640, height: 360, region: PixelRect { x0: 0, y0: 0, x1: 640, y1: 360 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: None, depth_of_field: true, motion_blur: false, layer_stack: ["$DIR/area_nothing.usda"], invisible_overrides: Some(0) } +layer: $DIR/area_nothing.usda +warning: Warning { code: CameraMissing, kind: Skipped, count: 1, prims: [], message: "USD stage has no UsdGeomCamera — falling back to world::get_settings camera" } +lights: 0 +volumes: 0 +world: 1 geometries, PrimitiveBreakdown { triangles: 0, spheres: 1, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 0, spheres: 1, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +geom 0: material #0 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=0:cbf29ce484222325 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=0:cbf29ce484222325 +provenance geometry 0..1: /World/L +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: None, cameras: [], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: None, offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/area_nothing_usda-bf90dbc7327fa98c-1.image b/crates/crust-core/tests/data/import_baselines/area_nothing_usda-bf90dbc7327fa98c-1.image new file mode 100644 index 000000000..c734c5b1d --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/area_nothing_usda-bf90dbc7327fa98c-1.image @@ -0,0 +1 @@ +640x360 16spp clamp-off a04a09c0d4b5e325 diff --git a/crates/crust-core/tests/data/import_baselines/area_nothing_visible_usda-2f4e016170ad5820-1.digest b/crates/crust-core/tests/data/import_baselines/area_nothing_visible_usda-2f4e016170ad5820-1.digest new file mode 100644 index 000000000..705c451f0 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/area_nothing_visible_usda-2f4e016170ad5820-1.digest @@ -0,0 +1,19 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: None +camera: Camera { origin: Vec3A(15.0, 3.0, 3.0), lower_left_corner: Vec3A(4.8863316, -0.044797063, 4.174048), horizontal: Vec3A(1.2295314, 0.0, -6.147657), vertical: Vec3A(-0.44830504, 3.4967792, -0.08966101), u: Vec3A(0.19611613, 0.0, -0.9805807), v: Vec3A(-0.1271232, 0.991561, -0.02542464), lens_radius: 0.05, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: None +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 640, height: 360, region: PixelRect { x0: 0, y0: 0, x1: 640, y1: 360 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: None, depth_of_field: true, motion_blur: false, layer_stack: ["$DIR/area_nothing_visible.usda"], invisible_overrides: Some(0) } +layer: $DIR/area_nothing_visible.usda +warning: Warning { code: CameraMissing, kind: Skipped, count: 1, prims: [], message: "USD stage has no UsdGeomCamera — falling back to world::get_settings camera" } +lights: 0 +volumes: 0 +world: 1 geometries, PrimitiveBreakdown { triangles: 0, spheres: 1, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 0, spheres: 1, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +geom 0: material #0 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:984632b55acb5495 camera=1:984632b55acb5495 shadow=0:cbf29ce484222325 indirect=0:cbf29ce484222325 +provenance geometry 0..1: /World/L +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: None, cameras: [], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: None, offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/area_nothing_visible_usda-2f4e016170ad5820-1.image b/crates/crust-core/tests/data/import_baselines/area_nothing_visible_usda-2f4e016170ad5820-1.image new file mode 100644 index 000000000..0d5371bdf --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/area_nothing_visible_usda-2f4e016170ad5820-1.image @@ -0,0 +1 @@ +640x360 16spp clamp-off 7262827b81999b78 diff --git a/crates/crust-core/tests/data/import_baselines/asset_lookdev_usda-3b3a8108b3e9fae9-1.digest b/crates/crust-core/tests/data/import_baselines/asset_lookdev_usda-3b3a8108b3e9fae9-1.digest new file mode 100644 index 000000000..a5693df91 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/asset_lookdev_usda-3b3a8108b3e9fae9-1.digest @@ -0,0 +1,23 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/World/cam") +camera: Camera { origin: Vec3A(0.0, 0.0, 10.0), lower_left_corner: Vec3A(-2.7183647, -1.5290802, 0.0), horizontal: Vec3A(5.4367294, 0.0, 0.0), vertical: Vec3A(0.0, 3.0581603, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: None +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 640, height: 360, region: PixelRect { x0: 0, y0: 0, x1: 640, y1: 360 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 50.0, aperture: [20.955, 15.2908], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 10.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/asset_lookdev.usda", "$DIR/asset.usda"], invisible_overrides: Some(0) } +layer: $DIR/asset.usda +layer: $DIR/asset_lookdev.usda +lights: 1 +light 0: area name Some("/World/key") lpe None pmf 1.0 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 2 geometries, PrimitiveBreakdown { triangles: 0, spheres: 2, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 0, spheres: 2, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +geom 0: material #0 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:fec033f5f7a969c5 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=1:fec033f5f7a969c5 +geom 1: material #1 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:fb1e7d48790aec95 camera=1:fb1e7d48790aec95 shadow=1:fb1e7d48790aec95 indirect=1:fb1e7d48790aec95 +provenance light /World/key: LightOrigin { index: 0, geoms: 0..1 } +provenance geometry 0..1: /World/key +provenance geometry 1..2: /World/asset/ball +provenance spheres: [1] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: true }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/World/cam"), cameras: ["/World/cam"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/World/cam"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/asset_lookdev_usda-3b3a8108b3e9fae9-1.image b/crates/crust-core/tests/data/import_baselines/asset_lookdev_usda-3b3a8108b3e9fae9-1.image new file mode 100644 index 000000000..cf19bec4c --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/asset_lookdev_usda-3b3a8108b3e9fae9-1.image @@ -0,0 +1 @@ +640x360 16spp clamp-off 418fe906cf3335ef diff --git a/crates/crust-core/tests/data/import_baselines/asset_lookdev_usda-41ce6942a2d54582-1.digest b/crates/crust-core/tests/data/import_baselines/asset_lookdev_usda-41ce6942a2d54582-1.digest new file mode 100644 index 000000000..4222e7b03 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/asset_lookdev_usda-41ce6942a2d54582-1.digest @@ -0,0 +1,25 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/World/cam") +camera: Camera { origin: Vec3A(0.0, 0.0, 10.0), lower_left_corner: Vec3A(-2.7183647, -1.5290802, 0.0), horizontal: Vec3A(5.4367294, 0.0, 0.0), vertical: Vec3A(0.0, 3.0581603, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: None +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 640, height: 360, region: PixelRect { x0: 0, y0: 0, x1: 640, y1: 360 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 50.0, aperture: [20.955, 15.2908], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 10.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/asset_lookdev.usda", "$DIR/asset.usda"], invisible_overrides: Some(0) } +layer: $DIR/asset.usda +layer: $DIR/asset_lookdev.usda +warning: Warning { code: MaterialFallbackDefault, kind: Skipped, count: 1, prims: ["/World/Looks/red"], message: "Material /World/Looks/red has no surface shader — using default grey OpenPBR" } +lights: 1 +light 0: area name Some("/World/key") lpe None pmf 1.0 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 2 geometries, PrimitiveBreakdown { triangles: 0, spheres: 2, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 0, spheres: 2, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +geom 0: material #0 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:fec033f5f7a969c5 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=1:fec033f5f7a969c5 +geom 1: material #1 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:fb1e7d48790aec95 camera=1:fb1e7d48790aec95 shadow=1:fb1e7d48790aec95 indirect=1:fb1e7d48790aec95 +provenance material /World/Looks/red: MaterialOrigin { slots: [1], displaced: false } +provenance light /World/key: LightOrigin { index: 0, geoms: 0..1 } +provenance geometry 0..1: /World/key +provenance geometry 1..2: /World/asset/ball +provenance spheres: [1] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: true }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/World/cam"), cameras: ["/World/cam"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/World/cam"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/asset_lookdev_usda-41ce6942a2d54582-1.image b/crates/crust-core/tests/data/import_baselines/asset_lookdev_usda-41ce6942a2d54582-1.image new file mode 100644 index 000000000..cf19bec4c --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/asset_lookdev_usda-41ce6942a2d54582-1.image @@ -0,0 +1 @@ +640x360 16spp clamp-off 418fe906cf3335ef diff --git a/crates/crust-core/tests/data/import_baselines/asset_lookdev_usda-6567e83e5076f9db-1.digest b/crates/crust-core/tests/data/import_baselines/asset_lookdev_usda-6567e83e5076f9db-1.digest new file mode 100644 index 000000000..fdf0c5ee6 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/asset_lookdev_usda-6567e83e5076f9db-1.digest @@ -0,0 +1,25 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/World/cam") +camera: Camera { origin: Vec3A(0.0, 0.0, 10.0), lower_left_corner: Vec3A(-2.7183647, -1.5290802, 0.0), horizontal: Vec3A(5.4367294, 0.0, 0.0), vertical: Vec3A(0.0, 3.0581603, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: None +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 640, height: 360, region: PixelRect { x0: 0, y0: 0, x1: 640, y1: 360 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 50.0, aperture: [20.955, 15.2908], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 10.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/asset_lookdev.usda", "$DIR/asset.usda"], invisible_overrides: Some(0) } +layer: $DIR/asset.usda +layer: $DIR/asset_lookdev.usda +warning: Warning { code: MaterialFallbackDefault, kind: Skipped, count: 1, prims: ["/World/Looks/red"], message: "Material /World/Looks/red has no surface shader — using default grey OpenPBR" } +lights: 1 +light 0: area name Some("/World/key") lpe None pmf 1.0 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 2 geometries, PrimitiveBreakdown { triangles: 0, spheres: 2, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 0, spheres: 2, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +geom 0: material #0 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:fec033f5f7a969c5 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=1:fec033f5f7a969c5 +geom 1: material #1 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:d5fa2ac5108a1585 camera=1:d5fa2ac5108a1585 shadow=1:d5fa2ac5108a1585 indirect=1:d5fa2ac5108a1585 +provenance material /World/Looks/red: MaterialOrigin { slots: [1], displaced: false } +provenance light /World/key: LightOrigin { index: 0, geoms: 0..1 } +provenance geometry 0..1: /World/key +provenance geometry 1..2: /World/asset/ball +provenance spheres: [1] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: true }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/World/cam"), cameras: ["/World/cam"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/World/cam"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/asset_lookdev_usda-6567e83e5076f9db-1.image b/crates/crust-core/tests/data/import_baselines/asset_lookdev_usda-6567e83e5076f9db-1.image new file mode 100644 index 000000000..d4bb49c0d --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/asset_lookdev_usda-6567e83e5076f9db-1.image @@ -0,0 +1 @@ +640x360 16spp clamp-off c3b1ce8ce277cdfe diff --git a/crates/crust-core/tests/data/import_baselines/asset_lookdev_usda-9934bec515530278-1.digest b/crates/crust-core/tests/data/import_baselines/asset_lookdev_usda-9934bec515530278-1.digest new file mode 100644 index 000000000..a5693df91 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/asset_lookdev_usda-9934bec515530278-1.digest @@ -0,0 +1,23 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/World/cam") +camera: Camera { origin: Vec3A(0.0, 0.0, 10.0), lower_left_corner: Vec3A(-2.7183647, -1.5290802, 0.0), horizontal: Vec3A(5.4367294, 0.0, 0.0), vertical: Vec3A(0.0, 3.0581603, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: None +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 640, height: 360, region: PixelRect { x0: 0, y0: 0, x1: 640, y1: 360 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 50.0, aperture: [20.955, 15.2908], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 10.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/asset_lookdev.usda", "$DIR/asset.usda"], invisible_overrides: Some(0) } +layer: $DIR/asset.usda +layer: $DIR/asset_lookdev.usda +lights: 1 +light 0: area name Some("/World/key") lpe None pmf 1.0 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 2 geometries, PrimitiveBreakdown { triangles: 0, spheres: 2, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 0, spheres: 2, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +geom 0: material #0 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:fec033f5f7a969c5 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=1:fec033f5f7a969c5 +geom 1: material #1 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:fb1e7d48790aec95 camera=1:fb1e7d48790aec95 shadow=1:fb1e7d48790aec95 indirect=1:fb1e7d48790aec95 +provenance light /World/key: LightOrigin { index: 0, geoms: 0..1 } +provenance geometry 0..1: /World/key +provenance geometry 1..2: /World/asset/ball +provenance spheres: [1] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: true }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/World/cam"), cameras: ["/World/cam"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/World/cam"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/asset_lookdev_usda-9934bec515530278-1.image b/crates/crust-core/tests/data/import_baselines/asset_lookdev_usda-9934bec515530278-1.image new file mode 100644 index 000000000..cf19bec4c --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/asset_lookdev_usda-9934bec515530278-1.image @@ -0,0 +1 @@ +640x360 16spp clamp-off 418fe906cf3335ef diff --git a/crates/crust-core/tests/data/import_baselines/asset_lookdev_usda-e4930eb0174b9dd7-1.digest b/crates/crust-core/tests/data/import_baselines/asset_lookdev_usda-e4930eb0174b9dd7-1.digest new file mode 100644 index 000000000..e13862933 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/asset_lookdev_usda-e4930eb0174b9dd7-1.digest @@ -0,0 +1,21 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/World/cam") +camera: Camera { origin: Vec3A(0.0, 0.0, 10.0), lower_left_corner: Vec3A(-2.7183647, -1.5290802, 0.0), horizontal: Vec3A(5.4367294, 0.0, 0.0), vertical: Vec3A(0.0, 3.0581603, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: None +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 640, height: 360, region: PixelRect { x0: 0, y0: 0, x1: 640, y1: 360 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 50.0, aperture: [20.955, 15.2908], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 10.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/asset_lookdev.usda", "$DIR/asset.usda"], invisible_overrides: Some(0) } +layer: $DIR/asset.usda +layer: $DIR/asset_lookdev.usda +warning: Warning { code: MaterialFallbackDefault, kind: Skipped, count: 1, prims: ["/World/Looks/red"], message: "Material /World/Looks/red has no surface shader — using default grey OpenPBR" } +lights: 0 +volumes: 0 +world: 1 geometries, PrimitiveBreakdown { triangles: 0, spheres: 1, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 0, spheres: 1, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:d5fa2ac5108a1585 camera=1:d5fa2ac5108a1585 shadow=1:d5fa2ac5108a1585 indirect=1:d5fa2ac5108a1585 +provenance material /World/Looks/red: MaterialOrigin { slots: [0], displaced: false } +provenance geometry 0..1: /World/asset/ball +provenance spheres: [0] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: true }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/World/cam"), cameras: ["/World/cam"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/World/cam"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/asset_lookdev_usda-e4930eb0174b9dd7-1.image b/crates/crust-core/tests/data/import_baselines/asset_lookdev_usda-e4930eb0174b9dd7-1.image new file mode 100644 index 000000000..c734c5b1d --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/asset_lookdev_usda-e4930eb0174b9dd7-1.image @@ -0,0 +1 @@ +640x360 16spp clamp-off a04a09c0d4b5e325 diff --git a/crates/crust-core/tests/data/import_baselines/asset_lookdev_usda-e7566c662eda92b2-1.digest b/crates/crust-core/tests/data/import_baselines/asset_lookdev_usda-e7566c662eda92b2-1.digest new file mode 100644 index 000000000..a5693df91 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/asset_lookdev_usda-e7566c662eda92b2-1.digest @@ -0,0 +1,23 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/World/cam") +camera: Camera { origin: Vec3A(0.0, 0.0, 10.0), lower_left_corner: Vec3A(-2.7183647, -1.5290802, 0.0), horizontal: Vec3A(5.4367294, 0.0, 0.0), vertical: Vec3A(0.0, 3.0581603, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: None +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 640, height: 360, region: PixelRect { x0: 0, y0: 0, x1: 640, y1: 360 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 50.0, aperture: [20.955, 15.2908], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 10.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/asset_lookdev.usda", "$DIR/asset.usda"], invisible_overrides: Some(0) } +layer: $DIR/asset.usda +layer: $DIR/asset_lookdev.usda +lights: 1 +light 0: area name Some("/World/key") lpe None pmf 1.0 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 2 geometries, PrimitiveBreakdown { triangles: 0, spheres: 2, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 0, spheres: 2, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +geom 0: material #0 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:fec033f5f7a969c5 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=1:fec033f5f7a969c5 +geom 1: material #1 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:fb1e7d48790aec95 camera=1:fb1e7d48790aec95 shadow=1:fb1e7d48790aec95 indirect=1:fb1e7d48790aec95 +provenance light /World/key: LightOrigin { index: 0, geoms: 0..1 } +provenance geometry 0..1: /World/key +provenance geometry 1..2: /World/asset/ball +provenance spheres: [1] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: true }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/World/cam"), cameras: ["/World/cam"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/World/cam"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/asset_lookdev_usda-e7566c662eda92b2-1.image b/crates/crust-core/tests/data/import_baselines/asset_lookdev_usda-e7566c662eda92b2-1.image new file mode 100644 index 000000000..cf19bec4c --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/asset_lookdev_usda-e7566c662eda92b2-1.image @@ -0,0 +1 @@ +640x360 16spp clamp-off 418fe906cf3335ef diff --git a/crates/crust-core/tests/data/import_baselines/asset_lookdev_usda-ec05a5f1f38841c6-1.digest b/crates/crust-core/tests/data/import_baselines/asset_lookdev_usda-ec05a5f1f38841c6-1.digest new file mode 100644 index 000000000..d8230e235 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/asset_lookdev_usda-ec05a5f1f38841c6-1.digest @@ -0,0 +1,23 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/World/cam") +camera: Camera { origin: Vec3A(0.0, 0.0, 10.0), lower_left_corner: Vec3A(-2.7183647, -1.5290802, 0.0), horizontal: Vec3A(5.4367294, 0.0, 0.0), vertical: Vec3A(0.0, 3.0581603, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: None +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 640, height: 360, region: PixelRect { x0: 0, y0: 0, x1: 640, y1: 360 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 50.0, aperture: [20.955, 15.2908], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 10.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/asset_lookdev.usda", "$DIR/asset.usda"], invisible_overrides: Some(0) } +layer: $DIR/asset.usda +layer: $DIR/asset_lookdev.usda +lights: 1 +light 0: area name Some("/World/key") lpe None pmf 1.0 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 2 geometries, PrimitiveBreakdown { triangles: 0, spheres: 2, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 0, spheres: 2, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +geom 0: material #0 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:fec033f5f7a969c5 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=1:fec033f5f7a969c5 +geom 1: material #1 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:d5fa2ac5108a1585 camera=1:d5fa2ac5108a1585 shadow=1:d5fa2ac5108a1585 indirect=1:d5fa2ac5108a1585 +provenance light /World/key: LightOrigin { index: 0, geoms: 0..1 } +provenance geometry 0..1: /World/key +provenance geometry 1..2: /World/asset/ball +provenance spheres: [1] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: true }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/World/cam"), cameras: ["/World/cam"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/World/cam"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/asset_lookdev_usda-ec05a5f1f38841c6-1.image b/crates/crust-core/tests/data/import_baselines/asset_lookdev_usda-ec05a5f1f38841c6-1.image new file mode 100644 index 000000000..d4bb49c0d --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/asset_lookdev_usda-ec05a5f1f38841c6-1.image @@ -0,0 +1 @@ +640x360 16spp clamp-off c3b1ce8ce277cdfe diff --git a/crates/crust-core/tests/data/import_baselines/asset_lookdev_usda-f9c370778b865b50-1.digest b/crates/crust-core/tests/data/import_baselines/asset_lookdev_usda-f9c370778b865b50-1.digest new file mode 100644 index 000000000..a5693df91 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/asset_lookdev_usda-f9c370778b865b50-1.digest @@ -0,0 +1,23 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/World/cam") +camera: Camera { origin: Vec3A(0.0, 0.0, 10.0), lower_left_corner: Vec3A(-2.7183647, -1.5290802, 0.0), horizontal: Vec3A(5.4367294, 0.0, 0.0), vertical: Vec3A(0.0, 3.0581603, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: None +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 640, height: 360, region: PixelRect { x0: 0, y0: 0, x1: 640, y1: 360 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 50.0, aperture: [20.955, 15.2908], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 10.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/asset_lookdev.usda", "$DIR/asset.usda"], invisible_overrides: Some(0) } +layer: $DIR/asset.usda +layer: $DIR/asset_lookdev.usda +lights: 1 +light 0: area name Some("/World/key") lpe None pmf 1.0 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 2 geometries, PrimitiveBreakdown { triangles: 0, spheres: 2, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 0, spheres: 2, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +geom 0: material #0 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:fec033f5f7a969c5 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=1:fec033f5f7a969c5 +geom 1: material #1 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:fb1e7d48790aec95 camera=1:fb1e7d48790aec95 shadow=1:fb1e7d48790aec95 indirect=1:fb1e7d48790aec95 +provenance light /World/key: LightOrigin { index: 0, geoms: 0..1 } +provenance geometry 0..1: /World/key +provenance geometry 1..2: /World/asset/ball +provenance spheres: [1] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: true }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/World/cam"), cameras: ["/World/cam"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/World/cam"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/asset_lookdev_usda-f9c370778b865b50-1.image b/crates/crust-core/tests/data/import_baselines/asset_lookdev_usda-f9c370778b865b50-1.image new file mode 100644 index 000000000..cf19bec4c --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/asset_lookdev_usda-f9c370778b865b50-1.image @@ -0,0 +1 @@ +640x360 16spp clamp-off 418fe906cf3335ef diff --git a/crates/crust-core/tests/data/import_baselines/authored_only_usda-e3c97926a3d11ac4-1.digest b/crates/crust-core/tests/data/import_baselines/authored_only_usda-e3c97926a3d11ac4-1.digest new file mode 100644 index 000000000..87dae797f --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/authored_only_usda-e3c97926a3d11ac4-1.digest @@ -0,0 +1,21 @@ +time: Some(5.0) +working space: Linear Rec.709 (sRGB) +camera path: Some("/World/cam") +camera: Camera { origin: Vec3A(0.0, 0.0, 8.0), lower_left_corner: Vec3A(-2.7183647, -1.5290802, -2.0), horizontal: Vec3A(5.4367294, 0.0, 0.0), vertical: Vec3A(0.0, 3.0581603, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: Some("/Render/settings") +settings: RenderSettings { samples_per_pixel: 16, max_depth: 2, width: 64, height: 36, region: PixelRect { x0: 0, y0: 0, x1: 64, y1: 36 }, min_samples_per_pixel: 16, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 5, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 50.0, aperture: [20.955, 15.2908], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 10.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/authored_only.usda"], invisible_overrides: Some(0) } +layer: $DIR/authored_only.usda +lights: 0 +volumes: 0 +world: 1 geometries, PrimitiveBreakdown { triangles: 0, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 1 } top level, PrimitiveBreakdown { triangles: 2, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 1 } unique, motion true +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [Translation(Vec3A(1.0, 0.0, 0.0))] pieces all=2:8f5d9187c4202473 camera=2:8f5d9187c4202473 shadow=2:8f5d9187c4202473 indirect=2:8f5d9187c4202473 +provenance material /World/Glow: MaterialOrigin { slots: [0], displaced: false } +provenance geometry 0..1: /World/Card +provenance mesh: MeshOrigin { geom_id: 0, slot: 0, baked: false, moving: true } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 18250419415378433236, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: Some(5.0), camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/World/cam"), cameras: ["/World/cam"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/World/cam"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/authored_only_usda-e3c97926a3d11ac4-1.image b/crates/crust-core/tests/data/import_baselines/authored_only_usda-e3c97926a3d11ac4-1.image new file mode 100644 index 000000000..41d6a31ea --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/authored_only_usda-e3c97926a3d11ac4-1.image @@ -0,0 +1 @@ +64x36 16spp clamp-off 3c406206c0d3b4b6 diff --git a/crates/crust-core/tests/data/import_baselines/backdrop_dome_light_1_usda-bda39b6574f6f444-1.digest b/crates/crust-core/tests/data/import_baselines/backdrop_dome_light_1_usda-bda39b6574f6f444-1.digest new file mode 100644 index 000000000..3775c660c --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/backdrop_dome_light_1_usda-bda39b6574f6f444-1.digest @@ -0,0 +1,21 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: None +camera: Camera { origin: Vec3A(15.0, 3.0, 3.0), lower_left_corner: Vec3A(4.8863316, -0.044797063, 4.174048), horizontal: Vec3A(1.2295314, 0.0, -6.147657), vertical: Vec3A(-0.44830504, 3.4967792, -0.08966101), u: Vec3A(0.19611613, 0.0, -0.9805807), v: Vec3A(-0.1271232, 0.991561, -0.02542464), lens_radius: 0.05, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: None +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 640, height: 360, region: PixelRect { x0: 0, y0: 0, x1: 640, y1: 360 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: None, depth_of_field: true, motion_blur: false, layer_stack: ["$DIR/backdrop_dome_light_1.usda"], invisible_overrides: Some(0) } +layer: $DIR/backdrop_dome_light_1.usda +warning: Warning { code: CameraMissing, kind: Skipped, count: 1, prims: [], message: "USD stage has no UsdGeomCamera — falling back to world::get_settings camera" } +lights: 1 +light 0: dome name Some("/World/Hdri") lpe None pmf 1.0 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 1 geometries, PrimitiveBreakdown { triangles: 0, spheres: 1, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 0, spheres: 1, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 0 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:fb1e7d48790aec95 camera=1:fb1e7d48790aec95 shadow=1:fb1e7d48790aec95 indirect=1:fb1e7d48790aec95 +provenance light /World/Hdri: LightOrigin { index: 0, geoms: 1..1 } +provenance geometry 0..1: /World/Ball +provenance spheres: [0] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: None, cameras: [], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: None, offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/backdrop_dome_light_1_usda-bda39b6574f6f444-1.image b/crates/crust-core/tests/data/import_baselines/backdrop_dome_light_1_usda-bda39b6574f6f444-1.image new file mode 100644 index 000000000..ef6a3bc1a --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/backdrop_dome_light_1_usda-bda39b6574f6f444-1.image @@ -0,0 +1 @@ +640x360 16spp clamp-off 82fd92b977974e05 diff --git a/crates/crust-core/tests/data/import_baselines/backdrop_streamed_usda-5c630271a8fcfd44-1.digest b/crates/crust-core/tests/data/import_baselines/backdrop_streamed_usda-5c630271a8fcfd44-1.digest new file mode 100644 index 000000000..b6765cca6 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/backdrop_streamed_usda-5c630271a8fcfd44-1.digest @@ -0,0 +1,23 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: None +camera: Camera { origin: Vec3A(15.0, 3.0, 3.0), lower_left_corner: Vec3A(4.8863316, -0.044797063, 4.174048), horizontal: Vec3A(1.2295314, 0.0, -6.147657), vertical: Vec3A(-0.44830504, 3.4967792, -0.08966101), u: Vec3A(0.19611613, 0.0, -0.9805807), v: Vec3A(-0.1271232, 0.991561, -0.02542464), lens_radius: 0.05, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: None +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 640, height: 360, region: PixelRect { x0: 0, y0: 0, x1: 640, y1: 360 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: None, depth_of_field: true, motion_blur: false, layer_stack: ["$DIR/backdrop_streamed.usda"], invisible_overrides: Some(0) } +layer: $DIR/backdrop_streamed.usda +warning: Warning { code: CameraMissing, kind: Skipped, count: 1, prims: [], message: "USD stage has no UsdGeomCamera — falling back to world::get_settings camera" } +lights: 0 +volumes: 0 +world: 3 geometries, PrimitiveBreakdown { triangles: 0, spheres: 3, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 0, spheres: 3, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:fb1e7d48790aec95 camera=1:fb1e7d48790aec95 shadow=1:fb1e7d48790aec95 indirect=1:fb1e7d48790aec95 +geom 1: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:fb1e7d48790aec95 camera=1:fb1e7d48790aec95 shadow=1:fb1e7d48790aec95 indirect=1:fb1e7d48790aec95 +geom 2: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:fb1e7d48790aec95 camera=1:fb1e7d48790aec95 shadow=1:fb1e7d48790aec95 indirect=1:fb1e7d48790aec95 +provenance geometry 0..1: /World/A +provenance geometry 1..2: /World/B +provenance geometry 2..3: /World/C/Deep +provenance spheres: [0, 1, 2] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: None, cameras: [], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: None, offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/backdrop_streamed_usda-5c630271a8fcfd44-1.image b/crates/crust-core/tests/data/import_baselines/backdrop_streamed_usda-5c630271a8fcfd44-1.image new file mode 100644 index 000000000..bb25fb6ec --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/backdrop_streamed_usda-5c630271a8fcfd44-1.image @@ -0,0 +1 @@ +640x360 16spp clamp-off 0d595f538d4d7bb5 diff --git a/crates/crust-core/tests/data/import_baselines/backdrop_usda-028712069f092956-1.digest b/crates/crust-core/tests/data/import_baselines/backdrop_usda-028712069f092956-1.digest new file mode 100644 index 000000000..036db1a5d --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/backdrop_usda-028712069f092956-1.digest @@ -0,0 +1,21 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: None +camera: Camera { origin: Vec3A(15.0, 3.0, 3.0), lower_left_corner: Vec3A(4.8863316, -0.044797063, 4.174048), horizontal: Vec3A(1.2295314, 0.0, -6.147657), vertical: Vec3A(-0.44830504, 3.4967792, -0.08966101), u: Vec3A(0.19611613, 0.0, -0.9805807), v: Vec3A(-0.1271232, 0.991561, -0.02542464), lens_radius: 0.05, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: Some("/Render/settings") +settings: RenderSettings { samples_per_pixel: 3, max_depth: 32, width: 8, height: 8, region: PixelRect { x0: 0, y0: 0, x1: 8, y1: 8 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: None, depth_of_field: true, motion_blur: false, layer_stack: ["$DIR/backdrop.usda"], invisible_overrides: Some(0) } +layer: $DIR/backdrop.usda +warning: Warning { code: CameraMissing, kind: Skipped, count: 1, prims: [], message: "USD stage has no UsdGeomCamera — falling back to world::get_settings camera" } +lights: 0 +volumes: 0 +world: 1 geometries, PrimitiveBreakdown { triangles: 2, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 2, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:2f65027762d8ffb5 camera=2:2f65027762d8ffb5 shadow=2:2f65027762d8ffb5 indirect=2:2f65027762d8ffb5 +provenance geometry 0..1: /World/Floor +provenance mesh: MeshOrigin { geom_id: 0, slot: 0, baked: true, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 11147341635340358220, n_points: 4, n_indices: 4, n_uvs: None, smooth: true, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: None, cameras: [], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: None, offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/backdrop_usda-028712069f092956-1.image b/crates/crust-core/tests/data/import_baselines/backdrop_usda-028712069f092956-1.image new file mode 100644 index 000000000..ad6d19c3c --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/backdrop_usda-028712069f092956-1.image @@ -0,0 +1 @@ +8x8 16spp clamp-off 57c3651777bb1388 diff --git a/crates/crust-core/tests/data/import_baselines/backdrop_usda-2757fcfd84c07e64-1.digest b/crates/crust-core/tests/data/import_baselines/backdrop_usda-2757fcfd84c07e64-1.digest new file mode 100644 index 000000000..5ba599c70 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/backdrop_usda-2757fcfd84c07e64-1.digest @@ -0,0 +1,21 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: None +camera: Camera { origin: Vec3A(15.0, 3.0, 3.0), lower_left_corner: Vec3A(4.8863316, -0.044797063, 4.174048), horizontal: Vec3A(1.2295314, 0.0, -6.147657), vertical: Vec3A(-0.44830504, 3.4967792, -0.08966101), u: Vec3A(0.19611613, 0.0, -0.9805807), v: Vec3A(-0.1271232, 0.991561, -0.02542464), lens_radius: 0.05, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: None +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 640, height: 360, region: PixelRect { x0: 0, y0: 0, x1: 640, y1: 360 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: None, depth_of_field: true, motion_blur: false, layer_stack: ["$DIR/backdrop.usda"], invisible_overrides: Some(0) } +layer: $DIR/backdrop.usda +warning: Warning { code: CameraMissing, kind: Skipped, count: 1, prims: [], message: "USD stage has no UsdGeomCamera — falling back to world::get_settings camera" } +lights: 1 +light 0: dome name Some("/World/Hdri") lpe None pmf 1.0 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 1 geometries, PrimitiveBreakdown { triangles: 0, spheres: 1, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 0, spheres: 1, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 0 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:fb1e7d48790aec95 camera=1:fb1e7d48790aec95 shadow=1:fb1e7d48790aec95 indirect=1:fb1e7d48790aec95 +provenance light /World/Hdri: LightOrigin { index: 0, geoms: 1..1 } +provenance geometry 0..1: /World/Ball +provenance spheres: [0] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: None, cameras: [], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: None, offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/backdrop_usda-2757fcfd84c07e64-1.image b/crates/crust-core/tests/data/import_baselines/backdrop_usda-2757fcfd84c07e64-1.image new file mode 100644 index 000000000..ef6a3bc1a --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/backdrop_usda-2757fcfd84c07e64-1.image @@ -0,0 +1 @@ +640x360 16spp clamp-off 82fd92b977974e05 diff --git a/crates/crust-core/tests/data/import_baselines/backdrop_usda-3818c88f3ea1e994-1.digest b/crates/crust-core/tests/data/import_baselines/backdrop_usda-3818c88f3ea1e994-1.digest new file mode 100644 index 000000000..0f2c330a2 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/backdrop_usda-3818c88f3ea1e994-1.digest @@ -0,0 +1,21 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: None +camera: Camera { origin: Vec3A(15.0, 3.0, 3.0), lower_left_corner: Vec3A(4.8863316, -0.044797063, 4.174048), horizontal: Vec3A(1.2295314, 0.0, -6.147657), vertical: Vec3A(-0.44830504, 3.4967792, -0.08966101), u: Vec3A(0.19611613, 0.0, -0.9805807), v: Vec3A(-0.1271232, 0.991561, -0.02542464), lens_radius: 0.05, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: Some("/Render/settings") +settings: RenderSettings { samples_per_pixel: 3, max_depth: 32, width: 8, height: 8, region: PixelRect { x0: 0, y0: 0, x1: 8, y1: 8 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: Some(PassSummary { path: "/Render/Passes/pass", holdouts: 0, camera_hidden: 0 }) +source: Source { lens: None, depth_of_field: true, motion_blur: false, layer_stack: ["$DIR/backdrop.usda"], invisible_overrides: Some(0) } +layer: $DIR/backdrop.usda +warning: Warning { code: CameraMissing, kind: Skipped, count: 1, prims: [], message: "USD stage has no UsdGeomCamera — falling back to world::get_settings camera" } +lights: 0 +volumes: 0 +world: 1 geometries, PrimitiveBreakdown { triangles: 2, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 2, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:2f65027762d8ffb5 camera=2:2f65027762d8ffb5 shadow=2:2f65027762d8ffb5 indirect=2:2f65027762d8ffb5 +provenance geometry 0..1: /World/Floor +provenance mesh: MeshOrigin { geom_id: 0, slot: 0, baked: true, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 11147341635340358220, n_points: 4, n_indices: 4, n_uvs: None, smooth: true, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: Some("/Render/Passes/pass"), keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: None, cameras: [], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: None, offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/backdrop_usda-3818c88f3ea1e994-1.image b/crates/crust-core/tests/data/import_baselines/backdrop_usda-3818c88f3ea1e994-1.image new file mode 100644 index 000000000..8aad9360c --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/backdrop_usda-3818c88f3ea1e994-1.image @@ -0,0 +1 @@ +8x8 16spp clamp-off 9fa9e040e0eedf25 diff --git a/crates/crust-core/tests/data/import_baselines/backdrop_usda-3bd2b9c36e3253d2-1.digest b/crates/crust-core/tests/data/import_baselines/backdrop_usda-3bd2b9c36e3253d2-1.digest new file mode 100644 index 000000000..0f2c330a2 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/backdrop_usda-3bd2b9c36e3253d2-1.digest @@ -0,0 +1,21 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: None +camera: Camera { origin: Vec3A(15.0, 3.0, 3.0), lower_left_corner: Vec3A(4.8863316, -0.044797063, 4.174048), horizontal: Vec3A(1.2295314, 0.0, -6.147657), vertical: Vec3A(-0.44830504, 3.4967792, -0.08966101), u: Vec3A(0.19611613, 0.0, -0.9805807), v: Vec3A(-0.1271232, 0.991561, -0.02542464), lens_radius: 0.05, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: Some("/Render/settings") +settings: RenderSettings { samples_per_pixel: 3, max_depth: 32, width: 8, height: 8, region: PixelRect { x0: 0, y0: 0, x1: 8, y1: 8 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: Some(PassSummary { path: "/Render/Passes/pass", holdouts: 0, camera_hidden: 0 }) +source: Source { lens: None, depth_of_field: true, motion_blur: false, layer_stack: ["$DIR/backdrop.usda"], invisible_overrides: Some(0) } +layer: $DIR/backdrop.usda +warning: Warning { code: CameraMissing, kind: Skipped, count: 1, prims: [], message: "USD stage has no UsdGeomCamera — falling back to world::get_settings camera" } +lights: 0 +volumes: 0 +world: 1 geometries, PrimitiveBreakdown { triangles: 2, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 2, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:2f65027762d8ffb5 camera=2:2f65027762d8ffb5 shadow=2:2f65027762d8ffb5 indirect=2:2f65027762d8ffb5 +provenance geometry 0..1: /World/Floor +provenance mesh: MeshOrigin { geom_id: 0, slot: 0, baked: true, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 11147341635340358220, n_points: 4, n_indices: 4, n_uvs: None, smooth: true, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: Some("/Render/Passes/pass"), keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: None, cameras: [], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: None, offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/backdrop_usda-3bd2b9c36e3253d2-1.image b/crates/crust-core/tests/data/import_baselines/backdrop_usda-3bd2b9c36e3253d2-1.image new file mode 100644 index 000000000..8aad9360c --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/backdrop_usda-3bd2b9c36e3253d2-1.image @@ -0,0 +1 @@ +8x8 16spp clamp-off 9fa9e040e0eedf25 diff --git a/crates/crust-core/tests/data/import_baselines/backdrop_usda-e17ddb582cb97b8c-1.digest b/crates/crust-core/tests/data/import_baselines/backdrop_usda-e17ddb582cb97b8c-1.digest new file mode 100644 index 000000000..036db1a5d --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/backdrop_usda-e17ddb582cb97b8c-1.digest @@ -0,0 +1,21 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: None +camera: Camera { origin: Vec3A(15.0, 3.0, 3.0), lower_left_corner: Vec3A(4.8863316, -0.044797063, 4.174048), horizontal: Vec3A(1.2295314, 0.0, -6.147657), vertical: Vec3A(-0.44830504, 3.4967792, -0.08966101), u: Vec3A(0.19611613, 0.0, -0.9805807), v: Vec3A(-0.1271232, 0.991561, -0.02542464), lens_radius: 0.05, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: Some("/Render/settings") +settings: RenderSettings { samples_per_pixel: 3, max_depth: 32, width: 8, height: 8, region: PixelRect { x0: 0, y0: 0, x1: 8, y1: 8 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: None, depth_of_field: true, motion_blur: false, layer_stack: ["$DIR/backdrop.usda"], invisible_overrides: Some(0) } +layer: $DIR/backdrop.usda +warning: Warning { code: CameraMissing, kind: Skipped, count: 1, prims: [], message: "USD stage has no UsdGeomCamera — falling back to world::get_settings camera" } +lights: 0 +volumes: 0 +world: 1 geometries, PrimitiveBreakdown { triangles: 2, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 2, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:2f65027762d8ffb5 camera=2:2f65027762d8ffb5 shadow=2:2f65027762d8ffb5 indirect=2:2f65027762d8ffb5 +provenance geometry 0..1: /World/Floor +provenance mesh: MeshOrigin { geom_id: 0, slot: 0, baked: true, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 11147341635340358220, n_points: 4, n_indices: 4, n_uvs: None, smooth: true, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: None, cameras: [], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: None, offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/backdrop_usda-e17ddb582cb97b8c-1.image b/crates/crust-core/tests/data/import_baselines/backdrop_usda-e17ddb582cb97b8c-1.image new file mode 100644 index 000000000..ad6d19c3c --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/backdrop_usda-e17ddb582cb97b8c-1.image @@ -0,0 +1 @@ +8x8 16spp clamp-off 57c3651777bb1388 diff --git a/crates/crust-core/tests/data/import_baselines/backlit_diffuse_usda-3dfba11cda1cd7c6-1.digest b/crates/crust-core/tests/data/import_baselines/backlit_diffuse_usda-3dfba11cda1cd7c6-1.digest new file mode 100644 index 000000000..90b8dc415 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/backlit_diffuse_usda-3dfba11cda1cd7c6-1.digest @@ -0,0 +1,24 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: None +camera: Camera { origin: Vec3A(15.0, 3.0, 3.0), lower_left_corner: Vec3A(4.8863316, -0.044797063, 4.174048), horizontal: Vec3A(1.2295314, 0.0, -6.147657), vertical: Vec3A(-0.44830504, 3.4967792, -0.08966101), u: Vec3A(0.19611613, 0.0, -0.9805807), v: Vec3A(-0.1271232, 0.991561, -0.02542464), lens_radius: 0.05, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: None +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 640, height: 360, region: PixelRect { x0: 0, y0: 0, x1: 640, y1: 360 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: None, depth_of_field: true, motion_blur: false, layer_stack: ["$DIR/backlit_diffuse.usda"], invisible_overrides: Some(0) } +layer: $DIR/backlit_diffuse.usda +warning: Warning { code: CameraMissing, kind: Skipped, count: 1, prims: [], message: "USD stage has no UsdGeomCamera — falling back to world::get_settings camera" } +lights: 1 +light 0: area name Some("/World/Back") lpe None pmf 1.0 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 2 geometries, PrimitiveBreakdown { triangles: 0, spheres: 1, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 1 } top level, PrimitiveBreakdown { triangles: 0, spheres: 1, disks: 0, cylinders: 0, curve_segments: 1, cubic_curve_spans: 0, instances: 1 } unique, motion false +geom 0: material #0 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:5964020bd0c96e6d camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=1:5964020bd0c96e6d +geom 1: material #1 Signature { kind: "MaterialX", cutout: false, straight: false, boundary: false, emits: false, uv: true, uv_primvar: None, face_texture: None, curve: Some((false, false, [])), primvars: None } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves true scale 1.0 motion [] pieces all=1:f23ffa0170dacb65 camera=1:f23ffa0170dacb65 shadow=1:f23ffa0170dacb65 indirect=1:f23ffa0170dacb65 +provenance material /World/Looks/mtlx_diffuse_twin: MaterialOrigin { slots: [1], displaced: false } +provenance light /World/Back: LightOrigin { index: 0, geoms: 0..1 } +provenance geometry 0..1: /World/Back +provenance geometry 1..2: /World/Strand +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: None, cameras: [], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: None, offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/backlit_diffuse_usda-3dfba11cda1cd7c6-1.image b/crates/crust-core/tests/data/import_baselines/backlit_diffuse_usda-3dfba11cda1cd7c6-1.image new file mode 100644 index 000000000..ab456aa96 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/backlit_diffuse_usda-3dfba11cda1cd7c6-1.image @@ -0,0 +1 @@ +640x360 16spp clamp-off e5fbd87f2534b2bd diff --git a/crates/crust-core/tests/data/import_baselines/backlit_hair_usda-59f16e3a1a4f9b6d-1.digest b/crates/crust-core/tests/data/import_baselines/backlit_hair_usda-59f16e3a1a4f9b6d-1.digest new file mode 100644 index 000000000..7b6f24032 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/backlit_hair_usda-59f16e3a1a4f9b6d-1.digest @@ -0,0 +1,24 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: None +camera: Camera { origin: Vec3A(15.0, 3.0, 3.0), lower_left_corner: Vec3A(4.8863316, -0.044797063, 4.174048), horizontal: Vec3A(1.2295314, 0.0, -6.147657), vertical: Vec3A(-0.44830504, 3.4967792, -0.08966101), u: Vec3A(0.19611613, 0.0, -0.9805807), v: Vec3A(-0.1271232, 0.991561, -0.02542464), lens_radius: 0.05, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: None +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 640, height: 360, region: PixelRect { x0: 0, y0: 0, x1: 640, y1: 360 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: None, depth_of_field: true, motion_blur: false, layer_stack: ["$DIR/backlit_hair.usda"], invisible_overrides: Some(0) } +layer: $DIR/backlit_hair.usda +warning: Warning { code: CameraMissing, kind: Skipped, count: 1, prims: [], message: "USD stage has no UsdGeomCamera — falling back to world::get_settings camera" } +lights: 1 +light 0: area name Some("/World/Back") lpe None pmf 1.0 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 2 geometries, PrimitiveBreakdown { triangles: 0, spheres: 1, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 1 } top level, PrimitiveBreakdown { triangles: 0, spheres: 1, disks: 0, cylinders: 0, curve_segments: 1, cubic_curve_spans: 0, instances: 1 } unique, motion false +geom 0: material #0 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:5964020bd0c96e6d camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=1:5964020bd0c96e6d +geom 1: material #1 Signature { kind: "MaterialX", cutout: false, straight: false, boundary: false, emits: false, uv: true, uv_primvar: None, face_texture: None, curve: Some((false, false, [])), primvars: None } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves true scale 1.0 motion [] pieces all=1:f23ffa0170dacb65 camera=1:f23ffa0170dacb65 shadow=1:f23ffa0170dacb65 indirect=1:f23ffa0170dacb65 +provenance material /World/Looks/mtlx_hair_clear: MaterialOrigin { slots: [1], displaced: false } +provenance light /World/Back: LightOrigin { index: 0, geoms: 0..1 } +provenance geometry 0..1: /World/Back +provenance geometry 1..2: /World/Strand +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: None, cameras: [], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: None, offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/backlit_hair_usda-59f16e3a1a4f9b6d-1.image b/crates/crust-core/tests/data/import_baselines/backlit_hair_usda-59f16e3a1a4f9b6d-1.image new file mode 100644 index 000000000..a0bf16a7b --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/backlit_hair_usda-59f16e3a1a4f9b6d-1.image @@ -0,0 +1 @@ +640x360 16spp clamp-off f8a9f23b5160dcb7 diff --git a/crates/crust-core/tests/data/import_baselines/bad_length_usda-3ab7b93f882199a8-1.digest b/crates/crust-core/tests/data/import_baselines/bad_length_usda-3ab7b93f882199a8-1.digest new file mode 100644 index 000000000..386038672 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/bad_length_usda-3ab7b93f882199a8-1.digest @@ -0,0 +1,21 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/W/Cam") +camera: Camera { origin: Vec3A(0.0, 0.0, 0.0), lower_left_corner: Vec3A(-2.0955, -1.1787187, -10.0), horizontal: Vec3A(4.191, 0.0, 0.0), vertical: Vec3A(0.0, 2.3574374, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: Some("/Render/settings") +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 640, height: 360, region: PixelRect { x0: 0, y0: 0, x1: 640, y1: 360 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 50.0, aperture: [20.955, 11.787188], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 10.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/bad_length.usda"], invisible_overrides: Some(0) } +layer: $DIR/bad_length.usda +warning: Warning { code: SubdivInvalidSetting, kind: Refused, count: 1, prims: [], message: "Subdivision edge length -2 from crust:subdivisionEdgeLength is not a positive pixel length — ignored" } +lights: 0 +volumes: 0 +world: 1 geometries, PrimitiveBreakdown { triangles: 12, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 12, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=12:8a43bbedf6dc6f25 camera=12:8a43bbedf6dc6f25 shadow=12:8a43bbedf6dc6f25 indirect=12:8a43bbedf6dc6f25 +provenance geometry 0..1: /W/Near +provenance mesh: MeshOrigin { geom_id: 0, slot: 0, baked: true, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 14289806633734265804, n_points: 8, n_indices: 24, n_uvs: None, smooth: true, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/W/Cam"), cameras: ["/W/Cam"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/W/Cam"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/bad_length_usda-3ab7b93f882199a8-1.image b/crates/crust-core/tests/data/import_baselines/bad_length_usda-3ab7b93f882199a8-1.image new file mode 100644 index 000000000..c734c5b1d --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/bad_length_usda-3ab7b93f882199a8-1.image @@ -0,0 +1 @@ +640x360 16spp clamp-off a04a09c0d4b5e325 diff --git a/crates/crust-core/tests/data/import_baselines/bad_volume_usda-00cc0d19953cb7f6-1.digest b/crates/crust-core/tests/data/import_baselines/bad_volume_usda-00cc0d19953cb7f6-1.digest new file mode 100644 index 000000000..eeb533a21 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/bad_volume_usda-00cc0d19953cb7f6-1.digest @@ -0,0 +1,18 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: None +camera: Camera { origin: Vec3A(15.0, 3.0, 3.0), lower_left_corner: Vec3A(4.8863316, -0.044797063, 4.174048), horizontal: Vec3A(1.2295314, 0.0, -6.147657), vertical: Vec3A(-0.44830504, 3.4967792, -0.08966101), u: Vec3A(0.19611613, 0.0, -0.9805807), v: Vec3A(-0.1271232, 0.991561, -0.02542464), lens_radius: 0.05, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: None +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 640, height: 360, region: PixelRect { x0: 0, y0: 0, x1: 640, y1: 360 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: None, depth_of_field: true, motion_blur: false, layer_stack: ["$DIR/bad_volume.usda"], invisible_overrides: Some(0) } +layer: $DIR/bad_volume.usda +warning: Warning { code: VolumeUnknownType, kind: Skipped, count: 1, prims: ["/World/Mystery"], message: "Volume at /World/Mystery: unknown crust:volume:type \"plasma\" (expected homogeneous | smoke | grid) — skipped" } +warning: Warning { code: CameraMissing, kind: Skipped, count: 1, prims: [], message: "USD stage has no UsdGeomCamera — falling back to world::get_settings camera" } +lights: 0 +volumes: 0 +world: 0 geometries, PrimitiveBreakdown { triangles: 0, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 0, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: None, cameras: [], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: None, offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/bad_volume_usda-00cc0d19953cb7f6-1.image b/crates/crust-core/tests/data/import_baselines/bad_volume_usda-00cc0d19953cb7f6-1.image new file mode 100644 index 000000000..c734c5b1d --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/bad_volume_usda-00cc0d19953cb7f6-1.image @@ -0,0 +1 @@ +640x360 16spp clamp-off a04a09c0d4b5e325 diff --git a/crates/crust-core/tests/data/import_baselines/banded_dome_usda-03eaa43cee7b25ab-1.digest b/crates/crust-core/tests/data/import_baselines/banded_dome_usda-03eaa43cee7b25ab-1.digest new file mode 100644 index 000000000..8a4d7a9ea --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/banded_dome_usda-03eaa43cee7b25ab-1.digest @@ -0,0 +1,19 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: None +camera: Camera { origin: Vec3A(15.0, 3.0, 3.0), lower_left_corner: Vec3A(4.8863316, -0.044797063, 4.174048), horizontal: Vec3A(1.2295314, 0.0, -6.147657), vertical: Vec3A(-0.44830504, 3.4967792, -0.08966101), u: Vec3A(0.19611613, 0.0, -0.9805807), v: Vec3A(-0.1271232, 0.991561, -0.02542464), lens_radius: 0.05, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: None +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 640, height: 360, region: PixelRect { x0: 0, y0: 0, x1: 640, y1: 360 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: None, depth_of_field: true, motion_blur: false, layer_stack: ["$DIR/banded_dome.usda"], invisible_overrides: Some(0) } +layer: $DIR/banded_dome.usda +warning: Warning { code: CameraMissing, kind: Skipped, count: 1, prims: [], message: "USD stage has no UsdGeomCamera — falling back to world::get_settings camera" } +lights: 1 +light 0: dome name Some("/World/Sky") lpe None pmf 1.0 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 0 geometries, PrimitiveBreakdown { triangles: 0, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 0, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +provenance light /World/Sky: LightOrigin { index: 0, geoms: 0..0 } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: None, cameras: [], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: None, offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/banded_dome_usda-03eaa43cee7b25ab-1.image b/crates/crust-core/tests/data/import_baselines/banded_dome_usda-03eaa43cee7b25ab-1.image new file mode 100644 index 000000000..b58239ea0 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/banded_dome_usda-03eaa43cee7b25ab-1.image @@ -0,0 +1 @@ +640x360 16spp clamp-off 4f3e257129109575 diff --git a/crates/crust-core/tests/data/import_baselines/beside_usda-05e27d2e70a17830-1.digest b/crates/crust-core/tests/data/import_baselines/beside_usda-05e27d2e70a17830-1.digest new file mode 100644 index 000000000..66b62fa5d --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/beside_usda-05e27d2e70a17830-1.digest @@ -0,0 +1,34 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: None +camera: Camera { origin: Vec3A(15.0, 3.0, 3.0), lower_left_corner: Vec3A(4.8863316, -0.044797063, 4.174048), horizontal: Vec3A(1.2295314, 0.0, -6.147657), vertical: Vec3A(-0.44830504, 3.4967792, -0.08966101), u: Vec3A(0.19611613, 0.0, -0.9805807), v: Vec3A(-0.1271232, 0.991561, -0.02542464), lens_radius: 0.05, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: None +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 640, height: 360, region: PixelRect { x0: 0, y0: 0, x1: 640, y1: 360 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: None, depth_of_field: true, motion_blur: false, layer_stack: ["$DIR/beside.usda"], invisible_overrides: Some(0) } +layer: $DIR/beside.usda +warning: Warning { code: CameraMissing, kind: Skipped, count: 1, prims: [], message: "USD stage has no UsdGeomCamera — falling back to world::get_settings camera" } +lights: 0 +volumes: 0 +world: 4 geometries, PrimitiveBreakdown { triangles: 8, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 8, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:658935472ec9d838 camera=2:658935472ec9d838 shadow=2:658935472ec9d838 indirect=2:658935472ec9d838 +geom 1: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:71682785a2d90a85 camera=2:71682785a2d90a85 shadow=2:71682785a2d90a85 indirect=2:71682785a2d90a85 +geom 2: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:e52d9a39978026c5 camera=2:e52d9a39978026c5 shadow=2:e52d9a39978026c5 indirect=2:e52d9a39978026c5 +geom 3: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:7f0030950a4845b8 camera=2:7f0030950a4845b8 shadow=2:7f0030950a4845b8 indirect=2:7f0030950a4845b8 +provenance material /World/Looks/Red: MaterialOrigin { slots: [0, 1, 2, 3], displaced: false } +provenance geometry 0..1: /World/A/Quad +provenance geometry 1..2: /World/B/Quad +provenance geometry 2..3: /World/C/Quad +provenance geometry 3..4: /World/D/Quad +provenance mesh: MeshOrigin { geom_id: 0, slot: 0, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 1, slot: 1, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 2, slot: 2, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 3, slot: 3, baked: true, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 5062424276489054560, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 1: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 9056688765093257811, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 2: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 204846636954257726, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 3: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 10907505002769619754, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: None, cameras: [], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: None, offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/beside_usda-05e27d2e70a17830-1.image b/crates/crust-core/tests/data/import_baselines/beside_usda-05e27d2e70a17830-1.image new file mode 100644 index 000000000..c734c5b1d --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/beside_usda-05e27d2e70a17830-1.image @@ -0,0 +1 @@ +640x360 16spp clamp-off a04a09c0d4b5e325 diff --git a/crates/crust-core/tests/data/import_baselines/binding_usda-3ec3b212bbee4e90-1.digest b/crates/crust-core/tests/data/import_baselines/binding_usda-3ec3b212bbee4e90-1.digest new file mode 100644 index 000000000..3cecf73c6 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/binding_usda-3ec3b212bbee4e90-1.digest @@ -0,0 +1,27 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: None +camera: Camera { origin: Vec3A(15.0, 3.0, 3.0), lower_left_corner: Vec3A(4.8863316, -0.044797063, 4.174048), horizontal: Vec3A(1.2295314, 0.0, -6.147657), vertical: Vec3A(-0.44830504, 3.4967792, -0.08966101), u: Vec3A(0.19611613, 0.0, -0.9805807), v: Vec3A(-0.1271232, 0.991561, -0.02542464), lens_radius: 0.05, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: None +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 640, height: 360, region: PixelRect { x0: 0, y0: 0, x1: 640, y1: 360 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: None, depth_of_field: true, motion_blur: false, layer_stack: ["$DIR/binding.usda"], invisible_overrides: Some(0) } +layer: $DIR/binding.usda +warning: Warning { code: CameraMissing, kind: Skipped, count: 1, prims: [], message: "USD stage has no UsdGeomCamera — falling back to world::get_settings camera" } +lights: 0 +volumes: 0 +world: 2 geometries, PrimitiveBreakdown { triangles: 4, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 4, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:e52d9a39978026c5 camera=2:e52d9a39978026c5 shadow=2:e52d9a39978026c5 indirect=2:e52d9a39978026c5 +geom 1: material #1 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:584690846f530915 camera=2:584690846f530915 shadow=2:584690846f530915 indirect=2:584690846f530915 +provenance material /W/Looks/All: MaterialOrigin { slots: [0], displaced: false } +provenance material /W/Looks/Full: MaterialOrigin { slots: [1], displaced: false } +provenance geometry 0..1: /W/Geo/AllPurpose/B +provenance geometry 1..2: /W/Geo/Purposed/Nested/A +provenance mesh: MeshOrigin { geom_id: 0, slot: 0, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 1, slot: 1, baked: true, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 204846636954257726, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 1: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 4700795505077783238, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 1 }), placements: 1, shared: false, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: None, cameras: [], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: None, offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/binding_usda-3ec3b212bbee4e90-1.image b/crates/crust-core/tests/data/import_baselines/binding_usda-3ec3b212bbee4e90-1.image new file mode 100644 index 000000000..c734c5b1d --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/binding_usda-3ec3b212bbee4e90-1.image @@ -0,0 +1 @@ +640x360 16spp clamp-off a04a09c0d4b5e325 diff --git a/crates/crust-core/tests/data/import_baselines/black_usda-ca3475f9863dc283-1.digest b/crates/crust-core/tests/data/import_baselines/black_usda-ca3475f9863dc283-1.digest new file mode 100644 index 000000000..fa0fddf0b --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/black_usda-ca3475f9863dc283-1.digest @@ -0,0 +1,25 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/World/cam") +camera: Camera { origin: Vec3A(0.0, 0.0, 0.0), lower_left_corner: Vec3A(-5.0, -3.75, -10.0), horizontal: Vec3A(10.0, 0.0, 0.0), vertical: Vec3A(0.0, 7.5, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: Some("/Render/settings") +settings: RenderSettings { samples_per_pixel: 16, max_depth: 2, width: 32, height: 24, region: PixelRect { x0: 0, y0: 0, x1: 32, y1: 24 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [AovProduct { prim_path: "/Render/p", name: "p.exr", vars: [AovVar { prim_path: "/Render/C", name: "C", channel_prefix: None, source: Color, components: 3, precision: Float, accumulation: Filtered, clear: 0.0, expression: None, raw: false, variance: false }, AovVar { prim_path: "/Render/matte", name: "matte", channel_prefix: None, source: Primvar(PrimvarSource { index: 0, components: 1, role: Float }), components: 1, precision: Float, accumulation: Filtered, clear: 0.0, expression: None, raw: false, variance: false }, AovVar { prim_path: "/Render/depth", name: "depth", channel_prefix: None, source: Depth, components: 1, precision: Float, accumulation: Closest, clear: inf, expression: None, raw: false, variance: false }, AovVar { prim_path: "/Render/depth_filtered", name: "depth_filtered", channel_prefix: None, source: Depth, components: 1, precision: Float, accumulation: Filtered, clear: inf, expression: None, raw: false, variance: false }, AovVar { prim_path: "/Render/variance", name: "variance", channel_prefix: None, source: Variance, components: 1, precision: Float, accumulation: Filtered, clear: 0.0, expression: None, raw: false, variance: false }, AovVar { prim_path: "/Render/look_out", name: "look_out", channel_prefix: None, source: Filter(FilterSource { display: false, filter: 0, output: 0, components: 3, radiance: true }), components: 3, precision: Float, accumulation: Filtered, clear: 0.0, expression: None, raw: false, variance: false }], attributes: [] }], precomp: Some(Precomp { sample_filters: ["/Render/look"], display_filters: [], display: "beauty" }) } +pass: None +source: Source { lens: Some(Lens { focal_length: 24.0, aperture: [24.0, 18.0], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 10.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/black.usda"], invisible_overrides: Some(0) } +layer: $DIR/black.usda +warning: Warning { code: PrecompBlackBeauty, kind: Approximated, count: 1, prims: [], message: "The stage has a precomp but no light, so its beauty is black: adaptive sampling stops every pixel at crust:minSamplesPerPixel. Author crust:minSamplesPerPixel = crust:samplesPerPixel for the precomp to take every sample" } +lights: 0 +volumes: 0 +world: 2 geometries, PrimitiveBreakdown { triangles: 4, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 4, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov Some((Some(0), false)) swapped false curves false scale 1.0 motion [] pieces all=2:2a13523c8e09c13d camera=2:2a13523c8e09c13d shadow=2:2a13523c8e09c13d indirect=2:2a13523c8e09c13d +geom 1: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:31db52e4afd4a225 camera=2:31db52e4afd4a225 shadow=2:31db52e4afd4a225 indirect=2:31db52e4afd4a225 +provenance geometry 0..1: /World/Card +provenance geometry 1..2: /World/Wall +provenance mesh: MeshOrigin { geom_id: 0, slot: 0, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 1, slot: 1, baked: true, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 3430351340666728903, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 1: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 13118596165941616386, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: true, working: None, camera: Some("/World/cam"), cameras: ["/World/cam"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [("matte", 1)], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/World/cam"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/black_usda-ca3475f9863dc283-1.image b/crates/crust-core/tests/data/import_baselines/black_usda-ca3475f9863dc283-1.image new file mode 100644 index 000000000..5ad872464 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/black_usda-ca3475f9863dc283-1.image @@ -0,0 +1 @@ +32x24 16spp clamp-off f3fb6a6deb5af325 diff --git a/crates/crust-core/tests/data/import_baselines/blackbody_acescg_usda-e4fe8984977e4dc5-1.digest b/crates/crust-core/tests/data/import_baselines/blackbody_acescg_usda-e4fe8984977e4dc5-1.digest new file mode 100644 index 000000000..4adec143c --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/blackbody_acescg_usda-e4fe8984977e4dc5-1.digest @@ -0,0 +1,21 @@ +time: None +working space: ACEScg +camera path: None +camera: Camera { origin: Vec3A(15.0, 3.0, 3.0), lower_left_corner: Vec3A(4.8863316, -0.044797063, 4.174048), horizontal: Vec3A(1.2295314, 0.0, -6.147657), vertical: Vec3A(-0.44830504, 3.4967792, -0.08966101), u: Vec3A(0.19611613, 0.0, -0.9805807), v: Vec3A(-0.1271232, 0.991561, -0.02542464), lens_radius: 0.05, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: Some("/Render/settings") +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 640, height: 360, region: PixelRect { x0: 0, y0: 0, x1: 640, y1: 360 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: None, depth_of_field: true, motion_blur: false, layer_stack: ["$DIR/blackbody_acescg.usda"], invisible_overrides: Some(0) } +layer: $DIR/blackbody_acescg.usda +warning: Warning { code: CameraMissing, kind: Skipped, count: 1, prims: [], message: "USD stage has no UsdGeomCamera — falling back to world::get_settings camera" } +lights: 1 +light 0: area name Some("/World/S") lpe None pmf 1.0 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 1 geometries, PrimitiveBreakdown { triangles: 0, spheres: 1, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 0, spheres: 1, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +geom 0: material #0 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:984632b55acb5495 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=1:984632b55acb5495 +provenance light /World/S: LightOrigin { index: 0, geoms: 0..1 } +provenance geometry 0..1: /World/S +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: None, cameras: [], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: None, offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("ACEScg") diff --git a/crates/crust-core/tests/data/import_baselines/blackbody_acescg_usda-e4fe8984977e4dc5-1.image b/crates/crust-core/tests/data/import_baselines/blackbody_acescg_usda-e4fe8984977e4dc5-1.image new file mode 100644 index 000000000..c734c5b1d --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/blackbody_acescg_usda-e4fe8984977e4dc5-1.image @@ -0,0 +1 @@ +640x360 16spp clamp-off a04a09c0d4b5e325 diff --git a/crates/crust-core/tests/data/import_baselines/blur_default_usda-d0c5474e0dfbe769-1.digest b/crates/crust-core/tests/data/import_baselines/blur_default_usda-d0c5474e0dfbe769-1.digest new file mode 100644 index 000000000..e7f58e4e1 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/blur_default_usda-d0c5474e0dfbe769-1.digest @@ -0,0 +1,18 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/World/other") +camera: Camera { origin: Vec3A(0.0, 0.0, 0.0), lower_left_corner: Vec3A(-2.7183647, -1.5290802, -10.0), horizontal: Vec3A(5.4367294, 0.0, 0.0), vertical: Vec3A(0.0, 3.0581603, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: Some("/Render/settings") +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 64, height: 36, region: PixelRect { x0: 0, y0: 0, x1: 64, y1: 36 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 50.0, aperture: [20.955, 15.2908], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 10.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/blur_default.usda"], invisible_overrides: Some(0) } +layer: $DIR/blur_default.usda +lights: 0 +volumes: 0 +world: 1 geometries, PrimitiveBreakdown { triangles: 0, spheres: 1, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 0, spheres: 1, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:fb1e7d48790aec95 camera=1:fb1e7d48790aec95 shadow=1:fb1e7d48790aec95 indirect=1:fb1e7d48790aec95 +provenance geometry 0..1: /World/ball +provenance spheres: [0] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/World/other"), cameras: ["/World/other", "/World/cam"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/World/other"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/blur_default_usda-d0c5474e0dfbe769-1.image b/crates/crust-core/tests/data/import_baselines/blur_default_usda-d0c5474e0dfbe769-1.image new file mode 100644 index 000000000..f4ebc1648 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/blur_default_usda-d0c5474e0dfbe769-1.image @@ -0,0 +1 @@ +64x36 16spp clamp-off 1028d44458cc9325 diff --git a/crates/crust-core/tests/data/import_baselines/blur_false_usda-8f6712fd58e3e7dd-1.digest b/crates/crust-core/tests/data/import_baselines/blur_false_usda-8f6712fd58e3e7dd-1.digest new file mode 100644 index 000000000..317de2cb9 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/blur_false_usda-8f6712fd58e3e7dd-1.digest @@ -0,0 +1,18 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/World/other") +camera: Camera { origin: Vec3A(0.0, 0.0, 0.0), lower_left_corner: Vec3A(-2.7183647, -1.5290802, -10.0), horizontal: Vec3A(5.4367294, 0.0, 0.0), vertical: Vec3A(0.0, 3.0581603, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: Some("/Render/settings") +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 640, height: 360, region: PixelRect { x0: 0, y0: 0, x1: 640, y1: 360 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 50.0, aperture: [20.955, 15.2908], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 10.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/blur_false.usda"], invisible_overrides: Some(0) } +layer: $DIR/blur_false.usda +lights: 0 +volumes: 0 +world: 1 geometries, PrimitiveBreakdown { triangles: 0, spheres: 1, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 0, spheres: 1, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:fb1e7d48790aec95 camera=1:fb1e7d48790aec95 shadow=1:fb1e7d48790aec95 indirect=1:fb1e7d48790aec95 +provenance geometry 0..1: /World/ball +provenance spheres: [0] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/World/other"), cameras: ["/World/other", "/World/cam"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/World/other"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/blur_false_usda-8f6712fd58e3e7dd-1.image b/crates/crust-core/tests/data/import_baselines/blur_false_usda-8f6712fd58e3e7dd-1.image new file mode 100644 index 000000000..c734c5b1d --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/blur_false_usda-8f6712fd58e3e7dd-1.image @@ -0,0 +1 @@ +640x360 16spp clamp-off a04a09c0d4b5e325 diff --git a/crates/crust-core/tests/data/import_baselines/blur_product_inherits_synonym_usda-8cbc9a895bc4da45-1.digest b/crates/crust-core/tests/data/import_baselines/blur_product_inherits_synonym_usda-8cbc9a895bc4da45-1.digest new file mode 100644 index 000000000..1ad54cd5c --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/blur_product_inherits_synonym_usda-8cbc9a895bc4da45-1.digest @@ -0,0 +1,18 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/World/other") +camera: Camera { origin: Vec3A(0.0, 0.0, 0.0), lower_left_corner: Vec3A(-2.7183647, -1.5290802, -10.0), horizontal: Vec3A(5.4367294, 0.0, 0.0), vertical: Vec3A(0.0, 3.0581603, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: Some("/Render/settings") +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 640, height: 360, region: PixelRect { x0: 0, y0: 0, x1: 640, y1: 360 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: false, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [AovProduct { prim_path: "/Render/p", name: "p.exr", vars: [AovVar { prim_path: "/Render/beauty", name: "beauty", channel_prefix: None, source: Color, components: 4, precision: Float, accumulation: Filtered, clear: 0.0, expression: None, raw: false, variance: false }], attributes: [] }], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 50.0, aperture: [20.955, 15.2908], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 10.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/blur_product_inherits_synonym.usda"], invisible_overrides: Some(0) } +layer: $DIR/blur_product_inherits_synonym.usda +lights: 0 +volumes: 0 +world: 1 geometries, PrimitiveBreakdown { triangles: 0, spheres: 1, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 0, spheres: 1, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:fb1e7d48790aec95 camera=1:fb1e7d48790aec95 shadow=1:fb1e7d48790aec95 indirect=1:fb1e7d48790aec95 +provenance geometry 0..1: /World/ball +provenance spheres: [0] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/World/other"), cameras: ["/World/other", "/World/cam"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/World/other"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/blur_product_inherits_synonym_usda-8cbc9a895bc4da45-1.image b/crates/crust-core/tests/data/import_baselines/blur_product_inherits_synonym_usda-8cbc9a895bc4da45-1.image new file mode 100644 index 000000000..c734c5b1d --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/blur_product_inherits_synonym_usda-8cbc9a895bc4da45-1.image @@ -0,0 +1 @@ +640x360 16spp clamp-off a04a09c0d4b5e325 diff --git a/crates/crust-core/tests/data/import_baselines/blur_product_off_usda-ad5ae20ae0e9dd8e-1.digest b/crates/crust-core/tests/data/import_baselines/blur_product_off_usda-ad5ae20ae0e9dd8e-1.digest new file mode 100644 index 000000000..527fc1321 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/blur_product_off_usda-ad5ae20ae0e9dd8e-1.digest @@ -0,0 +1,18 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/World/other") +camera: Camera { origin: Vec3A(0.0, 0.0, 0.0), lower_left_corner: Vec3A(-2.7183647, -1.5290802, -10.0), horizontal: Vec3A(5.4367294, 0.0, 0.0), vertical: Vec3A(0.0, 3.0581603, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: Some("/Render/settings") +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 640, height: 360, region: PixelRect { x0: 0, y0: 0, x1: 640, y1: 360 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: false, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [AovProduct { prim_path: "/Render/p", name: "p.exr", vars: [AovVar { prim_path: "/Render/beauty", name: "beauty", channel_prefix: None, source: Color, components: 4, precision: Float, accumulation: Filtered, clear: 0.0, expression: None, raw: false, variance: false }], attributes: [] }], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 50.0, aperture: [20.955, 15.2908], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 10.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/blur_product_off.usda"], invisible_overrides: Some(0) } +layer: $DIR/blur_product_off.usda +lights: 0 +volumes: 0 +world: 1 geometries, PrimitiveBreakdown { triangles: 0, spheres: 1, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 0, spheres: 1, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:fb1e7d48790aec95 camera=1:fb1e7d48790aec95 shadow=1:fb1e7d48790aec95 indirect=1:fb1e7d48790aec95 +provenance geometry 0..1: /World/ball +provenance spheres: [0] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/World/other"), cameras: ["/World/other", "/World/cam"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/World/other"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/blur_product_off_usda-ad5ae20ae0e9dd8e-1.image b/crates/crust-core/tests/data/import_baselines/blur_product_off_usda-ad5ae20ae0e9dd8e-1.image new file mode 100644 index 000000000..c734c5b1d --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/blur_product_off_usda-ad5ae20ae0e9dd8e-1.image @@ -0,0 +1 @@ +640x360 16spp clamp-off a04a09c0d4b5e325 diff --git a/crates/crust-core/tests/data/import_baselines/blur_product_on_usda-9e081a22d073a61a-1.digest b/crates/crust-core/tests/data/import_baselines/blur_product_on_usda-9e081a22d073a61a-1.digest new file mode 100644 index 000000000..ffa781874 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/blur_product_on_usda-9e081a22d073a61a-1.digest @@ -0,0 +1,18 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/World/other") +camera: Camera { origin: Vec3A(0.0, 0.0, 0.0), lower_left_corner: Vec3A(-2.7183647, -1.5290802, -10.0), horizontal: Vec3A(5.4367294, 0.0, 0.0), vertical: Vec3A(0.0, 3.0581603, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: Some("/Render/settings") +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 640, height: 360, region: PixelRect { x0: 0, y0: 0, x1: 640, y1: 360 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [AovProduct { prim_path: "/Render/p", name: "p.exr", vars: [AovVar { prim_path: "/Render/beauty", name: "beauty", channel_prefix: None, source: Color, components: 4, precision: Float, accumulation: Filtered, clear: 0.0, expression: None, raw: false, variance: false }], attributes: [] }], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 50.0, aperture: [20.955, 15.2908], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 10.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/blur_product_on.usda"], invisible_overrides: Some(0) } +layer: $DIR/blur_product_on.usda +lights: 0 +volumes: 0 +world: 1 geometries, PrimitiveBreakdown { triangles: 0, spheres: 1, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 0, spheres: 1, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:fb1e7d48790aec95 camera=1:fb1e7d48790aec95 shadow=1:fb1e7d48790aec95 indirect=1:fb1e7d48790aec95 +provenance geometry 0..1: /World/ball +provenance spheres: [0] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/World/other"), cameras: ["/World/other", "/World/cam"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/World/other"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/blur_product_on_usda-9e081a22d073a61a-1.image b/crates/crust-core/tests/data/import_baselines/blur_product_on_usda-9e081a22d073a61a-1.image new file mode 100644 index 000000000..c734c5b1d --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/blur_product_on_usda-9e081a22d073a61a-1.image @@ -0,0 +1 @@ +640x360 16spp clamp-off a04a09c0d4b5e325 diff --git a/crates/crust-core/tests/data/import_baselines/blur_products_differ_usda-97d616ea3858dc6c-1.digest b/crates/crust-core/tests/data/import_baselines/blur_products_differ_usda-97d616ea3858dc6c-1.digest new file mode 100644 index 000000000..b27431614 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/blur_products_differ_usda-97d616ea3858dc6c-1.digest @@ -0,0 +1,19 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/World/other") +camera: Camera { origin: Vec3A(0.0, 0.0, 0.0), lower_left_corner: Vec3A(-2.7183647, -1.5290802, -10.0), horizontal: Vec3A(5.4367294, 0.0, 0.0), vertical: Vec3A(0.0, 3.0581603, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: Some("/Render/settings") +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 640, height: 360, region: PixelRect { x0: 0, y0: 0, x1: 640, y1: 360 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: false, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [AovProduct { prim_path: "/Render/a", name: "a.exr", vars: [AovVar { prim_path: "/Render/beauty", name: "beauty", channel_prefix: None, source: Color, components: 4, precision: Float, accumulation: Filtered, clear: 0.0, expression: None, raw: false, variance: false }], attributes: [] }, AovProduct { prim_path: "/Render/b", name: "b.exr", vars: [AovVar { prim_path: "/Render/beauty", name: "beauty", channel_prefix: None, source: Color, components: 4, precision: Float, accumulation: Filtered, clear: 0.0, expression: None, raw: false, variance: false }], attributes: [] }], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 50.0, aperture: [20.955, 15.2908], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 10.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/blur_products_differ.usda"], invisible_overrides: Some(0) } +layer: $DIR/blur_products_differ.usda +warning: Warning { code: ProductMotionBlurMismatch, kind: Approximated, count: 1, prims: ["/Render/b"], message: "/Render/b: asks for motion blur on, but the render has it off (sharp at the frame) (the first product's); its file is written with that" } +lights: 0 +volumes: 0 +world: 1 geometries, PrimitiveBreakdown { triangles: 0, spheres: 1, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 0, spheres: 1, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:fb1e7d48790aec95 camera=1:fb1e7d48790aec95 shadow=1:fb1e7d48790aec95 indirect=1:fb1e7d48790aec95 +provenance geometry 0..1: /World/ball +provenance spheres: [0] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/World/other"), cameras: ["/World/other", "/World/cam"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/World/other"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/blur_products_differ_usda-97d616ea3858dc6c-1.image b/crates/crust-core/tests/data/import_baselines/blur_products_differ_usda-97d616ea3858dc6c-1.image new file mode 100644 index 000000000..c734c5b1d --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/blur_products_differ_usda-97d616ea3858dc6c-1.image @@ -0,0 +1 @@ +640x360 16spp clamp-off a04a09c0d4b5e325 diff --git a/crates/crust-core/tests/data/import_baselines/blur_products_same_usda-f8c20e3d816829cd-1.digest b/crates/crust-core/tests/data/import_baselines/blur_products_same_usda-f8c20e3d816829cd-1.digest new file mode 100644 index 000000000..f0247a8a5 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/blur_products_same_usda-f8c20e3d816829cd-1.digest @@ -0,0 +1,18 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/World/other") +camera: Camera { origin: Vec3A(0.0, 0.0, 0.0), lower_left_corner: Vec3A(-2.7183647, -1.5290802, -10.0), horizontal: Vec3A(5.4367294, 0.0, 0.0), vertical: Vec3A(0.0, 3.0581603, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: Some("/Render/settings") +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 640, height: 360, region: PixelRect { x0: 0, y0: 0, x1: 640, y1: 360 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: false, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [AovProduct { prim_path: "/Render/a", name: "a.exr", vars: [AovVar { prim_path: "/Render/beauty", name: "beauty", channel_prefix: None, source: Color, components: 4, precision: Float, accumulation: Filtered, clear: 0.0, expression: None, raw: false, variance: false }], attributes: [] }, AovProduct { prim_path: "/Render/b", name: "b.exr", vars: [AovVar { prim_path: "/Render/beauty", name: "beauty", channel_prefix: None, source: Color, components: 4, precision: Float, accumulation: Filtered, clear: 0.0, expression: None, raw: false, variance: false }], attributes: [] }], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 50.0, aperture: [20.955, 15.2908], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 10.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/blur_products_same.usda"], invisible_overrides: Some(0) } +layer: $DIR/blur_products_same.usda +lights: 0 +volumes: 0 +world: 1 geometries, PrimitiveBreakdown { triangles: 0, spheres: 1, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 0, spheres: 1, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:fb1e7d48790aec95 camera=1:fb1e7d48790aec95 shadow=1:fb1e7d48790aec95 indirect=1:fb1e7d48790aec95 +provenance geometry 0..1: /World/ball +provenance spheres: [0] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/World/other"), cameras: ["/World/other", "/World/cam"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/World/other"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/blur_products_spellings_usda-e53f8c9eb1fa898a-1.digest b/crates/crust-core/tests/data/import_baselines/blur_products_spellings_usda-e53f8c9eb1fa898a-1.digest new file mode 100644 index 000000000..25e16c075 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/blur_products_spellings_usda-e53f8c9eb1fa898a-1.digest @@ -0,0 +1,19 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/World/other") +camera: Camera { origin: Vec3A(0.0, 0.0, 0.0), lower_left_corner: Vec3A(-2.7183647, -1.5290802, -10.0), horizontal: Vec3A(5.4367294, 0.0, 0.0), vertical: Vec3A(0.0, 3.0581603, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: Some("/Render/settings") +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 640, height: 360, region: PixelRect { x0: 0, y0: 0, x1: 640, y1: 360 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: false, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [AovProduct { prim_path: "/Render/a", name: "a.exr", vars: [AovVar { prim_path: "/Render/beauty", name: "beauty", channel_prefix: None, source: Color, components: 4, precision: Float, accumulation: Filtered, clear: 0.0, expression: None, raw: false, variance: false }], attributes: [] }, AovProduct { prim_path: "/Render/b", name: "b.exr", vars: [AovVar { prim_path: "/Render/beauty", name: "beauty", channel_prefix: None, source: Color, components: 4, precision: Float, accumulation: Filtered, clear: 0.0, expression: None, raw: false, variance: false }], attributes: [] }], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 50.0, aperture: [20.955, 15.2908], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 10.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/blur_products_spellings.usda"], invisible_overrides: Some(0) } +layer: $DIR/blur_products_spellings.usda +warning: Warning { code: ProductMotionBlurMismatch, kind: Approximated, count: 1, prims: ["/Render/b"], message: "/Render/b: asks for motion blur off (sharp at shutter open), but the render has it off (sharp at the frame) (the first product's); its file is written with that" } +lights: 0 +volumes: 0 +world: 1 geometries, PrimitiveBreakdown { triangles: 0, spheres: 1, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 0, spheres: 1, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:fb1e7d48790aec95 camera=1:fb1e7d48790aec95 shadow=1:fb1e7d48790aec95 indirect=1:fb1e7d48790aec95 +provenance geometry 0..1: /World/ball +provenance spheres: [0] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/World/other"), cameras: ["/World/other", "/World/cam"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/World/other"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/blur_settings_only_usda-57bf8b1f820d60e9-1.digest b/crates/crust-core/tests/data/import_baselines/blur_settings_only_usda-57bf8b1f820d60e9-1.digest new file mode 100644 index 000000000..52dee1753 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/blur_settings_only_usda-57bf8b1f820d60e9-1.digest @@ -0,0 +1,18 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/World/other") +camera: Camera { origin: Vec3A(0.0, 0.0, 0.0), lower_left_corner: Vec3A(-2.7183647, -1.5290802, -10.0), horizontal: Vec3A(5.4367294, 0.0, 0.0), vertical: Vec3A(0.0, 3.0581603, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: Some("/Render/settings") +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 640, height: 360, region: PixelRect { x0: 0, y0: 0, x1: 640, y1: 360 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: false, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 50.0, aperture: [20.955, 15.2908], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 10.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/blur_settings_only.usda"], invisible_overrides: Some(0) } +layer: $DIR/blur_settings_only.usda +lights: 0 +volumes: 0 +world: 1 geometries, PrimitiveBreakdown { triangles: 0, spheres: 1, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 0, spheres: 1, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:fb1e7d48790aec95 camera=1:fb1e7d48790aec95 shadow=1:fb1e7d48790aec95 indirect=1:fb1e7d48790aec95 +provenance geometry 0..1: /World/ball +provenance spheres: [0] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/World/other"), cameras: ["/World/other", "/World/cam"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/World/other"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/blur_settings_only_usda-57bf8b1f820d60e9-1.image b/crates/crust-core/tests/data/import_baselines/blur_settings_only_usda-57bf8b1f820d60e9-1.image new file mode 100644 index 000000000..c734c5b1d --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/blur_settings_only_usda-57bf8b1f820d60e9-1.image @@ -0,0 +1 @@ +640x360 16spp clamp-off a04a09c0d4b5e325 diff --git a/crates/crust-core/tests/data/import_baselines/blur_synonym_usda-5c4201bf40a84766-1.digest b/crates/crust-core/tests/data/import_baselines/blur_synonym_usda-5c4201bf40a84766-1.digest new file mode 100644 index 000000000..cc795c609 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/blur_synonym_usda-5c4201bf40a84766-1.digest @@ -0,0 +1,18 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/World/other") +camera: Camera { origin: Vec3A(0.0, 0.0, 0.0), lower_left_corner: Vec3A(-2.7183647, -1.5290802, -10.0), horizontal: Vec3A(5.4367294, 0.0, 0.0), vertical: Vec3A(0.0, 3.0581603, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: Some("/Render/settings") +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 640, height: 360, region: PixelRect { x0: 0, y0: 0, x1: 640, y1: 360 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: false, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 50.0, aperture: [20.955, 15.2908], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 10.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/blur_synonym.usda"], invisible_overrides: Some(0) } +layer: $DIR/blur_synonym.usda +lights: 0 +volumes: 0 +world: 1 geometries, PrimitiveBreakdown { triangles: 0, spheres: 1, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 0, spheres: 1, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:fb1e7d48790aec95 camera=1:fb1e7d48790aec95 shadow=1:fb1e7d48790aec95 indirect=1:fb1e7d48790aec95 +provenance geometry 0..1: /World/ball +provenance spheres: [0] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/World/other"), cameras: ["/World/other", "/World/cam"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/World/other"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/blur_synonym_usda-5c4201bf40a84766-1.image b/crates/crust-core/tests/data/import_baselines/blur_synonym_usda-5c4201bf40a84766-1.image new file mode 100644 index 000000000..c734c5b1d --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/blur_synonym_usda-5c4201bf40a84766-1.image @@ -0,0 +1 @@ +640x360 16spp clamp-off a04a09c0d4b5e325 diff --git a/crates/crust-core/tests/data/import_baselines/blur_warnings_usda-560d69942e1e7771-1.digest b/crates/crust-core/tests/data/import_baselines/blur_warnings_usda-560d69942e1e7771-1.digest new file mode 100644 index 000000000..595616bde --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/blur_warnings_usda-560d69942e1e7771-1.digest @@ -0,0 +1,18 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/World/other") +camera: Camera { origin: Vec3A(0.0, 0.0, 0.0), lower_left_corner: Vec3A(-2.7183647, -1.5290802, -10.0), horizontal: Vec3A(5.4367294, 0.0, 0.0), vertical: Vec3A(0.0, 3.0581603, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: Some("/Render/settings") +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 640, height: 360, region: PixelRect { x0: 0, y0: 0, x1: 640, y1: 360 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: false, depth_of_field: false, exposure_scale: 1.0 } +aovs: AovRequest { products: [AovProduct { prim_path: "/Render/p", name: "p.exr", vars: [AovVar { prim_path: "/Render/beauty", name: "beauty", channel_prefix: None, source: Color, components: 4, precision: Float, accumulation: Filtered, clear: 0.0, expression: None, raw: false, variance: false }], attributes: [] }], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 50.0, aperture: [20.955, 15.2908], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 10.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/blur_warnings.usda"], invisible_overrides: Some(0) } +layer: $DIR/blur_warnings.usda +lights: 0 +volumes: 0 +world: 1 geometries, PrimitiveBreakdown { triangles: 0, spheres: 1, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 0, spheres: 1, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:fb1e7d48790aec95 camera=1:fb1e7d48790aec95 shadow=1:fb1e7d48790aec95 indirect=1:fb1e7d48790aec95 +provenance geometry 0..1: /World/ball +provenance spheres: [0] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/World/other"), cameras: ["/World/other", "/World/cam"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/World/other"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/blur_warnings_usda-560d69942e1e7771-1.image b/crates/crust-core/tests/data/import_baselines/blur_warnings_usda-560d69942e1e7771-1.image new file mode 100644 index 000000000..c734c5b1d --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/blur_warnings_usda-560d69942e1e7771-1.image @@ -0,0 +1 @@ +640x360 16spp clamp-off a04a09c0d4b5e325 diff --git a/crates/crust-core/tests/data/import_baselines/blurred_usda-152a0fdff5c8c9a3-1.digest b/crates/crust-core/tests/data/import_baselines/blurred_usda-152a0fdff5c8c9a3-1.digest new file mode 100644 index 000000000..6b0c9bce5 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/blurred_usda-152a0fdff5c8c9a3-1.digest @@ -0,0 +1,19 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/World/cam") +camera: Camera { origin: Vec3A(0.0, 0.0, 8.0), lower_left_corner: Vec3A(-2.7183647, -1.5290802, -2.0), horizontal: Vec3A(5.4367294, 0.0, 0.0), vertical: Vec3A(0.0, 3.0581603, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: Some("/Render/settings") +settings: RenderSettings { samples_per_pixel: 16, max_depth: 2, width: 64, height: 36, region: PixelRect { x0: 0, y0: 0, x1: 64, y1: 36 }, min_samples_per_pixel: 16, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 50.0, aperture: [20.955, 15.2908], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 10.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/blurred.usda"], invisible_overrides: Some(0) } +layer: $DIR/blurred.usda +lights: 0 +volumes: 0 +world: 1 geometries, PrimitiveBreakdown { triangles: 0, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 1 } top level, PrimitiveBreakdown { triangles: 0, spheres: 1, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 1 } unique, motion true +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [Translation(Vec3A(1.2, 0.0, 0.0))] pieces all=1:6246e4b1bcdf2dac camera=1:6246e4b1bcdf2dac shadow=1:6246e4b1bcdf2dac indirect=1:6246e4b1bcdf2dac +provenance material /World/Glow: MaterialOrigin { slots: [0], displaced: false } +provenance geometry 0..1: /World/Mover +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/World/cam"), cameras: ["/World/cam"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/World/cam"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/blurred_usda-152a0fdff5c8c9a3-1.image b/crates/crust-core/tests/data/import_baselines/blurred_usda-152a0fdff5c8c9a3-1.image new file mode 100644 index 000000000..a73ad2479 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/blurred_usda-152a0fdff5c8c9a3-1.image @@ -0,0 +1 @@ +64x36 16spp clamp-off 7d8ea19b840f87f9 diff --git a/crates/crust-core/tests/data/import_baselines/both_usda-4af15817dabdb39f-1.digest b/crates/crust-core/tests/data/import_baselines/both_usda-4af15817dabdb39f-1.digest new file mode 100644 index 000000000..f319cb4bf --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/both_usda-4af15817dabdb39f-1.digest @@ -0,0 +1,20 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: None +camera: Camera { origin: Vec3A(15.0, 3.0, 3.0), lower_left_corner: Vec3A(4.8863316, -0.044797063, 4.174048), horizontal: Vec3A(1.2295314, 0.0, -6.147657), vertical: Vec3A(-0.44830504, 3.4967792, -0.08966101), u: Vec3A(0.19611613, 0.0, -0.9805807), v: Vec3A(-0.1271232, 0.991561, -0.02542464), lens_radius: 0.05, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: None +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 640, height: 360, region: PixelRect { x0: 0, y0: 0, x1: 640, y1: 360 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: None, depth_of_field: true, motion_blur: false, layer_stack: ["$DIR/both.usda"], invisible_overrides: Some(0) } +layer: $DIR/both.usda +warning: Warning { code: CameraMissing, kind: Skipped, count: 1, prims: [], message: "USD stage has no UsdGeomCamera — falling back to world::get_settings camera" } +lights: 0 +volumes: 0 +world: 1 geometries, PrimitiveBreakdown { triangles: 0, spheres: 1, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 0, spheres: 1, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:fb1e7d48790aec95 camera=1:fb1e7d48790aec95 shadow=1:fb1e7d48790aec95 indirect=1:fb1e7d48790aec95 +provenance material /World/Both: MaterialOrigin { slots: [0], displaced: false } +provenance geometry 0..1: /World/Ball +provenance spheres: [0] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: None, cameras: [], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: None, offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/both_usda-4af15817dabdb39f-1.image b/crates/crust-core/tests/data/import_baselines/both_usda-4af15817dabdb39f-1.image new file mode 100644 index 000000000..c734c5b1d --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/both_usda-4af15817dabdb39f-1.image @@ -0,0 +1 @@ +640x360 16spp clamp-off a04a09c0d4b5e325 diff --git a/crates/crust-core/tests/data/import_baselines/bound_instanced_prototype_usda-bb6c56b87e0b6d66-1.digest b/crates/crust-core/tests/data/import_baselines/bound_instanced_prototype_usda-bb6c56b87e0b6d66-1.digest new file mode 100644 index 000000000..a0509758b --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/bound_instanced_prototype_usda-bb6c56b87e0b6d66-1.digest @@ -0,0 +1,29 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/World/Cam") +camera: Camera { origin: Vec3A(1.0, 0.0, 10.0), lower_left_corner: Vec3A(-1.7183647, -1.5290802, 0.0), horizontal: Vec3A(5.4367294, 0.0, 0.0), vertical: Vec3A(0.0, 3.0581603, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: None +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 640, height: 360, region: PixelRect { x0: 0, y0: 0, x1: 640, y1: 360 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 50.0, aperture: [20.955, 15.2908], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 10.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/bound_instanced_prototype.usda"], invisible_overrides: Some(0) } +layer: $DIR/bound_instanced_prototype.usda +lights: 0 +volumes: 0 +world: 4 geometries, PrimitiveBreakdown { triangles: 2, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 3 } top level, PrimitiveBreakdown { triangles: 4, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 3 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:61e4350a67ec8255 camera=2:61e4350a67ec8255 shadow=2:61e4350a67ec8255 indirect=2:61e4350a67ec8255 +geom 1: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:802f8cea72d34ba8 camera=2:802f8cea72d34ba8 shadow=2:802f8cea72d34ba8 indirect=2:802f8cea72d34ba8 +geom 2: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:6b2659e60b0616d8 camera=2:6b2659e60b0616d8 shadow=2:6b2659e60b0616d8 indirect=2:6b2659e60b0616d8 +geom 3: material #1 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:61e4350a67ec8255 camera=2:61e4350a67ec8255 shadow=2:61e4350a67ec8255 indirect=2:61e4350a67ec8255 +provenance material /LeafAsset/Looks/Green: MaterialOrigin { slots: [3], displaced: false } +provenance material /World/Leaves/Prototypes/Leaf/Looks/Green: MaterialOrigin { slots: [0, 1, 2], displaced: false } +provenance material read: ("/LeafAsset/Looks/Green", "/World/Leaves/Prototypes/Leaf/Looks/Green") +provenance material read: ("/LeafAsset/Looks/Green/Surface", "/World/Leaves/Prototypes/Leaf/Looks/Green") +provenance geometry 0..3: /World/Leaves +provenance geometry 3..4: /LeafAsset/Geo +provenance mesh: MeshOrigin { geom_id: 3, slot: 1, baked: true, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 11573210918765220906, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 0 }), placements: 0, shared: true, displaced: false } +provenance mesh slot 1: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 11573210918765220906, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 1 }), placements: 1, shared: false, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/World/Cam"), cameras: ["/World/Cam"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/World/Cam"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/bound_instanced_prototype_usda-bb6c56b87e0b6d66-1.image b/crates/crust-core/tests/data/import_baselines/bound_instanced_prototype_usda-bb6c56b87e0b6d66-1.image new file mode 100644 index 000000000..c734c5b1d --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/bound_instanced_prototype_usda-bb6c56b87e0b6d66-1.image @@ -0,0 +1 @@ +640x360 16spp clamp-off a04a09c0d4b5e325 diff --git a/crates/crust-core/tests/data/import_baselines/boundary_usda-85fcb2406c56d725-1.digest b/crates/crust-core/tests/data/import_baselines/boundary_usda-85fcb2406c56d725-1.digest new file mode 100644 index 000000000..4895f97e8 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/boundary_usda-85fcb2406c56d725-1.digest @@ -0,0 +1,22 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: None +camera: Camera { origin: Vec3A(15.0, 3.0, 3.0), lower_left_corner: Vec3A(4.8863316, -0.044797063, 4.174048), horizontal: Vec3A(1.2295314, 0.0, -6.147657), vertical: Vec3A(-0.44830504, 3.4967792, -0.08966101), u: Vec3A(0.19611613, 0.0, -0.9805807), v: Vec3A(-0.1271232, 0.991561, -0.02542464), lens_radius: 0.05, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: None +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 640, height: 360, region: PixelRect { x0: 0, y0: 0, x1: 640, y1: 360 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: None, depth_of_field: true, motion_blur: false, layer_stack: ["$DIR/boundary.usda"], invisible_overrides: Some(0) } +layer: $DIR/boundary.usda +warning: Warning { code: CameraMissing, kind: Skipped, count: 1, prims: [], message: "USD stage has no UsdGeomCamera — falling back to world::get_settings camera" } +lights: 1 +light 0: dome name Some("/World/Sky") lpe None pmf 1.0 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 1 geometries, PrimitiveBreakdown { triangles: 0, spheres: 1, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 0, spheres: 1, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +geom 0: material #0 Signature { kind: "MaterialX", cutout: false, straight: false, boundary: true, emits: false, uv: true, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:fb1e7d48790aec95 camera=1:fb1e7d48790aec95 shadow=1:fb1e7d48790aec95 indirect=1:fb1e7d48790aec95 +provenance material /World/Fog: MaterialOrigin { slots: [0], displaced: false } +provenance light /World/Sky: LightOrigin { index: 0, geoms: 0..0 } +provenance geometry 0..1: /World/Ball +provenance spheres: [0] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: None, cameras: [], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: None, offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/boundary_usda-85fcb2406c56d725-1.image b/crates/crust-core/tests/data/import_baselines/boundary_usda-85fcb2406c56d725-1.image new file mode 100644 index 000000000..0247ded27 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/boundary_usda-85fcb2406c56d725-1.image @@ -0,0 +1 @@ +640x360 16spp clamp-off 04d1252637e88ed3 diff --git a/crates/crust-core/tests/data/import_baselines/broken_materials_usda-040c16d0365cbc63-1.digest b/crates/crust-core/tests/data/import_baselines/broken_materials_usda-040c16d0365cbc63-1.digest new file mode 100644 index 000000000..4c090a95e --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/broken_materials_usda-040c16d0365cbc63-1.digest @@ -0,0 +1,23 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/World/cam") +camera: Camera { origin: Vec3A(0.0, 0.0, 0.0), lower_left_corner: Vec3A(-2.7183647, -1.5290802, -10.0), horizontal: Vec3A(5.4367294, 0.0, 0.0), vertical: Vec3A(0.0, 3.0581603, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: None +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 640, height: 360, region: PixelRect { x0: 0, y0: 0, x1: 640, y1: 360 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 50.0, aperture: [20.955, 15.2908], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 10.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/broken_materials.usda"], invisible_overrides: Some(0) } +layer: $DIR/broken_materials.usda +warning: Warning { code: MaterialFallbackDefault, kind: Skipped, count: 2, prims: ["/World/Empty", "/World/Alien"], message: "Material /World/Empty has no surface shader — using default grey OpenPBR" } +lights: 0 +volumes: 0 +world: 2 geometries, PrimitiveBreakdown { triangles: 0, spheres: 2, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 0, spheres: 2, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:fb1e7d48790aec95 camera=1:fb1e7d48790aec95 shadow=1:fb1e7d48790aec95 indirect=1:fb1e7d48790aec95 +geom 1: material #1 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:fb1e7d48790aec95 camera=1:fb1e7d48790aec95 shadow=1:fb1e7d48790aec95 indirect=1:fb1e7d48790aec95 +provenance material /World/Alien: MaterialOrigin { slots: [1], displaced: false } +provenance material /World/Empty: MaterialOrigin { slots: [0], displaced: false } +provenance geometry 0..1: /World/a +provenance geometry 1..2: /World/b +provenance spheres: [0, 1] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/World/cam"), cameras: ["/World/cam"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/World/cam"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/broken_materials_usda-040c16d0365cbc63-1.image b/crates/crust-core/tests/data/import_baselines/broken_materials_usda-040c16d0365cbc63-1.image new file mode 100644 index 000000000..c734c5b1d --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/broken_materials_usda-040c16d0365cbc63-1.image @@ -0,0 +1 @@ +640x360 16spp clamp-off a04a09c0d4b5e325 diff --git a/crates/crust-core/tests/data/import_baselines/broken_mesh_usda-217190c267ddf4a1-1.digest b/crates/crust-core/tests/data/import_baselines/broken_mesh_usda-217190c267ddf4a1-1.digest new file mode 100644 index 000000000..f0fb66160 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/broken_mesh_usda-217190c267ddf4a1-1.digest @@ -0,0 +1,19 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: None +camera: Camera { origin: Vec3A(15.0, 3.0, 3.0), lower_left_corner: Vec3A(4.8863316, -0.044797063, 4.174048), horizontal: Vec3A(1.2295314, 0.0, -6.147657), vertical: Vec3A(-0.44830504, 3.4967792, -0.08966101), u: Vec3A(0.19611613, 0.0, -0.9805807), v: Vec3A(-0.1271232, 0.991561, -0.02542464), lens_radius: 0.05, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: None +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 640, height: 360, region: PixelRect { x0: 0, y0: 0, x1: 640, y1: 360 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: None, depth_of_field: true, motion_blur: false, layer_stack: ["$DIR/broken_mesh.usda"], invisible_overrides: Some(0) } +layer: $DIR/broken_mesh.usda +warning: Warning { code: CameraMissing, kind: Skipped, count: 1, prims: [], message: "USD stage has no UsdGeomCamera — falling back to world::get_settings camera" } +lights: 0 +volumes: 0 +world: 1 geometries, PrimitiveBreakdown { triangles: 0, spheres: 1, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 0, spheres: 1, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:fb1e7d48790aec95 camera=1:fb1e7d48790aec95 shadow=1:fb1e7d48790aec95 indirect=1:fb1e7d48790aec95 +provenance geometry 0..1: /World/Ok +provenance spheres: [0] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: None, cameras: [], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: None, offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/broken_mesh_usda-217190c267ddf4a1-1.image b/crates/crust-core/tests/data/import_baselines/broken_mesh_usda-217190c267ddf4a1-1.image new file mode 100644 index 000000000..c734c5b1d --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/broken_mesh_usda-217190c267ddf4a1-1.image @@ -0,0 +1 @@ +640x360 16spp clamp-off a04a09c0d4b5e325 diff --git a/crates/crust-core/tests/data/import_baselines/cage_three_usda-65204db7a7ccaed8-1.digest b/crates/crust-core/tests/data/import_baselines/cage_three_usda-65204db7a7ccaed8-1.digest new file mode 100644 index 000000000..e48da2d2c --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/cage_three_usda-65204db7a7ccaed8-1.digest @@ -0,0 +1,31 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: None +camera: Camera { origin: Vec3A(15.0, 3.0, 3.0), lower_left_corner: Vec3A(4.8863316, -0.044797063, 4.174048), horizontal: Vec3A(1.2295314, 0.0, -6.147657), vertical: Vec3A(-0.44830504, 3.4967792, -0.08966101), u: Vec3A(0.19611613, 0.0, -0.9805807), v: Vec3A(-0.1271232, 0.991561, -0.02542464), lens_radius: 0.05, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: None +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 640, height: 360, region: PixelRect { x0: 0, y0: 0, x1: 640, y1: 360 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: None, depth_of_field: true, motion_blur: false, layer_stack: ["$DIR/cage_three.usda"], invisible_overrides: Some(0) } +layer: $DIR/cage_three.usda +warning: Warning { code: MeshDisplacedAtCage, kind: Approximated, count: 3, prims: ["/World/Geo/C", "/World/Geo/B", "/World/Geo/A"], message: "Mesh at /World/Geo/C is displaced at its cage resolution, so only cage vertices move — raise --subdiv-level or set --subdiv-edge-length to dice it finer (further occurrences are counted in the import's warnings)" } +warning: Warning { code: CameraMissing, kind: Skipped, count: 1, prims: [], message: "USD stage has no UsdGeomCamera — falling back to world::get_settings camera" } +lights: 0 +volumes: 0 +world: 3 geometries, PrimitiveBreakdown { triangles: 6, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 6, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:81959c020ab9ceb1 camera=2:81959c020ab9ceb1 shadow=2:81959c020ab9ceb1 indirect=2:81959c020ab9ceb1 +geom 1: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:1577b24741d25eb1 camera=2:1577b24741d25eb1 shadow=2:1577b24741d25eb1 indirect=2:1577b24741d25eb1 +geom 2: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:1544d80c71da0331 camera=2:1544d80c71da0331 shadow=2:1544d80c71da0331 indirect=2:1544d80c71da0331 +provenance material /World/Height: MaterialOrigin { slots: [0, 1, 2], displaced: true } +provenance geometry 0..1: /World/Geo/C +provenance geometry 1..2: /World/Geo/B +provenance geometry 2..3: /World/Geo/A +provenance mesh: MeshOrigin { geom_id: 0, slot: 0, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 1, slot: 1, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 2, slot: 2, baked: true, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 9212292991607620213, n_points: 4, n_indices: 4, n_uvs: Some(4), smooth: true, material: 0 }), placements: 1, shared: false, displaced: true } +provenance mesh slot 1: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 14276920328025598633, n_points: 4, n_indices: 4, n_uvs: Some(4), smooth: true, material: 0 }), placements: 1, shared: false, displaced: true } +provenance mesh slot 2: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 6133730724842206255, n_points: 4, n_indices: 4, n_uvs: Some(4), smooth: true, material: 0 }), placements: 1, shared: false, displaced: true } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: Some(0), subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: None, cameras: [], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: None, offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/cage_three_usda-65204db7a7ccaed8-1.image b/crates/crust-core/tests/data/import_baselines/cage_three_usda-65204db7a7ccaed8-1.image new file mode 100644 index 000000000..c734c5b1d --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/cage_three_usda-65204db7a7ccaed8-1.image @@ -0,0 +1 @@ +640x360 16spp clamp-off a04a09c0d4b5e325 diff --git a/crates/crust-core/tests/data/import_baselines/cam__W_B_usda-1827f96f8b5d0db1-1.digest b/crates/crust-core/tests/data/import_baselines/cam__W_B_usda-1827f96f8b5d0db1-1.digest new file mode 100644 index 000000000..5c1ffce6e --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/cam__W_B_usda-1827f96f8b5d0db1-1.digest @@ -0,0 +1,16 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/W/A") +camera: Camera { origin: Vec3A(0.0, 0.0, 5.0), lower_left_corner: Vec3A(-2.7183647, -1.5290802, -5.0), horizontal: Vec3A(5.4367294, 0.0, 0.0), vertical: Vec3A(0.0, 3.0581603, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: Some("/Render/settings") +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 64, height: 36, region: PixelRect { x0: 0, y0: 0, x1: 64, y1: 36 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 50.0, aperture: [20.955, 15.2908], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 10.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/cam__W_B.usda"], invisible_overrides: Some(0) } +layer: $DIR/cam__W_B.usda +lights: 0 +volumes: 0 +world: 0 geometries, PrimitiveBreakdown { triangles: 0, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 0, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: Some("/W/A"), subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/W/A"), cameras: ["/W/B", "/W/A"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/W/A"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/cam__W_B_usda-1827f96f8b5d0db1-1.image b/crates/crust-core/tests/data/import_baselines/cam__W_B_usda-1827f96f8b5d0db1-1.image new file mode 100644 index 000000000..f4ebc1648 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/cam__W_B_usda-1827f96f8b5d0db1-1.image @@ -0,0 +1 @@ +64x36 16spp clamp-off 1028d44458cc9325 diff --git a/crates/crust-core/tests/data/import_baselines/cam__W_B_usda-1827f96f8b5d0db1-2.digest b/crates/crust-core/tests/data/import_baselines/cam__W_B_usda-1827f96f8b5d0db1-2.digest new file mode 100644 index 000000000..5c1ffce6e --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/cam__W_B_usda-1827f96f8b5d0db1-2.digest @@ -0,0 +1,16 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/W/A") +camera: Camera { origin: Vec3A(0.0, 0.0, 5.0), lower_left_corner: Vec3A(-2.7183647, -1.5290802, -5.0), horizontal: Vec3A(5.4367294, 0.0, 0.0), vertical: Vec3A(0.0, 3.0581603, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: Some("/Render/settings") +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 64, height: 36, region: PixelRect { x0: 0, y0: 0, x1: 64, y1: 36 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 50.0, aperture: [20.955, 15.2908], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 10.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/cam__W_B.usda"], invisible_overrides: Some(0) } +layer: $DIR/cam__W_B.usda +lights: 0 +volumes: 0 +world: 0 geometries, PrimitiveBreakdown { triangles: 0, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 0, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: Some("/W/A"), subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/W/A"), cameras: ["/W/B", "/W/A"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/W/A"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/cam__W_B_usda-1827f96f8b5d0db1-2.image b/crates/crust-core/tests/data/import_baselines/cam__W_B_usda-1827f96f8b5d0db1-2.image new file mode 100644 index 000000000..f4ebc1648 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/cam__W_B_usda-1827f96f8b5d0db1-2.image @@ -0,0 +1 @@ +64x36 16spp clamp-off 1028d44458cc9325 diff --git a/crates/crust-core/tests/data/import_baselines/cam__W_B_usda-7a2f1b2d8ea63036-1.digest b/crates/crust-core/tests/data/import_baselines/cam__W_B_usda-7a2f1b2d8ea63036-1.digest new file mode 100644 index 000000000..9da28e9b0 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/cam__W_B_usda-7a2f1b2d8ea63036-1.digest @@ -0,0 +1,16 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/W/B") +camera: Camera { origin: Vec3A(10.0, 0.0, 5.0), lower_left_corner: Vec3A(7.2816353, -1.5290802, -5.0), horizontal: Vec3A(5.4367294, 0.0, 0.0), vertical: Vec3A(0.0, 3.0581603, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: Some("/Render/settings") +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 64, height: 36, region: PixelRect { x0: 0, y0: 0, x1: 64, y1: 36 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 50.0, aperture: [20.955, 15.2908], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 10.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/cam__W_B.usda"], invisible_overrides: Some(0) } +layer: $DIR/cam__W_B.usda +lights: 0 +volumes: 0 +world: 0 geometries, PrimitiveBreakdown { triangles: 0, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 0, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/W/B"), cameras: ["/W/B", "/W/A"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/W/B"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/cam__W_B_usda-7a2f1b2d8ea63036-1.image b/crates/crust-core/tests/data/import_baselines/cam__W_B_usda-7a2f1b2d8ea63036-1.image new file mode 100644 index 000000000..f4ebc1648 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/cam__W_B_usda-7a2f1b2d8ea63036-1.image @@ -0,0 +1 @@ +64x36 16spp clamp-off 1028d44458cc9325 diff --git a/crates/crust-core/tests/data/import_baselines/cam__W_B_usda-7a2f1b2d8ea63036-2.digest b/crates/crust-core/tests/data/import_baselines/cam__W_B_usda-7a2f1b2d8ea63036-2.digest new file mode 100644 index 000000000..9da28e9b0 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/cam__W_B_usda-7a2f1b2d8ea63036-2.digest @@ -0,0 +1,16 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/W/B") +camera: Camera { origin: Vec3A(10.0, 0.0, 5.0), lower_left_corner: Vec3A(7.2816353, -1.5290802, -5.0), horizontal: Vec3A(5.4367294, 0.0, 0.0), vertical: Vec3A(0.0, 3.0581603, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: Some("/Render/settings") +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 64, height: 36, region: PixelRect { x0: 0, y0: 0, x1: 64, y1: 36 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 50.0, aperture: [20.955, 15.2908], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 10.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/cam__W_B.usda"], invisible_overrides: Some(0) } +layer: $DIR/cam__W_B.usda +lights: 0 +volumes: 0 +world: 0 geometries, PrimitiveBreakdown { triangles: 0, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 0, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/W/B"), cameras: ["/W/B", "/W/A"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/W/B"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/cam__W_B_usda-7a2f1b2d8ea63036-2.image b/crates/crust-core/tests/data/import_baselines/cam__W_B_usda-7a2f1b2d8ea63036-2.image new file mode 100644 index 000000000..f4ebc1648 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/cam__W_B_usda-7a2f1b2d8ea63036-2.image @@ -0,0 +1 @@ +64x36 16spp clamp-off 1028d44458cc9325 diff --git a/crates/crust-core/tests/data/import_baselines/cam__W_Nope_usda-a6a9c22824149e8e-1.digest b/crates/crust-core/tests/data/import_baselines/cam__W_Nope_usda-a6a9c22824149e8e-1.digest new file mode 100644 index 000000000..931f5341d --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/cam__W_Nope_usda-a6a9c22824149e8e-1.digest @@ -0,0 +1,17 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/W/B") +camera: Camera { origin: Vec3A(10.0, 0.0, 5.0), lower_left_corner: Vec3A(7.2816353, -1.5290802, -5.0), horizontal: Vec3A(5.4367294, 0.0, 0.0), vertical: Vec3A(0.0, 3.0581603, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: Some("/Render/settings") +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 64, height: 36, region: PixelRect { x0: 0, y0: 0, x1: 64, y1: 36 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 50.0, aperture: [20.955, 15.2908], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 10.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/cam__W_Nope.usda"], invisible_overrides: Some(0) } +layer: $DIR/cam__W_Nope.usda +warning: Warning { code: CameraNotACamera, kind: Refused, count: 1, prims: ["/W/Nope"], message: "RenderSettings.camera targets /W/Nope, which is not a camera on this stage — rendering through /W/B instead" } +lights: 0 +volumes: 0 +world: 0 geometries, PrimitiveBreakdown { triangles: 0, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 0, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/W/B"), cameras: ["/W/B", "/W/A"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/W/B"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/cam__W_Nope_usda-a6a9c22824149e8e-1.image b/crates/crust-core/tests/data/import_baselines/cam__W_Nope_usda-a6a9c22824149e8e-1.image new file mode 100644 index 000000000..f4ebc1648 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/cam__W_Nope_usda-a6a9c22824149e8e-1.image @@ -0,0 +1 @@ +64x36 16spp clamp-off 1028d44458cc9325 diff --git a/crates/crust-core/tests/data/import_baselines/cam__W_Nope_usda-a6a9c22824149e8e-2.digest b/crates/crust-core/tests/data/import_baselines/cam__W_Nope_usda-a6a9c22824149e8e-2.digest new file mode 100644 index 000000000..931f5341d --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/cam__W_Nope_usda-a6a9c22824149e8e-2.digest @@ -0,0 +1,17 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/W/B") +camera: Camera { origin: Vec3A(10.0, 0.0, 5.0), lower_left_corner: Vec3A(7.2816353, -1.5290802, -5.0), horizontal: Vec3A(5.4367294, 0.0, 0.0), vertical: Vec3A(0.0, 3.0581603, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: Some("/Render/settings") +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 64, height: 36, region: PixelRect { x0: 0, y0: 0, x1: 64, y1: 36 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 50.0, aperture: [20.955, 15.2908], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 10.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/cam__W_Nope.usda"], invisible_overrides: Some(0) } +layer: $DIR/cam__W_Nope.usda +warning: Warning { code: CameraNotACamera, kind: Refused, count: 1, prims: ["/W/Nope"], message: "RenderSettings.camera targets /W/Nope, which is not a camera on this stage — rendering through /W/B instead" } +lights: 0 +volumes: 0 +world: 0 geometries, PrimitiveBreakdown { triangles: 0, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 0, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/W/B"), cameras: ["/W/B", "/W/A"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/W/B"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/cam__W_Nope_usda-a6a9c22824149e8e-2.image b/crates/crust-core/tests/data/import_baselines/cam__W_Nope_usda-a6a9c22824149e8e-2.image new file mode 100644 index 000000000..f4ebc1648 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/cam__W_Nope_usda-a6a9c22824149e8e-2.image @@ -0,0 +1 @@ +64x36 16spp clamp-off 1028d44458cc9325 diff --git a/crates/crust-core/tests/data/import_baselines/cam__W_Nope_usda-a6a9c22824149e8e-3.digest b/crates/crust-core/tests/data/import_baselines/cam__W_Nope_usda-a6a9c22824149e8e-3.digest new file mode 100644 index 000000000..931f5341d --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/cam__W_Nope_usda-a6a9c22824149e8e-3.digest @@ -0,0 +1,17 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/W/B") +camera: Camera { origin: Vec3A(10.0, 0.0, 5.0), lower_left_corner: Vec3A(7.2816353, -1.5290802, -5.0), horizontal: Vec3A(5.4367294, 0.0, 0.0), vertical: Vec3A(0.0, 3.0581603, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: Some("/Render/settings") +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 64, height: 36, region: PixelRect { x0: 0, y0: 0, x1: 64, y1: 36 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 50.0, aperture: [20.955, 15.2908], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 10.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/cam__W_Nope.usda"], invisible_overrides: Some(0) } +layer: $DIR/cam__W_Nope.usda +warning: Warning { code: CameraNotACamera, kind: Refused, count: 1, prims: ["/W/Nope"], message: "RenderSettings.camera targets /W/Nope, which is not a camera on this stage — rendering through /W/B instead" } +lights: 0 +volumes: 0 +world: 0 geometries, PrimitiveBreakdown { triangles: 0, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 0, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/W/B"), cameras: ["/W/B", "/W/A"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/W/B"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/cam__W_Nope_usda-a6a9c22824149e8e-3.image b/crates/crust-core/tests/data/import_baselines/cam__W_Nope_usda-a6a9c22824149e8e-3.image new file mode 100644 index 000000000..f4ebc1648 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/cam__W_Nope_usda-a6a9c22824149e8e-3.image @@ -0,0 +1 @@ +64x36 16spp clamp-off 1028d44458cc9325 diff --git a/crates/crust-core/tests/data/import_baselines/cam_narrow_usda-dcae36868790f279-1.digest b/crates/crust-core/tests/data/import_baselines/cam_narrow_usda-dcae36868790f279-1.digest new file mode 100644 index 000000000..c1060c608 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/cam_narrow_usda-dcae36868790f279-1.digest @@ -0,0 +1,16 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/World/Cam") +camera: Camera { origin: Vec3A(0.0, 0.0, 0.0), lower_left_corner: Vec3A(-1.0, -0.5625, -10.0), horizontal: Vec3A(2.0, 0.0, 0.0), vertical: Vec3A(0.0, 1.125, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: None +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 640, height: 360, region: PixelRect { x0: 0, y0: 0, x1: 640, y1: 360 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 50.0, aperture: [10.0, 5.0], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 10.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/cam_narrow.usda"], invisible_overrides: Some(0) } +layer: $DIR/cam_narrow.usda +lights: 0 +volumes: 0 +world: 0 geometries, PrimitiveBreakdown { triangles: 0, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 0, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/World/Cam"), cameras: ["/World/Cam"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/World/Cam"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/cam_narrow_usda-dcae36868790f279-1.image b/crates/crust-core/tests/data/import_baselines/cam_narrow_usda-dcae36868790f279-1.image new file mode 100644 index 000000000..c734c5b1d --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/cam_narrow_usda-dcae36868790f279-1.image @@ -0,0 +1 @@ +640x360 16spp clamp-off a04a09c0d4b5e325 diff --git a/crates/crust-core/tests/data/import_baselines/cam_none_usda-1ef9fbd129b9560a-1.digest b/crates/crust-core/tests/data/import_baselines/cam_none_usda-1ef9fbd129b9560a-1.digest new file mode 100644 index 000000000..aa822f30e --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/cam_none_usda-1ef9fbd129b9560a-1.digest @@ -0,0 +1,16 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/W/A") +camera: Camera { origin: Vec3A(0.0, 0.0, 5.0), lower_left_corner: Vec3A(-2.7183647, -1.5290802, -5.0), horizontal: Vec3A(5.4367294, 0.0, 0.0), vertical: Vec3A(0.0, 3.0581603, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: Some("/Render/settings") +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 64, height: 36, region: PixelRect { x0: 0, y0: 0, x1: 64, y1: 36 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 50.0, aperture: [20.955, 15.2908], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 10.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/cam_none.usda"], invisible_overrides: Some(0) } +layer: $DIR/cam_none.usda +lights: 0 +volumes: 0 +world: 0 geometries, PrimitiveBreakdown { triangles: 0, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 0, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: Some("/W/A"), subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/W/A"), cameras: ["/W/B", "/W/A"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/W/A"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/cam_none_usda-1ef9fbd129b9560a-1.image b/crates/crust-core/tests/data/import_baselines/cam_none_usda-1ef9fbd129b9560a-1.image new file mode 100644 index 000000000..f4ebc1648 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/cam_none_usda-1ef9fbd129b9560a-1.image @@ -0,0 +1 @@ +64x36 16spp clamp-off 1028d44458cc9325 diff --git a/crates/crust-core/tests/data/import_baselines/cam_none_usda-2cb27e460ee10e43-1.digest b/crates/crust-core/tests/data/import_baselines/cam_none_usda-2cb27e460ee10e43-1.digest new file mode 100644 index 000000000..e820afd2f --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/cam_none_usda-2cb27e460ee10e43-1.digest @@ -0,0 +1,16 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/W/B") +camera: Camera { origin: Vec3A(10.0, 0.0, 5.0), lower_left_corner: Vec3A(7.2816353, -1.5290802, -5.0), horizontal: Vec3A(5.4367294, 0.0, 0.0), vertical: Vec3A(0.0, 3.0581603, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: Some("/Render/settings") +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 64, height: 36, region: PixelRect { x0: 0, y0: 0, x1: 64, y1: 36 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 50.0, aperture: [20.955, 15.2908], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 10.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/cam_none.usda"], invisible_overrides: Some(0) } +layer: $DIR/cam_none.usda +lights: 0 +volumes: 0 +world: 0 geometries, PrimitiveBreakdown { triangles: 0, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 0, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: Some("/W/B"), subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/W/B"), cameras: ["/W/B", "/W/A"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/W/B"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/cam_none_usda-2cb27e460ee10e43-1.image b/crates/crust-core/tests/data/import_baselines/cam_none_usda-2cb27e460ee10e43-1.image new file mode 100644 index 000000000..f4ebc1648 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/cam_none_usda-2cb27e460ee10e43-1.image @@ -0,0 +1 @@ +64x36 16spp clamp-off 1028d44458cc9325 diff --git a/crates/crust-core/tests/data/import_baselines/cam_wide_usda-098c8afc4872dbb7-1.digest b/crates/crust-core/tests/data/import_baselines/cam_wide_usda-098c8afc4872dbb7-1.digest new file mode 100644 index 000000000..8dd2e4994 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/cam_wide_usda-098c8afc4872dbb7-1.digest @@ -0,0 +1,16 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/World/Cam") +camera: Camera { origin: Vec3A(0.0, 0.0, 0.0), lower_left_corner: Vec3A(-4.0, -2.25, -10.0), horizontal: Vec3A(8.0, 0.0, 0.0), vertical: Vec3A(0.0, 4.5, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: None +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 640, height: 360, region: PixelRect { x0: 0, y0: 0, x1: 640, y1: 360 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 50.0, aperture: [40.0, 20.0], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 10.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/cam_wide.usda"], invisible_overrides: Some(0) } +layer: $DIR/cam_wide.usda +lights: 0 +volumes: 0 +world: 0 geometries, PrimitiveBreakdown { triangles: 0, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 0, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/World/Cam"), cameras: ["/World/Cam"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/World/Cam"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/cam_wide_usda-098c8afc4872dbb7-1.image b/crates/crust-core/tests/data/import_baselines/cam_wide_usda-098c8afc4872dbb7-1.image new file mode 100644 index 000000000..c734c5b1d --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/cam_wide_usda-098c8afc4872dbb7-1.image @@ -0,0 +1 @@ +640x360 16spp clamp-off a04a09c0d4b5e325 diff --git a/crates/crust-core/tests/data/import_baselines/camera_dof_usda-f69bc93db8900a0e-1.digest b/crates/crust-core/tests/data/import_baselines/camera_dof_usda-f69bc93db8900a0e-1.digest new file mode 100644 index 000000000..adee31fd1 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/camera_dof_usda-f69bc93db8900a0e-1.digest @@ -0,0 +1,16 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/World/Cam") +camera: Camera { origin: Vec3A(0.0, 0.0, 5.0), lower_left_corner: Vec3A(-1.3591824, -0.7645401, 0.0), horizontal: Vec3A(2.7183647, 0.0, 0.0), vertical: Vec3A(0.0, 1.5290802, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 1.25, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: None +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 640, height: 360, region: PixelRect { x0: 0, y0: 0, x1: 640, y1: 360 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 50.0, aperture: [20.955, 15.2908], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 2.0, focus_distance: 5.0 }), depth_of_field: true, motion_blur: false, layer_stack: ["$DIR/camera_dof.usda"], invisible_overrides: Some(0) } +layer: $DIR/camera_dof.usda +lights: 0 +volumes: 0 +world: 0 geometries, PrimitiveBreakdown { triangles: 0, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 0, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/World/Cam"), cameras: ["/World/Cam"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/World/Cam"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/camera_dof_usda-f69bc93db8900a0e-1.image b/crates/crust-core/tests/data/import_baselines/camera_dof_usda-f69bc93db8900a0e-1.image new file mode 100644 index 000000000..c734c5b1d --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/camera_dof_usda-f69bc93db8900a0e-1.image @@ -0,0 +1 @@ +640x360 16spp clamp-off a04a09c0d4b5e325 diff --git a/crates/crust-core/tests/data/import_baselines/camera_ortho_usda-21d5879ec7de6dbf-1.digest b/crates/crust-core/tests/data/import_baselines/camera_ortho_usda-21d5879ec7de6dbf-1.digest new file mode 100644 index 000000000..ea702a9b5 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/camera_ortho_usda-21d5879ec7de6dbf-1.digest @@ -0,0 +1,18 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/World/top") +camera: Camera { origin: Vec3A(0.0, 0.0, 20.0), lower_left_corner: Vec3A(-5.0, -5.0, 20.0), horizontal: Vec3A(10.0, 0.0, 0.0), vertical: Vec3A(0.0, 10.0, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: true, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: Some("/Render/settings") +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 64, height: 64, region: PixelRect { x0: 0, y0: 0, x1: 64, y1: 64 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 35.0, aperture: [100.0, 100.0], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 2.0, focus_distance: 5.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/camera_ortho.usda"], invisible_overrides: Some(0) } +layer: $DIR/camera_ortho.usda +lights: 0 +volumes: 0 +world: 1 geometries, PrimitiveBreakdown { triangles: 0, spheres: 1, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 0, spheres: 1, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:984632b55acb5495 camera=1:984632b55acb5495 shadow=1:984632b55acb5495 indirect=1:984632b55acb5495 +provenance geometry 0..1: /World/Ball +provenance spheres: [0] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/World/top"), cameras: ["/World/top"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/World/top"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/camera_ortho_usda-21d5879ec7de6dbf-1.image b/crates/crust-core/tests/data/import_baselines/camera_ortho_usda-21d5879ec7de6dbf-1.image new file mode 100644 index 000000000..aac9ec548 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/camera_ortho_usda-21d5879ec7de6dbf-1.image @@ -0,0 +1 @@ +64x64 16spp clamp-off 68c00ea49d512325 diff --git a/crates/crust-core/tests/data/import_baselines/camera_projection_unknown_usda-8a8cac00719054ad-1.digest b/crates/crust-core/tests/data/import_baselines/camera_projection_unknown_usda-8a8cac00719054ad-1.digest new file mode 100644 index 000000000..74e9b4b7b --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/camera_projection_unknown_usda-8a8cac00719054ad-1.digest @@ -0,0 +1,16 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/World/Cam") +camera: Camera { origin: Vec3A(0.0, 0.0, 0.0), lower_left_corner: Vec3A(-2.7183647, -1.5290802, -10.0), horizontal: Vec3A(5.4367294, 0.0, 0.0), vertical: Vec3A(0.0, 3.0581603, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: None +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 640, height: 360, region: PixelRect { x0: 0, y0: 0, x1: 640, y1: 360 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 50.0, aperture: [20.955, 15.2908], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 10.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/camera_projection_unknown.usda"], invisible_overrides: Some(0) } +layer: $DIR/camera_projection_unknown.usda +lights: 0 +volumes: 0 +world: 0 geometries, PrimitiveBreakdown { triangles: 0, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 0, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/World/Cam"), cameras: ["/World/Cam"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/World/Cam"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/camera_projection_unknown_usda-8a8cac00719054ad-1.image b/crates/crust-core/tests/data/import_baselines/camera_projection_unknown_usda-8a8cac00719054ad-1.image new file mode 100644 index 000000000..c734c5b1d --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/camera_projection_unknown_usda-8a8cac00719054ad-1.image @@ -0,0 +1 @@ +640x360 16spp clamp-off a04a09c0d4b5e325 diff --git a/crates/crust-core/tests/data/import_baselines/camera_rot_usda-c74e88c7205b56e5-1.digest b/crates/crust-core/tests/data/import_baselines/camera_rot_usda-c74e88c7205b56e5-1.digest new file mode 100644 index 000000000..ae96aa02b --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/camera_rot_usda-c74e88c7205b56e5-1.digest @@ -0,0 +1,16 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/World/Cam") +camera: Camera { origin: Vec3A(0.0, 0.0, 0.0), lower_left_corner: Vec3A(10.0, -1.5290802, -2.7183647), horizontal: Vec3A(1.2071964e-15, -0.0, 5.4367294), vertical: Vec3A(0.0, 3.0581603, 0.0), u: Vec3A(2.220446e-16, -0.0, 1.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: None +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 640, height: 360, region: PixelRect { x0: 0, y0: 0, x1: 640, y1: 360 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 50.0, aperture: [20.955, 15.2908], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 10.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/camera_rot.usda"], invisible_overrides: Some(0) } +layer: $DIR/camera_rot.usda +lights: 0 +volumes: 0 +world: 0 geometries, PrimitiveBreakdown { triangles: 0, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 0, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/World/Cam"), cameras: ["/World/Cam"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/World/Cam"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/camera_rot_usda-c74e88c7205b56e5-1.image b/crates/crust-core/tests/data/import_baselines/camera_rot_usda-c74e88c7205b56e5-1.image new file mode 100644 index 000000000..c734c5b1d --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/camera_rot_usda-c74e88c7205b56e5-1.image @@ -0,0 +1 @@ +640x360 16spp clamp-off a04a09c0d4b5e325 diff --git a/crates/crust-core/tests/data/import_baselines/camera_usda-2d8f34945903545d-1.digest b/crates/crust-core/tests/data/import_baselines/camera_usda-2d8f34945903545d-1.digest new file mode 100644 index 000000000..ddacf1095 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/camera_usda-2d8f34945903545d-1.digest @@ -0,0 +1,18 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/World/Cam") +camera: Camera { origin: Vec3A(0.0, 0.0, 5.0), lower_left_corner: Vec3A(-2.7183647, -1.5290802, -5.0), horizontal: Vec3A(5.4367294, 0.0, 0.0), vertical: Vec3A(0.0, 3.0581603, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: None +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 640, height: 360, region: PixelRect { x0: 0, y0: 0, x1: 640, y1: 360 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 50.0, aperture: [20.955, 15.2908], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 10.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/camera.usda"], invisible_overrides: Some(0) } +layer: $DIR/camera.usda +lights: 0 +volumes: 0 +world: 1 geometries, PrimitiveBreakdown { triangles: 0, spheres: 1, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 0, spheres: 1, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:984632b55acb5495 camera=1:984632b55acb5495 shadow=1:984632b55acb5495 indirect=1:984632b55acb5495 +provenance geometry 0..1: /World/Ball +provenance spheres: [0] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/World/Cam"), cameras: ["/World/Cam"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/World/Cam"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/camera_usda-2d8f34945903545d-1.image b/crates/crust-core/tests/data/import_baselines/camera_usda-2d8f34945903545d-1.image new file mode 100644 index 000000000..c734c5b1d --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/camera_usda-2d8f34945903545d-1.image @@ -0,0 +1 @@ +640x360 16spp clamp-off a04a09c0d4b5e325 diff --git a/crates/crust-core/tests/data/import_baselines/camera_visibility_usda-0af373522188190d-1.digest b/crates/crust-core/tests/data/import_baselines/camera_visibility_usda-0af373522188190d-1.digest new file mode 100644 index 000000000..7b7f56655 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/camera_visibility_usda-0af373522188190d-1.digest @@ -0,0 +1,21 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: None +camera: Camera { origin: Vec3A(15.0, 3.0, 3.0), lower_left_corner: Vec3A(4.8863316, -0.044797063, 4.174048), horizontal: Vec3A(1.2295314, 0.0, -6.147657), vertical: Vec3A(-0.44830504, 3.4967792, -0.08966101), u: Vec3A(0.19611613, 0.0, -0.9805807), v: Vec3A(-0.1271232, 0.991561, -0.02542464), lens_radius: 0.05, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: Some("/Render/settings") +settings: RenderSettings { samples_per_pixel: 3, max_depth: 32, width: 8, height: 8, region: PixelRect { x0: 0, y0: 0, x1: 8, y1: 8 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: Some(PassSummary { path: "/Render/Passes/pass", holdouts: 0, camera_hidden: 1 }) +source: Source { lens: None, depth_of_field: true, motion_blur: false, layer_stack: ["$DIR/camera_visibility.usda"], invisible_overrides: Some(0) } +layer: $DIR/camera_visibility.usda +warning: Warning { code: CameraMissing, kind: Skipped, count: 1, prims: [], message: "USD stage has no UsdGeomCamera — falling back to world::get_settings camera" } +lights: 0 +volumes: 0 +world: 2 geometries, PrimitiveBreakdown { triangles: 0, spheres: 2, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 0, spheres: 2, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:468da3d80ce34d98 camera=0:cbf29ce484222325 shadow=1:468da3d80ce34d98 indirect=1:468da3d80ce34d98 +geom 1: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:d23ac7aa026facc8 camera=0:cbf29ce484222325 shadow=1:d23ac7aa026facc8 indirect=1:d23ac7aa026facc8 +provenance geometry 0..1: /World/Masked +provenance geometry 1..2: /World/Blocker +provenance spheres: [0, 1] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: Some("/Render/Passes/pass"), keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: None, cameras: [], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: None, offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/camera_visibility_usda-0af373522188190d-1.image b/crates/crust-core/tests/data/import_baselines/camera_visibility_usda-0af373522188190d-1.image new file mode 100644 index 000000000..8aad9360c --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/camera_visibility_usda-0af373522188190d-1.image @@ -0,0 +1 @@ +8x8 16spp clamp-off 9fa9e040e0eedf25 diff --git a/crates/crust-core/tests/data/import_baselines/camera_visibility_usda-10fe121ff556305f-1.digest b/crates/crust-core/tests/data/import_baselines/camera_visibility_usda-10fe121ff556305f-1.digest new file mode 100644 index 000000000..bc11ae453 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/camera_visibility_usda-10fe121ff556305f-1.digest @@ -0,0 +1,21 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: None +camera: Camera { origin: Vec3A(15.0, 3.0, 3.0), lower_left_corner: Vec3A(4.8863316, -0.044797063, 4.174048), horizontal: Vec3A(1.2295314, 0.0, -6.147657), vertical: Vec3A(-0.44830504, 3.4967792, -0.08966101), u: Vec3A(0.19611613, 0.0, -0.9805807), v: Vec3A(-0.1271232, 0.991561, -0.02542464), lens_radius: 0.05, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: Some("/Render/settings") +settings: RenderSettings { samples_per_pixel: 3, max_depth: 32, width: 8, height: 8, region: PixelRect { x0: 0, y0: 0, x1: 8, y1: 8 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: None, depth_of_field: true, motion_blur: false, layer_stack: ["$DIR/camera_visibility.usda"], invisible_overrides: Some(0) } +layer: $DIR/camera_visibility.usda +warning: Warning { code: CameraMissing, kind: Skipped, count: 1, prims: [], message: "USD stage has no UsdGeomCamera — falling back to world::get_settings camera" } +lights: 0 +volumes: 0 +world: 2 geometries, PrimitiveBreakdown { triangles: 0, spheres: 2, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 0, spheres: 2, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:468da3d80ce34d98 camera=0:cbf29ce484222325 shadow=1:468da3d80ce34d98 indirect=1:468da3d80ce34d98 +geom 1: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:d23ac7aa026facc8 camera=1:d23ac7aa026facc8 shadow=1:d23ac7aa026facc8 indirect=1:d23ac7aa026facc8 +provenance geometry 0..1: /World/Masked +provenance geometry 1..2: /World/Blocker +provenance spheres: [0, 1] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: None, cameras: [], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: None, offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/camera_visibility_usda-10fe121ff556305f-1.image b/crates/crust-core/tests/data/import_baselines/camera_visibility_usda-10fe121ff556305f-1.image new file mode 100644 index 000000000..8aad9360c --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/camera_visibility_usda-10fe121ff556305f-1.image @@ -0,0 +1 @@ +8x8 16spp clamp-off 9fa9e040e0eedf25 diff --git a/crates/crust-core/tests/data/import_baselines/camera_visibility_usda-5198be21d5bb35d1-1.digest b/crates/crust-core/tests/data/import_baselines/camera_visibility_usda-5198be21d5bb35d1-1.digest new file mode 100644 index 000000000..bc11ae453 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/camera_visibility_usda-5198be21d5bb35d1-1.digest @@ -0,0 +1,21 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: None +camera: Camera { origin: Vec3A(15.0, 3.0, 3.0), lower_left_corner: Vec3A(4.8863316, -0.044797063, 4.174048), horizontal: Vec3A(1.2295314, 0.0, -6.147657), vertical: Vec3A(-0.44830504, 3.4967792, -0.08966101), u: Vec3A(0.19611613, 0.0, -0.9805807), v: Vec3A(-0.1271232, 0.991561, -0.02542464), lens_radius: 0.05, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: Some("/Render/settings") +settings: RenderSettings { samples_per_pixel: 3, max_depth: 32, width: 8, height: 8, region: PixelRect { x0: 0, y0: 0, x1: 8, y1: 8 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: None, depth_of_field: true, motion_blur: false, layer_stack: ["$DIR/camera_visibility.usda"], invisible_overrides: Some(0) } +layer: $DIR/camera_visibility.usda +warning: Warning { code: CameraMissing, kind: Skipped, count: 1, prims: [], message: "USD stage has no UsdGeomCamera — falling back to world::get_settings camera" } +lights: 0 +volumes: 0 +world: 2 geometries, PrimitiveBreakdown { triangles: 0, spheres: 2, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 0, spheres: 2, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:468da3d80ce34d98 camera=0:cbf29ce484222325 shadow=1:468da3d80ce34d98 indirect=1:468da3d80ce34d98 +geom 1: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:d23ac7aa026facc8 camera=1:d23ac7aa026facc8 shadow=1:d23ac7aa026facc8 indirect=1:d23ac7aa026facc8 +provenance geometry 0..1: /World/Masked +provenance geometry 1..2: /World/Blocker +provenance spheres: [0, 1] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: None, cameras: [], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: None, offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/camera_visibility_usda-5198be21d5bb35d1-1.image b/crates/crust-core/tests/data/import_baselines/camera_visibility_usda-5198be21d5bb35d1-1.image new file mode 100644 index 000000000..8aad9360c --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/camera_visibility_usda-5198be21d5bb35d1-1.image @@ -0,0 +1 @@ +8x8 16spp clamp-off 9fa9e040e0eedf25 diff --git a/crates/crust-core/tests/data/import_baselines/camera_visibility_usda-a40bd9092e471647-1.digest b/crates/crust-core/tests/data/import_baselines/camera_visibility_usda-a40bd9092e471647-1.digest new file mode 100644 index 000000000..7b7f56655 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/camera_visibility_usda-a40bd9092e471647-1.digest @@ -0,0 +1,21 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: None +camera: Camera { origin: Vec3A(15.0, 3.0, 3.0), lower_left_corner: Vec3A(4.8863316, -0.044797063, 4.174048), horizontal: Vec3A(1.2295314, 0.0, -6.147657), vertical: Vec3A(-0.44830504, 3.4967792, -0.08966101), u: Vec3A(0.19611613, 0.0, -0.9805807), v: Vec3A(-0.1271232, 0.991561, -0.02542464), lens_radius: 0.05, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: Some("/Render/settings") +settings: RenderSettings { samples_per_pixel: 3, max_depth: 32, width: 8, height: 8, region: PixelRect { x0: 0, y0: 0, x1: 8, y1: 8 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: Some(PassSummary { path: "/Render/Passes/pass", holdouts: 0, camera_hidden: 1 }) +source: Source { lens: None, depth_of_field: true, motion_blur: false, layer_stack: ["$DIR/camera_visibility.usda"], invisible_overrides: Some(0) } +layer: $DIR/camera_visibility.usda +warning: Warning { code: CameraMissing, kind: Skipped, count: 1, prims: [], message: "USD stage has no UsdGeomCamera — falling back to world::get_settings camera" } +lights: 0 +volumes: 0 +world: 2 geometries, PrimitiveBreakdown { triangles: 0, spheres: 2, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 0, spheres: 2, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:468da3d80ce34d98 camera=0:cbf29ce484222325 shadow=1:468da3d80ce34d98 indirect=1:468da3d80ce34d98 +geom 1: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:d23ac7aa026facc8 camera=0:cbf29ce484222325 shadow=1:d23ac7aa026facc8 indirect=1:d23ac7aa026facc8 +provenance geometry 0..1: /World/Masked +provenance geometry 1..2: /World/Blocker +provenance spheres: [0, 1] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: Some("/Render/Passes/pass"), keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: None, cameras: [], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: None, offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/camera_visibility_usda-a40bd9092e471647-1.image b/crates/crust-core/tests/data/import_baselines/camera_visibility_usda-a40bd9092e471647-1.image new file mode 100644 index 000000000..8aad9360c --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/camera_visibility_usda-a40bd9092e471647-1.image @@ -0,0 +1 @@ +8x8 16spp clamp-off 9fa9e040e0eedf25 diff --git a/crates/crust-core/tests/data/import_baselines/camera_zero_focus_usda-ad065540da61feb4-1.digest b/crates/crust-core/tests/data/import_baselines/camera_zero_focus_usda-ad065540da61feb4-1.digest new file mode 100644 index 000000000..c989f1ca9 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/camera_zero_focus_usda-ad065540da61feb4-1.digest @@ -0,0 +1,16 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/World/Cam") +camera: Camera { origin: Vec3A(0.0, 0.0, 5.0), lower_left_corner: Vec3A(-0.27183646, -0.15290801, 4.0), horizontal: Vec3A(0.5436729, 0.0, 0.0), vertical: Vec3A(0.0, 0.30581602, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: None +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 640, height: 360, region: PixelRect { x0: 0, y0: 0, x1: 640, y1: 360 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 50.0, aperture: [20.955, 15.2908], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 0.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/camera_zero_focus.usda"], invisible_overrides: Some(0) } +layer: $DIR/camera_zero_focus.usda +lights: 0 +volumes: 0 +world: 0 geometries, PrimitiveBreakdown { triangles: 0, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 0, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/World/Cam"), cameras: ["/World/Cam"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/World/Cam"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/camera_zero_focus_usda-ad065540da61feb4-1.image b/crates/crust-core/tests/data/import_baselines/camera_zero_focus_usda-ad065540da61feb4-1.image new file mode 100644 index 000000000..c734c5b1d --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/camera_zero_focus_usda-ad065540da61feb4-1.image @@ -0,0 +1 @@ +640x360 16spp clamp-off a04a09c0d4b5e325 diff --git a/crates/crust-core/tests/data/import_baselines/capped_usda-de82c45ab5a80eb6-1.digest b/crates/crust-core/tests/data/import_baselines/capped_usda-de82c45ab5a80eb6-1.digest new file mode 100644 index 000000000..3ecd14628 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/capped_usda-de82c45ab5a80eb6-1.digest @@ -0,0 +1,20 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/W/Cam") +camera: Camera { origin: Vec3A(0.0, 0.0, 0.0), lower_left_corner: Vec3A(-2.0955, -1.1787187, -10.0), horizontal: Vec3A(4.191, 0.0, 0.0), vertical: Vec3A(0.0, 2.3574374, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: Some("/Render/settings") +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 640, height: 360, region: PixelRect { x0: 0, y0: 0, x1: 640, y1: 360 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 50.0, aperture: [20.955, 11.787188], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 10.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/capped.usda"], invisible_overrides: Some(0) } +layer: $DIR/capped.usda +lights: 0 +volumes: 0 +world: 1 geometries, PrimitiveBreakdown { triangles: 192, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 192, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=192:1eae59518f3f3e89 camera=192:1eae59518f3f3e89 shadow=192:1eae59518f3f3e89 indirect=192:1eae59518f3f3e89 +provenance geometry 0..1: /W/Near +provenance mesh: MeshOrigin { geom_id: 0, slot: 0, baked: true, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 5078605137533740532, n_points: 98, n_indices: 576, n_uvs: None, smooth: true, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: Some(2), subdivision_edge_length: Some(2.0), skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 2, adaptive: Some(ScreenKey([0, 0, 0, 1153360542, 0, 0, 0, 3212836864, 0, 3193345094, 1065353216, 0, 3193345094, 0, 3212836864, 3186714319, 0, 1065353216, 3186714319, 0, 0, 3212836864, 1073741824, 2])), domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/W/Cam"), cameras: ["/W/Cam"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/W/Cam"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/capped_usda-de82c45ab5a80eb6-1.image b/crates/crust-core/tests/data/import_baselines/capped_usda-de82c45ab5a80eb6-1.image new file mode 100644 index 000000000..c734c5b1d --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/capped_usda-de82c45ab5a80eb6-1.image @@ -0,0 +1 @@ +640x360 16spp clamp-off a04a09c0d4b5e325 diff --git a/crates/crust-core/tests/data/import_baselines/centred_both_usda-06ae7e6ad41f5b45-1.digest b/crates/crust-core/tests/data/import_baselines/centred_both_usda-06ae7e6ad41f5b45-1.digest new file mode 100644 index 000000000..c89d6c4d1 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/centred_both_usda-06ae7e6ad41f5b45-1.digest @@ -0,0 +1,19 @@ +time: Some(5.0) +working space: Linear Rec.709 (sRGB) +camera path: Some("/World/cam") +camera: Camera { origin: Vec3A(0.0, 0.0, 8.0), lower_left_corner: Vec3A(-2.7183647, -1.5290802, -2.0), horizontal: Vec3A(5.4367294, 0.0, 0.0), vertical: Vec3A(0.0, 3.0581603, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: Some("/Render/settings") +settings: RenderSettings { samples_per_pixel: 16, max_depth: 2, width: 64, height: 36, region: PixelRect { x0: 0, y0: 0, x1: 64, y1: 36 }, min_samples_per_pixel: 16, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 5, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: false, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 50.0, aperture: [20.955, 15.2908], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 10.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/centred_both.usda"], invisible_overrides: Some(0) } +layer: $DIR/centred_both.usda +lights: 0 +volumes: 0 +world: 1 geometries, PrimitiveBreakdown { triangles: 0, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 1 } top level, PrimitiveBreakdown { triangles: 0, spheres: 1, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 1 } unique, motion true +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [Translation(Vec3A(0.5, 0.0, 0.0))] pieces all=1:f548d1d419575bc7 camera=1:f548d1d419575bc7 shadow=1:f548d1d419575bc7 indirect=1:f548d1d419575bc7 +provenance material /World/Glow: MaterialOrigin { slots: [0], displaced: false } +provenance geometry 0..1: /World/Ball +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: Some(5.0), camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/World/cam"), cameras: ["/World/cam"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/World/cam"), offsets: [13821547256400052224, 4598175219545276416], interval: Some([4617034042984890368, 4617596992938311680]), query: true, frame_pose: true } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/centred_both_usda-06ae7e6ad41f5b45-1.image b/crates/crust-core/tests/data/import_baselines/centred_both_usda-06ae7e6ad41f5b45-1.image new file mode 100644 index 000000000..bfa41788e --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/centred_both_usda-06ae7e6ad41f5b45-1.image @@ -0,0 +1 @@ +64x36 16spp clamp-off dc255797970d888d diff --git a/crates/crust-core/tests/data/import_baselines/centred_frame_usda-200d23d9927b7966-1.digest b/crates/crust-core/tests/data/import_baselines/centred_frame_usda-200d23d9927b7966-1.digest new file mode 100644 index 000000000..cab1f4b21 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/centred_frame_usda-200d23d9927b7966-1.digest @@ -0,0 +1,19 @@ +time: Some(5.0) +working space: Linear Rec.709 (sRGB) +camera path: Some("/World/cam") +camera: Camera { origin: Vec3A(0.0, 0.0, 8.0), lower_left_corner: Vec3A(-2.7183647, -1.5290802, -2.0), horizontal: Vec3A(5.4367294, 0.0, 0.0), vertical: Vec3A(0.0, 3.0581603, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: Some("/Render/settings") +settings: RenderSettings { samples_per_pixel: 16, max_depth: 2, width: 64, height: 36, region: PixelRect { x0: 0, y0: 0, x1: 64, y1: 36 }, min_samples_per_pixel: 16, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 5, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: false, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 50.0, aperture: [20.955, 15.2908], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 10.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/centred_frame.usda"], invisible_overrides: Some(0) } +layer: $DIR/centred_frame.usda +lights: 0 +volumes: 0 +world: 1 geometries, PrimitiveBreakdown { triangles: 0, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 1 } top level, PrimitiveBreakdown { triangles: 0, spheres: 1, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 1 } unique, motion true +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [Translation(Vec3A(0.5, 0.0, 0.0))] pieces all=1:f548d1d419575bc7 camera=1:f548d1d419575bc7 shadow=1:f548d1d419575bc7 indirect=1:f548d1d419575bc7 +provenance material /World/Glow: MaterialOrigin { slots: [0], displaced: false } +provenance geometry 0..1: /World/Ball +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: Some(5.0), camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/World/cam"), cameras: ["/World/cam"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/World/cam"), offsets: [13821547256400052224, 4598175219545276416], interval: Some([4617034042984890368, 4617596992938311680]), query: true, frame_pose: true } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/centred_frame_usda-200d23d9927b7966-1.image b/crates/crust-core/tests/data/import_baselines/centred_frame_usda-200d23d9927b7966-1.image new file mode 100644 index 000000000..bfa41788e --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/centred_frame_usda-200d23d9927b7966-1.image @@ -0,0 +1 @@ +64x36 16spp clamp-off dc255797970d888d diff --git a/crates/crust-core/tests/data/import_baselines/centred_open_usda-75e668aa9e5ecb2d-1.digest b/crates/crust-core/tests/data/import_baselines/centred_open_usda-75e668aa9e5ecb2d-1.digest new file mode 100644 index 000000000..f8d4b5dea --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/centred_open_usda-75e668aa9e5ecb2d-1.digest @@ -0,0 +1,19 @@ +time: Some(5.0) +working space: Linear Rec.709 (sRGB) +camera path: Some("/World/cam") +camera: Camera { origin: Vec3A(0.0, 0.0, 8.0), lower_left_corner: Vec3A(-2.7183647, -1.5290802, -2.0), horizontal: Vec3A(5.4367294, 0.0, 0.0), vertical: Vec3A(0.0, 3.0581603, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: Some("/Render/settings") +settings: RenderSettings { samples_per_pixel: 16, max_depth: 2, width: 64, height: 36, region: PixelRect { x0: 0, y0: 0, x1: 64, y1: 36 }, min_samples_per_pixel: 16, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 5, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: false, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 50.0, aperture: [20.955, 15.2908], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 10.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/centred_open.usda"], invisible_overrides: Some(0) } +layer: $DIR/centred_open.usda +lights: 0 +volumes: 0 +world: 1 geometries, PrimitiveBreakdown { triangles: 0, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 1 } top level, PrimitiveBreakdown { triangles: 0, spheres: 1, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 1 } unique, motion true +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [Translation(Vec3A(0.5, 0.0, 0.0))] pieces all=1:83f6790befe7ce92 camera=1:83f6790befe7ce92 shadow=1:83f6790befe7ce92 indirect=1:83f6790befe7ce92 +provenance material /World/Glow: MaterialOrigin { slots: [0], displaced: false } +provenance geometry 0..1: /World/Ball +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: Some(5.0), camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/World/cam"), cameras: ["/World/cam"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/World/cam"), offsets: [13821547256400052224, 4598175219545276416], interval: Some([4617034042984890368, 4617596992938311680]), query: true, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/centred_open_usda-75e668aa9e5ecb2d-1.image b/crates/crust-core/tests/data/import_baselines/centred_open_usda-75e668aa9e5ecb2d-1.image new file mode 100644 index 000000000..6a65f383a --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/centred_open_usda-75e668aa9e5ecb2d-1.image @@ -0,0 +1 @@ +64x36 16spp clamp-off 98e9524f3d395cd5 diff --git a/crates/crust-core/tests/data/import_baselines/chart_interp_constant_0_usda-16acce3a8ae23e69-1.digest b/crates/crust-core/tests/data/import_baselines/chart_interp_constant_0_usda-16acce3a8ae23e69-1.digest new file mode 100644 index 000000000..9597c6bfe --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/chart_interp_constant_0_usda-16acce3a8ae23e69-1.digest @@ -0,0 +1,22 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: None +camera: Camera { origin: Vec3A(15.0, 3.0, 3.0), lower_left_corner: Vec3A(4.8863316, -0.044797063, 4.174048), horizontal: Vec3A(1.2295314, 0.0, -6.147657), vertical: Vec3A(-0.44830504, 3.4967792, -0.08966101), u: Vec3A(0.19611613, 0.0, -0.9805807), v: Vec3A(-0.1271232, 0.991561, -0.02542464), lens_radius: 0.05, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: None +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 640, height: 360, region: PixelRect { x0: 0, y0: 0, x1: 640, y1: 360 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: None, depth_of_field: true, motion_blur: false, layer_stack: ["$DIR/chart_interp_constant_0.usda"], invisible_overrides: Some(0) } +layer: $DIR/chart_interp_constant_0.usda +warning: Warning { code: CameraMissing, kind: Skipped, count: 1, prims: [], message: "USD stage has no UsdGeomCamera — falling back to world::get_settings camera" } +lights: 0 +volumes: 0 +world: 1 geometries, PrimitiveBreakdown { triangles: 4, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 4, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +geom 0: material #0 Signature { kind: "MaterialX", cutout: false, straight: false, boundary: false, emits: false, uv: true, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv Some(0) shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=4:f842628536678af5 camera=4:f842628536678af5 shadow=4:f842628536678af5 indirect=4:f842628536678af5 +provenance material /World/Looks/Mtl: MaterialOrigin { slots: [0], displaced: false } +provenance geometry 0..1: /World/Quads +provenance mesh: MeshOrigin { geom_id: 0, slot: 0, baked: true, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 5101156695740804468, n_points: 6, n_indices: 8, n_uvs: Some(1), smooth: true, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: Some(0), subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: None, cameras: [], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: None, offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/chart_interp_constant_0_usda-16acce3a8ae23e69-1.image b/crates/crust-core/tests/data/import_baselines/chart_interp_constant_0_usda-16acce3a8ae23e69-1.image new file mode 100644 index 000000000..c734c5b1d --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/chart_interp_constant_0_usda-16acce3a8ae23e69-1.image @@ -0,0 +1 @@ +640x360 16spp clamp-off a04a09c0d4b5e325 diff --git a/crates/crust-core/tests/data/import_baselines/chart_interp_constant_2_usda-51380ed7a7ea4305-1.digest b/crates/crust-core/tests/data/import_baselines/chart_interp_constant_2_usda-51380ed7a7ea4305-1.digest new file mode 100644 index 000000000..bb14f0beb --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/chart_interp_constant_2_usda-51380ed7a7ea4305-1.digest @@ -0,0 +1,22 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: None +camera: Camera { origin: Vec3A(15.0, 3.0, 3.0), lower_left_corner: Vec3A(4.8863316, -0.044797063, 4.174048), horizontal: Vec3A(1.2295314, 0.0, -6.147657), vertical: Vec3A(-0.44830504, 3.4967792, -0.08966101), u: Vec3A(0.19611613, 0.0, -0.9805807), v: Vec3A(-0.1271232, 0.991561, -0.02542464), lens_radius: 0.05, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: None +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 640, height: 360, region: PixelRect { x0: 0, y0: 0, x1: 640, y1: 360 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: None, depth_of_field: true, motion_blur: false, layer_stack: ["$DIR/chart_interp_constant_2.usda"], invisible_overrides: Some(0) } +layer: $DIR/chart_interp_constant_2.usda +warning: Warning { code: CameraMissing, kind: Skipped, count: 1, prims: [], message: "USD stage has no UsdGeomCamera — falling back to world::get_settings camera" } +lights: 0 +volumes: 0 +world: 1 geometries, PrimitiveBreakdown { triangles: 64, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 64, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +geom 0: material #0 Signature { kind: "MaterialX", cutout: false, straight: false, boundary: false, emits: false, uv: true, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv Some(0) shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=64:0a26ae71e3afd805 camera=64:0a26ae71e3afd805 shadow=64:0a26ae71e3afd805 indirect=64:0a26ae71e3afd805 +provenance material /World/Looks/Mtl: MaterialOrigin { slots: [0], displaced: false } +provenance geometry 0..1: /World/Quads +provenance mesh: MeshOrigin { geom_id: 0, slot: 0, baked: true, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 10918591713586360571, n_points: 45, n_indices: 128, n_uvs: Some(45), smooth: true, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: Some(2), subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 2, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: None, cameras: [], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: None, offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/chart_interp_constant_2_usda-51380ed7a7ea4305-1.image b/crates/crust-core/tests/data/import_baselines/chart_interp_constant_2_usda-51380ed7a7ea4305-1.image new file mode 100644 index 000000000..c734c5b1d --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/chart_interp_constant_2_usda-51380ed7a7ea4305-1.image @@ -0,0 +1 @@ +640x360 16spp clamp-off a04a09c0d4b5e325 diff --git a/crates/crust-core/tests/data/import_baselines/chart_interp_constant_unauthored_0_usda-a6d6a93dda32caf2-1.digest b/crates/crust-core/tests/data/import_baselines/chart_interp_constant_unauthored_0_usda-a6d6a93dda32caf2-1.digest new file mode 100644 index 000000000..2b3d83009 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/chart_interp_constant_unauthored_0_usda-a6d6a93dda32caf2-1.digest @@ -0,0 +1,22 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: None +camera: Camera { origin: Vec3A(15.0, 3.0, 3.0), lower_left_corner: Vec3A(4.8863316, -0.044797063, 4.174048), horizontal: Vec3A(1.2295314, 0.0, -6.147657), vertical: Vec3A(-0.44830504, 3.4967792, -0.08966101), u: Vec3A(0.19611613, 0.0, -0.9805807), v: Vec3A(-0.1271232, 0.991561, -0.02542464), lens_radius: 0.05, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: None +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 640, height: 360, region: PixelRect { x0: 0, y0: 0, x1: 640, y1: 360 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: None, depth_of_field: true, motion_blur: false, layer_stack: ["$DIR/chart_interp_constant_unauthored_0.usda"], invisible_overrides: Some(0) } +layer: $DIR/chart_interp_constant_unauthored_0.usda +warning: Warning { code: CameraMissing, kind: Skipped, count: 1, prims: [], message: "USD stage has no UsdGeomCamera — falling back to world::get_settings camera" } +lights: 0 +volumes: 0 +world: 1 geometries, PrimitiveBreakdown { triangles: 4, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 4, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +geom 0: material #0 Signature { kind: "MaterialX", cutout: false, straight: false, boundary: false, emits: false, uv: true, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv Some(0) shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=4:f842628536678af5 camera=4:f842628536678af5 shadow=4:f842628536678af5 indirect=4:f842628536678af5 +provenance material /World/Looks/Mtl: MaterialOrigin { slots: [0], displaced: false } +provenance geometry 0..1: /World/Quads +provenance mesh: MeshOrigin { geom_id: 0, slot: 0, baked: true, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 7809041330809037802, n_points: 6, n_indices: 8, n_uvs: Some(1), smooth: true, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: Some(0), subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: None, cameras: [], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: None, offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/chart_interp_constant_unauthored_0_usda-a6d6a93dda32caf2-1.image b/crates/crust-core/tests/data/import_baselines/chart_interp_constant_unauthored_0_usda-a6d6a93dda32caf2-1.image new file mode 100644 index 000000000..c734c5b1d --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/chart_interp_constant_unauthored_0_usda-a6d6a93dda32caf2-1.image @@ -0,0 +1 @@ +640x360 16spp clamp-off a04a09c0d4b5e325 diff --git a/crates/crust-core/tests/data/import_baselines/chart_interp_constant_unauthored_2_usda-bad2637a6a91c73a-1.digest b/crates/crust-core/tests/data/import_baselines/chart_interp_constant_unauthored_2_usda-bad2637a6a91c73a-1.digest new file mode 100644 index 000000000..da1ae17a0 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/chart_interp_constant_unauthored_2_usda-bad2637a6a91c73a-1.digest @@ -0,0 +1,22 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: None +camera: Camera { origin: Vec3A(15.0, 3.0, 3.0), lower_left_corner: Vec3A(4.8863316, -0.044797063, 4.174048), horizontal: Vec3A(1.2295314, 0.0, -6.147657), vertical: Vec3A(-0.44830504, 3.4967792, -0.08966101), u: Vec3A(0.19611613, 0.0, -0.9805807), v: Vec3A(-0.1271232, 0.991561, -0.02542464), lens_radius: 0.05, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: None +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 640, height: 360, region: PixelRect { x0: 0, y0: 0, x1: 640, y1: 360 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: None, depth_of_field: true, motion_blur: false, layer_stack: ["$DIR/chart_interp_constant_unauthored_2.usda"], invisible_overrides: Some(0) } +layer: $DIR/chart_interp_constant_unauthored_2.usda +warning: Warning { code: CameraMissing, kind: Skipped, count: 1, prims: [], message: "USD stage has no UsdGeomCamera — falling back to world::get_settings camera" } +lights: 0 +volumes: 0 +world: 1 geometries, PrimitiveBreakdown { triangles: 64, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 64, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +geom 0: material #0 Signature { kind: "MaterialX", cutout: false, straight: false, boundary: false, emits: false, uv: true, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv Some(0) shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=64:0a26ae71e3afd805 camera=64:0a26ae71e3afd805 shadow=64:0a26ae71e3afd805 indirect=64:0a26ae71e3afd805 +provenance material /World/Looks/Mtl: MaterialOrigin { slots: [0], displaced: false } +provenance geometry 0..1: /World/Quads +provenance mesh: MeshOrigin { geom_id: 0, slot: 0, baked: true, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 7344855212322573385, n_points: 45, n_indices: 128, n_uvs: Some(45), smooth: true, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: Some(2), subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 2, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: None, cameras: [], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: None, offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/chart_interp_constant_unauthored_2_usda-bad2637a6a91c73a-1.image b/crates/crust-core/tests/data/import_baselines/chart_interp_constant_unauthored_2_usda-bad2637a6a91c73a-1.image new file mode 100644 index 000000000..c734c5b1d --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/chart_interp_constant_unauthored_2_usda-bad2637a6a91c73a-1.image @@ -0,0 +1 @@ +640x360 16spp clamp-off a04a09c0d4b5e325 diff --git a/crates/crust-core/tests/data/import_baselines/chart_interp_uniform_0_usda-ffe6596ba2b6a108-1.digest b/crates/crust-core/tests/data/import_baselines/chart_interp_uniform_0_usda-ffe6596ba2b6a108-1.digest new file mode 100644 index 000000000..a7634a54f --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/chart_interp_uniform_0_usda-ffe6596ba2b6a108-1.digest @@ -0,0 +1,22 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: None +camera: Camera { origin: Vec3A(15.0, 3.0, 3.0), lower_left_corner: Vec3A(4.8863316, -0.044797063, 4.174048), horizontal: Vec3A(1.2295314, 0.0, -6.147657), vertical: Vec3A(-0.44830504, 3.4967792, -0.08966101), u: Vec3A(0.19611613, 0.0, -0.9805807), v: Vec3A(-0.1271232, 0.991561, -0.02542464), lens_radius: 0.05, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: None +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 640, height: 360, region: PixelRect { x0: 0, y0: 0, x1: 640, y1: 360 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: None, depth_of_field: true, motion_blur: false, layer_stack: ["$DIR/chart_interp_uniform_0.usda"], invisible_overrides: Some(0) } +layer: $DIR/chart_interp_uniform_0.usda +warning: Warning { code: CameraMissing, kind: Skipped, count: 1, prims: [], message: "USD stage has no UsdGeomCamera — falling back to world::get_settings camera" } +lights: 0 +volumes: 0 +world: 1 geometries, PrimitiveBreakdown { triangles: 4, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 4, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +geom 0: material #0 Signature { kind: "MaterialX", cutout: false, straight: false, boundary: false, emits: false, uv: true, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv Some(0) shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=4:f842628536678af5 camera=4:f842628536678af5 shadow=4:f842628536678af5 indirect=4:f842628536678af5 +provenance material /World/Looks/Mtl: MaterialOrigin { slots: [0], displaced: false } +provenance geometry 0..1: /World/Quads +provenance mesh: MeshOrigin { geom_id: 0, slot: 0, baked: true, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 13034384031579772522, n_points: 6, n_indices: 8, n_uvs: Some(2), smooth: true, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: Some(0), subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: None, cameras: [], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: None, offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/chart_interp_uniform_0_usda-ffe6596ba2b6a108-1.image b/crates/crust-core/tests/data/import_baselines/chart_interp_uniform_0_usda-ffe6596ba2b6a108-1.image new file mode 100644 index 000000000..c734c5b1d --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/chart_interp_uniform_0_usda-ffe6596ba2b6a108-1.image @@ -0,0 +1 @@ +640x360 16spp clamp-off a04a09c0d4b5e325 diff --git a/crates/crust-core/tests/data/import_baselines/chart_interp_uniform_2_usda-815f4bb2830bedd0-1.digest b/crates/crust-core/tests/data/import_baselines/chart_interp_uniform_2_usda-815f4bb2830bedd0-1.digest new file mode 100644 index 000000000..49adc8497 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/chart_interp_uniform_2_usda-815f4bb2830bedd0-1.digest @@ -0,0 +1,22 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: None +camera: Camera { origin: Vec3A(15.0, 3.0, 3.0), lower_left_corner: Vec3A(4.8863316, -0.044797063, 4.174048), horizontal: Vec3A(1.2295314, 0.0, -6.147657), vertical: Vec3A(-0.44830504, 3.4967792, -0.08966101), u: Vec3A(0.19611613, 0.0, -0.9805807), v: Vec3A(-0.1271232, 0.991561, -0.02542464), lens_radius: 0.05, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: None +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 640, height: 360, region: PixelRect { x0: 0, y0: 0, x1: 640, y1: 360 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: None, depth_of_field: true, motion_blur: false, layer_stack: ["$DIR/chart_interp_uniform_2.usda"], invisible_overrides: Some(0) } +layer: $DIR/chart_interp_uniform_2.usda +warning: Warning { code: CameraMissing, kind: Skipped, count: 1, prims: [], message: "USD stage has no UsdGeomCamera — falling back to world::get_settings camera" } +lights: 0 +volumes: 0 +world: 1 geometries, PrimitiveBreakdown { triangles: 64, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 64, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +geom 0: material #0 Signature { kind: "MaterialX", cutout: false, straight: false, boundary: false, emits: false, uv: true, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv Some(0) shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=64:0a26ae71e3afd805 camera=64:0a26ae71e3afd805 shadow=64:0a26ae71e3afd805 indirect=64:0a26ae71e3afd805 +provenance material /World/Looks/Mtl: MaterialOrigin { slots: [0], displaced: false } +provenance geometry 0..1: /World/Quads +provenance mesh: MeshOrigin { geom_id: 0, slot: 0, baked: true, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 3987959077027510578, n_points: 45, n_indices: 128, n_uvs: Some(50), smooth: true, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: Some(2), subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 2, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: None, cameras: [], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: None, offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/chart_interp_uniform_2_usda-815f4bb2830bedd0-1.image b/crates/crust-core/tests/data/import_baselines/chart_interp_uniform_2_usda-815f4bb2830bedd0-1.image new file mode 100644 index 000000000..c734c5b1d --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/chart_interp_uniform_2_usda-815f4bb2830bedd0-1.image @@ -0,0 +1 @@ +640x360 16spp clamp-off a04a09c0d4b5e325 diff --git a/crates/crust-core/tests/data/import_baselines/chart_interp_uniform_indexed_0_usda-a6e2151559aa05f1-1.digest b/crates/crust-core/tests/data/import_baselines/chart_interp_uniform_indexed_0_usda-a6e2151559aa05f1-1.digest new file mode 100644 index 000000000..4113d826c --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/chart_interp_uniform_indexed_0_usda-a6e2151559aa05f1-1.digest @@ -0,0 +1,22 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: None +camera: Camera { origin: Vec3A(15.0, 3.0, 3.0), lower_left_corner: Vec3A(4.8863316, -0.044797063, 4.174048), horizontal: Vec3A(1.2295314, 0.0, -6.147657), vertical: Vec3A(-0.44830504, 3.4967792, -0.08966101), u: Vec3A(0.19611613, 0.0, -0.9805807), v: Vec3A(-0.1271232, 0.991561, -0.02542464), lens_radius: 0.05, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: None +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 640, height: 360, region: PixelRect { x0: 0, y0: 0, x1: 640, y1: 360 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: None, depth_of_field: true, motion_blur: false, layer_stack: ["$DIR/chart_interp_uniform_indexed_0.usda"], invisible_overrides: Some(0) } +layer: $DIR/chart_interp_uniform_indexed_0.usda +warning: Warning { code: CameraMissing, kind: Skipped, count: 1, prims: [], message: "USD stage has no UsdGeomCamera — falling back to world::get_settings camera" } +lights: 0 +volumes: 0 +world: 1 geometries, PrimitiveBreakdown { triangles: 4, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 4, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +geom 0: material #0 Signature { kind: "MaterialX", cutout: false, straight: false, boundary: false, emits: false, uv: true, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv Some(0) shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=4:f842628536678af5 camera=4:f842628536678af5 shadow=4:f842628536678af5 indirect=4:f842628536678af5 +provenance material /World/Looks/Mtl: MaterialOrigin { slots: [0], displaced: false } +provenance geometry 0..1: /World/Quads +provenance mesh: MeshOrigin { geom_id: 0, slot: 0, baked: true, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 8720951475160740329, n_points: 6, n_indices: 8, n_uvs: Some(2), smooth: true, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: Some(0), subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: None, cameras: [], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: None, offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/chart_interp_uniform_indexed_0_usda-a6e2151559aa05f1-1.image b/crates/crust-core/tests/data/import_baselines/chart_interp_uniform_indexed_0_usda-a6e2151559aa05f1-1.image new file mode 100644 index 000000000..c734c5b1d --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/chart_interp_uniform_indexed_0_usda-a6e2151559aa05f1-1.image @@ -0,0 +1 @@ +640x360 16spp clamp-off a04a09c0d4b5e325 diff --git a/crates/crust-core/tests/data/import_baselines/chart_interp_uniform_indexed_2_usda-49181df1e2a2d359-1.digest b/crates/crust-core/tests/data/import_baselines/chart_interp_uniform_indexed_2_usda-49181df1e2a2d359-1.digest new file mode 100644 index 000000000..c4c660a6d --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/chart_interp_uniform_indexed_2_usda-49181df1e2a2d359-1.digest @@ -0,0 +1,22 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: None +camera: Camera { origin: Vec3A(15.0, 3.0, 3.0), lower_left_corner: Vec3A(4.8863316, -0.044797063, 4.174048), horizontal: Vec3A(1.2295314, 0.0, -6.147657), vertical: Vec3A(-0.44830504, 3.4967792, -0.08966101), u: Vec3A(0.19611613, 0.0, -0.9805807), v: Vec3A(-0.1271232, 0.991561, -0.02542464), lens_radius: 0.05, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: None +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 640, height: 360, region: PixelRect { x0: 0, y0: 0, x1: 640, y1: 360 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: None, depth_of_field: true, motion_blur: false, layer_stack: ["$DIR/chart_interp_uniform_indexed_2.usda"], invisible_overrides: Some(0) } +layer: $DIR/chart_interp_uniform_indexed_2.usda +warning: Warning { code: CameraMissing, kind: Skipped, count: 1, prims: [], message: "USD stage has no UsdGeomCamera — falling back to world::get_settings camera" } +lights: 0 +volumes: 0 +world: 1 geometries, PrimitiveBreakdown { triangles: 64, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 64, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +geom 0: material #0 Signature { kind: "MaterialX", cutout: false, straight: false, boundary: false, emits: false, uv: true, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv Some(0) shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=64:0a26ae71e3afd805 camera=64:0a26ae71e3afd805 shadow=64:0a26ae71e3afd805 indirect=64:0a26ae71e3afd805 +provenance material /World/Looks/Mtl: MaterialOrigin { slots: [0], displaced: false } +provenance geometry 0..1: /World/Quads +provenance mesh: MeshOrigin { geom_id: 0, slot: 0, baked: true, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 9116079468203776378, n_points: 45, n_indices: 128, n_uvs: Some(50), smooth: true, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: Some(2), subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 2, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: None, cameras: [], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: None, offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/chart_interp_uniform_indexed_2_usda-49181df1e2a2d359-1.image b/crates/crust-core/tests/data/import_baselines/chart_interp_uniform_indexed_2_usda-49181df1e2a2d359-1.image new file mode 100644 index 000000000..c734c5b1d --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/chart_interp_uniform_indexed_2_usda-49181df1e2a2d359-1.image @@ -0,0 +1 @@ +640x360 16spp clamp-off a04a09c0d4b5e325 diff --git a/crates/crust-core/tests/data/import_baselines/check/PointInstancedMedCity.usd.json b/crates/crust-core/tests/data/import_baselines/check/PointInstancedMedCity.usd.json new file mode 100644 index 000000000..635f2cb8d --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/check/PointInstancedMedCity.usd.json @@ -0,0 +1,200 @@ +{ + "counts": { + "geometries": 0, + "kernel_memory": { + "bvh_nodes_bytes": 0, + "cubic_spans_bytes": 0, + "geometry_tables_bytes": 0, + "indices_bytes": 0, + "instances_bytes": 0, + "lanes": 0, + "lanes_filled": 0, + "leaves_bytes": 0, + "packets_bytes": 0, + "packets_indexed_bytes": 0, + "prim_nodes_bytes": 0, + "total_bytes": 0, + "triangle_records_bytes": 0, + "vertex_normals_bytes": 0, + "vertices_bytes": 0 + }, + "lights": 0, + "primvar_tables_bytes": 0, + "strand_tables_bytes": 0, + "top_level": { + "cubic_curve_spans": 0, + "curve_segments": 0, + "cylinders": 0, + "disks": 0, + "instances": 0, + "spheres": 0, + "triangles": 0 + }, + "unique": { + "cubic_curve_spans": 0, + "curve_segments": 0, + "cylinders": 0, + "disks": 0, + "instances": 0, + "spheres": 0, + "triangles": 0 + }, + "volumes": 0 + }, + "crust_version": "0.8.0", + "denied": [], + "effective_settings": [ + { + "flag": "-s", + "name": "samples_per_pixel", + "usd_attribute": "crust:samplesPerPixel", + "value": "128" + }, + { + "flag": null, + "name": "max_depth", + "usd_attribute": "crust:maxDepth", + "value": "32" + }, + { + "flag": "--strategy", + "name": "sampling_strategy", + "usd_attribute": "crust:samplingStrategy", + "value": "power" + }, + { + "flag": "--light-selection", + "name": "light_selection", + "usd_attribute": "crust:lightSelection", + "value": "power" + }, + { + "flag": "--light-samples", + "name": "light_samples", + "usd_attribute": "crust:lightSamples", + "value": "1" + }, + { + "flag": "--light-samples-indirect", + "name": "light_samples_indirect", + "usd_attribute": "crust:lightSamplesIndirect", + "value": "1" + }, + { + "flag": "--indirect-clamp", + "name": "indirect_clamp", + "usd_attribute": "crust:indirectClamp", + "value": "10" + }, + { + "flag": null, + "name": "exposure_scale", + "usd_attribute": null, + "value": "1" + }, + { + "flag": "--filter", + "name": "pixel_filter", + "usd_attribute": "crust:pixelFilter", + "value": "triangle" + }, + { + "flag": "--filter-radius", + "name": "pixel_filter_radius", + "usd_attribute": "crust:pixelFilterRadius", + "value": "1" + }, + { + "flag": "--sampler", + "name": "sampler", + "usd_attribute": "crust:sampler", + "value": "sobol" + }, + { + "flag": null, + "name": "path_guiding", + "usd_attribute": "crust:pathGuiding", + "value": "false" + }, + { + "flag": "--variance-threshold", + "name": "variance_threshold", + "usd_attribute": "crust:varianceThreshold", + "value": "0.05" + }, + { + "flag": "--min-samples", + "name": "min_samples_per_pixel", + "usd_attribute": "crust:minSamplesPerPixel", + "value": "32" + }, + { + "flag": "--neighbour-tolerance", + "name": "adaptive_neighbour_tolerance", + "usd_attribute": "crust:adaptiveNeighbourTolerance", + "value": "1" + }, + { + "flag": "--subdiv-level", + "name": "subdivision_level", + "usd_attribute": "crust:subdivisionLevel", + "value": "stage" + }, + { + "flag": "--subdiv-edge-length", + "name": "subdivision_edge_length", + "usd_attribute": "crust:subdivisionEdgeLength", + "value": "stage" + }, + { + "flag": "--auto-tx", + "name": "auto_tx", + "usd_attribute": null, + "value": "false" + } + ], + "findings": [], + "format": "crust-check/2", + "pass": null, + "precomp": null, + "products": [ + { + "channels": [ + "R", + "G", + "B" + ], + "file": "output.exr", + "prim": null + } + ], + "scene": { + "camera": "/Cameras/main_cam", + "frame": null, + "path": "$ROOT/samples/PointInstancedMedCity.usd", + "region": null, + "resolution": [ + 640, + 360 + ] + }, + "settings": null, + "warnings": [ + { + "code": "instancing.empty_prototype", + "count": 8, + "kind": "skipped", + "message": "Prototype /MediterraneanHills/Buildings/Prototypes/prototype_0 contributed no geometry", + "prims": [ + "/MediterraneanHills/Buildings/Prototypes/prototype_0", + "/MediterraneanHills/Buildings/Prototypes/prototype_1", + "/MediterraneanHills/Buildings/Prototypes/prototype_2", + "/MediterraneanHills/Buildings/Prototypes/prototype_3", + "/MediterraneanHills/Buildings/Prototypes/prototype_4", + "/MediterraneanHills/Buildings/Prototypes/prototype_5", + "/MediterraneanHills/Buildings/Prototypes/prototype_6", + "/MediterraneanHills/Buildings/Prototypes/prototype_7" + ] + } + ] +} diff --git a/crates/crust-core/tests/data/import_baselines/check/animation.usda.json b/crates/crust-core/tests/data/import_baselines/check/animation.usda.json new file mode 100644 index 000000000..e49ec0e58 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/check/animation.usda.json @@ -0,0 +1,183 @@ +{ + "counts": { + "geometries": 3, + "kernel_memory": { + "bvh_nodes_bytes": 128, + "cubic_spans_bytes": 0, + "geometry_tables_bytes": 36, + "indices_bytes": 4, + "instances_bytes": 0, + "lanes": 8, + "lanes_filled": 4, + "leaves_bytes": 48, + "packets_bytes": 384, + "packets_indexed_bytes": 0, + "prim_nodes_bytes": 64, + "total_bytes": 856, + "triangle_records_bytes": 96, + "vertex_normals_bytes": 0, + "vertices_bytes": 96 + }, + "lights": 2, + "primvar_tables_bytes": 0, + "strand_tables_bytes": 0, + "top_level": { + "cubic_curve_spans": 0, + "curve_segments": 0, + "cylinders": 0, + "disks": 0, + "instances": 0, + "spheres": 1, + "triangles": 4 + }, + "unique": { + "cubic_curve_spans": 0, + "curve_segments": 0, + "cylinders": 0, + "disks": 0, + "instances": 0, + "spheres": 1, + "triangles": 4 + }, + "volumes": 0 + }, + "crust_version": "0.8.0", + "denied": [], + "effective_settings": [ + { + "flag": "-s", + "name": "samples_per_pixel", + "usd_attribute": "crust:samplesPerPixel", + "value": "16" + }, + { + "flag": null, + "name": "max_depth", + "usd_attribute": "crust:maxDepth", + "value": "4" + }, + { + "flag": "--strategy", + "name": "sampling_strategy", + "usd_attribute": "crust:samplingStrategy", + "value": "power" + }, + { + "flag": "--light-selection", + "name": "light_selection", + "usd_attribute": "crust:lightSelection", + "value": "power" + }, + { + "flag": "--light-samples", + "name": "light_samples", + "usd_attribute": "crust:lightSamples", + "value": "1" + }, + { + "flag": "--light-samples-indirect", + "name": "light_samples_indirect", + "usd_attribute": "crust:lightSamplesIndirect", + "value": "1" + }, + { + "flag": "--indirect-clamp", + "name": "indirect_clamp", + "usd_attribute": "crust:indirectClamp", + "value": "10" + }, + { + "flag": null, + "name": "exposure_scale", + "usd_attribute": null, + "value": "1" + }, + { + "flag": "--filter", + "name": "pixel_filter", + "usd_attribute": "crust:pixelFilter", + "value": "triangle" + }, + { + "flag": "--filter-radius", + "name": "pixel_filter_radius", + "usd_attribute": "crust:pixelFilterRadius", + "value": "1" + }, + { + "flag": "--sampler", + "name": "sampler", + "usd_attribute": "crust:sampler", + "value": "sobol" + }, + { + "flag": null, + "name": "path_guiding", + "usd_attribute": "crust:pathGuiding", + "value": "false" + }, + { + "flag": "--variance-threshold", + "name": "variance_threshold", + "usd_attribute": "crust:varianceThreshold", + "value": "0.05" + }, + { + "flag": "--min-samples", + "name": "min_samples_per_pixel", + "usd_attribute": "crust:minSamplesPerPixel", + "value": "32" + }, + { + "flag": "--neighbour-tolerance", + "name": "adaptive_neighbour_tolerance", + "usd_attribute": "crust:adaptiveNeighbourTolerance", + "value": "1" + }, + { + "flag": "--subdiv-level", + "name": "subdivision_level", + "usd_attribute": "crust:subdivisionLevel", + "value": "stage" + }, + { + "flag": "--subdiv-edge-length", + "name": "subdivision_edge_length", + "usd_attribute": "crust:subdivisionEdgeLength", + "value": "stage" + }, + { + "flag": "--auto-tx", + "name": "auto_tx", + "usd_attribute": null, + "value": "false" + } + ], + "findings": [], + "format": "crust-check/2", + "pass": null, + "precomp": null, + "products": [ + { + "channels": [ + "R", + "G", + "B" + ], + "file": "output.exr", + "prim": null + } + ], + "scene": { + "camera": "/World/Cam", + "frame": null, + "path": "$ROOT/samples/animation.usda", + "region": null, + "resolution": [ + 96, + 54 + ] + }, + "settings": "/Render/settings", + "warnings": [] +} diff --git a/crates/crust-core/tests/data/import_baselines/check/aovs.usda.json b/crates/crust-core/tests/data/import_baselines/check/aovs.usda.json new file mode 100644 index 000000000..45c0ce22b --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/check/aovs.usda.json @@ -0,0 +1,219 @@ +{ + "counts": { + "geometries": 3, + "kernel_memory": { + "bvh_nodes_bytes": 128, + "cubic_spans_bytes": 0, + "geometry_tables_bytes": 36, + "indices_bytes": 4, + "instances_bytes": 0, + "lanes": 8, + "lanes_filled": 4, + "leaves_bytes": 48, + "packets_bytes": 384, + "packets_indexed_bytes": 0, + "prim_nodes_bytes": 64, + "total_bytes": 856, + "triangle_records_bytes": 96, + "vertex_normals_bytes": 0, + "vertices_bytes": 96 + }, + "lights": 2, + "primvar_tables_bytes": 0, + "strand_tables_bytes": 0, + "top_level": { + "cubic_curve_spans": 0, + "curve_segments": 0, + "cylinders": 0, + "disks": 0, + "instances": 0, + "spheres": 1, + "triangles": 4 + }, + "unique": { + "cubic_curve_spans": 0, + "curve_segments": 0, + "cylinders": 0, + "disks": 0, + "instances": 0, + "spheres": 1, + "triangles": 4 + }, + "volumes": 0 + }, + "crust_version": "0.8.0", + "denied": [], + "effective_settings": [ + { + "flag": "-s", + "name": "samples_per_pixel", + "usd_attribute": "crust:samplesPerPixel", + "value": "16" + }, + { + "flag": null, + "name": "max_depth", + "usd_attribute": "crust:maxDepth", + "value": "4" + }, + { + "flag": "--strategy", + "name": "sampling_strategy", + "usd_attribute": "crust:samplingStrategy", + "value": "power" + }, + { + "flag": "--light-selection", + "name": "light_selection", + "usd_attribute": "crust:lightSelection", + "value": "power" + }, + { + "flag": "--light-samples", + "name": "light_samples", + "usd_attribute": "crust:lightSamples", + "value": "1" + }, + { + "flag": "--light-samples-indirect", + "name": "light_samples_indirect", + "usd_attribute": "crust:lightSamplesIndirect", + "value": "1" + }, + { + "flag": "--indirect-clamp", + "name": "indirect_clamp", + "usd_attribute": "crust:indirectClamp", + "value": "10" + }, + { + "flag": null, + "name": "exposure_scale", + "usd_attribute": null, + "value": "1" + }, + { + "flag": "--filter", + "name": "pixel_filter", + "usd_attribute": "crust:pixelFilter", + "value": "triangle" + }, + { + "flag": "--filter-radius", + "name": "pixel_filter_radius", + "usd_attribute": "crust:pixelFilterRadius", + "value": "1" + }, + { + "flag": "--sampler", + "name": "sampler", + "usd_attribute": "crust:sampler", + "value": "sobol" + }, + { + "flag": null, + "name": "path_guiding", + "usd_attribute": "crust:pathGuiding", + "value": "false" + }, + { + "flag": "--variance-threshold", + "name": "variance_threshold", + "usd_attribute": "crust:varianceThreshold", + "value": "0.05" + }, + { + "flag": "--min-samples", + "name": "min_samples_per_pixel", + "usd_attribute": "crust:minSamplesPerPixel", + "value": "8" + }, + { + "flag": "--neighbour-tolerance", + "name": "adaptive_neighbour_tolerance", + "usd_attribute": "crust:adaptiveNeighbourTolerance", + "value": "1" + }, + { + "flag": "--subdiv-level", + "name": "subdivision_level", + "usd_attribute": "crust:subdivisionLevel", + "value": "stage" + }, + { + "flag": "--subdiv-edge-length", + "name": "subdivision_edge_length", + "usd_attribute": "crust:subdivisionEdgeLength", + "value": "stage" + }, + { + "flag": "--auto-tx", + "name": "auto_tx", + "usd_attribute": null, + "value": "false" + } + ], + "findings": [], + "format": "crust-check/2", + "pass": null, + "precomp": null, + "products": [ + { + "channels": [ + "R", + "G", + "B", + "A", + "sampleCount", + "variance" + ], + "file": "renders/aovs_beauty.exr", + "prim": "/Render/Products/beauty" + }, + { + "channels": [ + "Z", + "distance", + "P.X", + "P.Y", + "P.Z", + "Peye.X", + "Peye.Y", + "Peye.Z", + "N.X", + "N.Y", + "N.Z", + "Neye.X", + "Neye.Y", + "Neye.Z", + "st.U", + "st.V", + "alpha" + ], + "file": "renders/aovs_data.exr", + "prim": "/Render/Products/data" + } + ], + "scene": { + "camera": "/World/Cam", + "frame": null, + "path": "$ROOT/samples/aovs.usda", + "region": null, + "resolution": [ + 160, + 90 + ] + }, + "settings": "/Render/settings", + "warnings": [ + { + "code": "aov.unknown_source", + "count": 1, + "kind": "skipped", + "message": "/Render/Products/Vars/diffuse_direct: unknown raw source \"diffuse_direct\"; no channel written (crust's AOV names are listed in the user documentation, usd/aovs)", + "prims": [ + "/Render/Products/Vars/diffuse_direct" + ] + } + ] +} diff --git a/crates/crust-core/tests/data/import_baselines/check/aovs_lpe.usda.json b/crates/crust-core/tests/data/import_baselines/check/aovs_lpe.usda.json new file mode 100644 index 000000000..a60b94d1c --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/check/aovs_lpe.usda.json @@ -0,0 +1,235 @@ +{ + "counts": { + "geometries": 6, + "kernel_memory": { + "bvh_nodes_bytes": 128, + "cubic_spans_bytes": 0, + "geometry_tables_bytes": 72, + "indices_bytes": 20, + "instances_bytes": 0, + "lanes": 4, + "lanes_filled": 2, + "leaves_bytes": 64, + "packets_bytes": 192, + "packets_indexed_bytes": 0, + "prim_nodes_bytes": 320, + "total_bytes": 892, + "triangle_records_bytes": 48, + "vertex_normals_bytes": 0, + "vertices_bytes": 48 + }, + "lights": 3, + "primvar_tables_bytes": 0, + "strand_tables_bytes": 0, + "top_level": { + "cubic_curve_spans": 0, + "curve_segments": 0, + "cylinders": 0, + "disks": 0, + "instances": 0, + "spheres": 5, + "triangles": 2 + }, + "unique": { + "cubic_curve_spans": 0, + "curve_segments": 0, + "cylinders": 0, + "disks": 0, + "instances": 0, + "spheres": 5, + "triangles": 2 + }, + "volumes": 1 + }, + "crust_version": "0.8.0", + "denied": [], + "effective_settings": [ + { + "flag": "-s", + "name": "samples_per_pixel", + "usd_attribute": "crust:samplesPerPixel", + "value": "64" + }, + { + "flag": null, + "name": "max_depth", + "usd_attribute": "crust:maxDepth", + "value": "8" + }, + { + "flag": "--strategy", + "name": "sampling_strategy", + "usd_attribute": "crust:samplingStrategy", + "value": "power" + }, + { + "flag": "--light-selection", + "name": "light_selection", + "usd_attribute": "crust:lightSelection", + "value": "power" + }, + { + "flag": "--light-samples", + "name": "light_samples", + "usd_attribute": "crust:lightSamples", + "value": "1" + }, + { + "flag": "--light-samples-indirect", + "name": "light_samples_indirect", + "usd_attribute": "crust:lightSamplesIndirect", + "value": "1" + }, + { + "flag": "--indirect-clamp", + "name": "indirect_clamp", + "usd_attribute": "crust:indirectClamp", + "value": "10" + }, + { + "flag": null, + "name": "exposure_scale", + "usd_attribute": null, + "value": "1" + }, + { + "flag": "--filter", + "name": "pixel_filter", + "usd_attribute": "crust:pixelFilter", + "value": "triangle" + }, + { + "flag": "--filter-radius", + "name": "pixel_filter_radius", + "usd_attribute": "crust:pixelFilterRadius", + "value": "1" + }, + { + "flag": "--sampler", + "name": "sampler", + "usd_attribute": "crust:sampler", + "value": "sobol" + }, + { + "flag": null, + "name": "path_guiding", + "usd_attribute": "crust:pathGuiding", + "value": "false" + }, + { + "flag": "--variance-threshold", + "name": "variance_threshold", + "usd_attribute": "crust:varianceThreshold", + "value": "0.05" + }, + { + "flag": "--min-samples", + "name": "min_samples_per_pixel", + "usd_attribute": "crust:minSamplesPerPixel", + "value": "16" + }, + { + "flag": "--neighbour-tolerance", + "name": "adaptive_neighbour_tolerance", + "usd_attribute": "crust:adaptiveNeighbourTolerance", + "value": "1" + }, + { + "flag": "--subdiv-level", + "name": "subdivision_level", + "usd_attribute": "crust:subdivisionLevel", + "value": "stage" + }, + { + "flag": "--subdiv-edge-length", + "name": "subdivision_edge_length", + "usd_attribute": "crust:subdivisionEdgeLength", + "value": "stage" + }, + { + "flag": "--auto-tx", + "name": "auto_tx", + "usd_attribute": null, + "value": "false" + } + ], + "findings": [], + "format": "crust-check/2", + "pass": null, + "precomp": null, + "products": [ + { + "channels": [ + "R", + "G", + "B", + "A", + "diffuse_direct.R", + "diffuse_direct.G", + "diffuse_direct.B", + "diffuse_indirect.R", + "diffuse_indirect.G", + "diffuse_indirect.B", + "glossy_direct.R", + "glossy_direct.G", + "glossy_direct.B", + "glossy_indirect.R", + "glossy_indirect.G", + "glossy_indirect.B", + "specular.R", + "specular.G", + "specular.B", + "transmission.R", + "transmission.G", + "transmission.B", + "volume.R", + "volume.G", + "volume.B", + "emission.R", + "emission.G", + "emission.B", + "key.R", + "key.G", + "key.B", + "fill.R", + "fill.G", + "fill.B", + "sky_and_glow.R", + "sky_and_glow.G", + "sky_and_glow.B", + "coat.R", + "coat.G", + "coat.B", + "albedo.R", + "albedo.G", + "albedo.B", + "N.X", + "N.Y", + "N.Z", + "rawLight.R", + "rawLight.G", + "rawLight.B", + "rawGI.R", + "rawGI.G", + "rawGI.B", + "diffuse_albedo.R", + "diffuse_albedo.G", + "diffuse_albedo.B" + ], + "file": "renders/aovs_lpe.exr", + "prim": "/Render/Products/lpe" + } + ], + "scene": { + "camera": "/World/Cam", + "frame": null, + "path": "$ROOT/samples/aovs_lpe.usda", + "region": null, + "resolution": [ + 320, + 180 + ] + }, + "settings": "/Render/settings", + "warnings": [] +} diff --git a/crates/crust-core/tests/data/import_baselines/check/cornellbox.usda.json b/crates/crust-core/tests/data/import_baselines/check/cornellbox.usda.json new file mode 100644 index 000000000..197291ee9 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/check/cornellbox.usda.json @@ -0,0 +1,193 @@ +{ + "counts": { + "geometries": 5, + "kernel_memory": { + "bvh_nodes_bytes": 24064, + "cubic_spans_bytes": 0, + "geometry_tables_bytes": 72, + "indices_bytes": 12, + "instances_bytes": 192, + "lanes": 2144, + "lanes_filled": 1714, + "leaves_bytes": 6384, + "packets_bytes": 102912, + "packets_indexed_bytes": 0, + "prim_nodes_bytes": 0, + "total_bytes": 181180, + "triangle_records_bytes": 37968, + "vertex_normals_bytes": 0, + "vertices_bytes": 9576 + }, + "lights": 1, + "primvar_tables_bytes": 0, + "strand_tables_bytes": 0, + "top_level": { + "cubic_curve_spans": 0, + "curve_segments": 0, + "cylinders": 0, + "disks": 0, + "instances": 2, + "spheres": 0, + "triangles": 822 + }, + "unique": { + "cubic_curve_spans": 0, + "curve_segments": 0, + "cylinders": 0, + "disks": 0, + "instances": 2, + "spheres": 0, + "triangles": 1582 + }, + "volumes": 0 + }, + "crust_version": "0.8.0", + "denied": [], + "effective_settings": [ + { + "flag": "-s", + "name": "samples_per_pixel", + "usd_attribute": "crust:samplesPerPixel", + "value": "128" + }, + { + "flag": null, + "name": "max_depth", + "usd_attribute": "crust:maxDepth", + "value": "32" + }, + { + "flag": "--strategy", + "name": "sampling_strategy", + "usd_attribute": "crust:samplingStrategy", + "value": "power" + }, + { + "flag": "--light-selection", + "name": "light_selection", + "usd_attribute": "crust:lightSelection", + "value": "power" + }, + { + "flag": "--light-samples", + "name": "light_samples", + "usd_attribute": "crust:lightSamples", + "value": "1" + }, + { + "flag": "--light-samples-indirect", + "name": "light_samples_indirect", + "usd_attribute": "crust:lightSamplesIndirect", + "value": "1" + }, + { + "flag": "--indirect-clamp", + "name": "indirect_clamp", + "usd_attribute": "crust:indirectClamp", + "value": "10" + }, + { + "flag": null, + "name": "exposure_scale", + "usd_attribute": null, + "value": "1" + }, + { + "flag": "--filter", + "name": "pixel_filter", + "usd_attribute": "crust:pixelFilter", + "value": "triangle" + }, + { + "flag": "--filter-radius", + "name": "pixel_filter_radius", + "usd_attribute": "crust:pixelFilterRadius", + "value": "1" + }, + { + "flag": "--sampler", + "name": "sampler", + "usd_attribute": "crust:sampler", + "value": "sobol" + }, + { + "flag": null, + "name": "path_guiding", + "usd_attribute": "crust:pathGuiding", + "value": "false" + }, + { + "flag": "--variance-threshold", + "name": "variance_threshold", + "usd_attribute": "crust:varianceThreshold", + "value": "0.05" + }, + { + "flag": "--min-samples", + "name": "min_samples_per_pixel", + "usd_attribute": "crust:minSamplesPerPixel", + "value": "32" + }, + { + "flag": "--neighbour-tolerance", + "name": "adaptive_neighbour_tolerance", + "usd_attribute": "crust:adaptiveNeighbourTolerance", + "value": "1" + }, + { + "flag": "--subdiv-level", + "name": "subdivision_level", + "usd_attribute": "crust:subdivisionLevel", + "value": "stage" + }, + { + "flag": "--subdiv-edge-length", + "name": "subdivision_edge_length", + "usd_attribute": "crust:subdivisionEdgeLength", + "value": "stage" + }, + { + "flag": "--auto-tx", + "name": "auto_tx", + "usd_attribute": null, + "value": "false" + } + ], + "findings": [], + "format": "crust-check/2", + "pass": null, + "precomp": null, + "products": [ + { + "channels": [ + "R", + "G", + "B" + ], + "file": "output.exr", + "prim": null + } + ], + "scene": { + "camera": "/scene/camera1", + "frame": null, + "path": "$ROOT/samples/cornellbox.usda", + "region": null, + "resolution": [ + 640, + 360 + ] + }, + "settings": null, + "warnings": [ + { + "code": "material.fallback_default", + "count": 1, + "kind": "skipped", + "message": "Material /scene/Looks/initialShadingGroup has no surface shader — using default grey OpenPBR", + "prims": [ + "/scene/Looks/initialShadingGroup" + ] + } + ] +} diff --git a/crates/crust-core/tests/data/import_baselines/check/cornellbox_guided.usda.json b/crates/crust-core/tests/data/import_baselines/check/cornellbox_guided.usda.json new file mode 100644 index 000000000..f636fb1fc --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/check/cornellbox_guided.usda.json @@ -0,0 +1,183 @@ +{ + "counts": { + "geometries": 10, + "kernel_memory": { + "bvh_nodes_bytes": 512, + "cubic_spans_bytes": 0, + "geometry_tables_bytes": 120, + "indices_bytes": 12, + "instances_bytes": 0, + "lanes": 28, + "lanes_filled": 14, + "leaves_bytes": 160, + "packets_bytes": 1344, + "packets_indexed_bytes": 0, + "prim_nodes_bytes": 192, + "total_bytes": 3012, + "triangle_records_bytes": 336, + "vertex_normals_bytes": 0, + "vertices_bytes": 336 + }, + "lights": 1, + "primvar_tables_bytes": 0, + "strand_tables_bytes": 0, + "top_level": { + "cubic_curve_spans": 0, + "curve_segments": 0, + "cylinders": 0, + "disks": 0, + "instances": 0, + "spheres": 3, + "triangles": 14 + }, + "unique": { + "cubic_curve_spans": 0, + "curve_segments": 0, + "cylinders": 0, + "disks": 0, + "instances": 0, + "spheres": 3, + "triangles": 14 + }, + "volumes": 0 + }, + "crust_version": "0.8.0", + "denied": [], + "effective_settings": [ + { + "flag": "-s", + "name": "samples_per_pixel", + "usd_attribute": "crust:samplesPerPixel", + "value": "64" + }, + { + "flag": null, + "name": "max_depth", + "usd_attribute": "crust:maxDepth", + "value": "8" + }, + { + "flag": "--strategy", + "name": "sampling_strategy", + "usd_attribute": "crust:samplingStrategy", + "value": "power" + }, + { + "flag": "--light-selection", + "name": "light_selection", + "usd_attribute": "crust:lightSelection", + "value": "power" + }, + { + "flag": "--light-samples", + "name": "light_samples", + "usd_attribute": "crust:lightSamples", + "value": "1" + }, + { + "flag": "--light-samples-indirect", + "name": "light_samples_indirect", + "usd_attribute": "crust:lightSamplesIndirect", + "value": "1" + }, + { + "flag": "--indirect-clamp", + "name": "indirect_clamp", + "usd_attribute": "crust:indirectClamp", + "value": "10" + }, + { + "flag": null, + "name": "exposure_scale", + "usd_attribute": null, + "value": "1" + }, + { + "flag": "--filter", + "name": "pixel_filter", + "usd_attribute": "crust:pixelFilter", + "value": "triangle" + }, + { + "flag": "--filter-radius", + "name": "pixel_filter_radius", + "usd_attribute": "crust:pixelFilterRadius", + "value": "1" + }, + { + "flag": "--sampler", + "name": "sampler", + "usd_attribute": "crust:sampler", + "value": "sobol" + }, + { + "flag": null, + "name": "path_guiding", + "usd_attribute": "crust:pathGuiding", + "value": "true" + }, + { + "flag": "--variance-threshold", + "name": "variance_threshold", + "usd_attribute": "crust:varianceThreshold", + "value": "0.05" + }, + { + "flag": "--min-samples", + "name": "min_samples_per_pixel", + "usd_attribute": "crust:minSamplesPerPixel", + "value": "16" + }, + { + "flag": "--neighbour-tolerance", + "name": "adaptive_neighbour_tolerance", + "usd_attribute": "crust:adaptiveNeighbourTolerance", + "value": "1" + }, + { + "flag": "--subdiv-level", + "name": "subdivision_level", + "usd_attribute": "crust:subdivisionLevel", + "value": "stage" + }, + { + "flag": "--subdiv-edge-length", + "name": "subdivision_edge_length", + "usd_attribute": "crust:subdivisionEdgeLength", + "value": "stage" + }, + { + "flag": "--auto-tx", + "name": "auto_tx", + "usd_attribute": null, + "value": "false" + } + ], + "findings": [], + "format": "crust-check/2", + "pass": null, + "precomp": null, + "products": [ + { + "channels": [ + "R", + "G", + "B" + ], + "file": "output.exr", + "prim": null + } + ], + "scene": { + "camera": "/World/Cam", + "frame": null, + "path": "$ROOT/samples/cornellbox_guided.usda", + "region": null, + "resolution": [ + 512, + 512 + ] + }, + "settings": "/Render/settings", + "warnings": [] +} diff --git a/crates/crust-core/tests/data/import_baselines/check/curves.usda.json b/crates/crust-core/tests/data/import_baselines/check/curves.usda.json new file mode 100644 index 000000000..13675cdda --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/check/curves.usda.json @@ -0,0 +1,183 @@ +{ + "counts": { + "geometries": 4, + "kernel_memory": { + "bvh_nodes_bytes": 384, + "cubic_spans_bytes": 288, + "geometry_tables_bytes": 72, + "indices_bytes": 32, + "instances_bytes": 192, + "lanes": 8, + "lanes_filled": 4, + "leaves_bytes": 128, + "packets_bytes": 384, + "packets_indexed_bytes": 0, + "prim_nodes_bytes": 192, + "total_bytes": 1864, + "triangle_records_bytes": 96, + "vertex_normals_bytes": 0, + "vertices_bytes": 96 + }, + "lights": 2, + "primvar_tables_bytes": 0, + "strand_tables_bytes": 0, + "top_level": { + "cubic_curve_spans": 0, + "curve_segments": 0, + "cylinders": 0, + "disks": 0, + "instances": 2, + "spheres": 0, + "triangles": 4 + }, + "unique": { + "cubic_curve_spans": 3, + "curve_segments": 3, + "cylinders": 0, + "disks": 0, + "instances": 2, + "spheres": 0, + "triangles": 4 + }, + "volumes": 0 + }, + "crust_version": "0.8.0", + "denied": [], + "effective_settings": [ + { + "flag": "-s", + "name": "samples_per_pixel", + "usd_attribute": "crust:samplesPerPixel", + "value": "8" + }, + { + "flag": null, + "name": "max_depth", + "usd_attribute": "crust:maxDepth", + "value": "4" + }, + { + "flag": "--strategy", + "name": "sampling_strategy", + "usd_attribute": "crust:samplingStrategy", + "value": "power" + }, + { + "flag": "--light-selection", + "name": "light_selection", + "usd_attribute": "crust:lightSelection", + "value": "power" + }, + { + "flag": "--light-samples", + "name": "light_samples", + "usd_attribute": "crust:lightSamples", + "value": "1" + }, + { + "flag": "--light-samples-indirect", + "name": "light_samples_indirect", + "usd_attribute": "crust:lightSamplesIndirect", + "value": "1" + }, + { + "flag": "--indirect-clamp", + "name": "indirect_clamp", + "usd_attribute": "crust:indirectClamp", + "value": "10" + }, + { + "flag": null, + "name": "exposure_scale", + "usd_attribute": null, + "value": "1" + }, + { + "flag": "--filter", + "name": "pixel_filter", + "usd_attribute": "crust:pixelFilter", + "value": "triangle" + }, + { + "flag": "--filter-radius", + "name": "pixel_filter_radius", + "usd_attribute": "crust:pixelFilterRadius", + "value": "1" + }, + { + "flag": "--sampler", + "name": "sampler", + "usd_attribute": "crust:sampler", + "value": "sobol" + }, + { + "flag": null, + "name": "path_guiding", + "usd_attribute": "crust:pathGuiding", + "value": "false" + }, + { + "flag": "--variance-threshold", + "name": "variance_threshold", + "usd_attribute": "crust:varianceThreshold", + "value": "0.05" + }, + { + "flag": "--min-samples", + "name": "min_samples_per_pixel", + "usd_attribute": "crust:minSamplesPerPixel", + "value": "4" + }, + { + "flag": "--neighbour-tolerance", + "name": "adaptive_neighbour_tolerance", + "usd_attribute": "crust:adaptiveNeighbourTolerance", + "value": "1" + }, + { + "flag": "--subdiv-level", + "name": "subdivision_level", + "usd_attribute": "crust:subdivisionLevel", + "value": "stage" + }, + { + "flag": "--subdiv-edge-length", + "name": "subdivision_edge_length", + "usd_attribute": "crust:subdivisionEdgeLength", + "value": "stage" + }, + { + "flag": "--auto-tx", + "name": "auto_tx", + "usd_attribute": null, + "value": "false" + } + ], + "findings": [], + "format": "crust-check/2", + "pass": null, + "precomp": null, + "products": [ + { + "channels": [ + "R", + "G", + "B" + ], + "file": "output.exr", + "prim": null + } + ], + "scene": { + "camera": "/World/Cam", + "frame": null, + "path": "$ROOT/samples/curves.usda", + "region": null, + "resolution": [ + 64, + 64 + ] + }, + "settings": "/Render/settings", + "warnings": [] +} diff --git a/crates/crust-core/tests/data/import_baselines/check/displacement.usda.json b/crates/crust-core/tests/data/import_baselines/check/displacement.usda.json new file mode 100644 index 000000000..572a7dd7f --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/check/displacement.usda.json @@ -0,0 +1,197 @@ +{ + "counts": { + "geometries": 3, + "kernel_memory": { + "bvh_nodes_bytes": 837376, + "cubic_spans_bytes": 0, + "geometry_tables_bytes": 36, + "indices_bytes": 0, + "instances_bytes": 0, + "lanes": 69976, + "lanes_filled": 65640, + "leaves_bytes": 204896, + "packets_bytes": 3358848, + "packets_indexed_bytes": 0, + "prim_nodes_bytes": 0, + "total_bytes": 6766692, + "triangle_records_bytes": 1572864, + "vertex_normals_bytes": 396336, + "vertices_bytes": 396336 + }, + "lights": 2, + "primvar_tables_bytes": 0, + "strand_tables_bytes": 0, + "top_level": { + "cubic_curve_spans": 0, + "curve_segments": 0, + "cylinders": 0, + "disks": 0, + "instances": 0, + "spheres": 0, + "triangles": 65536 + }, + "unique": { + "cubic_curve_spans": 0, + "curve_segments": 0, + "cylinders": 0, + "disks": 0, + "instances": 0, + "spheres": 0, + "triangles": 65536 + }, + "volumes": 0 + }, + "crust_version": "0.8.0", + "denied": [], + "effective_settings": [ + { + "flag": "-s", + "name": "samples_per_pixel", + "usd_attribute": "crust:samplesPerPixel", + "value": "64" + }, + { + "flag": null, + "name": "max_depth", + "usd_attribute": "crust:maxDepth", + "value": "4" + }, + { + "flag": "--strategy", + "name": "sampling_strategy", + "usd_attribute": "crust:samplingStrategy", + "value": "power" + }, + { + "flag": "--light-selection", + "name": "light_selection", + "usd_attribute": "crust:lightSelection", + "value": "power" + }, + { + "flag": "--light-samples", + "name": "light_samples", + "usd_attribute": "crust:lightSamples", + "value": "1" + }, + { + "flag": "--light-samples-indirect", + "name": "light_samples_indirect", + "usd_attribute": "crust:lightSamplesIndirect", + "value": "1" + }, + { + "flag": "--indirect-clamp", + "name": "indirect_clamp", + "usd_attribute": "crust:indirectClamp", + "value": "10" + }, + { + "flag": null, + "name": "exposure_scale", + "usd_attribute": null, + "value": "1" + }, + { + "flag": "--filter", + "name": "pixel_filter", + "usd_attribute": "crust:pixelFilter", + "value": "triangle" + }, + { + "flag": "--filter-radius", + "name": "pixel_filter_radius", + "usd_attribute": "crust:pixelFilterRadius", + "value": "1" + }, + { + "flag": "--sampler", + "name": "sampler", + "usd_attribute": "crust:sampler", + "value": "sobol" + }, + { + "flag": null, + "name": "path_guiding", + "usd_attribute": "crust:pathGuiding", + "value": "false" + }, + { + "flag": "--variance-threshold", + "name": "variance_threshold", + "usd_attribute": "crust:varianceThreshold", + "value": "0.05" + }, + { + "flag": "--min-samples", + "name": "min_samples_per_pixel", + "usd_attribute": "crust:minSamplesPerPixel", + "value": "16" + }, + { + "flag": "--neighbour-tolerance", + "name": "adaptive_neighbour_tolerance", + "usd_attribute": "crust:adaptiveNeighbourTolerance", + "value": "1" + }, + { + "flag": "--subdiv-level", + "name": "subdivision_level", + "usd_attribute": "crust:subdivisionLevel", + "value": "stage" + }, + { + "flag": "--subdiv-edge-length", + "name": "subdivision_edge_length", + "usd_attribute": "crust:subdivisionEdgeLength", + "value": "stage" + }, + { + "flag": "--auto-tx", + "name": "auto_tx", + "usd_attribute": null, + "value": "false" + } + ], + "findings": [ + { + "action": { + "flag": "--auto-tx", + "usd_attribute": null, + "value": "on" + }, + "evidence": { + "textures": 1.0 + }, + "id": "textures_without_tx", + "kind": "time", + "summary": "1 UV texture(s) have no .tx beside them: each is decoded whole at import and held resident instead of streamed" + } + ], + "format": "crust-check/2", + "pass": null, + "precomp": null, + "products": [ + { + "channels": [ + "R", + "G", + "B" + ], + "file": "output.exr", + "prim": null + } + ], + "scene": { + "camera": "/World/Cam", + "frame": null, + "path": "$ROOT/samples/displacement.usda", + "region": null, + "resolution": [ + 320, + 180 + ] + }, + "settings": "/Render/settings", + "warnings": [] +} diff --git a/crates/crust-core/tests/data/import_baselines/check/dome_backdrop.usda.json b/crates/crust-core/tests/data/import_baselines/check/dome_backdrop.usda.json new file mode 100644 index 000000000..66a27db6f --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/check/dome_backdrop.usda.json @@ -0,0 +1,183 @@ +{ + "counts": { + "geometries": 3, + "kernel_memory": { + "bvh_nodes_bytes": 128, + "cubic_spans_bytes": 0, + "geometry_tables_bytes": 36, + "indices_bytes": 8, + "instances_bytes": 0, + "lanes": 4, + "lanes_filled": 2, + "leaves_bytes": 48, + "packets_bytes": 192, + "packets_indexed_bytes": 0, + "prim_nodes_bytes": 128, + "total_bytes": 636, + "triangle_records_bytes": 48, + "vertex_normals_bytes": 0, + "vertices_bytes": 48 + }, + "lights": 1, + "primvar_tables_bytes": 0, + "strand_tables_bytes": 0, + "top_level": { + "cubic_curve_spans": 0, + "curve_segments": 0, + "cylinders": 0, + "disks": 0, + "instances": 0, + "spheres": 2, + "triangles": 2 + }, + "unique": { + "cubic_curve_spans": 0, + "curve_segments": 0, + "cylinders": 0, + "disks": 0, + "instances": 0, + "spheres": 2, + "triangles": 2 + }, + "volumes": 0 + }, + "crust_version": "0.8.0", + "denied": [], + "effective_settings": [ + { + "flag": "-s", + "name": "samples_per_pixel", + "usd_attribute": "crust:samplesPerPixel", + "value": "32" + }, + { + "flag": null, + "name": "max_depth", + "usd_attribute": "crust:maxDepth", + "value": "8" + }, + { + "flag": "--strategy", + "name": "sampling_strategy", + "usd_attribute": "crust:samplingStrategy", + "value": "power" + }, + { + "flag": "--light-selection", + "name": "light_selection", + "usd_attribute": "crust:lightSelection", + "value": "power" + }, + { + "flag": "--light-samples", + "name": "light_samples", + "usd_attribute": "crust:lightSamples", + "value": "1" + }, + { + "flag": "--light-samples-indirect", + "name": "light_samples_indirect", + "usd_attribute": "crust:lightSamplesIndirect", + "value": "1" + }, + { + "flag": "--indirect-clamp", + "name": "indirect_clamp", + "usd_attribute": "crust:indirectClamp", + "value": "10" + }, + { + "flag": null, + "name": "exposure_scale", + "usd_attribute": null, + "value": "1" + }, + { + "flag": "--filter", + "name": "pixel_filter", + "usd_attribute": "crust:pixelFilter", + "value": "triangle" + }, + { + "flag": "--filter-radius", + "name": "pixel_filter_radius", + "usd_attribute": "crust:pixelFilterRadius", + "value": "1" + }, + { + "flag": "--sampler", + "name": "sampler", + "usd_attribute": "crust:sampler", + "value": "sobol" + }, + { + "flag": null, + "name": "path_guiding", + "usd_attribute": "crust:pathGuiding", + "value": "false" + }, + { + "flag": "--variance-threshold", + "name": "variance_threshold", + "usd_attribute": "crust:varianceThreshold", + "value": "0.02" + }, + { + "flag": "--min-samples", + "name": "min_samples_per_pixel", + "usd_attribute": "crust:minSamplesPerPixel", + "value": "16" + }, + { + "flag": "--neighbour-tolerance", + "name": "adaptive_neighbour_tolerance", + "usd_attribute": "crust:adaptiveNeighbourTolerance", + "value": "1" + }, + { + "flag": "--subdiv-level", + "name": "subdivision_level", + "usd_attribute": "crust:subdivisionLevel", + "value": "stage" + }, + { + "flag": "--subdiv-edge-length", + "name": "subdivision_edge_length", + "usd_attribute": "crust:subdivisionEdgeLength", + "value": "stage" + }, + { + "flag": "--auto-tx", + "name": "auto_tx", + "usd_attribute": null, + "value": "false" + } + ], + "findings": [], + "format": "crust-check/2", + "pass": null, + "precomp": null, + "products": [ + { + "channels": [ + "R", + "G", + "B" + ], + "file": "output.exr", + "prim": null + } + ], + "scene": { + "camera": "/World/Cam", + "frame": null, + "path": "$ROOT/samples/dome_backdrop.usda", + "region": null, + "resolution": [ + 240, + 136 + ] + }, + "settings": "/Render/settings", + "warnings": [] +} diff --git a/crates/crust-core/tests/data/import_baselines/check/domelight.usda.json b/crates/crust-core/tests/data/import_baselines/check/domelight.usda.json new file mode 100644 index 000000000..5dd7773a7 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/check/domelight.usda.json @@ -0,0 +1,183 @@ +{ + "counts": { + "geometries": 3, + "kernel_memory": { + "bvh_nodes_bytes": 128, + "cubic_spans_bytes": 0, + "geometry_tables_bytes": 36, + "indices_bytes": 8, + "instances_bytes": 0, + "lanes": 4, + "lanes_filled": 2, + "leaves_bytes": 48, + "packets_bytes": 192, + "packets_indexed_bytes": 0, + "prim_nodes_bytes": 128, + "total_bytes": 636, + "triangle_records_bytes": 48, + "vertex_normals_bytes": 0, + "vertices_bytes": 48 + }, + "lights": 2, + "primvar_tables_bytes": 0, + "strand_tables_bytes": 0, + "top_level": { + "cubic_curve_spans": 0, + "curve_segments": 0, + "cylinders": 0, + "disks": 0, + "instances": 0, + "spheres": 2, + "triangles": 2 + }, + "unique": { + "cubic_curve_spans": 0, + "curve_segments": 0, + "cylinders": 0, + "disks": 0, + "instances": 0, + "spheres": 2, + "triangles": 2 + }, + "volumes": 0 + }, + "crust_version": "0.8.0", + "denied": [], + "effective_settings": [ + { + "flag": "-s", + "name": "samples_per_pixel", + "usd_attribute": "crust:samplesPerPixel", + "value": "96" + }, + { + "flag": null, + "name": "max_depth", + "usd_attribute": "crust:maxDepth", + "value": "8" + }, + { + "flag": "--strategy", + "name": "sampling_strategy", + "usd_attribute": "crust:samplingStrategy", + "value": "power" + }, + { + "flag": "--light-selection", + "name": "light_selection", + "usd_attribute": "crust:lightSelection", + "value": "power" + }, + { + "flag": "--light-samples", + "name": "light_samples", + "usd_attribute": "crust:lightSamples", + "value": "1" + }, + { + "flag": "--light-samples-indirect", + "name": "light_samples_indirect", + "usd_attribute": "crust:lightSamplesIndirect", + "value": "1" + }, + { + "flag": "--indirect-clamp", + "name": "indirect_clamp", + "usd_attribute": "crust:indirectClamp", + "value": "10" + }, + { + "flag": null, + "name": "exposure_scale", + "usd_attribute": null, + "value": "1" + }, + { + "flag": "--filter", + "name": "pixel_filter", + "usd_attribute": "crust:pixelFilter", + "value": "triangle" + }, + { + "flag": "--filter-radius", + "name": "pixel_filter_radius", + "usd_attribute": "crust:pixelFilterRadius", + "value": "1" + }, + { + "flag": "--sampler", + "name": "sampler", + "usd_attribute": "crust:sampler", + "value": "sobol" + }, + { + "flag": null, + "name": "path_guiding", + "usd_attribute": "crust:pathGuiding", + "value": "false" + }, + { + "flag": "--variance-threshold", + "name": "variance_threshold", + "usd_attribute": "crust:varianceThreshold", + "value": "0.02" + }, + { + "flag": "--min-samples", + "name": "min_samples_per_pixel", + "usd_attribute": "crust:minSamplesPerPixel", + "value": "32" + }, + { + "flag": "--neighbour-tolerance", + "name": "adaptive_neighbour_tolerance", + "usd_attribute": "crust:adaptiveNeighbourTolerance", + "value": "1" + }, + { + "flag": "--subdiv-level", + "name": "subdivision_level", + "usd_attribute": "crust:subdivisionLevel", + "value": "stage" + }, + { + "flag": "--subdiv-edge-length", + "name": "subdivision_edge_length", + "usd_attribute": "crust:subdivisionEdgeLength", + "value": "stage" + }, + { + "flag": "--auto-tx", + "name": "auto_tx", + "usd_attribute": null, + "value": "false" + } + ], + "findings": [], + "format": "crust-check/2", + "pass": null, + "precomp": null, + "products": [ + { + "channels": [ + "R", + "G", + "B" + ], + "file": "output.exr", + "prim": null + } + ], + "scene": { + "camera": "/World/Cam", + "frame": null, + "path": "$ROOT/samples/domelight.usda", + "region": null, + "resolution": [ + 480, + 270 + ] + }, + "settings": "/Render/settings", + "warnings": [] +} diff --git a/crates/crust-core/tests/data/import_baselines/check/fog.usda.json b/crates/crust-core/tests/data/import_baselines/check/fog.usda.json new file mode 100644 index 000000000..c03c2a2e6 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/check/fog.usda.json @@ -0,0 +1,183 @@ +{ + "counts": { + "geometries": 3, + "kernel_memory": { + "bvh_nodes_bytes": 256, + "cubic_spans_bytes": 0, + "geometry_tables_bytes": 36, + "indices_bytes": 4, + "instances_bytes": 0, + "lanes": 20, + "lanes_filled": 12, + "leaves_bytes": 96, + "packets_bytes": 960, + "packets_indexed_bytes": 0, + "prim_nodes_bytes": 64, + "total_bytes": 1992, + "triangle_records_bytes": 288, + "vertex_normals_bytes": 0, + "vertices_bytes": 288 + }, + "lights": 1, + "primvar_tables_bytes": 0, + "strand_tables_bytes": 0, + "top_level": { + "cubic_curve_spans": 0, + "curve_segments": 0, + "cylinders": 0, + "disks": 0, + "instances": 0, + "spheres": 1, + "triangles": 12 + }, + "unique": { + "cubic_curve_spans": 0, + "curve_segments": 0, + "cylinders": 0, + "disks": 0, + "instances": 0, + "spheres": 1, + "triangles": 12 + }, + "volumes": 1 + }, + "crust_version": "0.8.0", + "denied": [], + "effective_settings": [ + { + "flag": "-s", + "name": "samples_per_pixel", + "usd_attribute": "crust:samplesPerPixel", + "value": "64" + }, + { + "flag": null, + "name": "max_depth", + "usd_attribute": "crust:maxDepth", + "value": "16" + }, + { + "flag": "--strategy", + "name": "sampling_strategy", + "usd_attribute": "crust:samplingStrategy", + "value": "power" + }, + { + "flag": "--light-selection", + "name": "light_selection", + "usd_attribute": "crust:lightSelection", + "value": "power" + }, + { + "flag": "--light-samples", + "name": "light_samples", + "usd_attribute": "crust:lightSamples", + "value": "1" + }, + { + "flag": "--light-samples-indirect", + "name": "light_samples_indirect", + "usd_attribute": "crust:lightSamplesIndirect", + "value": "1" + }, + { + "flag": "--indirect-clamp", + "name": "indirect_clamp", + "usd_attribute": "crust:indirectClamp", + "value": "10" + }, + { + "flag": null, + "name": "exposure_scale", + "usd_attribute": null, + "value": "1" + }, + { + "flag": "--filter", + "name": "pixel_filter", + "usd_attribute": "crust:pixelFilter", + "value": "triangle" + }, + { + "flag": "--filter-radius", + "name": "pixel_filter_radius", + "usd_attribute": "crust:pixelFilterRadius", + "value": "1" + }, + { + "flag": "--sampler", + "name": "sampler", + "usd_attribute": "crust:sampler", + "value": "sobol" + }, + { + "flag": null, + "name": "path_guiding", + "usd_attribute": "crust:pathGuiding", + "value": "false" + }, + { + "flag": "--variance-threshold", + "name": "variance_threshold", + "usd_attribute": "crust:varianceThreshold", + "value": "0.05" + }, + { + "flag": "--min-samples", + "name": "min_samples_per_pixel", + "usd_attribute": "crust:minSamplesPerPixel", + "value": "16" + }, + { + "flag": "--neighbour-tolerance", + "name": "adaptive_neighbour_tolerance", + "usd_attribute": "crust:adaptiveNeighbourTolerance", + "value": "1" + }, + { + "flag": "--subdiv-level", + "name": "subdivision_level", + "usd_attribute": "crust:subdivisionLevel", + "value": "stage" + }, + { + "flag": "--subdiv-edge-length", + "name": "subdivision_edge_length", + "usd_attribute": "crust:subdivisionEdgeLength", + "value": "stage" + }, + { + "flag": "--auto-tx", + "name": "auto_tx", + "usd_attribute": null, + "value": "false" + } + ], + "findings": [], + "format": "crust-check/2", + "pass": null, + "precomp": null, + "products": [ + { + "channels": [ + "R", + "G", + "B" + ], + "file": "output.exr", + "prim": null + } + ], + "scene": { + "camera": "/World/Cam", + "frame": null, + "path": "$ROOT/samples/fog.usda", + "region": null, + "resolution": [ + 320, + 180 + ] + }, + "settings": "/Render/settings", + "warnings": [] +} diff --git a/crates/crust-core/tests/data/import_baselines/check/hair.usda.json b/crates/crust-core/tests/data/import_baselines/check/hair.usda.json new file mode 100644 index 000000000..8a8b68d34 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/check/hair.usda.json @@ -0,0 +1,183 @@ +{ + "counts": { + "geometries": 10, + "kernel_memory": { + "bvh_nodes_bytes": 24832, + "cubic_spans_bytes": 64512, + "geometry_tables_bytes": 204, + "indices_bytes": 2720, + "instances_bytes": 672, + "lanes": 8, + "lanes_filled": 4, + "leaves_bytes": 6736, + "packets_bytes": 384, + "packets_indexed_bytes": 0, + "prim_nodes_bytes": 64, + "total_bytes": 100316, + "triangle_records_bytes": 96, + "vertex_normals_bytes": 0, + "vertices_bytes": 96 + }, + "lights": 3, + "primvar_tables_bytes": 0, + "strand_tables_bytes": 0, + "top_level": { + "cubic_curve_spans": 0, + "curve_segments": 0, + "cylinders": 0, + "disks": 0, + "instances": 7, + "spheres": 1, + "triangles": 4 + }, + "unique": { + "cubic_curve_spans": 672, + "curve_segments": 0, + "cylinders": 0, + "disks": 0, + "instances": 7, + "spheres": 1, + "triangles": 4 + }, + "volumes": 0 + }, + "crust_version": "0.8.0", + "denied": [], + "effective_settings": [ + { + "flag": "-s", + "name": "samples_per_pixel", + "usd_attribute": "crust:samplesPerPixel", + "value": "16" + }, + { + "flag": null, + "name": "max_depth", + "usd_attribute": "crust:maxDepth", + "value": "8" + }, + { + "flag": "--strategy", + "name": "sampling_strategy", + "usd_attribute": "crust:samplingStrategy", + "value": "power" + }, + { + "flag": "--light-selection", + "name": "light_selection", + "usd_attribute": "crust:lightSelection", + "value": "power" + }, + { + "flag": "--light-samples", + "name": "light_samples", + "usd_attribute": "crust:lightSamples", + "value": "1" + }, + { + "flag": "--light-samples-indirect", + "name": "light_samples_indirect", + "usd_attribute": "crust:lightSamplesIndirect", + "value": "1" + }, + { + "flag": "--indirect-clamp", + "name": "indirect_clamp", + "usd_attribute": "crust:indirectClamp", + "value": "10" + }, + { + "flag": null, + "name": "exposure_scale", + "usd_attribute": null, + "value": "1" + }, + { + "flag": "--filter", + "name": "pixel_filter", + "usd_attribute": "crust:pixelFilter", + "value": "triangle" + }, + { + "flag": "--filter-radius", + "name": "pixel_filter_radius", + "usd_attribute": "crust:pixelFilterRadius", + "value": "1" + }, + { + "flag": "--sampler", + "name": "sampler", + "usd_attribute": "crust:sampler", + "value": "sobol" + }, + { + "flag": null, + "name": "path_guiding", + "usd_attribute": "crust:pathGuiding", + "value": "false" + }, + { + "flag": "--variance-threshold", + "name": "variance_threshold", + "usd_attribute": "crust:varianceThreshold", + "value": "0.05" + }, + { + "flag": "--min-samples", + "name": "min_samples_per_pixel", + "usd_attribute": "crust:minSamplesPerPixel", + "value": "8" + }, + { + "flag": "--neighbour-tolerance", + "name": "adaptive_neighbour_tolerance", + "usd_attribute": "crust:adaptiveNeighbourTolerance", + "value": "1" + }, + { + "flag": "--subdiv-level", + "name": "subdivision_level", + "usd_attribute": "crust:subdivisionLevel", + "value": "stage" + }, + { + "flag": "--subdiv-edge-length", + "name": "subdivision_edge_length", + "usd_attribute": "crust:subdivisionEdgeLength", + "value": "stage" + }, + { + "flag": "--auto-tx", + "name": "auto_tx", + "usd_attribute": null, + "value": "false" + } + ], + "findings": [], + "format": "crust-check/2", + "pass": null, + "precomp": null, + "products": [ + { + "channels": [ + "R", + "G", + "B" + ], + "file": "output.exr", + "prim": null + } + ], + "scene": { + "camera": "/World/Cam", + "frame": null, + "path": "$ROOT/samples/hair.usda", + "region": null, + "resolution": [ + 192, + 64 + ] + }, + "settings": "/Render/settings", + "warnings": [] +} diff --git a/crates/crust-core/tests/data/import_baselines/check/hair_variation.usda.json b/crates/crust-core/tests/data/import_baselines/check/hair_variation.usda.json new file mode 100644 index 000000000..3b3320bfa --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/check/hair_variation.usda.json @@ -0,0 +1,183 @@ +{ + "counts": { + "geometries": 4, + "kernel_memory": { + "bvh_nodes_bytes": 9472, + "cubic_spans_bytes": 23040, + "geometry_tables_bytes": 60, + "indices_bytes": 968, + "instances_bytes": 96, + "lanes": 8, + "lanes_filled": 4, + "leaves_bytes": 2432, + "packets_bytes": 384, + "packets_indexed_bytes": 0, + "prim_nodes_bytes": 64, + "total_bytes": 36708, + "triangle_records_bytes": 96, + "vertex_normals_bytes": 0, + "vertices_bytes": 96 + }, + "lights": 3, + "primvar_tables_bytes": 0, + "strand_tables_bytes": 3952, + "top_level": { + "cubic_curve_spans": 0, + "curve_segments": 0, + "cylinders": 0, + "disks": 0, + "instances": 1, + "spheres": 1, + "triangles": 4 + }, + "unique": { + "cubic_curve_spans": 240, + "curve_segments": 0, + "cylinders": 0, + "disks": 0, + "instances": 1, + "spheres": 1, + "triangles": 4 + }, + "volumes": 0 + }, + "crust_version": "0.8.0", + "denied": [], + "effective_settings": [ + { + "flag": "-s", + "name": "samples_per_pixel", + "usd_attribute": "crust:samplesPerPixel", + "value": "16" + }, + { + "flag": null, + "name": "max_depth", + "usd_attribute": "crust:maxDepth", + "value": "8" + }, + { + "flag": "--strategy", + "name": "sampling_strategy", + "usd_attribute": "crust:samplingStrategy", + "value": "power" + }, + { + "flag": "--light-selection", + "name": "light_selection", + "usd_attribute": "crust:lightSelection", + "value": "power" + }, + { + "flag": "--light-samples", + "name": "light_samples", + "usd_attribute": "crust:lightSamples", + "value": "1" + }, + { + "flag": "--light-samples-indirect", + "name": "light_samples_indirect", + "usd_attribute": "crust:lightSamplesIndirect", + "value": "1" + }, + { + "flag": "--indirect-clamp", + "name": "indirect_clamp", + "usd_attribute": "crust:indirectClamp", + "value": "10" + }, + { + "flag": null, + "name": "exposure_scale", + "usd_attribute": null, + "value": "1" + }, + { + "flag": "--filter", + "name": "pixel_filter", + "usd_attribute": "crust:pixelFilter", + "value": "triangle" + }, + { + "flag": "--filter-radius", + "name": "pixel_filter_radius", + "usd_attribute": "crust:pixelFilterRadius", + "value": "1" + }, + { + "flag": "--sampler", + "name": "sampler", + "usd_attribute": "crust:sampler", + "value": "sobol" + }, + { + "flag": null, + "name": "path_guiding", + "usd_attribute": "crust:pathGuiding", + "value": "false" + }, + { + "flag": "--variance-threshold", + "name": "variance_threshold", + "usd_attribute": "crust:varianceThreshold", + "value": "0.05" + }, + { + "flag": "--min-samples", + "name": "min_samples_per_pixel", + "usd_attribute": "crust:minSamplesPerPixel", + "value": "8" + }, + { + "flag": "--neighbour-tolerance", + "name": "adaptive_neighbour_tolerance", + "usd_attribute": "crust:adaptiveNeighbourTolerance", + "value": "1" + }, + { + "flag": "--subdiv-level", + "name": "subdivision_level", + "usd_attribute": "crust:subdivisionLevel", + "value": "stage" + }, + { + "flag": "--subdiv-edge-length", + "name": "subdivision_edge_length", + "usd_attribute": "crust:subdivisionEdgeLength", + "value": "stage" + }, + { + "flag": "--auto-tx", + "name": "auto_tx", + "usd_attribute": null, + "value": "false" + } + ], + "findings": [], + "format": "crust-check/2", + "pass": null, + "precomp": null, + "products": [ + { + "channels": [ + "R", + "G", + "B" + ], + "file": "output.exr", + "prim": null + } + ], + "scene": { + "camera": "/World/Cam", + "frame": null, + "path": "$ROOT/samples/hair_variation.usda", + "region": null, + "resolution": [ + 320, + 160 + ] + }, + "settings": "/Render/settings", + "warnings": [] +} diff --git a/crates/crust-core/tests/data/import_baselines/check/implicit_shapes.usda.json b/crates/crust-core/tests/data/import_baselines/check/implicit_shapes.usda.json new file mode 100644 index 000000000..b8282fc0a --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/check/implicit_shapes.usda.json @@ -0,0 +1,183 @@ +{ + "counts": { + "geometries": 11, + "kernel_memory": { + "bvh_nodes_bytes": 20736, + "cubic_spans_bytes": 0, + "geometry_tables_bytes": 132, + "indices_bytes": 0, + "instances_bytes": 0, + "lanes": 1880, + "lanes_filled": 1506, + "leaves_bytes": 5088, + "packets_bytes": 90240, + "packets_indexed_bytes": 0, + "prim_nodes_bytes": 0, + "total_bytes": 171492, + "triangle_records_bytes": 33672, + "vertex_normals_bytes": 10716, + "vertices_bytes": 10908 + }, + "lights": 2, + "primvar_tables_bytes": 0, + "strand_tables_bytes": 0, + "top_level": { + "cubic_curve_spans": 0, + "curve_segments": 0, + "cylinders": 0, + "disks": 0, + "instances": 0, + "spheres": 0, + "triangles": 1403 + }, + "unique": { + "cubic_curve_spans": 0, + "curve_segments": 0, + "cylinders": 0, + "disks": 0, + "instances": 0, + "spheres": 0, + "triangles": 1403 + }, + "volumes": 0 + }, + "crust_version": "0.8.0", + "denied": [], + "effective_settings": [ + { + "flag": "-s", + "name": "samples_per_pixel", + "usd_attribute": "crust:samplesPerPixel", + "value": "64" + }, + { + "flag": null, + "name": "max_depth", + "usd_attribute": "crust:maxDepth", + "value": "32" + }, + { + "flag": "--strategy", + "name": "sampling_strategy", + "usd_attribute": "crust:samplingStrategy", + "value": "power" + }, + { + "flag": "--light-selection", + "name": "light_selection", + "usd_attribute": "crust:lightSelection", + "value": "power" + }, + { + "flag": "--light-samples", + "name": "light_samples", + "usd_attribute": "crust:lightSamples", + "value": "1" + }, + { + "flag": "--light-samples-indirect", + "name": "light_samples_indirect", + "usd_attribute": "crust:lightSamplesIndirect", + "value": "1" + }, + { + "flag": "--indirect-clamp", + "name": "indirect_clamp", + "usd_attribute": "crust:indirectClamp", + "value": "10" + }, + { + "flag": null, + "name": "exposure_scale", + "usd_attribute": null, + "value": "1" + }, + { + "flag": "--filter", + "name": "pixel_filter", + "usd_attribute": "crust:pixelFilter", + "value": "triangle" + }, + { + "flag": "--filter-radius", + "name": "pixel_filter_radius", + "usd_attribute": "crust:pixelFilterRadius", + "value": "1" + }, + { + "flag": "--sampler", + "name": "sampler", + "usd_attribute": "crust:sampler", + "value": "sobol" + }, + { + "flag": null, + "name": "path_guiding", + "usd_attribute": "crust:pathGuiding", + "value": "false" + }, + { + "flag": "--variance-threshold", + "name": "variance_threshold", + "usd_attribute": "crust:varianceThreshold", + "value": "0.05" + }, + { + "flag": "--min-samples", + "name": "min_samples_per_pixel", + "usd_attribute": "crust:minSamplesPerPixel", + "value": "32" + }, + { + "flag": "--neighbour-tolerance", + "name": "adaptive_neighbour_tolerance", + "usd_attribute": "crust:adaptiveNeighbourTolerance", + "value": "1" + }, + { + "flag": "--subdiv-level", + "name": "subdivision_level", + "usd_attribute": "crust:subdivisionLevel", + "value": "stage" + }, + { + "flag": "--subdiv-edge-length", + "name": "subdivision_edge_length", + "usd_attribute": "crust:subdivisionEdgeLength", + "value": "stage" + }, + { + "flag": "--auto-tx", + "name": "auto_tx", + "usd_attribute": null, + "value": "false" + } + ], + "findings": [], + "format": "crust-check/2", + "pass": null, + "precomp": null, + "products": [ + { + "channels": [ + "R", + "G", + "B" + ], + "file": "output.exr", + "prim": null + } + ], + "scene": { + "camera": "/World/Cam", + "frame": null, + "path": "$ROOT/samples/implicit_shapes.usda", + "region": null, + "resolution": [ + 960, + 540 + ] + }, + "settings": "/Render/settings", + "warnings": [] +} diff --git a/crates/crust-core/tests/data/import_baselines/check/instancing.usda.json b/crates/crust-core/tests/data/import_baselines/check/instancing.usda.json new file mode 100644 index 000000000..d70b6bff3 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/check/instancing.usda.json @@ -0,0 +1,183 @@ +{ + "counts": { + "geometries": 13, + "kernel_memory": { + "bvh_nodes_bytes": 768, + "cubic_spans_bytes": 0, + "geometry_tables_bytes": 192, + "indices_bytes": 44, + "instances_bytes": 1056, + "lanes": 48, + "lanes_filled": 36, + "leaves_bytes": 240, + "packets_bytes": 2304, + "packets_indexed_bytes": 0, + "prim_nodes_bytes": 0, + "total_bytes": 5828, + "triangle_records_bytes": 864, + "vertex_normals_bytes": 0, + "vertices_bytes": 360 + }, + "lights": 2, + "primvar_tables_bytes": 0, + "strand_tables_bytes": 0, + "top_level": { + "cubic_curve_spans": 0, + "curve_segments": 0, + "cylinders": 0, + "disks": 0, + "instances": 11, + "spheres": 0, + "triangles": 4 + }, + "unique": { + "cubic_curve_spans": 0, + "curve_segments": 0, + "cylinders": 0, + "disks": 0, + "instances": 11, + "spheres": 0, + "triangles": 36 + }, + "volumes": 0 + }, + "crust_version": "0.8.0", + "denied": [], + "effective_settings": [ + { + "flag": "-s", + "name": "samples_per_pixel", + "usd_attribute": "crust:samplesPerPixel", + "value": "48" + }, + { + "flag": null, + "name": "max_depth", + "usd_attribute": "crust:maxDepth", + "value": "8" + }, + { + "flag": "--strategy", + "name": "sampling_strategy", + "usd_attribute": "crust:samplingStrategy", + "value": "power" + }, + { + "flag": "--light-selection", + "name": "light_selection", + "usd_attribute": "crust:lightSelection", + "value": "power" + }, + { + "flag": "--light-samples", + "name": "light_samples", + "usd_attribute": "crust:lightSamples", + "value": "1" + }, + { + "flag": "--light-samples-indirect", + "name": "light_samples_indirect", + "usd_attribute": "crust:lightSamplesIndirect", + "value": "1" + }, + { + "flag": "--indirect-clamp", + "name": "indirect_clamp", + "usd_attribute": "crust:indirectClamp", + "value": "10" + }, + { + "flag": null, + "name": "exposure_scale", + "usd_attribute": null, + "value": "1" + }, + { + "flag": "--filter", + "name": "pixel_filter", + "usd_attribute": "crust:pixelFilter", + "value": "triangle" + }, + { + "flag": "--filter-radius", + "name": "pixel_filter_radius", + "usd_attribute": "crust:pixelFilterRadius", + "value": "1" + }, + { + "flag": "--sampler", + "name": "sampler", + "usd_attribute": "crust:sampler", + "value": "sobol" + }, + { + "flag": null, + "name": "path_guiding", + "usd_attribute": "crust:pathGuiding", + "value": "false" + }, + { + "flag": "--variance-threshold", + "name": "variance_threshold", + "usd_attribute": "crust:varianceThreshold", + "value": "0.02" + }, + { + "flag": "--min-samples", + "name": "min_samples_per_pixel", + "usd_attribute": "crust:minSamplesPerPixel", + "value": "16" + }, + { + "flag": "--neighbour-tolerance", + "name": "adaptive_neighbour_tolerance", + "usd_attribute": "crust:adaptiveNeighbourTolerance", + "value": "1" + }, + { + "flag": "--subdiv-level", + "name": "subdivision_level", + "usd_attribute": "crust:subdivisionLevel", + "value": "stage" + }, + { + "flag": "--subdiv-edge-length", + "name": "subdivision_edge_length", + "usd_attribute": "crust:subdivisionEdgeLength", + "value": "stage" + }, + { + "flag": "--auto-tx", + "name": "auto_tx", + "usd_attribute": null, + "value": "false" + } + ], + "findings": [], + "format": "crust-check/2", + "pass": null, + "precomp": null, + "products": [ + { + "channels": [ + "R", + "G", + "B" + ], + "file": "output.exr", + "prim": null + } + ], + "scene": { + "camera": "/World/Cam", + "frame": null, + "path": "$ROOT/samples/instancing.usda", + "region": null, + "resolution": [ + 480, + 270 + ] + }, + "settings": "/Render/settings", + "warnings": [] +} diff --git a/crates/crust-core/tests/data/import_baselines/check/light_linking.usda.json b/crates/crust-core/tests/data/import_baselines/check/light_linking.usda.json new file mode 100644 index 000000000..710749579 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/check/light_linking.usda.json @@ -0,0 +1,183 @@ +{ + "counts": { + "geometries": 8, + "kernel_memory": { + "bvh_nodes_bytes": 512, + "cubic_spans_bytes": 0, + "geometry_tables_bytes": 96, + "indices_bytes": 24, + "instances_bytes": 0, + "lanes": 28, + "lanes_filled": 17, + "leaves_bytes": 160, + "packets_bytes": 1344, + "packets_indexed_bytes": 0, + "prim_nodes_bytes": 384, + "total_bytes": 3000, + "triangle_records_bytes": 336, + "vertex_normals_bytes": 0, + "vertices_bytes": 144 + }, + "lights": 3, + "primvar_tables_bytes": 0, + "strand_tables_bytes": 0, + "top_level": { + "cubic_curve_spans": 0, + "curve_segments": 0, + "cylinders": 0, + "disks": 0, + "instances": 0, + "spheres": 6, + "triangles": 14 + }, + "unique": { + "cubic_curve_spans": 0, + "curve_segments": 0, + "cylinders": 0, + "disks": 0, + "instances": 0, + "spheres": 6, + "triangles": 14 + }, + "volumes": 0 + }, + "crust_version": "0.8.0", + "denied": [], + "effective_settings": [ + { + "flag": "-s", + "name": "samples_per_pixel", + "usd_attribute": "crust:samplesPerPixel", + "value": "64" + }, + { + "flag": null, + "name": "max_depth", + "usd_attribute": "crust:maxDepth", + "value": "4" + }, + { + "flag": "--strategy", + "name": "sampling_strategy", + "usd_attribute": "crust:samplingStrategy", + "value": "power" + }, + { + "flag": "--light-selection", + "name": "light_selection", + "usd_attribute": "crust:lightSelection", + "value": "power" + }, + { + "flag": "--light-samples", + "name": "light_samples", + "usd_attribute": "crust:lightSamples", + "value": "1" + }, + { + "flag": "--light-samples-indirect", + "name": "light_samples_indirect", + "usd_attribute": "crust:lightSamplesIndirect", + "value": "1" + }, + { + "flag": "--indirect-clamp", + "name": "indirect_clamp", + "usd_attribute": "crust:indirectClamp", + "value": "10" + }, + { + "flag": null, + "name": "exposure_scale", + "usd_attribute": null, + "value": "1" + }, + { + "flag": "--filter", + "name": "pixel_filter", + "usd_attribute": "crust:pixelFilter", + "value": "triangle" + }, + { + "flag": "--filter-radius", + "name": "pixel_filter_radius", + "usd_attribute": "crust:pixelFilterRadius", + "value": "1" + }, + { + "flag": "--sampler", + "name": "sampler", + "usd_attribute": "crust:sampler", + "value": "sobol" + }, + { + "flag": null, + "name": "path_guiding", + "usd_attribute": "crust:pathGuiding", + "value": "false" + }, + { + "flag": "--variance-threshold", + "name": "variance_threshold", + "usd_attribute": "crust:varianceThreshold", + "value": "0.05" + }, + { + "flag": "--min-samples", + "name": "min_samples_per_pixel", + "usd_attribute": "crust:minSamplesPerPixel", + "value": "16" + }, + { + "flag": "--neighbour-tolerance", + "name": "adaptive_neighbour_tolerance", + "usd_attribute": "crust:adaptiveNeighbourTolerance", + "value": "1" + }, + { + "flag": "--subdiv-level", + "name": "subdivision_level", + "usd_attribute": "crust:subdivisionLevel", + "value": "stage" + }, + { + "flag": "--subdiv-edge-length", + "name": "subdivision_edge_length", + "usd_attribute": "crust:subdivisionEdgeLength", + "value": "stage" + }, + { + "flag": "--auto-tx", + "name": "auto_tx", + "usd_attribute": null, + "value": "false" + } + ], + "findings": [], + "format": "crust-check/2", + "pass": null, + "precomp": null, + "products": [ + { + "channels": [ + "R", + "G", + "B" + ], + "file": "output.exr", + "prim": null + } + ], + "scene": { + "camera": "/World/Cam", + "frame": null, + "path": "$ROOT/samples/light_linking.usda", + "region": null, + "resolution": [ + 160, + 90 + ] + }, + "settings": "/Render/settings", + "warnings": [] +} diff --git a/crates/crust-core/tests/data/import_baselines/check/light_visibility.usda.json b/crates/crust-core/tests/data/import_baselines/check/light_visibility.usda.json new file mode 100644 index 000000000..1d7f1c91b --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/check/light_visibility.usda.json @@ -0,0 +1,183 @@ +{ + "counts": { + "geometries": 4, + "kernel_memory": { + "bvh_nodes_bytes": 256, + "cubic_spans_bytes": 0, + "geometry_tables_bytes": 48, + "indices_bytes": 12, + "instances_bytes": 0, + "lanes": 12, + "lanes_filled": 5, + "leaves_bytes": 80, + "packets_bytes": 576, + "packets_indexed_bytes": 0, + "prim_nodes_bytes": 192, + "total_bytes": 1260, + "triangle_records_bytes": 48, + "vertex_normals_bytes": 0, + "vertices_bytes": 48 + }, + "lights": 3, + "primvar_tables_bytes": 0, + "strand_tables_bytes": 0, + "top_level": { + "cubic_curve_spans": 0, + "curve_segments": 0, + "cylinders": 0, + "disks": 0, + "instances": 0, + "spheres": 3, + "triangles": 2 + }, + "unique": { + "cubic_curve_spans": 0, + "curve_segments": 0, + "cylinders": 0, + "disks": 0, + "instances": 0, + "spheres": 3, + "triangles": 2 + }, + "volumes": 0 + }, + "crust_version": "0.8.0", + "denied": [], + "effective_settings": [ + { + "flag": "-s", + "name": "samples_per_pixel", + "usd_attribute": "crust:samplesPerPixel", + "value": "8" + }, + { + "flag": null, + "name": "max_depth", + "usd_attribute": "crust:maxDepth", + "value": "4" + }, + { + "flag": "--strategy", + "name": "sampling_strategy", + "usd_attribute": "crust:samplingStrategy", + "value": "power" + }, + { + "flag": "--light-selection", + "name": "light_selection", + "usd_attribute": "crust:lightSelection", + "value": "power" + }, + { + "flag": "--light-samples", + "name": "light_samples", + "usd_attribute": "crust:lightSamples", + "value": "1" + }, + { + "flag": "--light-samples-indirect", + "name": "light_samples_indirect", + "usd_attribute": "crust:lightSamplesIndirect", + "value": "1" + }, + { + "flag": "--indirect-clamp", + "name": "indirect_clamp", + "usd_attribute": "crust:indirectClamp", + "value": "10" + }, + { + "flag": null, + "name": "exposure_scale", + "usd_attribute": null, + "value": "1" + }, + { + "flag": "--filter", + "name": "pixel_filter", + "usd_attribute": "crust:pixelFilter", + "value": "triangle" + }, + { + "flag": "--filter-radius", + "name": "pixel_filter_radius", + "usd_attribute": "crust:pixelFilterRadius", + "value": "1" + }, + { + "flag": "--sampler", + "name": "sampler", + "usd_attribute": "crust:sampler", + "value": "sobol" + }, + { + "flag": null, + "name": "path_guiding", + "usd_attribute": "crust:pathGuiding", + "value": "false" + }, + { + "flag": "--variance-threshold", + "name": "variance_threshold", + "usd_attribute": "crust:varianceThreshold", + "value": "0.05" + }, + { + "flag": "--min-samples", + "name": "min_samples_per_pixel", + "usd_attribute": "crust:minSamplesPerPixel", + "value": "4" + }, + { + "flag": "--neighbour-tolerance", + "name": "adaptive_neighbour_tolerance", + "usd_attribute": "crust:adaptiveNeighbourTolerance", + "value": "1" + }, + { + "flag": "--subdiv-level", + "name": "subdivision_level", + "usd_attribute": "crust:subdivisionLevel", + "value": "stage" + }, + { + "flag": "--subdiv-edge-length", + "name": "subdivision_edge_length", + "usd_attribute": "crust:subdivisionEdgeLength", + "value": "stage" + }, + { + "flag": "--auto-tx", + "name": "auto_tx", + "usd_attribute": null, + "value": "false" + } + ], + "findings": [], + "format": "crust-check/2", + "pass": null, + "precomp": null, + "products": [ + { + "channels": [ + "R", + "G", + "B" + ], + "file": "output.exr", + "prim": null + } + ], + "scene": { + "camera": "/World/Cam", + "frame": null, + "path": "$ROOT/samples/light_visibility.usda", + "region": null, + "resolution": [ + 64, + 64 + ] + }, + "settings": "/Render/settings", + "warnings": [] +} diff --git a/crates/crust-core/tests/data/import_baselines/check/many_lights.usda.json b/crates/crust-core/tests/data/import_baselines/check/many_lights.usda.json new file mode 100644 index 000000000..62be23c2f --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/check/many_lights.usda.json @@ -0,0 +1,183 @@ +{ + "counts": { + "geometries": 262, + "kernel_memory": { + "bvh_nodes_bytes": 13568, + "cubic_spans_bytes": 0, + "geometry_tables_bytes": 3156, + "indices_bytes": 716, + "instances_bytes": 480, + "lanes": 524, + "lanes_filled": 262, + "leaves_bytes": 3856, + "packets_bytes": 25152, + "packets_indexed_bytes": 0, + "prim_nodes_bytes": 10240, + "total_bytes": 66864, + "triangle_records_bytes": 4944, + "vertex_normals_bytes": 0, + "vertices_bytes": 4752 + }, + "lights": 257, + "primvar_tables_bytes": 0, + "strand_tables_bytes": 0, + "top_level": { + "cubic_curve_spans": 0, + "curve_segments": 0, + "cylinders": 0, + "disks": 0, + "instances": 5, + "spheres": 160, + "triangles": 194 + }, + "unique": { + "cubic_curve_spans": 0, + "curve_segments": 0, + "cylinders": 0, + "disks": 0, + "instances": 5, + "spheres": 160, + "triangles": 206 + }, + "volumes": 0 + }, + "crust_version": "0.8.0", + "denied": [], + "effective_settings": [ + { + "flag": "-s", + "name": "samples_per_pixel", + "usd_attribute": "crust:samplesPerPixel", + "value": "64" + }, + { + "flag": null, + "name": "max_depth", + "usd_attribute": "crust:maxDepth", + "value": "4" + }, + { + "flag": "--strategy", + "name": "sampling_strategy", + "usd_attribute": "crust:samplingStrategy", + "value": "power" + }, + { + "flag": "--light-selection", + "name": "light_selection", + "usd_attribute": "crust:lightSelection", + "value": "power" + }, + { + "flag": "--light-samples", + "name": "light_samples", + "usd_attribute": "crust:lightSamples", + "value": "1" + }, + { + "flag": "--light-samples-indirect", + "name": "light_samples_indirect", + "usd_attribute": "crust:lightSamplesIndirect", + "value": "1" + }, + { + "flag": "--indirect-clamp", + "name": "indirect_clamp", + "usd_attribute": "crust:indirectClamp", + "value": "10" + }, + { + "flag": null, + "name": "exposure_scale", + "usd_attribute": null, + "value": "1" + }, + { + "flag": "--filter", + "name": "pixel_filter", + "usd_attribute": "crust:pixelFilter", + "value": "triangle" + }, + { + "flag": "--filter-radius", + "name": "pixel_filter_radius", + "usd_attribute": "crust:pixelFilterRadius", + "value": "1" + }, + { + "flag": "--sampler", + "name": "sampler", + "usd_attribute": "crust:sampler", + "value": "sobol" + }, + { + "flag": null, + "name": "path_guiding", + "usd_attribute": "crust:pathGuiding", + "value": "false" + }, + { + "flag": "--variance-threshold", + "name": "variance_threshold", + "usd_attribute": "crust:varianceThreshold", + "value": "0.05" + }, + { + "flag": "--min-samples", + "name": "min_samples_per_pixel", + "usd_attribute": "crust:minSamplesPerPixel", + "value": "32" + }, + { + "flag": "--neighbour-tolerance", + "name": "adaptive_neighbour_tolerance", + "usd_attribute": "crust:adaptiveNeighbourTolerance", + "value": "1" + }, + { + "flag": "--subdiv-level", + "name": "subdivision_level", + "usd_attribute": "crust:subdivisionLevel", + "value": "stage" + }, + { + "flag": "--subdiv-edge-length", + "name": "subdivision_edge_length", + "usd_attribute": "crust:subdivisionEdgeLength", + "value": "stage" + }, + { + "flag": "--auto-tx", + "name": "auto_tx", + "usd_attribute": null, + "value": "false" + } + ], + "findings": [], + "format": "crust-check/2", + "pass": null, + "precomp": null, + "products": [ + { + "channels": [ + "R", + "G", + "B" + ], + "file": "output.exr", + "prim": null + } + ], + "scene": { + "camera": "/World/Cam", + "frame": null, + "path": "$ROOT/samples/many_lights.usda", + "region": null, + "resolution": [ + 480, + 270 + ] + }, + "settings": "/Render/settings", + "warnings": [] +} diff --git a/crates/crust-core/tests/data/import_baselines/check/mass_spike.usda.json b/crates/crust-core/tests/data/import_baselines/check/mass_spike.usda.json new file mode 100644 index 000000000..029cc83d7 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/check/mass_spike.usda.json @@ -0,0 +1,183 @@ +{ + "counts": { + "geometries": 3, + "kernel_memory": { + "bvh_nodes_bytes": 11136, + "cubic_spans_bytes": 0, + "geometry_tables_bytes": 72, + "indices_bytes": 1152, + "instances_bytes": 288, + "lanes": 0, + "lanes_filled": 0, + "leaves_bytes": 2736, + "packets_bytes": 0, + "packets_indexed_bytes": 0, + "prim_nodes_bytes": 18240, + "total_bytes": 33624, + "triangle_records_bytes": 0, + "vertex_normals_bytes": 0, + "vertices_bytes": 0 + }, + "lights": 2, + "primvar_tables_bytes": 0, + "strand_tables_bytes": 0, + "top_level": { + "cubic_curve_spans": 0, + "curve_segments": 0, + "cylinders": 0, + "disks": 0, + "instances": 3, + "spheres": 0, + "triangles": 0 + }, + "unique": { + "cubic_curve_spans": 0, + "curve_segments": 285, + "cylinders": 0, + "disks": 0, + "instances": 3, + "spheres": 0, + "triangles": 0 + }, + "volumes": 0 + }, + "crust_version": "0.8.0", + "denied": [], + "effective_settings": [ + { + "flag": "-s", + "name": "samples_per_pixel", + "usd_attribute": "crust:samplesPerPixel", + "value": "128" + }, + { + "flag": null, + "name": "max_depth", + "usd_attribute": "crust:maxDepth", + "value": "32" + }, + { + "flag": "--strategy", + "name": "sampling_strategy", + "usd_attribute": "crust:samplingStrategy", + "value": "power" + }, + { + "flag": "--light-selection", + "name": "light_selection", + "usd_attribute": "crust:lightSelection", + "value": "power" + }, + { + "flag": "--light-samples", + "name": "light_samples", + "usd_attribute": "crust:lightSamples", + "value": "1" + }, + { + "flag": "--light-samples-indirect", + "name": "light_samples_indirect", + "usd_attribute": "crust:lightSamplesIndirect", + "value": "1" + }, + { + "flag": "--indirect-clamp", + "name": "indirect_clamp", + "usd_attribute": "crust:indirectClamp", + "value": "10" + }, + { + "flag": null, + "name": "exposure_scale", + "usd_attribute": null, + "value": "1" + }, + { + "flag": "--filter", + "name": "pixel_filter", + "usd_attribute": "crust:pixelFilter", + "value": "triangle" + }, + { + "flag": "--filter-radius", + "name": "pixel_filter_radius", + "usd_attribute": "crust:pixelFilterRadius", + "value": "1" + }, + { + "flag": "--sampler", + "name": "sampler", + "usd_attribute": "crust:sampler", + "value": "sobol" + }, + { + "flag": null, + "name": "path_guiding", + "usd_attribute": "crust:pathGuiding", + "value": "false" + }, + { + "flag": "--variance-threshold", + "name": "variance_threshold", + "usd_attribute": "crust:varianceThreshold", + "value": "0.05" + }, + { + "flag": "--min-samples", + "name": "min_samples_per_pixel", + "usd_attribute": "crust:minSamplesPerPixel", + "value": "32" + }, + { + "flag": "--neighbour-tolerance", + "name": "adaptive_neighbour_tolerance", + "usd_attribute": "crust:adaptiveNeighbourTolerance", + "value": "1" + }, + { + "flag": "--subdiv-level", + "name": "subdivision_level", + "usd_attribute": "crust:subdivisionLevel", + "value": "stage" + }, + { + "flag": "--subdiv-edge-length", + "name": "subdivision_edge_length", + "usd_attribute": "crust:subdivisionEdgeLength", + "value": "stage" + }, + { + "flag": "--auto-tx", + "name": "auto_tx", + "usd_attribute": null, + "value": "false" + } + ], + "findings": [], + "format": "crust-check/2", + "pass": null, + "precomp": null, + "products": [ + { + "channels": [ + "R", + "G", + "B" + ], + "file": "output.exr", + "prim": null + } + ], + "scene": { + "camera": "/World/Camera", + "frame": null, + "path": "$ROOT/samples/mass_spike.usda", + "region": null, + "resolution": [ + 640, + 360 + ] + }, + "settings": null, + "warnings": [] +} diff --git a/crates/crust-core/tests/data/import_baselines/check/materialx_basic.usda.json b/crates/crust-core/tests/data/import_baselines/check/materialx_basic.usda.json new file mode 100644 index 000000000..3497de3d9 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/check/materialx_basic.usda.json @@ -0,0 +1,197 @@ +{ + "counts": { + "geometries": 5, + "kernel_memory": { + "bvh_nodes_bytes": 128, + "cubic_spans_bytes": 0, + "geometry_tables_bytes": 60, + "indices_bytes": 0, + "instances_bytes": 0, + "lanes": 12, + "lanes_filled": 10, + "leaves_bytes": 48, + "packets_bytes": 576, + "packets_indexed_bytes": 0, + "prim_nodes_bytes": 0, + "total_bytes": 1292, + "triangle_records_bytes": 240, + "vertex_normals_bytes": 0, + "vertices_bytes": 240 + }, + "lights": 2, + "primvar_tables_bytes": 0, + "strand_tables_bytes": 0, + "top_level": { + "cubic_curve_spans": 0, + "curve_segments": 0, + "cylinders": 0, + "disks": 0, + "instances": 0, + "spheres": 0, + "triangles": 10 + }, + "unique": { + "cubic_curve_spans": 0, + "curve_segments": 0, + "cylinders": 0, + "disks": 0, + "instances": 0, + "spheres": 0, + "triangles": 10 + }, + "volumes": 0 + }, + "crust_version": "0.8.0", + "denied": [], + "effective_settings": [ + { + "flag": "-s", + "name": "samples_per_pixel", + "usd_attribute": "crust:samplesPerPixel", + "value": "64" + }, + { + "flag": null, + "name": "max_depth", + "usd_attribute": "crust:maxDepth", + "value": "8" + }, + { + "flag": "--strategy", + "name": "sampling_strategy", + "usd_attribute": "crust:samplingStrategy", + "value": "power" + }, + { + "flag": "--light-selection", + "name": "light_selection", + "usd_attribute": "crust:lightSelection", + "value": "power" + }, + { + "flag": "--light-samples", + "name": "light_samples", + "usd_attribute": "crust:lightSamples", + "value": "1" + }, + { + "flag": "--light-samples-indirect", + "name": "light_samples_indirect", + "usd_attribute": "crust:lightSamplesIndirect", + "value": "1" + }, + { + "flag": "--indirect-clamp", + "name": "indirect_clamp", + "usd_attribute": "crust:indirectClamp", + "value": "10" + }, + { + "flag": null, + "name": "exposure_scale", + "usd_attribute": null, + "value": "1" + }, + { + "flag": "--filter", + "name": "pixel_filter", + "usd_attribute": "crust:pixelFilter", + "value": "triangle" + }, + { + "flag": "--filter-radius", + "name": "pixel_filter_radius", + "usd_attribute": "crust:pixelFilterRadius", + "value": "1" + }, + { + "flag": "--sampler", + "name": "sampler", + "usd_attribute": "crust:sampler", + "value": "sobol" + }, + { + "flag": null, + "name": "path_guiding", + "usd_attribute": "crust:pathGuiding", + "value": "false" + }, + { + "flag": "--variance-threshold", + "name": "variance_threshold", + "usd_attribute": "crust:varianceThreshold", + "value": "0.05" + }, + { + "flag": "--min-samples", + "name": "min_samples_per_pixel", + "usd_attribute": "crust:minSamplesPerPixel", + "value": "32" + }, + { + "flag": "--neighbour-tolerance", + "name": "adaptive_neighbour_tolerance", + "usd_attribute": "crust:adaptiveNeighbourTolerance", + "value": "1" + }, + { + "flag": "--subdiv-level", + "name": "subdivision_level", + "usd_attribute": "crust:subdivisionLevel", + "value": "stage" + }, + { + "flag": "--subdiv-edge-length", + "name": "subdivision_edge_length", + "usd_attribute": "crust:subdivisionEdgeLength", + "value": "stage" + }, + { + "flag": "--auto-tx", + "name": "auto_tx", + "usd_attribute": null, + "value": "false" + } + ], + "findings": [ + { + "action": { + "flag": "--auto-tx", + "usd_attribute": null, + "value": "on" + }, + "evidence": { + "textures": 3.0 + }, + "id": "textures_without_tx", + "kind": "time", + "summary": "3 UV texture(s) have no .tx beside them: each is decoded whole at import and held resident instead of streamed" + } + ], + "format": "crust-check/2", + "pass": null, + "precomp": null, + "products": [ + { + "channels": [ + "R", + "G", + "B" + ], + "file": "output.exr", + "prim": null + } + ], + "scene": { + "camera": "/World/ShotCam", + "frame": null, + "path": "$ROOT/samples/materialx_basic.usda", + "region": null, + "resolution": [ + 640, + 360 + ] + }, + "settings": "/Render/settings", + "warnings": [] +} diff --git a/crates/crust-core/tests/data/import_baselines/check/materialx_cutout.usda.json b/crates/crust-core/tests/data/import_baselines/check/materialx_cutout.usda.json new file mode 100644 index 000000000..0c871effd --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/check/materialx_cutout.usda.json @@ -0,0 +1,183 @@ +{ + "counts": { + "geometries": 5, + "kernel_memory": { + "bvh_nodes_bytes": 256, + "cubic_spans_bytes": 0, + "geometry_tables_bytes": 60, + "indices_bytes": 12, + "instances_bytes": 0, + "lanes": 8, + "lanes_filled": 4, + "leaves_bytes": 80, + "packets_bytes": 384, + "packets_indexed_bytes": 0, + "prim_nodes_bytes": 192, + "total_bytes": 1176, + "triangle_records_bytes": 96, + "vertex_normals_bytes": 0, + "vertices_bytes": 96 + }, + "lights": 2, + "primvar_tables_bytes": 0, + "strand_tables_bytes": 0, + "top_level": { + "cubic_curve_spans": 0, + "curve_segments": 0, + "cylinders": 0, + "disks": 0, + "instances": 0, + "spheres": 3, + "triangles": 4 + }, + "unique": { + "cubic_curve_spans": 0, + "curve_segments": 0, + "cylinders": 0, + "disks": 0, + "instances": 0, + "spheres": 3, + "triangles": 4 + }, + "volumes": 0 + }, + "crust_version": "0.8.0", + "denied": [], + "effective_settings": [ + { + "flag": "-s", + "name": "samples_per_pixel", + "usd_attribute": "crust:samplesPerPixel", + "value": "64" + }, + { + "flag": null, + "name": "max_depth", + "usd_attribute": "crust:maxDepth", + "value": "12" + }, + { + "flag": "--strategy", + "name": "sampling_strategy", + "usd_attribute": "crust:samplingStrategy", + "value": "power" + }, + { + "flag": "--light-selection", + "name": "light_selection", + "usd_attribute": "crust:lightSelection", + "value": "power" + }, + { + "flag": "--light-samples", + "name": "light_samples", + "usd_attribute": "crust:lightSamples", + "value": "1" + }, + { + "flag": "--light-samples-indirect", + "name": "light_samples_indirect", + "usd_attribute": "crust:lightSamplesIndirect", + "value": "1" + }, + { + "flag": "--indirect-clamp", + "name": "indirect_clamp", + "usd_attribute": "crust:indirectClamp", + "value": "10" + }, + { + "flag": null, + "name": "exposure_scale", + "usd_attribute": null, + "value": "1" + }, + { + "flag": "--filter", + "name": "pixel_filter", + "usd_attribute": "crust:pixelFilter", + "value": "triangle" + }, + { + "flag": "--filter-radius", + "name": "pixel_filter_radius", + "usd_attribute": "crust:pixelFilterRadius", + "value": "1" + }, + { + "flag": "--sampler", + "name": "sampler", + "usd_attribute": "crust:sampler", + "value": "sobol" + }, + { + "flag": null, + "name": "path_guiding", + "usd_attribute": "crust:pathGuiding", + "value": "false" + }, + { + "flag": "--variance-threshold", + "name": "variance_threshold", + "usd_attribute": "crust:varianceThreshold", + "value": "0.05" + }, + { + "flag": "--min-samples", + "name": "min_samples_per_pixel", + "usd_attribute": "crust:minSamplesPerPixel", + "value": "32" + }, + { + "flag": "--neighbour-tolerance", + "name": "adaptive_neighbour_tolerance", + "usd_attribute": "crust:adaptiveNeighbourTolerance", + "value": "1" + }, + { + "flag": "--subdiv-level", + "name": "subdivision_level", + "usd_attribute": "crust:subdivisionLevel", + "value": "stage" + }, + { + "flag": "--subdiv-edge-length", + "name": "subdivision_edge_length", + "usd_attribute": "crust:subdivisionEdgeLength", + "value": "stage" + }, + { + "flag": "--auto-tx", + "name": "auto_tx", + "usd_attribute": null, + "value": "false" + } + ], + "findings": [], + "format": "crust-check/2", + "pass": null, + "precomp": null, + "products": [ + { + "channels": [ + "R", + "G", + "B" + ], + "file": "output.exr", + "prim": null + } + ], + "scene": { + "camera": "/World/ShotCam", + "frame": null, + "path": "$ROOT/samples/materialx_cutout.usda", + "region": null, + "resolution": [ + 640, + 320 + ] + }, + "settings": "/Render/settings", + "warnings": [] +} diff --git a/crates/crust-core/tests/data/import_baselines/check/materialx_emissive.usda.json b/crates/crust-core/tests/data/import_baselines/check/materialx_emissive.usda.json new file mode 100644 index 000000000..6116c5ea3 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/check/materialx_emissive.usda.json @@ -0,0 +1,197 @@ +{ + "counts": { + "geometries": 4, + "kernel_memory": { + "bvh_nodes_bytes": 128, + "cubic_spans_bytes": 0, + "geometry_tables_bytes": 48, + "indices_bytes": 0, + "instances_bytes": 0, + "lanes": 8, + "lanes_filled": 8, + "leaves_bytes": 16, + "packets_bytes": 384, + "packets_indexed_bytes": 0, + "prim_nodes_bytes": 0, + "total_bytes": 960, + "triangle_records_bytes": 192, + "vertex_normals_bytes": 0, + "vertices_bytes": 192 + }, + "lights": 0, + "primvar_tables_bytes": 0, + "strand_tables_bytes": 0, + "top_level": { + "cubic_curve_spans": 0, + "curve_segments": 0, + "cylinders": 0, + "disks": 0, + "instances": 0, + "spheres": 0, + "triangles": 8 + }, + "unique": { + "cubic_curve_spans": 0, + "curve_segments": 0, + "cylinders": 0, + "disks": 0, + "instances": 0, + "spheres": 0, + "triangles": 8 + }, + "volumes": 0 + }, + "crust_version": "0.8.0", + "denied": [], + "effective_settings": [ + { + "flag": "-s", + "name": "samples_per_pixel", + "usd_attribute": "crust:samplesPerPixel", + "value": "256" + }, + { + "flag": null, + "name": "max_depth", + "usd_attribute": "crust:maxDepth", + "value": "8" + }, + { + "flag": "--strategy", + "name": "sampling_strategy", + "usd_attribute": "crust:samplingStrategy", + "value": "power" + }, + { + "flag": "--light-selection", + "name": "light_selection", + "usd_attribute": "crust:lightSelection", + "value": "power" + }, + { + "flag": "--light-samples", + "name": "light_samples", + "usd_attribute": "crust:lightSamples", + "value": "1" + }, + { + "flag": "--light-samples-indirect", + "name": "light_samples_indirect", + "usd_attribute": "crust:lightSamplesIndirect", + "value": "1" + }, + { + "flag": "--indirect-clamp", + "name": "indirect_clamp", + "usd_attribute": "crust:indirectClamp", + "value": "10" + }, + { + "flag": null, + "name": "exposure_scale", + "usd_attribute": null, + "value": "1" + }, + { + "flag": "--filter", + "name": "pixel_filter", + "usd_attribute": "crust:pixelFilter", + "value": "triangle" + }, + { + "flag": "--filter-radius", + "name": "pixel_filter_radius", + "usd_attribute": "crust:pixelFilterRadius", + "value": "1" + }, + { + "flag": "--sampler", + "name": "sampler", + "usd_attribute": "crust:sampler", + "value": "sobol" + }, + { + "flag": null, + "name": "path_guiding", + "usd_attribute": "crust:pathGuiding", + "value": "false" + }, + { + "flag": "--variance-threshold", + "name": "variance_threshold", + "usd_attribute": "crust:varianceThreshold", + "value": "0.05" + }, + { + "flag": "--min-samples", + "name": "min_samples_per_pixel", + "usd_attribute": "crust:minSamplesPerPixel", + "value": "32" + }, + { + "flag": "--neighbour-tolerance", + "name": "adaptive_neighbour_tolerance", + "usd_attribute": "crust:adaptiveNeighbourTolerance", + "value": "1" + }, + { + "flag": "--subdiv-level", + "name": "subdivision_level", + "usd_attribute": "crust:subdivisionLevel", + "value": "stage" + }, + { + "flag": "--subdiv-edge-length", + "name": "subdivision_edge_length", + "usd_attribute": "crust:subdivisionEdgeLength", + "value": "stage" + }, + { + "flag": "--auto-tx", + "name": "auto_tx", + "usd_attribute": null, + "value": "false" + } + ], + "findings": [ + { + "action": { + "flag": "--auto-tx", + "usd_attribute": null, + "value": "on" + }, + "evidence": { + "textures": 1.0 + }, + "id": "textures_without_tx", + "kind": "time", + "summary": "1 UV texture(s) have no .tx beside them: each is decoded whole at import and held resident instead of streamed" + } + ], + "format": "crust-check/2", + "pass": null, + "precomp": null, + "products": [ + { + "channels": [ + "R", + "G", + "B" + ], + "file": "output.exr", + "prim": null + } + ], + "scene": { + "camera": "/World/ShotCam", + "frame": null, + "path": "$ROOT/samples/materialx_emissive.usda", + "region": null, + "resolution": [ + 480, + 270 + ] + }, + "settings": "/Render/settings", + "warnings": [] +} diff --git a/crates/crust-core/tests/data/import_baselines/check/materialx_lion.usda.json b/crates/crust-core/tests/data/import_baselines/check/materialx_lion.usda.json new file mode 100644 index 000000000..56a0e9052 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/check/materialx_lion.usda.json @@ -0,0 +1,197 @@ +{ + "counts": { + "geometries": 5, + "kernel_memory": { + "bvh_nodes_bytes": 14773760, + "cubic_spans_bytes": 0, + "geometry_tables_bytes": 60, + "indices_bytes": 0, + "instances_bytes": 0, + "lanes": 1324368, + "lanes_filled": 1085404, + "leaves_bytes": 3823344, + "packets_bytes": 63569664, + "packets_indexed_bytes": 0, + "prim_nodes_bytes": 0, + "total_bytes": 120336596, + "triangle_records_bytes": 25446432, + "vertex_normals_bytes": 6361596, + "vertices_bytes": 6361740 + }, + "lights": 3, + "primvar_tables_bytes": 0, + "strand_tables_bytes": 0, + "top_level": { + "cubic_curve_spans": 0, + "curve_segments": 0, + "cylinders": 0, + "disks": 0, + "instances": 0, + "spheres": 0, + "triangles": 1060268 + }, + "unique": { + "cubic_curve_spans": 0, + "curve_segments": 0, + "cylinders": 0, + "disks": 0, + "instances": 0, + "spheres": 0, + "triangles": 1060268 + }, + "volumes": 0 + }, + "crust_version": "0.8.0", + "denied": [], + "effective_settings": [ + { + "flag": "-s", + "name": "samples_per_pixel", + "usd_attribute": "crust:samplesPerPixel", + "value": "128" + }, + { + "flag": null, + "name": "max_depth", + "usd_attribute": "crust:maxDepth", + "value": "12" + }, + { + "flag": "--strategy", + "name": "sampling_strategy", + "usd_attribute": "crust:samplingStrategy", + "value": "power" + }, + { + "flag": "--light-selection", + "name": "light_selection", + "usd_attribute": "crust:lightSelection", + "value": "power" + }, + { + "flag": "--light-samples", + "name": "light_samples", + "usd_attribute": "crust:lightSamples", + "value": "1" + }, + { + "flag": "--light-samples-indirect", + "name": "light_samples_indirect", + "usd_attribute": "crust:lightSamplesIndirect", + "value": "1" + }, + { + "flag": "--indirect-clamp", + "name": "indirect_clamp", + "usd_attribute": "crust:indirectClamp", + "value": "10" + }, + { + "flag": null, + "name": "exposure_scale", + "usd_attribute": null, + "value": "1" + }, + { + "flag": "--filter", + "name": "pixel_filter", + "usd_attribute": "crust:pixelFilter", + "value": "triangle" + }, + { + "flag": "--filter-radius", + "name": "pixel_filter_radius", + "usd_attribute": "crust:pixelFilterRadius", + "value": "1" + }, + { + "flag": "--sampler", + "name": "sampler", + "usd_attribute": "crust:sampler", + "value": "sobol" + }, + { + "flag": null, + "name": "path_guiding", + "usd_attribute": "crust:pathGuiding", + "value": "false" + }, + { + "flag": "--variance-threshold", + "name": "variance_threshold", + "usd_attribute": "crust:varianceThreshold", + "value": "0.02" + }, + { + "flag": "--min-samples", + "name": "min_samples_per_pixel", + "usd_attribute": "crust:minSamplesPerPixel", + "value": "32" + }, + { + "flag": "--neighbour-tolerance", + "name": "adaptive_neighbour_tolerance", + "usd_attribute": "crust:adaptiveNeighbourTolerance", + "value": "1" + }, + { + "flag": "--subdiv-level", + "name": "subdivision_level", + "usd_attribute": "crust:subdivisionLevel", + "value": "stage" + }, + { + "flag": "--subdiv-edge-length", + "name": "subdivision_edge_length", + "usd_attribute": "crust:subdivisionEdgeLength", + "value": "stage" + }, + { + "flag": "--auto-tx", + "name": "auto_tx", + "usd_attribute": null, + "value": "false" + } + ], + "findings": [ + { + "action": { + "flag": "--auto-tx", + "usd_attribute": null, + "value": "on" + }, + "evidence": { + "textures": 7.0 + }, + "id": "textures_without_tx", + "kind": "time", + "summary": "7 UV texture(s) have no .tx beside them: each is decoded whole at import and held resident instead of streamed" + } + ], + "format": "crust-check/2", + "pass": null, + "precomp": null, + "products": [ + { + "channels": [ + "R", + "G", + "B" + ], + "file": "output.exr", + "prim": null + } + ], + "scene": { + "camera": "/World/ShotCam", + "frame": null, + "path": "$ROOT/samples/materialx_lion.usda", + "region": null, + "resolution": [ + 960, + 540 + ] + }, + "settings": "/Render/settings", + "warnings": [] +} diff --git a/crates/crust-core/tests/data/import_baselines/check/materialx_showcase.usda.json b/crates/crust-core/tests/data/import_baselines/check/materialx_showcase.usda.json new file mode 100644 index 000000000..4c9d27ace --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/check/materialx_showcase.usda.json @@ -0,0 +1,197 @@ +{ + "counts": { + "geometries": 11, + "kernel_memory": { + "bvh_nodes_bytes": 17155584, + "cubic_spans_bytes": 0, + "geometry_tables_bytes": 132, + "indices_bytes": 0, + "instances_bytes": 0, + "lanes": 1607064, + "lanes_filled": 1321344, + "leaves_bytes": 4431152, + "packets_bytes": 77139072, + "packets_indexed_bytes": 0, + "prim_nodes_bytes": 0, + "total_bytes": 146252756, + "triangle_records_bytes": 31684416, + "vertex_normals_bytes": 7920780, + "vertices_bytes": 7921620 + }, + "lights": 5, + "primvar_tables_bytes": 0, + "strand_tables_bytes": 0, + "top_level": { + "cubic_curve_spans": 0, + "curve_segments": 0, + "cylinders": 0, + "disks": 0, + "instances": 0, + "spheres": 0, + "triangles": 1320184 + }, + "unique": { + "cubic_curve_spans": 0, + "curve_segments": 0, + "cylinders": 0, + "disks": 0, + "instances": 0, + "spheres": 0, + "triangles": 1320184 + }, + "volumes": 0 + }, + "crust_version": "0.8.0", + "denied": [], + "effective_settings": [ + { + "flag": "-s", + "name": "samples_per_pixel", + "usd_attribute": "crust:samplesPerPixel", + "value": "128" + }, + { + "flag": null, + "name": "max_depth", + "usd_attribute": "crust:maxDepth", + "value": "12" + }, + { + "flag": "--strategy", + "name": "sampling_strategy", + "usd_attribute": "crust:samplingStrategy", + "value": "power" + }, + { + "flag": "--light-selection", + "name": "light_selection", + "usd_attribute": "crust:lightSelection", + "value": "power" + }, + { + "flag": "--light-samples", + "name": "light_samples", + "usd_attribute": "crust:lightSamples", + "value": "1" + }, + { + "flag": "--light-samples-indirect", + "name": "light_samples_indirect", + "usd_attribute": "crust:lightSamplesIndirect", + "value": "1" + }, + { + "flag": "--indirect-clamp", + "name": "indirect_clamp", + "usd_attribute": "crust:indirectClamp", + "value": "10" + }, + { + "flag": null, + "name": "exposure_scale", + "usd_attribute": null, + "value": "1" + }, + { + "flag": "--filter", + "name": "pixel_filter", + "usd_attribute": "crust:pixelFilter", + "value": "triangle" + }, + { + "flag": "--filter-radius", + "name": "pixel_filter_radius", + "usd_attribute": "crust:pixelFilterRadius", + "value": "1" + }, + { + "flag": "--sampler", + "name": "sampler", + "usd_attribute": "crust:sampler", + "value": "sobol" + }, + { + "flag": null, + "name": "path_guiding", + "usd_attribute": "crust:pathGuiding", + "value": "false" + }, + { + "flag": "--variance-threshold", + "name": "variance_threshold", + "usd_attribute": "crust:varianceThreshold", + "value": "0.02" + }, + { + "flag": "--min-samples", + "name": "min_samples_per_pixel", + "usd_attribute": "crust:minSamplesPerPixel", + "value": "32" + }, + { + "flag": "--neighbour-tolerance", + "name": "adaptive_neighbour_tolerance", + "usd_attribute": "crust:adaptiveNeighbourTolerance", + "value": "1" + }, + { + "flag": "--subdiv-level", + "name": "subdivision_level", + "usd_attribute": "crust:subdivisionLevel", + "value": "stage" + }, + { + "flag": "--subdiv-edge-length", + "name": "subdivision_edge_length", + "usd_attribute": "crust:subdivisionEdgeLength", + "value": "stage" + }, + { + "flag": "--auto-tx", + "name": "auto_tx", + "usd_attribute": null, + "value": "false" + } + ], + "findings": [ + { + "action": { + "flag": "--auto-tx", + "usd_attribute": null, + "value": "on" + }, + "evidence": { + "textures": 22.0 + }, + "id": "textures_without_tx", + "kind": "time", + "summary": "22 UV texture(s) have no .tx beside them: each is decoded whole at import and held resident instead of streamed" + } + ], + "format": "crust-check/2", + "pass": null, + "precomp": null, + "products": [ + { + "channels": [ + "R", + "G", + "B" + ], + "file": "output.exr", + "prim": null + } + ], + "scene": { + "camera": "/World/ShotCam", + "frame": null, + "path": "$ROOT/samples/materialx_showcase.usda", + "region": null, + "resolution": [ + 1920, + 1080 + ] + }, + "settings": "/Render/settings", + "warnings": [] +} diff --git a/crates/crust-core/tests/data/import_baselines/check/materialx_subsurface.usda.json b/crates/crust-core/tests/data/import_baselines/check/materialx_subsurface.usda.json new file mode 100644 index 000000000..123197068 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/check/materialx_subsurface.usda.json @@ -0,0 +1,183 @@ +{ + "counts": { + "geometries": 5, + "kernel_memory": { + "bvh_nodes_bytes": 256, + "cubic_spans_bytes": 0, + "geometry_tables_bytes": 60, + "indices_bytes": 16, + "instances_bytes": 0, + "lanes": 8, + "lanes_filled": 4, + "leaves_bytes": 80, + "packets_bytes": 384, + "packets_indexed_bytes": 0, + "prim_nodes_bytes": 256, + "total_bytes": 1148, + "triangle_records_bytes": 48, + "vertex_normals_bytes": 0, + "vertices_bytes": 48 + }, + "lights": 2, + "primvar_tables_bytes": 0, + "strand_tables_bytes": 0, + "top_level": { + "cubic_curve_spans": 0, + "curve_segments": 0, + "cylinders": 0, + "disks": 0, + "instances": 0, + "spheres": 4, + "triangles": 2 + }, + "unique": { + "cubic_curve_spans": 0, + "curve_segments": 0, + "cylinders": 0, + "disks": 0, + "instances": 0, + "spheres": 4, + "triangles": 2 + }, + "volumes": 0 + }, + "crust_version": "0.8.0", + "denied": [], + "effective_settings": [ + { + "flag": "-s", + "name": "samples_per_pixel", + "usd_attribute": "crust:samplesPerPixel", + "value": "64" + }, + { + "flag": null, + "name": "max_depth", + "usd_attribute": "crust:maxDepth", + "value": "12" + }, + { + "flag": "--strategy", + "name": "sampling_strategy", + "usd_attribute": "crust:samplingStrategy", + "value": "power" + }, + { + "flag": "--light-selection", + "name": "light_selection", + "usd_attribute": "crust:lightSelection", + "value": "power" + }, + { + "flag": "--light-samples", + "name": "light_samples", + "usd_attribute": "crust:lightSamples", + "value": "1" + }, + { + "flag": "--light-samples-indirect", + "name": "light_samples_indirect", + "usd_attribute": "crust:lightSamplesIndirect", + "value": "1" + }, + { + "flag": "--indirect-clamp", + "name": "indirect_clamp", + "usd_attribute": "crust:indirectClamp", + "value": "10" + }, + { + "flag": null, + "name": "exposure_scale", + "usd_attribute": null, + "value": "1" + }, + { + "flag": "--filter", + "name": "pixel_filter", + "usd_attribute": "crust:pixelFilter", + "value": "triangle" + }, + { + "flag": "--filter-radius", + "name": "pixel_filter_radius", + "usd_attribute": "crust:pixelFilterRadius", + "value": "1" + }, + { + "flag": "--sampler", + "name": "sampler", + "usd_attribute": "crust:sampler", + "value": "sobol" + }, + { + "flag": null, + "name": "path_guiding", + "usd_attribute": "crust:pathGuiding", + "value": "false" + }, + { + "flag": "--variance-threshold", + "name": "variance_threshold", + "usd_attribute": "crust:varianceThreshold", + "value": "0.05" + }, + { + "flag": "--min-samples", + "name": "min_samples_per_pixel", + "usd_attribute": "crust:minSamplesPerPixel", + "value": "32" + }, + { + "flag": "--neighbour-tolerance", + "name": "adaptive_neighbour_tolerance", + "usd_attribute": "crust:adaptiveNeighbourTolerance", + "value": "1" + }, + { + "flag": "--subdiv-level", + "name": "subdivision_level", + "usd_attribute": "crust:subdivisionLevel", + "value": "stage" + }, + { + "flag": "--subdiv-edge-length", + "name": "subdivision_edge_length", + "usd_attribute": "crust:subdivisionEdgeLength", + "value": "stage" + }, + { + "flag": "--auto-tx", + "name": "auto_tx", + "usd_attribute": null, + "value": "false" + } + ], + "findings": [], + "format": "crust-check/2", + "pass": null, + "precomp": null, + "products": [ + { + "channels": [ + "R", + "G", + "B" + ], + "file": "output.exr", + "prim": null + } + ], + "scene": { + "camera": "/World/ShotCam", + "frame": null, + "path": "$ROOT/samples/materialx_subsurface.usda", + "region": null, + "resolution": [ + 640, + 320 + ] + }, + "settings": "/Render/settings", + "warnings": [] +} diff --git a/crates/crust-core/tests/data/import_baselines/check/materialx_surfaces.usda.json b/crates/crust-core/tests/data/import_baselines/check/materialx_surfaces.usda.json new file mode 100644 index 000000000..d0126a12e --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/check/materialx_surfaces.usda.json @@ -0,0 +1,183 @@ +{ + "counts": { + "geometries": 7, + "kernel_memory": { + "bvh_nodes_bytes": 256, + "cubic_spans_bytes": 0, + "geometry_tables_bytes": 84, + "indices_bytes": 24, + "instances_bytes": 0, + "lanes": 8, + "lanes_filled": 4, + "leaves_bytes": 80, + "packets_bytes": 384, + "packets_indexed_bytes": 0, + "prim_nodes_bytes": 384, + "total_bytes": 1308, + "triangle_records_bytes": 48, + "vertex_normals_bytes": 0, + "vertices_bytes": 48 + }, + "lights": 1, + "primvar_tables_bytes": 0, + "strand_tables_bytes": 0, + "top_level": { + "cubic_curve_spans": 0, + "curve_segments": 0, + "cylinders": 0, + "disks": 0, + "instances": 0, + "spheres": 6, + "triangles": 2 + }, + "unique": { + "cubic_curve_spans": 0, + "curve_segments": 0, + "cylinders": 0, + "disks": 0, + "instances": 0, + "spheres": 6, + "triangles": 2 + }, + "volumes": 0 + }, + "crust_version": "0.8.0", + "denied": [], + "effective_settings": [ + { + "flag": "-s", + "name": "samples_per_pixel", + "usd_attribute": "crust:samplesPerPixel", + "value": "64" + }, + { + "flag": null, + "name": "max_depth", + "usd_attribute": "crust:maxDepth", + "value": "12" + }, + { + "flag": "--strategy", + "name": "sampling_strategy", + "usd_attribute": "crust:samplingStrategy", + "value": "power" + }, + { + "flag": "--light-selection", + "name": "light_selection", + "usd_attribute": "crust:lightSelection", + "value": "power" + }, + { + "flag": "--light-samples", + "name": "light_samples", + "usd_attribute": "crust:lightSamples", + "value": "1" + }, + { + "flag": "--light-samples-indirect", + "name": "light_samples_indirect", + "usd_attribute": "crust:lightSamplesIndirect", + "value": "1" + }, + { + "flag": "--indirect-clamp", + "name": "indirect_clamp", + "usd_attribute": "crust:indirectClamp", + "value": "10" + }, + { + "flag": null, + "name": "exposure_scale", + "usd_attribute": null, + "value": "1" + }, + { + "flag": "--filter", + "name": "pixel_filter", + "usd_attribute": "crust:pixelFilter", + "value": "triangle" + }, + { + "flag": "--filter-radius", + "name": "pixel_filter_radius", + "usd_attribute": "crust:pixelFilterRadius", + "value": "1" + }, + { + "flag": "--sampler", + "name": "sampler", + "usd_attribute": "crust:sampler", + "value": "sobol" + }, + { + "flag": null, + "name": "path_guiding", + "usd_attribute": "crust:pathGuiding", + "value": "false" + }, + { + "flag": "--variance-threshold", + "name": "variance_threshold", + "usd_attribute": "crust:varianceThreshold", + "value": "0.05" + }, + { + "flag": "--min-samples", + "name": "min_samples_per_pixel", + "usd_attribute": "crust:minSamplesPerPixel", + "value": "32" + }, + { + "flag": "--neighbour-tolerance", + "name": "adaptive_neighbour_tolerance", + "usd_attribute": "crust:adaptiveNeighbourTolerance", + "value": "1" + }, + { + "flag": "--subdiv-level", + "name": "subdivision_level", + "usd_attribute": "crust:subdivisionLevel", + "value": "stage" + }, + { + "flag": "--subdiv-edge-length", + "name": "subdivision_edge_length", + "usd_attribute": "crust:subdivisionEdgeLength", + "value": "stage" + }, + { + "flag": "--auto-tx", + "name": "auto_tx", + "usd_attribute": null, + "value": "false" + } + ], + "findings": [], + "format": "crust-check/2", + "pass": null, + "precomp": null, + "products": [ + { + "channels": [ + "R", + "G", + "B" + ], + "file": "output.exr", + "prim": null + } + ], + "scene": { + "camera": "/World/ShotCam", + "frame": null, + "path": "$ROOT/samples/materialx_surfaces.usda", + "region": null, + "resolution": [ + 640, + 400 + ] + }, + "settings": "/Render/settings", + "warnings": [] +} diff --git a/crates/crust-core/tests/data/import_baselines/check/materialx_teapot.usda.json b/crates/crust-core/tests/data/import_baselines/check/materialx_teapot.usda.json new file mode 100644 index 000000000..2ab4ad577 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/check/materialx_teapot.usda.json @@ -0,0 +1,197 @@ +{ + "counts": { + "geometries": 6, + "kernel_memory": { + "bvh_nodes_bytes": 3418624, + "cubic_spans_bytes": 0, + "geometry_tables_bytes": 72, + "indices_bytes": 0, + "instances_bytes": 0, + "lanes": 333976, + "lanes_filled": 274687, + "leaves_bytes": 890704, + "packets_bytes": 16030848, + "packets_indexed_bytes": 0, + "prim_nodes_bytes": 0, + "total_bytes": 29695640, + "triangle_records_bytes": 6236880, + "vertex_normals_bytes": 1559184, + "vertices_bytes": 1559328 + }, + "lights": 3, + "primvar_tables_bytes": 0, + "strand_tables_bytes": 0, + "top_level": { + "cubic_curve_spans": 0, + "curve_segments": 0, + "cylinders": 0, + "disks": 0, + "instances": 0, + "spheres": 0, + "triangles": 259870 + }, + "unique": { + "cubic_curve_spans": 0, + "curve_segments": 0, + "cylinders": 0, + "disks": 0, + "instances": 0, + "spheres": 0, + "triangles": 259870 + }, + "volumes": 0 + }, + "crust_version": "0.8.0", + "denied": [], + "effective_settings": [ + { + "flag": "-s", + "name": "samples_per_pixel", + "usd_attribute": "crust:samplesPerPixel", + "value": "128" + }, + { + "flag": null, + "name": "max_depth", + "usd_attribute": "crust:maxDepth", + "value": "12" + }, + { + "flag": "--strategy", + "name": "sampling_strategy", + "usd_attribute": "crust:samplingStrategy", + "value": "power" + }, + { + "flag": "--light-selection", + "name": "light_selection", + "usd_attribute": "crust:lightSelection", + "value": "power" + }, + { + "flag": "--light-samples", + "name": "light_samples", + "usd_attribute": "crust:lightSamples", + "value": "1" + }, + { + "flag": "--light-samples-indirect", + "name": "light_samples_indirect", + "usd_attribute": "crust:lightSamplesIndirect", + "value": "1" + }, + { + "flag": "--indirect-clamp", + "name": "indirect_clamp", + "usd_attribute": "crust:indirectClamp", + "value": "10" + }, + { + "flag": null, + "name": "exposure_scale", + "usd_attribute": null, + "value": "1" + }, + { + "flag": "--filter", + "name": "pixel_filter", + "usd_attribute": "crust:pixelFilter", + "value": "triangle" + }, + { + "flag": "--filter-radius", + "name": "pixel_filter_radius", + "usd_attribute": "crust:pixelFilterRadius", + "value": "1" + }, + { + "flag": "--sampler", + "name": "sampler", + "usd_attribute": "crust:sampler", + "value": "sobol" + }, + { + "flag": null, + "name": "path_guiding", + "usd_attribute": "crust:pathGuiding", + "value": "false" + }, + { + "flag": "--variance-threshold", + "name": "variance_threshold", + "usd_attribute": "crust:varianceThreshold", + "value": "0.02" + }, + { + "flag": "--min-samples", + "name": "min_samples_per_pixel", + "usd_attribute": "crust:minSamplesPerPixel", + "value": "32" + }, + { + "flag": "--neighbour-tolerance", + "name": "adaptive_neighbour_tolerance", + "usd_attribute": "crust:adaptiveNeighbourTolerance", + "value": "1" + }, + { + "flag": "--subdiv-level", + "name": "subdivision_level", + "usd_attribute": "crust:subdivisionLevel", + "value": "stage" + }, + { + "flag": "--subdiv-edge-length", + "name": "subdivision_edge_length", + "usd_attribute": "crust:subdivisionEdgeLength", + "value": "stage" + }, + { + "flag": "--auto-tx", + "name": "auto_tx", + "usd_attribute": null, + "value": "false" + } + ], + "findings": [ + { + "action": { + "flag": "--auto-tx", + "usd_attribute": null, + "value": "on" + }, + "evidence": { + "textures": 15.0 + }, + "id": "textures_without_tx", + "kind": "time", + "summary": "15 UV texture(s) have no .tx beside them: each is decoded whole at import and held resident instead of streamed" + } + ], + "format": "crust-check/2", + "pass": null, + "precomp": null, + "products": [ + { + "channels": [ + "R", + "G", + "B" + ], + "file": "output.exr", + "prim": null + } + ], + "scene": { + "camera": "/World/ShotCam", + "frame": null, + "path": "$ROOT/samples/materialx_teapot.usda", + "region": null, + "resolution": [ + 960, + 540 + ] + }, + "settings": "/Render/settings", + "warnings": [] +} diff --git a/crates/crust-core/tests/data/import_baselines/check/materialx_volume.usda.json b/crates/crust-core/tests/data/import_baselines/check/materialx_volume.usda.json new file mode 100644 index 000000000..e56bf60b9 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/check/materialx_volume.usda.json @@ -0,0 +1,183 @@ +{ + "counts": { + "geometries": 6, + "kernel_memory": { + "bvh_nodes_bytes": 384, + "cubic_spans_bytes": 0, + "geometry_tables_bytes": 72, + "indices_bytes": 16, + "instances_bytes": 0, + "lanes": 28, + "lanes_filled": 14, + "leaves_bytes": 160, + "packets_bytes": 1344, + "packets_indexed_bytes": 0, + "prim_nodes_bytes": 256, + "total_bytes": 2712, + "triangle_records_bytes": 336, + "vertex_normals_bytes": 0, + "vertices_bytes": 144 + }, + "lights": 2, + "primvar_tables_bytes": 0, + "strand_tables_bytes": 0, + "top_level": { + "cubic_curve_spans": 0, + "curve_segments": 0, + "cylinders": 0, + "disks": 0, + "instances": 0, + "spheres": 4, + "triangles": 14 + }, + "unique": { + "cubic_curve_spans": 0, + "curve_segments": 0, + "cylinders": 0, + "disks": 0, + "instances": 0, + "spheres": 4, + "triangles": 14 + }, + "volumes": 0 + }, + "crust_version": "0.8.0", + "denied": [], + "effective_settings": [ + { + "flag": "-s", + "name": "samples_per_pixel", + "usd_attribute": "crust:samplesPerPixel", + "value": "64" + }, + { + "flag": null, + "name": "max_depth", + "usd_attribute": "crust:maxDepth", + "value": "16" + }, + { + "flag": "--strategy", + "name": "sampling_strategy", + "usd_attribute": "crust:samplingStrategy", + "value": "power" + }, + { + "flag": "--light-selection", + "name": "light_selection", + "usd_attribute": "crust:lightSelection", + "value": "power" + }, + { + "flag": "--light-samples", + "name": "light_samples", + "usd_attribute": "crust:lightSamples", + "value": "1" + }, + { + "flag": "--light-samples-indirect", + "name": "light_samples_indirect", + "usd_attribute": "crust:lightSamplesIndirect", + "value": "1" + }, + { + "flag": "--indirect-clamp", + "name": "indirect_clamp", + "usd_attribute": "crust:indirectClamp", + "value": "10" + }, + { + "flag": null, + "name": "exposure_scale", + "usd_attribute": null, + "value": "1" + }, + { + "flag": "--filter", + "name": "pixel_filter", + "usd_attribute": "crust:pixelFilter", + "value": "triangle" + }, + { + "flag": "--filter-radius", + "name": "pixel_filter_radius", + "usd_attribute": "crust:pixelFilterRadius", + "value": "1" + }, + { + "flag": "--sampler", + "name": "sampler", + "usd_attribute": "crust:sampler", + "value": "sobol" + }, + { + "flag": null, + "name": "path_guiding", + "usd_attribute": "crust:pathGuiding", + "value": "false" + }, + { + "flag": "--variance-threshold", + "name": "variance_threshold", + "usd_attribute": "crust:varianceThreshold", + "value": "0.05" + }, + { + "flag": "--min-samples", + "name": "min_samples_per_pixel", + "usd_attribute": "crust:minSamplesPerPixel", + "value": "32" + }, + { + "flag": "--neighbour-tolerance", + "name": "adaptive_neighbour_tolerance", + "usd_attribute": "crust:adaptiveNeighbourTolerance", + "value": "1" + }, + { + "flag": "--subdiv-level", + "name": "subdivision_level", + "usd_attribute": "crust:subdivisionLevel", + "value": "stage" + }, + { + "flag": "--subdiv-edge-length", + "name": "subdivision_edge_length", + "usd_attribute": "crust:subdivisionEdgeLength", + "value": "stage" + }, + { + "flag": "--auto-tx", + "name": "auto_tx", + "usd_attribute": null, + "value": "false" + } + ], + "findings": [], + "format": "crust-check/2", + "pass": null, + "precomp": null, + "products": [ + { + "channels": [ + "R", + "G", + "B" + ], + "file": "output.exr", + "prim": null + } + ], + "scene": { + "camera": "/World/ShotCam", + "frame": null, + "path": "$ROOT/samples/materialx_volume.usda", + "region": null, + "resolution": [ + 640, + 320 + ] + }, + "settings": "/Render/settings", + "warnings": [] +} diff --git a/crates/crust-core/tests/data/import_baselines/check/motionblur.usda.json b/crates/crust-core/tests/data/import_baselines/check/motionblur.usda.json new file mode 100644 index 000000000..a7bead002 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/check/motionblur.usda.json @@ -0,0 +1,183 @@ +{ + "counts": { + "geometries": 5, + "kernel_memory": { + "bvh_nodes_bytes": 512, + "cubic_spans_bytes": 0, + "geometry_tables_bytes": 84, + "indices_bytes": 12, + "instances_bytes": 448, + "lanes": 28, + "lanes_filled": 18, + "leaves_bytes": 144, + "packets_bytes": 1344, + "packets_indexed_bytes": 0, + "prim_nodes_bytes": 64, + "total_bytes": 3280, + "triangle_records_bytes": 432, + "vertex_normals_bytes": 0, + "vertices_bytes": 240 + }, + "lights": 2, + "primvar_tables_bytes": 0, + "strand_tables_bytes": 0, + "top_level": { + "cubic_curve_spans": 0, + "curve_segments": 0, + "cylinders": 0, + "disks": 0, + "instances": 2, + "spheres": 0, + "triangles": 6 + }, + "unique": { + "cubic_curve_spans": 0, + "curve_segments": 0, + "cylinders": 0, + "disks": 0, + "instances": 2, + "spheres": 1, + "triangles": 18 + }, + "volumes": 0 + }, + "crust_version": "0.8.0", + "denied": [], + "effective_settings": [ + { + "flag": "-s", + "name": "samples_per_pixel", + "usd_attribute": "crust:samplesPerPixel", + "value": "16" + }, + { + "flag": null, + "name": "max_depth", + "usd_attribute": "crust:maxDepth", + "value": "4" + }, + { + "flag": "--strategy", + "name": "sampling_strategy", + "usd_attribute": "crust:samplingStrategy", + "value": "power" + }, + { + "flag": "--light-selection", + "name": "light_selection", + "usd_attribute": "crust:lightSelection", + "value": "power" + }, + { + "flag": "--light-samples", + "name": "light_samples", + "usd_attribute": "crust:lightSamples", + "value": "1" + }, + { + "flag": "--light-samples-indirect", + "name": "light_samples_indirect", + "usd_attribute": "crust:lightSamplesIndirect", + "value": "1" + }, + { + "flag": "--indirect-clamp", + "name": "indirect_clamp", + "usd_attribute": "crust:indirectClamp", + "value": "10" + }, + { + "flag": null, + "name": "exposure_scale", + "usd_attribute": null, + "value": "1" + }, + { + "flag": "--filter", + "name": "pixel_filter", + "usd_attribute": "crust:pixelFilter", + "value": "triangle" + }, + { + "flag": "--filter-radius", + "name": "pixel_filter_radius", + "usd_attribute": "crust:pixelFilterRadius", + "value": "1" + }, + { + "flag": "--sampler", + "name": "sampler", + "usd_attribute": "crust:sampler", + "value": "sobol" + }, + { + "flag": null, + "name": "path_guiding", + "usd_attribute": "crust:pathGuiding", + "value": "false" + }, + { + "flag": "--variance-threshold", + "name": "variance_threshold", + "usd_attribute": "crust:varianceThreshold", + "value": "0.05" + }, + { + "flag": "--min-samples", + "name": "min_samples_per_pixel", + "usd_attribute": "crust:minSamplesPerPixel", + "value": "8" + }, + { + "flag": "--neighbour-tolerance", + "name": "adaptive_neighbour_tolerance", + "usd_attribute": "crust:adaptiveNeighbourTolerance", + "value": "1" + }, + { + "flag": "--subdiv-level", + "name": "subdivision_level", + "usd_attribute": "crust:subdivisionLevel", + "value": "stage" + }, + { + "flag": "--subdiv-edge-length", + "name": "subdivision_edge_length", + "usd_attribute": "crust:subdivisionEdgeLength", + "value": "stage" + }, + { + "flag": "--auto-tx", + "name": "auto_tx", + "usd_attribute": null, + "value": "false" + } + ], + "findings": [], + "format": "crust-check/2", + "pass": null, + "precomp": null, + "products": [ + { + "channels": [ + "R", + "G", + "B" + ], + "file": "output.exr", + "prim": null + } + ], + "scene": { + "camera": "/World/Cam", + "frame": null, + "path": "$ROOT/samples/motionblur.usda", + "region": null, + "resolution": [ + 96, + 54 + ] + }, + "settings": "/Render/settings", + "warnings": [] +} diff --git a/crates/crust-core/tests/data/import_baselines/check/motionvector.usda.json b/crates/crust-core/tests/data/import_baselines/check/motionvector.usda.json new file mode 100644 index 000000000..5bb39e64b --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/check/motionvector.usda.json @@ -0,0 +1,189 @@ +{ + "counts": { + "geometries": 5, + "kernel_memory": { + "bvh_nodes_bytes": 640, + "cubic_spans_bytes": 0, + "geometry_tables_bytes": 108, + "indices_bytes": 24, + "instances_bytes": 896, + "lanes": 12, + "lanes_filled": 6, + "leaves_bytes": 128, + "packets_bytes": 576, + "packets_indexed_bytes": 0, + "prim_nodes_bytes": 128, + "total_bytes": 2788, + "triangle_records_bytes": 144, + "vertex_normals_bytes": 0, + "vertices_bytes": 144 + }, + "lights": 2, + "primvar_tables_bytes": 0, + "strand_tables_bytes": 0, + "top_level": { + "cubic_curve_spans": 0, + "curve_segments": 0, + "cylinders": 0, + "disks": 0, + "instances": 4, + "spheres": 0, + "triangles": 2 + }, + "unique": { + "cubic_curve_spans": 0, + "curve_segments": 0, + "cylinders": 0, + "disks": 0, + "instances": 4, + "spheres": 2, + "triangles": 6 + }, + "volumes": 0 + }, + "crust_version": "0.8.0", + "denied": [], + "effective_settings": [ + { + "flag": "-s", + "name": "samples_per_pixel", + "usd_attribute": "crust:samplesPerPixel", + "value": "16" + }, + { + "flag": null, + "name": "max_depth", + "usd_attribute": "crust:maxDepth", + "value": "4" + }, + { + "flag": "--strategy", + "name": "sampling_strategy", + "usd_attribute": "crust:samplingStrategy", + "value": "power" + }, + { + "flag": "--light-selection", + "name": "light_selection", + "usd_attribute": "crust:lightSelection", + "value": "power" + }, + { + "flag": "--light-samples", + "name": "light_samples", + "usd_attribute": "crust:lightSamples", + "value": "1" + }, + { + "flag": "--light-samples-indirect", + "name": "light_samples_indirect", + "usd_attribute": "crust:lightSamplesIndirect", + "value": "1" + }, + { + "flag": "--indirect-clamp", + "name": "indirect_clamp", + "usd_attribute": "crust:indirectClamp", + "value": "10" + }, + { + "flag": null, + "name": "exposure_scale", + "usd_attribute": null, + "value": "1" + }, + { + "flag": "--filter", + "name": "pixel_filter", + "usd_attribute": "crust:pixelFilter", + "value": "triangle" + }, + { + "flag": "--filter-radius", + "name": "pixel_filter_radius", + "usd_attribute": "crust:pixelFilterRadius", + "value": "1" + }, + { + "flag": "--sampler", + "name": "sampler", + "usd_attribute": "crust:sampler", + "value": "sobol" + }, + { + "flag": null, + "name": "path_guiding", + "usd_attribute": "crust:pathGuiding", + "value": "false" + }, + { + "flag": "--variance-threshold", + "name": "variance_threshold", + "usd_attribute": "crust:varianceThreshold", + "value": "0.05" + }, + { + "flag": "--min-samples", + "name": "min_samples_per_pixel", + "usd_attribute": "crust:minSamplesPerPixel", + "value": "16" + }, + { + "flag": "--neighbour-tolerance", + "name": "adaptive_neighbour_tolerance", + "usd_attribute": "crust:adaptiveNeighbourTolerance", + "value": "1" + }, + { + "flag": "--subdiv-level", + "name": "subdivision_level", + "usd_attribute": "crust:subdivisionLevel", + "value": "stage" + }, + { + "flag": "--subdiv-edge-length", + "name": "subdivision_edge_length", + "usd_attribute": "crust:subdivisionEdgeLength", + "value": "stage" + }, + { + "flag": "--auto-tx", + "name": "auto_tx", + "usd_attribute": null, + "value": "false" + } + ], + "findings": [], + "format": "crust-check/2", + "pass": null, + "precomp": null, + "products": [ + { + "channels": [ + "R", + "G", + "B", + "A", + "P.X", + "P.Y", + "P.Z", + "forward.u", + "forward.v" + ], + "file": "renders/motionvector.exr", + "prim": "/Render/Products/comp" + } + ], + "scene": { + "camera": "/World/Cam", + "frame": null, + "path": "$ROOT/samples/motionvector.usda", + "region": null, + "resolution": [ + 128, + 72 + ] + }, + "settings": "/Render/settings", + "warnings": [] +} diff --git a/crates/crust-core/tests/data/import_baselines/check/nested_instancing.usda.json b/crates/crust-core/tests/data/import_baselines/check/nested_instancing.usda.json new file mode 100644 index 000000000..ab9ff942b --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/check/nested_instancing.usda.json @@ -0,0 +1,183 @@ +{ + "counts": { + "geometries": 21, + "kernel_memory": { + "bvh_nodes_bytes": 1280, + "cubic_spans_bytes": 0, + "geometry_tables_bytes": 384, + "indices_bytes": 72, + "instances_bytes": 1440, + "lanes": 40, + "lanes_filled": 28, + "leaves_bytes": 304, + "packets_bytes": 1920, + "packets_indexed_bytes": 0, + "prim_nodes_bytes": 192, + "total_bytes": 6552, + "triangle_records_bytes": 672, + "vertex_normals_bytes": 0, + "vertices_bytes": 288 + }, + "lights": 2, + "primvar_tables_bytes": 0, + "strand_tables_bytes": 0, + "top_level": { + "cubic_curve_spans": 0, + "curve_segments": 0, + "cylinders": 0, + "disks": 0, + "instances": 9, + "spheres": 0, + "triangles": 4 + }, + "unique": { + "cubic_curve_spans": 0, + "curve_segments": 0, + "cylinders": 0, + "disks": 0, + "instances": 15, + "spheres": 3, + "triangles": 28 + }, + "volumes": 0 + }, + "crust_version": "0.8.0", + "denied": [], + "effective_settings": [ + { + "flag": "-s", + "name": "samples_per_pixel", + "usd_attribute": "crust:samplesPerPixel", + "value": "48" + }, + { + "flag": null, + "name": "max_depth", + "usd_attribute": "crust:maxDepth", + "value": "8" + }, + { + "flag": "--strategy", + "name": "sampling_strategy", + "usd_attribute": "crust:samplingStrategy", + "value": "power" + }, + { + "flag": "--light-selection", + "name": "light_selection", + "usd_attribute": "crust:lightSelection", + "value": "power" + }, + { + "flag": "--light-samples", + "name": "light_samples", + "usd_attribute": "crust:lightSamples", + "value": "1" + }, + { + "flag": "--light-samples-indirect", + "name": "light_samples_indirect", + "usd_attribute": "crust:lightSamplesIndirect", + "value": "1" + }, + { + "flag": "--indirect-clamp", + "name": "indirect_clamp", + "usd_attribute": "crust:indirectClamp", + "value": "10" + }, + { + "flag": null, + "name": "exposure_scale", + "usd_attribute": null, + "value": "1" + }, + { + "flag": "--filter", + "name": "pixel_filter", + "usd_attribute": "crust:pixelFilter", + "value": "triangle" + }, + { + "flag": "--filter-radius", + "name": "pixel_filter_radius", + "usd_attribute": "crust:pixelFilterRadius", + "value": "1" + }, + { + "flag": "--sampler", + "name": "sampler", + "usd_attribute": "crust:sampler", + "value": "sobol" + }, + { + "flag": null, + "name": "path_guiding", + "usd_attribute": "crust:pathGuiding", + "value": "false" + }, + { + "flag": "--variance-threshold", + "name": "variance_threshold", + "usd_attribute": "crust:varianceThreshold", + "value": "0.02" + }, + { + "flag": "--min-samples", + "name": "min_samples_per_pixel", + "usd_attribute": "crust:minSamplesPerPixel", + "value": "16" + }, + { + "flag": "--neighbour-tolerance", + "name": "adaptive_neighbour_tolerance", + "usd_attribute": "crust:adaptiveNeighbourTolerance", + "value": "1" + }, + { + "flag": "--subdiv-level", + "name": "subdivision_level", + "usd_attribute": "crust:subdivisionLevel", + "value": "stage" + }, + { + "flag": "--subdiv-edge-length", + "name": "subdivision_edge_length", + "usd_attribute": "crust:subdivisionEdgeLength", + "value": "stage" + }, + { + "flag": "--auto-tx", + "name": "auto_tx", + "usd_attribute": null, + "value": "false" + } + ], + "findings": [], + "format": "crust-check/2", + "pass": null, + "precomp": null, + "products": [ + { + "channels": [ + "R", + "G", + "B" + ], + "file": "output.exr", + "prim": null + } + ], + "scene": { + "camera": "/World/Cam", + "frame": null, + "path": "$ROOT/samples/nested_instancing.usda", + "region": null, + "resolution": [ + 480, + 270 + ] + }, + "settings": "/Render/settings", + "warnings": [] +} diff --git a/crates/crust-core/tests/data/import_baselines/check/openpbr_showcase.usda.json b/crates/crust-core/tests/data/import_baselines/check/openpbr_showcase.usda.json new file mode 100644 index 000000000..e05befbe4 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/check/openpbr_showcase.usda.json @@ -0,0 +1,183 @@ +{ + "counts": { + "geometries": 10, + "kernel_memory": { + "bvh_nodes_bytes": 384, + "cubic_spans_bytes": 0, + "geometry_tables_bytes": 120, + "indices_bytes": 40, + "instances_bytes": 0, + "lanes": 0, + "lanes_filled": 0, + "leaves_bytes": 112, + "packets_bytes": 0, + "packets_indexed_bytes": 0, + "prim_nodes_bytes": 640, + "total_bytes": 1296, + "triangle_records_bytes": 0, + "vertex_normals_bytes": 0, + "vertices_bytes": 0 + }, + "lights": 3, + "primvar_tables_bytes": 0, + "strand_tables_bytes": 0, + "top_level": { + "cubic_curve_spans": 0, + "curve_segments": 0, + "cylinders": 0, + "disks": 0, + "instances": 0, + "spheres": 10, + "triangles": 0 + }, + "unique": { + "cubic_curve_spans": 0, + "curve_segments": 0, + "cylinders": 0, + "disks": 0, + "instances": 0, + "spheres": 10, + "triangles": 0 + }, + "volumes": 0 + }, + "crust_version": "0.8.0", + "denied": [], + "effective_settings": [ + { + "flag": "-s", + "name": "samples_per_pixel", + "usd_attribute": "crust:samplesPerPixel", + "value": "4096" + }, + { + "flag": null, + "name": "max_depth", + "usd_attribute": "crust:maxDepth", + "value": "32" + }, + { + "flag": "--strategy", + "name": "sampling_strategy", + "usd_attribute": "crust:samplingStrategy", + "value": "power" + }, + { + "flag": "--light-selection", + "name": "light_selection", + "usd_attribute": "crust:lightSelection", + "value": "power" + }, + { + "flag": "--light-samples", + "name": "light_samples", + "usd_attribute": "crust:lightSamples", + "value": "1" + }, + { + "flag": "--light-samples-indirect", + "name": "light_samples_indirect", + "usd_attribute": "crust:lightSamplesIndirect", + "value": "1" + }, + { + "flag": "--indirect-clamp", + "name": "indirect_clamp", + "usd_attribute": "crust:indirectClamp", + "value": "10" + }, + { + "flag": null, + "name": "exposure_scale", + "usd_attribute": null, + "value": "1" + }, + { + "flag": "--filter", + "name": "pixel_filter", + "usd_attribute": "crust:pixelFilter", + "value": "triangle" + }, + { + "flag": "--filter-radius", + "name": "pixel_filter_radius", + "usd_attribute": "crust:pixelFilterRadius", + "value": "1" + }, + { + "flag": "--sampler", + "name": "sampler", + "usd_attribute": "crust:sampler", + "value": "sobol" + }, + { + "flag": null, + "name": "path_guiding", + "usd_attribute": "crust:pathGuiding", + "value": "false" + }, + { + "flag": "--variance-threshold", + "name": "variance_threshold", + "usd_attribute": "crust:varianceThreshold", + "value": "0.05" + }, + { + "flag": "--min-samples", + "name": "min_samples_per_pixel", + "usd_attribute": "crust:minSamplesPerPixel", + "value": "32" + }, + { + "flag": "--neighbour-tolerance", + "name": "adaptive_neighbour_tolerance", + "usd_attribute": "crust:adaptiveNeighbourTolerance", + "value": "1" + }, + { + "flag": "--subdiv-level", + "name": "subdivision_level", + "usd_attribute": "crust:subdivisionLevel", + "value": "stage" + }, + { + "flag": "--subdiv-edge-length", + "name": "subdivision_edge_length", + "usd_attribute": "crust:subdivisionEdgeLength", + "value": "stage" + }, + { + "flag": "--auto-tx", + "name": "auto_tx", + "usd_attribute": null, + "value": "false" + } + ], + "findings": [], + "format": "crust-check/2", + "pass": null, + "precomp": null, + "products": [ + { + "channels": [ + "R", + "G", + "B" + ], + "file": "output.exr", + "prim": null + } + ], + "scene": { + "camera": "/World/Cam", + "frame": null, + "path": "$ROOT/samples/openpbr_showcase.usda", + "region": null, + "resolution": [ + 1280, + 720 + ] + }, + "settings": "/Render/settings", + "warnings": [] +} diff --git a/crates/crust-core/tests/data/import_baselines/check/precomp.usda.json b/crates/crust-core/tests/data/import_baselines/check/precomp.usda.json new file mode 100644 index 000000000..8689cc2df --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/check/precomp.usda.json @@ -0,0 +1,217 @@ +{ + "counts": { + "geometries": 6, + "kernel_memory": { + "bvh_nodes_bytes": 10240, + "cubic_spans_bytes": 0, + "geometry_tables_bytes": 84, + "indices_bytes": 12, + "instances_bytes": 320, + "lanes": 844, + "lanes_filled": 774, + "leaves_bytes": 2400, + "packets_bytes": 40512, + "packets_indexed_bytes": 0, + "prim_nodes_bytes": 64, + "total_bytes": 81616, + "triangle_records_bytes": 18576, + "vertex_normals_bytes": 4632, + "vertices_bytes": 4776 + }, + "lights": 3, + "primvar_tables_bytes": 16, + "strand_tables_bytes": 0, + "top_level": { + "cubic_curve_spans": 0, + "curve_segments": 0, + "cylinders": 0, + "disks": 0, + "instances": 2, + "spheres": 1, + "triangles": 6 + }, + "unique": { + "cubic_curve_spans": 0, + "curve_segments": 0, + "cylinders": 0, + "disks": 0, + "instances": 2, + "spheres": 1, + "triangles": 774 + }, + "volumes": 0 + }, + "crust_version": "0.8.0", + "denied": [], + "effective_settings": [ + { + "flag": "-s", + "name": "samples_per_pixel", + "usd_attribute": "crust:samplesPerPixel", + "value": "16" + }, + { + "flag": null, + "name": "max_depth", + "usd_attribute": "crust:maxDepth", + "value": "4" + }, + { + "flag": "--strategy", + "name": "sampling_strategy", + "usd_attribute": "crust:samplingStrategy", + "value": "power" + }, + { + "flag": "--light-selection", + "name": "light_selection", + "usd_attribute": "crust:lightSelection", + "value": "power" + }, + { + "flag": "--light-samples", + "name": "light_samples", + "usd_attribute": "crust:lightSamples", + "value": "1" + }, + { + "flag": "--light-samples-indirect", + "name": "light_samples_indirect", + "usd_attribute": "crust:lightSamplesIndirect", + "value": "1" + }, + { + "flag": "--indirect-clamp", + "name": "indirect_clamp", + "usd_attribute": "crust:indirectClamp", + "value": "10" + }, + { + "flag": null, + "name": "exposure_scale", + "usd_attribute": null, + "value": "1" + }, + { + "flag": "--filter", + "name": "pixel_filter", + "usd_attribute": "crust:pixelFilter", + "value": "triangle" + }, + { + "flag": "--filter-radius", + "name": "pixel_filter_radius", + "usd_attribute": "crust:pixelFilterRadius", + "value": "1" + }, + { + "flag": "--sampler", + "name": "sampler", + "usd_attribute": "crust:sampler", + "value": "sobol" + }, + { + "flag": null, + "name": "path_guiding", + "usd_attribute": "crust:pathGuiding", + "value": "false" + }, + { + "flag": "--variance-threshold", + "name": "variance_threshold", + "usd_attribute": "crust:varianceThreshold", + "value": "0.05" + }, + { + "flag": "--min-samples", + "name": "min_samples_per_pixel", + "usd_attribute": "crust:minSamplesPerPixel", + "value": "32" + }, + { + "flag": "--neighbour-tolerance", + "name": "adaptive_neighbour_tolerance", + "usd_attribute": "crust:adaptiveNeighbourTolerance", + "value": "1" + }, + { + "flag": "--subdiv-level", + "name": "subdivision_level", + "usd_attribute": "crust:subdivisionLevel", + "value": "stage" + }, + { + "flag": "--subdiv-edge-length", + "name": "subdivision_edge_length", + "usd_attribute": "crust:subdivisionEdgeLength", + "value": "stage" + }, + { + "flag": "--auto-tx", + "name": "auto_tx", + "usd_attribute": null, + "value": "false" + } + ], + "findings": [], + "format": "crust-check/2", + "pass": null, + "precomp": { + "display": "look_final", + "display_filters": [ + "/Render/Precomp/glow", + "/Render/Precomp/bloom", + "/Render/Precomp/speed" + ], + "filters": [ + "sample /Render/Precomp/look: outputs [out], inputs [matte = var /Render/Products/Vars/matte, key = var /Render/Products/Vars/key, fill = var /Render/Products/Vars/fill, rim = var /Render/Products/Vars/rim]", + "display /Render/Precomp/glow: crust:blur of var /Render/Products/Vars/look (radius 9)", + "display /Render/Precomp/bloom: crust:merge Plus of var /Render/Products/Vars/look and /Render/Precomp/glow", + "display /Render/Precomp/speed: crust:vectorBlur of /Render/Precomp/bloom along var /Render/Products/Vars/motion (24 taps)" + ], + "sample_filters": [ + "/Render/Precomp/look" + ] + }, + "products": [ + { + "channels": [ + "R", + "G", + "B", + "key.R", + "key.G", + "key.B", + "fill.R", + "fill.G", + "fill.B", + "rim.R", + "rim.G", + "rim.B", + "matte", + "motion.u", + "motion.v", + "look.R", + "look.G", + "look.B", + "look_final.R", + "look_final.G", + "look_final.B" + ], + "file": "renders/precomp.exr", + "prim": "/Render/Products/precomp" + } + ], + "scene": { + "camera": "/World/Cam", + "frame": null, + "path": "$ROOT/samples/precomp.usda", + "region": null, + "resolution": [ + 320, + 180 + ] + }, + "settings": "/Render/settings", + "warnings": [] +} diff --git a/crates/crust-core/tests/data/import_baselines/check/primvar_aovs.usda.json b/crates/crust-core/tests/data/import_baselines/check/primvar_aovs.usda.json new file mode 100644 index 000000000..206d43f48 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/check/primvar_aovs.usda.json @@ -0,0 +1,195 @@ +{ + "counts": { + "geometries": 3, + "kernel_memory": { + "bvh_nodes_bytes": 2048, + "cubic_spans_bytes": 0, + "geometry_tables_bytes": 36, + "indices_bytes": 0, + "instances_bytes": 0, + "lanes": 236, + "lanes_filled": 196, + "leaves_bytes": 640, + "packets_bytes": 11328, + "packets_indexed_bytes": 0, + "prim_nodes_bytes": 0, + "total_bytes": 21204, + "triangle_records_bytes": 4704, + "vertex_normals_bytes": 1176, + "vertices_bytes": 1272 + }, + "lights": 2, + "primvar_tables_bytes": 9376, + "strand_tables_bytes": 0, + "top_level": { + "cubic_curve_spans": 0, + "curve_segments": 0, + "cylinders": 0, + "disks": 0, + "instances": 0, + "spheres": 0, + "triangles": 196 + }, + "unique": { + "cubic_curve_spans": 0, + "curve_segments": 0, + "cylinders": 0, + "disks": 0, + "instances": 0, + "spheres": 0, + "triangles": 196 + }, + "volumes": 0 + }, + "crust_version": "0.8.0", + "denied": [], + "effective_settings": [ + { + "flag": "-s", + "name": "samples_per_pixel", + "usd_attribute": "crust:samplesPerPixel", + "value": "16" + }, + { + "flag": null, + "name": "max_depth", + "usd_attribute": "crust:maxDepth", + "value": "4" + }, + { + "flag": "--strategy", + "name": "sampling_strategy", + "usd_attribute": "crust:samplingStrategy", + "value": "power" + }, + { + "flag": "--light-selection", + "name": "light_selection", + "usd_attribute": "crust:lightSelection", + "value": "power" + }, + { + "flag": "--light-samples", + "name": "light_samples", + "usd_attribute": "crust:lightSamples", + "value": "1" + }, + { + "flag": "--light-samples-indirect", + "name": "light_samples_indirect", + "usd_attribute": "crust:lightSamplesIndirect", + "value": "1" + }, + { + "flag": "--indirect-clamp", + "name": "indirect_clamp", + "usd_attribute": "crust:indirectClamp", + "value": "10" + }, + { + "flag": null, + "name": "exposure_scale", + "usd_attribute": null, + "value": "1" + }, + { + "flag": "--filter", + "name": "pixel_filter", + "usd_attribute": "crust:pixelFilter", + "value": "triangle" + }, + { + "flag": "--filter-radius", + "name": "pixel_filter_radius", + "usd_attribute": "crust:pixelFilterRadius", + "value": "1" + }, + { + "flag": "--sampler", + "name": "sampler", + "usd_attribute": "crust:sampler", + "value": "sobol" + }, + { + "flag": null, + "name": "path_guiding", + "usd_attribute": "crust:pathGuiding", + "value": "false" + }, + { + "flag": "--variance-threshold", + "name": "variance_threshold", + "usd_attribute": "crust:varianceThreshold", + "value": "0.05" + }, + { + "flag": "--min-samples", + "name": "min_samples_per_pixel", + "usd_attribute": "crust:minSamplesPerPixel", + "value": "32" + }, + { + "flag": "--neighbour-tolerance", + "name": "adaptive_neighbour_tolerance", + "usd_attribute": "crust:adaptiveNeighbourTolerance", + "value": "1" + }, + { + "flag": "--subdiv-level", + "name": "subdivision_level", + "usd_attribute": "crust:subdivisionLevel", + "value": "stage" + }, + { + "flag": "--subdiv-edge-length", + "name": "subdivision_edge_length", + "usd_attribute": "crust:subdivisionEdgeLength", + "value": "stage" + }, + { + "flag": "--auto-tx", + "name": "auto_tx", + "usd_attribute": null, + "value": "false" + } + ], + "findings": [], + "format": "crust-check/2", + "pass": null, + "precomp": null, + "products": [ + { + "channels": [ + "R", + "G", + "B", + "A", + "P.X", + "P.Y", + "P.Z", + "Pref.X", + "Pref.Y", + "Pref.Z", + "uv2.U", + "uv2.V", + "Cd.R", + "Cd.G", + "Cd.B" + ], + "file": "renders/primvar_aovs.exr", + "prim": "/Render/Products/primvars" + } + ], + "scene": { + "camera": "/World/Cam", + "frame": null, + "path": "$ROOT/samples/primvar_aovs.usda", + "region": null, + "resolution": [ + 160, + 90 + ] + }, + "settings": "/Render/settings", + "warnings": [] +} diff --git a/crates/crust-core/tests/data/import_baselines/check/ptex_quads.usda.json b/crates/crust-core/tests/data/import_baselines/check/ptex_quads.usda.json new file mode 100644 index 000000000..f32e63a13 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/check/ptex_quads.usda.json @@ -0,0 +1,183 @@ +{ + "counts": { + "geometries": 2, + "kernel_memory": { + "bvh_nodes_bytes": 128, + "cubic_spans_bytes": 0, + "geometry_tables_bytes": 24, + "indices_bytes": 0, + "instances_bytes": 0, + "lanes": 12, + "lanes_filled": 12, + "leaves_bytes": 32, + "packets_bytes": 576, + "packets_indexed_bytes": 0, + "prim_nodes_bytes": 0, + "total_bytes": 1228, + "triangle_records_bytes": 288, + "vertex_normals_bytes": 0, + "vertices_bytes": 180 + }, + "lights": 1, + "primvar_tables_bytes": 0, + "strand_tables_bytes": 0, + "top_level": { + "cubic_curve_spans": 0, + "curve_segments": 0, + "cylinders": 0, + "disks": 0, + "instances": 0, + "spheres": 0, + "triangles": 12 + }, + "unique": { + "cubic_curve_spans": 0, + "curve_segments": 0, + "cylinders": 0, + "disks": 0, + "instances": 0, + "spheres": 0, + "triangles": 12 + }, + "volumes": 0 + }, + "crust_version": "0.8.0", + "denied": [], + "effective_settings": [ + { + "flag": "-s", + "name": "samples_per_pixel", + "usd_attribute": "crust:samplesPerPixel", + "value": "16" + }, + { + "flag": null, + "name": "max_depth", + "usd_attribute": "crust:maxDepth", + "value": "3" + }, + { + "flag": "--strategy", + "name": "sampling_strategy", + "usd_attribute": "crust:samplingStrategy", + "value": "power" + }, + { + "flag": "--light-selection", + "name": "light_selection", + "usd_attribute": "crust:lightSelection", + "value": "power" + }, + { + "flag": "--light-samples", + "name": "light_samples", + "usd_attribute": "crust:lightSamples", + "value": "1" + }, + { + "flag": "--light-samples-indirect", + "name": "light_samples_indirect", + "usd_attribute": "crust:lightSamplesIndirect", + "value": "1" + }, + { + "flag": "--indirect-clamp", + "name": "indirect_clamp", + "usd_attribute": "crust:indirectClamp", + "value": "10" + }, + { + "flag": null, + "name": "exposure_scale", + "usd_attribute": null, + "value": "1" + }, + { + "flag": "--filter", + "name": "pixel_filter", + "usd_attribute": "crust:pixelFilter", + "value": "triangle" + }, + { + "flag": "--filter-radius", + "name": "pixel_filter_radius", + "usd_attribute": "crust:pixelFilterRadius", + "value": "1" + }, + { + "flag": "--sampler", + "name": "sampler", + "usd_attribute": "crust:sampler", + "value": "sobol" + }, + { + "flag": null, + "name": "path_guiding", + "usd_attribute": "crust:pathGuiding", + "value": "false" + }, + { + "flag": "--variance-threshold", + "name": "variance_threshold", + "usd_attribute": "crust:varianceThreshold", + "value": "0" + }, + { + "flag": "--min-samples", + "name": "min_samples_per_pixel", + "usd_attribute": "crust:minSamplesPerPixel", + "value": "16" + }, + { + "flag": "--neighbour-tolerance", + "name": "adaptive_neighbour_tolerance", + "usd_attribute": "crust:adaptiveNeighbourTolerance", + "value": "1" + }, + { + "flag": "--subdiv-level", + "name": "subdivision_level", + "usd_attribute": "crust:subdivisionLevel", + "value": "stage" + }, + { + "flag": "--subdiv-edge-length", + "name": "subdivision_edge_length", + "usd_attribute": "crust:subdivisionEdgeLength", + "value": "stage" + }, + { + "flag": "--auto-tx", + "name": "auto_tx", + "usd_attribute": null, + "value": "false" + } + ], + "findings": [], + "format": "crust-check/2", + "pass": null, + "precomp": null, + "products": [ + { + "channels": [ + "R", + "G", + "B" + ], + "file": "output.exr", + "prim": null + } + ], + "scene": { + "camera": "/World/Cam", + "frame": null, + "path": "$ROOT/samples/ptex_quads.usda", + "region": null, + "resolution": [ + 320, + 180 + ] + }, + "settings": "/Render/settings", + "warnings": [] +} diff --git a/crates/crust-core/tests/data/import_baselines/check/purpose_bindings.usda.json b/crates/crust-core/tests/data/import_baselines/check/purpose_bindings.usda.json new file mode 100644 index 000000000..b989dbfbb --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/check/purpose_bindings.usda.json @@ -0,0 +1,183 @@ +{ + "counts": { + "geometries": 4, + "kernel_memory": { + "bvh_nodes_bytes": 512, + "cubic_spans_bytes": 0, + "geometry_tables_bytes": 60, + "indices_bytes": 8, + "instances_bytes": 192, + "lanes": 40, + "lanes_filled": 28, + "leaves_bytes": 160, + "packets_bytes": 1920, + "packets_indexed_bytes": 0, + "prim_nodes_bytes": 0, + "total_bytes": 3716, + "triangle_records_bytes": 624, + "vertex_normals_bytes": 0, + "vertices_bytes": 240 + }, + "lights": 2, + "primvar_tables_bytes": 0, + "strand_tables_bytes": 0, + "top_level": { + "cubic_curve_spans": 0, + "curve_segments": 0, + "cylinders": 0, + "disks": 0, + "instances": 2, + "spheres": 0, + "triangles": 14 + }, + "unique": { + "cubic_curve_spans": 0, + "curve_segments": 0, + "cylinders": 0, + "disks": 0, + "instances": 2, + "spheres": 0, + "triangles": 26 + }, + "volumes": 0 + }, + "crust_version": "0.8.0", + "denied": [], + "effective_settings": [ + { + "flag": "-s", + "name": "samples_per_pixel", + "usd_attribute": "crust:samplesPerPixel", + "value": "128" + }, + { + "flag": null, + "name": "max_depth", + "usd_attribute": "crust:maxDepth", + "value": "32" + }, + { + "flag": "--strategy", + "name": "sampling_strategy", + "usd_attribute": "crust:samplingStrategy", + "value": "power" + }, + { + "flag": "--light-selection", + "name": "light_selection", + "usd_attribute": "crust:lightSelection", + "value": "power" + }, + { + "flag": "--light-samples", + "name": "light_samples", + "usd_attribute": "crust:lightSamples", + "value": "1" + }, + { + "flag": "--light-samples-indirect", + "name": "light_samples_indirect", + "usd_attribute": "crust:lightSamplesIndirect", + "value": "1" + }, + { + "flag": "--indirect-clamp", + "name": "indirect_clamp", + "usd_attribute": "crust:indirectClamp", + "value": "10" + }, + { + "flag": null, + "name": "exposure_scale", + "usd_attribute": null, + "value": "1" + }, + { + "flag": "--filter", + "name": "pixel_filter", + "usd_attribute": "crust:pixelFilter", + "value": "triangle" + }, + { + "flag": "--filter-radius", + "name": "pixel_filter_radius", + "usd_attribute": "crust:pixelFilterRadius", + "value": "1" + }, + { + "flag": "--sampler", + "name": "sampler", + "usd_attribute": "crust:sampler", + "value": "sobol" + }, + { + "flag": null, + "name": "path_guiding", + "usd_attribute": "crust:pathGuiding", + "value": "false" + }, + { + "flag": "--variance-threshold", + "name": "variance_threshold", + "usd_attribute": "crust:varianceThreshold", + "value": "0.05" + }, + { + "flag": "--min-samples", + "name": "min_samples_per_pixel", + "usd_attribute": "crust:minSamplesPerPixel", + "value": "32" + }, + { + "flag": "--neighbour-tolerance", + "name": "adaptive_neighbour_tolerance", + "usd_attribute": "crust:adaptiveNeighbourTolerance", + "value": "1" + }, + { + "flag": "--subdiv-level", + "name": "subdivision_level", + "usd_attribute": "crust:subdivisionLevel", + "value": "stage" + }, + { + "flag": "--subdiv-edge-length", + "name": "subdivision_edge_length", + "usd_attribute": "crust:subdivisionEdgeLength", + "value": "stage" + }, + { + "flag": "--auto-tx", + "name": "auto_tx", + "usd_attribute": null, + "value": "false" + } + ], + "findings": [], + "format": "crust-check/2", + "pass": null, + "precomp": null, + "products": [ + { + "channels": [ + "R", + "G", + "B" + ], + "file": "output.exr", + "prim": null + } + ], + "scene": { + "camera": "/World/Cam", + "frame": null, + "path": "$ROOT/samples/purpose_bindings.usda", + "region": null, + "resolution": [ + 640, + 360 + ] + }, + "settings": null, + "warnings": [] +} diff --git a/crates/crust-core/tests/data/import_baselines/check/pxr_displace.usda.json b/crates/crust-core/tests/data/import_baselines/check/pxr_displace.usda.json new file mode 100644 index 000000000..cbe2c9235 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/check/pxr_displace.usda.json @@ -0,0 +1,183 @@ +{ + "counts": { + "geometries": 1, + "kernel_memory": { + "bvh_nodes_bytes": 3200, + "cubic_spans_bytes": 0, + "geometry_tables_bytes": 12, + "indices_bytes": 0, + "instances_bytes": 0, + "lanes": 256, + "lanes_filled": 256, + "leaves_bytes": 1024, + "packets_bytes": 12288, + "packets_indexed_bytes": 0, + "prim_nodes_bytes": 0, + "total_bytes": 26340, + "triangle_records_bytes": 6144, + "vertex_normals_bytes": 1836, + "vertices_bytes": 1836 + }, + "lights": 2, + "primvar_tables_bytes": 0, + "strand_tables_bytes": 0, + "top_level": { + "cubic_curve_spans": 0, + "curve_segments": 0, + "cylinders": 0, + "disks": 0, + "instances": 0, + "spheres": 0, + "triangles": 256 + }, + "unique": { + "cubic_curve_spans": 0, + "curve_segments": 0, + "cylinders": 0, + "disks": 0, + "instances": 0, + "spheres": 0, + "triangles": 256 + }, + "volumes": 0 + }, + "crust_version": "0.8.0", + "denied": [], + "effective_settings": [ + { + "flag": "-s", + "name": "samples_per_pixel", + "usd_attribute": "crust:samplesPerPixel", + "value": "32" + }, + { + "flag": null, + "name": "max_depth", + "usd_attribute": "crust:maxDepth", + "value": "4" + }, + { + "flag": "--strategy", + "name": "sampling_strategy", + "usd_attribute": "crust:samplingStrategy", + "value": "power" + }, + { + "flag": "--light-selection", + "name": "light_selection", + "usd_attribute": "crust:lightSelection", + "value": "power" + }, + { + "flag": "--light-samples", + "name": "light_samples", + "usd_attribute": "crust:lightSamples", + "value": "1" + }, + { + "flag": "--light-samples-indirect", + "name": "light_samples_indirect", + "usd_attribute": "crust:lightSamplesIndirect", + "value": "1" + }, + { + "flag": "--indirect-clamp", + "name": "indirect_clamp", + "usd_attribute": "crust:indirectClamp", + "value": "10" + }, + { + "flag": null, + "name": "exposure_scale", + "usd_attribute": null, + "value": "1" + }, + { + "flag": "--filter", + "name": "pixel_filter", + "usd_attribute": "crust:pixelFilter", + "value": "triangle" + }, + { + "flag": "--filter-radius", + "name": "pixel_filter_radius", + "usd_attribute": "crust:pixelFilterRadius", + "value": "1" + }, + { + "flag": "--sampler", + "name": "sampler", + "usd_attribute": "crust:sampler", + "value": "sobol" + }, + { + "flag": null, + "name": "path_guiding", + "usd_attribute": "crust:pathGuiding", + "value": "false" + }, + { + "flag": "--variance-threshold", + "name": "variance_threshold", + "usd_attribute": "crust:varianceThreshold", + "value": "0.05" + }, + { + "flag": "--min-samples", + "name": "min_samples_per_pixel", + "usd_attribute": "crust:minSamplesPerPixel", + "value": "32" + }, + { + "flag": "--neighbour-tolerance", + "name": "adaptive_neighbour_tolerance", + "usd_attribute": "crust:adaptiveNeighbourTolerance", + "value": "1" + }, + { + "flag": "--subdiv-level", + "name": "subdivision_level", + "usd_attribute": "crust:subdivisionLevel", + "value": "stage" + }, + { + "flag": "--subdiv-edge-length", + "name": "subdivision_edge_length", + "usd_attribute": "crust:subdivisionEdgeLength", + "value": "stage" + }, + { + "flag": "--auto-tx", + "name": "auto_tx", + "usd_attribute": null, + "value": "false" + } + ], + "findings": [], + "format": "crust-check/2", + "pass": null, + "precomp": null, + "products": [ + { + "channels": [ + "R", + "G", + "B" + ], + "file": "output.exr", + "prim": null + } + ], + "scene": { + "camera": "/World/Cam", + "frame": null, + "path": "$ROOT/samples/pxr_displace.usda", + "region": null, + "resolution": [ + 240, + 160 + ] + }, + "settings": "/Render/settings", + "warnings": [] +} diff --git a/crates/crust-core/tests/data/import_baselines/check/rectlight.usda.json b/crates/crust-core/tests/data/import_baselines/check/rectlight.usda.json new file mode 100644 index 000000000..b903ed4f8 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/check/rectlight.usda.json @@ -0,0 +1,183 @@ +{ + "counts": { + "geometries": 3, + "kernel_memory": { + "bvh_nodes_bytes": 128, + "cubic_spans_bytes": 0, + "geometry_tables_bytes": 36, + "indices_bytes": 4, + "instances_bytes": 0, + "lanes": 8, + "lanes_filled": 4, + "leaves_bytes": 48, + "packets_bytes": 384, + "packets_indexed_bytes": 0, + "prim_nodes_bytes": 64, + "total_bytes": 856, + "triangle_records_bytes": 96, + "vertex_normals_bytes": 0, + "vertices_bytes": 96 + }, + "lights": 1, + "primvar_tables_bytes": 0, + "strand_tables_bytes": 0, + "top_level": { + "cubic_curve_spans": 0, + "curve_segments": 0, + "cylinders": 0, + "disks": 0, + "instances": 0, + "spheres": 1, + "triangles": 4 + }, + "unique": { + "cubic_curve_spans": 0, + "curve_segments": 0, + "cylinders": 0, + "disks": 0, + "instances": 0, + "spheres": 1, + "triangles": 4 + }, + "volumes": 0 + }, + "crust_version": "0.8.0", + "denied": [], + "effective_settings": [ + { + "flag": "-s", + "name": "samples_per_pixel", + "usd_attribute": "crust:samplesPerPixel", + "value": "8" + }, + { + "flag": null, + "name": "max_depth", + "usd_attribute": "crust:maxDepth", + "value": "4" + }, + { + "flag": "--strategy", + "name": "sampling_strategy", + "usd_attribute": "crust:samplingStrategy", + "value": "power" + }, + { + "flag": "--light-selection", + "name": "light_selection", + "usd_attribute": "crust:lightSelection", + "value": "power" + }, + { + "flag": "--light-samples", + "name": "light_samples", + "usd_attribute": "crust:lightSamples", + "value": "1" + }, + { + "flag": "--light-samples-indirect", + "name": "light_samples_indirect", + "usd_attribute": "crust:lightSamplesIndirect", + "value": "1" + }, + { + "flag": "--indirect-clamp", + "name": "indirect_clamp", + "usd_attribute": "crust:indirectClamp", + "value": "10" + }, + { + "flag": null, + "name": "exposure_scale", + "usd_attribute": null, + "value": "1" + }, + { + "flag": "--filter", + "name": "pixel_filter", + "usd_attribute": "crust:pixelFilter", + "value": "triangle" + }, + { + "flag": "--filter-radius", + "name": "pixel_filter_radius", + "usd_attribute": "crust:pixelFilterRadius", + "value": "1" + }, + { + "flag": "--sampler", + "name": "sampler", + "usd_attribute": "crust:sampler", + "value": "sobol" + }, + { + "flag": null, + "name": "path_guiding", + "usd_attribute": "crust:pathGuiding", + "value": "false" + }, + { + "flag": "--variance-threshold", + "name": "variance_threshold", + "usd_attribute": "crust:varianceThreshold", + "value": "0.05" + }, + { + "flag": "--min-samples", + "name": "min_samples_per_pixel", + "usd_attribute": "crust:minSamplesPerPixel", + "value": "4" + }, + { + "flag": "--neighbour-tolerance", + "name": "adaptive_neighbour_tolerance", + "usd_attribute": "crust:adaptiveNeighbourTolerance", + "value": "1" + }, + { + "flag": "--subdiv-level", + "name": "subdivision_level", + "usd_attribute": "crust:subdivisionLevel", + "value": "stage" + }, + { + "flag": "--subdiv-edge-length", + "name": "subdivision_edge_length", + "usd_attribute": "crust:subdivisionEdgeLength", + "value": "stage" + }, + { + "flag": "--auto-tx", + "name": "auto_tx", + "usd_attribute": null, + "value": "false" + } + ], + "findings": [], + "format": "crust-check/2", + "pass": null, + "precomp": null, + "products": [ + { + "channels": [ + "R", + "G", + "B" + ], + "file": "output.exr", + "prim": null + } + ], + "scene": { + "camera": "/World/Cam", + "frame": null, + "path": "$ROOT/samples/rectlight.usda", + "region": null, + "resolution": [ + 64, + 64 + ] + }, + "settings": "/Render/settings", + "warnings": [] +} diff --git a/crates/crust-core/tests/data/import_baselines/check/render_passes.usda.json b/crates/crust-core/tests/data/import_baselines/check/render_passes.usda.json new file mode 100644 index 000000000..3ef4bfe3c --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/check/render_passes.usda.json @@ -0,0 +1,184 @@ +{ + "counts": { + "geometries": 5, + "kernel_memory": { + "bvh_nodes_bytes": 256, + "cubic_spans_bytes": 0, + "geometry_tables_bytes": 60, + "indices_bytes": 12, + "instances_bytes": 0, + "lanes": 24, + "lanes_filled": 16, + "leaves_bytes": 112, + "packets_bytes": 1152, + "packets_indexed_bytes": 0, + "prim_nodes_bytes": 192, + "total_bytes": 2264, + "triangle_records_bytes": 336, + "vertex_normals_bytes": 0, + "vertices_bytes": 144 + }, + "lights": 2, + "primvar_tables_bytes": 0, + "strand_tables_bytes": 0, + "top_level": { + "cubic_curve_spans": 0, + "curve_segments": 0, + "cylinders": 0, + "disks": 0, + "instances": 0, + "spheres": 3, + "triangles": 14 + }, + "unique": { + "cubic_curve_spans": 0, + "curve_segments": 0, + "cylinders": 0, + "disks": 0, + "instances": 0, + "spheres": 3, + "triangles": 14 + }, + "volumes": 0 + }, + "crust_version": "0.8.0", + "denied": [], + "effective_settings": [ + { + "flag": "-s", + "name": "samples_per_pixel", + "usd_attribute": "crust:samplesPerPixel", + "value": "64" + }, + { + "flag": null, + "name": "max_depth", + "usd_attribute": "crust:maxDepth", + "value": "4" + }, + { + "flag": "--strategy", + "name": "sampling_strategy", + "usd_attribute": "crust:samplingStrategy", + "value": "power" + }, + { + "flag": "--light-selection", + "name": "light_selection", + "usd_attribute": "crust:lightSelection", + "value": "power" + }, + { + "flag": "--light-samples", + "name": "light_samples", + "usd_attribute": "crust:lightSamples", + "value": "1" + }, + { + "flag": "--light-samples-indirect", + "name": "light_samples_indirect", + "usd_attribute": "crust:lightSamplesIndirect", + "value": "1" + }, + { + "flag": "--indirect-clamp", + "name": "indirect_clamp", + "usd_attribute": "crust:indirectClamp", + "value": "10" + }, + { + "flag": null, + "name": "exposure_scale", + "usd_attribute": null, + "value": "1" + }, + { + "flag": "--filter", + "name": "pixel_filter", + "usd_attribute": "crust:pixelFilter", + "value": "triangle" + }, + { + "flag": "--filter-radius", + "name": "pixel_filter_radius", + "usd_attribute": "crust:pixelFilterRadius", + "value": "1" + }, + { + "flag": "--sampler", + "name": "sampler", + "usd_attribute": "crust:sampler", + "value": "sobol" + }, + { + "flag": null, + "name": "path_guiding", + "usd_attribute": "crust:pathGuiding", + "value": "false" + }, + { + "flag": "--variance-threshold", + "name": "variance_threshold", + "usd_attribute": "crust:varianceThreshold", + "value": "0.05" + }, + { + "flag": "--min-samples", + "name": "min_samples_per_pixel", + "usd_attribute": "crust:minSamplesPerPixel", + "value": "32" + }, + { + "flag": "--neighbour-tolerance", + "name": "adaptive_neighbour_tolerance", + "usd_attribute": "crust:adaptiveNeighbourTolerance", + "value": "1" + }, + { + "flag": "--subdiv-level", + "name": "subdivision_level", + "usd_attribute": "crust:subdivisionLevel", + "value": "stage" + }, + { + "flag": "--subdiv-edge-length", + "name": "subdivision_edge_length", + "usd_attribute": "crust:subdivisionEdgeLength", + "value": "stage" + }, + { + "flag": "--auto-tx", + "name": "auto_tx", + "usd_attribute": null, + "value": "false" + } + ], + "findings": [], + "format": "crust-check/2", + "pass": null, + "precomp": null, + "products": [ + { + "channels": [ + "R", + "G", + "B", + "A" + ], + "file": "props.exr", + "prim": "/Render/Products/props" + } + ], + "scene": { + "camera": "/World/Cam", + "frame": null, + "path": "$ROOT/samples/render_passes.usda", + "region": null, + "resolution": [ + 160, + 90 + ] + }, + "settings": "/Render/settings", + "warnings": [] +} diff --git a/crates/crust-core/tests/data/import_baselines/check/smoke.usda.json b/crates/crust-core/tests/data/import_baselines/check/smoke.usda.json new file mode 100644 index 000000000..3973bf66e --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/check/smoke.usda.json @@ -0,0 +1,183 @@ +{ + "counts": { + "geometries": 2, + "kernel_memory": { + "bvh_nodes_bytes": 128, + "cubic_spans_bytes": 0, + "geometry_tables_bytes": 24, + "indices_bytes": 0, + "instances_bytes": 0, + "lanes": 16, + "lanes_filled": 12, + "leaves_bytes": 48, + "packets_bytes": 768, + "packets_indexed_bytes": 0, + "prim_nodes_bytes": 0, + "total_bytes": 1544, + "triangle_records_bytes": 288, + "vertex_normals_bytes": 0, + "vertices_bytes": 288 + }, + "lights": 1, + "primvar_tables_bytes": 0, + "strand_tables_bytes": 0, + "top_level": { + "cubic_curve_spans": 0, + "curve_segments": 0, + "cylinders": 0, + "disks": 0, + "instances": 0, + "spheres": 0, + "triangles": 12 + }, + "unique": { + "cubic_curve_spans": 0, + "curve_segments": 0, + "cylinders": 0, + "disks": 0, + "instances": 0, + "spheres": 0, + "triangles": 12 + }, + "volumes": 3 + }, + "crust_version": "0.8.0", + "denied": [], + "effective_settings": [ + { + "flag": "-s", + "name": "samples_per_pixel", + "usd_attribute": "crust:samplesPerPixel", + "value": "64" + }, + { + "flag": null, + "name": "max_depth", + "usd_attribute": "crust:maxDepth", + "value": "16" + }, + { + "flag": "--strategy", + "name": "sampling_strategy", + "usd_attribute": "crust:samplingStrategy", + "value": "power" + }, + { + "flag": "--light-selection", + "name": "light_selection", + "usd_attribute": "crust:lightSelection", + "value": "power" + }, + { + "flag": "--light-samples", + "name": "light_samples", + "usd_attribute": "crust:lightSamples", + "value": "1" + }, + { + "flag": "--light-samples-indirect", + "name": "light_samples_indirect", + "usd_attribute": "crust:lightSamplesIndirect", + "value": "1" + }, + { + "flag": "--indirect-clamp", + "name": "indirect_clamp", + "usd_attribute": "crust:indirectClamp", + "value": "10" + }, + { + "flag": null, + "name": "exposure_scale", + "usd_attribute": null, + "value": "1" + }, + { + "flag": "--filter", + "name": "pixel_filter", + "usd_attribute": "crust:pixelFilter", + "value": "triangle" + }, + { + "flag": "--filter-radius", + "name": "pixel_filter_radius", + "usd_attribute": "crust:pixelFilterRadius", + "value": "1" + }, + { + "flag": "--sampler", + "name": "sampler", + "usd_attribute": "crust:sampler", + "value": "sobol" + }, + { + "flag": null, + "name": "path_guiding", + "usd_attribute": "crust:pathGuiding", + "value": "false" + }, + { + "flag": "--variance-threshold", + "name": "variance_threshold", + "usd_attribute": "crust:varianceThreshold", + "value": "0.05" + }, + { + "flag": "--min-samples", + "name": "min_samples_per_pixel", + "usd_attribute": "crust:minSamplesPerPixel", + "value": "16" + }, + { + "flag": "--neighbour-tolerance", + "name": "adaptive_neighbour_tolerance", + "usd_attribute": "crust:adaptiveNeighbourTolerance", + "value": "1" + }, + { + "flag": "--subdiv-level", + "name": "subdivision_level", + "usd_attribute": "crust:subdivisionLevel", + "value": "stage" + }, + { + "flag": "--subdiv-edge-length", + "name": "subdivision_edge_length", + "usd_attribute": "crust:subdivisionEdgeLength", + "value": "stage" + }, + { + "flag": "--auto-tx", + "name": "auto_tx", + "usd_attribute": null, + "value": "false" + } + ], + "findings": [], + "format": "crust-check/2", + "pass": null, + "precomp": null, + "products": [ + { + "channels": [ + "R", + "G", + "B" + ], + "file": "output.exr", + "prim": null + } + ], + "scene": { + "camera": "/World/Cam", + "frame": null, + "path": "$ROOT/samples/smoke.usda", + "region": null, + "resolution": [ + 320, + 180 + ] + }, + "settings": "/Render/settings", + "warnings": [] +} diff --git a/crates/crust-core/tests/data/import_baselines/check/subdivision.usda.json b/crates/crust-core/tests/data/import_baselines/check/subdivision.usda.json new file mode 100644 index 000000000..3f90451f0 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/check/subdivision.usda.json @@ -0,0 +1,197 @@ +{ + "counts": { + "geometries": 8, + "kernel_memory": { + "bvh_nodes_bytes": 14848, + "cubic_spans_bytes": 0, + "geometry_tables_bytes": 96, + "indices_bytes": 0, + "instances_bytes": 0, + "lanes": 1144, + "lanes_filled": 976, + "leaves_bytes": 3856, + "packets_bytes": 54912, + "packets_indexed_bytes": 0, + "prim_nodes_bytes": 0, + "total_bytes": 109088, + "triangle_records_bytes": 23424, + "vertex_normals_bytes": 5880, + "vertices_bytes": 6072 + }, + "lights": 2, + "primvar_tables_bytes": 0, + "strand_tables_bytes": 0, + "top_level": { + "cubic_curve_spans": 0, + "curve_segments": 0, + "cylinders": 0, + "disks": 0, + "instances": 0, + "spheres": 0, + "triangles": 976 + }, + "unique": { + "cubic_curve_spans": 0, + "curve_segments": 0, + "cylinders": 0, + "disks": 0, + "instances": 0, + "spheres": 0, + "triangles": 976 + }, + "volumes": 0 + }, + "crust_version": "0.8.0", + "denied": [], + "effective_settings": [ + { + "flag": "-s", + "name": "samples_per_pixel", + "usd_attribute": "crust:samplesPerPixel", + "value": "64" + }, + { + "flag": null, + "name": "max_depth", + "usd_attribute": "crust:maxDepth", + "value": "4" + }, + { + "flag": "--strategy", + "name": "sampling_strategy", + "usd_attribute": "crust:samplingStrategy", + "value": "power" + }, + { + "flag": "--light-selection", + "name": "light_selection", + "usd_attribute": "crust:lightSelection", + "value": "power" + }, + { + "flag": "--light-samples", + "name": "light_samples", + "usd_attribute": "crust:lightSamples", + "value": "1" + }, + { + "flag": "--light-samples-indirect", + "name": "light_samples_indirect", + "usd_attribute": "crust:lightSamplesIndirect", + "value": "1" + }, + { + "flag": "--indirect-clamp", + "name": "indirect_clamp", + "usd_attribute": "crust:indirectClamp", + "value": "10" + }, + { + "flag": null, + "name": "exposure_scale", + "usd_attribute": null, + "value": "1" + }, + { + "flag": "--filter", + "name": "pixel_filter", + "usd_attribute": "crust:pixelFilter", + "value": "triangle" + }, + { + "flag": "--filter-radius", + "name": "pixel_filter_radius", + "usd_attribute": "crust:pixelFilterRadius", + "value": "1" + }, + { + "flag": "--sampler", + "name": "sampler", + "usd_attribute": "crust:sampler", + "value": "sobol" + }, + { + "flag": null, + "name": "path_guiding", + "usd_attribute": "crust:pathGuiding", + "value": "false" + }, + { + "flag": "--variance-threshold", + "name": "variance_threshold", + "usd_attribute": "crust:varianceThreshold", + "value": "0.05" + }, + { + "flag": "--min-samples", + "name": "min_samples_per_pixel", + "usd_attribute": "crust:minSamplesPerPixel", + "value": "16" + }, + { + "flag": "--neighbour-tolerance", + "name": "adaptive_neighbour_tolerance", + "usd_attribute": "crust:adaptiveNeighbourTolerance", + "value": "1" + }, + { + "flag": "--subdiv-level", + "name": "subdivision_level", + "usd_attribute": "crust:subdivisionLevel", + "value": "stage" + }, + { + "flag": "--subdiv-edge-length", + "name": "subdivision_edge_length", + "usd_attribute": "crust:subdivisionEdgeLength", + "value": "stage" + }, + { + "flag": "--auto-tx", + "name": "auto_tx", + "usd_attribute": null, + "value": "false" + } + ], + "findings": [ + { + "action": { + "flag": "--auto-tx", + "usd_attribute": null, + "value": "on" + }, + "evidence": { + "textures": 1.0 + }, + "id": "textures_without_tx", + "kind": "time", + "summary": "1 UV texture(s) have no .tx beside them: each is decoded whole at import and held resident instead of streamed" + } + ], + "format": "crust-check/2", + "pass": null, + "precomp": null, + "products": [ + { + "channels": [ + "R", + "G", + "B" + ], + "file": "output.exr", + "prim": null + } + ], + "scene": { + "camera": "/World/Cam", + "frame": null, + "path": "$ROOT/samples/subdivision.usda", + "region": null, + "resolution": [ + 320, + 180 + ] + }, + "settings": "/Render/settings", + "warnings": [] +} diff --git a/crates/crust-core/tests/data/import_baselines/check/subdivision_adaptive.usda.json b/crates/crust-core/tests/data/import_baselines/check/subdivision_adaptive.usda.json new file mode 100644 index 000000000..bbd495238 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/check/subdivision_adaptive.usda.json @@ -0,0 +1,183 @@ +{ + "counts": { + "geometries": 6, + "kernel_memory": { + "bvh_nodes_bytes": 13824, + "cubic_spans_bytes": 0, + "geometry_tables_bytes": 84, + "indices_bytes": 8, + "instances_bytes": 192, + "lanes": 1108, + "lanes_filled": 1022, + "leaves_bytes": 2960, + "packets_bytes": 53184, + "packets_indexed_bytes": 0, + "prim_nodes_bytes": 0, + "total_bytes": 107260, + "triangle_records_bytes": 24528, + "vertex_normals_bytes": 6216, + "vertices_bytes": 6264 + }, + "lights": 2, + "primvar_tables_bytes": 0, + "strand_tables_bytes": 0, + "top_level": { + "cubic_curve_spans": 0, + "curve_segments": 0, + "cylinders": 0, + "disks": 0, + "instances": 2, + "spheres": 0, + "triangles": 254 + }, + "unique": { + "cubic_curve_spans": 0, + "curve_segments": 0, + "cylinders": 0, + "disks": 0, + "instances": 2, + "spheres": 0, + "triangles": 1022 + }, + "volumes": 0 + }, + "crust_version": "0.8.0", + "denied": [], + "effective_settings": [ + { + "flag": "-s", + "name": "samples_per_pixel", + "usd_attribute": "crust:samplesPerPixel", + "value": "64" + }, + { + "flag": null, + "name": "max_depth", + "usd_attribute": "crust:maxDepth", + "value": "4" + }, + { + "flag": "--strategy", + "name": "sampling_strategy", + "usd_attribute": "crust:samplingStrategy", + "value": "power" + }, + { + "flag": "--light-selection", + "name": "light_selection", + "usd_attribute": "crust:lightSelection", + "value": "power" + }, + { + "flag": "--light-samples", + "name": "light_samples", + "usd_attribute": "crust:lightSamples", + "value": "1" + }, + { + "flag": "--light-samples-indirect", + "name": "light_samples_indirect", + "usd_attribute": "crust:lightSamplesIndirect", + "value": "1" + }, + { + "flag": "--indirect-clamp", + "name": "indirect_clamp", + "usd_attribute": "crust:indirectClamp", + "value": "10" + }, + { + "flag": null, + "name": "exposure_scale", + "usd_attribute": null, + "value": "1" + }, + { + "flag": "--filter", + "name": "pixel_filter", + "usd_attribute": "crust:pixelFilter", + "value": "triangle" + }, + { + "flag": "--filter-radius", + "name": "pixel_filter_radius", + "usd_attribute": "crust:pixelFilterRadius", + "value": "1" + }, + { + "flag": "--sampler", + "name": "sampler", + "usd_attribute": "crust:sampler", + "value": "sobol" + }, + { + "flag": null, + "name": "path_guiding", + "usd_attribute": "crust:pathGuiding", + "value": "false" + }, + { + "flag": "--variance-threshold", + "name": "variance_threshold", + "usd_attribute": "crust:varianceThreshold", + "value": "0.05" + }, + { + "flag": "--min-samples", + "name": "min_samples_per_pixel", + "usd_attribute": "crust:minSamplesPerPixel", + "value": "16" + }, + { + "flag": "--neighbour-tolerance", + "name": "adaptive_neighbour_tolerance", + "usd_attribute": "crust:adaptiveNeighbourTolerance", + "value": "1" + }, + { + "flag": "--subdiv-level", + "name": "subdivision_level", + "usd_attribute": "crust:subdivisionLevel", + "value": "stage" + }, + { + "flag": "--subdiv-edge-length", + "name": "subdivision_edge_length", + "usd_attribute": "crust:subdivisionEdgeLength", + "value": "stage" + }, + { + "flag": "--auto-tx", + "name": "auto_tx", + "usd_attribute": null, + "value": "false" + } + ], + "findings": [], + "format": "crust-check/2", + "pass": null, + "precomp": null, + "products": [ + { + "channels": [ + "R", + "G", + "B" + ], + "file": "output.exr", + "prim": null + } + ], + "scene": { + "camera": "/World/Cam", + "frame": null, + "path": "$ROOT/samples/subdivision_adaptive.usda", + "region": null, + "resolution": [ + 320, + 180 + ] + }, + "settings": "/Render/settings", + "warnings": [] +} diff --git a/crates/crust-core/tests/data/import_baselines/check/thin_window.usda.json b/crates/crust-core/tests/data/import_baselines/check/thin_window.usda.json new file mode 100644 index 000000000..0d823fa2f --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/check/thin_window.usda.json @@ -0,0 +1,183 @@ +{ + "counts": { + "geometries": 4, + "kernel_memory": { + "bvh_nodes_bytes": 128, + "cubic_spans_bytes": 0, + "geometry_tables_bytes": 48, + "indices_bytes": 4, + "instances_bytes": 0, + "lanes": 12, + "lanes_filled": 6, + "leaves_bytes": 64, + "packets_bytes": 576, + "packets_indexed_bytes": 0, + "prim_nodes_bytes": 64, + "total_bytes": 1172, + "triangle_records_bytes": 144, + "vertex_normals_bytes": 0, + "vertices_bytes": 144 + }, + "lights": 1, + "primvar_tables_bytes": 0, + "strand_tables_bytes": 0, + "top_level": { + "cubic_curve_spans": 0, + "curve_segments": 0, + "cylinders": 0, + "disks": 0, + "instances": 0, + "spheres": 1, + "triangles": 6 + }, + "unique": { + "cubic_curve_spans": 0, + "curve_segments": 0, + "cylinders": 0, + "disks": 0, + "instances": 0, + "spheres": 1, + "triangles": 6 + }, + "volumes": 0 + }, + "crust_version": "0.8.0", + "denied": [], + "effective_settings": [ + { + "flag": "-s", + "name": "samples_per_pixel", + "usd_attribute": "crust:samplesPerPixel", + "value": "64" + }, + { + "flag": null, + "name": "max_depth", + "usd_attribute": "crust:maxDepth", + "value": "8" + }, + { + "flag": "--strategy", + "name": "sampling_strategy", + "usd_attribute": "crust:samplingStrategy", + "value": "power" + }, + { + "flag": "--light-selection", + "name": "light_selection", + "usd_attribute": "crust:lightSelection", + "value": "power" + }, + { + "flag": "--light-samples", + "name": "light_samples", + "usd_attribute": "crust:lightSamples", + "value": "1" + }, + { + "flag": "--light-samples-indirect", + "name": "light_samples_indirect", + "usd_attribute": "crust:lightSamplesIndirect", + "value": "1" + }, + { + "flag": "--indirect-clamp", + "name": "indirect_clamp", + "usd_attribute": "crust:indirectClamp", + "value": "10" + }, + { + "flag": null, + "name": "exposure_scale", + "usd_attribute": null, + "value": "1" + }, + { + "flag": "--filter", + "name": "pixel_filter", + "usd_attribute": "crust:pixelFilter", + "value": "triangle" + }, + { + "flag": "--filter-radius", + "name": "pixel_filter_radius", + "usd_attribute": "crust:pixelFilterRadius", + "value": "1" + }, + { + "flag": "--sampler", + "name": "sampler", + "usd_attribute": "crust:sampler", + "value": "sobol" + }, + { + "flag": null, + "name": "path_guiding", + "usd_attribute": "crust:pathGuiding", + "value": "false" + }, + { + "flag": "--variance-threshold", + "name": "variance_threshold", + "usd_attribute": "crust:varianceThreshold", + "value": "0.05" + }, + { + "flag": "--min-samples", + "name": "min_samples_per_pixel", + "usd_attribute": "crust:minSamplesPerPixel", + "value": "32" + }, + { + "flag": "--neighbour-tolerance", + "name": "adaptive_neighbour_tolerance", + "usd_attribute": "crust:adaptiveNeighbourTolerance", + "value": "1" + }, + { + "flag": "--subdiv-level", + "name": "subdivision_level", + "usd_attribute": "crust:subdivisionLevel", + "value": "stage" + }, + { + "flag": "--subdiv-edge-length", + "name": "subdivision_edge_length", + "usd_attribute": "crust:subdivisionEdgeLength", + "value": "stage" + }, + { + "flag": "--auto-tx", + "name": "auto_tx", + "usd_attribute": null, + "value": "false" + } + ], + "findings": [], + "format": "crust-check/2", + "pass": null, + "precomp": null, + "products": [ + { + "channels": [ + "R", + "G", + "B" + ], + "file": "output.exr", + "prim": null + } + ], + "scene": { + "camera": "/World/ShotCam", + "frame": null, + "path": "$ROOT/samples/thin_window.usda", + "region": null, + "resolution": [ + 480, + 270 + ] + }, + "settings": "/Render/settings", + "warnings": [] +} diff --git a/crates/crust-core/tests/data/import_baselines/check/usdlux.usda.json b/crates/crust-core/tests/data/import_baselines/check/usdlux.usda.json new file mode 100644 index 000000000..f63bf39b5 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/check/usdlux.usda.json @@ -0,0 +1,183 @@ +{ + "counts": { + "geometries": 11, + "kernel_memory": { + "bvh_nodes_bytes": 640, + "cubic_spans_bytes": 0, + "geometry_tables_bytes": 144, + "indices_bytes": 32, + "instances_bytes": 96, + "lanes": 16, + "lanes_filled": 8, + "leaves_bytes": 160, + "packets_bytes": 768, + "packets_indexed_bytes": 0, + "prim_nodes_bytes": 448, + "total_bytes": 2672, + "triangle_records_bytes": 192, + "vertex_normals_bytes": 0, + "vertices_bytes": 192 + }, + "lights": 7, + "primvar_tables_bytes": 0, + "strand_tables_bytes": 0, + "top_level": { + "cubic_curve_spans": 0, + "curve_segments": 0, + "cylinders": 1, + "disks": 1, + "instances": 1, + "spheres": 4, + "triangles": 8 + }, + "unique": { + "cubic_curve_spans": 0, + "curve_segments": 0, + "cylinders": 1, + "disks": 1, + "instances": 1, + "spheres": 5, + "triangles": 8 + }, + "volumes": 0 + }, + "crust_version": "0.8.0", + "denied": [], + "effective_settings": [ + { + "flag": "-s", + "name": "samples_per_pixel", + "usd_attribute": "crust:samplesPerPixel", + "value": "256" + }, + { + "flag": null, + "name": "max_depth", + "usd_attribute": "crust:maxDepth", + "value": "6" + }, + { + "flag": "--strategy", + "name": "sampling_strategy", + "usd_attribute": "crust:samplingStrategy", + "value": "power" + }, + { + "flag": "--light-selection", + "name": "light_selection", + "usd_attribute": "crust:lightSelection", + "value": "power" + }, + { + "flag": "--light-samples", + "name": "light_samples", + "usd_attribute": "crust:lightSamples", + "value": "1" + }, + { + "flag": "--light-samples-indirect", + "name": "light_samples_indirect", + "usd_attribute": "crust:lightSamplesIndirect", + "value": "1" + }, + { + "flag": "--indirect-clamp", + "name": "indirect_clamp", + "usd_attribute": "crust:indirectClamp", + "value": "10" + }, + { + "flag": null, + "name": "exposure_scale", + "usd_attribute": null, + "value": "1" + }, + { + "flag": "--filter", + "name": "pixel_filter", + "usd_attribute": "crust:pixelFilter", + "value": "triangle" + }, + { + "flag": "--filter-radius", + "name": "pixel_filter_radius", + "usd_attribute": "crust:pixelFilterRadius", + "value": "1" + }, + { + "flag": "--sampler", + "name": "sampler", + "usd_attribute": "crust:sampler", + "value": "sobol" + }, + { + "flag": null, + "name": "path_guiding", + "usd_attribute": "crust:pathGuiding", + "value": "false" + }, + { + "flag": "--variance-threshold", + "name": "variance_threshold", + "usd_attribute": "crust:varianceThreshold", + "value": "0.02" + }, + { + "flag": "--min-samples", + "name": "min_samples_per_pixel", + "usd_attribute": "crust:minSamplesPerPixel", + "value": "32" + }, + { + "flag": "--neighbour-tolerance", + "name": "adaptive_neighbour_tolerance", + "usd_attribute": "crust:adaptiveNeighbourTolerance", + "value": "1" + }, + { + "flag": "--subdiv-level", + "name": "subdivision_level", + "usd_attribute": "crust:subdivisionLevel", + "value": "stage" + }, + { + "flag": "--subdiv-edge-length", + "name": "subdivision_edge_length", + "usd_attribute": "crust:subdivisionEdgeLength", + "value": "stage" + }, + { + "flag": "--auto-tx", + "name": "auto_tx", + "usd_attribute": null, + "value": "false" + } + ], + "findings": [], + "format": "crust-check/2", + "pass": null, + "precomp": null, + "products": [ + { + "channels": [ + "R", + "G", + "B" + ], + "file": "output.exr", + "prim": null + } + ], + "scene": { + "camera": "/World/Cam", + "frame": null, + "path": "$ROOT/samples/usdlux.usda", + "region": null, + "resolution": [ + 640, + 360 + ] + }, + "settings": "/Render/settings", + "warnings": [] +} diff --git a/crates/crust-core/tests/data/import_baselines/check/usdpreview_textured.usda.json b/crates/crust-core/tests/data/import_baselines/check/usdpreview_textured.usda.json new file mode 100644 index 000000000..a2c9eb361 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/check/usdpreview_textured.usda.json @@ -0,0 +1,197 @@ +{ + "counts": { + "geometries": 5, + "kernel_memory": { + "bvh_nodes_bytes": 128, + "cubic_spans_bytes": 0, + "geometry_tables_bytes": 60, + "indices_bytes": 0, + "instances_bytes": 0, + "lanes": 12, + "lanes_filled": 10, + "leaves_bytes": 48, + "packets_bytes": 576, + "packets_indexed_bytes": 0, + "prim_nodes_bytes": 0, + "total_bytes": 1292, + "triangle_records_bytes": 240, + "vertex_normals_bytes": 0, + "vertices_bytes": 240 + }, + "lights": 2, + "primvar_tables_bytes": 0, + "strand_tables_bytes": 0, + "top_level": { + "cubic_curve_spans": 0, + "curve_segments": 0, + "cylinders": 0, + "disks": 0, + "instances": 0, + "spheres": 0, + "triangles": 10 + }, + "unique": { + "cubic_curve_spans": 0, + "curve_segments": 0, + "cylinders": 0, + "disks": 0, + "instances": 0, + "spheres": 0, + "triangles": 10 + }, + "volumes": 0 + }, + "crust_version": "0.8.0", + "denied": [], + "effective_settings": [ + { + "flag": "-s", + "name": "samples_per_pixel", + "usd_attribute": "crust:samplesPerPixel", + "value": "64" + }, + { + "flag": null, + "name": "max_depth", + "usd_attribute": "crust:maxDepth", + "value": "8" + }, + { + "flag": "--strategy", + "name": "sampling_strategy", + "usd_attribute": "crust:samplingStrategy", + "value": "power" + }, + { + "flag": "--light-selection", + "name": "light_selection", + "usd_attribute": "crust:lightSelection", + "value": "power" + }, + { + "flag": "--light-samples", + "name": "light_samples", + "usd_attribute": "crust:lightSamples", + "value": "1" + }, + { + "flag": "--light-samples-indirect", + "name": "light_samples_indirect", + "usd_attribute": "crust:lightSamplesIndirect", + "value": "1" + }, + { + "flag": "--indirect-clamp", + "name": "indirect_clamp", + "usd_attribute": "crust:indirectClamp", + "value": "10" + }, + { + "flag": null, + "name": "exposure_scale", + "usd_attribute": null, + "value": "1" + }, + { + "flag": "--filter", + "name": "pixel_filter", + "usd_attribute": "crust:pixelFilter", + "value": "triangle" + }, + { + "flag": "--filter-radius", + "name": "pixel_filter_radius", + "usd_attribute": "crust:pixelFilterRadius", + "value": "1" + }, + { + "flag": "--sampler", + "name": "sampler", + "usd_attribute": "crust:sampler", + "value": "sobol" + }, + { + "flag": null, + "name": "path_guiding", + "usd_attribute": "crust:pathGuiding", + "value": "false" + }, + { + "flag": "--variance-threshold", + "name": "variance_threshold", + "usd_attribute": "crust:varianceThreshold", + "value": "0.05" + }, + { + "flag": "--min-samples", + "name": "min_samples_per_pixel", + "usd_attribute": "crust:minSamplesPerPixel", + "value": "32" + }, + { + "flag": "--neighbour-tolerance", + "name": "adaptive_neighbour_tolerance", + "usd_attribute": "crust:adaptiveNeighbourTolerance", + "value": "1" + }, + { + "flag": "--subdiv-level", + "name": "subdivision_level", + "usd_attribute": "crust:subdivisionLevel", + "value": "stage" + }, + { + "flag": "--subdiv-edge-length", + "name": "subdivision_edge_length", + "usd_attribute": "crust:subdivisionEdgeLength", + "value": "stage" + }, + { + "flag": "--auto-tx", + "name": "auto_tx", + "usd_attribute": null, + "value": "false" + } + ], + "findings": [ + { + "action": { + "flag": "--auto-tx", + "usd_attribute": null, + "value": "on" + }, + "evidence": { + "textures": 5.0 + }, + "id": "textures_without_tx", + "kind": "time", + "summary": "5 UV texture(s) have no .tx beside them: each is decoded whole at import and held resident instead of streamed" + } + ], + "format": "crust-check/2", + "pass": null, + "precomp": null, + "products": [ + { + "channels": [ + "R", + "G", + "B" + ], + "file": "output.exr", + "prim": null + } + ], + "scene": { + "camera": "/World/ShotCam", + "frame": null, + "path": "$ROOT/samples/usdpreview_textured.usda", + "region": null, + "resolution": [ + 640, + 360 + ] + }, + "settings": "/Render/settings", + "warnings": [] +} diff --git a/crates/crust-core/tests/data/import_baselines/check/veach_mis.usda.json b/crates/crust-core/tests/data/import_baselines/check/veach_mis.usda.json new file mode 100644 index 000000000..23712d26b --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/check/veach_mis.usda.json @@ -0,0 +1,183 @@ +{ + "counts": { + "geometries": 10, + "kernel_memory": { + "bvh_nodes_bytes": 256, + "cubic_spans_bytes": 0, + "geometry_tables_bytes": 120, + "indices_bytes": 16, + "instances_bytes": 0, + "lanes": 16, + "lanes_filled": 12, + "leaves_bytes": 80, + "packets_bytes": 768, + "packets_indexed_bytes": 0, + "prim_nodes_bytes": 256, + "total_bytes": 2072, + "triangle_records_bytes": 288, + "vertex_normals_bytes": 0, + "vertices_bytes": 288 + }, + "lights": 4, + "primvar_tables_bytes": 0, + "strand_tables_bytes": 0, + "top_level": { + "cubic_curve_spans": 0, + "curve_segments": 0, + "cylinders": 0, + "disks": 0, + "instances": 0, + "spheres": 4, + "triangles": 12 + }, + "unique": { + "cubic_curve_spans": 0, + "curve_segments": 0, + "cylinders": 0, + "disks": 0, + "instances": 0, + "spheres": 4, + "triangles": 12 + }, + "volumes": 0 + }, + "crust_version": "0.8.0", + "denied": [], + "effective_settings": [ + { + "flag": "-s", + "name": "samples_per_pixel", + "usd_attribute": "crust:samplesPerPixel", + "value": "128" + }, + { + "flag": null, + "name": "max_depth", + "usd_attribute": "crust:maxDepth", + "value": "8" + }, + { + "flag": "--strategy", + "name": "sampling_strategy", + "usd_attribute": "crust:samplingStrategy", + "value": "balance" + }, + { + "flag": "--light-selection", + "name": "light_selection", + "usd_attribute": "crust:lightSelection", + "value": "power" + }, + { + "flag": "--light-samples", + "name": "light_samples", + "usd_attribute": "crust:lightSamples", + "value": "1" + }, + { + "flag": "--light-samples-indirect", + "name": "light_samples_indirect", + "usd_attribute": "crust:lightSamplesIndirect", + "value": "1" + }, + { + "flag": "--indirect-clamp", + "name": "indirect_clamp", + "usd_attribute": "crust:indirectClamp", + "value": "10" + }, + { + "flag": null, + "name": "exposure_scale", + "usd_attribute": null, + "value": "1" + }, + { + "flag": "--filter", + "name": "pixel_filter", + "usd_attribute": "crust:pixelFilter", + "value": "triangle" + }, + { + "flag": "--filter-radius", + "name": "pixel_filter_radius", + "usd_attribute": "crust:pixelFilterRadius", + "value": "1" + }, + { + "flag": "--sampler", + "name": "sampler", + "usd_attribute": "crust:sampler", + "value": "sobol" + }, + { + "flag": null, + "name": "path_guiding", + "usd_attribute": "crust:pathGuiding", + "value": "false" + }, + { + "flag": "--variance-threshold", + "name": "variance_threshold", + "usd_attribute": "crust:varianceThreshold", + "value": "0" + }, + { + "flag": "--min-samples", + "name": "min_samples_per_pixel", + "usd_attribute": "crust:minSamplesPerPixel", + "value": "32" + }, + { + "flag": "--neighbour-tolerance", + "name": "adaptive_neighbour_tolerance", + "usd_attribute": "crust:adaptiveNeighbourTolerance", + "value": "1" + }, + { + "flag": "--subdiv-level", + "name": "subdivision_level", + "usd_attribute": "crust:subdivisionLevel", + "value": "stage" + }, + { + "flag": "--subdiv-edge-length", + "name": "subdivision_edge_length", + "usd_attribute": "crust:subdivisionEdgeLength", + "value": "stage" + }, + { + "flag": "--auto-tx", + "name": "auto_tx", + "usd_attribute": null, + "value": "false" + } + ], + "findings": [], + "format": "crust-check/2", + "pass": null, + "precomp": null, + "products": [ + { + "channels": [ + "R", + "G", + "B" + ], + "file": "output.exr", + "prim": null + } + ], + "scene": { + "camera": "/World/Cam", + "frame": null, + "path": "$ROOT/samples/veach_mis.usda", + "region": null, + "resolution": [ + 960, + 540 + ] + }, + "settings": "/Render/settings", + "warnings": [] +} diff --git a/crates/crust-core/tests/data/import_baselines/clean_usda-d4e60f418d0e5485-1.digest b/crates/crust-core/tests/data/import_baselines/clean_usda-d4e60f418d0e5485-1.digest new file mode 100644 index 000000000..ba2fcee2b --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/clean_usda-d4e60f418d0e5485-1.digest @@ -0,0 +1,16 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/World/cam") +camera: Camera { origin: Vec3A(0.0, 0.0, 0.0), lower_left_corner: Vec3A(-2.7183647, -1.5290802, -10.0), horizontal: Vec3A(5.4367294, 0.0, 0.0), vertical: Vec3A(0.0, 3.0581603, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: None +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 640, height: 360, region: PixelRect { x0: 0, y0: 0, x1: 640, y1: 360 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 50.0, aperture: [20.955, 15.2908], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 10.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/clean.usda"], invisible_overrides: Some(0) } +layer: $DIR/clean.usda +lights: 0 +volumes: 0 +world: 0 geometries, PrimitiveBreakdown { triangles: 0, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 0, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/World/cam"), cameras: ["/World/cam"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/World/cam"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/clean_usda-d4e60f418d0e5485-1.image b/crates/crust-core/tests/data/import_baselines/clean_usda-d4e60f418d0e5485-1.image new file mode 100644 index 000000000..c734c5b1d --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/clean_usda-d4e60f418d0e5485-1.image @@ -0,0 +1 @@ +640x360 16spp clamp-off a04a09c0d4b5e325 diff --git a/crates/crust-core/tests/data/import_baselines/clear_usda-487518c3a2bde507-1.digest b/crates/crust-core/tests/data/import_baselines/clear_usda-487518c3a2bde507-1.digest new file mode 100644 index 000000000..13b103bd9 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/clear_usda-487518c3a2bde507-1.digest @@ -0,0 +1,26 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/World/cam") +camera: Camera { origin: Vec3A(0.0, 0.0, 10.0), lower_left_corner: Vec3A(-2.0955, -1.5716249, 0.0), horizontal: Vec3A(4.191, 0.0, 0.0), vertical: Vec3A(0.0, 3.1432498, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: Some("/Render/settings") +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 48, height: 36, region: PixelRect { x0: 0, y0: 0, x1: 48, y1: 36 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [AovProduct { prim_path: "/Render/p", name: "p.exr", vars: [AovVar { prim_path: "/Render/P", name: "P", channel_prefix: None, source: P, components: 3, precision: Float, accumulation: Closest, clear: 0.0, expression: None, raw: false, variance: false }, AovVar { prim_path: "/Render/Pref", name: "Pref", channel_prefix: None, source: Primvar(PrimvarSource { index: 0, components: 3, role: Vector }), components: 3, precision: Float, accumulation: Closest, clear: -7.0, expression: None, raw: false, variance: false }], attributes: [] }], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 50.0, aperture: [20.955, 15.2908], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 10.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/clear.usda"], invisible_overrides: Some(0) } +layer: $DIR/clear.usda +lights: 1 +light 0: dome name Some("/World/dome") lpe None pmf 1.0 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 2 geometries, PrimitiveBreakdown { triangles: 4, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 4, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:694d4e60220ed61b camera=2:694d4e60220ed61b shadow=2:694d4e60220ed61b indirect=2:694d4e60220ed61b +geom 1: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov Some((Some(0), false)) swapped false curves false scale 1.0 motion [] pieces all=2:efd96df60225be8b camera=2:efd96df60225be8b shadow=2:efd96df60225be8b indirect=2:efd96df60225be8b +provenance light /World/dome: LightOrigin { index: 0, geoms: 2..2 } +provenance geometry 0..1: /World/without +provenance geometry 1..2: /World/with +provenance mesh: MeshOrigin { geom_id: 0, slot: 0, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 1, slot: 1, baked: true, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 8133482610442327411, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 1: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 9785711415941569612, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/World/cam"), cameras: ["/World/cam"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [("rest", 3)], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/World/cam"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/clear_usda-487518c3a2bde507-1.image b/crates/crust-core/tests/data/import_baselines/clear_usda-487518c3a2bde507-1.image new file mode 100644 index 000000000..53378165f --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/clear_usda-487518c3a2bde507-1.image @@ -0,0 +1 @@ +48x36 16spp clamp-off d0cf0590b1be3709 diff --git a/crates/crust-core/tests/data/import_baselines/closest_usda-b1b06704b4564b8c-1.digest b/crates/crust-core/tests/data/import_baselines/closest_usda-b1b06704b4564b8c-1.digest new file mode 100644 index 000000000..d67788a54 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/closest_usda-b1b06704b4564b8c-1.digest @@ -0,0 +1,26 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/World/cam") +camera: Camera { origin: Vec3A(0.0, 0.0, 0.0), lower_left_corner: Vec3A(-5.0, -3.75, -10.0), horizontal: Vec3A(10.0, 0.0, 0.0), vertical: Vec3A(0.0, 7.5, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: Some("/Render/settings") +settings: RenderSettings { samples_per_pixel: 16, max_depth: 2, width: 32, height: 24, region: PixelRect { x0: 0, y0: 0, x1: 32, y1: 24 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [AovProduct { prim_path: "/Render/p", name: "p.exr", vars: [AovVar { prim_path: "/Render/C", name: "C", channel_prefix: None, source: Color, components: 3, precision: Float, accumulation: Filtered, clear: 0.0, expression: None, raw: false, variance: false }, AovVar { prim_path: "/Render/matte", name: "matte", channel_prefix: None, source: Primvar(PrimvarSource { index: 0, components: 1, role: Float }), components: 1, precision: Float, accumulation: Filtered, clear: 0.0, expression: None, raw: false, variance: false }, AovVar { prim_path: "/Render/depth", name: "depth", channel_prefix: None, source: Depth, components: 1, precision: Float, accumulation: Closest, clear: inf, expression: None, raw: false, variance: false }, AovVar { prim_path: "/Render/depth_filtered", name: "depth_filtered", channel_prefix: None, source: Depth, components: 1, precision: Float, accumulation: Filtered, clear: inf, expression: None, raw: false, variance: false }, AovVar { prim_path: "/Render/variance", name: "variance", channel_prefix: None, source: Variance, components: 1, precision: Float, accumulation: Filtered, clear: 0.0, expression: None, raw: false, variance: false }, AovVar { prim_path: "/Render/z_out", name: "z_out", channel_prefix: None, source: Filter(FilterSource { display: false, filter: 0, output: 0, components: 1, radiance: false }), components: 1, precision: Float, accumulation: Filtered, clear: 0.0, expression: None, raw: false, variance: false }], attributes: [] }], precomp: Some(Precomp { sample_filters: ["/Render/z"], display_filters: [], display: "beauty" }) } +pass: None +source: Source { lens: Some(Lens { focal_length: 24.0, aperture: [24.0, 18.0], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 10.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/closest.usda"], invisible_overrides: Some(0) } +layer: $DIR/closest.usda +lights: 1 +light 0: dome name Some("/World/sky") lpe None pmf 1.0 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 2 geometries, PrimitiveBreakdown { triangles: 4, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 4, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov Some((Some(0), false)) swapped false curves false scale 1.0 motion [] pieces all=2:2a13523c8e09c13d camera=2:2a13523c8e09c13d shadow=2:2a13523c8e09c13d indirect=2:2a13523c8e09c13d +geom 1: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:31db52e4afd4a225 camera=2:31db52e4afd4a225 shadow=2:31db52e4afd4a225 indirect=2:31db52e4afd4a225 +provenance light /World/sky: LightOrigin { index: 0, geoms: 0..0 } +provenance geometry 0..1: /World/Card +provenance geometry 1..2: /World/Wall +provenance mesh: MeshOrigin { geom_id: 0, slot: 0, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 1, slot: 1, baked: true, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 3430351340666728903, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 1: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 13118596165941616386, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: true, working: None, camera: Some("/World/cam"), cameras: ["/World/cam"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [("matte", 1)], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/World/cam"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/closest_usda-b1b06704b4564b8c-1.image b/crates/crust-core/tests/data/import_baselines/closest_usda-b1b06704b4564b8c-1.image new file mode 100644 index 000000000..f08c49d36 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/closest_usda-b1b06704b4564b8c-1.image @@ -0,0 +1 @@ +32x24 16spp clamp-off e72b7b7cff87e77d diff --git a/crates/crust-core/tests/data/import_baselines/color_space_api_usda-7258fb7a16ddde2f-1.digest b/crates/crust-core/tests/data/import_baselines/color_space_api_usda-7258fb7a16ddde2f-1.digest new file mode 100644 index 000000000..2c6d2e26b --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/color_space_api_usda-7258fb7a16ddde2f-1.digest @@ -0,0 +1,25 @@ +time: None +working space: ACEScg +camera path: None +camera: Camera { origin: Vec3A(15.0, 3.0, 3.0), lower_left_corner: Vec3A(4.8863316, -0.044797063, 4.174048), horizontal: Vec3A(1.2295314, 0.0, -6.147657), vertical: Vec3A(-0.44830504, 3.4967792, -0.08966101), u: Vec3A(0.19611613, 0.0, -0.9805807), v: Vec3A(-0.1271232, 0.991561, -0.02542464), lens_radius: 0.05, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: Some("/Render/settings") +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 640, height: 360, region: PixelRect { x0: 0, y0: 0, x1: 640, y1: 360 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: None, depth_of_field: true, motion_blur: false, layer_stack: ["$DIR/color_space_api.usda"], invisible_overrides: Some(0) } +layer: $DIR/color_space_api.usda +warning: Warning { code: CameraMissing, kind: Skipped, count: 1, prims: [], message: "USD stage has no UsdGeomCamera — falling back to world::get_settings camera" } +lights: 2 +light 0: area name Some("/World/Rec709Rig/Inner/Overrides") lpe None pmf 0.5 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 1: area name Some("/World/Rec709Rig/Inner/Inherits") lpe None pmf 0.5 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 2 geometries, PrimitiveBreakdown { triangles: 0, spheres: 2, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 0, spheres: 2, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +geom 0: material #0 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:984632b55acb5495 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=1:984632b55acb5495 +geom 1: material #1 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:984632b55acb5495 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=1:984632b55acb5495 +provenance light /World/Rec709Rig/Inner/Inherits: LightOrigin { index: 1, geoms: 1..2 } +provenance light /World/Rec709Rig/Inner/Overrides: LightOrigin { index: 0, geoms: 0..1 } +provenance geometry 0..1: /World/Rec709Rig/Inner/Overrides +provenance geometry 1..2: /World/Rec709Rig/Inner/Inherits +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: None, cameras: [], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: None, offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("ACEScg") diff --git a/crates/crust-core/tests/data/import_baselines/color_space_api_usda-7258fb7a16ddde2f-1.image b/crates/crust-core/tests/data/import_baselines/color_space_api_usda-7258fb7a16ddde2f-1.image new file mode 100644 index 000000000..c734c5b1d --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/color_space_api_usda-7258fb7a16ddde2f-1.image @@ -0,0 +1 @@ +640x360 16spp clamp-off a04a09c0d4b5e325 diff --git a/crates/crust-core/tests/data/import_baselines/color_temperature_off_usda-d2963845fd5e72c4-1.digest b/crates/crust-core/tests/data/import_baselines/color_temperature_off_usda-d2963845fd5e72c4-1.digest new file mode 100644 index 000000000..7dfc2e1df --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/color_temperature_off_usda-d2963845fd5e72c4-1.digest @@ -0,0 +1,21 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: None +camera: Camera { origin: Vec3A(15.0, 3.0, 3.0), lower_left_corner: Vec3A(4.8863316, -0.044797063, 4.174048), horizontal: Vec3A(1.2295314, 0.0, -6.147657), vertical: Vec3A(-0.44830504, 3.4967792, -0.08966101), u: Vec3A(0.19611613, 0.0, -0.9805807), v: Vec3A(-0.1271232, 0.991561, -0.02542464), lens_radius: 0.05, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: None +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 640, height: 360, region: PixelRect { x0: 0, y0: 0, x1: 640, y1: 360 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: None, depth_of_field: true, motion_blur: false, layer_stack: ["$DIR/color_temperature_off.usda"], invisible_overrides: Some(0) } +layer: $DIR/color_temperature_off.usda +warning: Warning { code: CameraMissing, kind: Skipped, count: 1, prims: [], message: "USD stage has no UsdGeomCamera — falling back to world::get_settings camera" } +lights: 1 +light 0: area name Some("/World/S") lpe None pmf 1.0 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 1 geometries, PrimitiveBreakdown { triangles: 0, spheres: 1, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 0, spheres: 1, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +geom 0: material #0 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:984632b55acb5495 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=1:984632b55acb5495 +provenance light /World/S: LightOrigin { index: 0, geoms: 0..1 } +provenance geometry 0..1: /World/S +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: None, cameras: [], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: None, offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/color_temperature_off_usda-d2963845fd5e72c4-1.image b/crates/crust-core/tests/data/import_baselines/color_temperature_off_usda-d2963845fd5e72c4-1.image new file mode 100644 index 000000000..c734c5b1d --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/color_temperature_off_usda-d2963845fd5e72c4-1.image @@ -0,0 +1 @@ +640x360 16spp clamp-off a04a09c0d4b5e325 diff --git a/crates/crust-core/tests/data/import_baselines/color_temperature_usda-a7d9f5fccba89fff-1.digest b/crates/crust-core/tests/data/import_baselines/color_temperature_usda-a7d9f5fccba89fff-1.digest new file mode 100644 index 000000000..1f3639200 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/color_temperature_usda-a7d9f5fccba89fff-1.digest @@ -0,0 +1,21 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: None +camera: Camera { origin: Vec3A(15.0, 3.0, 3.0), lower_left_corner: Vec3A(4.8863316, -0.044797063, 4.174048), horizontal: Vec3A(1.2295314, 0.0, -6.147657), vertical: Vec3A(-0.44830504, 3.4967792, -0.08966101), u: Vec3A(0.19611613, 0.0, -0.9805807), v: Vec3A(-0.1271232, 0.991561, -0.02542464), lens_radius: 0.05, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: None +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 640, height: 360, region: PixelRect { x0: 0, y0: 0, x1: 640, y1: 360 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: None, depth_of_field: true, motion_blur: false, layer_stack: ["$DIR/color_temperature.usda"], invisible_overrides: Some(0) } +layer: $DIR/color_temperature.usda +warning: Warning { code: CameraMissing, kind: Skipped, count: 1, prims: [], message: "USD stage has no UsdGeomCamera — falling back to world::get_settings camera" } +lights: 1 +light 0: area name Some("/World/S") lpe None pmf 1.0 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 1 geometries, PrimitiveBreakdown { triangles: 0, spheres: 1, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 0, spheres: 1, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +geom 0: material #0 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:984632b55acb5495 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=1:984632b55acb5495 +provenance light /World/S: LightOrigin { index: 0, geoms: 0..1 } +provenance geometry 0..1: /World/S +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: None, cameras: [], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: None, offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/color_temperature_usda-a7d9f5fccba89fff-1.image b/crates/crust-core/tests/data/import_baselines/color_temperature_usda-a7d9f5fccba89fff-1.image new file mode 100644 index 000000000..c734c5b1d --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/color_temperature_usda-a7d9f5fccba89fff-1.image @@ -0,0 +1 @@ +640x360 16spp clamp-off a04a09c0d4b5e325 diff --git a/crates/crust-core/tests/data/import_baselines/compensation_alias_usda-ea168514e7b00460-1.digest b/crates/crust-core/tests/data/import_baselines/compensation_alias_usda-ea168514e7b00460-1.digest new file mode 100644 index 000000000..446d7527d --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/compensation_alias_usda-ea168514e7b00460-1.digest @@ -0,0 +1,16 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/cam") +camera: Camera { origin: Vec3A(0.0, 0.0, 0.0), lower_left_corner: Vec3A(-2.7183647, -1.5290802, -10.0), horizontal: Vec3A(5.4367294, 0.0, 0.0), vertical: Vec3A(0.0, 3.0581603, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: Some("/Render/settings") +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 640, height: 360, region: PixelRect { x0: 0, y0: 0, x1: 640, y1: 360 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 4.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 50.0, aperture: [20.955, 15.2908], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 10.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/compensation_alias.usda"], invisible_overrides: Some(0) } +layer: $DIR/compensation_alias.usda +lights: 0 +volumes: 0 +world: 0 geometries, PrimitiveBreakdown { triangles: 0, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 0, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/cam"), cameras: ["/cam"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/cam"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/compensation_alias_usda-ea168514e7b00460-1.image b/crates/crust-core/tests/data/import_baselines/compensation_alias_usda-ea168514e7b00460-1.image new file mode 100644 index 000000000..c734c5b1d --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/compensation_alias_usda-ea168514e7b00460-1.image @@ -0,0 +1 @@ +640x360 16spp clamp-off a04a09c0d4b5e325 diff --git a/crates/crust-core/tests/data/import_baselines/compensation_off_usda-37a366efa8d50980-1.digest b/crates/crust-core/tests/data/import_baselines/compensation_off_usda-37a366efa8d50980-1.digest new file mode 100644 index 000000000..9821654eb --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/compensation_off_usda-37a366efa8d50980-1.digest @@ -0,0 +1,16 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/cam") +camera: Camera { origin: Vec3A(0.0, 0.0, 0.0), lower_left_corner: Vec3A(-2.7183647, -1.5290802, -10.0), horizontal: Vec3A(5.4367294, 0.0, 0.0), vertical: Vec3A(0.0, 3.0581603, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: Some("/Render/settings") +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 640, height: 360, region: PixelRect { x0: 0, y0: 0, x1: 640, y1: 360 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 50.0, aperture: [20.955, 15.2908], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 10.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/compensation_off.usda"], invisible_overrides: Some(0) } +layer: $DIR/compensation_off.usda +lights: 0 +volumes: 0 +world: 0 geometries, PrimitiveBreakdown { triangles: 0, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 0, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/cam"), cameras: ["/cam"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/cam"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/compensation_off_usda-37a366efa8d50980-1.image b/crates/crust-core/tests/data/import_baselines/compensation_off_usda-37a366efa8d50980-1.image new file mode 100644 index 000000000..c734c5b1d --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/compensation_off_usda-37a366efa8d50980-1.image @@ -0,0 +1 @@ +640x360 16spp clamp-off a04a09c0d4b5e325 diff --git a/crates/crust-core/tests/data/import_baselines/constant_cage_usda-6838009dc4d51123-1.digest b/crates/crust-core/tests/data/import_baselines/constant_cage_usda-6838009dc4d51123-1.digest new file mode 100644 index 000000000..a934816be --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/constant_cage_usda-6838009dc4d51123-1.digest @@ -0,0 +1,22 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: None +camera: Camera { origin: Vec3A(15.0, 3.0, 3.0), lower_left_corner: Vec3A(4.8863316, -0.044797063, 4.174048), horizontal: Vec3A(1.2295314, 0.0, -6.147657), vertical: Vec3A(-0.44830504, 3.4967792, -0.08966101), u: Vec3A(0.19611613, 0.0, -0.9805807), v: Vec3A(-0.1271232, 0.991561, -0.02542464), lens_radius: 0.05, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: None +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 640, height: 360, region: PixelRect { x0: 0, y0: 0, x1: 640, y1: 360 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: None, depth_of_field: true, motion_blur: false, layer_stack: ["$DIR/constant_cage.usda"], invisible_overrides: Some(0) } +layer: $DIR/constant_cage.usda +warning: Warning { code: CameraMissing, kind: Skipped, count: 1, prims: [], message: "USD stage has no UsdGeomCamera — falling back to world::get_settings camera" } +lights: 0 +volumes: 0 +world: 1 geometries, PrimitiveBreakdown { triangles: 2, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 2, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:1cb3e7b03a982bc5 camera=2:1cb3e7b03a982bc5 shadow=2:1cb3e7b03a982bc5 indirect=2:1cb3e7b03a982bc5 +provenance material /World/Up: MaterialOrigin { slots: [0], displaced: true } +provenance geometry 0..1: /World/Ground +provenance mesh: MeshOrigin { geom_id: 0, slot: 0, baked: true, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 17961869511521861346, n_points: 4, n_indices: 4, n_uvs: None, smooth: true, material: 0 }), placements: 1, shared: false, displaced: true } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: Some(0), subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: None, cameras: [], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: None, offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/constant_cage_usda-6838009dc4d51123-1.image b/crates/crust-core/tests/data/import_baselines/constant_cage_usda-6838009dc4d51123-1.image new file mode 100644 index 000000000..c734c5b1d --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/constant_cage_usda-6838009dc4d51123-1.image @@ -0,0 +1 @@ +640x360 16spp clamp-off a04a09c0d4b5e325 diff --git a/crates/crust-core/tests/data/import_baselines/constant_none_off_usda-4da7234b198fc34c-1.digest b/crates/crust-core/tests/data/import_baselines/constant_none_off_usda-4da7234b198fc34c-1.digest new file mode 100644 index 000000000..c4a4a5af8 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/constant_none_off_usda-4da7234b198fc34c-1.digest @@ -0,0 +1,22 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: None +camera: Camera { origin: Vec3A(15.0, 3.0, 3.0), lower_left_corner: Vec3A(4.8863316, -0.044797063, 4.174048), horizontal: Vec3A(1.2295314, 0.0, -6.147657), vertical: Vec3A(-0.44830504, 3.4967792, -0.08966101), u: Vec3A(0.19611613, 0.0, -0.9805807), v: Vec3A(-0.1271232, 0.991561, -0.02542464), lens_radius: 0.05, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: None +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 640, height: 360, region: PixelRect { x0: 0, y0: 0, x1: 640, y1: 360 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: None, depth_of_field: true, motion_blur: false, layer_stack: ["$DIR/constant_none_off.usda"], invisible_overrides: Some(0) } +layer: $DIR/constant_none_off.usda +warning: Warning { code: CameraMissing, kind: Skipped, count: 1, prims: [], message: "USD stage has no UsdGeomCamera — falling back to world::get_settings camera" } +lights: 0 +volumes: 0 +world: 1 geometries, PrimitiveBreakdown { triangles: 2, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 2, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:58d9d066c6f09ee5 camera=2:58d9d066c6f09ee5 shadow=2:58d9d066c6f09ee5 indirect=2:58d9d066c6f09ee5 +provenance material /World/Flat: MaterialOrigin { slots: [0], displaced: false } +provenance geometry 0..1: /World/Ground +provenance mesh: MeshOrigin { geom_id: 0, slot: 0, baked: true, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 17961869511521861346, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: Some(2), subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 2, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: None, cameras: [], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: None, offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/constant_none_off_usda-4da7234b198fc34c-1.image b/crates/crust-core/tests/data/import_baselines/constant_none_off_usda-4da7234b198fc34c-1.image new file mode 100644 index 000000000..c734c5b1d --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/constant_none_off_usda-4da7234b198fc34c-1.image @@ -0,0 +1 @@ +640x360 16spp clamp-off a04a09c0d4b5e325 diff --git a/crates/crust-core/tests/data/import_baselines/constant_none_usda-3f38201b0c964211-1.digest b/crates/crust-core/tests/data/import_baselines/constant_none_usda-3f38201b0c964211-1.digest new file mode 100644 index 000000000..ebe84066f --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/constant_none_usda-3f38201b0c964211-1.digest @@ -0,0 +1,22 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: None +camera: Camera { origin: Vec3A(15.0, 3.0, 3.0), lower_left_corner: Vec3A(4.8863316, -0.044797063, 4.174048), horizontal: Vec3A(1.2295314, 0.0, -6.147657), vertical: Vec3A(-0.44830504, 3.4967792, -0.08966101), u: Vec3A(0.19611613, 0.0, -0.9805807), v: Vec3A(-0.1271232, 0.991561, -0.02542464), lens_radius: 0.05, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: None +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 640, height: 360, region: PixelRect { x0: 0, y0: 0, x1: 640, y1: 360 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: None, depth_of_field: true, motion_blur: false, layer_stack: ["$DIR/constant_none.usda"], invisible_overrides: Some(0) } +layer: $DIR/constant_none.usda +warning: Warning { code: CameraMissing, kind: Skipped, count: 1, prims: [], message: "USD stage has no UsdGeomCamera — falling back to world::get_settings camera" } +lights: 0 +volumes: 0 +world: 1 geometries, PrimitiveBreakdown { triangles: 32, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 32, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=32:93e9e3bbfdd5e005 camera=32:93e9e3bbfdd5e005 shadow=32:93e9e3bbfdd5e005 indirect=32:93e9e3bbfdd5e005 +provenance material /World/Up: MaterialOrigin { slots: [0], displaced: true } +provenance geometry 0..1: /World/Ground +provenance mesh: MeshOrigin { geom_id: 0, slot: 0, baked: true, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 8084853767877771290, n_points: 25, n_indices: 64, n_uvs: None, smooth: true, material: 0 }), placements: 1, shared: false, displaced: true } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: Some(2), subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 2, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: None, cameras: [], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: None, offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/constant_none_usda-3f38201b0c964211-1.image b/crates/crust-core/tests/data/import_baselines/constant_none_usda-3f38201b0c964211-1.image new file mode 100644 index 000000000..c734c5b1d --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/constant_none_usda-3f38201b0c964211-1.image @@ -0,0 +1 @@ +640x360 16spp clamp-off a04a09c0d4b5e325 diff --git a/crates/crust-core/tests/data/import_baselines/convolve_usda-ae27710a0c217615-1.digest b/crates/crust-core/tests/data/import_baselines/convolve_usda-ae27710a0c217615-1.digest new file mode 100644 index 000000000..bb3773d01 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/convolve_usda-ae27710a0c217615-1.digest @@ -0,0 +1,26 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/World/cam") +camera: Camera { origin: Vec3A(0.0, 0.0, 0.0), lower_left_corner: Vec3A(-5.0, -3.75, -10.0), horizontal: Vec3A(10.0, 0.0, 0.0), vertical: Vec3A(0.0, 7.5, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: Some("/Render/settings") +settings: RenderSettings { samples_per_pixel: 16, max_depth: 2, width: 32, height: 24, region: PixelRect { x0: 0, y0: 0, x1: 32, y1: 24 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [AovProduct { prim_path: "/Render/p", name: "p.exr", vars: [AovVar { prim_path: "/Render/C", name: "C", channel_prefix: None, source: Color, components: 3, precision: Float, accumulation: Filtered, clear: 0.0, expression: None, raw: false, variance: false }, AovVar { prim_path: "/Render/matte", name: "matte", channel_prefix: None, source: Primvar(PrimvarSource { index: 0, components: 1, role: Float }), components: 1, precision: Float, accumulation: Filtered, clear: 0.0, expression: None, raw: false, variance: false }, AovVar { prim_path: "/Render/depth", name: "depth", channel_prefix: None, source: Depth, components: 1, precision: Float, accumulation: Closest, clear: inf, expression: None, raw: false, variance: false }, AovVar { prim_path: "/Render/depth_filtered", name: "depth_filtered", channel_prefix: None, source: Depth, components: 1, precision: Float, accumulation: Filtered, clear: inf, expression: None, raw: false, variance: false }, AovVar { prim_path: "/Render/variance", name: "variance", channel_prefix: None, source: Variance, components: 1, precision: Float, accumulation: Filtered, clear: 0.0, expression: None, raw: false, variance: false }, AovVar { prim_path: "/Render/soft_out", name: "soft_out", channel_prefix: None, source: Filter(FilterSource { display: true, filter: 0, output: 0, components: 1, radiance: false }), components: 1, precision: Float, accumulation: Filtered, clear: 0.0, expression: None, raw: false, variance: false }], attributes: [] }], precomp: Some(Precomp { sample_filters: [], display_filters: ["/Render/soft"], display: "beauty" }) } +pass: None +source: Source { lens: Some(Lens { focal_length: 24.0, aperture: [24.0, 18.0], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 10.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/convolve.usda"], invisible_overrides: Some(0) } +layer: $DIR/convolve.usda +lights: 1 +light 0: dome name Some("/World/sky") lpe None pmf 1.0 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 2 geometries, PrimitiveBreakdown { triangles: 4, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 4, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov Some((Some(0), false)) swapped false curves false scale 1.0 motion [] pieces all=2:2a13523c8e09c13d camera=2:2a13523c8e09c13d shadow=2:2a13523c8e09c13d indirect=2:2a13523c8e09c13d +geom 1: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:31db52e4afd4a225 camera=2:31db52e4afd4a225 shadow=2:31db52e4afd4a225 indirect=2:31db52e4afd4a225 +provenance light /World/sky: LightOrigin { index: 0, geoms: 0..0 } +provenance geometry 0..1: /World/Card +provenance geometry 1..2: /World/Wall +provenance mesh: MeshOrigin { geom_id: 0, slot: 0, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 1, slot: 1, baked: true, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 3430351340666728903, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 1: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 13118596165941616386, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: true, working: None, camera: Some("/World/cam"), cameras: ["/World/cam"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [("matte", 1)], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/World/cam"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/convolve_usda-ae27710a0c217615-1.image b/crates/crust-core/tests/data/import_baselines/convolve_usda-ae27710a0c217615-1.image new file mode 100644 index 000000000..f08c49d36 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/convolve_usda-ae27710a0c217615-1.image @@ -0,0 +1 @@ +32x24 16spp clamp-off e72b7b7cff87e77d diff --git a/crates/crust-core/tests/data/import_baselines/copper_usda-856b7fd7384c75f6-1.digest b/crates/crust-core/tests/data/import_baselines/copper_usda-856b7fd7384c75f6-1.digest new file mode 100644 index 000000000..699cb80e1 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/copper_usda-856b7fd7384c75f6-1.digest @@ -0,0 +1,20 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: None +camera: Camera { origin: Vec3A(15.0, 3.0, 3.0), lower_left_corner: Vec3A(4.8863316, -0.044797063, 4.174048), horizontal: Vec3A(1.2295314, 0.0, -6.147657), vertical: Vec3A(-0.44830504, 3.4967792, -0.08966101), u: Vec3A(0.19611613, 0.0, -0.9805807), v: Vec3A(-0.1271232, 0.991561, -0.02542464), lens_radius: 0.05, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: None +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 640, height: 360, region: PixelRect { x0: 0, y0: 0, x1: 640, y1: 360 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: None, depth_of_field: true, motion_blur: false, layer_stack: ["$DIR/copper.usda"], invisible_overrides: Some(0) } +layer: $DIR/copper.usda +warning: Warning { code: CameraMissing, kind: Skipped, count: 1, prims: [], message: "USD stage has no UsdGeomCamera — falling back to world::get_settings camera" } +lights: 0 +volumes: 0 +world: 1 geometries, PrimitiveBreakdown { triangles: 0, spheres: 1, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 0, spheres: 1, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +geom 0: material #0 Signature { kind: "MaterialX", cutout: false, straight: false, boundary: false, emits: false, uv: true, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:fb1e7d48790aec95 camera=1:fb1e7d48790aec95 shadow=1:fb1e7d48790aec95 indirect=1:fb1e7d48790aec95 +provenance material /World/Copper: MaterialOrigin { slots: [0], displaced: false } +provenance geometry 0..1: /World/Ball +provenance spheres: [0] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: None, cameras: [], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: None, offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/copper_usda-856b7fd7384c75f6-1.image b/crates/crust-core/tests/data/import_baselines/copper_usda-856b7fd7384c75f6-1.image new file mode 100644 index 000000000..c734c5b1d --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/copper_usda-856b7fd7384c75f6-1.image @@ -0,0 +1 @@ +640x360 16spp clamp-off a04a09c0d4b5e325 diff --git a/crates/crust-core/tests/data/import_baselines/cornellbox_guided_usda-1f6a1535ca10a892-1.digest b/crates/crust-core/tests/data/import_baselines/cornellbox_guided_usda-1f6a1535ca10a892-1.digest new file mode 100644 index 000000000..34ad6fd62 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/cornellbox_guided_usda-1f6a1535ca10a892-1.digest @@ -0,0 +1,55 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/World/Cam") +camera: Camera { origin: Vec3A(0.0, 2.0, 1.7), lower_left_corner: Vec3A(-2.775, -0.7750001, -2.0), horizontal: Vec3A(5.55, 0.0, 0.0), vertical: Vec3A(0.0, 5.55, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: Some("/Render/settings") +settings: RenderSettings { samples_per_pixel: 64, max_depth: 8, width: 512, height: 512, region: PixelRect { x0: 0, y0: 0, x1: 512, y1: 512 }, min_samples_per_pixel: 16, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: true, guiding_train_iterations: 8, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 24.0, aperture: [36.0, 36.0], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 3.7 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/cornellbox_guided.usda"], invisible_overrides: Some(0) } +layer: $DIR/cornellbox_guided.usda +lights: 1 +light 0: area name Some("/World/CeilingLight") lpe None pmf 1.0 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 10 geometries, PrimitiveBreakdown { triangles: 14, spheres: 3, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 14, spheres: 3, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +geom 0: material #0 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:419a50918c7d235b camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=1:419a50918c7d235b +geom 1: material #1 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:60772e24e8c542a8 camera=1:60772e24e8c542a8 shadow=1:60772e24e8c542a8 indirect=1:60772e24e8c542a8 +geom 2: material #1 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:7eb5757351d59586 camera=1:7eb5757351d59586 shadow=1:7eb5757351d59586 indirect=1:7eb5757351d59586 +geom 3: material #1 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:fbb55a7458a52f85 camera=2:fbb55a7458a52f85 shadow=2:fbb55a7458a52f85 indirect=2:fbb55a7458a52f85 +geom 4: material #2 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:d43f32f1840fba05 camera=2:d43f32f1840fba05 shadow=2:d43f32f1840fba05 indirect=2:d43f32f1840fba05 +geom 5: material #3 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:4230312a0dbf0605 camera=2:4230312a0dbf0605 shadow=2:4230312a0dbf0605 indirect=2:4230312a0dbf0605 +geom 6: material #1 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:bfb975da92c3f105 camera=2:bfb975da92c3f105 shadow=2:bfb975da92c3f105 indirect=2:bfb975da92c3f105 +geom 7: material #1 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:7f51da6ec1b06205 camera=2:7f51da6ec1b06205 shadow=2:7f51da6ec1b06205 indirect=2:7f51da6ec1b06205 +geom 8: material #1 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:43f88c3c27bb79c5 camera=2:43f88c3c27bb79c5 shadow=2:43f88c3c27bb79c5 indirect=2:43f88c3c27bb79c5 +geom 9: material #1 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:5e2dadb9f5581d45 camera=2:5e2dadb9f5581d45 shadow=2:5e2dadb9f5581d45 indirect=2:5e2dadb9f5581d45 +provenance material /World/Materials/green: MaterialOrigin { slots: [4], displaced: false } +provenance material /World/Materials/red: MaterialOrigin { slots: [5], displaced: false } +provenance material /World/Materials/white: MaterialOrigin { slots: [1, 2, 3, 6, 7, 8, 9], displaced: false } +provenance light /World/CeilingLight: LightOrigin { index: 0, geoms: 0..1 } +provenance geometry 0..1: /World/CeilingLight +provenance geometry 1..2: /World/Contents/small_sphere +provenance geometry 2..3: /World/Contents/big_sphere +provenance geometry 3..4: /World/Box/light_shroud +provenance geometry 4..5: /World/Box/right_wall +provenance geometry 5..6: /World/Box/left_wall +provenance geometry 6..7: /World/Box/front_wall +provenance geometry 7..8: /World/Box/back_wall +provenance geometry 8..9: /World/Box/ceiling +provenance geometry 9..10: /World/Box/floor +provenance mesh: MeshOrigin { geom_id: 3, slot: 0, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 4, slot: 1, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 5, slot: 2, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 6, slot: 3, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 7, slot: 4, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 8, slot: 5, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 9, slot: 6, baked: true, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 11264607570582347183, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 1: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 12306339853125749494, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 1 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 2: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 13622236926475232614, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 2 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 3: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 4681087188537491404, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 4: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 4369631221849632513, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 5: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 1690375821915330156, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 6: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 2685769528314553797, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [1, 2] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: true, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/World/Cam"), cameras: ["/World/Cam"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/World/Cam"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/cornellbox_guided_usda-1f6a1535ca10a892-1.image b/crates/crust-core/tests/data/import_baselines/cornellbox_guided_usda-1f6a1535ca10a892-1.image new file mode 100644 index 000000000..73b558234 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/cornellbox_guided_usda-1f6a1535ca10a892-1.image @@ -0,0 +1 @@ +512x512 16spp clamp-off e5ffae3fe49f22a2 diff --git a/crates/crust-core/tests/data/import_baselines/cornellbox_guided_usda-7da4bd79d2eda8bf-1.digest b/crates/crust-core/tests/data/import_baselines/cornellbox_guided_usda-7da4bd79d2eda8bf-1.digest new file mode 100644 index 000000000..c391fb6e3 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/cornellbox_guided_usda-7da4bd79d2eda8bf-1.digest @@ -0,0 +1,55 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/World/Cam") +camera: Camera { origin: Vec3A(0.0, 2.0, 1.7), lower_left_corner: Vec3A(-2.775, -0.7750001, -2.0), horizontal: Vec3A(5.55, 0.0, 0.0), vertical: Vec3A(0.0, 5.55, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: Some("/Render/settings") +settings: RenderSettings { samples_per_pixel: 64, max_depth: 8, width: 512, height: 512, region: PixelRect { x0: 0, y0: 0, x1: 512, y1: 512 }, min_samples_per_pixel: 16, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: true, guiding_train_iterations: 8, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 24.0, aperture: [36.0, 36.0], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 3.7 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/cornellbox_guided.usda"], invisible_overrides: Some(0) } +layer: $DIR/cornellbox_guided.usda +lights: 1 +light 0: area name Some("/World/CeilingLight") lpe None pmf 1.0 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 10 geometries, PrimitiveBreakdown { triangles: 14, spheres: 3, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 14, spheres: 3, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +geom 0: material #0 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:419a50918c7d235b camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=1:419a50918c7d235b +geom 1: material #1 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:60772e24e8c542a8 camera=1:60772e24e8c542a8 shadow=1:60772e24e8c542a8 indirect=1:60772e24e8c542a8 +geom 2: material #1 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:7eb5757351d59586 camera=1:7eb5757351d59586 shadow=1:7eb5757351d59586 indirect=1:7eb5757351d59586 +geom 3: material #1 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:fbb55a7458a52f85 camera=2:fbb55a7458a52f85 shadow=2:fbb55a7458a52f85 indirect=2:fbb55a7458a52f85 +geom 4: material #2 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:d43f32f1840fba05 camera=2:d43f32f1840fba05 shadow=2:d43f32f1840fba05 indirect=2:d43f32f1840fba05 +geom 5: material #3 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:4230312a0dbf0605 camera=2:4230312a0dbf0605 shadow=2:4230312a0dbf0605 indirect=2:4230312a0dbf0605 +geom 6: material #1 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:bfb975da92c3f105 camera=2:bfb975da92c3f105 shadow=2:bfb975da92c3f105 indirect=2:bfb975da92c3f105 +geom 7: material #1 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:7f51da6ec1b06205 camera=2:7f51da6ec1b06205 shadow=2:7f51da6ec1b06205 indirect=2:7f51da6ec1b06205 +geom 8: material #1 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:43f88c3c27bb79c5 camera=2:43f88c3c27bb79c5 shadow=2:43f88c3c27bb79c5 indirect=2:43f88c3c27bb79c5 +geom 9: material #1 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:5e2dadb9f5581d45 camera=2:5e2dadb9f5581d45 shadow=2:5e2dadb9f5581d45 indirect=2:5e2dadb9f5581d45 +provenance material /World/Materials/green: MaterialOrigin { slots: [4], displaced: false } +provenance material /World/Materials/red: MaterialOrigin { slots: [5], displaced: false } +provenance material /World/Materials/white: MaterialOrigin { slots: [1, 2, 3, 6, 7, 8, 9], displaced: false } +provenance light /World/CeilingLight: LightOrigin { index: 0, geoms: 0..1 } +provenance geometry 0..1: /World/CeilingLight +provenance geometry 1..2: /World/Contents/small_sphere +provenance geometry 2..3: /World/Contents/big_sphere +provenance geometry 3..4: /World/Box/light_shroud +provenance geometry 4..5: /World/Box/right_wall +provenance geometry 5..6: /World/Box/left_wall +provenance geometry 6..7: /World/Box/front_wall +provenance geometry 7..8: /World/Box/back_wall +provenance geometry 8..9: /World/Box/ceiling +provenance geometry 9..10: /World/Box/floor +provenance mesh: MeshOrigin { geom_id: 3, slot: 0, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 4, slot: 1, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 5, slot: 2, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 6, slot: 3, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 7, slot: 4, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 8, slot: 5, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 9, slot: 6, baked: true, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 11264607570582347183, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 1: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 12306339853125749494, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 1 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 2: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 13622236926475232614, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 2 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 3: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 4681087188537491404, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 4: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 4369631221849632513, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 5: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 1690375821915330156, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 6: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 2685769528314553797, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [1, 2] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/World/Cam"), cameras: ["/World/Cam"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/World/Cam"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/cornellbox_guided_usda-7da4bd79d2eda8bf-1.image b/crates/crust-core/tests/data/import_baselines/cornellbox_guided_usda-7da4bd79d2eda8bf-1.image new file mode 100644 index 000000000..73b558234 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/cornellbox_guided_usda-7da4bd79d2eda8bf-1.image @@ -0,0 +1 @@ +512x512 16spp clamp-off e5ffae3fe49f22a2 diff --git a/crates/crust-core/tests/data/import_baselines/cornellbox_guided_usda-7da4bd79d2eda8bf-2.digest b/crates/crust-core/tests/data/import_baselines/cornellbox_guided_usda-7da4bd79d2eda8bf-2.digest new file mode 100644 index 000000000..c391fb6e3 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/cornellbox_guided_usda-7da4bd79d2eda8bf-2.digest @@ -0,0 +1,55 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/World/Cam") +camera: Camera { origin: Vec3A(0.0, 2.0, 1.7), lower_left_corner: Vec3A(-2.775, -0.7750001, -2.0), horizontal: Vec3A(5.55, 0.0, 0.0), vertical: Vec3A(0.0, 5.55, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: Some("/Render/settings") +settings: RenderSettings { samples_per_pixel: 64, max_depth: 8, width: 512, height: 512, region: PixelRect { x0: 0, y0: 0, x1: 512, y1: 512 }, min_samples_per_pixel: 16, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: true, guiding_train_iterations: 8, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 24.0, aperture: [36.0, 36.0], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 3.7 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/cornellbox_guided.usda"], invisible_overrides: Some(0) } +layer: $DIR/cornellbox_guided.usda +lights: 1 +light 0: area name Some("/World/CeilingLight") lpe None pmf 1.0 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 10 geometries, PrimitiveBreakdown { triangles: 14, spheres: 3, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 14, spheres: 3, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +geom 0: material #0 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:419a50918c7d235b camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=1:419a50918c7d235b +geom 1: material #1 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:60772e24e8c542a8 camera=1:60772e24e8c542a8 shadow=1:60772e24e8c542a8 indirect=1:60772e24e8c542a8 +geom 2: material #1 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:7eb5757351d59586 camera=1:7eb5757351d59586 shadow=1:7eb5757351d59586 indirect=1:7eb5757351d59586 +geom 3: material #1 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:fbb55a7458a52f85 camera=2:fbb55a7458a52f85 shadow=2:fbb55a7458a52f85 indirect=2:fbb55a7458a52f85 +geom 4: material #2 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:d43f32f1840fba05 camera=2:d43f32f1840fba05 shadow=2:d43f32f1840fba05 indirect=2:d43f32f1840fba05 +geom 5: material #3 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:4230312a0dbf0605 camera=2:4230312a0dbf0605 shadow=2:4230312a0dbf0605 indirect=2:4230312a0dbf0605 +geom 6: material #1 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:bfb975da92c3f105 camera=2:bfb975da92c3f105 shadow=2:bfb975da92c3f105 indirect=2:bfb975da92c3f105 +geom 7: material #1 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:7f51da6ec1b06205 camera=2:7f51da6ec1b06205 shadow=2:7f51da6ec1b06205 indirect=2:7f51da6ec1b06205 +geom 8: material #1 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:43f88c3c27bb79c5 camera=2:43f88c3c27bb79c5 shadow=2:43f88c3c27bb79c5 indirect=2:43f88c3c27bb79c5 +geom 9: material #1 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:5e2dadb9f5581d45 camera=2:5e2dadb9f5581d45 shadow=2:5e2dadb9f5581d45 indirect=2:5e2dadb9f5581d45 +provenance material /World/Materials/green: MaterialOrigin { slots: [4], displaced: false } +provenance material /World/Materials/red: MaterialOrigin { slots: [5], displaced: false } +provenance material /World/Materials/white: MaterialOrigin { slots: [1, 2, 3, 6, 7, 8, 9], displaced: false } +provenance light /World/CeilingLight: LightOrigin { index: 0, geoms: 0..1 } +provenance geometry 0..1: /World/CeilingLight +provenance geometry 1..2: /World/Contents/small_sphere +provenance geometry 2..3: /World/Contents/big_sphere +provenance geometry 3..4: /World/Box/light_shroud +provenance geometry 4..5: /World/Box/right_wall +provenance geometry 5..6: /World/Box/left_wall +provenance geometry 6..7: /World/Box/front_wall +provenance geometry 7..8: /World/Box/back_wall +provenance geometry 8..9: /World/Box/ceiling +provenance geometry 9..10: /World/Box/floor +provenance mesh: MeshOrigin { geom_id: 3, slot: 0, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 4, slot: 1, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 5, slot: 2, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 6, slot: 3, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 7, slot: 4, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 8, slot: 5, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 9, slot: 6, baked: true, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 11264607570582347183, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 1: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 12306339853125749494, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 1 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 2: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 13622236926475232614, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 2 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 3: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 4681087188537491404, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 4: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 4369631221849632513, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 5: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 1690375821915330156, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 6: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 2685769528314553797, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [1, 2] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/World/Cam"), cameras: ["/World/Cam"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/World/Cam"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/cornellbox_guided_usda-7da4bd79d2eda8bf-2.image b/crates/crust-core/tests/data/import_baselines/cornellbox_guided_usda-7da4bd79d2eda8bf-2.image new file mode 100644 index 000000000..73b558234 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/cornellbox_guided_usda-7da4bd79d2eda8bf-2.image @@ -0,0 +1 @@ +512x512 16spp clamp-off e5ffae3fe49f22a2 diff --git a/crates/crust-core/tests/data/import_baselines/cornellbox_guided_usda-9ca98c606b8b14bb-1.digest b/crates/crust-core/tests/data/import_baselines/cornellbox_guided_usda-9ca98c606b8b14bb-1.digest new file mode 100644 index 000000000..c391fb6e3 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/cornellbox_guided_usda-9ca98c606b8b14bb-1.digest @@ -0,0 +1,55 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/World/Cam") +camera: Camera { origin: Vec3A(0.0, 2.0, 1.7), lower_left_corner: Vec3A(-2.775, -0.7750001, -2.0), horizontal: Vec3A(5.55, 0.0, 0.0), vertical: Vec3A(0.0, 5.55, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: Some("/Render/settings") +settings: RenderSettings { samples_per_pixel: 64, max_depth: 8, width: 512, height: 512, region: PixelRect { x0: 0, y0: 0, x1: 512, y1: 512 }, min_samples_per_pixel: 16, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: true, guiding_train_iterations: 8, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 24.0, aperture: [36.0, 36.0], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 3.7 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/cornellbox_guided.usda"], invisible_overrides: Some(0) } +layer: $DIR/cornellbox_guided.usda +lights: 1 +light 0: area name Some("/World/CeilingLight") lpe None pmf 1.0 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 10 geometries, PrimitiveBreakdown { triangles: 14, spheres: 3, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 14, spheres: 3, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +geom 0: material #0 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:419a50918c7d235b camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=1:419a50918c7d235b +geom 1: material #1 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:60772e24e8c542a8 camera=1:60772e24e8c542a8 shadow=1:60772e24e8c542a8 indirect=1:60772e24e8c542a8 +geom 2: material #1 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:7eb5757351d59586 camera=1:7eb5757351d59586 shadow=1:7eb5757351d59586 indirect=1:7eb5757351d59586 +geom 3: material #1 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:fbb55a7458a52f85 camera=2:fbb55a7458a52f85 shadow=2:fbb55a7458a52f85 indirect=2:fbb55a7458a52f85 +geom 4: material #2 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:d43f32f1840fba05 camera=2:d43f32f1840fba05 shadow=2:d43f32f1840fba05 indirect=2:d43f32f1840fba05 +geom 5: material #3 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:4230312a0dbf0605 camera=2:4230312a0dbf0605 shadow=2:4230312a0dbf0605 indirect=2:4230312a0dbf0605 +geom 6: material #1 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:bfb975da92c3f105 camera=2:bfb975da92c3f105 shadow=2:bfb975da92c3f105 indirect=2:bfb975da92c3f105 +geom 7: material #1 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:7f51da6ec1b06205 camera=2:7f51da6ec1b06205 shadow=2:7f51da6ec1b06205 indirect=2:7f51da6ec1b06205 +geom 8: material #1 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:43f88c3c27bb79c5 camera=2:43f88c3c27bb79c5 shadow=2:43f88c3c27bb79c5 indirect=2:43f88c3c27bb79c5 +geom 9: material #1 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:5e2dadb9f5581d45 camera=2:5e2dadb9f5581d45 shadow=2:5e2dadb9f5581d45 indirect=2:5e2dadb9f5581d45 +provenance material /World/Materials/green: MaterialOrigin { slots: [4], displaced: false } +provenance material /World/Materials/red: MaterialOrigin { slots: [5], displaced: false } +provenance material /World/Materials/white: MaterialOrigin { slots: [1, 2, 3, 6, 7, 8, 9], displaced: false } +provenance light /World/CeilingLight: LightOrigin { index: 0, geoms: 0..1 } +provenance geometry 0..1: /World/CeilingLight +provenance geometry 1..2: /World/Contents/small_sphere +provenance geometry 2..3: /World/Contents/big_sphere +provenance geometry 3..4: /World/Box/light_shroud +provenance geometry 4..5: /World/Box/right_wall +provenance geometry 5..6: /World/Box/left_wall +provenance geometry 6..7: /World/Box/front_wall +provenance geometry 7..8: /World/Box/back_wall +provenance geometry 8..9: /World/Box/ceiling +provenance geometry 9..10: /World/Box/floor +provenance mesh: MeshOrigin { geom_id: 3, slot: 0, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 4, slot: 1, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 5, slot: 2, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 6, slot: 3, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 7, slot: 4, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 8, slot: 5, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 9, slot: 6, baked: true, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 11264607570582347183, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 1: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 12306339853125749494, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 1 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 2: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 13622236926475232614, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 2 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 3: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 4681087188537491404, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 4: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 4369631221849632513, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 5: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 1690375821915330156, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 6: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 2685769528314553797, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [1, 2] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/World/Cam"), cameras: ["/World/Cam"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/World/Cam"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/cornellbox_guided_usda-9ca98c606b8b14bb-1.image b/crates/crust-core/tests/data/import_baselines/cornellbox_guided_usda-9ca98c606b8b14bb-1.image new file mode 100644 index 000000000..73b558234 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/cornellbox_guided_usda-9ca98c606b8b14bb-1.image @@ -0,0 +1 @@ +512x512 16spp clamp-off e5ffae3fe49f22a2 diff --git a/crates/crust-core/tests/data/import_baselines/cornellbox_guided_usda-9ca98c606b8b14bb-2.digest b/crates/crust-core/tests/data/import_baselines/cornellbox_guided_usda-9ca98c606b8b14bb-2.digest new file mode 100644 index 000000000..c391fb6e3 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/cornellbox_guided_usda-9ca98c606b8b14bb-2.digest @@ -0,0 +1,55 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/World/Cam") +camera: Camera { origin: Vec3A(0.0, 2.0, 1.7), lower_left_corner: Vec3A(-2.775, -0.7750001, -2.0), horizontal: Vec3A(5.55, 0.0, 0.0), vertical: Vec3A(0.0, 5.55, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: Some("/Render/settings") +settings: RenderSettings { samples_per_pixel: 64, max_depth: 8, width: 512, height: 512, region: PixelRect { x0: 0, y0: 0, x1: 512, y1: 512 }, min_samples_per_pixel: 16, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: true, guiding_train_iterations: 8, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 24.0, aperture: [36.0, 36.0], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 3.7 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/cornellbox_guided.usda"], invisible_overrides: Some(0) } +layer: $DIR/cornellbox_guided.usda +lights: 1 +light 0: area name Some("/World/CeilingLight") lpe None pmf 1.0 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 10 geometries, PrimitiveBreakdown { triangles: 14, spheres: 3, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 14, spheres: 3, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +geom 0: material #0 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:419a50918c7d235b camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=1:419a50918c7d235b +geom 1: material #1 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:60772e24e8c542a8 camera=1:60772e24e8c542a8 shadow=1:60772e24e8c542a8 indirect=1:60772e24e8c542a8 +geom 2: material #1 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:7eb5757351d59586 camera=1:7eb5757351d59586 shadow=1:7eb5757351d59586 indirect=1:7eb5757351d59586 +geom 3: material #1 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:fbb55a7458a52f85 camera=2:fbb55a7458a52f85 shadow=2:fbb55a7458a52f85 indirect=2:fbb55a7458a52f85 +geom 4: material #2 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:d43f32f1840fba05 camera=2:d43f32f1840fba05 shadow=2:d43f32f1840fba05 indirect=2:d43f32f1840fba05 +geom 5: material #3 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:4230312a0dbf0605 camera=2:4230312a0dbf0605 shadow=2:4230312a0dbf0605 indirect=2:4230312a0dbf0605 +geom 6: material #1 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:bfb975da92c3f105 camera=2:bfb975da92c3f105 shadow=2:bfb975da92c3f105 indirect=2:bfb975da92c3f105 +geom 7: material #1 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:7f51da6ec1b06205 camera=2:7f51da6ec1b06205 shadow=2:7f51da6ec1b06205 indirect=2:7f51da6ec1b06205 +geom 8: material #1 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:43f88c3c27bb79c5 camera=2:43f88c3c27bb79c5 shadow=2:43f88c3c27bb79c5 indirect=2:43f88c3c27bb79c5 +geom 9: material #1 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:5e2dadb9f5581d45 camera=2:5e2dadb9f5581d45 shadow=2:5e2dadb9f5581d45 indirect=2:5e2dadb9f5581d45 +provenance material /World/Materials/green: MaterialOrigin { slots: [4], displaced: false } +provenance material /World/Materials/red: MaterialOrigin { slots: [5], displaced: false } +provenance material /World/Materials/white: MaterialOrigin { slots: [1, 2, 3, 6, 7, 8, 9], displaced: false } +provenance light /World/CeilingLight: LightOrigin { index: 0, geoms: 0..1 } +provenance geometry 0..1: /World/CeilingLight +provenance geometry 1..2: /World/Contents/small_sphere +provenance geometry 2..3: /World/Contents/big_sphere +provenance geometry 3..4: /World/Box/light_shroud +provenance geometry 4..5: /World/Box/right_wall +provenance geometry 5..6: /World/Box/left_wall +provenance geometry 6..7: /World/Box/front_wall +provenance geometry 7..8: /World/Box/back_wall +provenance geometry 8..9: /World/Box/ceiling +provenance geometry 9..10: /World/Box/floor +provenance mesh: MeshOrigin { geom_id: 3, slot: 0, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 4, slot: 1, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 5, slot: 2, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 6, slot: 3, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 7, slot: 4, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 8, slot: 5, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 9, slot: 6, baked: true, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 11264607570582347183, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 1: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 12306339853125749494, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 1 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 2: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 13622236926475232614, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 2 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 3: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 4681087188537491404, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 4: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 4369631221849632513, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 5: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 1690375821915330156, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 6: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 2685769528314553797, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [1, 2] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/World/Cam"), cameras: ["/World/Cam"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/World/Cam"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/cornellbox_guided_usda-9ca98c606b8b14bb-2.image b/crates/crust-core/tests/data/import_baselines/cornellbox_guided_usda-9ca98c606b8b14bb-2.image new file mode 100644 index 000000000..73b558234 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/cornellbox_guided_usda-9ca98c606b8b14bb-2.image @@ -0,0 +1 @@ +512x512 16spp clamp-off e5ffae3fe49f22a2 diff --git a/crates/crust-core/tests/data/import_baselines/cornellbox_guided_usda-dddcb8fd2ce59c1f-1.digest b/crates/crust-core/tests/data/import_baselines/cornellbox_guided_usda-dddcb8fd2ce59c1f-1.digest new file mode 100644 index 000000000..c391fb6e3 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/cornellbox_guided_usda-dddcb8fd2ce59c1f-1.digest @@ -0,0 +1,55 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/World/Cam") +camera: Camera { origin: Vec3A(0.0, 2.0, 1.7), lower_left_corner: Vec3A(-2.775, -0.7750001, -2.0), horizontal: Vec3A(5.55, 0.0, 0.0), vertical: Vec3A(0.0, 5.55, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: Some("/Render/settings") +settings: RenderSettings { samples_per_pixel: 64, max_depth: 8, width: 512, height: 512, region: PixelRect { x0: 0, y0: 0, x1: 512, y1: 512 }, min_samples_per_pixel: 16, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: true, guiding_train_iterations: 8, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 24.0, aperture: [36.0, 36.0], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 3.7 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/cornellbox_guided.usda"], invisible_overrides: Some(0) } +layer: $DIR/cornellbox_guided.usda +lights: 1 +light 0: area name Some("/World/CeilingLight") lpe None pmf 1.0 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 10 geometries, PrimitiveBreakdown { triangles: 14, spheres: 3, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 14, spheres: 3, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +geom 0: material #0 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:419a50918c7d235b camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=1:419a50918c7d235b +geom 1: material #1 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:60772e24e8c542a8 camera=1:60772e24e8c542a8 shadow=1:60772e24e8c542a8 indirect=1:60772e24e8c542a8 +geom 2: material #1 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:7eb5757351d59586 camera=1:7eb5757351d59586 shadow=1:7eb5757351d59586 indirect=1:7eb5757351d59586 +geom 3: material #1 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:fbb55a7458a52f85 camera=2:fbb55a7458a52f85 shadow=2:fbb55a7458a52f85 indirect=2:fbb55a7458a52f85 +geom 4: material #2 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:d43f32f1840fba05 camera=2:d43f32f1840fba05 shadow=2:d43f32f1840fba05 indirect=2:d43f32f1840fba05 +geom 5: material #3 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:4230312a0dbf0605 camera=2:4230312a0dbf0605 shadow=2:4230312a0dbf0605 indirect=2:4230312a0dbf0605 +geom 6: material #1 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:bfb975da92c3f105 camera=2:bfb975da92c3f105 shadow=2:bfb975da92c3f105 indirect=2:bfb975da92c3f105 +geom 7: material #1 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:7f51da6ec1b06205 camera=2:7f51da6ec1b06205 shadow=2:7f51da6ec1b06205 indirect=2:7f51da6ec1b06205 +geom 8: material #1 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:43f88c3c27bb79c5 camera=2:43f88c3c27bb79c5 shadow=2:43f88c3c27bb79c5 indirect=2:43f88c3c27bb79c5 +geom 9: material #1 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:5e2dadb9f5581d45 camera=2:5e2dadb9f5581d45 shadow=2:5e2dadb9f5581d45 indirect=2:5e2dadb9f5581d45 +provenance material /World/Materials/green: MaterialOrigin { slots: [4], displaced: false } +provenance material /World/Materials/red: MaterialOrigin { slots: [5], displaced: false } +provenance material /World/Materials/white: MaterialOrigin { slots: [1, 2, 3, 6, 7, 8, 9], displaced: false } +provenance light /World/CeilingLight: LightOrigin { index: 0, geoms: 0..1 } +provenance geometry 0..1: /World/CeilingLight +provenance geometry 1..2: /World/Contents/small_sphere +provenance geometry 2..3: /World/Contents/big_sphere +provenance geometry 3..4: /World/Box/light_shroud +provenance geometry 4..5: /World/Box/right_wall +provenance geometry 5..6: /World/Box/left_wall +provenance geometry 6..7: /World/Box/front_wall +provenance geometry 7..8: /World/Box/back_wall +provenance geometry 8..9: /World/Box/ceiling +provenance geometry 9..10: /World/Box/floor +provenance mesh: MeshOrigin { geom_id: 3, slot: 0, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 4, slot: 1, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 5, slot: 2, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 6, slot: 3, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 7, slot: 4, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 8, slot: 5, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 9, slot: 6, baked: true, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 11264607570582347183, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 1: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 12306339853125749494, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 1 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 2: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 13622236926475232614, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 2 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 3: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 4681087188537491404, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 4: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 4369631221849632513, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 5: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 1690375821915330156, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 6: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 2685769528314553797, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [1, 2] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/World/Cam"), cameras: ["/World/Cam"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/World/Cam"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/cornellbox_guided_usda-dddcb8fd2ce59c1f-1.image b/crates/crust-core/tests/data/import_baselines/cornellbox_guided_usda-dddcb8fd2ce59c1f-1.image new file mode 100644 index 000000000..73b558234 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/cornellbox_guided_usda-dddcb8fd2ce59c1f-1.image @@ -0,0 +1 @@ +512x512 16spp clamp-off e5ffae3fe49f22a2 diff --git a/crates/crust-core/tests/data/import_baselines/cornellbox_lookdev_usda-28fa5fe21d50ecee-1.digest b/crates/crust-core/tests/data/import_baselines/cornellbox_lookdev_usda-28fa5fe21d50ecee-1.digest new file mode 100644 index 000000000..2c1284f4b --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/cornellbox_lookdev_usda-28fa5fe21d50ecee-1.digest @@ -0,0 +1,40 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/scene/camera1") +camera: Camera { origin: Vec3A(0.0074343784, 1.9913422, 4.0133057), lower_left_corner: Vec3A(-8.881443, -3.0086517, -0.98669434), horizontal: Vec3A(17.777756, 0.0, 0.0), vertical: Vec3A(0.0, 9.999988, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: Some(Vec4(0.0, 0.0, -1.0, 3.9133058)), far: Some(Vec4(0.0, 0.0, 1.0, 9995.986)), planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: Some("/Render/settings") +settings: RenderSettings { samples_per_pixel: 16, max_depth: 32, width: 96, height: 54, region: PixelRect { x0: 0, y0: 0, x1: 96, y1: 54 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 12.700017, aperture: [25.4, 25.4], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 5.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/cornellbox_lookdev.usda", "$TMP/crust_mcp_cli/worked_session/cornellbox.usda"], invisible_overrides: Some(0) } +layer: $TMP/crust_mcp_cli/worked_session/cornellbox.usda +layer: $DIR/cornellbox_lookdev.usda +warning: Warning { code: MaterialFallbackDefault, kind: Skipped, count: 1, prims: ["/scene/Looks/initialShadingGroup"], message: "Material /scene/Looks/initialShadingGroup has no surface shader — using default grey OpenPBR" } +lights: 1 +light 0: dome name Some("/scene/Sky") lpe None pmf 1.0 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 5 geometries, PrimitiveBreakdown { triangles: 822, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 2 } top level, PrimitiveBreakdown { triangles: 1582, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 2 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.3585339 motion [] pieces all=760:2344ecf63e12c441 camera=760:2344ecf63e12c441 shadow=760:2344ecf63e12c441 indirect=760:2344ecf63e12c441 +geom 1: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.25 motion [] pieces all=800:4a8c9f44d777e131 camera=800:4a8c9f44d777e131 shadow=800:4a8c9f44d777e131 indirect=800:4a8c9f44d777e131 +geom 2: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=12:94a297badef437e1 camera=12:94a297badef437e1 shadow=12:94a297badef437e1 indirect=12:94a297badef437e1 +geom 3: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.2 motion [] pieces all=760:c2b60a75c52c78b9 camera=760:c2b60a75c52c78b9 shadow=760:c2b60a75c52c78b9 indirect=760:c2b60a75c52c78b9 +geom 4: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 4.0 motion [] pieces all=10:88b22fc3345d5b05 camera=10:88b22fc3345d5b05 shadow=10:88b22fc3345d5b05 indirect=10:88b22fc3345d5b05 +provenance material /scene/Looks/initialShadingGroup: MaterialOrigin { slots: [0, 1, 2, 3, 4], displaced: false } +provenance light /scene/Sky: LightOrigin { index: 0, geoms: 5..5 } +provenance geometry 0..1: /scene/pSphere2 +provenance geometry 1..2: /scene/pTorus1 +provenance geometry 2..3: /scene/pCube2 +provenance geometry 3..4: /scene/pSphere1 +provenance geometry 4..5: /scene/pCube1 +provenance mesh: MeshOrigin { geom_id: 0, slot: 0, baked: false, moving: false } +provenance mesh: MeshOrigin { geom_id: 1, slot: 1, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 2, slot: 2, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 3, slot: 0, baked: false, moving: false } +provenance mesh: MeshOrigin { geom_id: 4, slot: 3, baked: true, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 17119738035130870988, n_points: 382, n_indices: 1560, n_uvs: None, smooth: false, material: 0 }), placements: 2, shared: false, displaced: false } +provenance mesh slot 1: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 6096447469814747168, n_points: 400, n_indices: 1600, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 2: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 1739488954094729910, n_points: 8, n_indices: 24, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 3: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 12343188411137242430, n_points: 8, n_indices: 20, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: true }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/scene/camera1"), cameras: ["/scene/camera1"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/scene/camera1"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/cornellbox_lookdev_usda-8e3a0cbcd6f4b7b0-1.digest b/crates/crust-core/tests/data/import_baselines/cornellbox_lookdev_usda-8e3a0cbcd6f4b7b0-1.digest new file mode 100644 index 000000000..e89d728d4 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/cornellbox_lookdev_usda-8e3a0cbcd6f4b7b0-1.digest @@ -0,0 +1,40 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/scene/camera1") +camera: Camera { origin: Vec3A(0.0074343784, 1.9913422, 4.0133057), lower_left_corner: Vec3A(-8.881443, -3.0086517, -0.98669434), horizontal: Vec3A(17.777756, 0.0, 0.0), vertical: Vec3A(0.0, 9.999988, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: Some(Vec4(0.0, 0.0, -1.0, 3.9133058)), far: Some(Vec4(0.0, 0.0, 1.0, 9995.986)), planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: Some("/Render/settings") +settings: RenderSettings { samples_per_pixel: 16, max_depth: 32, width: 96, height: 54, region: PixelRect { x0: 0, y0: 0, x1: 96, y1: 54 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 12.700017, aperture: [25.4, 25.4], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 5.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/cornellbox_lookdev.usda", "$TMP/crust_mcp_cli/worked_session/cornellbox.usda"], invisible_overrides: Some(0) } +layer: $TMP/crust_mcp_cli/worked_session/cornellbox.usda +layer: $DIR/cornellbox_lookdev.usda +warning: Warning { code: MaterialFallbackDefault, kind: Skipped, count: 1, prims: ["/scene/Looks/initialShadingGroup"], message: "Material /scene/Looks/initialShadingGroup has no surface shader — using default grey OpenPBR" } +lights: 1 +light 0: dome name Some("/scene/Sky") lpe None pmf 1.0 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 5 geometries, PrimitiveBreakdown { triangles: 822, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 2 } top level, PrimitiveBreakdown { triangles: 1582, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 2 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.3585339 motion [] pieces all=760:2344ecf63e12c441 camera=760:2344ecf63e12c441 shadow=760:2344ecf63e12c441 indirect=760:2344ecf63e12c441 +geom 1: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.25 motion [] pieces all=800:4a8c9f44d777e131 camera=800:4a8c9f44d777e131 shadow=800:4a8c9f44d777e131 indirect=800:4a8c9f44d777e131 +geom 2: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=12:94a297badef437e1 camera=12:94a297badef437e1 shadow=12:94a297badef437e1 indirect=12:94a297badef437e1 +geom 3: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.2 motion [] pieces all=760:c2b60a75c52c78b9 camera=760:c2b60a75c52c78b9 shadow=760:c2b60a75c52c78b9 indirect=760:c2b60a75c52c78b9 +geom 4: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 4.0 motion [] pieces all=10:88b22fc3345d5b05 camera=10:88b22fc3345d5b05 shadow=10:88b22fc3345d5b05 indirect=10:88b22fc3345d5b05 +provenance material /scene/Looks/initialShadingGroup: MaterialOrigin { slots: [0, 1, 2, 3, 4], displaced: false } +provenance light /scene/Sky: LightOrigin { index: 0, geoms: 5..5 } +provenance geometry 0..1: /scene/pSphere2 +provenance geometry 1..2: /scene/pTorus1 +provenance geometry 2..3: /scene/pCube2 +provenance geometry 3..4: /scene/pSphere1 +provenance geometry 4..5: /scene/pCube1 +provenance mesh: MeshOrigin { geom_id: 0, slot: 0, baked: false, moving: false } +provenance mesh: MeshOrigin { geom_id: 1, slot: 1, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 2, slot: 2, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 3, slot: 0, baked: false, moving: false } +provenance mesh: MeshOrigin { geom_id: 4, slot: 3, baked: true, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 17119738035130870988, n_points: 382, n_indices: 1560, n_uvs: None, smooth: false, material: 0 }), placements: 2, shared: false, displaced: false } +provenance mesh slot 1: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 6096447469814747168, n_points: 400, n_indices: 1600, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 2: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 1739488954094729910, n_points: 8, n_indices: 24, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 3: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 12343188411137242430, n_points: 8, n_indices: 20, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: true, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/scene/camera1"), cameras: ["/scene/camera1"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/scene/camera1"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/cornellbox_lookdev_usda-937b5a30e0d1b2a9-1.digest b/crates/crust-core/tests/data/import_baselines/cornellbox_lookdev_usda-937b5a30e0d1b2a9-1.digest new file mode 100644 index 000000000..c7d7c52c1 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/cornellbox_lookdev_usda-937b5a30e0d1b2a9-1.digest @@ -0,0 +1,40 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/scene/camera1") +camera: Camera { origin: Vec3A(0.0074343784, 1.9913422, 4.0133057), lower_left_corner: Vec3A(-8.881443, -3.0086517, -0.98669434), horizontal: Vec3A(17.777756, 0.0, 0.0), vertical: Vec3A(0.0, 9.999988, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: Some(Vec4(0.0, 0.0, -1.0, 3.9133058)), far: Some(Vec4(0.0, 0.0, 1.0, 9995.986)), planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: None +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 640, height: 360, region: PixelRect { x0: 0, y0: 0, x1: 640, y1: 360 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 12.700017, aperture: [25.4, 25.4], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 5.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/cornellbox_lookdev.usda", "$TMP/crust_mcp_cli/worked_session/cornellbox.usda"], invisible_overrides: Some(0) } +layer: $TMP/crust_mcp_cli/worked_session/cornellbox.usda +layer: $DIR/cornellbox_lookdev.usda +warning: Warning { code: MaterialFallbackDefault, kind: Skipped, count: 1, prims: ["/scene/Looks/initialShadingGroup"], message: "Material /scene/Looks/initialShadingGroup has no surface shader — using default grey OpenPBR" } +lights: 1 +light 0: dome name Some("/scene/Sky") lpe None pmf 1.0 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 5 geometries, PrimitiveBreakdown { triangles: 822, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 2 } top level, PrimitiveBreakdown { triangles: 1582, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 2 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 4.0 motion [] pieces all=10:88b22fc3345d5b05 camera=10:88b22fc3345d5b05 shadow=10:88b22fc3345d5b05 indirect=10:88b22fc3345d5b05 +geom 1: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.2 motion [] pieces all=760:c2b60a75c52c78b9 camera=760:c2b60a75c52c78b9 shadow=760:c2b60a75c52c78b9 indirect=760:c2b60a75c52c78b9 +geom 2: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=12:94a297badef437e1 camera=12:94a297badef437e1 shadow=12:94a297badef437e1 indirect=12:94a297badef437e1 +geom 3: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.25 motion [] pieces all=800:4a8c9f44d777e131 camera=800:4a8c9f44d777e131 shadow=800:4a8c9f44d777e131 indirect=800:4a8c9f44d777e131 +geom 4: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.3585339 motion [] pieces all=760:2344ecf63e12c441 camera=760:2344ecf63e12c441 shadow=760:2344ecf63e12c441 indirect=760:2344ecf63e12c441 +provenance material /scene/Looks/initialShadingGroup: MaterialOrigin { slots: [0, 1, 2, 3, 4], displaced: false } +provenance light /scene/Sky: LightOrigin { index: 0, geoms: 0..0 } +provenance geometry 0..1: /scene/pCube1 +provenance geometry 1..2: /scene/pSphere1 +provenance geometry 2..3: /scene/pCube2 +provenance geometry 3..4: /scene/pTorus1 +provenance geometry 4..5: /scene/pSphere2 +provenance mesh: MeshOrigin { geom_id: 0, slot: 0, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 1, slot: 1, baked: false, moving: false } +provenance mesh: MeshOrigin { geom_id: 2, slot: 2, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 3, slot: 3, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 4, slot: 1, baked: false, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 12343188411137242430, n_points: 8, n_indices: 20, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 1: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 17119738035130870988, n_points: 382, n_indices: 1560, n_uvs: None, smooth: false, material: 0 }), placements: 2, shared: false, displaced: false } +provenance mesh slot 2: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 1739488954094729910, n_points: 8, n_indices: 24, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 3: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 6096447469814747168, n_points: 400, n_indices: 1600, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: true }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/scene/camera1"), cameras: ["/scene/camera1"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/scene/camera1"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/cornellbox_lookdev_usda-937b5a30e0d1b2a9-1.image b/crates/crust-core/tests/data/import_baselines/cornellbox_lookdev_usda-937b5a30e0d1b2a9-1.image new file mode 100644 index 000000000..0f9205e21 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/cornellbox_lookdev_usda-937b5a30e0d1b2a9-1.image @@ -0,0 +1 @@ +640x360 16spp clamp-off c0a8018fae7df9ad diff --git a/crates/crust-core/tests/data/import_baselines/cornellbox_lookdev_usda-a0bb21684d68d231-1.digest b/crates/crust-core/tests/data/import_baselines/cornellbox_lookdev_usda-a0bb21684d68d231-1.digest new file mode 100644 index 000000000..c7d7c52c1 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/cornellbox_lookdev_usda-a0bb21684d68d231-1.digest @@ -0,0 +1,40 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/scene/camera1") +camera: Camera { origin: Vec3A(0.0074343784, 1.9913422, 4.0133057), lower_left_corner: Vec3A(-8.881443, -3.0086517, -0.98669434), horizontal: Vec3A(17.777756, 0.0, 0.0), vertical: Vec3A(0.0, 9.999988, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: Some(Vec4(0.0, 0.0, -1.0, 3.9133058)), far: Some(Vec4(0.0, 0.0, 1.0, 9995.986)), planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: None +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 640, height: 360, region: PixelRect { x0: 0, y0: 0, x1: 640, y1: 360 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 12.700017, aperture: [25.4, 25.4], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 5.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/cornellbox_lookdev.usda", "$TMP/crust_mcp_cli/worked_session/cornellbox.usda"], invisible_overrides: Some(0) } +layer: $TMP/crust_mcp_cli/worked_session/cornellbox.usda +layer: $DIR/cornellbox_lookdev.usda +warning: Warning { code: MaterialFallbackDefault, kind: Skipped, count: 1, prims: ["/scene/Looks/initialShadingGroup"], message: "Material /scene/Looks/initialShadingGroup has no surface shader — using default grey OpenPBR" } +lights: 1 +light 0: dome name Some("/scene/Sky") lpe None pmf 1.0 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 5 geometries, PrimitiveBreakdown { triangles: 822, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 2 } top level, PrimitiveBreakdown { triangles: 1582, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 2 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 4.0 motion [] pieces all=10:88b22fc3345d5b05 camera=10:88b22fc3345d5b05 shadow=10:88b22fc3345d5b05 indirect=10:88b22fc3345d5b05 +geom 1: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.2 motion [] pieces all=760:c2b60a75c52c78b9 camera=760:c2b60a75c52c78b9 shadow=760:c2b60a75c52c78b9 indirect=760:c2b60a75c52c78b9 +geom 2: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=12:94a297badef437e1 camera=12:94a297badef437e1 shadow=12:94a297badef437e1 indirect=12:94a297badef437e1 +geom 3: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.25 motion [] pieces all=800:4a8c9f44d777e131 camera=800:4a8c9f44d777e131 shadow=800:4a8c9f44d777e131 indirect=800:4a8c9f44d777e131 +geom 4: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.3585339 motion [] pieces all=760:2344ecf63e12c441 camera=760:2344ecf63e12c441 shadow=760:2344ecf63e12c441 indirect=760:2344ecf63e12c441 +provenance material /scene/Looks/initialShadingGroup: MaterialOrigin { slots: [0, 1, 2, 3, 4], displaced: false } +provenance light /scene/Sky: LightOrigin { index: 0, geoms: 0..0 } +provenance geometry 0..1: /scene/pCube1 +provenance geometry 1..2: /scene/pSphere1 +provenance geometry 2..3: /scene/pCube2 +provenance geometry 3..4: /scene/pTorus1 +provenance geometry 4..5: /scene/pSphere2 +provenance mesh: MeshOrigin { geom_id: 0, slot: 0, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 1, slot: 1, baked: false, moving: false } +provenance mesh: MeshOrigin { geom_id: 2, slot: 2, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 3, slot: 3, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 4, slot: 1, baked: false, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 12343188411137242430, n_points: 8, n_indices: 20, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 1: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 17119738035130870988, n_points: 382, n_indices: 1560, n_uvs: None, smooth: false, material: 0 }), placements: 2, shared: false, displaced: false } +provenance mesh slot 2: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 1739488954094729910, n_points: 8, n_indices: 24, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 3: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 6096447469814747168, n_points: 400, n_indices: 1600, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: true }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/scene/camera1"), cameras: ["/scene/camera1"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/scene/camera1"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/cornellbox_lookdev_usda-a0bb21684d68d231-1.image b/crates/crust-core/tests/data/import_baselines/cornellbox_lookdev_usda-a0bb21684d68d231-1.image new file mode 100644 index 000000000..7172edbfe --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/cornellbox_lookdev_usda-a0bb21684d68d231-1.image @@ -0,0 +1 @@ +640x360 16spp clamp-off 64ede904b11bab22 diff --git a/crates/crust-core/tests/data/import_baselines/cornellbox_lookdev_usda-f5ac4ca7187d0afa-1.digest b/crates/crust-core/tests/data/import_baselines/cornellbox_lookdev_usda-f5ac4ca7187d0afa-1.digest new file mode 100644 index 000000000..2a84f68ff --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/cornellbox_lookdev_usda-f5ac4ca7187d0afa-1.digest @@ -0,0 +1,44 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/scene/camera1") +camera: Camera { origin: Vec3A(0.0074343784, 1.9913422, 4.0133057), lower_left_corner: Vec3A(-8.881443, -3.0086517, -0.98669434), horizontal: Vec3A(17.777756, 0.0, 0.0), vertical: Vec3A(0.0, 9.999988, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: Some(Vec4(0.0, 0.0, -1.0, 3.9133058)), far: Some(Vec4(0.0, 0.0, 1.0, 9995.986)), planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: None +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 640, height: 360, region: PixelRect { x0: 0, y0: 0, x1: 640, y1: 360 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 12.700017, aperture: [25.4, 25.4], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 5.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/cornellbox_lookdev.usda", "$TMP/crust_mcp_cli/worked_session/cornellbox.usda"], invisible_overrides: Some(0) } +layer: $TMP/crust_mcp_cli/worked_session/cornellbox.usda +layer: $DIR/cornellbox_lookdev.usda +warning: Warning { code: MaterialFallbackDefault, kind: Skipped, count: 1, prims: ["/scene/Looks/initialShadingGroup"], message: "Material /scene/Looks/initialShadingGroup has no surface shader — using default grey OpenPBR" } +lights: 2 +light 0: dome name Some("/scene/Sky") lpe None pmf 0.5 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 1: area name Some("/scene/key") lpe None pmf 0.5 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 6 geometries, PrimitiveBreakdown { triangles: 824, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 2 } top level, PrimitiveBreakdown { triangles: 1584, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 2 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 4.0 motion [] pieces all=10:88b22fc3345d5b05 camera=10:88b22fc3345d5b05 shadow=10:88b22fc3345d5b05 indirect=10:88b22fc3345d5b05 +geom 1: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.2 motion [] pieces all=760:c2b60a75c52c78b9 camera=760:c2b60a75c52c78b9 shadow=760:c2b60a75c52c78b9 indirect=760:c2b60a75c52c78b9 +geom 2: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=12:94a297badef437e1 camera=12:94a297badef437e1 shadow=12:94a297badef437e1 indirect=12:94a297badef437e1 +geom 3: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.25 motion [] pieces all=800:4a8c9f44d777e131 camera=800:4a8c9f44d777e131 shadow=800:4a8c9f44d777e131 indirect=800:4a8c9f44d777e131 +geom 4: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.3585339 motion [] pieces all=760:2344ecf63e12c441 camera=760:2344ecf63e12c441 shadow=760:2344ecf63e12c441 indirect=760:2344ecf63e12c441 +geom 5: material #1 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:f2afad713c5cb01d camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=2:f2afad713c5cb01d +provenance material /scene/Looks/initialShadingGroup: MaterialOrigin { slots: [0, 1, 2, 3, 4], displaced: false } +provenance light /scene/Sky: LightOrigin { index: 0, geoms: 0..0 } +provenance light /scene/key: LightOrigin { index: 1, geoms: 5..6 } +provenance geometry 0..1: /scene/pCube1 +provenance geometry 1..2: /scene/pSphere1 +provenance geometry 2..3: /scene/pCube2 +provenance geometry 3..4: /scene/pTorus1 +provenance geometry 4..5: /scene/pSphere2 +provenance geometry 5..6: /scene/key +provenance mesh: MeshOrigin { geom_id: 0, slot: 0, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 1, slot: 1, baked: false, moving: false } +provenance mesh: MeshOrigin { geom_id: 2, slot: 2, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 3, slot: 3, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 4, slot: 1, baked: false, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 12343188411137242430, n_points: 8, n_indices: 20, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 1: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 17119738035130870988, n_points: 382, n_indices: 1560, n_uvs: None, smooth: false, material: 0 }), placements: 2, shared: false, displaced: false } +provenance mesh slot 2: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 1739488954094729910, n_points: 8, n_indices: 24, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 3: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 6096447469814747168, n_points: 400, n_indices: 1600, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: true }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/scene/camera1"), cameras: ["/scene/camera1"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/scene/camera1"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/cornellbox_lookdev_usda-f5ac4ca7187d0afa-1.image b/crates/crust-core/tests/data/import_baselines/cornellbox_lookdev_usda-f5ac4ca7187d0afa-1.image new file mode 100644 index 000000000..2d80680ea --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/cornellbox_lookdev_usda-f5ac4ca7187d0afa-1.image @@ -0,0 +1 @@ +640x360 16spp clamp-off 1c648dd042d37b6a diff --git a/crates/crust-core/tests/data/import_baselines/cornellbox_usda-015a68615622d007-1.digest b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-015a68615622d007-1.digest new file mode 100644 index 000000000..0e859a952 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-015a68615622d007-1.digest @@ -0,0 +1,40 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/scene/camera1") +camera: Camera { origin: Vec3A(0.0074343784, 1.9913422, 4.0133057), lower_left_corner: Vec3A(-8.881443, -3.0086517, -0.98669434), horizontal: Vec3A(17.777756, 0.0, 0.0), vertical: Vec3A(0.0, 9.999988, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: Some(Vec4(0.0, 0.0, -1.0, 3.9133058)), far: Some(Vec4(0.0, 0.0, 1.0, 9995.986)), planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: None +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 640, height: 360, region: PixelRect { x0: 0, y0: 0, x1: 640, y1: 360 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 12.700017, aperture: [25.4, 25.4], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 5.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/cornellbox.usda"], invisible_overrides: Some(0) } +layer: $DIR/cornellbox.usda +warning: Warning { code: AssetUnsupportedByHost, kind: Skipped, count: 1, prims: [], message: "No asset loader: environment map $DIR/sky_gradient.exr ignored — the dome falls back to its uniform colour. Use Scene::from_usd_with_assets to supply one." } +warning: Warning { code: MaterialFallbackDefault, kind: Skipped, count: 1, prims: ["/scene/Looks/initialShadingGroup"], message: "Material /scene/Looks/initialShadingGroup has no surface shader — using default grey OpenPBR" } +lights: 1 +light 0: dome name Some("/scene/Sky") lpe None pmf 1.0 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 5 geometries, PrimitiveBreakdown { triangles: 822, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 2 } top level, PrimitiveBreakdown { triangles: 1582, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 2 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 4.0 motion [] pieces all=10:88b22fc3345d5b05 camera=10:88b22fc3345d5b05 shadow=10:88b22fc3345d5b05 indirect=10:88b22fc3345d5b05 +geom 1: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.2 motion [] pieces all=760:c2b60a75c52c78b9 camera=760:c2b60a75c52c78b9 shadow=760:c2b60a75c52c78b9 indirect=760:c2b60a75c52c78b9 +geom 2: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=12:94a297badef437e1 camera=12:94a297badef437e1 shadow=12:94a297badef437e1 indirect=12:94a297badef437e1 +geom 3: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.25 motion [] pieces all=800:4a8c9f44d777e131 camera=800:4a8c9f44d777e131 shadow=800:4a8c9f44d777e131 indirect=800:4a8c9f44d777e131 +geom 4: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.3585339 motion [] pieces all=760:2344ecf63e12c441 camera=760:2344ecf63e12c441 shadow=760:2344ecf63e12c441 indirect=760:2344ecf63e12c441 +provenance material /scene/Looks/initialShadingGroup: MaterialOrigin { slots: [0, 1, 2, 3, 4], displaced: false } +provenance light /scene/Sky: LightOrigin { index: 0, geoms: 0..0 } +provenance geometry 0..1: /scene/pCube1 +provenance geometry 1..2: /scene/pSphere1 +provenance geometry 2..3: /scene/pCube2 +provenance geometry 3..4: /scene/pTorus1 +provenance geometry 4..5: /scene/pSphere2 +provenance mesh: MeshOrigin { geom_id: 0, slot: 0, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 1, slot: 1, baked: false, moving: false } +provenance mesh: MeshOrigin { geom_id: 2, slot: 2, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 3, slot: 3, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 4, slot: 1, baked: false, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 12343188411137242430, n_points: 8, n_indices: 20, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 1: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 17119738035130870988, n_points: 382, n_indices: 1560, n_uvs: None, smooth: false, material: 0 }), placements: 2, shared: false, displaced: false } +provenance mesh slot 2: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 1739488954094729910, n_points: 8, n_indices: 24, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 3: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 6096447469814747168, n_points: 400, n_indices: 1600, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/scene/camera1"), cameras: ["/scene/camera1"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/scene/camera1"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/cornellbox_usda-015a68615622d007-1.image b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-015a68615622d007-1.image new file mode 100644 index 000000000..ba4884437 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-015a68615622d007-1.image @@ -0,0 +1 @@ +640x360 16spp clamp-off 52a1a46f3a46d230 diff --git a/crates/crust-core/tests/data/import_baselines/cornellbox_usda-015a68615622d007-2.digest b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-015a68615622d007-2.digest new file mode 100644 index 000000000..0e859a952 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-015a68615622d007-2.digest @@ -0,0 +1,40 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/scene/camera1") +camera: Camera { origin: Vec3A(0.0074343784, 1.9913422, 4.0133057), lower_left_corner: Vec3A(-8.881443, -3.0086517, -0.98669434), horizontal: Vec3A(17.777756, 0.0, 0.0), vertical: Vec3A(0.0, 9.999988, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: Some(Vec4(0.0, 0.0, -1.0, 3.9133058)), far: Some(Vec4(0.0, 0.0, 1.0, 9995.986)), planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: None +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 640, height: 360, region: PixelRect { x0: 0, y0: 0, x1: 640, y1: 360 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 12.700017, aperture: [25.4, 25.4], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 5.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/cornellbox.usda"], invisible_overrides: Some(0) } +layer: $DIR/cornellbox.usda +warning: Warning { code: AssetUnsupportedByHost, kind: Skipped, count: 1, prims: [], message: "No asset loader: environment map $DIR/sky_gradient.exr ignored — the dome falls back to its uniform colour. Use Scene::from_usd_with_assets to supply one." } +warning: Warning { code: MaterialFallbackDefault, kind: Skipped, count: 1, prims: ["/scene/Looks/initialShadingGroup"], message: "Material /scene/Looks/initialShadingGroup has no surface shader — using default grey OpenPBR" } +lights: 1 +light 0: dome name Some("/scene/Sky") lpe None pmf 1.0 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 5 geometries, PrimitiveBreakdown { triangles: 822, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 2 } top level, PrimitiveBreakdown { triangles: 1582, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 2 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 4.0 motion [] pieces all=10:88b22fc3345d5b05 camera=10:88b22fc3345d5b05 shadow=10:88b22fc3345d5b05 indirect=10:88b22fc3345d5b05 +geom 1: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.2 motion [] pieces all=760:c2b60a75c52c78b9 camera=760:c2b60a75c52c78b9 shadow=760:c2b60a75c52c78b9 indirect=760:c2b60a75c52c78b9 +geom 2: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=12:94a297badef437e1 camera=12:94a297badef437e1 shadow=12:94a297badef437e1 indirect=12:94a297badef437e1 +geom 3: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.25 motion [] pieces all=800:4a8c9f44d777e131 camera=800:4a8c9f44d777e131 shadow=800:4a8c9f44d777e131 indirect=800:4a8c9f44d777e131 +geom 4: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.3585339 motion [] pieces all=760:2344ecf63e12c441 camera=760:2344ecf63e12c441 shadow=760:2344ecf63e12c441 indirect=760:2344ecf63e12c441 +provenance material /scene/Looks/initialShadingGroup: MaterialOrigin { slots: [0, 1, 2, 3, 4], displaced: false } +provenance light /scene/Sky: LightOrigin { index: 0, geoms: 0..0 } +provenance geometry 0..1: /scene/pCube1 +provenance geometry 1..2: /scene/pSphere1 +provenance geometry 2..3: /scene/pCube2 +provenance geometry 3..4: /scene/pTorus1 +provenance geometry 4..5: /scene/pSphere2 +provenance mesh: MeshOrigin { geom_id: 0, slot: 0, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 1, slot: 1, baked: false, moving: false } +provenance mesh: MeshOrigin { geom_id: 2, slot: 2, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 3, slot: 3, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 4, slot: 1, baked: false, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 12343188411137242430, n_points: 8, n_indices: 20, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 1: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 17119738035130870988, n_points: 382, n_indices: 1560, n_uvs: None, smooth: false, material: 0 }), placements: 2, shared: false, displaced: false } +provenance mesh slot 2: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 1739488954094729910, n_points: 8, n_indices: 24, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 3: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 6096447469814747168, n_points: 400, n_indices: 1600, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/scene/camera1"), cameras: ["/scene/camera1"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/scene/camera1"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/cornellbox_usda-015a68615622d007-2.image b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-015a68615622d007-2.image new file mode 100644 index 000000000..ba4884437 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-015a68615622d007-2.image @@ -0,0 +1 @@ +640x360 16spp clamp-off 52a1a46f3a46d230 diff --git a/crates/crust-core/tests/data/import_baselines/cornellbox_usda-021e0477d02e8b56-1.digest b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-021e0477d02e8b56-1.digest new file mode 100644 index 000000000..0e859a952 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-021e0477d02e8b56-1.digest @@ -0,0 +1,40 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/scene/camera1") +camera: Camera { origin: Vec3A(0.0074343784, 1.9913422, 4.0133057), lower_left_corner: Vec3A(-8.881443, -3.0086517, -0.98669434), horizontal: Vec3A(17.777756, 0.0, 0.0), vertical: Vec3A(0.0, 9.999988, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: Some(Vec4(0.0, 0.0, -1.0, 3.9133058)), far: Some(Vec4(0.0, 0.0, 1.0, 9995.986)), planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: None +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 640, height: 360, region: PixelRect { x0: 0, y0: 0, x1: 640, y1: 360 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 12.700017, aperture: [25.4, 25.4], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 5.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/cornellbox.usda"], invisible_overrides: Some(0) } +layer: $DIR/cornellbox.usda +warning: Warning { code: AssetUnsupportedByHost, kind: Skipped, count: 1, prims: [], message: "No asset loader: environment map $DIR/sky_gradient.exr ignored — the dome falls back to its uniform colour. Use Scene::from_usd_with_assets to supply one." } +warning: Warning { code: MaterialFallbackDefault, kind: Skipped, count: 1, prims: ["/scene/Looks/initialShadingGroup"], message: "Material /scene/Looks/initialShadingGroup has no surface shader — using default grey OpenPBR" } +lights: 1 +light 0: dome name Some("/scene/Sky") lpe None pmf 1.0 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 5 geometries, PrimitiveBreakdown { triangles: 822, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 2 } top level, PrimitiveBreakdown { triangles: 1582, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 2 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 4.0 motion [] pieces all=10:88b22fc3345d5b05 camera=10:88b22fc3345d5b05 shadow=10:88b22fc3345d5b05 indirect=10:88b22fc3345d5b05 +geom 1: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.2 motion [] pieces all=760:c2b60a75c52c78b9 camera=760:c2b60a75c52c78b9 shadow=760:c2b60a75c52c78b9 indirect=760:c2b60a75c52c78b9 +geom 2: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=12:94a297badef437e1 camera=12:94a297badef437e1 shadow=12:94a297badef437e1 indirect=12:94a297badef437e1 +geom 3: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.25 motion [] pieces all=800:4a8c9f44d777e131 camera=800:4a8c9f44d777e131 shadow=800:4a8c9f44d777e131 indirect=800:4a8c9f44d777e131 +geom 4: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.3585339 motion [] pieces all=760:2344ecf63e12c441 camera=760:2344ecf63e12c441 shadow=760:2344ecf63e12c441 indirect=760:2344ecf63e12c441 +provenance material /scene/Looks/initialShadingGroup: MaterialOrigin { slots: [0, 1, 2, 3, 4], displaced: false } +provenance light /scene/Sky: LightOrigin { index: 0, geoms: 0..0 } +provenance geometry 0..1: /scene/pCube1 +provenance geometry 1..2: /scene/pSphere1 +provenance geometry 2..3: /scene/pCube2 +provenance geometry 3..4: /scene/pTorus1 +provenance geometry 4..5: /scene/pSphere2 +provenance mesh: MeshOrigin { geom_id: 0, slot: 0, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 1, slot: 1, baked: false, moving: false } +provenance mesh: MeshOrigin { geom_id: 2, slot: 2, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 3, slot: 3, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 4, slot: 1, baked: false, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 12343188411137242430, n_points: 8, n_indices: 20, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 1: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 17119738035130870988, n_points: 382, n_indices: 1560, n_uvs: None, smooth: false, material: 0 }), placements: 2, shared: false, displaced: false } +provenance mesh slot 2: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 1739488954094729910, n_points: 8, n_indices: 24, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 3: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 6096447469814747168, n_points: 400, n_indices: 1600, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/scene/camera1"), cameras: ["/scene/camera1"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/scene/camera1"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/cornellbox_usda-021e0477d02e8b56-1.image b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-021e0477d02e8b56-1.image new file mode 100644 index 000000000..ba4884437 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-021e0477d02e8b56-1.image @@ -0,0 +1 @@ +640x360 16spp clamp-off 52a1a46f3a46d230 diff --git a/crates/crust-core/tests/data/import_baselines/cornellbox_usda-08de1880a086a764-1.digest b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-08de1880a086a764-1.digest new file mode 100644 index 000000000..0e859a952 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-08de1880a086a764-1.digest @@ -0,0 +1,40 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/scene/camera1") +camera: Camera { origin: Vec3A(0.0074343784, 1.9913422, 4.0133057), lower_left_corner: Vec3A(-8.881443, -3.0086517, -0.98669434), horizontal: Vec3A(17.777756, 0.0, 0.0), vertical: Vec3A(0.0, 9.999988, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: Some(Vec4(0.0, 0.0, -1.0, 3.9133058)), far: Some(Vec4(0.0, 0.0, 1.0, 9995.986)), planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: None +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 640, height: 360, region: PixelRect { x0: 0, y0: 0, x1: 640, y1: 360 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 12.700017, aperture: [25.4, 25.4], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 5.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/cornellbox.usda"], invisible_overrides: Some(0) } +layer: $DIR/cornellbox.usda +warning: Warning { code: AssetUnsupportedByHost, kind: Skipped, count: 1, prims: [], message: "No asset loader: environment map $DIR/sky_gradient.exr ignored — the dome falls back to its uniform colour. Use Scene::from_usd_with_assets to supply one." } +warning: Warning { code: MaterialFallbackDefault, kind: Skipped, count: 1, prims: ["/scene/Looks/initialShadingGroup"], message: "Material /scene/Looks/initialShadingGroup has no surface shader — using default grey OpenPBR" } +lights: 1 +light 0: dome name Some("/scene/Sky") lpe None pmf 1.0 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 5 geometries, PrimitiveBreakdown { triangles: 822, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 2 } top level, PrimitiveBreakdown { triangles: 1582, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 2 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 4.0 motion [] pieces all=10:88b22fc3345d5b05 camera=10:88b22fc3345d5b05 shadow=10:88b22fc3345d5b05 indirect=10:88b22fc3345d5b05 +geom 1: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.2 motion [] pieces all=760:c2b60a75c52c78b9 camera=760:c2b60a75c52c78b9 shadow=760:c2b60a75c52c78b9 indirect=760:c2b60a75c52c78b9 +geom 2: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=12:94a297badef437e1 camera=12:94a297badef437e1 shadow=12:94a297badef437e1 indirect=12:94a297badef437e1 +geom 3: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.25 motion [] pieces all=800:4a8c9f44d777e131 camera=800:4a8c9f44d777e131 shadow=800:4a8c9f44d777e131 indirect=800:4a8c9f44d777e131 +geom 4: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.3585339 motion [] pieces all=760:2344ecf63e12c441 camera=760:2344ecf63e12c441 shadow=760:2344ecf63e12c441 indirect=760:2344ecf63e12c441 +provenance material /scene/Looks/initialShadingGroup: MaterialOrigin { slots: [0, 1, 2, 3, 4], displaced: false } +provenance light /scene/Sky: LightOrigin { index: 0, geoms: 0..0 } +provenance geometry 0..1: /scene/pCube1 +provenance geometry 1..2: /scene/pSphere1 +provenance geometry 2..3: /scene/pCube2 +provenance geometry 3..4: /scene/pTorus1 +provenance geometry 4..5: /scene/pSphere2 +provenance mesh: MeshOrigin { geom_id: 0, slot: 0, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 1, slot: 1, baked: false, moving: false } +provenance mesh: MeshOrigin { geom_id: 2, slot: 2, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 3, slot: 3, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 4, slot: 1, baked: false, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 12343188411137242430, n_points: 8, n_indices: 20, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 1: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 17119738035130870988, n_points: 382, n_indices: 1560, n_uvs: None, smooth: false, material: 0 }), placements: 2, shared: false, displaced: false } +provenance mesh slot 2: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 1739488954094729910, n_points: 8, n_indices: 24, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 3: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 6096447469814747168, n_points: 400, n_indices: 1600, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/scene/camera1"), cameras: ["/scene/camera1"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/scene/camera1"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/cornellbox_usda-08de1880a086a764-1.image b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-08de1880a086a764-1.image new file mode 100644 index 000000000..ba4884437 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-08de1880a086a764-1.image @@ -0,0 +1 @@ +640x360 16spp clamp-off 52a1a46f3a46d230 diff --git a/crates/crust-core/tests/data/import_baselines/cornellbox_usda-0c23ef94659b6f93-1.digest b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-0c23ef94659b6f93-1.digest new file mode 100644 index 000000000..0e859a952 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-0c23ef94659b6f93-1.digest @@ -0,0 +1,40 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/scene/camera1") +camera: Camera { origin: Vec3A(0.0074343784, 1.9913422, 4.0133057), lower_left_corner: Vec3A(-8.881443, -3.0086517, -0.98669434), horizontal: Vec3A(17.777756, 0.0, 0.0), vertical: Vec3A(0.0, 9.999988, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: Some(Vec4(0.0, 0.0, -1.0, 3.9133058)), far: Some(Vec4(0.0, 0.0, 1.0, 9995.986)), planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: None +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 640, height: 360, region: PixelRect { x0: 0, y0: 0, x1: 640, y1: 360 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 12.700017, aperture: [25.4, 25.4], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 5.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/cornellbox.usda"], invisible_overrides: Some(0) } +layer: $DIR/cornellbox.usda +warning: Warning { code: AssetUnsupportedByHost, kind: Skipped, count: 1, prims: [], message: "No asset loader: environment map $DIR/sky_gradient.exr ignored — the dome falls back to its uniform colour. Use Scene::from_usd_with_assets to supply one." } +warning: Warning { code: MaterialFallbackDefault, kind: Skipped, count: 1, prims: ["/scene/Looks/initialShadingGroup"], message: "Material /scene/Looks/initialShadingGroup has no surface shader — using default grey OpenPBR" } +lights: 1 +light 0: dome name Some("/scene/Sky") lpe None pmf 1.0 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 5 geometries, PrimitiveBreakdown { triangles: 822, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 2 } top level, PrimitiveBreakdown { triangles: 1582, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 2 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 4.0 motion [] pieces all=10:88b22fc3345d5b05 camera=10:88b22fc3345d5b05 shadow=10:88b22fc3345d5b05 indirect=10:88b22fc3345d5b05 +geom 1: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.2 motion [] pieces all=760:c2b60a75c52c78b9 camera=760:c2b60a75c52c78b9 shadow=760:c2b60a75c52c78b9 indirect=760:c2b60a75c52c78b9 +geom 2: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=12:94a297badef437e1 camera=12:94a297badef437e1 shadow=12:94a297badef437e1 indirect=12:94a297badef437e1 +geom 3: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.25 motion [] pieces all=800:4a8c9f44d777e131 camera=800:4a8c9f44d777e131 shadow=800:4a8c9f44d777e131 indirect=800:4a8c9f44d777e131 +geom 4: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.3585339 motion [] pieces all=760:2344ecf63e12c441 camera=760:2344ecf63e12c441 shadow=760:2344ecf63e12c441 indirect=760:2344ecf63e12c441 +provenance material /scene/Looks/initialShadingGroup: MaterialOrigin { slots: [0, 1, 2, 3, 4], displaced: false } +provenance light /scene/Sky: LightOrigin { index: 0, geoms: 0..0 } +provenance geometry 0..1: /scene/pCube1 +provenance geometry 1..2: /scene/pSphere1 +provenance geometry 2..3: /scene/pCube2 +provenance geometry 3..4: /scene/pTorus1 +provenance geometry 4..5: /scene/pSphere2 +provenance mesh: MeshOrigin { geom_id: 0, slot: 0, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 1, slot: 1, baked: false, moving: false } +provenance mesh: MeshOrigin { geom_id: 2, slot: 2, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 3, slot: 3, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 4, slot: 1, baked: false, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 12343188411137242430, n_points: 8, n_indices: 20, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 1: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 17119738035130870988, n_points: 382, n_indices: 1560, n_uvs: None, smooth: false, material: 0 }), placements: 2, shared: false, displaced: false } +provenance mesh slot 2: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 1739488954094729910, n_points: 8, n_indices: 24, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 3: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 6096447469814747168, n_points: 400, n_indices: 1600, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/scene/camera1"), cameras: ["/scene/camera1"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/scene/camera1"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/cornellbox_usda-0c23ef94659b6f93-1.image b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-0c23ef94659b6f93-1.image new file mode 100644 index 000000000..ba4884437 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-0c23ef94659b6f93-1.image @@ -0,0 +1 @@ +640x360 16spp clamp-off 52a1a46f3a46d230 diff --git a/crates/crust-core/tests/data/import_baselines/cornellbox_usda-0c23ef94659b6f93-2.digest b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-0c23ef94659b6f93-2.digest new file mode 100644 index 000000000..0e859a952 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-0c23ef94659b6f93-2.digest @@ -0,0 +1,40 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/scene/camera1") +camera: Camera { origin: Vec3A(0.0074343784, 1.9913422, 4.0133057), lower_left_corner: Vec3A(-8.881443, -3.0086517, -0.98669434), horizontal: Vec3A(17.777756, 0.0, 0.0), vertical: Vec3A(0.0, 9.999988, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: Some(Vec4(0.0, 0.0, -1.0, 3.9133058)), far: Some(Vec4(0.0, 0.0, 1.0, 9995.986)), planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: None +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 640, height: 360, region: PixelRect { x0: 0, y0: 0, x1: 640, y1: 360 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 12.700017, aperture: [25.4, 25.4], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 5.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/cornellbox.usda"], invisible_overrides: Some(0) } +layer: $DIR/cornellbox.usda +warning: Warning { code: AssetUnsupportedByHost, kind: Skipped, count: 1, prims: [], message: "No asset loader: environment map $DIR/sky_gradient.exr ignored — the dome falls back to its uniform colour. Use Scene::from_usd_with_assets to supply one." } +warning: Warning { code: MaterialFallbackDefault, kind: Skipped, count: 1, prims: ["/scene/Looks/initialShadingGroup"], message: "Material /scene/Looks/initialShadingGroup has no surface shader — using default grey OpenPBR" } +lights: 1 +light 0: dome name Some("/scene/Sky") lpe None pmf 1.0 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 5 geometries, PrimitiveBreakdown { triangles: 822, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 2 } top level, PrimitiveBreakdown { triangles: 1582, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 2 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 4.0 motion [] pieces all=10:88b22fc3345d5b05 camera=10:88b22fc3345d5b05 shadow=10:88b22fc3345d5b05 indirect=10:88b22fc3345d5b05 +geom 1: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.2 motion [] pieces all=760:c2b60a75c52c78b9 camera=760:c2b60a75c52c78b9 shadow=760:c2b60a75c52c78b9 indirect=760:c2b60a75c52c78b9 +geom 2: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=12:94a297badef437e1 camera=12:94a297badef437e1 shadow=12:94a297badef437e1 indirect=12:94a297badef437e1 +geom 3: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.25 motion [] pieces all=800:4a8c9f44d777e131 camera=800:4a8c9f44d777e131 shadow=800:4a8c9f44d777e131 indirect=800:4a8c9f44d777e131 +geom 4: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.3585339 motion [] pieces all=760:2344ecf63e12c441 camera=760:2344ecf63e12c441 shadow=760:2344ecf63e12c441 indirect=760:2344ecf63e12c441 +provenance material /scene/Looks/initialShadingGroup: MaterialOrigin { slots: [0, 1, 2, 3, 4], displaced: false } +provenance light /scene/Sky: LightOrigin { index: 0, geoms: 0..0 } +provenance geometry 0..1: /scene/pCube1 +provenance geometry 1..2: /scene/pSphere1 +provenance geometry 2..3: /scene/pCube2 +provenance geometry 3..4: /scene/pTorus1 +provenance geometry 4..5: /scene/pSphere2 +provenance mesh: MeshOrigin { geom_id: 0, slot: 0, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 1, slot: 1, baked: false, moving: false } +provenance mesh: MeshOrigin { geom_id: 2, slot: 2, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 3, slot: 3, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 4, slot: 1, baked: false, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 12343188411137242430, n_points: 8, n_indices: 20, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 1: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 17119738035130870988, n_points: 382, n_indices: 1560, n_uvs: None, smooth: false, material: 0 }), placements: 2, shared: false, displaced: false } +provenance mesh slot 2: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 1739488954094729910, n_points: 8, n_indices: 24, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 3: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 6096447469814747168, n_points: 400, n_indices: 1600, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/scene/camera1"), cameras: ["/scene/camera1"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/scene/camera1"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/cornellbox_usda-0c23ef94659b6f93-2.image b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-0c23ef94659b6f93-2.image new file mode 100644 index 000000000..ba4884437 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-0c23ef94659b6f93-2.image @@ -0,0 +1 @@ +640x360 16spp clamp-off 52a1a46f3a46d230 diff --git a/crates/crust-core/tests/data/import_baselines/cornellbox_usda-108152a6f960262b-1.digest b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-108152a6f960262b-1.digest new file mode 100644 index 000000000..0e859a952 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-108152a6f960262b-1.digest @@ -0,0 +1,40 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/scene/camera1") +camera: Camera { origin: Vec3A(0.0074343784, 1.9913422, 4.0133057), lower_left_corner: Vec3A(-8.881443, -3.0086517, -0.98669434), horizontal: Vec3A(17.777756, 0.0, 0.0), vertical: Vec3A(0.0, 9.999988, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: Some(Vec4(0.0, 0.0, -1.0, 3.9133058)), far: Some(Vec4(0.0, 0.0, 1.0, 9995.986)), planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: None +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 640, height: 360, region: PixelRect { x0: 0, y0: 0, x1: 640, y1: 360 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 12.700017, aperture: [25.4, 25.4], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 5.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/cornellbox.usda"], invisible_overrides: Some(0) } +layer: $DIR/cornellbox.usda +warning: Warning { code: AssetUnsupportedByHost, kind: Skipped, count: 1, prims: [], message: "No asset loader: environment map $DIR/sky_gradient.exr ignored — the dome falls back to its uniform colour. Use Scene::from_usd_with_assets to supply one." } +warning: Warning { code: MaterialFallbackDefault, kind: Skipped, count: 1, prims: ["/scene/Looks/initialShadingGroup"], message: "Material /scene/Looks/initialShadingGroup has no surface shader — using default grey OpenPBR" } +lights: 1 +light 0: dome name Some("/scene/Sky") lpe None pmf 1.0 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 5 geometries, PrimitiveBreakdown { triangles: 822, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 2 } top level, PrimitiveBreakdown { triangles: 1582, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 2 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 4.0 motion [] pieces all=10:88b22fc3345d5b05 camera=10:88b22fc3345d5b05 shadow=10:88b22fc3345d5b05 indirect=10:88b22fc3345d5b05 +geom 1: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.2 motion [] pieces all=760:c2b60a75c52c78b9 camera=760:c2b60a75c52c78b9 shadow=760:c2b60a75c52c78b9 indirect=760:c2b60a75c52c78b9 +geom 2: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=12:94a297badef437e1 camera=12:94a297badef437e1 shadow=12:94a297badef437e1 indirect=12:94a297badef437e1 +geom 3: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.25 motion [] pieces all=800:4a8c9f44d777e131 camera=800:4a8c9f44d777e131 shadow=800:4a8c9f44d777e131 indirect=800:4a8c9f44d777e131 +geom 4: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.3585339 motion [] pieces all=760:2344ecf63e12c441 camera=760:2344ecf63e12c441 shadow=760:2344ecf63e12c441 indirect=760:2344ecf63e12c441 +provenance material /scene/Looks/initialShadingGroup: MaterialOrigin { slots: [0, 1, 2, 3, 4], displaced: false } +provenance light /scene/Sky: LightOrigin { index: 0, geoms: 0..0 } +provenance geometry 0..1: /scene/pCube1 +provenance geometry 1..2: /scene/pSphere1 +provenance geometry 2..3: /scene/pCube2 +provenance geometry 3..4: /scene/pTorus1 +provenance geometry 4..5: /scene/pSphere2 +provenance mesh: MeshOrigin { geom_id: 0, slot: 0, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 1, slot: 1, baked: false, moving: false } +provenance mesh: MeshOrigin { geom_id: 2, slot: 2, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 3, slot: 3, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 4, slot: 1, baked: false, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 12343188411137242430, n_points: 8, n_indices: 20, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 1: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 17119738035130870988, n_points: 382, n_indices: 1560, n_uvs: None, smooth: false, material: 0 }), placements: 2, shared: false, displaced: false } +provenance mesh slot 2: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 1739488954094729910, n_points: 8, n_indices: 24, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 3: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 6096447469814747168, n_points: 400, n_indices: 1600, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/scene/camera1"), cameras: ["/scene/camera1"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/scene/camera1"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/cornellbox_usda-108152a6f960262b-1.image b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-108152a6f960262b-1.image new file mode 100644 index 000000000..ba4884437 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-108152a6f960262b-1.image @@ -0,0 +1 @@ +640x360 16spp clamp-off 52a1a46f3a46d230 diff --git a/crates/crust-core/tests/data/import_baselines/cornellbox_usda-108152a6f960262b-2.digest b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-108152a6f960262b-2.digest new file mode 100644 index 000000000..0e859a952 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-108152a6f960262b-2.digest @@ -0,0 +1,40 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/scene/camera1") +camera: Camera { origin: Vec3A(0.0074343784, 1.9913422, 4.0133057), lower_left_corner: Vec3A(-8.881443, -3.0086517, -0.98669434), horizontal: Vec3A(17.777756, 0.0, 0.0), vertical: Vec3A(0.0, 9.999988, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: Some(Vec4(0.0, 0.0, -1.0, 3.9133058)), far: Some(Vec4(0.0, 0.0, 1.0, 9995.986)), planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: None +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 640, height: 360, region: PixelRect { x0: 0, y0: 0, x1: 640, y1: 360 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 12.700017, aperture: [25.4, 25.4], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 5.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/cornellbox.usda"], invisible_overrides: Some(0) } +layer: $DIR/cornellbox.usda +warning: Warning { code: AssetUnsupportedByHost, kind: Skipped, count: 1, prims: [], message: "No asset loader: environment map $DIR/sky_gradient.exr ignored — the dome falls back to its uniform colour. Use Scene::from_usd_with_assets to supply one." } +warning: Warning { code: MaterialFallbackDefault, kind: Skipped, count: 1, prims: ["/scene/Looks/initialShadingGroup"], message: "Material /scene/Looks/initialShadingGroup has no surface shader — using default grey OpenPBR" } +lights: 1 +light 0: dome name Some("/scene/Sky") lpe None pmf 1.0 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 5 geometries, PrimitiveBreakdown { triangles: 822, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 2 } top level, PrimitiveBreakdown { triangles: 1582, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 2 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 4.0 motion [] pieces all=10:88b22fc3345d5b05 camera=10:88b22fc3345d5b05 shadow=10:88b22fc3345d5b05 indirect=10:88b22fc3345d5b05 +geom 1: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.2 motion [] pieces all=760:c2b60a75c52c78b9 camera=760:c2b60a75c52c78b9 shadow=760:c2b60a75c52c78b9 indirect=760:c2b60a75c52c78b9 +geom 2: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=12:94a297badef437e1 camera=12:94a297badef437e1 shadow=12:94a297badef437e1 indirect=12:94a297badef437e1 +geom 3: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.25 motion [] pieces all=800:4a8c9f44d777e131 camera=800:4a8c9f44d777e131 shadow=800:4a8c9f44d777e131 indirect=800:4a8c9f44d777e131 +geom 4: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.3585339 motion [] pieces all=760:2344ecf63e12c441 camera=760:2344ecf63e12c441 shadow=760:2344ecf63e12c441 indirect=760:2344ecf63e12c441 +provenance material /scene/Looks/initialShadingGroup: MaterialOrigin { slots: [0, 1, 2, 3, 4], displaced: false } +provenance light /scene/Sky: LightOrigin { index: 0, geoms: 0..0 } +provenance geometry 0..1: /scene/pCube1 +provenance geometry 1..2: /scene/pSphere1 +provenance geometry 2..3: /scene/pCube2 +provenance geometry 3..4: /scene/pTorus1 +provenance geometry 4..5: /scene/pSphere2 +provenance mesh: MeshOrigin { geom_id: 0, slot: 0, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 1, slot: 1, baked: false, moving: false } +provenance mesh: MeshOrigin { geom_id: 2, slot: 2, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 3, slot: 3, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 4, slot: 1, baked: false, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 12343188411137242430, n_points: 8, n_indices: 20, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 1: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 17119738035130870988, n_points: 382, n_indices: 1560, n_uvs: None, smooth: false, material: 0 }), placements: 2, shared: false, displaced: false } +provenance mesh slot 2: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 1739488954094729910, n_points: 8, n_indices: 24, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 3: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 6096447469814747168, n_points: 400, n_indices: 1600, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/scene/camera1"), cameras: ["/scene/camera1"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/scene/camera1"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/cornellbox_usda-108152a6f960262b-2.image b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-108152a6f960262b-2.image new file mode 100644 index 000000000..ba4884437 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-108152a6f960262b-2.image @@ -0,0 +1 @@ +640x360 16spp clamp-off 52a1a46f3a46d230 diff --git a/crates/crust-core/tests/data/import_baselines/cornellbox_usda-15e73f9974620a1a-1.digest b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-15e73f9974620a1a-1.digest new file mode 100644 index 000000000..1d5ab0cab --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-15e73f9974620a1a-1.digest @@ -0,0 +1,39 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/scene/camera1") +camera: Camera { origin: Vec3A(0.0074343784, 1.9913422, 4.0133057), lower_left_corner: Vec3A(-8.881443, -3.0086517, -0.98669434), horizontal: Vec3A(17.777756, 0.0, 0.0), vertical: Vec3A(0.0, 9.999988, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: Some(Vec4(0.0, 0.0, -1.0, 3.9133058)), far: Some(Vec4(0.0, 0.0, 1.0, 9995.986)), planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: None +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 640, height: 360, region: PixelRect { x0: 0, y0: 0, x1: 640, y1: 360 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 12.700017, aperture: [25.4, 25.4], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 5.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/cornellbox.usda"], invisible_overrides: Some(0) } +layer: $DIR/cornellbox.usda +warning: Warning { code: MaterialFallbackDefault, kind: Skipped, count: 1, prims: ["/scene/Looks/initialShadingGroup"], message: "Material /scene/Looks/initialShadingGroup has no surface shader — using default grey OpenPBR" } +lights: 1 +light 0: dome name Some("/scene/Sky") lpe None pmf 1.0 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 5 geometries, PrimitiveBreakdown { triangles: 822, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 2 } top level, PrimitiveBreakdown { triangles: 1582, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 2 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 4.0 motion [] pieces all=10:88b22fc3345d5b05 camera=10:88b22fc3345d5b05 shadow=10:88b22fc3345d5b05 indirect=10:88b22fc3345d5b05 +geom 1: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.2 motion [] pieces all=760:c2b60a75c52c78b9 camera=760:c2b60a75c52c78b9 shadow=760:c2b60a75c52c78b9 indirect=760:c2b60a75c52c78b9 +geom 2: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=12:94a297badef437e1 camera=12:94a297badef437e1 shadow=12:94a297badef437e1 indirect=12:94a297badef437e1 +geom 3: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.25 motion [] pieces all=800:4a8c9f44d777e131 camera=800:4a8c9f44d777e131 shadow=800:4a8c9f44d777e131 indirect=800:4a8c9f44d777e131 +geom 4: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.3585339 motion [] pieces all=760:2344ecf63e12c441 camera=760:2344ecf63e12c441 shadow=760:2344ecf63e12c441 indirect=760:2344ecf63e12c441 +provenance material /scene/Looks/initialShadingGroup: MaterialOrigin { slots: [0, 1, 2, 3, 4], displaced: false } +provenance light /scene/Sky: LightOrigin { index: 0, geoms: 0..0 } +provenance geometry 0..1: /scene/pCube1 +provenance geometry 1..2: /scene/pSphere1 +provenance geometry 2..3: /scene/pCube2 +provenance geometry 3..4: /scene/pTorus1 +provenance geometry 4..5: /scene/pSphere2 +provenance mesh: MeshOrigin { geom_id: 0, slot: 0, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 1, slot: 1, baked: false, moving: false } +provenance mesh: MeshOrigin { geom_id: 2, slot: 2, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 3, slot: 3, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 4, slot: 1, baked: false, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 12343188411137242430, n_points: 8, n_indices: 20, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 1: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 17119738035130870988, n_points: 382, n_indices: 1560, n_uvs: None, smooth: false, material: 0 }), placements: 2, shared: false, displaced: false } +provenance mesh slot 2: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 1739488954094729910, n_points: 8, n_indices: 24, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 3: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 6096447469814747168, n_points: 400, n_indices: 1600, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: true, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/scene/camera1"), cameras: ["/scene/camera1"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/scene/camera1"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/cornellbox_usda-15e73f9974620a1a-1.image b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-15e73f9974620a1a-1.image new file mode 100644 index 000000000..7172edbfe --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-15e73f9974620a1a-1.image @@ -0,0 +1 @@ +640x360 16spp clamp-off 64ede904b11bab22 diff --git a/crates/crust-core/tests/data/import_baselines/cornellbox_usda-16d2af5b91e595bd-1.digest b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-16d2af5b91e595bd-1.digest new file mode 100644 index 000000000..0e859a952 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-16d2af5b91e595bd-1.digest @@ -0,0 +1,40 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/scene/camera1") +camera: Camera { origin: Vec3A(0.0074343784, 1.9913422, 4.0133057), lower_left_corner: Vec3A(-8.881443, -3.0086517, -0.98669434), horizontal: Vec3A(17.777756, 0.0, 0.0), vertical: Vec3A(0.0, 9.999988, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: Some(Vec4(0.0, 0.0, -1.0, 3.9133058)), far: Some(Vec4(0.0, 0.0, 1.0, 9995.986)), planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: None +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 640, height: 360, region: PixelRect { x0: 0, y0: 0, x1: 640, y1: 360 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 12.700017, aperture: [25.4, 25.4], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 5.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/cornellbox.usda"], invisible_overrides: Some(0) } +layer: $DIR/cornellbox.usda +warning: Warning { code: AssetUnsupportedByHost, kind: Skipped, count: 1, prims: [], message: "No asset loader: environment map $DIR/sky_gradient.exr ignored — the dome falls back to its uniform colour. Use Scene::from_usd_with_assets to supply one." } +warning: Warning { code: MaterialFallbackDefault, kind: Skipped, count: 1, prims: ["/scene/Looks/initialShadingGroup"], message: "Material /scene/Looks/initialShadingGroup has no surface shader — using default grey OpenPBR" } +lights: 1 +light 0: dome name Some("/scene/Sky") lpe None pmf 1.0 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 5 geometries, PrimitiveBreakdown { triangles: 822, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 2 } top level, PrimitiveBreakdown { triangles: 1582, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 2 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 4.0 motion [] pieces all=10:88b22fc3345d5b05 camera=10:88b22fc3345d5b05 shadow=10:88b22fc3345d5b05 indirect=10:88b22fc3345d5b05 +geom 1: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.2 motion [] pieces all=760:c2b60a75c52c78b9 camera=760:c2b60a75c52c78b9 shadow=760:c2b60a75c52c78b9 indirect=760:c2b60a75c52c78b9 +geom 2: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=12:94a297badef437e1 camera=12:94a297badef437e1 shadow=12:94a297badef437e1 indirect=12:94a297badef437e1 +geom 3: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.25 motion [] pieces all=800:4a8c9f44d777e131 camera=800:4a8c9f44d777e131 shadow=800:4a8c9f44d777e131 indirect=800:4a8c9f44d777e131 +geom 4: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.3585339 motion [] pieces all=760:2344ecf63e12c441 camera=760:2344ecf63e12c441 shadow=760:2344ecf63e12c441 indirect=760:2344ecf63e12c441 +provenance material /scene/Looks/initialShadingGroup: MaterialOrigin { slots: [0, 1, 2, 3, 4], displaced: false } +provenance light /scene/Sky: LightOrigin { index: 0, geoms: 0..0 } +provenance geometry 0..1: /scene/pCube1 +provenance geometry 1..2: /scene/pSphere1 +provenance geometry 2..3: /scene/pCube2 +provenance geometry 3..4: /scene/pTorus1 +provenance geometry 4..5: /scene/pSphere2 +provenance mesh: MeshOrigin { geom_id: 0, slot: 0, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 1, slot: 1, baked: false, moving: false } +provenance mesh: MeshOrigin { geom_id: 2, slot: 2, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 3, slot: 3, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 4, slot: 1, baked: false, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 12343188411137242430, n_points: 8, n_indices: 20, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 1: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 17119738035130870988, n_points: 382, n_indices: 1560, n_uvs: None, smooth: false, material: 0 }), placements: 2, shared: false, displaced: false } +provenance mesh slot 2: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 1739488954094729910, n_points: 8, n_indices: 24, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 3: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 6096447469814747168, n_points: 400, n_indices: 1600, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/scene/camera1"), cameras: ["/scene/camera1"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/scene/camera1"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/cornellbox_usda-16d2af5b91e595bd-1.image b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-16d2af5b91e595bd-1.image new file mode 100644 index 000000000..ba4884437 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-16d2af5b91e595bd-1.image @@ -0,0 +1 @@ +640x360 16spp clamp-off 52a1a46f3a46d230 diff --git a/crates/crust-core/tests/data/import_baselines/cornellbox_usda-1aeeae0fba6dbe97-1.digest b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-1aeeae0fba6dbe97-1.digest new file mode 100644 index 000000000..8d3bb0b40 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-1aeeae0fba6dbe97-1.digest @@ -0,0 +1,39 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/scene/camera1") +camera: Camera { origin: Vec3A(0.0074343784, 1.9913422, 4.0133057), lower_left_corner: Vec3A(-8.881443, -3.0086517, -0.98669434), horizontal: Vec3A(17.777756, 0.0, 0.0), vertical: Vec3A(0.0, 9.999988, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: Some(Vec4(0.0, 0.0, -1.0, 3.9133058)), far: Some(Vec4(0.0, 0.0, 1.0, 9995.986)), planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: None +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 640, height: 360, region: PixelRect { x0: 0, y0: 0, x1: 640, y1: 360 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 12.700017, aperture: [25.4, 25.4], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 5.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/cornellbox.usda"], invisible_overrides: Some(0) } +layer: $DIR/cornellbox.usda +warning: Warning { code: MaterialFallbackDefault, kind: Skipped, count: 1, prims: ["/scene/Looks/initialShadingGroup"], message: "Material /scene/Looks/initialShadingGroup has no surface shader — using default grey OpenPBR" } +lights: 1 +light 0: dome name Some("/scene/Sky") lpe None pmf 1.0 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 5 geometries, PrimitiveBreakdown { triangles: 822, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 2 } top level, PrimitiveBreakdown { triangles: 1582, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 2 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 4.0 motion [] pieces all=10:88b22fc3345d5b05 camera=10:88b22fc3345d5b05 shadow=10:88b22fc3345d5b05 indirect=10:88b22fc3345d5b05 +geom 1: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.2 motion [] pieces all=760:c2b60a75c52c78b9 camera=760:c2b60a75c52c78b9 shadow=760:c2b60a75c52c78b9 indirect=760:c2b60a75c52c78b9 +geom 2: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=12:94a297badef437e1 camera=12:94a297badef437e1 shadow=12:94a297badef437e1 indirect=12:94a297badef437e1 +geom 3: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.25 motion [] pieces all=800:4a8c9f44d777e131 camera=800:4a8c9f44d777e131 shadow=800:4a8c9f44d777e131 indirect=800:4a8c9f44d777e131 +geom 4: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.3585339 motion [] pieces all=760:2344ecf63e12c441 camera=760:2344ecf63e12c441 shadow=760:2344ecf63e12c441 indirect=760:2344ecf63e12c441 +provenance material /scene/Looks/initialShadingGroup: MaterialOrigin { slots: [0, 1, 2, 3, 4], displaced: false } +provenance light /scene/Sky: LightOrigin { index: 0, geoms: 0..0 } +provenance geometry 0..1: /scene/pCube1 +provenance geometry 1..2: /scene/pSphere1 +provenance geometry 2..3: /scene/pCube2 +provenance geometry 3..4: /scene/pTorus1 +provenance geometry 4..5: /scene/pSphere2 +provenance mesh: MeshOrigin { geom_id: 0, slot: 0, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 1, slot: 1, baked: false, moving: false } +provenance mesh: MeshOrigin { geom_id: 2, slot: 2, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 3, slot: 3, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 4, slot: 1, baked: false, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 12343188411137242430, n_points: 8, n_indices: 20, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 1: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 17119738035130870988, n_points: 382, n_indices: 1560, n_uvs: None, smooth: false, material: 0 }), placements: 2, shared: false, displaced: false } +provenance mesh slot 2: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 1739488954094729910, n_points: 8, n_indices: 24, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 3: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 6096447469814747168, n_points: 400, n_indices: 1600, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/scene/camera1"), cameras: ["/scene/camera1"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/scene/camera1"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/cornellbox_usda-1aeeae0fba6dbe97-1.image b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-1aeeae0fba6dbe97-1.image new file mode 100644 index 000000000..7172edbfe --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-1aeeae0fba6dbe97-1.image @@ -0,0 +1 @@ +640x360 16spp clamp-off 64ede904b11bab22 diff --git a/crates/crust-core/tests/data/import_baselines/cornellbox_usda-211d55a31b3d62fa-1.digest b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-211d55a31b3d62fa-1.digest new file mode 100644 index 000000000..0e859a952 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-211d55a31b3d62fa-1.digest @@ -0,0 +1,40 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/scene/camera1") +camera: Camera { origin: Vec3A(0.0074343784, 1.9913422, 4.0133057), lower_left_corner: Vec3A(-8.881443, -3.0086517, -0.98669434), horizontal: Vec3A(17.777756, 0.0, 0.0), vertical: Vec3A(0.0, 9.999988, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: Some(Vec4(0.0, 0.0, -1.0, 3.9133058)), far: Some(Vec4(0.0, 0.0, 1.0, 9995.986)), planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: None +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 640, height: 360, region: PixelRect { x0: 0, y0: 0, x1: 640, y1: 360 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 12.700017, aperture: [25.4, 25.4], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 5.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/cornellbox.usda"], invisible_overrides: Some(0) } +layer: $DIR/cornellbox.usda +warning: Warning { code: AssetUnsupportedByHost, kind: Skipped, count: 1, prims: [], message: "No asset loader: environment map $DIR/sky_gradient.exr ignored — the dome falls back to its uniform colour. Use Scene::from_usd_with_assets to supply one." } +warning: Warning { code: MaterialFallbackDefault, kind: Skipped, count: 1, prims: ["/scene/Looks/initialShadingGroup"], message: "Material /scene/Looks/initialShadingGroup has no surface shader — using default grey OpenPBR" } +lights: 1 +light 0: dome name Some("/scene/Sky") lpe None pmf 1.0 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 5 geometries, PrimitiveBreakdown { triangles: 822, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 2 } top level, PrimitiveBreakdown { triangles: 1582, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 2 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 4.0 motion [] pieces all=10:88b22fc3345d5b05 camera=10:88b22fc3345d5b05 shadow=10:88b22fc3345d5b05 indirect=10:88b22fc3345d5b05 +geom 1: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.2 motion [] pieces all=760:c2b60a75c52c78b9 camera=760:c2b60a75c52c78b9 shadow=760:c2b60a75c52c78b9 indirect=760:c2b60a75c52c78b9 +geom 2: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=12:94a297badef437e1 camera=12:94a297badef437e1 shadow=12:94a297badef437e1 indirect=12:94a297badef437e1 +geom 3: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.25 motion [] pieces all=800:4a8c9f44d777e131 camera=800:4a8c9f44d777e131 shadow=800:4a8c9f44d777e131 indirect=800:4a8c9f44d777e131 +geom 4: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.3585339 motion [] pieces all=760:2344ecf63e12c441 camera=760:2344ecf63e12c441 shadow=760:2344ecf63e12c441 indirect=760:2344ecf63e12c441 +provenance material /scene/Looks/initialShadingGroup: MaterialOrigin { slots: [0, 1, 2, 3, 4], displaced: false } +provenance light /scene/Sky: LightOrigin { index: 0, geoms: 0..0 } +provenance geometry 0..1: /scene/pCube1 +provenance geometry 1..2: /scene/pSphere1 +provenance geometry 2..3: /scene/pCube2 +provenance geometry 3..4: /scene/pTorus1 +provenance geometry 4..5: /scene/pSphere2 +provenance mesh: MeshOrigin { geom_id: 0, slot: 0, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 1, slot: 1, baked: false, moving: false } +provenance mesh: MeshOrigin { geom_id: 2, slot: 2, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 3, slot: 3, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 4, slot: 1, baked: false, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 12343188411137242430, n_points: 8, n_indices: 20, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 1: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 17119738035130870988, n_points: 382, n_indices: 1560, n_uvs: None, smooth: false, material: 0 }), placements: 2, shared: false, displaced: false } +provenance mesh slot 2: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 1739488954094729910, n_points: 8, n_indices: 24, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 3: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 6096447469814747168, n_points: 400, n_indices: 1600, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/scene/camera1"), cameras: ["/scene/camera1"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/scene/camera1"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/cornellbox_usda-211d55a31b3d62fa-1.image b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-211d55a31b3d62fa-1.image new file mode 100644 index 000000000..ba4884437 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-211d55a31b3d62fa-1.image @@ -0,0 +1 @@ +640x360 16spp clamp-off 52a1a46f3a46d230 diff --git a/crates/crust-core/tests/data/import_baselines/cornellbox_usda-211d55a31b3d62fa-2.digest b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-211d55a31b3d62fa-2.digest new file mode 100644 index 000000000..0e859a952 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-211d55a31b3d62fa-2.digest @@ -0,0 +1,40 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/scene/camera1") +camera: Camera { origin: Vec3A(0.0074343784, 1.9913422, 4.0133057), lower_left_corner: Vec3A(-8.881443, -3.0086517, -0.98669434), horizontal: Vec3A(17.777756, 0.0, 0.0), vertical: Vec3A(0.0, 9.999988, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: Some(Vec4(0.0, 0.0, -1.0, 3.9133058)), far: Some(Vec4(0.0, 0.0, 1.0, 9995.986)), planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: None +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 640, height: 360, region: PixelRect { x0: 0, y0: 0, x1: 640, y1: 360 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 12.700017, aperture: [25.4, 25.4], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 5.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/cornellbox.usda"], invisible_overrides: Some(0) } +layer: $DIR/cornellbox.usda +warning: Warning { code: AssetUnsupportedByHost, kind: Skipped, count: 1, prims: [], message: "No asset loader: environment map $DIR/sky_gradient.exr ignored — the dome falls back to its uniform colour. Use Scene::from_usd_with_assets to supply one." } +warning: Warning { code: MaterialFallbackDefault, kind: Skipped, count: 1, prims: ["/scene/Looks/initialShadingGroup"], message: "Material /scene/Looks/initialShadingGroup has no surface shader — using default grey OpenPBR" } +lights: 1 +light 0: dome name Some("/scene/Sky") lpe None pmf 1.0 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 5 geometries, PrimitiveBreakdown { triangles: 822, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 2 } top level, PrimitiveBreakdown { triangles: 1582, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 2 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 4.0 motion [] pieces all=10:88b22fc3345d5b05 camera=10:88b22fc3345d5b05 shadow=10:88b22fc3345d5b05 indirect=10:88b22fc3345d5b05 +geom 1: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.2 motion [] pieces all=760:c2b60a75c52c78b9 camera=760:c2b60a75c52c78b9 shadow=760:c2b60a75c52c78b9 indirect=760:c2b60a75c52c78b9 +geom 2: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=12:94a297badef437e1 camera=12:94a297badef437e1 shadow=12:94a297badef437e1 indirect=12:94a297badef437e1 +geom 3: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.25 motion [] pieces all=800:4a8c9f44d777e131 camera=800:4a8c9f44d777e131 shadow=800:4a8c9f44d777e131 indirect=800:4a8c9f44d777e131 +geom 4: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.3585339 motion [] pieces all=760:2344ecf63e12c441 camera=760:2344ecf63e12c441 shadow=760:2344ecf63e12c441 indirect=760:2344ecf63e12c441 +provenance material /scene/Looks/initialShadingGroup: MaterialOrigin { slots: [0, 1, 2, 3, 4], displaced: false } +provenance light /scene/Sky: LightOrigin { index: 0, geoms: 0..0 } +provenance geometry 0..1: /scene/pCube1 +provenance geometry 1..2: /scene/pSphere1 +provenance geometry 2..3: /scene/pCube2 +provenance geometry 3..4: /scene/pTorus1 +provenance geometry 4..5: /scene/pSphere2 +provenance mesh: MeshOrigin { geom_id: 0, slot: 0, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 1, slot: 1, baked: false, moving: false } +provenance mesh: MeshOrigin { geom_id: 2, slot: 2, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 3, slot: 3, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 4, slot: 1, baked: false, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 12343188411137242430, n_points: 8, n_indices: 20, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 1: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 17119738035130870988, n_points: 382, n_indices: 1560, n_uvs: None, smooth: false, material: 0 }), placements: 2, shared: false, displaced: false } +provenance mesh slot 2: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 1739488954094729910, n_points: 8, n_indices: 24, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 3: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 6096447469814747168, n_points: 400, n_indices: 1600, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/scene/camera1"), cameras: ["/scene/camera1"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/scene/camera1"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/cornellbox_usda-211d55a31b3d62fa-2.image b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-211d55a31b3d62fa-2.image new file mode 100644 index 000000000..ba4884437 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-211d55a31b3d62fa-2.image @@ -0,0 +1 @@ +640x360 16spp clamp-off 52a1a46f3a46d230 diff --git a/crates/crust-core/tests/data/import_baselines/cornellbox_usda-248f67f6240f7680-1.digest b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-248f67f6240f7680-1.digest new file mode 100644 index 000000000..0e859a952 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-248f67f6240f7680-1.digest @@ -0,0 +1,40 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/scene/camera1") +camera: Camera { origin: Vec3A(0.0074343784, 1.9913422, 4.0133057), lower_left_corner: Vec3A(-8.881443, -3.0086517, -0.98669434), horizontal: Vec3A(17.777756, 0.0, 0.0), vertical: Vec3A(0.0, 9.999988, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: Some(Vec4(0.0, 0.0, -1.0, 3.9133058)), far: Some(Vec4(0.0, 0.0, 1.0, 9995.986)), planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: None +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 640, height: 360, region: PixelRect { x0: 0, y0: 0, x1: 640, y1: 360 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 12.700017, aperture: [25.4, 25.4], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 5.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/cornellbox.usda"], invisible_overrides: Some(0) } +layer: $DIR/cornellbox.usda +warning: Warning { code: AssetUnsupportedByHost, kind: Skipped, count: 1, prims: [], message: "No asset loader: environment map $DIR/sky_gradient.exr ignored — the dome falls back to its uniform colour. Use Scene::from_usd_with_assets to supply one." } +warning: Warning { code: MaterialFallbackDefault, kind: Skipped, count: 1, prims: ["/scene/Looks/initialShadingGroup"], message: "Material /scene/Looks/initialShadingGroup has no surface shader — using default grey OpenPBR" } +lights: 1 +light 0: dome name Some("/scene/Sky") lpe None pmf 1.0 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 5 geometries, PrimitiveBreakdown { triangles: 822, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 2 } top level, PrimitiveBreakdown { triangles: 1582, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 2 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 4.0 motion [] pieces all=10:88b22fc3345d5b05 camera=10:88b22fc3345d5b05 shadow=10:88b22fc3345d5b05 indirect=10:88b22fc3345d5b05 +geom 1: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.2 motion [] pieces all=760:c2b60a75c52c78b9 camera=760:c2b60a75c52c78b9 shadow=760:c2b60a75c52c78b9 indirect=760:c2b60a75c52c78b9 +geom 2: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=12:94a297badef437e1 camera=12:94a297badef437e1 shadow=12:94a297badef437e1 indirect=12:94a297badef437e1 +geom 3: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.25 motion [] pieces all=800:4a8c9f44d777e131 camera=800:4a8c9f44d777e131 shadow=800:4a8c9f44d777e131 indirect=800:4a8c9f44d777e131 +geom 4: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.3585339 motion [] pieces all=760:2344ecf63e12c441 camera=760:2344ecf63e12c441 shadow=760:2344ecf63e12c441 indirect=760:2344ecf63e12c441 +provenance material /scene/Looks/initialShadingGroup: MaterialOrigin { slots: [0, 1, 2, 3, 4], displaced: false } +provenance light /scene/Sky: LightOrigin { index: 0, geoms: 0..0 } +provenance geometry 0..1: /scene/pCube1 +provenance geometry 1..2: /scene/pSphere1 +provenance geometry 2..3: /scene/pCube2 +provenance geometry 3..4: /scene/pTorus1 +provenance geometry 4..5: /scene/pSphere2 +provenance mesh: MeshOrigin { geom_id: 0, slot: 0, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 1, slot: 1, baked: false, moving: false } +provenance mesh: MeshOrigin { geom_id: 2, slot: 2, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 3, slot: 3, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 4, slot: 1, baked: false, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 12343188411137242430, n_points: 8, n_indices: 20, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 1: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 17119738035130870988, n_points: 382, n_indices: 1560, n_uvs: None, smooth: false, material: 0 }), placements: 2, shared: false, displaced: false } +provenance mesh slot 2: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 1739488954094729910, n_points: 8, n_indices: 24, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 3: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 6096447469814747168, n_points: 400, n_indices: 1600, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/scene/camera1"), cameras: ["/scene/camera1"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/scene/camera1"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/cornellbox_usda-248f67f6240f7680-1.image b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-248f67f6240f7680-1.image new file mode 100644 index 000000000..ba4884437 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-248f67f6240f7680-1.image @@ -0,0 +1 @@ +640x360 16spp clamp-off 52a1a46f3a46d230 diff --git a/crates/crust-core/tests/data/import_baselines/cornellbox_usda-254e9b608e6c20f0-1.digest b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-254e9b608e6c20f0-1.digest new file mode 100644 index 000000000..1acaeaed9 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-254e9b608e6c20f0-1.digest @@ -0,0 +1,39 @@ +time: None +working space: lin_rec709 +camera path: Some("/scene/camera1") +camera: Camera { origin: Vec3A(0.0074343784, 1.9913422, 4.0133057), lower_left_corner: Vec3A(-8.881443, -3.0086517, -0.98669434), horizontal: Vec3A(17.777756, 0.0, 0.0), vertical: Vec3A(0.0, 9.999988, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: Some(Vec4(0.0, 0.0, -1.0, 3.9133058)), far: Some(Vec4(0.0, 0.0, 1.0, 9995.986)), planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: None +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 640, height: 360, region: PixelRect { x0: 0, y0: 0, x1: 640, y1: 360 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 12.700017, aperture: [25.4, 25.4], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 5.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/cornellbox.usda"], invisible_overrides: Some(0) } +layer: $DIR/cornellbox.usda +warning: Warning { code: MaterialFallbackDefault, kind: Skipped, count: 1, prims: ["/scene/Looks/initialShadingGroup"], message: "Material /scene/Looks/initialShadingGroup has no surface shader — using default grey OpenPBR" } +lights: 1 +light 0: dome name Some("/scene/Sky") lpe None pmf 1.0 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 5 geometries, PrimitiveBreakdown { triangles: 822, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 2 } top level, PrimitiveBreakdown { triangles: 1582, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 2 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 4.0 motion [] pieces all=10:88b22fc3345d5b05 camera=10:88b22fc3345d5b05 shadow=10:88b22fc3345d5b05 indirect=10:88b22fc3345d5b05 +geom 1: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.2 motion [] pieces all=760:c2b60a75c52c78b9 camera=760:c2b60a75c52c78b9 shadow=760:c2b60a75c52c78b9 indirect=760:c2b60a75c52c78b9 +geom 2: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=12:94a297badef437e1 camera=12:94a297badef437e1 shadow=12:94a297badef437e1 indirect=12:94a297badef437e1 +geom 3: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.25 motion [] pieces all=800:4a8c9f44d777e131 camera=800:4a8c9f44d777e131 shadow=800:4a8c9f44d777e131 indirect=800:4a8c9f44d777e131 +geom 4: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.3585339 motion [] pieces all=760:2344ecf63e12c441 camera=760:2344ecf63e12c441 shadow=760:2344ecf63e12c441 indirect=760:2344ecf63e12c441 +provenance material /scene/Looks/initialShadingGroup: MaterialOrigin { slots: [0, 1, 2, 3, 4], displaced: false } +provenance light /scene/Sky: LightOrigin { index: 0, geoms: 0..0 } +provenance geometry 0..1: /scene/pCube1 +provenance geometry 1..2: /scene/pSphere1 +provenance geometry 2..3: /scene/pCube2 +provenance geometry 3..4: /scene/pTorus1 +provenance geometry 4..5: /scene/pSphere2 +provenance mesh: MeshOrigin { geom_id: 0, slot: 0, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 1, slot: 1, baked: false, moving: false } +provenance mesh: MeshOrigin { geom_id: 2, slot: 2, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 3, slot: 3, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 4, slot: 1, baked: false, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 12343188411137242430, n_points: 8, n_indices: 20, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 1: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 17119738035130870988, n_points: 382, n_indices: 1560, n_uvs: None, smooth: false, material: 0 }), placements: 2, shared: false, displaced: false } +provenance mesh slot 2: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 1739488954094729910, n_points: 8, n_indices: 24, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 3: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 6096447469814747168, n_points: 400, n_indices: 1600, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: true, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/scene/camera1"), cameras: ["/scene/camera1"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/scene/camera1"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("lin_rec709") diff --git a/crates/crust-core/tests/data/import_baselines/cornellbox_usda-254e9b608e6c20f0-1.image b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-254e9b608e6c20f0-1.image new file mode 100644 index 000000000..7172edbfe --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-254e9b608e6c20f0-1.image @@ -0,0 +1 @@ +640x360 16spp clamp-off 64ede904b11bab22 diff --git a/crates/crust-core/tests/data/import_baselines/cornellbox_usda-265ef4c54c4d2534-1.digest b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-265ef4c54c4d2534-1.digest new file mode 100644 index 000000000..0e859a952 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-265ef4c54c4d2534-1.digest @@ -0,0 +1,40 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/scene/camera1") +camera: Camera { origin: Vec3A(0.0074343784, 1.9913422, 4.0133057), lower_left_corner: Vec3A(-8.881443, -3.0086517, -0.98669434), horizontal: Vec3A(17.777756, 0.0, 0.0), vertical: Vec3A(0.0, 9.999988, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: Some(Vec4(0.0, 0.0, -1.0, 3.9133058)), far: Some(Vec4(0.0, 0.0, 1.0, 9995.986)), planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: None +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 640, height: 360, region: PixelRect { x0: 0, y0: 0, x1: 640, y1: 360 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 12.700017, aperture: [25.4, 25.4], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 5.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/cornellbox.usda"], invisible_overrides: Some(0) } +layer: $DIR/cornellbox.usda +warning: Warning { code: AssetUnsupportedByHost, kind: Skipped, count: 1, prims: [], message: "No asset loader: environment map $DIR/sky_gradient.exr ignored — the dome falls back to its uniform colour. Use Scene::from_usd_with_assets to supply one." } +warning: Warning { code: MaterialFallbackDefault, kind: Skipped, count: 1, prims: ["/scene/Looks/initialShadingGroup"], message: "Material /scene/Looks/initialShadingGroup has no surface shader — using default grey OpenPBR" } +lights: 1 +light 0: dome name Some("/scene/Sky") lpe None pmf 1.0 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 5 geometries, PrimitiveBreakdown { triangles: 822, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 2 } top level, PrimitiveBreakdown { triangles: 1582, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 2 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 4.0 motion [] pieces all=10:88b22fc3345d5b05 camera=10:88b22fc3345d5b05 shadow=10:88b22fc3345d5b05 indirect=10:88b22fc3345d5b05 +geom 1: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.2 motion [] pieces all=760:c2b60a75c52c78b9 camera=760:c2b60a75c52c78b9 shadow=760:c2b60a75c52c78b9 indirect=760:c2b60a75c52c78b9 +geom 2: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=12:94a297badef437e1 camera=12:94a297badef437e1 shadow=12:94a297badef437e1 indirect=12:94a297badef437e1 +geom 3: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.25 motion [] pieces all=800:4a8c9f44d777e131 camera=800:4a8c9f44d777e131 shadow=800:4a8c9f44d777e131 indirect=800:4a8c9f44d777e131 +geom 4: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.3585339 motion [] pieces all=760:2344ecf63e12c441 camera=760:2344ecf63e12c441 shadow=760:2344ecf63e12c441 indirect=760:2344ecf63e12c441 +provenance material /scene/Looks/initialShadingGroup: MaterialOrigin { slots: [0, 1, 2, 3, 4], displaced: false } +provenance light /scene/Sky: LightOrigin { index: 0, geoms: 0..0 } +provenance geometry 0..1: /scene/pCube1 +provenance geometry 1..2: /scene/pSphere1 +provenance geometry 2..3: /scene/pCube2 +provenance geometry 3..4: /scene/pTorus1 +provenance geometry 4..5: /scene/pSphere2 +provenance mesh: MeshOrigin { geom_id: 0, slot: 0, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 1, slot: 1, baked: false, moving: false } +provenance mesh: MeshOrigin { geom_id: 2, slot: 2, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 3, slot: 3, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 4, slot: 1, baked: false, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 12343188411137242430, n_points: 8, n_indices: 20, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 1: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 17119738035130870988, n_points: 382, n_indices: 1560, n_uvs: None, smooth: false, material: 0 }), placements: 2, shared: false, displaced: false } +provenance mesh slot 2: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 1739488954094729910, n_points: 8, n_indices: 24, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 3: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 6096447469814747168, n_points: 400, n_indices: 1600, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/scene/camera1"), cameras: ["/scene/camera1"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/scene/camera1"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/cornellbox_usda-265ef4c54c4d2534-1.image b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-265ef4c54c4d2534-1.image new file mode 100644 index 000000000..ba4884437 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-265ef4c54c4d2534-1.image @@ -0,0 +1 @@ +640x360 16spp clamp-off 52a1a46f3a46d230 diff --git a/crates/crust-core/tests/data/import_baselines/cornellbox_usda-2711a47b10d83a96-1.digest b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-2711a47b10d83a96-1.digest new file mode 100644 index 000000000..0e859a952 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-2711a47b10d83a96-1.digest @@ -0,0 +1,40 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/scene/camera1") +camera: Camera { origin: Vec3A(0.0074343784, 1.9913422, 4.0133057), lower_left_corner: Vec3A(-8.881443, -3.0086517, -0.98669434), horizontal: Vec3A(17.777756, 0.0, 0.0), vertical: Vec3A(0.0, 9.999988, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: Some(Vec4(0.0, 0.0, -1.0, 3.9133058)), far: Some(Vec4(0.0, 0.0, 1.0, 9995.986)), planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: None +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 640, height: 360, region: PixelRect { x0: 0, y0: 0, x1: 640, y1: 360 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 12.700017, aperture: [25.4, 25.4], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 5.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/cornellbox.usda"], invisible_overrides: Some(0) } +layer: $DIR/cornellbox.usda +warning: Warning { code: AssetUnsupportedByHost, kind: Skipped, count: 1, prims: [], message: "No asset loader: environment map $DIR/sky_gradient.exr ignored — the dome falls back to its uniform colour. Use Scene::from_usd_with_assets to supply one." } +warning: Warning { code: MaterialFallbackDefault, kind: Skipped, count: 1, prims: ["/scene/Looks/initialShadingGroup"], message: "Material /scene/Looks/initialShadingGroup has no surface shader — using default grey OpenPBR" } +lights: 1 +light 0: dome name Some("/scene/Sky") lpe None pmf 1.0 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 5 geometries, PrimitiveBreakdown { triangles: 822, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 2 } top level, PrimitiveBreakdown { triangles: 1582, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 2 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 4.0 motion [] pieces all=10:88b22fc3345d5b05 camera=10:88b22fc3345d5b05 shadow=10:88b22fc3345d5b05 indirect=10:88b22fc3345d5b05 +geom 1: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.2 motion [] pieces all=760:c2b60a75c52c78b9 camera=760:c2b60a75c52c78b9 shadow=760:c2b60a75c52c78b9 indirect=760:c2b60a75c52c78b9 +geom 2: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=12:94a297badef437e1 camera=12:94a297badef437e1 shadow=12:94a297badef437e1 indirect=12:94a297badef437e1 +geom 3: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.25 motion [] pieces all=800:4a8c9f44d777e131 camera=800:4a8c9f44d777e131 shadow=800:4a8c9f44d777e131 indirect=800:4a8c9f44d777e131 +geom 4: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.3585339 motion [] pieces all=760:2344ecf63e12c441 camera=760:2344ecf63e12c441 shadow=760:2344ecf63e12c441 indirect=760:2344ecf63e12c441 +provenance material /scene/Looks/initialShadingGroup: MaterialOrigin { slots: [0, 1, 2, 3, 4], displaced: false } +provenance light /scene/Sky: LightOrigin { index: 0, geoms: 0..0 } +provenance geometry 0..1: /scene/pCube1 +provenance geometry 1..2: /scene/pSphere1 +provenance geometry 2..3: /scene/pCube2 +provenance geometry 3..4: /scene/pTorus1 +provenance geometry 4..5: /scene/pSphere2 +provenance mesh: MeshOrigin { geom_id: 0, slot: 0, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 1, slot: 1, baked: false, moving: false } +provenance mesh: MeshOrigin { geom_id: 2, slot: 2, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 3, slot: 3, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 4, slot: 1, baked: false, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 12343188411137242430, n_points: 8, n_indices: 20, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 1: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 17119738035130870988, n_points: 382, n_indices: 1560, n_uvs: None, smooth: false, material: 0 }), placements: 2, shared: false, displaced: false } +provenance mesh slot 2: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 1739488954094729910, n_points: 8, n_indices: 24, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 3: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 6096447469814747168, n_points: 400, n_indices: 1600, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/scene/camera1"), cameras: ["/scene/camera1"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/scene/camera1"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/cornellbox_usda-2711a47b10d83a96-1.image b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-2711a47b10d83a96-1.image new file mode 100644 index 000000000..ba4884437 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-2711a47b10d83a96-1.image @@ -0,0 +1 @@ +640x360 16spp clamp-off 52a1a46f3a46d230 diff --git a/crates/crust-core/tests/data/import_baselines/cornellbox_usda-2772d706794ce66b-1.digest b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-2772d706794ce66b-1.digest new file mode 100644 index 000000000..0e859a952 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-2772d706794ce66b-1.digest @@ -0,0 +1,40 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/scene/camera1") +camera: Camera { origin: Vec3A(0.0074343784, 1.9913422, 4.0133057), lower_left_corner: Vec3A(-8.881443, -3.0086517, -0.98669434), horizontal: Vec3A(17.777756, 0.0, 0.0), vertical: Vec3A(0.0, 9.999988, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: Some(Vec4(0.0, 0.0, -1.0, 3.9133058)), far: Some(Vec4(0.0, 0.0, 1.0, 9995.986)), planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: None +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 640, height: 360, region: PixelRect { x0: 0, y0: 0, x1: 640, y1: 360 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 12.700017, aperture: [25.4, 25.4], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 5.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/cornellbox.usda"], invisible_overrides: Some(0) } +layer: $DIR/cornellbox.usda +warning: Warning { code: AssetUnsupportedByHost, kind: Skipped, count: 1, prims: [], message: "No asset loader: environment map $DIR/sky_gradient.exr ignored — the dome falls back to its uniform colour. Use Scene::from_usd_with_assets to supply one." } +warning: Warning { code: MaterialFallbackDefault, kind: Skipped, count: 1, prims: ["/scene/Looks/initialShadingGroup"], message: "Material /scene/Looks/initialShadingGroup has no surface shader — using default grey OpenPBR" } +lights: 1 +light 0: dome name Some("/scene/Sky") lpe None pmf 1.0 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 5 geometries, PrimitiveBreakdown { triangles: 822, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 2 } top level, PrimitiveBreakdown { triangles: 1582, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 2 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 4.0 motion [] pieces all=10:88b22fc3345d5b05 camera=10:88b22fc3345d5b05 shadow=10:88b22fc3345d5b05 indirect=10:88b22fc3345d5b05 +geom 1: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.2 motion [] pieces all=760:c2b60a75c52c78b9 camera=760:c2b60a75c52c78b9 shadow=760:c2b60a75c52c78b9 indirect=760:c2b60a75c52c78b9 +geom 2: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=12:94a297badef437e1 camera=12:94a297badef437e1 shadow=12:94a297badef437e1 indirect=12:94a297badef437e1 +geom 3: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.25 motion [] pieces all=800:4a8c9f44d777e131 camera=800:4a8c9f44d777e131 shadow=800:4a8c9f44d777e131 indirect=800:4a8c9f44d777e131 +geom 4: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.3585339 motion [] pieces all=760:2344ecf63e12c441 camera=760:2344ecf63e12c441 shadow=760:2344ecf63e12c441 indirect=760:2344ecf63e12c441 +provenance material /scene/Looks/initialShadingGroup: MaterialOrigin { slots: [0, 1, 2, 3, 4], displaced: false } +provenance light /scene/Sky: LightOrigin { index: 0, geoms: 0..0 } +provenance geometry 0..1: /scene/pCube1 +provenance geometry 1..2: /scene/pSphere1 +provenance geometry 2..3: /scene/pCube2 +provenance geometry 3..4: /scene/pTorus1 +provenance geometry 4..5: /scene/pSphere2 +provenance mesh: MeshOrigin { geom_id: 0, slot: 0, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 1, slot: 1, baked: false, moving: false } +provenance mesh: MeshOrigin { geom_id: 2, slot: 2, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 3, slot: 3, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 4, slot: 1, baked: false, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 12343188411137242430, n_points: 8, n_indices: 20, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 1: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 17119738035130870988, n_points: 382, n_indices: 1560, n_uvs: None, smooth: false, material: 0 }), placements: 2, shared: false, displaced: false } +provenance mesh slot 2: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 1739488954094729910, n_points: 8, n_indices: 24, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 3: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 6096447469814747168, n_points: 400, n_indices: 1600, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/scene/camera1"), cameras: ["/scene/camera1"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/scene/camera1"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/cornellbox_usda-2772d706794ce66b-1.image b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-2772d706794ce66b-1.image new file mode 100644 index 000000000..ba4884437 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-2772d706794ce66b-1.image @@ -0,0 +1 @@ +640x360 16spp clamp-off 52a1a46f3a46d230 diff --git a/crates/crust-core/tests/data/import_baselines/cornellbox_usda-2772d706794ce66b-2.digest b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-2772d706794ce66b-2.digest new file mode 100644 index 000000000..0e859a952 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-2772d706794ce66b-2.digest @@ -0,0 +1,40 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/scene/camera1") +camera: Camera { origin: Vec3A(0.0074343784, 1.9913422, 4.0133057), lower_left_corner: Vec3A(-8.881443, -3.0086517, -0.98669434), horizontal: Vec3A(17.777756, 0.0, 0.0), vertical: Vec3A(0.0, 9.999988, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: Some(Vec4(0.0, 0.0, -1.0, 3.9133058)), far: Some(Vec4(0.0, 0.0, 1.0, 9995.986)), planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: None +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 640, height: 360, region: PixelRect { x0: 0, y0: 0, x1: 640, y1: 360 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 12.700017, aperture: [25.4, 25.4], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 5.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/cornellbox.usda"], invisible_overrides: Some(0) } +layer: $DIR/cornellbox.usda +warning: Warning { code: AssetUnsupportedByHost, kind: Skipped, count: 1, prims: [], message: "No asset loader: environment map $DIR/sky_gradient.exr ignored — the dome falls back to its uniform colour. Use Scene::from_usd_with_assets to supply one." } +warning: Warning { code: MaterialFallbackDefault, kind: Skipped, count: 1, prims: ["/scene/Looks/initialShadingGroup"], message: "Material /scene/Looks/initialShadingGroup has no surface shader — using default grey OpenPBR" } +lights: 1 +light 0: dome name Some("/scene/Sky") lpe None pmf 1.0 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 5 geometries, PrimitiveBreakdown { triangles: 822, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 2 } top level, PrimitiveBreakdown { triangles: 1582, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 2 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 4.0 motion [] pieces all=10:88b22fc3345d5b05 camera=10:88b22fc3345d5b05 shadow=10:88b22fc3345d5b05 indirect=10:88b22fc3345d5b05 +geom 1: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.2 motion [] pieces all=760:c2b60a75c52c78b9 camera=760:c2b60a75c52c78b9 shadow=760:c2b60a75c52c78b9 indirect=760:c2b60a75c52c78b9 +geom 2: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=12:94a297badef437e1 camera=12:94a297badef437e1 shadow=12:94a297badef437e1 indirect=12:94a297badef437e1 +geom 3: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.25 motion [] pieces all=800:4a8c9f44d777e131 camera=800:4a8c9f44d777e131 shadow=800:4a8c9f44d777e131 indirect=800:4a8c9f44d777e131 +geom 4: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.3585339 motion [] pieces all=760:2344ecf63e12c441 camera=760:2344ecf63e12c441 shadow=760:2344ecf63e12c441 indirect=760:2344ecf63e12c441 +provenance material /scene/Looks/initialShadingGroup: MaterialOrigin { slots: [0, 1, 2, 3, 4], displaced: false } +provenance light /scene/Sky: LightOrigin { index: 0, geoms: 0..0 } +provenance geometry 0..1: /scene/pCube1 +provenance geometry 1..2: /scene/pSphere1 +provenance geometry 2..3: /scene/pCube2 +provenance geometry 3..4: /scene/pTorus1 +provenance geometry 4..5: /scene/pSphere2 +provenance mesh: MeshOrigin { geom_id: 0, slot: 0, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 1, slot: 1, baked: false, moving: false } +provenance mesh: MeshOrigin { geom_id: 2, slot: 2, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 3, slot: 3, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 4, slot: 1, baked: false, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 12343188411137242430, n_points: 8, n_indices: 20, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 1: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 17119738035130870988, n_points: 382, n_indices: 1560, n_uvs: None, smooth: false, material: 0 }), placements: 2, shared: false, displaced: false } +provenance mesh slot 2: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 1739488954094729910, n_points: 8, n_indices: 24, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 3: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 6096447469814747168, n_points: 400, n_indices: 1600, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/scene/camera1"), cameras: ["/scene/camera1"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/scene/camera1"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/cornellbox_usda-2772d706794ce66b-2.image b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-2772d706794ce66b-2.image new file mode 100644 index 000000000..ba4884437 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-2772d706794ce66b-2.image @@ -0,0 +1 @@ +640x360 16spp clamp-off 52a1a46f3a46d230 diff --git a/crates/crust-core/tests/data/import_baselines/cornellbox_usda-2772d706794ce66b-3.digest b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-2772d706794ce66b-3.digest new file mode 100644 index 000000000..0e859a952 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-2772d706794ce66b-3.digest @@ -0,0 +1,40 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/scene/camera1") +camera: Camera { origin: Vec3A(0.0074343784, 1.9913422, 4.0133057), lower_left_corner: Vec3A(-8.881443, -3.0086517, -0.98669434), horizontal: Vec3A(17.777756, 0.0, 0.0), vertical: Vec3A(0.0, 9.999988, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: Some(Vec4(0.0, 0.0, -1.0, 3.9133058)), far: Some(Vec4(0.0, 0.0, 1.0, 9995.986)), planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: None +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 640, height: 360, region: PixelRect { x0: 0, y0: 0, x1: 640, y1: 360 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 12.700017, aperture: [25.4, 25.4], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 5.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/cornellbox.usda"], invisible_overrides: Some(0) } +layer: $DIR/cornellbox.usda +warning: Warning { code: AssetUnsupportedByHost, kind: Skipped, count: 1, prims: [], message: "No asset loader: environment map $DIR/sky_gradient.exr ignored — the dome falls back to its uniform colour. Use Scene::from_usd_with_assets to supply one." } +warning: Warning { code: MaterialFallbackDefault, kind: Skipped, count: 1, prims: ["/scene/Looks/initialShadingGroup"], message: "Material /scene/Looks/initialShadingGroup has no surface shader — using default grey OpenPBR" } +lights: 1 +light 0: dome name Some("/scene/Sky") lpe None pmf 1.0 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 5 geometries, PrimitiveBreakdown { triangles: 822, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 2 } top level, PrimitiveBreakdown { triangles: 1582, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 2 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 4.0 motion [] pieces all=10:88b22fc3345d5b05 camera=10:88b22fc3345d5b05 shadow=10:88b22fc3345d5b05 indirect=10:88b22fc3345d5b05 +geom 1: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.2 motion [] pieces all=760:c2b60a75c52c78b9 camera=760:c2b60a75c52c78b9 shadow=760:c2b60a75c52c78b9 indirect=760:c2b60a75c52c78b9 +geom 2: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=12:94a297badef437e1 camera=12:94a297badef437e1 shadow=12:94a297badef437e1 indirect=12:94a297badef437e1 +geom 3: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.25 motion [] pieces all=800:4a8c9f44d777e131 camera=800:4a8c9f44d777e131 shadow=800:4a8c9f44d777e131 indirect=800:4a8c9f44d777e131 +geom 4: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.3585339 motion [] pieces all=760:2344ecf63e12c441 camera=760:2344ecf63e12c441 shadow=760:2344ecf63e12c441 indirect=760:2344ecf63e12c441 +provenance material /scene/Looks/initialShadingGroup: MaterialOrigin { slots: [0, 1, 2, 3, 4], displaced: false } +provenance light /scene/Sky: LightOrigin { index: 0, geoms: 0..0 } +provenance geometry 0..1: /scene/pCube1 +provenance geometry 1..2: /scene/pSphere1 +provenance geometry 2..3: /scene/pCube2 +provenance geometry 3..4: /scene/pTorus1 +provenance geometry 4..5: /scene/pSphere2 +provenance mesh: MeshOrigin { geom_id: 0, slot: 0, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 1, slot: 1, baked: false, moving: false } +provenance mesh: MeshOrigin { geom_id: 2, slot: 2, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 3, slot: 3, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 4, slot: 1, baked: false, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 12343188411137242430, n_points: 8, n_indices: 20, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 1: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 17119738035130870988, n_points: 382, n_indices: 1560, n_uvs: None, smooth: false, material: 0 }), placements: 2, shared: false, displaced: false } +provenance mesh slot 2: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 1739488954094729910, n_points: 8, n_indices: 24, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 3: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 6096447469814747168, n_points: 400, n_indices: 1600, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/scene/camera1"), cameras: ["/scene/camera1"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/scene/camera1"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/cornellbox_usda-2772d706794ce66b-3.image b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-2772d706794ce66b-3.image new file mode 100644 index 000000000..ba4884437 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-2772d706794ce66b-3.image @@ -0,0 +1 @@ +640x360 16spp clamp-off 52a1a46f3a46d230 diff --git a/crates/crust-core/tests/data/import_baselines/cornellbox_usda-2772d706794ce66b-4.digest b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-2772d706794ce66b-4.digest new file mode 100644 index 000000000..0e859a952 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-2772d706794ce66b-4.digest @@ -0,0 +1,40 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/scene/camera1") +camera: Camera { origin: Vec3A(0.0074343784, 1.9913422, 4.0133057), lower_left_corner: Vec3A(-8.881443, -3.0086517, -0.98669434), horizontal: Vec3A(17.777756, 0.0, 0.0), vertical: Vec3A(0.0, 9.999988, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: Some(Vec4(0.0, 0.0, -1.0, 3.9133058)), far: Some(Vec4(0.0, 0.0, 1.0, 9995.986)), planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: None +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 640, height: 360, region: PixelRect { x0: 0, y0: 0, x1: 640, y1: 360 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 12.700017, aperture: [25.4, 25.4], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 5.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/cornellbox.usda"], invisible_overrides: Some(0) } +layer: $DIR/cornellbox.usda +warning: Warning { code: AssetUnsupportedByHost, kind: Skipped, count: 1, prims: [], message: "No asset loader: environment map $DIR/sky_gradient.exr ignored — the dome falls back to its uniform colour. Use Scene::from_usd_with_assets to supply one." } +warning: Warning { code: MaterialFallbackDefault, kind: Skipped, count: 1, prims: ["/scene/Looks/initialShadingGroup"], message: "Material /scene/Looks/initialShadingGroup has no surface shader — using default grey OpenPBR" } +lights: 1 +light 0: dome name Some("/scene/Sky") lpe None pmf 1.0 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 5 geometries, PrimitiveBreakdown { triangles: 822, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 2 } top level, PrimitiveBreakdown { triangles: 1582, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 2 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 4.0 motion [] pieces all=10:88b22fc3345d5b05 camera=10:88b22fc3345d5b05 shadow=10:88b22fc3345d5b05 indirect=10:88b22fc3345d5b05 +geom 1: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.2 motion [] pieces all=760:c2b60a75c52c78b9 camera=760:c2b60a75c52c78b9 shadow=760:c2b60a75c52c78b9 indirect=760:c2b60a75c52c78b9 +geom 2: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=12:94a297badef437e1 camera=12:94a297badef437e1 shadow=12:94a297badef437e1 indirect=12:94a297badef437e1 +geom 3: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.25 motion [] pieces all=800:4a8c9f44d777e131 camera=800:4a8c9f44d777e131 shadow=800:4a8c9f44d777e131 indirect=800:4a8c9f44d777e131 +geom 4: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.3585339 motion [] pieces all=760:2344ecf63e12c441 camera=760:2344ecf63e12c441 shadow=760:2344ecf63e12c441 indirect=760:2344ecf63e12c441 +provenance material /scene/Looks/initialShadingGroup: MaterialOrigin { slots: [0, 1, 2, 3, 4], displaced: false } +provenance light /scene/Sky: LightOrigin { index: 0, geoms: 0..0 } +provenance geometry 0..1: /scene/pCube1 +provenance geometry 1..2: /scene/pSphere1 +provenance geometry 2..3: /scene/pCube2 +provenance geometry 3..4: /scene/pTorus1 +provenance geometry 4..5: /scene/pSphere2 +provenance mesh: MeshOrigin { geom_id: 0, slot: 0, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 1, slot: 1, baked: false, moving: false } +provenance mesh: MeshOrigin { geom_id: 2, slot: 2, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 3, slot: 3, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 4, slot: 1, baked: false, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 12343188411137242430, n_points: 8, n_indices: 20, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 1: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 17119738035130870988, n_points: 382, n_indices: 1560, n_uvs: None, smooth: false, material: 0 }), placements: 2, shared: false, displaced: false } +provenance mesh slot 2: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 1739488954094729910, n_points: 8, n_indices: 24, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 3: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 6096447469814747168, n_points: 400, n_indices: 1600, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/scene/camera1"), cameras: ["/scene/camera1"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/scene/camera1"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/cornellbox_usda-2772d706794ce66b-4.image b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-2772d706794ce66b-4.image new file mode 100644 index 000000000..ba4884437 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-2772d706794ce66b-4.image @@ -0,0 +1 @@ +640x360 16spp clamp-off 52a1a46f3a46d230 diff --git a/crates/crust-core/tests/data/import_baselines/cornellbox_usda-2772d706794ce66b-5.digest b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-2772d706794ce66b-5.digest new file mode 100644 index 000000000..0e859a952 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-2772d706794ce66b-5.digest @@ -0,0 +1,40 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/scene/camera1") +camera: Camera { origin: Vec3A(0.0074343784, 1.9913422, 4.0133057), lower_left_corner: Vec3A(-8.881443, -3.0086517, -0.98669434), horizontal: Vec3A(17.777756, 0.0, 0.0), vertical: Vec3A(0.0, 9.999988, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: Some(Vec4(0.0, 0.0, -1.0, 3.9133058)), far: Some(Vec4(0.0, 0.0, 1.0, 9995.986)), planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: None +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 640, height: 360, region: PixelRect { x0: 0, y0: 0, x1: 640, y1: 360 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 12.700017, aperture: [25.4, 25.4], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 5.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/cornellbox.usda"], invisible_overrides: Some(0) } +layer: $DIR/cornellbox.usda +warning: Warning { code: AssetUnsupportedByHost, kind: Skipped, count: 1, prims: [], message: "No asset loader: environment map $DIR/sky_gradient.exr ignored — the dome falls back to its uniform colour. Use Scene::from_usd_with_assets to supply one." } +warning: Warning { code: MaterialFallbackDefault, kind: Skipped, count: 1, prims: ["/scene/Looks/initialShadingGroup"], message: "Material /scene/Looks/initialShadingGroup has no surface shader — using default grey OpenPBR" } +lights: 1 +light 0: dome name Some("/scene/Sky") lpe None pmf 1.0 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 5 geometries, PrimitiveBreakdown { triangles: 822, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 2 } top level, PrimitiveBreakdown { triangles: 1582, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 2 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 4.0 motion [] pieces all=10:88b22fc3345d5b05 camera=10:88b22fc3345d5b05 shadow=10:88b22fc3345d5b05 indirect=10:88b22fc3345d5b05 +geom 1: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.2 motion [] pieces all=760:c2b60a75c52c78b9 camera=760:c2b60a75c52c78b9 shadow=760:c2b60a75c52c78b9 indirect=760:c2b60a75c52c78b9 +geom 2: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=12:94a297badef437e1 camera=12:94a297badef437e1 shadow=12:94a297badef437e1 indirect=12:94a297badef437e1 +geom 3: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.25 motion [] pieces all=800:4a8c9f44d777e131 camera=800:4a8c9f44d777e131 shadow=800:4a8c9f44d777e131 indirect=800:4a8c9f44d777e131 +geom 4: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.3585339 motion [] pieces all=760:2344ecf63e12c441 camera=760:2344ecf63e12c441 shadow=760:2344ecf63e12c441 indirect=760:2344ecf63e12c441 +provenance material /scene/Looks/initialShadingGroup: MaterialOrigin { slots: [0, 1, 2, 3, 4], displaced: false } +provenance light /scene/Sky: LightOrigin { index: 0, geoms: 0..0 } +provenance geometry 0..1: /scene/pCube1 +provenance geometry 1..2: /scene/pSphere1 +provenance geometry 2..3: /scene/pCube2 +provenance geometry 3..4: /scene/pTorus1 +provenance geometry 4..5: /scene/pSphere2 +provenance mesh: MeshOrigin { geom_id: 0, slot: 0, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 1, slot: 1, baked: false, moving: false } +provenance mesh: MeshOrigin { geom_id: 2, slot: 2, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 3, slot: 3, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 4, slot: 1, baked: false, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 12343188411137242430, n_points: 8, n_indices: 20, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 1: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 17119738035130870988, n_points: 382, n_indices: 1560, n_uvs: None, smooth: false, material: 0 }), placements: 2, shared: false, displaced: false } +provenance mesh slot 2: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 1739488954094729910, n_points: 8, n_indices: 24, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 3: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 6096447469814747168, n_points: 400, n_indices: 1600, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/scene/camera1"), cameras: ["/scene/camera1"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/scene/camera1"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/cornellbox_usda-2772d706794ce66b-5.image b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-2772d706794ce66b-5.image new file mode 100644 index 000000000..ba4884437 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-2772d706794ce66b-5.image @@ -0,0 +1 @@ +640x360 16spp clamp-off 52a1a46f3a46d230 diff --git a/crates/crust-core/tests/data/import_baselines/cornellbox_usda-2772d706794ce66b-6.digest b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-2772d706794ce66b-6.digest new file mode 100644 index 000000000..0e859a952 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-2772d706794ce66b-6.digest @@ -0,0 +1,40 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/scene/camera1") +camera: Camera { origin: Vec3A(0.0074343784, 1.9913422, 4.0133057), lower_left_corner: Vec3A(-8.881443, -3.0086517, -0.98669434), horizontal: Vec3A(17.777756, 0.0, 0.0), vertical: Vec3A(0.0, 9.999988, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: Some(Vec4(0.0, 0.0, -1.0, 3.9133058)), far: Some(Vec4(0.0, 0.0, 1.0, 9995.986)), planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: None +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 640, height: 360, region: PixelRect { x0: 0, y0: 0, x1: 640, y1: 360 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 12.700017, aperture: [25.4, 25.4], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 5.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/cornellbox.usda"], invisible_overrides: Some(0) } +layer: $DIR/cornellbox.usda +warning: Warning { code: AssetUnsupportedByHost, kind: Skipped, count: 1, prims: [], message: "No asset loader: environment map $DIR/sky_gradient.exr ignored — the dome falls back to its uniform colour. Use Scene::from_usd_with_assets to supply one." } +warning: Warning { code: MaterialFallbackDefault, kind: Skipped, count: 1, prims: ["/scene/Looks/initialShadingGroup"], message: "Material /scene/Looks/initialShadingGroup has no surface shader — using default grey OpenPBR" } +lights: 1 +light 0: dome name Some("/scene/Sky") lpe None pmf 1.0 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 5 geometries, PrimitiveBreakdown { triangles: 822, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 2 } top level, PrimitiveBreakdown { triangles: 1582, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 2 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 4.0 motion [] pieces all=10:88b22fc3345d5b05 camera=10:88b22fc3345d5b05 shadow=10:88b22fc3345d5b05 indirect=10:88b22fc3345d5b05 +geom 1: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.2 motion [] pieces all=760:c2b60a75c52c78b9 camera=760:c2b60a75c52c78b9 shadow=760:c2b60a75c52c78b9 indirect=760:c2b60a75c52c78b9 +geom 2: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=12:94a297badef437e1 camera=12:94a297badef437e1 shadow=12:94a297badef437e1 indirect=12:94a297badef437e1 +geom 3: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.25 motion [] pieces all=800:4a8c9f44d777e131 camera=800:4a8c9f44d777e131 shadow=800:4a8c9f44d777e131 indirect=800:4a8c9f44d777e131 +geom 4: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.3585339 motion [] pieces all=760:2344ecf63e12c441 camera=760:2344ecf63e12c441 shadow=760:2344ecf63e12c441 indirect=760:2344ecf63e12c441 +provenance material /scene/Looks/initialShadingGroup: MaterialOrigin { slots: [0, 1, 2, 3, 4], displaced: false } +provenance light /scene/Sky: LightOrigin { index: 0, geoms: 0..0 } +provenance geometry 0..1: /scene/pCube1 +provenance geometry 1..2: /scene/pSphere1 +provenance geometry 2..3: /scene/pCube2 +provenance geometry 3..4: /scene/pTorus1 +provenance geometry 4..5: /scene/pSphere2 +provenance mesh: MeshOrigin { geom_id: 0, slot: 0, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 1, slot: 1, baked: false, moving: false } +provenance mesh: MeshOrigin { geom_id: 2, slot: 2, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 3, slot: 3, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 4, slot: 1, baked: false, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 12343188411137242430, n_points: 8, n_indices: 20, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 1: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 17119738035130870988, n_points: 382, n_indices: 1560, n_uvs: None, smooth: false, material: 0 }), placements: 2, shared: false, displaced: false } +provenance mesh slot 2: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 1739488954094729910, n_points: 8, n_indices: 24, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 3: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 6096447469814747168, n_points: 400, n_indices: 1600, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/scene/camera1"), cameras: ["/scene/camera1"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/scene/camera1"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/cornellbox_usda-2772d706794ce66b-6.image b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-2772d706794ce66b-6.image new file mode 100644 index 000000000..ba4884437 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-2772d706794ce66b-6.image @@ -0,0 +1 @@ +640x360 16spp clamp-off 52a1a46f3a46d230 diff --git a/crates/crust-core/tests/data/import_baselines/cornellbox_usda-2cf51e7bf43f4fa8-1.digest b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-2cf51e7bf43f4fa8-1.digest new file mode 100644 index 000000000..1d5ab0cab --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-2cf51e7bf43f4fa8-1.digest @@ -0,0 +1,39 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/scene/camera1") +camera: Camera { origin: Vec3A(0.0074343784, 1.9913422, 4.0133057), lower_left_corner: Vec3A(-8.881443, -3.0086517, -0.98669434), horizontal: Vec3A(17.777756, 0.0, 0.0), vertical: Vec3A(0.0, 9.999988, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: Some(Vec4(0.0, 0.0, -1.0, 3.9133058)), far: Some(Vec4(0.0, 0.0, 1.0, 9995.986)), planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: None +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 640, height: 360, region: PixelRect { x0: 0, y0: 0, x1: 640, y1: 360 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 12.700017, aperture: [25.4, 25.4], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 5.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/cornellbox.usda"], invisible_overrides: Some(0) } +layer: $DIR/cornellbox.usda +warning: Warning { code: MaterialFallbackDefault, kind: Skipped, count: 1, prims: ["/scene/Looks/initialShadingGroup"], message: "Material /scene/Looks/initialShadingGroup has no surface shader — using default grey OpenPBR" } +lights: 1 +light 0: dome name Some("/scene/Sky") lpe None pmf 1.0 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 5 geometries, PrimitiveBreakdown { triangles: 822, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 2 } top level, PrimitiveBreakdown { triangles: 1582, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 2 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 4.0 motion [] pieces all=10:88b22fc3345d5b05 camera=10:88b22fc3345d5b05 shadow=10:88b22fc3345d5b05 indirect=10:88b22fc3345d5b05 +geom 1: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.2 motion [] pieces all=760:c2b60a75c52c78b9 camera=760:c2b60a75c52c78b9 shadow=760:c2b60a75c52c78b9 indirect=760:c2b60a75c52c78b9 +geom 2: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=12:94a297badef437e1 camera=12:94a297badef437e1 shadow=12:94a297badef437e1 indirect=12:94a297badef437e1 +geom 3: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.25 motion [] pieces all=800:4a8c9f44d777e131 camera=800:4a8c9f44d777e131 shadow=800:4a8c9f44d777e131 indirect=800:4a8c9f44d777e131 +geom 4: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.3585339 motion [] pieces all=760:2344ecf63e12c441 camera=760:2344ecf63e12c441 shadow=760:2344ecf63e12c441 indirect=760:2344ecf63e12c441 +provenance material /scene/Looks/initialShadingGroup: MaterialOrigin { slots: [0, 1, 2, 3, 4], displaced: false } +provenance light /scene/Sky: LightOrigin { index: 0, geoms: 0..0 } +provenance geometry 0..1: /scene/pCube1 +provenance geometry 1..2: /scene/pSphere1 +provenance geometry 2..3: /scene/pCube2 +provenance geometry 3..4: /scene/pTorus1 +provenance geometry 4..5: /scene/pSphere2 +provenance mesh: MeshOrigin { geom_id: 0, slot: 0, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 1, slot: 1, baked: false, moving: false } +provenance mesh: MeshOrigin { geom_id: 2, slot: 2, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 3, slot: 3, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 4, slot: 1, baked: false, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 12343188411137242430, n_points: 8, n_indices: 20, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 1: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 17119738035130870988, n_points: 382, n_indices: 1560, n_uvs: None, smooth: false, material: 0 }), placements: 2, shared: false, displaced: false } +provenance mesh slot 2: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 1739488954094729910, n_points: 8, n_indices: 24, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 3: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 6096447469814747168, n_points: 400, n_indices: 1600, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: true, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/scene/camera1"), cameras: ["/scene/camera1"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/scene/camera1"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/cornellbox_usda-2cf51e7bf43f4fa8-1.image b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-2cf51e7bf43f4fa8-1.image new file mode 100644 index 000000000..7172edbfe --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-2cf51e7bf43f4fa8-1.image @@ -0,0 +1 @@ +640x360 16spp clamp-off 64ede904b11bab22 diff --git a/crates/crust-core/tests/data/import_baselines/cornellbox_usda-2dd566e6043ed6b0-1.digest b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-2dd566e6043ed6b0-1.digest new file mode 100644 index 000000000..0e859a952 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-2dd566e6043ed6b0-1.digest @@ -0,0 +1,40 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/scene/camera1") +camera: Camera { origin: Vec3A(0.0074343784, 1.9913422, 4.0133057), lower_left_corner: Vec3A(-8.881443, -3.0086517, -0.98669434), horizontal: Vec3A(17.777756, 0.0, 0.0), vertical: Vec3A(0.0, 9.999988, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: Some(Vec4(0.0, 0.0, -1.0, 3.9133058)), far: Some(Vec4(0.0, 0.0, 1.0, 9995.986)), planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: None +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 640, height: 360, region: PixelRect { x0: 0, y0: 0, x1: 640, y1: 360 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 12.700017, aperture: [25.4, 25.4], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 5.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/cornellbox.usda"], invisible_overrides: Some(0) } +layer: $DIR/cornellbox.usda +warning: Warning { code: AssetUnsupportedByHost, kind: Skipped, count: 1, prims: [], message: "No asset loader: environment map $DIR/sky_gradient.exr ignored — the dome falls back to its uniform colour. Use Scene::from_usd_with_assets to supply one." } +warning: Warning { code: MaterialFallbackDefault, kind: Skipped, count: 1, prims: ["/scene/Looks/initialShadingGroup"], message: "Material /scene/Looks/initialShadingGroup has no surface shader — using default grey OpenPBR" } +lights: 1 +light 0: dome name Some("/scene/Sky") lpe None pmf 1.0 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 5 geometries, PrimitiveBreakdown { triangles: 822, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 2 } top level, PrimitiveBreakdown { triangles: 1582, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 2 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 4.0 motion [] pieces all=10:88b22fc3345d5b05 camera=10:88b22fc3345d5b05 shadow=10:88b22fc3345d5b05 indirect=10:88b22fc3345d5b05 +geom 1: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.2 motion [] pieces all=760:c2b60a75c52c78b9 camera=760:c2b60a75c52c78b9 shadow=760:c2b60a75c52c78b9 indirect=760:c2b60a75c52c78b9 +geom 2: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=12:94a297badef437e1 camera=12:94a297badef437e1 shadow=12:94a297badef437e1 indirect=12:94a297badef437e1 +geom 3: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.25 motion [] pieces all=800:4a8c9f44d777e131 camera=800:4a8c9f44d777e131 shadow=800:4a8c9f44d777e131 indirect=800:4a8c9f44d777e131 +geom 4: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.3585339 motion [] pieces all=760:2344ecf63e12c441 camera=760:2344ecf63e12c441 shadow=760:2344ecf63e12c441 indirect=760:2344ecf63e12c441 +provenance material /scene/Looks/initialShadingGroup: MaterialOrigin { slots: [0, 1, 2, 3, 4], displaced: false } +provenance light /scene/Sky: LightOrigin { index: 0, geoms: 0..0 } +provenance geometry 0..1: /scene/pCube1 +provenance geometry 1..2: /scene/pSphere1 +provenance geometry 2..3: /scene/pCube2 +provenance geometry 3..4: /scene/pTorus1 +provenance geometry 4..5: /scene/pSphere2 +provenance mesh: MeshOrigin { geom_id: 0, slot: 0, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 1, slot: 1, baked: false, moving: false } +provenance mesh: MeshOrigin { geom_id: 2, slot: 2, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 3, slot: 3, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 4, slot: 1, baked: false, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 12343188411137242430, n_points: 8, n_indices: 20, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 1: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 17119738035130870988, n_points: 382, n_indices: 1560, n_uvs: None, smooth: false, material: 0 }), placements: 2, shared: false, displaced: false } +provenance mesh slot 2: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 1739488954094729910, n_points: 8, n_indices: 24, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 3: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 6096447469814747168, n_points: 400, n_indices: 1600, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/scene/camera1"), cameras: ["/scene/camera1"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/scene/camera1"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/cornellbox_usda-2dd566e6043ed6b0-1.image b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-2dd566e6043ed6b0-1.image new file mode 100644 index 000000000..ba4884437 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-2dd566e6043ed6b0-1.image @@ -0,0 +1 @@ +640x360 16spp clamp-off 52a1a46f3a46d230 diff --git a/crates/crust-core/tests/data/import_baselines/cornellbox_usda-2dd566e6043ed6b0-2.digest b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-2dd566e6043ed6b0-2.digest new file mode 100644 index 000000000..0e859a952 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-2dd566e6043ed6b0-2.digest @@ -0,0 +1,40 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/scene/camera1") +camera: Camera { origin: Vec3A(0.0074343784, 1.9913422, 4.0133057), lower_left_corner: Vec3A(-8.881443, -3.0086517, -0.98669434), horizontal: Vec3A(17.777756, 0.0, 0.0), vertical: Vec3A(0.0, 9.999988, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: Some(Vec4(0.0, 0.0, -1.0, 3.9133058)), far: Some(Vec4(0.0, 0.0, 1.0, 9995.986)), planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: None +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 640, height: 360, region: PixelRect { x0: 0, y0: 0, x1: 640, y1: 360 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 12.700017, aperture: [25.4, 25.4], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 5.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/cornellbox.usda"], invisible_overrides: Some(0) } +layer: $DIR/cornellbox.usda +warning: Warning { code: AssetUnsupportedByHost, kind: Skipped, count: 1, prims: [], message: "No asset loader: environment map $DIR/sky_gradient.exr ignored — the dome falls back to its uniform colour. Use Scene::from_usd_with_assets to supply one." } +warning: Warning { code: MaterialFallbackDefault, kind: Skipped, count: 1, prims: ["/scene/Looks/initialShadingGroup"], message: "Material /scene/Looks/initialShadingGroup has no surface shader — using default grey OpenPBR" } +lights: 1 +light 0: dome name Some("/scene/Sky") lpe None pmf 1.0 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 5 geometries, PrimitiveBreakdown { triangles: 822, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 2 } top level, PrimitiveBreakdown { triangles: 1582, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 2 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 4.0 motion [] pieces all=10:88b22fc3345d5b05 camera=10:88b22fc3345d5b05 shadow=10:88b22fc3345d5b05 indirect=10:88b22fc3345d5b05 +geom 1: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.2 motion [] pieces all=760:c2b60a75c52c78b9 camera=760:c2b60a75c52c78b9 shadow=760:c2b60a75c52c78b9 indirect=760:c2b60a75c52c78b9 +geom 2: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=12:94a297badef437e1 camera=12:94a297badef437e1 shadow=12:94a297badef437e1 indirect=12:94a297badef437e1 +geom 3: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.25 motion [] pieces all=800:4a8c9f44d777e131 camera=800:4a8c9f44d777e131 shadow=800:4a8c9f44d777e131 indirect=800:4a8c9f44d777e131 +geom 4: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.3585339 motion [] pieces all=760:2344ecf63e12c441 camera=760:2344ecf63e12c441 shadow=760:2344ecf63e12c441 indirect=760:2344ecf63e12c441 +provenance material /scene/Looks/initialShadingGroup: MaterialOrigin { slots: [0, 1, 2, 3, 4], displaced: false } +provenance light /scene/Sky: LightOrigin { index: 0, geoms: 0..0 } +provenance geometry 0..1: /scene/pCube1 +provenance geometry 1..2: /scene/pSphere1 +provenance geometry 2..3: /scene/pCube2 +provenance geometry 3..4: /scene/pTorus1 +provenance geometry 4..5: /scene/pSphere2 +provenance mesh: MeshOrigin { geom_id: 0, slot: 0, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 1, slot: 1, baked: false, moving: false } +provenance mesh: MeshOrigin { geom_id: 2, slot: 2, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 3, slot: 3, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 4, slot: 1, baked: false, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 12343188411137242430, n_points: 8, n_indices: 20, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 1: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 17119738035130870988, n_points: 382, n_indices: 1560, n_uvs: None, smooth: false, material: 0 }), placements: 2, shared: false, displaced: false } +provenance mesh slot 2: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 1739488954094729910, n_points: 8, n_indices: 24, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 3: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 6096447469814747168, n_points: 400, n_indices: 1600, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/scene/camera1"), cameras: ["/scene/camera1"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/scene/camera1"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/cornellbox_usda-2dd566e6043ed6b0-2.image b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-2dd566e6043ed6b0-2.image new file mode 100644 index 000000000..ba4884437 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-2dd566e6043ed6b0-2.image @@ -0,0 +1 @@ +640x360 16spp clamp-off 52a1a46f3a46d230 diff --git a/crates/crust-core/tests/data/import_baselines/cornellbox_usda-2dd566e6043ed6b0-3.digest b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-2dd566e6043ed6b0-3.digest new file mode 100644 index 000000000..0e859a952 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-2dd566e6043ed6b0-3.digest @@ -0,0 +1,40 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/scene/camera1") +camera: Camera { origin: Vec3A(0.0074343784, 1.9913422, 4.0133057), lower_left_corner: Vec3A(-8.881443, -3.0086517, -0.98669434), horizontal: Vec3A(17.777756, 0.0, 0.0), vertical: Vec3A(0.0, 9.999988, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: Some(Vec4(0.0, 0.0, -1.0, 3.9133058)), far: Some(Vec4(0.0, 0.0, 1.0, 9995.986)), planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: None +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 640, height: 360, region: PixelRect { x0: 0, y0: 0, x1: 640, y1: 360 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 12.700017, aperture: [25.4, 25.4], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 5.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/cornellbox.usda"], invisible_overrides: Some(0) } +layer: $DIR/cornellbox.usda +warning: Warning { code: AssetUnsupportedByHost, kind: Skipped, count: 1, prims: [], message: "No asset loader: environment map $DIR/sky_gradient.exr ignored — the dome falls back to its uniform colour. Use Scene::from_usd_with_assets to supply one." } +warning: Warning { code: MaterialFallbackDefault, kind: Skipped, count: 1, prims: ["/scene/Looks/initialShadingGroup"], message: "Material /scene/Looks/initialShadingGroup has no surface shader — using default grey OpenPBR" } +lights: 1 +light 0: dome name Some("/scene/Sky") lpe None pmf 1.0 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 5 geometries, PrimitiveBreakdown { triangles: 822, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 2 } top level, PrimitiveBreakdown { triangles: 1582, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 2 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 4.0 motion [] pieces all=10:88b22fc3345d5b05 camera=10:88b22fc3345d5b05 shadow=10:88b22fc3345d5b05 indirect=10:88b22fc3345d5b05 +geom 1: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.2 motion [] pieces all=760:c2b60a75c52c78b9 camera=760:c2b60a75c52c78b9 shadow=760:c2b60a75c52c78b9 indirect=760:c2b60a75c52c78b9 +geom 2: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=12:94a297badef437e1 camera=12:94a297badef437e1 shadow=12:94a297badef437e1 indirect=12:94a297badef437e1 +geom 3: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.25 motion [] pieces all=800:4a8c9f44d777e131 camera=800:4a8c9f44d777e131 shadow=800:4a8c9f44d777e131 indirect=800:4a8c9f44d777e131 +geom 4: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.3585339 motion [] pieces all=760:2344ecf63e12c441 camera=760:2344ecf63e12c441 shadow=760:2344ecf63e12c441 indirect=760:2344ecf63e12c441 +provenance material /scene/Looks/initialShadingGroup: MaterialOrigin { slots: [0, 1, 2, 3, 4], displaced: false } +provenance light /scene/Sky: LightOrigin { index: 0, geoms: 0..0 } +provenance geometry 0..1: /scene/pCube1 +provenance geometry 1..2: /scene/pSphere1 +provenance geometry 2..3: /scene/pCube2 +provenance geometry 3..4: /scene/pTorus1 +provenance geometry 4..5: /scene/pSphere2 +provenance mesh: MeshOrigin { geom_id: 0, slot: 0, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 1, slot: 1, baked: false, moving: false } +provenance mesh: MeshOrigin { geom_id: 2, slot: 2, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 3, slot: 3, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 4, slot: 1, baked: false, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 12343188411137242430, n_points: 8, n_indices: 20, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 1: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 17119738035130870988, n_points: 382, n_indices: 1560, n_uvs: None, smooth: false, material: 0 }), placements: 2, shared: false, displaced: false } +provenance mesh slot 2: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 1739488954094729910, n_points: 8, n_indices: 24, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 3: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 6096447469814747168, n_points: 400, n_indices: 1600, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/scene/camera1"), cameras: ["/scene/camera1"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/scene/camera1"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/cornellbox_usda-2dd566e6043ed6b0-3.image b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-2dd566e6043ed6b0-3.image new file mode 100644 index 000000000..ba4884437 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-2dd566e6043ed6b0-3.image @@ -0,0 +1 @@ +640x360 16spp clamp-off 52a1a46f3a46d230 diff --git a/crates/crust-core/tests/data/import_baselines/cornellbox_usda-3a12e7835578a84e-1.digest b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-3a12e7835578a84e-1.digest new file mode 100644 index 000000000..ed09acff1 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-3a12e7835578a84e-1.digest @@ -0,0 +1,39 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/scene/camera1") +camera: Camera { origin: Vec3A(0.0074343784, 1.9913422, 4.0133057), lower_left_corner: Vec3A(-8.881443, -3.0086517, -0.98669434), horizontal: Vec3A(17.777756, 0.0, 0.0), vertical: Vec3A(0.0, 9.999988, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: Some(Vec4(0.0, 0.0, -1.0, 3.9133058)), far: Some(Vec4(0.0, 0.0, 1.0, 9995.986)), planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: None +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 640, height: 360, region: PixelRect { x0: 0, y0: 0, x1: 640, y1: 360 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 12.700017, aperture: [25.4, 25.4], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 5.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$ROOT/samples/cornellbox.usda"], invisible_overrides: Some(0) } +layer: $ROOT/samples/cornellbox.usda +warning: Warning { code: MaterialFallbackDefault, kind: Skipped, count: 1, prims: ["/scene/Looks/initialShadingGroup"], message: "Material /scene/Looks/initialShadingGroup has no surface shader — using default grey OpenPBR" } +lights: 1 +light 0: dome name Some("/scene/Sky") lpe None pmf 1.0 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 5 geometries, PrimitiveBreakdown { triangles: 822, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 2 } top level, PrimitiveBreakdown { triangles: 1582, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 2 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 4.0 motion [] pieces all=10:88b22fc3345d5b05 camera=10:88b22fc3345d5b05 shadow=10:88b22fc3345d5b05 indirect=10:88b22fc3345d5b05 +geom 1: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.2 motion [] pieces all=760:c2b60a75c52c78b9 camera=760:c2b60a75c52c78b9 shadow=760:c2b60a75c52c78b9 indirect=760:c2b60a75c52c78b9 +geom 2: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=12:94a297badef437e1 camera=12:94a297badef437e1 shadow=12:94a297badef437e1 indirect=12:94a297badef437e1 +geom 3: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.25 motion [] pieces all=800:4a8c9f44d777e131 camera=800:4a8c9f44d777e131 shadow=800:4a8c9f44d777e131 indirect=800:4a8c9f44d777e131 +geom 4: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.3585339 motion [] pieces all=760:2344ecf63e12c441 camera=760:2344ecf63e12c441 shadow=760:2344ecf63e12c441 indirect=760:2344ecf63e12c441 +provenance material /scene/Looks/initialShadingGroup: MaterialOrigin { slots: [0, 1, 2, 3, 4], displaced: false } +provenance light /scene/Sky: LightOrigin { index: 0, geoms: 0..0 } +provenance geometry 0..1: /scene/pCube1 +provenance geometry 1..2: /scene/pSphere1 +provenance geometry 2..3: /scene/pCube2 +provenance geometry 3..4: /scene/pTorus1 +provenance geometry 4..5: /scene/pSphere2 +provenance mesh: MeshOrigin { geom_id: 0, slot: 0, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 1, slot: 1, baked: false, moving: false } +provenance mesh: MeshOrigin { geom_id: 2, slot: 2, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 3, slot: 3, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 4, slot: 1, baked: false, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 12343188411137242430, n_points: 8, n_indices: 20, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 1: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 17119738035130870988, n_points: 382, n_indices: 1560, n_uvs: None, smooth: false, material: 0 }), placements: 2, shared: false, displaced: false } +provenance mesh slot 2: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 1739488954094729910, n_points: 8, n_indices: 24, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 3: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 6096447469814747168, n_points: 400, n_indices: 1600, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: true, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/scene/camera1"), cameras: ["/scene/camera1"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/scene/camera1"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/cornellbox_usda-3a12e7835578a84e-1.image b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-3a12e7835578a84e-1.image new file mode 100644 index 000000000..7172edbfe --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-3a12e7835578a84e-1.image @@ -0,0 +1 @@ +640x360 16spp clamp-off 64ede904b11bab22 diff --git a/crates/crust-core/tests/data/import_baselines/cornellbox_usda-3a2af9f3e570b458-1.digest b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-3a2af9f3e570b458-1.digest new file mode 100644 index 000000000..10c3b5af3 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-3a2af9f3e570b458-1.digest @@ -0,0 +1,39 @@ +time: Some(10.5) +working space: Linear Rec.709 (sRGB) +camera path: Some("/scene/camera1") +camera: Camera { origin: Vec3A(0.0074343784, 1.9913422, 4.0133057), lower_left_corner: Vec3A(-8.881443, -3.0086517, -0.98669434), horizontal: Vec3A(17.777756, 0.0, 0.0), vertical: Vec3A(0.0, 9.999988, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: Some(Vec4(0.0, 0.0, -1.0, 3.9133058)), far: Some(Vec4(0.0, 0.0, 1.0, 9995.986)), planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: None +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 640, height: 360, region: PixelRect { x0: 0, y0: 0, x1: 640, y1: 360 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 10, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 12.700017, aperture: [25.4, 25.4], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 5.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/cornellbox.usda"], invisible_overrides: Some(0) } +layer: $DIR/cornellbox.usda +warning: Warning { code: MaterialFallbackDefault, kind: Skipped, count: 1, prims: ["/scene/Looks/initialShadingGroup"], message: "Material /scene/Looks/initialShadingGroup has no surface shader — using default grey OpenPBR" } +lights: 1 +light 0: dome name Some("/scene/Sky") lpe None pmf 1.0 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 5 geometries, PrimitiveBreakdown { triangles: 822, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 2 } top level, PrimitiveBreakdown { triangles: 1582, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 2 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 4.0 motion [] pieces all=10:88b22fc3345d5b05 camera=10:88b22fc3345d5b05 shadow=10:88b22fc3345d5b05 indirect=10:88b22fc3345d5b05 +geom 1: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.2 motion [] pieces all=760:c2b60a75c52c78b9 camera=760:c2b60a75c52c78b9 shadow=760:c2b60a75c52c78b9 indirect=760:c2b60a75c52c78b9 +geom 2: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=12:94a297badef437e1 camera=12:94a297badef437e1 shadow=12:94a297badef437e1 indirect=12:94a297badef437e1 +geom 3: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.25 motion [] pieces all=800:4a8c9f44d777e131 camera=800:4a8c9f44d777e131 shadow=800:4a8c9f44d777e131 indirect=800:4a8c9f44d777e131 +geom 4: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.3585339 motion [] pieces all=760:2344ecf63e12c441 camera=760:2344ecf63e12c441 shadow=760:2344ecf63e12c441 indirect=760:2344ecf63e12c441 +provenance material /scene/Looks/initialShadingGroup: MaterialOrigin { slots: [0, 1, 2, 3, 4], displaced: false } +provenance light /scene/Sky: LightOrigin { index: 0, geoms: 0..0 } +provenance geometry 0..1: /scene/pCube1 +provenance geometry 1..2: /scene/pSphere1 +provenance geometry 2..3: /scene/pCube2 +provenance geometry 3..4: /scene/pTorus1 +provenance geometry 4..5: /scene/pSphere2 +provenance mesh: MeshOrigin { geom_id: 0, slot: 0, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 1, slot: 1, baked: false, moving: false } +provenance mesh: MeshOrigin { geom_id: 2, slot: 2, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 3, slot: 3, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 4, slot: 1, baked: false, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 12343188411137242430, n_points: 8, n_indices: 20, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 1: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 17119738035130870988, n_points: 382, n_indices: 1560, n_uvs: None, smooth: false, material: 0 }), placements: 2, shared: false, displaced: false } +provenance mesh slot 2: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 1739488954094729910, n_points: 8, n_indices: 24, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 3: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 6096447469814747168, n_points: 400, n_indices: 1600, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: Some(10.5), camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: true, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/scene/camera1"), cameras: ["/scene/camera1"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/scene/camera1"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/cornellbox_usda-3a2af9f3e570b458-1.image b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-3a2af9f3e570b458-1.image new file mode 100644 index 000000000..ba7807e5c --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-3a2af9f3e570b458-1.image @@ -0,0 +1 @@ +640x360 16spp clamp-off be51728d9580fa28 diff --git a/crates/crust-core/tests/data/import_baselines/cornellbox_usda-3c316a1edd099ef0-1.digest b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-3c316a1edd099ef0-1.digest new file mode 100644 index 000000000..1d5ab0cab --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-3c316a1edd099ef0-1.digest @@ -0,0 +1,39 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/scene/camera1") +camera: Camera { origin: Vec3A(0.0074343784, 1.9913422, 4.0133057), lower_left_corner: Vec3A(-8.881443, -3.0086517, -0.98669434), horizontal: Vec3A(17.777756, 0.0, 0.0), vertical: Vec3A(0.0, 9.999988, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: Some(Vec4(0.0, 0.0, -1.0, 3.9133058)), far: Some(Vec4(0.0, 0.0, 1.0, 9995.986)), planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: None +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 640, height: 360, region: PixelRect { x0: 0, y0: 0, x1: 640, y1: 360 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 12.700017, aperture: [25.4, 25.4], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 5.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/cornellbox.usda"], invisible_overrides: Some(0) } +layer: $DIR/cornellbox.usda +warning: Warning { code: MaterialFallbackDefault, kind: Skipped, count: 1, prims: ["/scene/Looks/initialShadingGroup"], message: "Material /scene/Looks/initialShadingGroup has no surface shader — using default grey OpenPBR" } +lights: 1 +light 0: dome name Some("/scene/Sky") lpe None pmf 1.0 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 5 geometries, PrimitiveBreakdown { triangles: 822, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 2 } top level, PrimitiveBreakdown { triangles: 1582, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 2 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 4.0 motion [] pieces all=10:88b22fc3345d5b05 camera=10:88b22fc3345d5b05 shadow=10:88b22fc3345d5b05 indirect=10:88b22fc3345d5b05 +geom 1: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.2 motion [] pieces all=760:c2b60a75c52c78b9 camera=760:c2b60a75c52c78b9 shadow=760:c2b60a75c52c78b9 indirect=760:c2b60a75c52c78b9 +geom 2: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=12:94a297badef437e1 camera=12:94a297badef437e1 shadow=12:94a297badef437e1 indirect=12:94a297badef437e1 +geom 3: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.25 motion [] pieces all=800:4a8c9f44d777e131 camera=800:4a8c9f44d777e131 shadow=800:4a8c9f44d777e131 indirect=800:4a8c9f44d777e131 +geom 4: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.3585339 motion [] pieces all=760:2344ecf63e12c441 camera=760:2344ecf63e12c441 shadow=760:2344ecf63e12c441 indirect=760:2344ecf63e12c441 +provenance material /scene/Looks/initialShadingGroup: MaterialOrigin { slots: [0, 1, 2, 3, 4], displaced: false } +provenance light /scene/Sky: LightOrigin { index: 0, geoms: 0..0 } +provenance geometry 0..1: /scene/pCube1 +provenance geometry 1..2: /scene/pSphere1 +provenance geometry 2..3: /scene/pCube2 +provenance geometry 3..4: /scene/pTorus1 +provenance geometry 4..5: /scene/pSphere2 +provenance mesh: MeshOrigin { geom_id: 0, slot: 0, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 1, slot: 1, baked: false, moving: false } +provenance mesh: MeshOrigin { geom_id: 2, slot: 2, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 3, slot: 3, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 4, slot: 1, baked: false, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 12343188411137242430, n_points: 8, n_indices: 20, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 1: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 17119738035130870988, n_points: 382, n_indices: 1560, n_uvs: None, smooth: false, material: 0 }), placements: 2, shared: false, displaced: false } +provenance mesh slot 2: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 1739488954094729910, n_points: 8, n_indices: 24, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 3: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 6096447469814747168, n_points: 400, n_indices: 1600, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: true, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/scene/camera1"), cameras: ["/scene/camera1"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/scene/camera1"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/cornellbox_usda-3c316a1edd099ef0-1.image b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-3c316a1edd099ef0-1.image new file mode 100644 index 000000000..7172edbfe --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-3c316a1edd099ef0-1.image @@ -0,0 +1 @@ +640x360 16spp clamp-off 64ede904b11bab22 diff --git a/crates/crust-core/tests/data/import_baselines/cornellbox_usda-3c74fafa1c66c123-1.digest b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-3c74fafa1c66c123-1.digest new file mode 100644 index 000000000..0e859a952 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-3c74fafa1c66c123-1.digest @@ -0,0 +1,40 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/scene/camera1") +camera: Camera { origin: Vec3A(0.0074343784, 1.9913422, 4.0133057), lower_left_corner: Vec3A(-8.881443, -3.0086517, -0.98669434), horizontal: Vec3A(17.777756, 0.0, 0.0), vertical: Vec3A(0.0, 9.999988, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: Some(Vec4(0.0, 0.0, -1.0, 3.9133058)), far: Some(Vec4(0.0, 0.0, 1.0, 9995.986)), planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: None +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 640, height: 360, region: PixelRect { x0: 0, y0: 0, x1: 640, y1: 360 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 12.700017, aperture: [25.4, 25.4], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 5.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/cornellbox.usda"], invisible_overrides: Some(0) } +layer: $DIR/cornellbox.usda +warning: Warning { code: AssetUnsupportedByHost, kind: Skipped, count: 1, prims: [], message: "No asset loader: environment map $DIR/sky_gradient.exr ignored — the dome falls back to its uniform colour. Use Scene::from_usd_with_assets to supply one." } +warning: Warning { code: MaterialFallbackDefault, kind: Skipped, count: 1, prims: ["/scene/Looks/initialShadingGroup"], message: "Material /scene/Looks/initialShadingGroup has no surface shader — using default grey OpenPBR" } +lights: 1 +light 0: dome name Some("/scene/Sky") lpe None pmf 1.0 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 5 geometries, PrimitiveBreakdown { triangles: 822, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 2 } top level, PrimitiveBreakdown { triangles: 1582, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 2 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 4.0 motion [] pieces all=10:88b22fc3345d5b05 camera=10:88b22fc3345d5b05 shadow=10:88b22fc3345d5b05 indirect=10:88b22fc3345d5b05 +geom 1: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.2 motion [] pieces all=760:c2b60a75c52c78b9 camera=760:c2b60a75c52c78b9 shadow=760:c2b60a75c52c78b9 indirect=760:c2b60a75c52c78b9 +geom 2: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=12:94a297badef437e1 camera=12:94a297badef437e1 shadow=12:94a297badef437e1 indirect=12:94a297badef437e1 +geom 3: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.25 motion [] pieces all=800:4a8c9f44d777e131 camera=800:4a8c9f44d777e131 shadow=800:4a8c9f44d777e131 indirect=800:4a8c9f44d777e131 +geom 4: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.3585339 motion [] pieces all=760:2344ecf63e12c441 camera=760:2344ecf63e12c441 shadow=760:2344ecf63e12c441 indirect=760:2344ecf63e12c441 +provenance material /scene/Looks/initialShadingGroup: MaterialOrigin { slots: [0, 1, 2, 3, 4], displaced: false } +provenance light /scene/Sky: LightOrigin { index: 0, geoms: 0..0 } +provenance geometry 0..1: /scene/pCube1 +provenance geometry 1..2: /scene/pSphere1 +provenance geometry 2..3: /scene/pCube2 +provenance geometry 3..4: /scene/pTorus1 +provenance geometry 4..5: /scene/pSphere2 +provenance mesh: MeshOrigin { geom_id: 0, slot: 0, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 1, slot: 1, baked: false, moving: false } +provenance mesh: MeshOrigin { geom_id: 2, slot: 2, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 3, slot: 3, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 4, slot: 1, baked: false, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 12343188411137242430, n_points: 8, n_indices: 20, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 1: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 17119738035130870988, n_points: 382, n_indices: 1560, n_uvs: None, smooth: false, material: 0 }), placements: 2, shared: false, displaced: false } +provenance mesh slot 2: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 1739488954094729910, n_points: 8, n_indices: 24, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 3: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 6096447469814747168, n_points: 400, n_indices: 1600, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/scene/camera1"), cameras: ["/scene/camera1"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/scene/camera1"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/cornellbox_usda-3c74fafa1c66c123-1.image b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-3c74fafa1c66c123-1.image new file mode 100644 index 000000000..ba4884437 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-3c74fafa1c66c123-1.image @@ -0,0 +1 @@ +640x360 16spp clamp-off 52a1a46f3a46d230 diff --git a/crates/crust-core/tests/data/import_baselines/cornellbox_usda-3cac72b0550f05b3-1.digest b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-3cac72b0550f05b3-1.digest new file mode 100644 index 000000000..1d5ab0cab --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-3cac72b0550f05b3-1.digest @@ -0,0 +1,39 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/scene/camera1") +camera: Camera { origin: Vec3A(0.0074343784, 1.9913422, 4.0133057), lower_left_corner: Vec3A(-8.881443, -3.0086517, -0.98669434), horizontal: Vec3A(17.777756, 0.0, 0.0), vertical: Vec3A(0.0, 9.999988, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: Some(Vec4(0.0, 0.0, -1.0, 3.9133058)), far: Some(Vec4(0.0, 0.0, 1.0, 9995.986)), planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: None +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 640, height: 360, region: PixelRect { x0: 0, y0: 0, x1: 640, y1: 360 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 12.700017, aperture: [25.4, 25.4], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 5.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/cornellbox.usda"], invisible_overrides: Some(0) } +layer: $DIR/cornellbox.usda +warning: Warning { code: MaterialFallbackDefault, kind: Skipped, count: 1, prims: ["/scene/Looks/initialShadingGroup"], message: "Material /scene/Looks/initialShadingGroup has no surface shader — using default grey OpenPBR" } +lights: 1 +light 0: dome name Some("/scene/Sky") lpe None pmf 1.0 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 5 geometries, PrimitiveBreakdown { triangles: 822, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 2 } top level, PrimitiveBreakdown { triangles: 1582, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 2 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 4.0 motion [] pieces all=10:88b22fc3345d5b05 camera=10:88b22fc3345d5b05 shadow=10:88b22fc3345d5b05 indirect=10:88b22fc3345d5b05 +geom 1: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.2 motion [] pieces all=760:c2b60a75c52c78b9 camera=760:c2b60a75c52c78b9 shadow=760:c2b60a75c52c78b9 indirect=760:c2b60a75c52c78b9 +geom 2: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=12:94a297badef437e1 camera=12:94a297badef437e1 shadow=12:94a297badef437e1 indirect=12:94a297badef437e1 +geom 3: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.25 motion [] pieces all=800:4a8c9f44d777e131 camera=800:4a8c9f44d777e131 shadow=800:4a8c9f44d777e131 indirect=800:4a8c9f44d777e131 +geom 4: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.3585339 motion [] pieces all=760:2344ecf63e12c441 camera=760:2344ecf63e12c441 shadow=760:2344ecf63e12c441 indirect=760:2344ecf63e12c441 +provenance material /scene/Looks/initialShadingGroup: MaterialOrigin { slots: [0, 1, 2, 3, 4], displaced: false } +provenance light /scene/Sky: LightOrigin { index: 0, geoms: 0..0 } +provenance geometry 0..1: /scene/pCube1 +provenance geometry 1..2: /scene/pSphere1 +provenance geometry 2..3: /scene/pCube2 +provenance geometry 3..4: /scene/pTorus1 +provenance geometry 4..5: /scene/pSphere2 +provenance mesh: MeshOrigin { geom_id: 0, slot: 0, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 1, slot: 1, baked: false, moving: false } +provenance mesh: MeshOrigin { geom_id: 2, slot: 2, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 3, slot: 3, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 4, slot: 1, baked: false, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 12343188411137242430, n_points: 8, n_indices: 20, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 1: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 17119738035130870988, n_points: 382, n_indices: 1560, n_uvs: None, smooth: false, material: 0 }), placements: 2, shared: false, displaced: false } +provenance mesh slot 2: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 1739488954094729910, n_points: 8, n_indices: 24, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 3: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 6096447469814747168, n_points: 400, n_indices: 1600, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: true, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/scene/camera1"), cameras: ["/scene/camera1"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/scene/camera1"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/cornellbox_usda-3cac72b0550f05b3-1.image b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-3cac72b0550f05b3-1.image new file mode 100644 index 000000000..7172edbfe --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-3cac72b0550f05b3-1.image @@ -0,0 +1 @@ +640x360 16spp clamp-off 64ede904b11bab22 diff --git a/crates/crust-core/tests/data/import_baselines/cornellbox_usda-450b164daa4e0f80-1.digest b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-450b164daa4e0f80-1.digest new file mode 100644 index 000000000..0e859a952 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-450b164daa4e0f80-1.digest @@ -0,0 +1,40 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/scene/camera1") +camera: Camera { origin: Vec3A(0.0074343784, 1.9913422, 4.0133057), lower_left_corner: Vec3A(-8.881443, -3.0086517, -0.98669434), horizontal: Vec3A(17.777756, 0.0, 0.0), vertical: Vec3A(0.0, 9.999988, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: Some(Vec4(0.0, 0.0, -1.0, 3.9133058)), far: Some(Vec4(0.0, 0.0, 1.0, 9995.986)), planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: None +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 640, height: 360, region: PixelRect { x0: 0, y0: 0, x1: 640, y1: 360 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 12.700017, aperture: [25.4, 25.4], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 5.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/cornellbox.usda"], invisible_overrides: Some(0) } +layer: $DIR/cornellbox.usda +warning: Warning { code: AssetUnsupportedByHost, kind: Skipped, count: 1, prims: [], message: "No asset loader: environment map $DIR/sky_gradient.exr ignored — the dome falls back to its uniform colour. Use Scene::from_usd_with_assets to supply one." } +warning: Warning { code: MaterialFallbackDefault, kind: Skipped, count: 1, prims: ["/scene/Looks/initialShadingGroup"], message: "Material /scene/Looks/initialShadingGroup has no surface shader — using default grey OpenPBR" } +lights: 1 +light 0: dome name Some("/scene/Sky") lpe None pmf 1.0 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 5 geometries, PrimitiveBreakdown { triangles: 822, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 2 } top level, PrimitiveBreakdown { triangles: 1582, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 2 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 4.0 motion [] pieces all=10:88b22fc3345d5b05 camera=10:88b22fc3345d5b05 shadow=10:88b22fc3345d5b05 indirect=10:88b22fc3345d5b05 +geom 1: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.2 motion [] pieces all=760:c2b60a75c52c78b9 camera=760:c2b60a75c52c78b9 shadow=760:c2b60a75c52c78b9 indirect=760:c2b60a75c52c78b9 +geom 2: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=12:94a297badef437e1 camera=12:94a297badef437e1 shadow=12:94a297badef437e1 indirect=12:94a297badef437e1 +geom 3: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.25 motion [] pieces all=800:4a8c9f44d777e131 camera=800:4a8c9f44d777e131 shadow=800:4a8c9f44d777e131 indirect=800:4a8c9f44d777e131 +geom 4: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.3585339 motion [] pieces all=760:2344ecf63e12c441 camera=760:2344ecf63e12c441 shadow=760:2344ecf63e12c441 indirect=760:2344ecf63e12c441 +provenance material /scene/Looks/initialShadingGroup: MaterialOrigin { slots: [0, 1, 2, 3, 4], displaced: false } +provenance light /scene/Sky: LightOrigin { index: 0, geoms: 0..0 } +provenance geometry 0..1: /scene/pCube1 +provenance geometry 1..2: /scene/pSphere1 +provenance geometry 2..3: /scene/pCube2 +provenance geometry 3..4: /scene/pTorus1 +provenance geometry 4..5: /scene/pSphere2 +provenance mesh: MeshOrigin { geom_id: 0, slot: 0, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 1, slot: 1, baked: false, moving: false } +provenance mesh: MeshOrigin { geom_id: 2, slot: 2, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 3, slot: 3, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 4, slot: 1, baked: false, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 12343188411137242430, n_points: 8, n_indices: 20, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 1: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 17119738035130870988, n_points: 382, n_indices: 1560, n_uvs: None, smooth: false, material: 0 }), placements: 2, shared: false, displaced: false } +provenance mesh slot 2: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 1739488954094729910, n_points: 8, n_indices: 24, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 3: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 6096447469814747168, n_points: 400, n_indices: 1600, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/scene/camera1"), cameras: ["/scene/camera1"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/scene/camera1"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/cornellbox_usda-450b164daa4e0f80-1.image b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-450b164daa4e0f80-1.image new file mode 100644 index 000000000..ba4884437 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-450b164daa4e0f80-1.image @@ -0,0 +1 @@ +640x360 16spp clamp-off 52a1a46f3a46d230 diff --git a/crates/crust-core/tests/data/import_baselines/cornellbox_usda-48a104b8a2799466-1.digest b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-48a104b8a2799466-1.digest new file mode 100644 index 000000000..1d5ab0cab --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-48a104b8a2799466-1.digest @@ -0,0 +1,39 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/scene/camera1") +camera: Camera { origin: Vec3A(0.0074343784, 1.9913422, 4.0133057), lower_left_corner: Vec3A(-8.881443, -3.0086517, -0.98669434), horizontal: Vec3A(17.777756, 0.0, 0.0), vertical: Vec3A(0.0, 9.999988, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: Some(Vec4(0.0, 0.0, -1.0, 3.9133058)), far: Some(Vec4(0.0, 0.0, 1.0, 9995.986)), planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: None +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 640, height: 360, region: PixelRect { x0: 0, y0: 0, x1: 640, y1: 360 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 12.700017, aperture: [25.4, 25.4], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 5.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/cornellbox.usda"], invisible_overrides: Some(0) } +layer: $DIR/cornellbox.usda +warning: Warning { code: MaterialFallbackDefault, kind: Skipped, count: 1, prims: ["/scene/Looks/initialShadingGroup"], message: "Material /scene/Looks/initialShadingGroup has no surface shader — using default grey OpenPBR" } +lights: 1 +light 0: dome name Some("/scene/Sky") lpe None pmf 1.0 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 5 geometries, PrimitiveBreakdown { triangles: 822, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 2 } top level, PrimitiveBreakdown { triangles: 1582, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 2 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 4.0 motion [] pieces all=10:88b22fc3345d5b05 camera=10:88b22fc3345d5b05 shadow=10:88b22fc3345d5b05 indirect=10:88b22fc3345d5b05 +geom 1: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.2 motion [] pieces all=760:c2b60a75c52c78b9 camera=760:c2b60a75c52c78b9 shadow=760:c2b60a75c52c78b9 indirect=760:c2b60a75c52c78b9 +geom 2: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=12:94a297badef437e1 camera=12:94a297badef437e1 shadow=12:94a297badef437e1 indirect=12:94a297badef437e1 +geom 3: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.25 motion [] pieces all=800:4a8c9f44d777e131 camera=800:4a8c9f44d777e131 shadow=800:4a8c9f44d777e131 indirect=800:4a8c9f44d777e131 +geom 4: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.3585339 motion [] pieces all=760:2344ecf63e12c441 camera=760:2344ecf63e12c441 shadow=760:2344ecf63e12c441 indirect=760:2344ecf63e12c441 +provenance material /scene/Looks/initialShadingGroup: MaterialOrigin { slots: [0, 1, 2, 3, 4], displaced: false } +provenance light /scene/Sky: LightOrigin { index: 0, geoms: 0..0 } +provenance geometry 0..1: /scene/pCube1 +provenance geometry 1..2: /scene/pSphere1 +provenance geometry 2..3: /scene/pCube2 +provenance geometry 3..4: /scene/pTorus1 +provenance geometry 4..5: /scene/pSphere2 +provenance mesh: MeshOrigin { geom_id: 0, slot: 0, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 1, slot: 1, baked: false, moving: false } +provenance mesh: MeshOrigin { geom_id: 2, slot: 2, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 3, slot: 3, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 4, slot: 1, baked: false, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 12343188411137242430, n_points: 8, n_indices: 20, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 1: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 17119738035130870988, n_points: 382, n_indices: 1560, n_uvs: None, smooth: false, material: 0 }), placements: 2, shared: false, displaced: false } +provenance mesh slot 2: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 1739488954094729910, n_points: 8, n_indices: 24, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 3: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 6096447469814747168, n_points: 400, n_indices: 1600, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: true, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/scene/camera1"), cameras: ["/scene/camera1"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/scene/camera1"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/cornellbox_usda-48a104b8a2799466-1.image b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-48a104b8a2799466-1.image new file mode 100644 index 000000000..7172edbfe --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-48a104b8a2799466-1.image @@ -0,0 +1 @@ +640x360 16spp clamp-off 64ede904b11bab22 diff --git a/crates/crust-core/tests/data/import_baselines/cornellbox_usda-518e1fd5063f7227-1.digest b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-518e1fd5063f7227-1.digest new file mode 100644 index 000000000..0e859a952 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-518e1fd5063f7227-1.digest @@ -0,0 +1,40 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/scene/camera1") +camera: Camera { origin: Vec3A(0.0074343784, 1.9913422, 4.0133057), lower_left_corner: Vec3A(-8.881443, -3.0086517, -0.98669434), horizontal: Vec3A(17.777756, 0.0, 0.0), vertical: Vec3A(0.0, 9.999988, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: Some(Vec4(0.0, 0.0, -1.0, 3.9133058)), far: Some(Vec4(0.0, 0.0, 1.0, 9995.986)), planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: None +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 640, height: 360, region: PixelRect { x0: 0, y0: 0, x1: 640, y1: 360 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 12.700017, aperture: [25.4, 25.4], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 5.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/cornellbox.usda"], invisible_overrides: Some(0) } +layer: $DIR/cornellbox.usda +warning: Warning { code: AssetUnsupportedByHost, kind: Skipped, count: 1, prims: [], message: "No asset loader: environment map $DIR/sky_gradient.exr ignored — the dome falls back to its uniform colour. Use Scene::from_usd_with_assets to supply one." } +warning: Warning { code: MaterialFallbackDefault, kind: Skipped, count: 1, prims: ["/scene/Looks/initialShadingGroup"], message: "Material /scene/Looks/initialShadingGroup has no surface shader — using default grey OpenPBR" } +lights: 1 +light 0: dome name Some("/scene/Sky") lpe None pmf 1.0 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 5 geometries, PrimitiveBreakdown { triangles: 822, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 2 } top level, PrimitiveBreakdown { triangles: 1582, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 2 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 4.0 motion [] pieces all=10:88b22fc3345d5b05 camera=10:88b22fc3345d5b05 shadow=10:88b22fc3345d5b05 indirect=10:88b22fc3345d5b05 +geom 1: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.2 motion [] pieces all=760:c2b60a75c52c78b9 camera=760:c2b60a75c52c78b9 shadow=760:c2b60a75c52c78b9 indirect=760:c2b60a75c52c78b9 +geom 2: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=12:94a297badef437e1 camera=12:94a297badef437e1 shadow=12:94a297badef437e1 indirect=12:94a297badef437e1 +geom 3: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.25 motion [] pieces all=800:4a8c9f44d777e131 camera=800:4a8c9f44d777e131 shadow=800:4a8c9f44d777e131 indirect=800:4a8c9f44d777e131 +geom 4: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.3585339 motion [] pieces all=760:2344ecf63e12c441 camera=760:2344ecf63e12c441 shadow=760:2344ecf63e12c441 indirect=760:2344ecf63e12c441 +provenance material /scene/Looks/initialShadingGroup: MaterialOrigin { slots: [0, 1, 2, 3, 4], displaced: false } +provenance light /scene/Sky: LightOrigin { index: 0, geoms: 0..0 } +provenance geometry 0..1: /scene/pCube1 +provenance geometry 1..2: /scene/pSphere1 +provenance geometry 2..3: /scene/pCube2 +provenance geometry 3..4: /scene/pTorus1 +provenance geometry 4..5: /scene/pSphere2 +provenance mesh: MeshOrigin { geom_id: 0, slot: 0, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 1, slot: 1, baked: false, moving: false } +provenance mesh: MeshOrigin { geom_id: 2, slot: 2, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 3, slot: 3, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 4, slot: 1, baked: false, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 12343188411137242430, n_points: 8, n_indices: 20, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 1: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 17119738035130870988, n_points: 382, n_indices: 1560, n_uvs: None, smooth: false, material: 0 }), placements: 2, shared: false, displaced: false } +provenance mesh slot 2: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 1739488954094729910, n_points: 8, n_indices: 24, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 3: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 6096447469814747168, n_points: 400, n_indices: 1600, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/scene/camera1"), cameras: ["/scene/camera1"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/scene/camera1"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/cornellbox_usda-518e1fd5063f7227-1.image b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-518e1fd5063f7227-1.image new file mode 100644 index 000000000..ba4884437 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-518e1fd5063f7227-1.image @@ -0,0 +1 @@ +640x360 16spp clamp-off 52a1a46f3a46d230 diff --git a/crates/crust-core/tests/data/import_baselines/cornellbox_usda-563fb301d9f1f469-1.digest b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-563fb301d9f1f469-1.digest new file mode 100644 index 000000000..0e859a952 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-563fb301d9f1f469-1.digest @@ -0,0 +1,40 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/scene/camera1") +camera: Camera { origin: Vec3A(0.0074343784, 1.9913422, 4.0133057), lower_left_corner: Vec3A(-8.881443, -3.0086517, -0.98669434), horizontal: Vec3A(17.777756, 0.0, 0.0), vertical: Vec3A(0.0, 9.999988, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: Some(Vec4(0.0, 0.0, -1.0, 3.9133058)), far: Some(Vec4(0.0, 0.0, 1.0, 9995.986)), planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: None +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 640, height: 360, region: PixelRect { x0: 0, y0: 0, x1: 640, y1: 360 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 12.700017, aperture: [25.4, 25.4], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 5.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/cornellbox.usda"], invisible_overrides: Some(0) } +layer: $DIR/cornellbox.usda +warning: Warning { code: AssetUnsupportedByHost, kind: Skipped, count: 1, prims: [], message: "No asset loader: environment map $DIR/sky_gradient.exr ignored — the dome falls back to its uniform colour. Use Scene::from_usd_with_assets to supply one." } +warning: Warning { code: MaterialFallbackDefault, kind: Skipped, count: 1, prims: ["/scene/Looks/initialShadingGroup"], message: "Material /scene/Looks/initialShadingGroup has no surface shader — using default grey OpenPBR" } +lights: 1 +light 0: dome name Some("/scene/Sky") lpe None pmf 1.0 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 5 geometries, PrimitiveBreakdown { triangles: 822, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 2 } top level, PrimitiveBreakdown { triangles: 1582, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 2 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 4.0 motion [] pieces all=10:88b22fc3345d5b05 camera=10:88b22fc3345d5b05 shadow=10:88b22fc3345d5b05 indirect=10:88b22fc3345d5b05 +geom 1: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.2 motion [] pieces all=760:c2b60a75c52c78b9 camera=760:c2b60a75c52c78b9 shadow=760:c2b60a75c52c78b9 indirect=760:c2b60a75c52c78b9 +geom 2: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=12:94a297badef437e1 camera=12:94a297badef437e1 shadow=12:94a297badef437e1 indirect=12:94a297badef437e1 +geom 3: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.25 motion [] pieces all=800:4a8c9f44d777e131 camera=800:4a8c9f44d777e131 shadow=800:4a8c9f44d777e131 indirect=800:4a8c9f44d777e131 +geom 4: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.3585339 motion [] pieces all=760:2344ecf63e12c441 camera=760:2344ecf63e12c441 shadow=760:2344ecf63e12c441 indirect=760:2344ecf63e12c441 +provenance material /scene/Looks/initialShadingGroup: MaterialOrigin { slots: [0, 1, 2, 3, 4], displaced: false } +provenance light /scene/Sky: LightOrigin { index: 0, geoms: 0..0 } +provenance geometry 0..1: /scene/pCube1 +provenance geometry 1..2: /scene/pSphere1 +provenance geometry 2..3: /scene/pCube2 +provenance geometry 3..4: /scene/pTorus1 +provenance geometry 4..5: /scene/pSphere2 +provenance mesh: MeshOrigin { geom_id: 0, slot: 0, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 1, slot: 1, baked: false, moving: false } +provenance mesh: MeshOrigin { geom_id: 2, slot: 2, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 3, slot: 3, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 4, slot: 1, baked: false, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 12343188411137242430, n_points: 8, n_indices: 20, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 1: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 17119738035130870988, n_points: 382, n_indices: 1560, n_uvs: None, smooth: false, material: 0 }), placements: 2, shared: false, displaced: false } +provenance mesh slot 2: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 1739488954094729910, n_points: 8, n_indices: 24, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 3: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 6096447469814747168, n_points: 400, n_indices: 1600, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/scene/camera1"), cameras: ["/scene/camera1"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/scene/camera1"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/cornellbox_usda-563fb301d9f1f469-1.image b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-563fb301d9f1f469-1.image new file mode 100644 index 000000000..ba4884437 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-563fb301d9f1f469-1.image @@ -0,0 +1 @@ +640x360 16spp clamp-off 52a1a46f3a46d230 diff --git a/crates/crust-core/tests/data/import_baselines/cornellbox_usda-563fb301d9f1f469-10.digest b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-563fb301d9f1f469-10.digest new file mode 100644 index 000000000..0e859a952 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-563fb301d9f1f469-10.digest @@ -0,0 +1,40 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/scene/camera1") +camera: Camera { origin: Vec3A(0.0074343784, 1.9913422, 4.0133057), lower_left_corner: Vec3A(-8.881443, -3.0086517, -0.98669434), horizontal: Vec3A(17.777756, 0.0, 0.0), vertical: Vec3A(0.0, 9.999988, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: Some(Vec4(0.0, 0.0, -1.0, 3.9133058)), far: Some(Vec4(0.0, 0.0, 1.0, 9995.986)), planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: None +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 640, height: 360, region: PixelRect { x0: 0, y0: 0, x1: 640, y1: 360 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 12.700017, aperture: [25.4, 25.4], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 5.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/cornellbox.usda"], invisible_overrides: Some(0) } +layer: $DIR/cornellbox.usda +warning: Warning { code: AssetUnsupportedByHost, kind: Skipped, count: 1, prims: [], message: "No asset loader: environment map $DIR/sky_gradient.exr ignored — the dome falls back to its uniform colour. Use Scene::from_usd_with_assets to supply one." } +warning: Warning { code: MaterialFallbackDefault, kind: Skipped, count: 1, prims: ["/scene/Looks/initialShadingGroup"], message: "Material /scene/Looks/initialShadingGroup has no surface shader — using default grey OpenPBR" } +lights: 1 +light 0: dome name Some("/scene/Sky") lpe None pmf 1.0 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 5 geometries, PrimitiveBreakdown { triangles: 822, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 2 } top level, PrimitiveBreakdown { triangles: 1582, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 2 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 4.0 motion [] pieces all=10:88b22fc3345d5b05 camera=10:88b22fc3345d5b05 shadow=10:88b22fc3345d5b05 indirect=10:88b22fc3345d5b05 +geom 1: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.2 motion [] pieces all=760:c2b60a75c52c78b9 camera=760:c2b60a75c52c78b9 shadow=760:c2b60a75c52c78b9 indirect=760:c2b60a75c52c78b9 +geom 2: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=12:94a297badef437e1 camera=12:94a297badef437e1 shadow=12:94a297badef437e1 indirect=12:94a297badef437e1 +geom 3: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.25 motion [] pieces all=800:4a8c9f44d777e131 camera=800:4a8c9f44d777e131 shadow=800:4a8c9f44d777e131 indirect=800:4a8c9f44d777e131 +geom 4: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.3585339 motion [] pieces all=760:2344ecf63e12c441 camera=760:2344ecf63e12c441 shadow=760:2344ecf63e12c441 indirect=760:2344ecf63e12c441 +provenance material /scene/Looks/initialShadingGroup: MaterialOrigin { slots: [0, 1, 2, 3, 4], displaced: false } +provenance light /scene/Sky: LightOrigin { index: 0, geoms: 0..0 } +provenance geometry 0..1: /scene/pCube1 +provenance geometry 1..2: /scene/pSphere1 +provenance geometry 2..3: /scene/pCube2 +provenance geometry 3..4: /scene/pTorus1 +provenance geometry 4..5: /scene/pSphere2 +provenance mesh: MeshOrigin { geom_id: 0, slot: 0, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 1, slot: 1, baked: false, moving: false } +provenance mesh: MeshOrigin { geom_id: 2, slot: 2, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 3, slot: 3, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 4, slot: 1, baked: false, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 12343188411137242430, n_points: 8, n_indices: 20, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 1: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 17119738035130870988, n_points: 382, n_indices: 1560, n_uvs: None, smooth: false, material: 0 }), placements: 2, shared: false, displaced: false } +provenance mesh slot 2: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 1739488954094729910, n_points: 8, n_indices: 24, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 3: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 6096447469814747168, n_points: 400, n_indices: 1600, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/scene/camera1"), cameras: ["/scene/camera1"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/scene/camera1"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/cornellbox_usda-563fb301d9f1f469-10.image b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-563fb301d9f1f469-10.image new file mode 100644 index 000000000..ba4884437 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-563fb301d9f1f469-10.image @@ -0,0 +1 @@ +640x360 16spp clamp-off 52a1a46f3a46d230 diff --git a/crates/crust-core/tests/data/import_baselines/cornellbox_usda-563fb301d9f1f469-11.digest b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-563fb301d9f1f469-11.digest new file mode 100644 index 000000000..0e859a952 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-563fb301d9f1f469-11.digest @@ -0,0 +1,40 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/scene/camera1") +camera: Camera { origin: Vec3A(0.0074343784, 1.9913422, 4.0133057), lower_left_corner: Vec3A(-8.881443, -3.0086517, -0.98669434), horizontal: Vec3A(17.777756, 0.0, 0.0), vertical: Vec3A(0.0, 9.999988, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: Some(Vec4(0.0, 0.0, -1.0, 3.9133058)), far: Some(Vec4(0.0, 0.0, 1.0, 9995.986)), planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: None +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 640, height: 360, region: PixelRect { x0: 0, y0: 0, x1: 640, y1: 360 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 12.700017, aperture: [25.4, 25.4], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 5.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/cornellbox.usda"], invisible_overrides: Some(0) } +layer: $DIR/cornellbox.usda +warning: Warning { code: AssetUnsupportedByHost, kind: Skipped, count: 1, prims: [], message: "No asset loader: environment map $DIR/sky_gradient.exr ignored — the dome falls back to its uniform colour. Use Scene::from_usd_with_assets to supply one." } +warning: Warning { code: MaterialFallbackDefault, kind: Skipped, count: 1, prims: ["/scene/Looks/initialShadingGroup"], message: "Material /scene/Looks/initialShadingGroup has no surface shader — using default grey OpenPBR" } +lights: 1 +light 0: dome name Some("/scene/Sky") lpe None pmf 1.0 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 5 geometries, PrimitiveBreakdown { triangles: 822, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 2 } top level, PrimitiveBreakdown { triangles: 1582, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 2 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 4.0 motion [] pieces all=10:88b22fc3345d5b05 camera=10:88b22fc3345d5b05 shadow=10:88b22fc3345d5b05 indirect=10:88b22fc3345d5b05 +geom 1: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.2 motion [] pieces all=760:c2b60a75c52c78b9 camera=760:c2b60a75c52c78b9 shadow=760:c2b60a75c52c78b9 indirect=760:c2b60a75c52c78b9 +geom 2: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=12:94a297badef437e1 camera=12:94a297badef437e1 shadow=12:94a297badef437e1 indirect=12:94a297badef437e1 +geom 3: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.25 motion [] pieces all=800:4a8c9f44d777e131 camera=800:4a8c9f44d777e131 shadow=800:4a8c9f44d777e131 indirect=800:4a8c9f44d777e131 +geom 4: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.3585339 motion [] pieces all=760:2344ecf63e12c441 camera=760:2344ecf63e12c441 shadow=760:2344ecf63e12c441 indirect=760:2344ecf63e12c441 +provenance material /scene/Looks/initialShadingGroup: MaterialOrigin { slots: [0, 1, 2, 3, 4], displaced: false } +provenance light /scene/Sky: LightOrigin { index: 0, geoms: 0..0 } +provenance geometry 0..1: /scene/pCube1 +provenance geometry 1..2: /scene/pSphere1 +provenance geometry 2..3: /scene/pCube2 +provenance geometry 3..4: /scene/pTorus1 +provenance geometry 4..5: /scene/pSphere2 +provenance mesh: MeshOrigin { geom_id: 0, slot: 0, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 1, slot: 1, baked: false, moving: false } +provenance mesh: MeshOrigin { geom_id: 2, slot: 2, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 3, slot: 3, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 4, slot: 1, baked: false, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 12343188411137242430, n_points: 8, n_indices: 20, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 1: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 17119738035130870988, n_points: 382, n_indices: 1560, n_uvs: None, smooth: false, material: 0 }), placements: 2, shared: false, displaced: false } +provenance mesh slot 2: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 1739488954094729910, n_points: 8, n_indices: 24, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 3: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 6096447469814747168, n_points: 400, n_indices: 1600, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/scene/camera1"), cameras: ["/scene/camera1"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/scene/camera1"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/cornellbox_usda-563fb301d9f1f469-11.image b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-563fb301d9f1f469-11.image new file mode 100644 index 000000000..ba4884437 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-563fb301d9f1f469-11.image @@ -0,0 +1 @@ +640x360 16spp clamp-off 52a1a46f3a46d230 diff --git a/crates/crust-core/tests/data/import_baselines/cornellbox_usda-563fb301d9f1f469-12.digest b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-563fb301d9f1f469-12.digest new file mode 100644 index 000000000..0e859a952 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-563fb301d9f1f469-12.digest @@ -0,0 +1,40 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/scene/camera1") +camera: Camera { origin: Vec3A(0.0074343784, 1.9913422, 4.0133057), lower_left_corner: Vec3A(-8.881443, -3.0086517, -0.98669434), horizontal: Vec3A(17.777756, 0.0, 0.0), vertical: Vec3A(0.0, 9.999988, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: Some(Vec4(0.0, 0.0, -1.0, 3.9133058)), far: Some(Vec4(0.0, 0.0, 1.0, 9995.986)), planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: None +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 640, height: 360, region: PixelRect { x0: 0, y0: 0, x1: 640, y1: 360 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 12.700017, aperture: [25.4, 25.4], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 5.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/cornellbox.usda"], invisible_overrides: Some(0) } +layer: $DIR/cornellbox.usda +warning: Warning { code: AssetUnsupportedByHost, kind: Skipped, count: 1, prims: [], message: "No asset loader: environment map $DIR/sky_gradient.exr ignored — the dome falls back to its uniform colour. Use Scene::from_usd_with_assets to supply one." } +warning: Warning { code: MaterialFallbackDefault, kind: Skipped, count: 1, prims: ["/scene/Looks/initialShadingGroup"], message: "Material /scene/Looks/initialShadingGroup has no surface shader — using default grey OpenPBR" } +lights: 1 +light 0: dome name Some("/scene/Sky") lpe None pmf 1.0 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 5 geometries, PrimitiveBreakdown { triangles: 822, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 2 } top level, PrimitiveBreakdown { triangles: 1582, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 2 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 4.0 motion [] pieces all=10:88b22fc3345d5b05 camera=10:88b22fc3345d5b05 shadow=10:88b22fc3345d5b05 indirect=10:88b22fc3345d5b05 +geom 1: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.2 motion [] pieces all=760:c2b60a75c52c78b9 camera=760:c2b60a75c52c78b9 shadow=760:c2b60a75c52c78b9 indirect=760:c2b60a75c52c78b9 +geom 2: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=12:94a297badef437e1 camera=12:94a297badef437e1 shadow=12:94a297badef437e1 indirect=12:94a297badef437e1 +geom 3: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.25 motion [] pieces all=800:4a8c9f44d777e131 camera=800:4a8c9f44d777e131 shadow=800:4a8c9f44d777e131 indirect=800:4a8c9f44d777e131 +geom 4: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.3585339 motion [] pieces all=760:2344ecf63e12c441 camera=760:2344ecf63e12c441 shadow=760:2344ecf63e12c441 indirect=760:2344ecf63e12c441 +provenance material /scene/Looks/initialShadingGroup: MaterialOrigin { slots: [0, 1, 2, 3, 4], displaced: false } +provenance light /scene/Sky: LightOrigin { index: 0, geoms: 0..0 } +provenance geometry 0..1: /scene/pCube1 +provenance geometry 1..2: /scene/pSphere1 +provenance geometry 2..3: /scene/pCube2 +provenance geometry 3..4: /scene/pTorus1 +provenance geometry 4..5: /scene/pSphere2 +provenance mesh: MeshOrigin { geom_id: 0, slot: 0, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 1, slot: 1, baked: false, moving: false } +provenance mesh: MeshOrigin { geom_id: 2, slot: 2, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 3, slot: 3, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 4, slot: 1, baked: false, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 12343188411137242430, n_points: 8, n_indices: 20, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 1: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 17119738035130870988, n_points: 382, n_indices: 1560, n_uvs: None, smooth: false, material: 0 }), placements: 2, shared: false, displaced: false } +provenance mesh slot 2: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 1739488954094729910, n_points: 8, n_indices: 24, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 3: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 6096447469814747168, n_points: 400, n_indices: 1600, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/scene/camera1"), cameras: ["/scene/camera1"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/scene/camera1"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/cornellbox_usda-563fb301d9f1f469-12.image b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-563fb301d9f1f469-12.image new file mode 100644 index 000000000..ba4884437 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-563fb301d9f1f469-12.image @@ -0,0 +1 @@ +640x360 16spp clamp-off 52a1a46f3a46d230 diff --git a/crates/crust-core/tests/data/import_baselines/cornellbox_usda-563fb301d9f1f469-13.digest b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-563fb301d9f1f469-13.digest new file mode 100644 index 000000000..0e859a952 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-563fb301d9f1f469-13.digest @@ -0,0 +1,40 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/scene/camera1") +camera: Camera { origin: Vec3A(0.0074343784, 1.9913422, 4.0133057), lower_left_corner: Vec3A(-8.881443, -3.0086517, -0.98669434), horizontal: Vec3A(17.777756, 0.0, 0.0), vertical: Vec3A(0.0, 9.999988, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: Some(Vec4(0.0, 0.0, -1.0, 3.9133058)), far: Some(Vec4(0.0, 0.0, 1.0, 9995.986)), planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: None +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 640, height: 360, region: PixelRect { x0: 0, y0: 0, x1: 640, y1: 360 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 12.700017, aperture: [25.4, 25.4], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 5.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/cornellbox.usda"], invisible_overrides: Some(0) } +layer: $DIR/cornellbox.usda +warning: Warning { code: AssetUnsupportedByHost, kind: Skipped, count: 1, prims: [], message: "No asset loader: environment map $DIR/sky_gradient.exr ignored — the dome falls back to its uniform colour. Use Scene::from_usd_with_assets to supply one." } +warning: Warning { code: MaterialFallbackDefault, kind: Skipped, count: 1, prims: ["/scene/Looks/initialShadingGroup"], message: "Material /scene/Looks/initialShadingGroup has no surface shader — using default grey OpenPBR" } +lights: 1 +light 0: dome name Some("/scene/Sky") lpe None pmf 1.0 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 5 geometries, PrimitiveBreakdown { triangles: 822, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 2 } top level, PrimitiveBreakdown { triangles: 1582, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 2 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 4.0 motion [] pieces all=10:88b22fc3345d5b05 camera=10:88b22fc3345d5b05 shadow=10:88b22fc3345d5b05 indirect=10:88b22fc3345d5b05 +geom 1: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.2 motion [] pieces all=760:c2b60a75c52c78b9 camera=760:c2b60a75c52c78b9 shadow=760:c2b60a75c52c78b9 indirect=760:c2b60a75c52c78b9 +geom 2: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=12:94a297badef437e1 camera=12:94a297badef437e1 shadow=12:94a297badef437e1 indirect=12:94a297badef437e1 +geom 3: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.25 motion [] pieces all=800:4a8c9f44d777e131 camera=800:4a8c9f44d777e131 shadow=800:4a8c9f44d777e131 indirect=800:4a8c9f44d777e131 +geom 4: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.3585339 motion [] pieces all=760:2344ecf63e12c441 camera=760:2344ecf63e12c441 shadow=760:2344ecf63e12c441 indirect=760:2344ecf63e12c441 +provenance material /scene/Looks/initialShadingGroup: MaterialOrigin { slots: [0, 1, 2, 3, 4], displaced: false } +provenance light /scene/Sky: LightOrigin { index: 0, geoms: 0..0 } +provenance geometry 0..1: /scene/pCube1 +provenance geometry 1..2: /scene/pSphere1 +provenance geometry 2..3: /scene/pCube2 +provenance geometry 3..4: /scene/pTorus1 +provenance geometry 4..5: /scene/pSphere2 +provenance mesh: MeshOrigin { geom_id: 0, slot: 0, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 1, slot: 1, baked: false, moving: false } +provenance mesh: MeshOrigin { geom_id: 2, slot: 2, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 3, slot: 3, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 4, slot: 1, baked: false, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 12343188411137242430, n_points: 8, n_indices: 20, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 1: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 17119738035130870988, n_points: 382, n_indices: 1560, n_uvs: None, smooth: false, material: 0 }), placements: 2, shared: false, displaced: false } +provenance mesh slot 2: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 1739488954094729910, n_points: 8, n_indices: 24, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 3: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 6096447469814747168, n_points: 400, n_indices: 1600, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/scene/camera1"), cameras: ["/scene/camera1"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/scene/camera1"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/cornellbox_usda-563fb301d9f1f469-13.image b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-563fb301d9f1f469-13.image new file mode 100644 index 000000000..ba4884437 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-563fb301d9f1f469-13.image @@ -0,0 +1 @@ +640x360 16spp clamp-off 52a1a46f3a46d230 diff --git a/crates/crust-core/tests/data/import_baselines/cornellbox_usda-563fb301d9f1f469-14.digest b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-563fb301d9f1f469-14.digest new file mode 100644 index 000000000..0e859a952 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-563fb301d9f1f469-14.digest @@ -0,0 +1,40 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/scene/camera1") +camera: Camera { origin: Vec3A(0.0074343784, 1.9913422, 4.0133057), lower_left_corner: Vec3A(-8.881443, -3.0086517, -0.98669434), horizontal: Vec3A(17.777756, 0.0, 0.0), vertical: Vec3A(0.0, 9.999988, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: Some(Vec4(0.0, 0.0, -1.0, 3.9133058)), far: Some(Vec4(0.0, 0.0, 1.0, 9995.986)), planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: None +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 640, height: 360, region: PixelRect { x0: 0, y0: 0, x1: 640, y1: 360 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 12.700017, aperture: [25.4, 25.4], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 5.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/cornellbox.usda"], invisible_overrides: Some(0) } +layer: $DIR/cornellbox.usda +warning: Warning { code: AssetUnsupportedByHost, kind: Skipped, count: 1, prims: [], message: "No asset loader: environment map $DIR/sky_gradient.exr ignored — the dome falls back to its uniform colour. Use Scene::from_usd_with_assets to supply one." } +warning: Warning { code: MaterialFallbackDefault, kind: Skipped, count: 1, prims: ["/scene/Looks/initialShadingGroup"], message: "Material /scene/Looks/initialShadingGroup has no surface shader — using default grey OpenPBR" } +lights: 1 +light 0: dome name Some("/scene/Sky") lpe None pmf 1.0 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 5 geometries, PrimitiveBreakdown { triangles: 822, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 2 } top level, PrimitiveBreakdown { triangles: 1582, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 2 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 4.0 motion [] pieces all=10:88b22fc3345d5b05 camera=10:88b22fc3345d5b05 shadow=10:88b22fc3345d5b05 indirect=10:88b22fc3345d5b05 +geom 1: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.2 motion [] pieces all=760:c2b60a75c52c78b9 camera=760:c2b60a75c52c78b9 shadow=760:c2b60a75c52c78b9 indirect=760:c2b60a75c52c78b9 +geom 2: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=12:94a297badef437e1 camera=12:94a297badef437e1 shadow=12:94a297badef437e1 indirect=12:94a297badef437e1 +geom 3: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.25 motion [] pieces all=800:4a8c9f44d777e131 camera=800:4a8c9f44d777e131 shadow=800:4a8c9f44d777e131 indirect=800:4a8c9f44d777e131 +geom 4: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.3585339 motion [] pieces all=760:2344ecf63e12c441 camera=760:2344ecf63e12c441 shadow=760:2344ecf63e12c441 indirect=760:2344ecf63e12c441 +provenance material /scene/Looks/initialShadingGroup: MaterialOrigin { slots: [0, 1, 2, 3, 4], displaced: false } +provenance light /scene/Sky: LightOrigin { index: 0, geoms: 0..0 } +provenance geometry 0..1: /scene/pCube1 +provenance geometry 1..2: /scene/pSphere1 +provenance geometry 2..3: /scene/pCube2 +provenance geometry 3..4: /scene/pTorus1 +provenance geometry 4..5: /scene/pSphere2 +provenance mesh: MeshOrigin { geom_id: 0, slot: 0, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 1, slot: 1, baked: false, moving: false } +provenance mesh: MeshOrigin { geom_id: 2, slot: 2, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 3, slot: 3, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 4, slot: 1, baked: false, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 12343188411137242430, n_points: 8, n_indices: 20, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 1: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 17119738035130870988, n_points: 382, n_indices: 1560, n_uvs: None, smooth: false, material: 0 }), placements: 2, shared: false, displaced: false } +provenance mesh slot 2: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 1739488954094729910, n_points: 8, n_indices: 24, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 3: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 6096447469814747168, n_points: 400, n_indices: 1600, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/scene/camera1"), cameras: ["/scene/camera1"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/scene/camera1"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/cornellbox_usda-563fb301d9f1f469-14.image b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-563fb301d9f1f469-14.image new file mode 100644 index 000000000..ba4884437 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-563fb301d9f1f469-14.image @@ -0,0 +1 @@ +640x360 16spp clamp-off 52a1a46f3a46d230 diff --git a/crates/crust-core/tests/data/import_baselines/cornellbox_usda-563fb301d9f1f469-15.digest b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-563fb301d9f1f469-15.digest new file mode 100644 index 000000000..0e859a952 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-563fb301d9f1f469-15.digest @@ -0,0 +1,40 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/scene/camera1") +camera: Camera { origin: Vec3A(0.0074343784, 1.9913422, 4.0133057), lower_left_corner: Vec3A(-8.881443, -3.0086517, -0.98669434), horizontal: Vec3A(17.777756, 0.0, 0.0), vertical: Vec3A(0.0, 9.999988, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: Some(Vec4(0.0, 0.0, -1.0, 3.9133058)), far: Some(Vec4(0.0, 0.0, 1.0, 9995.986)), planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: None +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 640, height: 360, region: PixelRect { x0: 0, y0: 0, x1: 640, y1: 360 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 12.700017, aperture: [25.4, 25.4], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 5.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/cornellbox.usda"], invisible_overrides: Some(0) } +layer: $DIR/cornellbox.usda +warning: Warning { code: AssetUnsupportedByHost, kind: Skipped, count: 1, prims: [], message: "No asset loader: environment map $DIR/sky_gradient.exr ignored — the dome falls back to its uniform colour. Use Scene::from_usd_with_assets to supply one." } +warning: Warning { code: MaterialFallbackDefault, kind: Skipped, count: 1, prims: ["/scene/Looks/initialShadingGroup"], message: "Material /scene/Looks/initialShadingGroup has no surface shader — using default grey OpenPBR" } +lights: 1 +light 0: dome name Some("/scene/Sky") lpe None pmf 1.0 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 5 geometries, PrimitiveBreakdown { triangles: 822, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 2 } top level, PrimitiveBreakdown { triangles: 1582, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 2 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 4.0 motion [] pieces all=10:88b22fc3345d5b05 camera=10:88b22fc3345d5b05 shadow=10:88b22fc3345d5b05 indirect=10:88b22fc3345d5b05 +geom 1: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.2 motion [] pieces all=760:c2b60a75c52c78b9 camera=760:c2b60a75c52c78b9 shadow=760:c2b60a75c52c78b9 indirect=760:c2b60a75c52c78b9 +geom 2: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=12:94a297badef437e1 camera=12:94a297badef437e1 shadow=12:94a297badef437e1 indirect=12:94a297badef437e1 +geom 3: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.25 motion [] pieces all=800:4a8c9f44d777e131 camera=800:4a8c9f44d777e131 shadow=800:4a8c9f44d777e131 indirect=800:4a8c9f44d777e131 +geom 4: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.3585339 motion [] pieces all=760:2344ecf63e12c441 camera=760:2344ecf63e12c441 shadow=760:2344ecf63e12c441 indirect=760:2344ecf63e12c441 +provenance material /scene/Looks/initialShadingGroup: MaterialOrigin { slots: [0, 1, 2, 3, 4], displaced: false } +provenance light /scene/Sky: LightOrigin { index: 0, geoms: 0..0 } +provenance geometry 0..1: /scene/pCube1 +provenance geometry 1..2: /scene/pSphere1 +provenance geometry 2..3: /scene/pCube2 +provenance geometry 3..4: /scene/pTorus1 +provenance geometry 4..5: /scene/pSphere2 +provenance mesh: MeshOrigin { geom_id: 0, slot: 0, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 1, slot: 1, baked: false, moving: false } +provenance mesh: MeshOrigin { geom_id: 2, slot: 2, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 3, slot: 3, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 4, slot: 1, baked: false, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 12343188411137242430, n_points: 8, n_indices: 20, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 1: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 17119738035130870988, n_points: 382, n_indices: 1560, n_uvs: None, smooth: false, material: 0 }), placements: 2, shared: false, displaced: false } +provenance mesh slot 2: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 1739488954094729910, n_points: 8, n_indices: 24, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 3: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 6096447469814747168, n_points: 400, n_indices: 1600, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/scene/camera1"), cameras: ["/scene/camera1"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/scene/camera1"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/cornellbox_usda-563fb301d9f1f469-15.image b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-563fb301d9f1f469-15.image new file mode 100644 index 000000000..ba4884437 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-563fb301d9f1f469-15.image @@ -0,0 +1 @@ +640x360 16spp clamp-off 52a1a46f3a46d230 diff --git a/crates/crust-core/tests/data/import_baselines/cornellbox_usda-563fb301d9f1f469-16.digest b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-563fb301d9f1f469-16.digest new file mode 100644 index 000000000..0e859a952 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-563fb301d9f1f469-16.digest @@ -0,0 +1,40 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/scene/camera1") +camera: Camera { origin: Vec3A(0.0074343784, 1.9913422, 4.0133057), lower_left_corner: Vec3A(-8.881443, -3.0086517, -0.98669434), horizontal: Vec3A(17.777756, 0.0, 0.0), vertical: Vec3A(0.0, 9.999988, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: Some(Vec4(0.0, 0.0, -1.0, 3.9133058)), far: Some(Vec4(0.0, 0.0, 1.0, 9995.986)), planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: None +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 640, height: 360, region: PixelRect { x0: 0, y0: 0, x1: 640, y1: 360 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 12.700017, aperture: [25.4, 25.4], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 5.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/cornellbox.usda"], invisible_overrides: Some(0) } +layer: $DIR/cornellbox.usda +warning: Warning { code: AssetUnsupportedByHost, kind: Skipped, count: 1, prims: [], message: "No asset loader: environment map $DIR/sky_gradient.exr ignored — the dome falls back to its uniform colour. Use Scene::from_usd_with_assets to supply one." } +warning: Warning { code: MaterialFallbackDefault, kind: Skipped, count: 1, prims: ["/scene/Looks/initialShadingGroup"], message: "Material /scene/Looks/initialShadingGroup has no surface shader — using default grey OpenPBR" } +lights: 1 +light 0: dome name Some("/scene/Sky") lpe None pmf 1.0 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 5 geometries, PrimitiveBreakdown { triangles: 822, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 2 } top level, PrimitiveBreakdown { triangles: 1582, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 2 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 4.0 motion [] pieces all=10:88b22fc3345d5b05 camera=10:88b22fc3345d5b05 shadow=10:88b22fc3345d5b05 indirect=10:88b22fc3345d5b05 +geom 1: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.2 motion [] pieces all=760:c2b60a75c52c78b9 camera=760:c2b60a75c52c78b9 shadow=760:c2b60a75c52c78b9 indirect=760:c2b60a75c52c78b9 +geom 2: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=12:94a297badef437e1 camera=12:94a297badef437e1 shadow=12:94a297badef437e1 indirect=12:94a297badef437e1 +geom 3: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.25 motion [] pieces all=800:4a8c9f44d777e131 camera=800:4a8c9f44d777e131 shadow=800:4a8c9f44d777e131 indirect=800:4a8c9f44d777e131 +geom 4: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.3585339 motion [] pieces all=760:2344ecf63e12c441 camera=760:2344ecf63e12c441 shadow=760:2344ecf63e12c441 indirect=760:2344ecf63e12c441 +provenance material /scene/Looks/initialShadingGroup: MaterialOrigin { slots: [0, 1, 2, 3, 4], displaced: false } +provenance light /scene/Sky: LightOrigin { index: 0, geoms: 0..0 } +provenance geometry 0..1: /scene/pCube1 +provenance geometry 1..2: /scene/pSphere1 +provenance geometry 2..3: /scene/pCube2 +provenance geometry 3..4: /scene/pTorus1 +provenance geometry 4..5: /scene/pSphere2 +provenance mesh: MeshOrigin { geom_id: 0, slot: 0, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 1, slot: 1, baked: false, moving: false } +provenance mesh: MeshOrigin { geom_id: 2, slot: 2, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 3, slot: 3, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 4, slot: 1, baked: false, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 12343188411137242430, n_points: 8, n_indices: 20, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 1: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 17119738035130870988, n_points: 382, n_indices: 1560, n_uvs: None, smooth: false, material: 0 }), placements: 2, shared: false, displaced: false } +provenance mesh slot 2: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 1739488954094729910, n_points: 8, n_indices: 24, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 3: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 6096447469814747168, n_points: 400, n_indices: 1600, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/scene/camera1"), cameras: ["/scene/camera1"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/scene/camera1"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/cornellbox_usda-563fb301d9f1f469-16.image b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-563fb301d9f1f469-16.image new file mode 100644 index 000000000..ba4884437 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-563fb301d9f1f469-16.image @@ -0,0 +1 @@ +640x360 16spp clamp-off 52a1a46f3a46d230 diff --git a/crates/crust-core/tests/data/import_baselines/cornellbox_usda-563fb301d9f1f469-17.digest b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-563fb301d9f1f469-17.digest new file mode 100644 index 000000000..0e859a952 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-563fb301d9f1f469-17.digest @@ -0,0 +1,40 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/scene/camera1") +camera: Camera { origin: Vec3A(0.0074343784, 1.9913422, 4.0133057), lower_left_corner: Vec3A(-8.881443, -3.0086517, -0.98669434), horizontal: Vec3A(17.777756, 0.0, 0.0), vertical: Vec3A(0.0, 9.999988, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: Some(Vec4(0.0, 0.0, -1.0, 3.9133058)), far: Some(Vec4(0.0, 0.0, 1.0, 9995.986)), planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: None +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 640, height: 360, region: PixelRect { x0: 0, y0: 0, x1: 640, y1: 360 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 12.700017, aperture: [25.4, 25.4], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 5.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/cornellbox.usda"], invisible_overrides: Some(0) } +layer: $DIR/cornellbox.usda +warning: Warning { code: AssetUnsupportedByHost, kind: Skipped, count: 1, prims: [], message: "No asset loader: environment map $DIR/sky_gradient.exr ignored — the dome falls back to its uniform colour. Use Scene::from_usd_with_assets to supply one." } +warning: Warning { code: MaterialFallbackDefault, kind: Skipped, count: 1, prims: ["/scene/Looks/initialShadingGroup"], message: "Material /scene/Looks/initialShadingGroup has no surface shader — using default grey OpenPBR" } +lights: 1 +light 0: dome name Some("/scene/Sky") lpe None pmf 1.0 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 5 geometries, PrimitiveBreakdown { triangles: 822, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 2 } top level, PrimitiveBreakdown { triangles: 1582, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 2 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 4.0 motion [] pieces all=10:88b22fc3345d5b05 camera=10:88b22fc3345d5b05 shadow=10:88b22fc3345d5b05 indirect=10:88b22fc3345d5b05 +geom 1: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.2 motion [] pieces all=760:c2b60a75c52c78b9 camera=760:c2b60a75c52c78b9 shadow=760:c2b60a75c52c78b9 indirect=760:c2b60a75c52c78b9 +geom 2: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=12:94a297badef437e1 camera=12:94a297badef437e1 shadow=12:94a297badef437e1 indirect=12:94a297badef437e1 +geom 3: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.25 motion [] pieces all=800:4a8c9f44d777e131 camera=800:4a8c9f44d777e131 shadow=800:4a8c9f44d777e131 indirect=800:4a8c9f44d777e131 +geom 4: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.3585339 motion [] pieces all=760:2344ecf63e12c441 camera=760:2344ecf63e12c441 shadow=760:2344ecf63e12c441 indirect=760:2344ecf63e12c441 +provenance material /scene/Looks/initialShadingGroup: MaterialOrigin { slots: [0, 1, 2, 3, 4], displaced: false } +provenance light /scene/Sky: LightOrigin { index: 0, geoms: 0..0 } +provenance geometry 0..1: /scene/pCube1 +provenance geometry 1..2: /scene/pSphere1 +provenance geometry 2..3: /scene/pCube2 +provenance geometry 3..4: /scene/pTorus1 +provenance geometry 4..5: /scene/pSphere2 +provenance mesh: MeshOrigin { geom_id: 0, slot: 0, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 1, slot: 1, baked: false, moving: false } +provenance mesh: MeshOrigin { geom_id: 2, slot: 2, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 3, slot: 3, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 4, slot: 1, baked: false, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 12343188411137242430, n_points: 8, n_indices: 20, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 1: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 17119738035130870988, n_points: 382, n_indices: 1560, n_uvs: None, smooth: false, material: 0 }), placements: 2, shared: false, displaced: false } +provenance mesh slot 2: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 1739488954094729910, n_points: 8, n_indices: 24, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 3: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 6096447469814747168, n_points: 400, n_indices: 1600, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/scene/camera1"), cameras: ["/scene/camera1"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/scene/camera1"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/cornellbox_usda-563fb301d9f1f469-17.image b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-563fb301d9f1f469-17.image new file mode 100644 index 000000000..ba4884437 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-563fb301d9f1f469-17.image @@ -0,0 +1 @@ +640x360 16spp clamp-off 52a1a46f3a46d230 diff --git a/crates/crust-core/tests/data/import_baselines/cornellbox_usda-563fb301d9f1f469-18.digest b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-563fb301d9f1f469-18.digest new file mode 100644 index 000000000..0e859a952 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-563fb301d9f1f469-18.digest @@ -0,0 +1,40 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/scene/camera1") +camera: Camera { origin: Vec3A(0.0074343784, 1.9913422, 4.0133057), lower_left_corner: Vec3A(-8.881443, -3.0086517, -0.98669434), horizontal: Vec3A(17.777756, 0.0, 0.0), vertical: Vec3A(0.0, 9.999988, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: Some(Vec4(0.0, 0.0, -1.0, 3.9133058)), far: Some(Vec4(0.0, 0.0, 1.0, 9995.986)), planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: None +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 640, height: 360, region: PixelRect { x0: 0, y0: 0, x1: 640, y1: 360 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 12.700017, aperture: [25.4, 25.4], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 5.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/cornellbox.usda"], invisible_overrides: Some(0) } +layer: $DIR/cornellbox.usda +warning: Warning { code: AssetUnsupportedByHost, kind: Skipped, count: 1, prims: [], message: "No asset loader: environment map $DIR/sky_gradient.exr ignored — the dome falls back to its uniform colour. Use Scene::from_usd_with_assets to supply one." } +warning: Warning { code: MaterialFallbackDefault, kind: Skipped, count: 1, prims: ["/scene/Looks/initialShadingGroup"], message: "Material /scene/Looks/initialShadingGroup has no surface shader — using default grey OpenPBR" } +lights: 1 +light 0: dome name Some("/scene/Sky") lpe None pmf 1.0 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 5 geometries, PrimitiveBreakdown { triangles: 822, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 2 } top level, PrimitiveBreakdown { triangles: 1582, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 2 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 4.0 motion [] pieces all=10:88b22fc3345d5b05 camera=10:88b22fc3345d5b05 shadow=10:88b22fc3345d5b05 indirect=10:88b22fc3345d5b05 +geom 1: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.2 motion [] pieces all=760:c2b60a75c52c78b9 camera=760:c2b60a75c52c78b9 shadow=760:c2b60a75c52c78b9 indirect=760:c2b60a75c52c78b9 +geom 2: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=12:94a297badef437e1 camera=12:94a297badef437e1 shadow=12:94a297badef437e1 indirect=12:94a297badef437e1 +geom 3: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.25 motion [] pieces all=800:4a8c9f44d777e131 camera=800:4a8c9f44d777e131 shadow=800:4a8c9f44d777e131 indirect=800:4a8c9f44d777e131 +geom 4: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.3585339 motion [] pieces all=760:2344ecf63e12c441 camera=760:2344ecf63e12c441 shadow=760:2344ecf63e12c441 indirect=760:2344ecf63e12c441 +provenance material /scene/Looks/initialShadingGroup: MaterialOrigin { slots: [0, 1, 2, 3, 4], displaced: false } +provenance light /scene/Sky: LightOrigin { index: 0, geoms: 0..0 } +provenance geometry 0..1: /scene/pCube1 +provenance geometry 1..2: /scene/pSphere1 +provenance geometry 2..3: /scene/pCube2 +provenance geometry 3..4: /scene/pTorus1 +provenance geometry 4..5: /scene/pSphere2 +provenance mesh: MeshOrigin { geom_id: 0, slot: 0, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 1, slot: 1, baked: false, moving: false } +provenance mesh: MeshOrigin { geom_id: 2, slot: 2, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 3, slot: 3, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 4, slot: 1, baked: false, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 12343188411137242430, n_points: 8, n_indices: 20, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 1: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 17119738035130870988, n_points: 382, n_indices: 1560, n_uvs: None, smooth: false, material: 0 }), placements: 2, shared: false, displaced: false } +provenance mesh slot 2: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 1739488954094729910, n_points: 8, n_indices: 24, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 3: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 6096447469814747168, n_points: 400, n_indices: 1600, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/scene/camera1"), cameras: ["/scene/camera1"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/scene/camera1"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/cornellbox_usda-563fb301d9f1f469-18.image b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-563fb301d9f1f469-18.image new file mode 100644 index 000000000..ba4884437 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-563fb301d9f1f469-18.image @@ -0,0 +1 @@ +640x360 16spp clamp-off 52a1a46f3a46d230 diff --git a/crates/crust-core/tests/data/import_baselines/cornellbox_usda-563fb301d9f1f469-19.digest b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-563fb301d9f1f469-19.digest new file mode 100644 index 000000000..0e859a952 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-563fb301d9f1f469-19.digest @@ -0,0 +1,40 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/scene/camera1") +camera: Camera { origin: Vec3A(0.0074343784, 1.9913422, 4.0133057), lower_left_corner: Vec3A(-8.881443, -3.0086517, -0.98669434), horizontal: Vec3A(17.777756, 0.0, 0.0), vertical: Vec3A(0.0, 9.999988, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: Some(Vec4(0.0, 0.0, -1.0, 3.9133058)), far: Some(Vec4(0.0, 0.0, 1.0, 9995.986)), planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: None +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 640, height: 360, region: PixelRect { x0: 0, y0: 0, x1: 640, y1: 360 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 12.700017, aperture: [25.4, 25.4], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 5.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/cornellbox.usda"], invisible_overrides: Some(0) } +layer: $DIR/cornellbox.usda +warning: Warning { code: AssetUnsupportedByHost, kind: Skipped, count: 1, prims: [], message: "No asset loader: environment map $DIR/sky_gradient.exr ignored — the dome falls back to its uniform colour. Use Scene::from_usd_with_assets to supply one." } +warning: Warning { code: MaterialFallbackDefault, kind: Skipped, count: 1, prims: ["/scene/Looks/initialShadingGroup"], message: "Material /scene/Looks/initialShadingGroup has no surface shader — using default grey OpenPBR" } +lights: 1 +light 0: dome name Some("/scene/Sky") lpe None pmf 1.0 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 5 geometries, PrimitiveBreakdown { triangles: 822, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 2 } top level, PrimitiveBreakdown { triangles: 1582, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 2 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 4.0 motion [] pieces all=10:88b22fc3345d5b05 camera=10:88b22fc3345d5b05 shadow=10:88b22fc3345d5b05 indirect=10:88b22fc3345d5b05 +geom 1: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.2 motion [] pieces all=760:c2b60a75c52c78b9 camera=760:c2b60a75c52c78b9 shadow=760:c2b60a75c52c78b9 indirect=760:c2b60a75c52c78b9 +geom 2: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=12:94a297badef437e1 camera=12:94a297badef437e1 shadow=12:94a297badef437e1 indirect=12:94a297badef437e1 +geom 3: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.25 motion [] pieces all=800:4a8c9f44d777e131 camera=800:4a8c9f44d777e131 shadow=800:4a8c9f44d777e131 indirect=800:4a8c9f44d777e131 +geom 4: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.3585339 motion [] pieces all=760:2344ecf63e12c441 camera=760:2344ecf63e12c441 shadow=760:2344ecf63e12c441 indirect=760:2344ecf63e12c441 +provenance material /scene/Looks/initialShadingGroup: MaterialOrigin { slots: [0, 1, 2, 3, 4], displaced: false } +provenance light /scene/Sky: LightOrigin { index: 0, geoms: 0..0 } +provenance geometry 0..1: /scene/pCube1 +provenance geometry 1..2: /scene/pSphere1 +provenance geometry 2..3: /scene/pCube2 +provenance geometry 3..4: /scene/pTorus1 +provenance geometry 4..5: /scene/pSphere2 +provenance mesh: MeshOrigin { geom_id: 0, slot: 0, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 1, slot: 1, baked: false, moving: false } +provenance mesh: MeshOrigin { geom_id: 2, slot: 2, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 3, slot: 3, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 4, slot: 1, baked: false, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 12343188411137242430, n_points: 8, n_indices: 20, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 1: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 17119738035130870988, n_points: 382, n_indices: 1560, n_uvs: None, smooth: false, material: 0 }), placements: 2, shared: false, displaced: false } +provenance mesh slot 2: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 1739488954094729910, n_points: 8, n_indices: 24, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 3: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 6096447469814747168, n_points: 400, n_indices: 1600, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/scene/camera1"), cameras: ["/scene/camera1"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/scene/camera1"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/cornellbox_usda-563fb301d9f1f469-19.image b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-563fb301d9f1f469-19.image new file mode 100644 index 000000000..ba4884437 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-563fb301d9f1f469-19.image @@ -0,0 +1 @@ +640x360 16spp clamp-off 52a1a46f3a46d230 diff --git a/crates/crust-core/tests/data/import_baselines/cornellbox_usda-563fb301d9f1f469-2.digest b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-563fb301d9f1f469-2.digest new file mode 100644 index 000000000..0e859a952 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-563fb301d9f1f469-2.digest @@ -0,0 +1,40 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/scene/camera1") +camera: Camera { origin: Vec3A(0.0074343784, 1.9913422, 4.0133057), lower_left_corner: Vec3A(-8.881443, -3.0086517, -0.98669434), horizontal: Vec3A(17.777756, 0.0, 0.0), vertical: Vec3A(0.0, 9.999988, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: Some(Vec4(0.0, 0.0, -1.0, 3.9133058)), far: Some(Vec4(0.0, 0.0, 1.0, 9995.986)), planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: None +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 640, height: 360, region: PixelRect { x0: 0, y0: 0, x1: 640, y1: 360 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 12.700017, aperture: [25.4, 25.4], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 5.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/cornellbox.usda"], invisible_overrides: Some(0) } +layer: $DIR/cornellbox.usda +warning: Warning { code: AssetUnsupportedByHost, kind: Skipped, count: 1, prims: [], message: "No asset loader: environment map $DIR/sky_gradient.exr ignored — the dome falls back to its uniform colour. Use Scene::from_usd_with_assets to supply one." } +warning: Warning { code: MaterialFallbackDefault, kind: Skipped, count: 1, prims: ["/scene/Looks/initialShadingGroup"], message: "Material /scene/Looks/initialShadingGroup has no surface shader — using default grey OpenPBR" } +lights: 1 +light 0: dome name Some("/scene/Sky") lpe None pmf 1.0 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 5 geometries, PrimitiveBreakdown { triangles: 822, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 2 } top level, PrimitiveBreakdown { triangles: 1582, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 2 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 4.0 motion [] pieces all=10:88b22fc3345d5b05 camera=10:88b22fc3345d5b05 shadow=10:88b22fc3345d5b05 indirect=10:88b22fc3345d5b05 +geom 1: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.2 motion [] pieces all=760:c2b60a75c52c78b9 camera=760:c2b60a75c52c78b9 shadow=760:c2b60a75c52c78b9 indirect=760:c2b60a75c52c78b9 +geom 2: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=12:94a297badef437e1 camera=12:94a297badef437e1 shadow=12:94a297badef437e1 indirect=12:94a297badef437e1 +geom 3: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.25 motion [] pieces all=800:4a8c9f44d777e131 camera=800:4a8c9f44d777e131 shadow=800:4a8c9f44d777e131 indirect=800:4a8c9f44d777e131 +geom 4: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.3585339 motion [] pieces all=760:2344ecf63e12c441 camera=760:2344ecf63e12c441 shadow=760:2344ecf63e12c441 indirect=760:2344ecf63e12c441 +provenance material /scene/Looks/initialShadingGroup: MaterialOrigin { slots: [0, 1, 2, 3, 4], displaced: false } +provenance light /scene/Sky: LightOrigin { index: 0, geoms: 0..0 } +provenance geometry 0..1: /scene/pCube1 +provenance geometry 1..2: /scene/pSphere1 +provenance geometry 2..3: /scene/pCube2 +provenance geometry 3..4: /scene/pTorus1 +provenance geometry 4..5: /scene/pSphere2 +provenance mesh: MeshOrigin { geom_id: 0, slot: 0, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 1, slot: 1, baked: false, moving: false } +provenance mesh: MeshOrigin { geom_id: 2, slot: 2, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 3, slot: 3, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 4, slot: 1, baked: false, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 12343188411137242430, n_points: 8, n_indices: 20, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 1: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 17119738035130870988, n_points: 382, n_indices: 1560, n_uvs: None, smooth: false, material: 0 }), placements: 2, shared: false, displaced: false } +provenance mesh slot 2: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 1739488954094729910, n_points: 8, n_indices: 24, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 3: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 6096447469814747168, n_points: 400, n_indices: 1600, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/scene/camera1"), cameras: ["/scene/camera1"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/scene/camera1"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/cornellbox_usda-563fb301d9f1f469-2.image b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-563fb301d9f1f469-2.image new file mode 100644 index 000000000..ba4884437 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-563fb301d9f1f469-2.image @@ -0,0 +1 @@ +640x360 16spp clamp-off 52a1a46f3a46d230 diff --git a/crates/crust-core/tests/data/import_baselines/cornellbox_usda-563fb301d9f1f469-20.digest b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-563fb301d9f1f469-20.digest new file mode 100644 index 000000000..0e859a952 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-563fb301d9f1f469-20.digest @@ -0,0 +1,40 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/scene/camera1") +camera: Camera { origin: Vec3A(0.0074343784, 1.9913422, 4.0133057), lower_left_corner: Vec3A(-8.881443, -3.0086517, -0.98669434), horizontal: Vec3A(17.777756, 0.0, 0.0), vertical: Vec3A(0.0, 9.999988, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: Some(Vec4(0.0, 0.0, -1.0, 3.9133058)), far: Some(Vec4(0.0, 0.0, 1.0, 9995.986)), planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: None +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 640, height: 360, region: PixelRect { x0: 0, y0: 0, x1: 640, y1: 360 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 12.700017, aperture: [25.4, 25.4], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 5.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/cornellbox.usda"], invisible_overrides: Some(0) } +layer: $DIR/cornellbox.usda +warning: Warning { code: AssetUnsupportedByHost, kind: Skipped, count: 1, prims: [], message: "No asset loader: environment map $DIR/sky_gradient.exr ignored — the dome falls back to its uniform colour. Use Scene::from_usd_with_assets to supply one." } +warning: Warning { code: MaterialFallbackDefault, kind: Skipped, count: 1, prims: ["/scene/Looks/initialShadingGroup"], message: "Material /scene/Looks/initialShadingGroup has no surface shader — using default grey OpenPBR" } +lights: 1 +light 0: dome name Some("/scene/Sky") lpe None pmf 1.0 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 5 geometries, PrimitiveBreakdown { triangles: 822, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 2 } top level, PrimitiveBreakdown { triangles: 1582, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 2 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 4.0 motion [] pieces all=10:88b22fc3345d5b05 camera=10:88b22fc3345d5b05 shadow=10:88b22fc3345d5b05 indirect=10:88b22fc3345d5b05 +geom 1: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.2 motion [] pieces all=760:c2b60a75c52c78b9 camera=760:c2b60a75c52c78b9 shadow=760:c2b60a75c52c78b9 indirect=760:c2b60a75c52c78b9 +geom 2: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=12:94a297badef437e1 camera=12:94a297badef437e1 shadow=12:94a297badef437e1 indirect=12:94a297badef437e1 +geom 3: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.25 motion [] pieces all=800:4a8c9f44d777e131 camera=800:4a8c9f44d777e131 shadow=800:4a8c9f44d777e131 indirect=800:4a8c9f44d777e131 +geom 4: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.3585339 motion [] pieces all=760:2344ecf63e12c441 camera=760:2344ecf63e12c441 shadow=760:2344ecf63e12c441 indirect=760:2344ecf63e12c441 +provenance material /scene/Looks/initialShadingGroup: MaterialOrigin { slots: [0, 1, 2, 3, 4], displaced: false } +provenance light /scene/Sky: LightOrigin { index: 0, geoms: 0..0 } +provenance geometry 0..1: /scene/pCube1 +provenance geometry 1..2: /scene/pSphere1 +provenance geometry 2..3: /scene/pCube2 +provenance geometry 3..4: /scene/pTorus1 +provenance geometry 4..5: /scene/pSphere2 +provenance mesh: MeshOrigin { geom_id: 0, slot: 0, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 1, slot: 1, baked: false, moving: false } +provenance mesh: MeshOrigin { geom_id: 2, slot: 2, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 3, slot: 3, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 4, slot: 1, baked: false, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 12343188411137242430, n_points: 8, n_indices: 20, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 1: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 17119738035130870988, n_points: 382, n_indices: 1560, n_uvs: None, smooth: false, material: 0 }), placements: 2, shared: false, displaced: false } +provenance mesh slot 2: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 1739488954094729910, n_points: 8, n_indices: 24, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 3: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 6096447469814747168, n_points: 400, n_indices: 1600, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/scene/camera1"), cameras: ["/scene/camera1"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/scene/camera1"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/cornellbox_usda-563fb301d9f1f469-20.image b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-563fb301d9f1f469-20.image new file mode 100644 index 000000000..ba4884437 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-563fb301d9f1f469-20.image @@ -0,0 +1 @@ +640x360 16spp clamp-off 52a1a46f3a46d230 diff --git a/crates/crust-core/tests/data/import_baselines/cornellbox_usda-563fb301d9f1f469-21.digest b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-563fb301d9f1f469-21.digest new file mode 100644 index 000000000..0e859a952 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-563fb301d9f1f469-21.digest @@ -0,0 +1,40 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/scene/camera1") +camera: Camera { origin: Vec3A(0.0074343784, 1.9913422, 4.0133057), lower_left_corner: Vec3A(-8.881443, -3.0086517, -0.98669434), horizontal: Vec3A(17.777756, 0.0, 0.0), vertical: Vec3A(0.0, 9.999988, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: Some(Vec4(0.0, 0.0, -1.0, 3.9133058)), far: Some(Vec4(0.0, 0.0, 1.0, 9995.986)), planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: None +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 640, height: 360, region: PixelRect { x0: 0, y0: 0, x1: 640, y1: 360 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 12.700017, aperture: [25.4, 25.4], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 5.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/cornellbox.usda"], invisible_overrides: Some(0) } +layer: $DIR/cornellbox.usda +warning: Warning { code: AssetUnsupportedByHost, kind: Skipped, count: 1, prims: [], message: "No asset loader: environment map $DIR/sky_gradient.exr ignored — the dome falls back to its uniform colour. Use Scene::from_usd_with_assets to supply one." } +warning: Warning { code: MaterialFallbackDefault, kind: Skipped, count: 1, prims: ["/scene/Looks/initialShadingGroup"], message: "Material /scene/Looks/initialShadingGroup has no surface shader — using default grey OpenPBR" } +lights: 1 +light 0: dome name Some("/scene/Sky") lpe None pmf 1.0 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 5 geometries, PrimitiveBreakdown { triangles: 822, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 2 } top level, PrimitiveBreakdown { triangles: 1582, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 2 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 4.0 motion [] pieces all=10:88b22fc3345d5b05 camera=10:88b22fc3345d5b05 shadow=10:88b22fc3345d5b05 indirect=10:88b22fc3345d5b05 +geom 1: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.2 motion [] pieces all=760:c2b60a75c52c78b9 camera=760:c2b60a75c52c78b9 shadow=760:c2b60a75c52c78b9 indirect=760:c2b60a75c52c78b9 +geom 2: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=12:94a297badef437e1 camera=12:94a297badef437e1 shadow=12:94a297badef437e1 indirect=12:94a297badef437e1 +geom 3: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.25 motion [] pieces all=800:4a8c9f44d777e131 camera=800:4a8c9f44d777e131 shadow=800:4a8c9f44d777e131 indirect=800:4a8c9f44d777e131 +geom 4: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.3585339 motion [] pieces all=760:2344ecf63e12c441 camera=760:2344ecf63e12c441 shadow=760:2344ecf63e12c441 indirect=760:2344ecf63e12c441 +provenance material /scene/Looks/initialShadingGroup: MaterialOrigin { slots: [0, 1, 2, 3, 4], displaced: false } +provenance light /scene/Sky: LightOrigin { index: 0, geoms: 0..0 } +provenance geometry 0..1: /scene/pCube1 +provenance geometry 1..2: /scene/pSphere1 +provenance geometry 2..3: /scene/pCube2 +provenance geometry 3..4: /scene/pTorus1 +provenance geometry 4..5: /scene/pSphere2 +provenance mesh: MeshOrigin { geom_id: 0, slot: 0, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 1, slot: 1, baked: false, moving: false } +provenance mesh: MeshOrigin { geom_id: 2, slot: 2, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 3, slot: 3, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 4, slot: 1, baked: false, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 12343188411137242430, n_points: 8, n_indices: 20, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 1: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 17119738035130870988, n_points: 382, n_indices: 1560, n_uvs: None, smooth: false, material: 0 }), placements: 2, shared: false, displaced: false } +provenance mesh slot 2: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 1739488954094729910, n_points: 8, n_indices: 24, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 3: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 6096447469814747168, n_points: 400, n_indices: 1600, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/scene/camera1"), cameras: ["/scene/camera1"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/scene/camera1"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/cornellbox_usda-563fb301d9f1f469-21.image b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-563fb301d9f1f469-21.image new file mode 100644 index 000000000..ba4884437 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-563fb301d9f1f469-21.image @@ -0,0 +1 @@ +640x360 16spp clamp-off 52a1a46f3a46d230 diff --git a/crates/crust-core/tests/data/import_baselines/cornellbox_usda-563fb301d9f1f469-22.digest b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-563fb301d9f1f469-22.digest new file mode 100644 index 000000000..0e859a952 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-563fb301d9f1f469-22.digest @@ -0,0 +1,40 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/scene/camera1") +camera: Camera { origin: Vec3A(0.0074343784, 1.9913422, 4.0133057), lower_left_corner: Vec3A(-8.881443, -3.0086517, -0.98669434), horizontal: Vec3A(17.777756, 0.0, 0.0), vertical: Vec3A(0.0, 9.999988, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: Some(Vec4(0.0, 0.0, -1.0, 3.9133058)), far: Some(Vec4(0.0, 0.0, 1.0, 9995.986)), planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: None +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 640, height: 360, region: PixelRect { x0: 0, y0: 0, x1: 640, y1: 360 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 12.700017, aperture: [25.4, 25.4], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 5.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/cornellbox.usda"], invisible_overrides: Some(0) } +layer: $DIR/cornellbox.usda +warning: Warning { code: AssetUnsupportedByHost, kind: Skipped, count: 1, prims: [], message: "No asset loader: environment map $DIR/sky_gradient.exr ignored — the dome falls back to its uniform colour. Use Scene::from_usd_with_assets to supply one." } +warning: Warning { code: MaterialFallbackDefault, kind: Skipped, count: 1, prims: ["/scene/Looks/initialShadingGroup"], message: "Material /scene/Looks/initialShadingGroup has no surface shader — using default grey OpenPBR" } +lights: 1 +light 0: dome name Some("/scene/Sky") lpe None pmf 1.0 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 5 geometries, PrimitiveBreakdown { triangles: 822, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 2 } top level, PrimitiveBreakdown { triangles: 1582, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 2 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 4.0 motion [] pieces all=10:88b22fc3345d5b05 camera=10:88b22fc3345d5b05 shadow=10:88b22fc3345d5b05 indirect=10:88b22fc3345d5b05 +geom 1: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.2 motion [] pieces all=760:c2b60a75c52c78b9 camera=760:c2b60a75c52c78b9 shadow=760:c2b60a75c52c78b9 indirect=760:c2b60a75c52c78b9 +geom 2: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=12:94a297badef437e1 camera=12:94a297badef437e1 shadow=12:94a297badef437e1 indirect=12:94a297badef437e1 +geom 3: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.25 motion [] pieces all=800:4a8c9f44d777e131 camera=800:4a8c9f44d777e131 shadow=800:4a8c9f44d777e131 indirect=800:4a8c9f44d777e131 +geom 4: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.3585339 motion [] pieces all=760:2344ecf63e12c441 camera=760:2344ecf63e12c441 shadow=760:2344ecf63e12c441 indirect=760:2344ecf63e12c441 +provenance material /scene/Looks/initialShadingGroup: MaterialOrigin { slots: [0, 1, 2, 3, 4], displaced: false } +provenance light /scene/Sky: LightOrigin { index: 0, geoms: 0..0 } +provenance geometry 0..1: /scene/pCube1 +provenance geometry 1..2: /scene/pSphere1 +provenance geometry 2..3: /scene/pCube2 +provenance geometry 3..4: /scene/pTorus1 +provenance geometry 4..5: /scene/pSphere2 +provenance mesh: MeshOrigin { geom_id: 0, slot: 0, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 1, slot: 1, baked: false, moving: false } +provenance mesh: MeshOrigin { geom_id: 2, slot: 2, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 3, slot: 3, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 4, slot: 1, baked: false, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 12343188411137242430, n_points: 8, n_indices: 20, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 1: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 17119738035130870988, n_points: 382, n_indices: 1560, n_uvs: None, smooth: false, material: 0 }), placements: 2, shared: false, displaced: false } +provenance mesh slot 2: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 1739488954094729910, n_points: 8, n_indices: 24, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 3: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 6096447469814747168, n_points: 400, n_indices: 1600, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/scene/camera1"), cameras: ["/scene/camera1"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/scene/camera1"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/cornellbox_usda-563fb301d9f1f469-22.image b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-563fb301d9f1f469-22.image new file mode 100644 index 000000000..ba4884437 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-563fb301d9f1f469-22.image @@ -0,0 +1 @@ +640x360 16spp clamp-off 52a1a46f3a46d230 diff --git a/crates/crust-core/tests/data/import_baselines/cornellbox_usda-563fb301d9f1f469-23.digest b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-563fb301d9f1f469-23.digest new file mode 100644 index 000000000..0e859a952 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-563fb301d9f1f469-23.digest @@ -0,0 +1,40 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/scene/camera1") +camera: Camera { origin: Vec3A(0.0074343784, 1.9913422, 4.0133057), lower_left_corner: Vec3A(-8.881443, -3.0086517, -0.98669434), horizontal: Vec3A(17.777756, 0.0, 0.0), vertical: Vec3A(0.0, 9.999988, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: Some(Vec4(0.0, 0.0, -1.0, 3.9133058)), far: Some(Vec4(0.0, 0.0, 1.0, 9995.986)), planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: None +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 640, height: 360, region: PixelRect { x0: 0, y0: 0, x1: 640, y1: 360 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 12.700017, aperture: [25.4, 25.4], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 5.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/cornellbox.usda"], invisible_overrides: Some(0) } +layer: $DIR/cornellbox.usda +warning: Warning { code: AssetUnsupportedByHost, kind: Skipped, count: 1, prims: [], message: "No asset loader: environment map $DIR/sky_gradient.exr ignored — the dome falls back to its uniform colour. Use Scene::from_usd_with_assets to supply one." } +warning: Warning { code: MaterialFallbackDefault, kind: Skipped, count: 1, prims: ["/scene/Looks/initialShadingGroup"], message: "Material /scene/Looks/initialShadingGroup has no surface shader — using default grey OpenPBR" } +lights: 1 +light 0: dome name Some("/scene/Sky") lpe None pmf 1.0 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 5 geometries, PrimitiveBreakdown { triangles: 822, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 2 } top level, PrimitiveBreakdown { triangles: 1582, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 2 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 4.0 motion [] pieces all=10:88b22fc3345d5b05 camera=10:88b22fc3345d5b05 shadow=10:88b22fc3345d5b05 indirect=10:88b22fc3345d5b05 +geom 1: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.2 motion [] pieces all=760:c2b60a75c52c78b9 camera=760:c2b60a75c52c78b9 shadow=760:c2b60a75c52c78b9 indirect=760:c2b60a75c52c78b9 +geom 2: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=12:94a297badef437e1 camera=12:94a297badef437e1 shadow=12:94a297badef437e1 indirect=12:94a297badef437e1 +geom 3: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.25 motion [] pieces all=800:4a8c9f44d777e131 camera=800:4a8c9f44d777e131 shadow=800:4a8c9f44d777e131 indirect=800:4a8c9f44d777e131 +geom 4: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.3585339 motion [] pieces all=760:2344ecf63e12c441 camera=760:2344ecf63e12c441 shadow=760:2344ecf63e12c441 indirect=760:2344ecf63e12c441 +provenance material /scene/Looks/initialShadingGroup: MaterialOrigin { slots: [0, 1, 2, 3, 4], displaced: false } +provenance light /scene/Sky: LightOrigin { index: 0, geoms: 0..0 } +provenance geometry 0..1: /scene/pCube1 +provenance geometry 1..2: /scene/pSphere1 +provenance geometry 2..3: /scene/pCube2 +provenance geometry 3..4: /scene/pTorus1 +provenance geometry 4..5: /scene/pSphere2 +provenance mesh: MeshOrigin { geom_id: 0, slot: 0, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 1, slot: 1, baked: false, moving: false } +provenance mesh: MeshOrigin { geom_id: 2, slot: 2, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 3, slot: 3, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 4, slot: 1, baked: false, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 12343188411137242430, n_points: 8, n_indices: 20, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 1: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 17119738035130870988, n_points: 382, n_indices: 1560, n_uvs: None, smooth: false, material: 0 }), placements: 2, shared: false, displaced: false } +provenance mesh slot 2: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 1739488954094729910, n_points: 8, n_indices: 24, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 3: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 6096447469814747168, n_points: 400, n_indices: 1600, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/scene/camera1"), cameras: ["/scene/camera1"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/scene/camera1"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/cornellbox_usda-563fb301d9f1f469-23.image b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-563fb301d9f1f469-23.image new file mode 100644 index 000000000..ba4884437 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-563fb301d9f1f469-23.image @@ -0,0 +1 @@ +640x360 16spp clamp-off 52a1a46f3a46d230 diff --git a/crates/crust-core/tests/data/import_baselines/cornellbox_usda-563fb301d9f1f469-24.digest b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-563fb301d9f1f469-24.digest new file mode 100644 index 000000000..0e859a952 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-563fb301d9f1f469-24.digest @@ -0,0 +1,40 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/scene/camera1") +camera: Camera { origin: Vec3A(0.0074343784, 1.9913422, 4.0133057), lower_left_corner: Vec3A(-8.881443, -3.0086517, -0.98669434), horizontal: Vec3A(17.777756, 0.0, 0.0), vertical: Vec3A(0.0, 9.999988, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: Some(Vec4(0.0, 0.0, -1.0, 3.9133058)), far: Some(Vec4(0.0, 0.0, 1.0, 9995.986)), planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: None +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 640, height: 360, region: PixelRect { x0: 0, y0: 0, x1: 640, y1: 360 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 12.700017, aperture: [25.4, 25.4], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 5.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/cornellbox.usda"], invisible_overrides: Some(0) } +layer: $DIR/cornellbox.usda +warning: Warning { code: AssetUnsupportedByHost, kind: Skipped, count: 1, prims: [], message: "No asset loader: environment map $DIR/sky_gradient.exr ignored — the dome falls back to its uniform colour. Use Scene::from_usd_with_assets to supply one." } +warning: Warning { code: MaterialFallbackDefault, kind: Skipped, count: 1, prims: ["/scene/Looks/initialShadingGroup"], message: "Material /scene/Looks/initialShadingGroup has no surface shader — using default grey OpenPBR" } +lights: 1 +light 0: dome name Some("/scene/Sky") lpe None pmf 1.0 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 5 geometries, PrimitiveBreakdown { triangles: 822, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 2 } top level, PrimitiveBreakdown { triangles: 1582, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 2 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 4.0 motion [] pieces all=10:88b22fc3345d5b05 camera=10:88b22fc3345d5b05 shadow=10:88b22fc3345d5b05 indirect=10:88b22fc3345d5b05 +geom 1: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.2 motion [] pieces all=760:c2b60a75c52c78b9 camera=760:c2b60a75c52c78b9 shadow=760:c2b60a75c52c78b9 indirect=760:c2b60a75c52c78b9 +geom 2: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=12:94a297badef437e1 camera=12:94a297badef437e1 shadow=12:94a297badef437e1 indirect=12:94a297badef437e1 +geom 3: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.25 motion [] pieces all=800:4a8c9f44d777e131 camera=800:4a8c9f44d777e131 shadow=800:4a8c9f44d777e131 indirect=800:4a8c9f44d777e131 +geom 4: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.3585339 motion [] pieces all=760:2344ecf63e12c441 camera=760:2344ecf63e12c441 shadow=760:2344ecf63e12c441 indirect=760:2344ecf63e12c441 +provenance material /scene/Looks/initialShadingGroup: MaterialOrigin { slots: [0, 1, 2, 3, 4], displaced: false } +provenance light /scene/Sky: LightOrigin { index: 0, geoms: 0..0 } +provenance geometry 0..1: /scene/pCube1 +provenance geometry 1..2: /scene/pSphere1 +provenance geometry 2..3: /scene/pCube2 +provenance geometry 3..4: /scene/pTorus1 +provenance geometry 4..5: /scene/pSphere2 +provenance mesh: MeshOrigin { geom_id: 0, slot: 0, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 1, slot: 1, baked: false, moving: false } +provenance mesh: MeshOrigin { geom_id: 2, slot: 2, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 3, slot: 3, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 4, slot: 1, baked: false, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 12343188411137242430, n_points: 8, n_indices: 20, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 1: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 17119738035130870988, n_points: 382, n_indices: 1560, n_uvs: None, smooth: false, material: 0 }), placements: 2, shared: false, displaced: false } +provenance mesh slot 2: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 1739488954094729910, n_points: 8, n_indices: 24, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 3: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 6096447469814747168, n_points: 400, n_indices: 1600, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/scene/camera1"), cameras: ["/scene/camera1"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/scene/camera1"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/cornellbox_usda-563fb301d9f1f469-24.image b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-563fb301d9f1f469-24.image new file mode 100644 index 000000000..ba4884437 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-563fb301d9f1f469-24.image @@ -0,0 +1 @@ +640x360 16spp clamp-off 52a1a46f3a46d230 diff --git a/crates/crust-core/tests/data/import_baselines/cornellbox_usda-563fb301d9f1f469-25.digest b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-563fb301d9f1f469-25.digest new file mode 100644 index 000000000..0e859a952 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-563fb301d9f1f469-25.digest @@ -0,0 +1,40 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/scene/camera1") +camera: Camera { origin: Vec3A(0.0074343784, 1.9913422, 4.0133057), lower_left_corner: Vec3A(-8.881443, -3.0086517, -0.98669434), horizontal: Vec3A(17.777756, 0.0, 0.0), vertical: Vec3A(0.0, 9.999988, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: Some(Vec4(0.0, 0.0, -1.0, 3.9133058)), far: Some(Vec4(0.0, 0.0, 1.0, 9995.986)), planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: None +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 640, height: 360, region: PixelRect { x0: 0, y0: 0, x1: 640, y1: 360 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 12.700017, aperture: [25.4, 25.4], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 5.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/cornellbox.usda"], invisible_overrides: Some(0) } +layer: $DIR/cornellbox.usda +warning: Warning { code: AssetUnsupportedByHost, kind: Skipped, count: 1, prims: [], message: "No asset loader: environment map $DIR/sky_gradient.exr ignored — the dome falls back to its uniform colour. Use Scene::from_usd_with_assets to supply one." } +warning: Warning { code: MaterialFallbackDefault, kind: Skipped, count: 1, prims: ["/scene/Looks/initialShadingGroup"], message: "Material /scene/Looks/initialShadingGroup has no surface shader — using default grey OpenPBR" } +lights: 1 +light 0: dome name Some("/scene/Sky") lpe None pmf 1.0 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 5 geometries, PrimitiveBreakdown { triangles: 822, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 2 } top level, PrimitiveBreakdown { triangles: 1582, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 2 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 4.0 motion [] pieces all=10:88b22fc3345d5b05 camera=10:88b22fc3345d5b05 shadow=10:88b22fc3345d5b05 indirect=10:88b22fc3345d5b05 +geom 1: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.2 motion [] pieces all=760:c2b60a75c52c78b9 camera=760:c2b60a75c52c78b9 shadow=760:c2b60a75c52c78b9 indirect=760:c2b60a75c52c78b9 +geom 2: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=12:94a297badef437e1 camera=12:94a297badef437e1 shadow=12:94a297badef437e1 indirect=12:94a297badef437e1 +geom 3: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.25 motion [] pieces all=800:4a8c9f44d777e131 camera=800:4a8c9f44d777e131 shadow=800:4a8c9f44d777e131 indirect=800:4a8c9f44d777e131 +geom 4: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.3585339 motion [] pieces all=760:2344ecf63e12c441 camera=760:2344ecf63e12c441 shadow=760:2344ecf63e12c441 indirect=760:2344ecf63e12c441 +provenance material /scene/Looks/initialShadingGroup: MaterialOrigin { slots: [0, 1, 2, 3, 4], displaced: false } +provenance light /scene/Sky: LightOrigin { index: 0, geoms: 0..0 } +provenance geometry 0..1: /scene/pCube1 +provenance geometry 1..2: /scene/pSphere1 +provenance geometry 2..3: /scene/pCube2 +provenance geometry 3..4: /scene/pTorus1 +provenance geometry 4..5: /scene/pSphere2 +provenance mesh: MeshOrigin { geom_id: 0, slot: 0, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 1, slot: 1, baked: false, moving: false } +provenance mesh: MeshOrigin { geom_id: 2, slot: 2, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 3, slot: 3, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 4, slot: 1, baked: false, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 12343188411137242430, n_points: 8, n_indices: 20, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 1: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 17119738035130870988, n_points: 382, n_indices: 1560, n_uvs: None, smooth: false, material: 0 }), placements: 2, shared: false, displaced: false } +provenance mesh slot 2: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 1739488954094729910, n_points: 8, n_indices: 24, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 3: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 6096447469814747168, n_points: 400, n_indices: 1600, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/scene/camera1"), cameras: ["/scene/camera1"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/scene/camera1"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/cornellbox_usda-563fb301d9f1f469-25.image b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-563fb301d9f1f469-25.image new file mode 100644 index 000000000..ba4884437 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-563fb301d9f1f469-25.image @@ -0,0 +1 @@ +640x360 16spp clamp-off 52a1a46f3a46d230 diff --git a/crates/crust-core/tests/data/import_baselines/cornellbox_usda-563fb301d9f1f469-3.digest b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-563fb301d9f1f469-3.digest new file mode 100644 index 000000000..0e859a952 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-563fb301d9f1f469-3.digest @@ -0,0 +1,40 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/scene/camera1") +camera: Camera { origin: Vec3A(0.0074343784, 1.9913422, 4.0133057), lower_left_corner: Vec3A(-8.881443, -3.0086517, -0.98669434), horizontal: Vec3A(17.777756, 0.0, 0.0), vertical: Vec3A(0.0, 9.999988, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: Some(Vec4(0.0, 0.0, -1.0, 3.9133058)), far: Some(Vec4(0.0, 0.0, 1.0, 9995.986)), planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: None +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 640, height: 360, region: PixelRect { x0: 0, y0: 0, x1: 640, y1: 360 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 12.700017, aperture: [25.4, 25.4], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 5.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/cornellbox.usda"], invisible_overrides: Some(0) } +layer: $DIR/cornellbox.usda +warning: Warning { code: AssetUnsupportedByHost, kind: Skipped, count: 1, prims: [], message: "No asset loader: environment map $DIR/sky_gradient.exr ignored — the dome falls back to its uniform colour. Use Scene::from_usd_with_assets to supply one." } +warning: Warning { code: MaterialFallbackDefault, kind: Skipped, count: 1, prims: ["/scene/Looks/initialShadingGroup"], message: "Material /scene/Looks/initialShadingGroup has no surface shader — using default grey OpenPBR" } +lights: 1 +light 0: dome name Some("/scene/Sky") lpe None pmf 1.0 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 5 geometries, PrimitiveBreakdown { triangles: 822, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 2 } top level, PrimitiveBreakdown { triangles: 1582, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 2 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 4.0 motion [] pieces all=10:88b22fc3345d5b05 camera=10:88b22fc3345d5b05 shadow=10:88b22fc3345d5b05 indirect=10:88b22fc3345d5b05 +geom 1: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.2 motion [] pieces all=760:c2b60a75c52c78b9 camera=760:c2b60a75c52c78b9 shadow=760:c2b60a75c52c78b9 indirect=760:c2b60a75c52c78b9 +geom 2: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=12:94a297badef437e1 camera=12:94a297badef437e1 shadow=12:94a297badef437e1 indirect=12:94a297badef437e1 +geom 3: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.25 motion [] pieces all=800:4a8c9f44d777e131 camera=800:4a8c9f44d777e131 shadow=800:4a8c9f44d777e131 indirect=800:4a8c9f44d777e131 +geom 4: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.3585339 motion [] pieces all=760:2344ecf63e12c441 camera=760:2344ecf63e12c441 shadow=760:2344ecf63e12c441 indirect=760:2344ecf63e12c441 +provenance material /scene/Looks/initialShadingGroup: MaterialOrigin { slots: [0, 1, 2, 3, 4], displaced: false } +provenance light /scene/Sky: LightOrigin { index: 0, geoms: 0..0 } +provenance geometry 0..1: /scene/pCube1 +provenance geometry 1..2: /scene/pSphere1 +provenance geometry 2..3: /scene/pCube2 +provenance geometry 3..4: /scene/pTorus1 +provenance geometry 4..5: /scene/pSphere2 +provenance mesh: MeshOrigin { geom_id: 0, slot: 0, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 1, slot: 1, baked: false, moving: false } +provenance mesh: MeshOrigin { geom_id: 2, slot: 2, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 3, slot: 3, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 4, slot: 1, baked: false, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 12343188411137242430, n_points: 8, n_indices: 20, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 1: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 17119738035130870988, n_points: 382, n_indices: 1560, n_uvs: None, smooth: false, material: 0 }), placements: 2, shared: false, displaced: false } +provenance mesh slot 2: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 1739488954094729910, n_points: 8, n_indices: 24, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 3: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 6096447469814747168, n_points: 400, n_indices: 1600, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/scene/camera1"), cameras: ["/scene/camera1"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/scene/camera1"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/cornellbox_usda-563fb301d9f1f469-3.image b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-563fb301d9f1f469-3.image new file mode 100644 index 000000000..ba4884437 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-563fb301d9f1f469-3.image @@ -0,0 +1 @@ +640x360 16spp clamp-off 52a1a46f3a46d230 diff --git a/crates/crust-core/tests/data/import_baselines/cornellbox_usda-563fb301d9f1f469-4.digest b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-563fb301d9f1f469-4.digest new file mode 100644 index 000000000..0e859a952 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-563fb301d9f1f469-4.digest @@ -0,0 +1,40 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/scene/camera1") +camera: Camera { origin: Vec3A(0.0074343784, 1.9913422, 4.0133057), lower_left_corner: Vec3A(-8.881443, -3.0086517, -0.98669434), horizontal: Vec3A(17.777756, 0.0, 0.0), vertical: Vec3A(0.0, 9.999988, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: Some(Vec4(0.0, 0.0, -1.0, 3.9133058)), far: Some(Vec4(0.0, 0.0, 1.0, 9995.986)), planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: None +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 640, height: 360, region: PixelRect { x0: 0, y0: 0, x1: 640, y1: 360 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 12.700017, aperture: [25.4, 25.4], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 5.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/cornellbox.usda"], invisible_overrides: Some(0) } +layer: $DIR/cornellbox.usda +warning: Warning { code: AssetUnsupportedByHost, kind: Skipped, count: 1, prims: [], message: "No asset loader: environment map $DIR/sky_gradient.exr ignored — the dome falls back to its uniform colour. Use Scene::from_usd_with_assets to supply one." } +warning: Warning { code: MaterialFallbackDefault, kind: Skipped, count: 1, prims: ["/scene/Looks/initialShadingGroup"], message: "Material /scene/Looks/initialShadingGroup has no surface shader — using default grey OpenPBR" } +lights: 1 +light 0: dome name Some("/scene/Sky") lpe None pmf 1.0 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 5 geometries, PrimitiveBreakdown { triangles: 822, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 2 } top level, PrimitiveBreakdown { triangles: 1582, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 2 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 4.0 motion [] pieces all=10:88b22fc3345d5b05 camera=10:88b22fc3345d5b05 shadow=10:88b22fc3345d5b05 indirect=10:88b22fc3345d5b05 +geom 1: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.2 motion [] pieces all=760:c2b60a75c52c78b9 camera=760:c2b60a75c52c78b9 shadow=760:c2b60a75c52c78b9 indirect=760:c2b60a75c52c78b9 +geom 2: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=12:94a297badef437e1 camera=12:94a297badef437e1 shadow=12:94a297badef437e1 indirect=12:94a297badef437e1 +geom 3: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.25 motion [] pieces all=800:4a8c9f44d777e131 camera=800:4a8c9f44d777e131 shadow=800:4a8c9f44d777e131 indirect=800:4a8c9f44d777e131 +geom 4: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.3585339 motion [] pieces all=760:2344ecf63e12c441 camera=760:2344ecf63e12c441 shadow=760:2344ecf63e12c441 indirect=760:2344ecf63e12c441 +provenance material /scene/Looks/initialShadingGroup: MaterialOrigin { slots: [0, 1, 2, 3, 4], displaced: false } +provenance light /scene/Sky: LightOrigin { index: 0, geoms: 0..0 } +provenance geometry 0..1: /scene/pCube1 +provenance geometry 1..2: /scene/pSphere1 +provenance geometry 2..3: /scene/pCube2 +provenance geometry 3..4: /scene/pTorus1 +provenance geometry 4..5: /scene/pSphere2 +provenance mesh: MeshOrigin { geom_id: 0, slot: 0, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 1, slot: 1, baked: false, moving: false } +provenance mesh: MeshOrigin { geom_id: 2, slot: 2, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 3, slot: 3, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 4, slot: 1, baked: false, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 12343188411137242430, n_points: 8, n_indices: 20, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 1: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 17119738035130870988, n_points: 382, n_indices: 1560, n_uvs: None, smooth: false, material: 0 }), placements: 2, shared: false, displaced: false } +provenance mesh slot 2: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 1739488954094729910, n_points: 8, n_indices: 24, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 3: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 6096447469814747168, n_points: 400, n_indices: 1600, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/scene/camera1"), cameras: ["/scene/camera1"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/scene/camera1"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/cornellbox_usda-563fb301d9f1f469-4.image b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-563fb301d9f1f469-4.image new file mode 100644 index 000000000..ba4884437 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-563fb301d9f1f469-4.image @@ -0,0 +1 @@ +640x360 16spp clamp-off 52a1a46f3a46d230 diff --git a/crates/crust-core/tests/data/import_baselines/cornellbox_usda-563fb301d9f1f469-5.digest b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-563fb301d9f1f469-5.digest new file mode 100644 index 000000000..0e859a952 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-563fb301d9f1f469-5.digest @@ -0,0 +1,40 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/scene/camera1") +camera: Camera { origin: Vec3A(0.0074343784, 1.9913422, 4.0133057), lower_left_corner: Vec3A(-8.881443, -3.0086517, -0.98669434), horizontal: Vec3A(17.777756, 0.0, 0.0), vertical: Vec3A(0.0, 9.999988, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: Some(Vec4(0.0, 0.0, -1.0, 3.9133058)), far: Some(Vec4(0.0, 0.0, 1.0, 9995.986)), planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: None +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 640, height: 360, region: PixelRect { x0: 0, y0: 0, x1: 640, y1: 360 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 12.700017, aperture: [25.4, 25.4], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 5.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/cornellbox.usda"], invisible_overrides: Some(0) } +layer: $DIR/cornellbox.usda +warning: Warning { code: AssetUnsupportedByHost, kind: Skipped, count: 1, prims: [], message: "No asset loader: environment map $DIR/sky_gradient.exr ignored — the dome falls back to its uniform colour. Use Scene::from_usd_with_assets to supply one." } +warning: Warning { code: MaterialFallbackDefault, kind: Skipped, count: 1, prims: ["/scene/Looks/initialShadingGroup"], message: "Material /scene/Looks/initialShadingGroup has no surface shader — using default grey OpenPBR" } +lights: 1 +light 0: dome name Some("/scene/Sky") lpe None pmf 1.0 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 5 geometries, PrimitiveBreakdown { triangles: 822, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 2 } top level, PrimitiveBreakdown { triangles: 1582, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 2 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 4.0 motion [] pieces all=10:88b22fc3345d5b05 camera=10:88b22fc3345d5b05 shadow=10:88b22fc3345d5b05 indirect=10:88b22fc3345d5b05 +geom 1: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.2 motion [] pieces all=760:c2b60a75c52c78b9 camera=760:c2b60a75c52c78b9 shadow=760:c2b60a75c52c78b9 indirect=760:c2b60a75c52c78b9 +geom 2: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=12:94a297badef437e1 camera=12:94a297badef437e1 shadow=12:94a297badef437e1 indirect=12:94a297badef437e1 +geom 3: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.25 motion [] pieces all=800:4a8c9f44d777e131 camera=800:4a8c9f44d777e131 shadow=800:4a8c9f44d777e131 indirect=800:4a8c9f44d777e131 +geom 4: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.3585339 motion [] pieces all=760:2344ecf63e12c441 camera=760:2344ecf63e12c441 shadow=760:2344ecf63e12c441 indirect=760:2344ecf63e12c441 +provenance material /scene/Looks/initialShadingGroup: MaterialOrigin { slots: [0, 1, 2, 3, 4], displaced: false } +provenance light /scene/Sky: LightOrigin { index: 0, geoms: 0..0 } +provenance geometry 0..1: /scene/pCube1 +provenance geometry 1..2: /scene/pSphere1 +provenance geometry 2..3: /scene/pCube2 +provenance geometry 3..4: /scene/pTorus1 +provenance geometry 4..5: /scene/pSphere2 +provenance mesh: MeshOrigin { geom_id: 0, slot: 0, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 1, slot: 1, baked: false, moving: false } +provenance mesh: MeshOrigin { geom_id: 2, slot: 2, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 3, slot: 3, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 4, slot: 1, baked: false, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 12343188411137242430, n_points: 8, n_indices: 20, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 1: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 17119738035130870988, n_points: 382, n_indices: 1560, n_uvs: None, smooth: false, material: 0 }), placements: 2, shared: false, displaced: false } +provenance mesh slot 2: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 1739488954094729910, n_points: 8, n_indices: 24, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 3: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 6096447469814747168, n_points: 400, n_indices: 1600, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/scene/camera1"), cameras: ["/scene/camera1"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/scene/camera1"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/cornellbox_usda-563fb301d9f1f469-5.image b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-563fb301d9f1f469-5.image new file mode 100644 index 000000000..ba4884437 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-563fb301d9f1f469-5.image @@ -0,0 +1 @@ +640x360 16spp clamp-off 52a1a46f3a46d230 diff --git a/crates/crust-core/tests/data/import_baselines/cornellbox_usda-563fb301d9f1f469-6.digest b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-563fb301d9f1f469-6.digest new file mode 100644 index 000000000..0e859a952 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-563fb301d9f1f469-6.digest @@ -0,0 +1,40 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/scene/camera1") +camera: Camera { origin: Vec3A(0.0074343784, 1.9913422, 4.0133057), lower_left_corner: Vec3A(-8.881443, -3.0086517, -0.98669434), horizontal: Vec3A(17.777756, 0.0, 0.0), vertical: Vec3A(0.0, 9.999988, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: Some(Vec4(0.0, 0.0, -1.0, 3.9133058)), far: Some(Vec4(0.0, 0.0, 1.0, 9995.986)), planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: None +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 640, height: 360, region: PixelRect { x0: 0, y0: 0, x1: 640, y1: 360 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 12.700017, aperture: [25.4, 25.4], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 5.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/cornellbox.usda"], invisible_overrides: Some(0) } +layer: $DIR/cornellbox.usda +warning: Warning { code: AssetUnsupportedByHost, kind: Skipped, count: 1, prims: [], message: "No asset loader: environment map $DIR/sky_gradient.exr ignored — the dome falls back to its uniform colour. Use Scene::from_usd_with_assets to supply one." } +warning: Warning { code: MaterialFallbackDefault, kind: Skipped, count: 1, prims: ["/scene/Looks/initialShadingGroup"], message: "Material /scene/Looks/initialShadingGroup has no surface shader — using default grey OpenPBR" } +lights: 1 +light 0: dome name Some("/scene/Sky") lpe None pmf 1.0 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 5 geometries, PrimitiveBreakdown { triangles: 822, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 2 } top level, PrimitiveBreakdown { triangles: 1582, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 2 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 4.0 motion [] pieces all=10:88b22fc3345d5b05 camera=10:88b22fc3345d5b05 shadow=10:88b22fc3345d5b05 indirect=10:88b22fc3345d5b05 +geom 1: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.2 motion [] pieces all=760:c2b60a75c52c78b9 camera=760:c2b60a75c52c78b9 shadow=760:c2b60a75c52c78b9 indirect=760:c2b60a75c52c78b9 +geom 2: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=12:94a297badef437e1 camera=12:94a297badef437e1 shadow=12:94a297badef437e1 indirect=12:94a297badef437e1 +geom 3: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.25 motion [] pieces all=800:4a8c9f44d777e131 camera=800:4a8c9f44d777e131 shadow=800:4a8c9f44d777e131 indirect=800:4a8c9f44d777e131 +geom 4: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.3585339 motion [] pieces all=760:2344ecf63e12c441 camera=760:2344ecf63e12c441 shadow=760:2344ecf63e12c441 indirect=760:2344ecf63e12c441 +provenance material /scene/Looks/initialShadingGroup: MaterialOrigin { slots: [0, 1, 2, 3, 4], displaced: false } +provenance light /scene/Sky: LightOrigin { index: 0, geoms: 0..0 } +provenance geometry 0..1: /scene/pCube1 +provenance geometry 1..2: /scene/pSphere1 +provenance geometry 2..3: /scene/pCube2 +provenance geometry 3..4: /scene/pTorus1 +provenance geometry 4..5: /scene/pSphere2 +provenance mesh: MeshOrigin { geom_id: 0, slot: 0, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 1, slot: 1, baked: false, moving: false } +provenance mesh: MeshOrigin { geom_id: 2, slot: 2, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 3, slot: 3, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 4, slot: 1, baked: false, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 12343188411137242430, n_points: 8, n_indices: 20, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 1: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 17119738035130870988, n_points: 382, n_indices: 1560, n_uvs: None, smooth: false, material: 0 }), placements: 2, shared: false, displaced: false } +provenance mesh slot 2: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 1739488954094729910, n_points: 8, n_indices: 24, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 3: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 6096447469814747168, n_points: 400, n_indices: 1600, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/scene/camera1"), cameras: ["/scene/camera1"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/scene/camera1"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/cornellbox_usda-563fb301d9f1f469-6.image b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-563fb301d9f1f469-6.image new file mode 100644 index 000000000..ba4884437 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-563fb301d9f1f469-6.image @@ -0,0 +1 @@ +640x360 16spp clamp-off 52a1a46f3a46d230 diff --git a/crates/crust-core/tests/data/import_baselines/cornellbox_usda-563fb301d9f1f469-7.digest b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-563fb301d9f1f469-7.digest new file mode 100644 index 000000000..0e859a952 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-563fb301d9f1f469-7.digest @@ -0,0 +1,40 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/scene/camera1") +camera: Camera { origin: Vec3A(0.0074343784, 1.9913422, 4.0133057), lower_left_corner: Vec3A(-8.881443, -3.0086517, -0.98669434), horizontal: Vec3A(17.777756, 0.0, 0.0), vertical: Vec3A(0.0, 9.999988, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: Some(Vec4(0.0, 0.0, -1.0, 3.9133058)), far: Some(Vec4(0.0, 0.0, 1.0, 9995.986)), planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: None +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 640, height: 360, region: PixelRect { x0: 0, y0: 0, x1: 640, y1: 360 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 12.700017, aperture: [25.4, 25.4], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 5.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/cornellbox.usda"], invisible_overrides: Some(0) } +layer: $DIR/cornellbox.usda +warning: Warning { code: AssetUnsupportedByHost, kind: Skipped, count: 1, prims: [], message: "No asset loader: environment map $DIR/sky_gradient.exr ignored — the dome falls back to its uniform colour. Use Scene::from_usd_with_assets to supply one." } +warning: Warning { code: MaterialFallbackDefault, kind: Skipped, count: 1, prims: ["/scene/Looks/initialShadingGroup"], message: "Material /scene/Looks/initialShadingGroup has no surface shader — using default grey OpenPBR" } +lights: 1 +light 0: dome name Some("/scene/Sky") lpe None pmf 1.0 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 5 geometries, PrimitiveBreakdown { triangles: 822, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 2 } top level, PrimitiveBreakdown { triangles: 1582, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 2 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 4.0 motion [] pieces all=10:88b22fc3345d5b05 camera=10:88b22fc3345d5b05 shadow=10:88b22fc3345d5b05 indirect=10:88b22fc3345d5b05 +geom 1: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.2 motion [] pieces all=760:c2b60a75c52c78b9 camera=760:c2b60a75c52c78b9 shadow=760:c2b60a75c52c78b9 indirect=760:c2b60a75c52c78b9 +geom 2: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=12:94a297badef437e1 camera=12:94a297badef437e1 shadow=12:94a297badef437e1 indirect=12:94a297badef437e1 +geom 3: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.25 motion [] pieces all=800:4a8c9f44d777e131 camera=800:4a8c9f44d777e131 shadow=800:4a8c9f44d777e131 indirect=800:4a8c9f44d777e131 +geom 4: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.3585339 motion [] pieces all=760:2344ecf63e12c441 camera=760:2344ecf63e12c441 shadow=760:2344ecf63e12c441 indirect=760:2344ecf63e12c441 +provenance material /scene/Looks/initialShadingGroup: MaterialOrigin { slots: [0, 1, 2, 3, 4], displaced: false } +provenance light /scene/Sky: LightOrigin { index: 0, geoms: 0..0 } +provenance geometry 0..1: /scene/pCube1 +provenance geometry 1..2: /scene/pSphere1 +provenance geometry 2..3: /scene/pCube2 +provenance geometry 3..4: /scene/pTorus1 +provenance geometry 4..5: /scene/pSphere2 +provenance mesh: MeshOrigin { geom_id: 0, slot: 0, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 1, slot: 1, baked: false, moving: false } +provenance mesh: MeshOrigin { geom_id: 2, slot: 2, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 3, slot: 3, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 4, slot: 1, baked: false, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 12343188411137242430, n_points: 8, n_indices: 20, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 1: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 17119738035130870988, n_points: 382, n_indices: 1560, n_uvs: None, smooth: false, material: 0 }), placements: 2, shared: false, displaced: false } +provenance mesh slot 2: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 1739488954094729910, n_points: 8, n_indices: 24, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 3: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 6096447469814747168, n_points: 400, n_indices: 1600, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/scene/camera1"), cameras: ["/scene/camera1"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/scene/camera1"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/cornellbox_usda-563fb301d9f1f469-7.image b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-563fb301d9f1f469-7.image new file mode 100644 index 000000000..ba4884437 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-563fb301d9f1f469-7.image @@ -0,0 +1 @@ +640x360 16spp clamp-off 52a1a46f3a46d230 diff --git a/crates/crust-core/tests/data/import_baselines/cornellbox_usda-563fb301d9f1f469-8.digest b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-563fb301d9f1f469-8.digest new file mode 100644 index 000000000..0e859a952 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-563fb301d9f1f469-8.digest @@ -0,0 +1,40 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/scene/camera1") +camera: Camera { origin: Vec3A(0.0074343784, 1.9913422, 4.0133057), lower_left_corner: Vec3A(-8.881443, -3.0086517, -0.98669434), horizontal: Vec3A(17.777756, 0.0, 0.0), vertical: Vec3A(0.0, 9.999988, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: Some(Vec4(0.0, 0.0, -1.0, 3.9133058)), far: Some(Vec4(0.0, 0.0, 1.0, 9995.986)), planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: None +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 640, height: 360, region: PixelRect { x0: 0, y0: 0, x1: 640, y1: 360 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 12.700017, aperture: [25.4, 25.4], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 5.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/cornellbox.usda"], invisible_overrides: Some(0) } +layer: $DIR/cornellbox.usda +warning: Warning { code: AssetUnsupportedByHost, kind: Skipped, count: 1, prims: [], message: "No asset loader: environment map $DIR/sky_gradient.exr ignored — the dome falls back to its uniform colour. Use Scene::from_usd_with_assets to supply one." } +warning: Warning { code: MaterialFallbackDefault, kind: Skipped, count: 1, prims: ["/scene/Looks/initialShadingGroup"], message: "Material /scene/Looks/initialShadingGroup has no surface shader — using default grey OpenPBR" } +lights: 1 +light 0: dome name Some("/scene/Sky") lpe None pmf 1.0 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 5 geometries, PrimitiveBreakdown { triangles: 822, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 2 } top level, PrimitiveBreakdown { triangles: 1582, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 2 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 4.0 motion [] pieces all=10:88b22fc3345d5b05 camera=10:88b22fc3345d5b05 shadow=10:88b22fc3345d5b05 indirect=10:88b22fc3345d5b05 +geom 1: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.2 motion [] pieces all=760:c2b60a75c52c78b9 camera=760:c2b60a75c52c78b9 shadow=760:c2b60a75c52c78b9 indirect=760:c2b60a75c52c78b9 +geom 2: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=12:94a297badef437e1 camera=12:94a297badef437e1 shadow=12:94a297badef437e1 indirect=12:94a297badef437e1 +geom 3: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.25 motion [] pieces all=800:4a8c9f44d777e131 camera=800:4a8c9f44d777e131 shadow=800:4a8c9f44d777e131 indirect=800:4a8c9f44d777e131 +geom 4: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.3585339 motion [] pieces all=760:2344ecf63e12c441 camera=760:2344ecf63e12c441 shadow=760:2344ecf63e12c441 indirect=760:2344ecf63e12c441 +provenance material /scene/Looks/initialShadingGroup: MaterialOrigin { slots: [0, 1, 2, 3, 4], displaced: false } +provenance light /scene/Sky: LightOrigin { index: 0, geoms: 0..0 } +provenance geometry 0..1: /scene/pCube1 +provenance geometry 1..2: /scene/pSphere1 +provenance geometry 2..3: /scene/pCube2 +provenance geometry 3..4: /scene/pTorus1 +provenance geometry 4..5: /scene/pSphere2 +provenance mesh: MeshOrigin { geom_id: 0, slot: 0, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 1, slot: 1, baked: false, moving: false } +provenance mesh: MeshOrigin { geom_id: 2, slot: 2, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 3, slot: 3, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 4, slot: 1, baked: false, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 12343188411137242430, n_points: 8, n_indices: 20, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 1: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 17119738035130870988, n_points: 382, n_indices: 1560, n_uvs: None, smooth: false, material: 0 }), placements: 2, shared: false, displaced: false } +provenance mesh slot 2: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 1739488954094729910, n_points: 8, n_indices: 24, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 3: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 6096447469814747168, n_points: 400, n_indices: 1600, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/scene/camera1"), cameras: ["/scene/camera1"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/scene/camera1"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/cornellbox_usda-563fb301d9f1f469-8.image b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-563fb301d9f1f469-8.image new file mode 100644 index 000000000..ba4884437 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-563fb301d9f1f469-8.image @@ -0,0 +1 @@ +640x360 16spp clamp-off 52a1a46f3a46d230 diff --git a/crates/crust-core/tests/data/import_baselines/cornellbox_usda-563fb301d9f1f469-9.digest b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-563fb301d9f1f469-9.digest new file mode 100644 index 000000000..0e859a952 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-563fb301d9f1f469-9.digest @@ -0,0 +1,40 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/scene/camera1") +camera: Camera { origin: Vec3A(0.0074343784, 1.9913422, 4.0133057), lower_left_corner: Vec3A(-8.881443, -3.0086517, -0.98669434), horizontal: Vec3A(17.777756, 0.0, 0.0), vertical: Vec3A(0.0, 9.999988, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: Some(Vec4(0.0, 0.0, -1.0, 3.9133058)), far: Some(Vec4(0.0, 0.0, 1.0, 9995.986)), planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: None +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 640, height: 360, region: PixelRect { x0: 0, y0: 0, x1: 640, y1: 360 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 12.700017, aperture: [25.4, 25.4], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 5.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/cornellbox.usda"], invisible_overrides: Some(0) } +layer: $DIR/cornellbox.usda +warning: Warning { code: AssetUnsupportedByHost, kind: Skipped, count: 1, prims: [], message: "No asset loader: environment map $DIR/sky_gradient.exr ignored — the dome falls back to its uniform colour. Use Scene::from_usd_with_assets to supply one." } +warning: Warning { code: MaterialFallbackDefault, kind: Skipped, count: 1, prims: ["/scene/Looks/initialShadingGroup"], message: "Material /scene/Looks/initialShadingGroup has no surface shader — using default grey OpenPBR" } +lights: 1 +light 0: dome name Some("/scene/Sky") lpe None pmf 1.0 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 5 geometries, PrimitiveBreakdown { triangles: 822, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 2 } top level, PrimitiveBreakdown { triangles: 1582, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 2 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 4.0 motion [] pieces all=10:88b22fc3345d5b05 camera=10:88b22fc3345d5b05 shadow=10:88b22fc3345d5b05 indirect=10:88b22fc3345d5b05 +geom 1: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.2 motion [] pieces all=760:c2b60a75c52c78b9 camera=760:c2b60a75c52c78b9 shadow=760:c2b60a75c52c78b9 indirect=760:c2b60a75c52c78b9 +geom 2: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=12:94a297badef437e1 camera=12:94a297badef437e1 shadow=12:94a297badef437e1 indirect=12:94a297badef437e1 +geom 3: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.25 motion [] pieces all=800:4a8c9f44d777e131 camera=800:4a8c9f44d777e131 shadow=800:4a8c9f44d777e131 indirect=800:4a8c9f44d777e131 +geom 4: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.3585339 motion [] pieces all=760:2344ecf63e12c441 camera=760:2344ecf63e12c441 shadow=760:2344ecf63e12c441 indirect=760:2344ecf63e12c441 +provenance material /scene/Looks/initialShadingGroup: MaterialOrigin { slots: [0, 1, 2, 3, 4], displaced: false } +provenance light /scene/Sky: LightOrigin { index: 0, geoms: 0..0 } +provenance geometry 0..1: /scene/pCube1 +provenance geometry 1..2: /scene/pSphere1 +provenance geometry 2..3: /scene/pCube2 +provenance geometry 3..4: /scene/pTorus1 +provenance geometry 4..5: /scene/pSphere2 +provenance mesh: MeshOrigin { geom_id: 0, slot: 0, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 1, slot: 1, baked: false, moving: false } +provenance mesh: MeshOrigin { geom_id: 2, slot: 2, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 3, slot: 3, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 4, slot: 1, baked: false, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 12343188411137242430, n_points: 8, n_indices: 20, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 1: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 17119738035130870988, n_points: 382, n_indices: 1560, n_uvs: None, smooth: false, material: 0 }), placements: 2, shared: false, displaced: false } +provenance mesh slot 2: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 1739488954094729910, n_points: 8, n_indices: 24, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 3: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 6096447469814747168, n_points: 400, n_indices: 1600, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/scene/camera1"), cameras: ["/scene/camera1"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/scene/camera1"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/cornellbox_usda-563fb301d9f1f469-9.image b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-563fb301d9f1f469-9.image new file mode 100644 index 000000000..ba4884437 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-563fb301d9f1f469-9.image @@ -0,0 +1 @@ +640x360 16spp clamp-off 52a1a46f3a46d230 diff --git a/crates/crust-core/tests/data/import_baselines/cornellbox_usda-5d064faa753e9d7b-1.digest b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-5d064faa753e9d7b-1.digest new file mode 100644 index 000000000..1d5ab0cab --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-5d064faa753e9d7b-1.digest @@ -0,0 +1,39 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/scene/camera1") +camera: Camera { origin: Vec3A(0.0074343784, 1.9913422, 4.0133057), lower_left_corner: Vec3A(-8.881443, -3.0086517, -0.98669434), horizontal: Vec3A(17.777756, 0.0, 0.0), vertical: Vec3A(0.0, 9.999988, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: Some(Vec4(0.0, 0.0, -1.0, 3.9133058)), far: Some(Vec4(0.0, 0.0, 1.0, 9995.986)), planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: None +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 640, height: 360, region: PixelRect { x0: 0, y0: 0, x1: 640, y1: 360 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 12.700017, aperture: [25.4, 25.4], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 5.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/cornellbox.usda"], invisible_overrides: Some(0) } +layer: $DIR/cornellbox.usda +warning: Warning { code: MaterialFallbackDefault, kind: Skipped, count: 1, prims: ["/scene/Looks/initialShadingGroup"], message: "Material /scene/Looks/initialShadingGroup has no surface shader — using default grey OpenPBR" } +lights: 1 +light 0: dome name Some("/scene/Sky") lpe None pmf 1.0 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 5 geometries, PrimitiveBreakdown { triangles: 822, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 2 } top level, PrimitiveBreakdown { triangles: 1582, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 2 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 4.0 motion [] pieces all=10:88b22fc3345d5b05 camera=10:88b22fc3345d5b05 shadow=10:88b22fc3345d5b05 indirect=10:88b22fc3345d5b05 +geom 1: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.2 motion [] pieces all=760:c2b60a75c52c78b9 camera=760:c2b60a75c52c78b9 shadow=760:c2b60a75c52c78b9 indirect=760:c2b60a75c52c78b9 +geom 2: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=12:94a297badef437e1 camera=12:94a297badef437e1 shadow=12:94a297badef437e1 indirect=12:94a297badef437e1 +geom 3: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.25 motion [] pieces all=800:4a8c9f44d777e131 camera=800:4a8c9f44d777e131 shadow=800:4a8c9f44d777e131 indirect=800:4a8c9f44d777e131 +geom 4: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.3585339 motion [] pieces all=760:2344ecf63e12c441 camera=760:2344ecf63e12c441 shadow=760:2344ecf63e12c441 indirect=760:2344ecf63e12c441 +provenance material /scene/Looks/initialShadingGroup: MaterialOrigin { slots: [0, 1, 2, 3, 4], displaced: false } +provenance light /scene/Sky: LightOrigin { index: 0, geoms: 0..0 } +provenance geometry 0..1: /scene/pCube1 +provenance geometry 1..2: /scene/pSphere1 +provenance geometry 2..3: /scene/pCube2 +provenance geometry 3..4: /scene/pTorus1 +provenance geometry 4..5: /scene/pSphere2 +provenance mesh: MeshOrigin { geom_id: 0, slot: 0, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 1, slot: 1, baked: false, moving: false } +provenance mesh: MeshOrigin { geom_id: 2, slot: 2, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 3, slot: 3, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 4, slot: 1, baked: false, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 12343188411137242430, n_points: 8, n_indices: 20, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 1: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 17119738035130870988, n_points: 382, n_indices: 1560, n_uvs: None, smooth: false, material: 0 }), placements: 2, shared: false, displaced: false } +provenance mesh slot 2: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 1739488954094729910, n_points: 8, n_indices: 24, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 3: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 6096447469814747168, n_points: 400, n_indices: 1600, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: true, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/scene/camera1"), cameras: ["/scene/camera1"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/scene/camera1"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/cornellbox_usda-5d064faa753e9d7b-1.image b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-5d064faa753e9d7b-1.image new file mode 100644 index 000000000..7172edbfe --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-5d064faa753e9d7b-1.image @@ -0,0 +1 @@ +640x360 16spp clamp-off 64ede904b11bab22 diff --git a/crates/crust-core/tests/data/import_baselines/cornellbox_usda-5e1b400d2f0d70bc-1.digest b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-5e1b400d2f0d70bc-1.digest new file mode 100644 index 000000000..0e859a952 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-5e1b400d2f0d70bc-1.digest @@ -0,0 +1,40 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/scene/camera1") +camera: Camera { origin: Vec3A(0.0074343784, 1.9913422, 4.0133057), lower_left_corner: Vec3A(-8.881443, -3.0086517, -0.98669434), horizontal: Vec3A(17.777756, 0.0, 0.0), vertical: Vec3A(0.0, 9.999988, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: Some(Vec4(0.0, 0.0, -1.0, 3.9133058)), far: Some(Vec4(0.0, 0.0, 1.0, 9995.986)), planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: None +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 640, height: 360, region: PixelRect { x0: 0, y0: 0, x1: 640, y1: 360 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 12.700017, aperture: [25.4, 25.4], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 5.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/cornellbox.usda"], invisible_overrides: Some(0) } +layer: $DIR/cornellbox.usda +warning: Warning { code: AssetUnsupportedByHost, kind: Skipped, count: 1, prims: [], message: "No asset loader: environment map $DIR/sky_gradient.exr ignored — the dome falls back to its uniform colour. Use Scene::from_usd_with_assets to supply one." } +warning: Warning { code: MaterialFallbackDefault, kind: Skipped, count: 1, prims: ["/scene/Looks/initialShadingGroup"], message: "Material /scene/Looks/initialShadingGroup has no surface shader — using default grey OpenPBR" } +lights: 1 +light 0: dome name Some("/scene/Sky") lpe None pmf 1.0 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 5 geometries, PrimitiveBreakdown { triangles: 822, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 2 } top level, PrimitiveBreakdown { triangles: 1582, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 2 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 4.0 motion [] pieces all=10:88b22fc3345d5b05 camera=10:88b22fc3345d5b05 shadow=10:88b22fc3345d5b05 indirect=10:88b22fc3345d5b05 +geom 1: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.2 motion [] pieces all=760:c2b60a75c52c78b9 camera=760:c2b60a75c52c78b9 shadow=760:c2b60a75c52c78b9 indirect=760:c2b60a75c52c78b9 +geom 2: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=12:94a297badef437e1 camera=12:94a297badef437e1 shadow=12:94a297badef437e1 indirect=12:94a297badef437e1 +geom 3: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.25 motion [] pieces all=800:4a8c9f44d777e131 camera=800:4a8c9f44d777e131 shadow=800:4a8c9f44d777e131 indirect=800:4a8c9f44d777e131 +geom 4: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.3585339 motion [] pieces all=760:2344ecf63e12c441 camera=760:2344ecf63e12c441 shadow=760:2344ecf63e12c441 indirect=760:2344ecf63e12c441 +provenance material /scene/Looks/initialShadingGroup: MaterialOrigin { slots: [0, 1, 2, 3, 4], displaced: false } +provenance light /scene/Sky: LightOrigin { index: 0, geoms: 0..0 } +provenance geometry 0..1: /scene/pCube1 +provenance geometry 1..2: /scene/pSphere1 +provenance geometry 2..3: /scene/pCube2 +provenance geometry 3..4: /scene/pTorus1 +provenance geometry 4..5: /scene/pSphere2 +provenance mesh: MeshOrigin { geom_id: 0, slot: 0, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 1, slot: 1, baked: false, moving: false } +provenance mesh: MeshOrigin { geom_id: 2, slot: 2, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 3, slot: 3, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 4, slot: 1, baked: false, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 12343188411137242430, n_points: 8, n_indices: 20, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 1: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 17119738035130870988, n_points: 382, n_indices: 1560, n_uvs: None, smooth: false, material: 0 }), placements: 2, shared: false, displaced: false } +provenance mesh slot 2: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 1739488954094729910, n_points: 8, n_indices: 24, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 3: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 6096447469814747168, n_points: 400, n_indices: 1600, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/scene/camera1"), cameras: ["/scene/camera1"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/scene/camera1"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/cornellbox_usda-5e1b400d2f0d70bc-1.image b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-5e1b400d2f0d70bc-1.image new file mode 100644 index 000000000..ba4884437 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-5e1b400d2f0d70bc-1.image @@ -0,0 +1 @@ +640x360 16spp clamp-off 52a1a46f3a46d230 diff --git a/crates/crust-core/tests/data/import_baselines/cornellbox_usda-5ff835103ecfad3e-1.digest b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-5ff835103ecfad3e-1.digest new file mode 100644 index 000000000..1d5ab0cab --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-5ff835103ecfad3e-1.digest @@ -0,0 +1,39 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/scene/camera1") +camera: Camera { origin: Vec3A(0.0074343784, 1.9913422, 4.0133057), lower_left_corner: Vec3A(-8.881443, -3.0086517, -0.98669434), horizontal: Vec3A(17.777756, 0.0, 0.0), vertical: Vec3A(0.0, 9.999988, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: Some(Vec4(0.0, 0.0, -1.0, 3.9133058)), far: Some(Vec4(0.0, 0.0, 1.0, 9995.986)), planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: None +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 640, height: 360, region: PixelRect { x0: 0, y0: 0, x1: 640, y1: 360 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 12.700017, aperture: [25.4, 25.4], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 5.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/cornellbox.usda"], invisible_overrides: Some(0) } +layer: $DIR/cornellbox.usda +warning: Warning { code: MaterialFallbackDefault, kind: Skipped, count: 1, prims: ["/scene/Looks/initialShadingGroup"], message: "Material /scene/Looks/initialShadingGroup has no surface shader — using default grey OpenPBR" } +lights: 1 +light 0: dome name Some("/scene/Sky") lpe None pmf 1.0 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 5 geometries, PrimitiveBreakdown { triangles: 822, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 2 } top level, PrimitiveBreakdown { triangles: 1582, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 2 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 4.0 motion [] pieces all=10:88b22fc3345d5b05 camera=10:88b22fc3345d5b05 shadow=10:88b22fc3345d5b05 indirect=10:88b22fc3345d5b05 +geom 1: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.2 motion [] pieces all=760:c2b60a75c52c78b9 camera=760:c2b60a75c52c78b9 shadow=760:c2b60a75c52c78b9 indirect=760:c2b60a75c52c78b9 +geom 2: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=12:94a297badef437e1 camera=12:94a297badef437e1 shadow=12:94a297badef437e1 indirect=12:94a297badef437e1 +geom 3: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.25 motion [] pieces all=800:4a8c9f44d777e131 camera=800:4a8c9f44d777e131 shadow=800:4a8c9f44d777e131 indirect=800:4a8c9f44d777e131 +geom 4: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.3585339 motion [] pieces all=760:2344ecf63e12c441 camera=760:2344ecf63e12c441 shadow=760:2344ecf63e12c441 indirect=760:2344ecf63e12c441 +provenance material /scene/Looks/initialShadingGroup: MaterialOrigin { slots: [0, 1, 2, 3, 4], displaced: false } +provenance light /scene/Sky: LightOrigin { index: 0, geoms: 0..0 } +provenance geometry 0..1: /scene/pCube1 +provenance geometry 1..2: /scene/pSphere1 +provenance geometry 2..3: /scene/pCube2 +provenance geometry 3..4: /scene/pTorus1 +provenance geometry 4..5: /scene/pSphere2 +provenance mesh: MeshOrigin { geom_id: 0, slot: 0, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 1, slot: 1, baked: false, moving: false } +provenance mesh: MeshOrigin { geom_id: 2, slot: 2, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 3, slot: 3, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 4, slot: 1, baked: false, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 12343188411137242430, n_points: 8, n_indices: 20, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 1: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 17119738035130870988, n_points: 382, n_indices: 1560, n_uvs: None, smooth: false, material: 0 }), placements: 2, shared: false, displaced: false } +provenance mesh slot 2: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 1739488954094729910, n_points: 8, n_indices: 24, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 3: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 6096447469814747168, n_points: 400, n_indices: 1600, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: true, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/scene/camera1"), cameras: ["/scene/camera1"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/scene/camera1"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/cornellbox_usda-5ff835103ecfad3e-1.image b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-5ff835103ecfad3e-1.image new file mode 100644 index 000000000..7172edbfe --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-5ff835103ecfad3e-1.image @@ -0,0 +1 @@ +640x360 16spp clamp-off 64ede904b11bab22 diff --git a/crates/crust-core/tests/data/import_baselines/cornellbox_usda-61a13a775605a0ce-1.digest b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-61a13a775605a0ce-1.digest new file mode 100644 index 000000000..1d5ab0cab --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-61a13a775605a0ce-1.digest @@ -0,0 +1,39 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/scene/camera1") +camera: Camera { origin: Vec3A(0.0074343784, 1.9913422, 4.0133057), lower_left_corner: Vec3A(-8.881443, -3.0086517, -0.98669434), horizontal: Vec3A(17.777756, 0.0, 0.0), vertical: Vec3A(0.0, 9.999988, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: Some(Vec4(0.0, 0.0, -1.0, 3.9133058)), far: Some(Vec4(0.0, 0.0, 1.0, 9995.986)), planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: None +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 640, height: 360, region: PixelRect { x0: 0, y0: 0, x1: 640, y1: 360 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 12.700017, aperture: [25.4, 25.4], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 5.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/cornellbox.usda"], invisible_overrides: Some(0) } +layer: $DIR/cornellbox.usda +warning: Warning { code: MaterialFallbackDefault, kind: Skipped, count: 1, prims: ["/scene/Looks/initialShadingGroup"], message: "Material /scene/Looks/initialShadingGroup has no surface shader — using default grey OpenPBR" } +lights: 1 +light 0: dome name Some("/scene/Sky") lpe None pmf 1.0 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 5 geometries, PrimitiveBreakdown { triangles: 822, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 2 } top level, PrimitiveBreakdown { triangles: 1582, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 2 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 4.0 motion [] pieces all=10:88b22fc3345d5b05 camera=10:88b22fc3345d5b05 shadow=10:88b22fc3345d5b05 indirect=10:88b22fc3345d5b05 +geom 1: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.2 motion [] pieces all=760:c2b60a75c52c78b9 camera=760:c2b60a75c52c78b9 shadow=760:c2b60a75c52c78b9 indirect=760:c2b60a75c52c78b9 +geom 2: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=12:94a297badef437e1 camera=12:94a297badef437e1 shadow=12:94a297badef437e1 indirect=12:94a297badef437e1 +geom 3: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.25 motion [] pieces all=800:4a8c9f44d777e131 camera=800:4a8c9f44d777e131 shadow=800:4a8c9f44d777e131 indirect=800:4a8c9f44d777e131 +geom 4: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.3585339 motion [] pieces all=760:2344ecf63e12c441 camera=760:2344ecf63e12c441 shadow=760:2344ecf63e12c441 indirect=760:2344ecf63e12c441 +provenance material /scene/Looks/initialShadingGroup: MaterialOrigin { slots: [0, 1, 2, 3, 4], displaced: false } +provenance light /scene/Sky: LightOrigin { index: 0, geoms: 0..0 } +provenance geometry 0..1: /scene/pCube1 +provenance geometry 1..2: /scene/pSphere1 +provenance geometry 2..3: /scene/pCube2 +provenance geometry 3..4: /scene/pTorus1 +provenance geometry 4..5: /scene/pSphere2 +provenance mesh: MeshOrigin { geom_id: 0, slot: 0, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 1, slot: 1, baked: false, moving: false } +provenance mesh: MeshOrigin { geom_id: 2, slot: 2, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 3, slot: 3, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 4, slot: 1, baked: false, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 12343188411137242430, n_points: 8, n_indices: 20, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 1: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 17119738035130870988, n_points: 382, n_indices: 1560, n_uvs: None, smooth: false, material: 0 }), placements: 2, shared: false, displaced: false } +provenance mesh slot 2: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 1739488954094729910, n_points: 8, n_indices: 24, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 3: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 6096447469814747168, n_points: 400, n_indices: 1600, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: true, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/scene/camera1"), cameras: ["/scene/camera1"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/scene/camera1"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/cornellbox_usda-61a13a775605a0ce-1.image b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-61a13a775605a0ce-1.image new file mode 100644 index 000000000..7172edbfe --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-61a13a775605a0ce-1.image @@ -0,0 +1 @@ +640x360 16spp clamp-off 64ede904b11bab22 diff --git a/crates/crust-core/tests/data/import_baselines/cornellbox_usda-61e87f520a6a2dff-1.digest b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-61e87f520a6a2dff-1.digest new file mode 100644 index 000000000..1d5ab0cab --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-61e87f520a6a2dff-1.digest @@ -0,0 +1,39 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/scene/camera1") +camera: Camera { origin: Vec3A(0.0074343784, 1.9913422, 4.0133057), lower_left_corner: Vec3A(-8.881443, -3.0086517, -0.98669434), horizontal: Vec3A(17.777756, 0.0, 0.0), vertical: Vec3A(0.0, 9.999988, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: Some(Vec4(0.0, 0.0, -1.0, 3.9133058)), far: Some(Vec4(0.0, 0.0, 1.0, 9995.986)), planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: None +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 640, height: 360, region: PixelRect { x0: 0, y0: 0, x1: 640, y1: 360 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 12.700017, aperture: [25.4, 25.4], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 5.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/cornellbox.usda"], invisible_overrides: Some(0) } +layer: $DIR/cornellbox.usda +warning: Warning { code: MaterialFallbackDefault, kind: Skipped, count: 1, prims: ["/scene/Looks/initialShadingGroup"], message: "Material /scene/Looks/initialShadingGroup has no surface shader — using default grey OpenPBR" } +lights: 1 +light 0: dome name Some("/scene/Sky") lpe None pmf 1.0 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 5 geometries, PrimitiveBreakdown { triangles: 822, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 2 } top level, PrimitiveBreakdown { triangles: 1582, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 2 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 4.0 motion [] pieces all=10:88b22fc3345d5b05 camera=10:88b22fc3345d5b05 shadow=10:88b22fc3345d5b05 indirect=10:88b22fc3345d5b05 +geom 1: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.2 motion [] pieces all=760:c2b60a75c52c78b9 camera=760:c2b60a75c52c78b9 shadow=760:c2b60a75c52c78b9 indirect=760:c2b60a75c52c78b9 +geom 2: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=12:94a297badef437e1 camera=12:94a297badef437e1 shadow=12:94a297badef437e1 indirect=12:94a297badef437e1 +geom 3: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.25 motion [] pieces all=800:4a8c9f44d777e131 camera=800:4a8c9f44d777e131 shadow=800:4a8c9f44d777e131 indirect=800:4a8c9f44d777e131 +geom 4: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.3585339 motion [] pieces all=760:2344ecf63e12c441 camera=760:2344ecf63e12c441 shadow=760:2344ecf63e12c441 indirect=760:2344ecf63e12c441 +provenance material /scene/Looks/initialShadingGroup: MaterialOrigin { slots: [0, 1, 2, 3, 4], displaced: false } +provenance light /scene/Sky: LightOrigin { index: 0, geoms: 0..0 } +provenance geometry 0..1: /scene/pCube1 +provenance geometry 1..2: /scene/pSphere1 +provenance geometry 2..3: /scene/pCube2 +provenance geometry 3..4: /scene/pTorus1 +provenance geometry 4..5: /scene/pSphere2 +provenance mesh: MeshOrigin { geom_id: 0, slot: 0, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 1, slot: 1, baked: false, moving: false } +provenance mesh: MeshOrigin { geom_id: 2, slot: 2, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 3, slot: 3, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 4, slot: 1, baked: false, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 12343188411137242430, n_points: 8, n_indices: 20, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 1: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 17119738035130870988, n_points: 382, n_indices: 1560, n_uvs: None, smooth: false, material: 0 }), placements: 2, shared: false, displaced: false } +provenance mesh slot 2: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 1739488954094729910, n_points: 8, n_indices: 24, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 3: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 6096447469814747168, n_points: 400, n_indices: 1600, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: true, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/scene/camera1"), cameras: ["/scene/camera1"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/scene/camera1"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/cornellbox_usda-61e87f520a6a2dff-1.image b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-61e87f520a6a2dff-1.image new file mode 100644 index 000000000..7172edbfe --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-61e87f520a6a2dff-1.image @@ -0,0 +1 @@ +640x360 16spp clamp-off 64ede904b11bab22 diff --git a/crates/crust-core/tests/data/import_baselines/cornellbox_usda-63b1f6980e443f71-1.digest b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-63b1f6980e443f71-1.digest new file mode 100644 index 000000000..1d5ab0cab --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-63b1f6980e443f71-1.digest @@ -0,0 +1,39 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/scene/camera1") +camera: Camera { origin: Vec3A(0.0074343784, 1.9913422, 4.0133057), lower_left_corner: Vec3A(-8.881443, -3.0086517, -0.98669434), horizontal: Vec3A(17.777756, 0.0, 0.0), vertical: Vec3A(0.0, 9.999988, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: Some(Vec4(0.0, 0.0, -1.0, 3.9133058)), far: Some(Vec4(0.0, 0.0, 1.0, 9995.986)), planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: None +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 640, height: 360, region: PixelRect { x0: 0, y0: 0, x1: 640, y1: 360 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 12.700017, aperture: [25.4, 25.4], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 5.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/cornellbox.usda"], invisible_overrides: Some(0) } +layer: $DIR/cornellbox.usda +warning: Warning { code: MaterialFallbackDefault, kind: Skipped, count: 1, prims: ["/scene/Looks/initialShadingGroup"], message: "Material /scene/Looks/initialShadingGroup has no surface shader — using default grey OpenPBR" } +lights: 1 +light 0: dome name Some("/scene/Sky") lpe None pmf 1.0 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 5 geometries, PrimitiveBreakdown { triangles: 822, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 2 } top level, PrimitiveBreakdown { triangles: 1582, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 2 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 4.0 motion [] pieces all=10:88b22fc3345d5b05 camera=10:88b22fc3345d5b05 shadow=10:88b22fc3345d5b05 indirect=10:88b22fc3345d5b05 +geom 1: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.2 motion [] pieces all=760:c2b60a75c52c78b9 camera=760:c2b60a75c52c78b9 shadow=760:c2b60a75c52c78b9 indirect=760:c2b60a75c52c78b9 +geom 2: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=12:94a297badef437e1 camera=12:94a297badef437e1 shadow=12:94a297badef437e1 indirect=12:94a297badef437e1 +geom 3: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.25 motion [] pieces all=800:4a8c9f44d777e131 camera=800:4a8c9f44d777e131 shadow=800:4a8c9f44d777e131 indirect=800:4a8c9f44d777e131 +geom 4: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.3585339 motion [] pieces all=760:2344ecf63e12c441 camera=760:2344ecf63e12c441 shadow=760:2344ecf63e12c441 indirect=760:2344ecf63e12c441 +provenance material /scene/Looks/initialShadingGroup: MaterialOrigin { slots: [0, 1, 2, 3, 4], displaced: false } +provenance light /scene/Sky: LightOrigin { index: 0, geoms: 0..0 } +provenance geometry 0..1: /scene/pCube1 +provenance geometry 1..2: /scene/pSphere1 +provenance geometry 2..3: /scene/pCube2 +provenance geometry 3..4: /scene/pTorus1 +provenance geometry 4..5: /scene/pSphere2 +provenance mesh: MeshOrigin { geom_id: 0, slot: 0, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 1, slot: 1, baked: false, moving: false } +provenance mesh: MeshOrigin { geom_id: 2, slot: 2, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 3, slot: 3, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 4, slot: 1, baked: false, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 12343188411137242430, n_points: 8, n_indices: 20, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 1: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 17119738035130870988, n_points: 382, n_indices: 1560, n_uvs: None, smooth: false, material: 0 }), placements: 2, shared: false, displaced: false } +provenance mesh slot 2: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 1739488954094729910, n_points: 8, n_indices: 24, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 3: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 6096447469814747168, n_points: 400, n_indices: 1600, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: true, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/scene/camera1"), cameras: ["/scene/camera1"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/scene/camera1"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/cornellbox_usda-63b1f6980e443f71-1.image b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-63b1f6980e443f71-1.image new file mode 100644 index 000000000..7172edbfe --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-63b1f6980e443f71-1.image @@ -0,0 +1 @@ +640x360 16spp clamp-off 64ede904b11bab22 diff --git a/crates/crust-core/tests/data/import_baselines/cornellbox_usda-67753350f4f997a4-1.digest b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-67753350f4f997a4-1.digest new file mode 100644 index 000000000..46d40cedd --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-67753350f4f997a4-1.digest @@ -0,0 +1,40 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/scene/camera1") +camera: Camera { origin: Vec3A(0.0074343784, 1.9913422, 4.0133057), lower_left_corner: Vec3A(-8.881443, -3.0086517, -0.98669434), horizontal: Vec3A(17.777756, 0.0, 0.0), vertical: Vec3A(0.0, 9.999988, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: Some(Vec4(0.0, 0.0, -1.0, 3.9133058)), far: Some(Vec4(0.0, 0.0, 1.0, 9995.986)), planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: None +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 640, height: 360, region: PixelRect { x0: 0, y0: 0, x1: 640, y1: 360 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 12.700017, aperture: [25.4, 25.4], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 5.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/cornellbox.usda"], invisible_overrides: Some(0) } +layer: $DIR/cornellbox.usda +warning: Warning { code: MtlxLibraryUnreadable, kind: Skipped, count: 1, prims: [], message: "PXR_MTLX_PLUGIN_SEARCH_PATHS: $TMP/crust_check_cli/mtlx_library/lib/broken.mtlx cannot be read (malformed XML: the root node was opened but never closed) — its MaterialX node definitions are not loaded" } +warning: Warning { code: MaterialFallbackDefault, kind: Skipped, count: 1, prims: ["/scene/Looks/initialShadingGroup"], message: "Material /scene/Looks/initialShadingGroup has no surface shader — using default grey OpenPBR" } +lights: 1 +light 0: dome name Some("/scene/Sky") lpe None pmf 1.0 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 5 geometries, PrimitiveBreakdown { triangles: 822, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 2 } top level, PrimitiveBreakdown { triangles: 1582, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 2 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 4.0 motion [] pieces all=10:88b22fc3345d5b05 camera=10:88b22fc3345d5b05 shadow=10:88b22fc3345d5b05 indirect=10:88b22fc3345d5b05 +geom 1: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.2 motion [] pieces all=760:c2b60a75c52c78b9 camera=760:c2b60a75c52c78b9 shadow=760:c2b60a75c52c78b9 indirect=760:c2b60a75c52c78b9 +geom 2: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=12:94a297badef437e1 camera=12:94a297badef437e1 shadow=12:94a297badef437e1 indirect=12:94a297badef437e1 +geom 3: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.25 motion [] pieces all=800:4a8c9f44d777e131 camera=800:4a8c9f44d777e131 shadow=800:4a8c9f44d777e131 indirect=800:4a8c9f44d777e131 +geom 4: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.3585339 motion [] pieces all=760:2344ecf63e12c441 camera=760:2344ecf63e12c441 shadow=760:2344ecf63e12c441 indirect=760:2344ecf63e12c441 +provenance material /scene/Looks/initialShadingGroup: MaterialOrigin { slots: [0, 1, 2, 3, 4], displaced: false } +provenance light /scene/Sky: LightOrigin { index: 0, geoms: 0..0 } +provenance geometry 0..1: /scene/pCube1 +provenance geometry 1..2: /scene/pSphere1 +provenance geometry 2..3: /scene/pCube2 +provenance geometry 3..4: /scene/pTorus1 +provenance geometry 4..5: /scene/pSphere2 +provenance mesh: MeshOrigin { geom_id: 0, slot: 0, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 1, slot: 1, baked: false, moving: false } +provenance mesh: MeshOrigin { geom_id: 2, slot: 2, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 3, slot: 3, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 4, slot: 1, baked: false, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 12343188411137242430, n_points: 8, n_indices: 20, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 1: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 17119738035130870988, n_points: 382, n_indices: 1560, n_uvs: None, smooth: false, material: 0 }), placements: 2, shared: false, displaced: false } +provenance mesh slot 2: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 1739488954094729910, n_points: 8, n_indices: 24, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 3: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 6096447469814747168, n_points: 400, n_indices: 1600, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: true, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/scene/camera1"), cameras: ["/scene/camera1"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [NodeDef { name: "studio_mix", node: "studio_mix", inputs: [DefInput { name: "fg_color", type_name: "color3", value: Some(Val { v: [0.0, 0.0, 0.0, 0.0], arity: 3 }), text: Some("0, 0, 0") }, DefInput { name: "bg_color", type_name: "color3", value: Some(Val { v: [0.0, 0.0, 0.0, 0.0], arity: 3 }), text: Some("0, 0, 0") }, DefInput { name: "amount", type_name: "float", value: Some(Val { v: [0.5, 0.5, 0.5, 0.5], arity: 1 }), text: Some("0.5") }], outputs: [DefOutput { name: "blended", type_name: "color3" }], inherit: None, version: None, default_version: false }], by_name: {"studio_mix": 0}, impls: {"studio_mix": Implementation { name: "NG_studio_mix", nodedef: "studio_mix", nodes: [Node { category: "mix", name: "mix", type_name: "color3", inputs: [Input { name: "bg", type_name: "color3", source: Value(Val { v: [0.0, 0.0, 0.0, 0.0], arity: 1 }), colorspace: None, text: None, interface: Some("bg_color") }, Input { name: "fg", type_name: "color3", source: Value(Val { v: [0.0, 0.0, 0.0, 0.0], arity: 1 }), colorspace: None, text: None, interface: Some("fg_color") }, Input { name: "mix", type_name: "float", source: Value(Val { v: [0.0, 0.0, 0.0, 0.0], arity: 1 }), colorspace: None, text: None, interface: Some("amount") }], graph: Some("NG_studio_mix"), version: None, colorspace: None }], outputs: [ImplOutput { name: "blended", type_name: "color3", node: "mix", output: None }] }}, files: ["$TMP/crust_check_cli/mtlx_library/lib/studio/studio_nodes.mtlx"] }, shutter: ShutterKey { camera: Some("/scene/camera1"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/cornellbox_usda-67753350f4f997a4-1.image b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-67753350f4f997a4-1.image new file mode 100644 index 000000000..7172edbfe --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-67753350f4f997a4-1.image @@ -0,0 +1 @@ +640x360 16spp clamp-off 64ede904b11bab22 diff --git a/crates/crust-core/tests/data/import_baselines/cornellbox_usda-67d6afd449214b25-1.digest b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-67d6afd449214b25-1.digest new file mode 100644 index 000000000..1d5ab0cab --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-67d6afd449214b25-1.digest @@ -0,0 +1,39 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/scene/camera1") +camera: Camera { origin: Vec3A(0.0074343784, 1.9913422, 4.0133057), lower_left_corner: Vec3A(-8.881443, -3.0086517, -0.98669434), horizontal: Vec3A(17.777756, 0.0, 0.0), vertical: Vec3A(0.0, 9.999988, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: Some(Vec4(0.0, 0.0, -1.0, 3.9133058)), far: Some(Vec4(0.0, 0.0, 1.0, 9995.986)), planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: None +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 640, height: 360, region: PixelRect { x0: 0, y0: 0, x1: 640, y1: 360 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 12.700017, aperture: [25.4, 25.4], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 5.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/cornellbox.usda"], invisible_overrides: Some(0) } +layer: $DIR/cornellbox.usda +warning: Warning { code: MaterialFallbackDefault, kind: Skipped, count: 1, prims: ["/scene/Looks/initialShadingGroup"], message: "Material /scene/Looks/initialShadingGroup has no surface shader — using default grey OpenPBR" } +lights: 1 +light 0: dome name Some("/scene/Sky") lpe None pmf 1.0 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 5 geometries, PrimitiveBreakdown { triangles: 822, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 2 } top level, PrimitiveBreakdown { triangles: 1582, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 2 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 4.0 motion [] pieces all=10:88b22fc3345d5b05 camera=10:88b22fc3345d5b05 shadow=10:88b22fc3345d5b05 indirect=10:88b22fc3345d5b05 +geom 1: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.2 motion [] pieces all=760:c2b60a75c52c78b9 camera=760:c2b60a75c52c78b9 shadow=760:c2b60a75c52c78b9 indirect=760:c2b60a75c52c78b9 +geom 2: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=12:94a297badef437e1 camera=12:94a297badef437e1 shadow=12:94a297badef437e1 indirect=12:94a297badef437e1 +geom 3: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.25 motion [] pieces all=800:4a8c9f44d777e131 camera=800:4a8c9f44d777e131 shadow=800:4a8c9f44d777e131 indirect=800:4a8c9f44d777e131 +geom 4: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.3585339 motion [] pieces all=760:2344ecf63e12c441 camera=760:2344ecf63e12c441 shadow=760:2344ecf63e12c441 indirect=760:2344ecf63e12c441 +provenance material /scene/Looks/initialShadingGroup: MaterialOrigin { slots: [0, 1, 2, 3, 4], displaced: false } +provenance light /scene/Sky: LightOrigin { index: 0, geoms: 0..0 } +provenance geometry 0..1: /scene/pCube1 +provenance geometry 1..2: /scene/pSphere1 +provenance geometry 2..3: /scene/pCube2 +provenance geometry 3..4: /scene/pTorus1 +provenance geometry 4..5: /scene/pSphere2 +provenance mesh: MeshOrigin { geom_id: 0, slot: 0, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 1, slot: 1, baked: false, moving: false } +provenance mesh: MeshOrigin { geom_id: 2, slot: 2, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 3, slot: 3, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 4, slot: 1, baked: false, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 12343188411137242430, n_points: 8, n_indices: 20, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 1: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 17119738035130870988, n_points: 382, n_indices: 1560, n_uvs: None, smooth: false, material: 0 }), placements: 2, shared: false, displaced: false } +provenance mesh slot 2: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 1739488954094729910, n_points: 8, n_indices: 24, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 3: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 6096447469814747168, n_points: 400, n_indices: 1600, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: true, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/scene/camera1"), cameras: ["/scene/camera1"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/scene/camera1"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/cornellbox_usda-67d6afd449214b25-1.image b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-67d6afd449214b25-1.image new file mode 100644 index 000000000..7172edbfe --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-67d6afd449214b25-1.image @@ -0,0 +1 @@ +640x360 16spp clamp-off 64ede904b11bab22 diff --git a/crates/crust-core/tests/data/import_baselines/cornellbox_usda-7300aa94ecae6c37-1.digest b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-7300aa94ecae6c37-1.digest new file mode 100644 index 000000000..1d5ab0cab --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-7300aa94ecae6c37-1.digest @@ -0,0 +1,39 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/scene/camera1") +camera: Camera { origin: Vec3A(0.0074343784, 1.9913422, 4.0133057), lower_left_corner: Vec3A(-8.881443, -3.0086517, -0.98669434), horizontal: Vec3A(17.777756, 0.0, 0.0), vertical: Vec3A(0.0, 9.999988, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: Some(Vec4(0.0, 0.0, -1.0, 3.9133058)), far: Some(Vec4(0.0, 0.0, 1.0, 9995.986)), planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: None +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 640, height: 360, region: PixelRect { x0: 0, y0: 0, x1: 640, y1: 360 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 12.700017, aperture: [25.4, 25.4], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 5.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/cornellbox.usda"], invisible_overrides: Some(0) } +layer: $DIR/cornellbox.usda +warning: Warning { code: MaterialFallbackDefault, kind: Skipped, count: 1, prims: ["/scene/Looks/initialShadingGroup"], message: "Material /scene/Looks/initialShadingGroup has no surface shader — using default grey OpenPBR" } +lights: 1 +light 0: dome name Some("/scene/Sky") lpe None pmf 1.0 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 5 geometries, PrimitiveBreakdown { triangles: 822, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 2 } top level, PrimitiveBreakdown { triangles: 1582, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 2 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 4.0 motion [] pieces all=10:88b22fc3345d5b05 camera=10:88b22fc3345d5b05 shadow=10:88b22fc3345d5b05 indirect=10:88b22fc3345d5b05 +geom 1: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.2 motion [] pieces all=760:c2b60a75c52c78b9 camera=760:c2b60a75c52c78b9 shadow=760:c2b60a75c52c78b9 indirect=760:c2b60a75c52c78b9 +geom 2: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=12:94a297badef437e1 camera=12:94a297badef437e1 shadow=12:94a297badef437e1 indirect=12:94a297badef437e1 +geom 3: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.25 motion [] pieces all=800:4a8c9f44d777e131 camera=800:4a8c9f44d777e131 shadow=800:4a8c9f44d777e131 indirect=800:4a8c9f44d777e131 +geom 4: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.3585339 motion [] pieces all=760:2344ecf63e12c441 camera=760:2344ecf63e12c441 shadow=760:2344ecf63e12c441 indirect=760:2344ecf63e12c441 +provenance material /scene/Looks/initialShadingGroup: MaterialOrigin { slots: [0, 1, 2, 3, 4], displaced: false } +provenance light /scene/Sky: LightOrigin { index: 0, geoms: 0..0 } +provenance geometry 0..1: /scene/pCube1 +provenance geometry 1..2: /scene/pSphere1 +provenance geometry 2..3: /scene/pCube2 +provenance geometry 3..4: /scene/pTorus1 +provenance geometry 4..5: /scene/pSphere2 +provenance mesh: MeshOrigin { geom_id: 0, slot: 0, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 1, slot: 1, baked: false, moving: false } +provenance mesh: MeshOrigin { geom_id: 2, slot: 2, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 3, slot: 3, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 4, slot: 1, baked: false, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 12343188411137242430, n_points: 8, n_indices: 20, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 1: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 17119738035130870988, n_points: 382, n_indices: 1560, n_uvs: None, smooth: false, material: 0 }), placements: 2, shared: false, displaced: false } +provenance mesh slot 2: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 1739488954094729910, n_points: 8, n_indices: 24, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 3: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 6096447469814747168, n_points: 400, n_indices: 1600, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: true, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/scene/camera1"), cameras: ["/scene/camera1"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/scene/camera1"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/cornellbox_usda-7300aa94ecae6c37-1.image b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-7300aa94ecae6c37-1.image new file mode 100644 index 000000000..7172edbfe --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-7300aa94ecae6c37-1.image @@ -0,0 +1 @@ +640x360 16spp clamp-off 64ede904b11bab22 diff --git a/crates/crust-core/tests/data/import_baselines/cornellbox_usda-7478515f32354718-1.digest b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-7478515f32354718-1.digest new file mode 100644 index 000000000..0e859a952 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-7478515f32354718-1.digest @@ -0,0 +1,40 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/scene/camera1") +camera: Camera { origin: Vec3A(0.0074343784, 1.9913422, 4.0133057), lower_left_corner: Vec3A(-8.881443, -3.0086517, -0.98669434), horizontal: Vec3A(17.777756, 0.0, 0.0), vertical: Vec3A(0.0, 9.999988, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: Some(Vec4(0.0, 0.0, -1.0, 3.9133058)), far: Some(Vec4(0.0, 0.0, 1.0, 9995.986)), planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: None +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 640, height: 360, region: PixelRect { x0: 0, y0: 0, x1: 640, y1: 360 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 12.700017, aperture: [25.4, 25.4], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 5.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/cornellbox.usda"], invisible_overrides: Some(0) } +layer: $DIR/cornellbox.usda +warning: Warning { code: AssetUnsupportedByHost, kind: Skipped, count: 1, prims: [], message: "No asset loader: environment map $DIR/sky_gradient.exr ignored — the dome falls back to its uniform colour. Use Scene::from_usd_with_assets to supply one." } +warning: Warning { code: MaterialFallbackDefault, kind: Skipped, count: 1, prims: ["/scene/Looks/initialShadingGroup"], message: "Material /scene/Looks/initialShadingGroup has no surface shader — using default grey OpenPBR" } +lights: 1 +light 0: dome name Some("/scene/Sky") lpe None pmf 1.0 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 5 geometries, PrimitiveBreakdown { triangles: 822, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 2 } top level, PrimitiveBreakdown { triangles: 1582, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 2 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 4.0 motion [] pieces all=10:88b22fc3345d5b05 camera=10:88b22fc3345d5b05 shadow=10:88b22fc3345d5b05 indirect=10:88b22fc3345d5b05 +geom 1: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.2 motion [] pieces all=760:c2b60a75c52c78b9 camera=760:c2b60a75c52c78b9 shadow=760:c2b60a75c52c78b9 indirect=760:c2b60a75c52c78b9 +geom 2: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=12:94a297badef437e1 camera=12:94a297badef437e1 shadow=12:94a297badef437e1 indirect=12:94a297badef437e1 +geom 3: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.25 motion [] pieces all=800:4a8c9f44d777e131 camera=800:4a8c9f44d777e131 shadow=800:4a8c9f44d777e131 indirect=800:4a8c9f44d777e131 +geom 4: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.3585339 motion [] pieces all=760:2344ecf63e12c441 camera=760:2344ecf63e12c441 shadow=760:2344ecf63e12c441 indirect=760:2344ecf63e12c441 +provenance material /scene/Looks/initialShadingGroup: MaterialOrigin { slots: [0, 1, 2, 3, 4], displaced: false } +provenance light /scene/Sky: LightOrigin { index: 0, geoms: 0..0 } +provenance geometry 0..1: /scene/pCube1 +provenance geometry 1..2: /scene/pSphere1 +provenance geometry 2..3: /scene/pCube2 +provenance geometry 3..4: /scene/pTorus1 +provenance geometry 4..5: /scene/pSphere2 +provenance mesh: MeshOrigin { geom_id: 0, slot: 0, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 1, slot: 1, baked: false, moving: false } +provenance mesh: MeshOrigin { geom_id: 2, slot: 2, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 3, slot: 3, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 4, slot: 1, baked: false, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 12343188411137242430, n_points: 8, n_indices: 20, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 1: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 17119738035130870988, n_points: 382, n_indices: 1560, n_uvs: None, smooth: false, material: 0 }), placements: 2, shared: false, displaced: false } +provenance mesh slot 2: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 1739488954094729910, n_points: 8, n_indices: 24, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 3: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 6096447469814747168, n_points: 400, n_indices: 1600, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/scene/camera1"), cameras: ["/scene/camera1"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/scene/camera1"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/cornellbox_usda-7478515f32354718-1.image b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-7478515f32354718-1.image new file mode 100644 index 000000000..ba4884437 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-7478515f32354718-1.image @@ -0,0 +1 @@ +640x360 16spp clamp-off 52a1a46f3a46d230 diff --git a/crates/crust-core/tests/data/import_baselines/cornellbox_usda-7ba56e4f79d4195f-1.digest b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-7ba56e4f79d4195f-1.digest new file mode 100644 index 000000000..0e859a952 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-7ba56e4f79d4195f-1.digest @@ -0,0 +1,40 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/scene/camera1") +camera: Camera { origin: Vec3A(0.0074343784, 1.9913422, 4.0133057), lower_left_corner: Vec3A(-8.881443, -3.0086517, -0.98669434), horizontal: Vec3A(17.777756, 0.0, 0.0), vertical: Vec3A(0.0, 9.999988, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: Some(Vec4(0.0, 0.0, -1.0, 3.9133058)), far: Some(Vec4(0.0, 0.0, 1.0, 9995.986)), planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: None +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 640, height: 360, region: PixelRect { x0: 0, y0: 0, x1: 640, y1: 360 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 12.700017, aperture: [25.4, 25.4], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 5.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/cornellbox.usda"], invisible_overrides: Some(0) } +layer: $DIR/cornellbox.usda +warning: Warning { code: AssetUnsupportedByHost, kind: Skipped, count: 1, prims: [], message: "No asset loader: environment map $DIR/sky_gradient.exr ignored — the dome falls back to its uniform colour. Use Scene::from_usd_with_assets to supply one." } +warning: Warning { code: MaterialFallbackDefault, kind: Skipped, count: 1, prims: ["/scene/Looks/initialShadingGroup"], message: "Material /scene/Looks/initialShadingGroup has no surface shader — using default grey OpenPBR" } +lights: 1 +light 0: dome name Some("/scene/Sky") lpe None pmf 1.0 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 5 geometries, PrimitiveBreakdown { triangles: 822, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 2 } top level, PrimitiveBreakdown { triangles: 1582, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 2 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 4.0 motion [] pieces all=10:88b22fc3345d5b05 camera=10:88b22fc3345d5b05 shadow=10:88b22fc3345d5b05 indirect=10:88b22fc3345d5b05 +geom 1: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.2 motion [] pieces all=760:c2b60a75c52c78b9 camera=760:c2b60a75c52c78b9 shadow=760:c2b60a75c52c78b9 indirect=760:c2b60a75c52c78b9 +geom 2: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=12:94a297badef437e1 camera=12:94a297badef437e1 shadow=12:94a297badef437e1 indirect=12:94a297badef437e1 +geom 3: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.25 motion [] pieces all=800:4a8c9f44d777e131 camera=800:4a8c9f44d777e131 shadow=800:4a8c9f44d777e131 indirect=800:4a8c9f44d777e131 +geom 4: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.3585339 motion [] pieces all=760:2344ecf63e12c441 camera=760:2344ecf63e12c441 shadow=760:2344ecf63e12c441 indirect=760:2344ecf63e12c441 +provenance material /scene/Looks/initialShadingGroup: MaterialOrigin { slots: [0, 1, 2, 3, 4], displaced: false } +provenance light /scene/Sky: LightOrigin { index: 0, geoms: 0..0 } +provenance geometry 0..1: /scene/pCube1 +provenance geometry 1..2: /scene/pSphere1 +provenance geometry 2..3: /scene/pCube2 +provenance geometry 3..4: /scene/pTorus1 +provenance geometry 4..5: /scene/pSphere2 +provenance mesh: MeshOrigin { geom_id: 0, slot: 0, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 1, slot: 1, baked: false, moving: false } +provenance mesh: MeshOrigin { geom_id: 2, slot: 2, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 3, slot: 3, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 4, slot: 1, baked: false, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 12343188411137242430, n_points: 8, n_indices: 20, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 1: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 17119738035130870988, n_points: 382, n_indices: 1560, n_uvs: None, smooth: false, material: 0 }), placements: 2, shared: false, displaced: false } +provenance mesh slot 2: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 1739488954094729910, n_points: 8, n_indices: 24, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 3: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 6096447469814747168, n_points: 400, n_indices: 1600, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/scene/camera1"), cameras: ["/scene/camera1"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/scene/camera1"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/cornellbox_usda-7ba56e4f79d4195f-1.image b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-7ba56e4f79d4195f-1.image new file mode 100644 index 000000000..ba4884437 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-7ba56e4f79d4195f-1.image @@ -0,0 +1 @@ +640x360 16spp clamp-off 52a1a46f3a46d230 diff --git a/crates/crust-core/tests/data/import_baselines/cornellbox_usda-7e55fcb3620f4663-1.digest b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-7e55fcb3620f4663-1.digest new file mode 100644 index 000000000..0e859a952 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-7e55fcb3620f4663-1.digest @@ -0,0 +1,40 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/scene/camera1") +camera: Camera { origin: Vec3A(0.0074343784, 1.9913422, 4.0133057), lower_left_corner: Vec3A(-8.881443, -3.0086517, -0.98669434), horizontal: Vec3A(17.777756, 0.0, 0.0), vertical: Vec3A(0.0, 9.999988, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: Some(Vec4(0.0, 0.0, -1.0, 3.9133058)), far: Some(Vec4(0.0, 0.0, 1.0, 9995.986)), planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: None +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 640, height: 360, region: PixelRect { x0: 0, y0: 0, x1: 640, y1: 360 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 12.700017, aperture: [25.4, 25.4], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 5.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/cornellbox.usda"], invisible_overrides: Some(0) } +layer: $DIR/cornellbox.usda +warning: Warning { code: AssetUnsupportedByHost, kind: Skipped, count: 1, prims: [], message: "No asset loader: environment map $DIR/sky_gradient.exr ignored — the dome falls back to its uniform colour. Use Scene::from_usd_with_assets to supply one." } +warning: Warning { code: MaterialFallbackDefault, kind: Skipped, count: 1, prims: ["/scene/Looks/initialShadingGroup"], message: "Material /scene/Looks/initialShadingGroup has no surface shader — using default grey OpenPBR" } +lights: 1 +light 0: dome name Some("/scene/Sky") lpe None pmf 1.0 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 5 geometries, PrimitiveBreakdown { triangles: 822, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 2 } top level, PrimitiveBreakdown { triangles: 1582, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 2 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 4.0 motion [] pieces all=10:88b22fc3345d5b05 camera=10:88b22fc3345d5b05 shadow=10:88b22fc3345d5b05 indirect=10:88b22fc3345d5b05 +geom 1: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.2 motion [] pieces all=760:c2b60a75c52c78b9 camera=760:c2b60a75c52c78b9 shadow=760:c2b60a75c52c78b9 indirect=760:c2b60a75c52c78b9 +geom 2: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=12:94a297badef437e1 camera=12:94a297badef437e1 shadow=12:94a297badef437e1 indirect=12:94a297badef437e1 +geom 3: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.25 motion [] pieces all=800:4a8c9f44d777e131 camera=800:4a8c9f44d777e131 shadow=800:4a8c9f44d777e131 indirect=800:4a8c9f44d777e131 +geom 4: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.3585339 motion [] pieces all=760:2344ecf63e12c441 camera=760:2344ecf63e12c441 shadow=760:2344ecf63e12c441 indirect=760:2344ecf63e12c441 +provenance material /scene/Looks/initialShadingGroup: MaterialOrigin { slots: [0, 1, 2, 3, 4], displaced: false } +provenance light /scene/Sky: LightOrigin { index: 0, geoms: 0..0 } +provenance geometry 0..1: /scene/pCube1 +provenance geometry 1..2: /scene/pSphere1 +provenance geometry 2..3: /scene/pCube2 +provenance geometry 3..4: /scene/pTorus1 +provenance geometry 4..5: /scene/pSphere2 +provenance mesh: MeshOrigin { geom_id: 0, slot: 0, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 1, slot: 1, baked: false, moving: false } +provenance mesh: MeshOrigin { geom_id: 2, slot: 2, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 3, slot: 3, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 4, slot: 1, baked: false, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 12343188411137242430, n_points: 8, n_indices: 20, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 1: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 17119738035130870988, n_points: 382, n_indices: 1560, n_uvs: None, smooth: false, material: 0 }), placements: 2, shared: false, displaced: false } +provenance mesh slot 2: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 1739488954094729910, n_points: 8, n_indices: 24, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 3: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 6096447469814747168, n_points: 400, n_indices: 1600, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/scene/camera1"), cameras: ["/scene/camera1"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/scene/camera1"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/cornellbox_usda-7e55fcb3620f4663-1.image b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-7e55fcb3620f4663-1.image new file mode 100644 index 000000000..ba4884437 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-7e55fcb3620f4663-1.image @@ -0,0 +1 @@ +640x360 16spp clamp-off 52a1a46f3a46d230 diff --git a/crates/crust-core/tests/data/import_baselines/cornellbox_usda-7f63dd70a33e2183-1.digest b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-7f63dd70a33e2183-1.digest new file mode 100644 index 000000000..0e859a952 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-7f63dd70a33e2183-1.digest @@ -0,0 +1,40 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/scene/camera1") +camera: Camera { origin: Vec3A(0.0074343784, 1.9913422, 4.0133057), lower_left_corner: Vec3A(-8.881443, -3.0086517, -0.98669434), horizontal: Vec3A(17.777756, 0.0, 0.0), vertical: Vec3A(0.0, 9.999988, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: Some(Vec4(0.0, 0.0, -1.0, 3.9133058)), far: Some(Vec4(0.0, 0.0, 1.0, 9995.986)), planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: None +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 640, height: 360, region: PixelRect { x0: 0, y0: 0, x1: 640, y1: 360 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 12.700017, aperture: [25.4, 25.4], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 5.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/cornellbox.usda"], invisible_overrides: Some(0) } +layer: $DIR/cornellbox.usda +warning: Warning { code: AssetUnsupportedByHost, kind: Skipped, count: 1, prims: [], message: "No asset loader: environment map $DIR/sky_gradient.exr ignored — the dome falls back to its uniform colour. Use Scene::from_usd_with_assets to supply one." } +warning: Warning { code: MaterialFallbackDefault, kind: Skipped, count: 1, prims: ["/scene/Looks/initialShadingGroup"], message: "Material /scene/Looks/initialShadingGroup has no surface shader — using default grey OpenPBR" } +lights: 1 +light 0: dome name Some("/scene/Sky") lpe None pmf 1.0 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 5 geometries, PrimitiveBreakdown { triangles: 822, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 2 } top level, PrimitiveBreakdown { triangles: 1582, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 2 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 4.0 motion [] pieces all=10:88b22fc3345d5b05 camera=10:88b22fc3345d5b05 shadow=10:88b22fc3345d5b05 indirect=10:88b22fc3345d5b05 +geom 1: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.2 motion [] pieces all=760:c2b60a75c52c78b9 camera=760:c2b60a75c52c78b9 shadow=760:c2b60a75c52c78b9 indirect=760:c2b60a75c52c78b9 +geom 2: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=12:94a297badef437e1 camera=12:94a297badef437e1 shadow=12:94a297badef437e1 indirect=12:94a297badef437e1 +geom 3: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.25 motion [] pieces all=800:4a8c9f44d777e131 camera=800:4a8c9f44d777e131 shadow=800:4a8c9f44d777e131 indirect=800:4a8c9f44d777e131 +geom 4: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.3585339 motion [] pieces all=760:2344ecf63e12c441 camera=760:2344ecf63e12c441 shadow=760:2344ecf63e12c441 indirect=760:2344ecf63e12c441 +provenance material /scene/Looks/initialShadingGroup: MaterialOrigin { slots: [0, 1, 2, 3, 4], displaced: false } +provenance light /scene/Sky: LightOrigin { index: 0, geoms: 0..0 } +provenance geometry 0..1: /scene/pCube1 +provenance geometry 1..2: /scene/pSphere1 +provenance geometry 2..3: /scene/pCube2 +provenance geometry 3..4: /scene/pTorus1 +provenance geometry 4..5: /scene/pSphere2 +provenance mesh: MeshOrigin { geom_id: 0, slot: 0, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 1, slot: 1, baked: false, moving: false } +provenance mesh: MeshOrigin { geom_id: 2, slot: 2, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 3, slot: 3, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 4, slot: 1, baked: false, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 12343188411137242430, n_points: 8, n_indices: 20, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 1: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 17119738035130870988, n_points: 382, n_indices: 1560, n_uvs: None, smooth: false, material: 0 }), placements: 2, shared: false, displaced: false } +provenance mesh slot 2: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 1739488954094729910, n_points: 8, n_indices: 24, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 3: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 6096447469814747168, n_points: 400, n_indices: 1600, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/scene/camera1"), cameras: ["/scene/camera1"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/scene/camera1"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/cornellbox_usda-7f63dd70a33e2183-1.image b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-7f63dd70a33e2183-1.image new file mode 100644 index 000000000..ba4884437 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-7f63dd70a33e2183-1.image @@ -0,0 +1 @@ +640x360 16spp clamp-off 52a1a46f3a46d230 diff --git a/crates/crust-core/tests/data/import_baselines/cornellbox_usda-816ed2710215c157-1.digest b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-816ed2710215c157-1.digest new file mode 100644 index 000000000..0e859a952 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-816ed2710215c157-1.digest @@ -0,0 +1,40 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/scene/camera1") +camera: Camera { origin: Vec3A(0.0074343784, 1.9913422, 4.0133057), lower_left_corner: Vec3A(-8.881443, -3.0086517, -0.98669434), horizontal: Vec3A(17.777756, 0.0, 0.0), vertical: Vec3A(0.0, 9.999988, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: Some(Vec4(0.0, 0.0, -1.0, 3.9133058)), far: Some(Vec4(0.0, 0.0, 1.0, 9995.986)), planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: None +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 640, height: 360, region: PixelRect { x0: 0, y0: 0, x1: 640, y1: 360 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 12.700017, aperture: [25.4, 25.4], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 5.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/cornellbox.usda"], invisible_overrides: Some(0) } +layer: $DIR/cornellbox.usda +warning: Warning { code: AssetUnsupportedByHost, kind: Skipped, count: 1, prims: [], message: "No asset loader: environment map $DIR/sky_gradient.exr ignored — the dome falls back to its uniform colour. Use Scene::from_usd_with_assets to supply one." } +warning: Warning { code: MaterialFallbackDefault, kind: Skipped, count: 1, prims: ["/scene/Looks/initialShadingGroup"], message: "Material /scene/Looks/initialShadingGroup has no surface shader — using default grey OpenPBR" } +lights: 1 +light 0: dome name Some("/scene/Sky") lpe None pmf 1.0 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 5 geometries, PrimitiveBreakdown { triangles: 822, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 2 } top level, PrimitiveBreakdown { triangles: 1582, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 2 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 4.0 motion [] pieces all=10:88b22fc3345d5b05 camera=10:88b22fc3345d5b05 shadow=10:88b22fc3345d5b05 indirect=10:88b22fc3345d5b05 +geom 1: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.2 motion [] pieces all=760:c2b60a75c52c78b9 camera=760:c2b60a75c52c78b9 shadow=760:c2b60a75c52c78b9 indirect=760:c2b60a75c52c78b9 +geom 2: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=12:94a297badef437e1 camera=12:94a297badef437e1 shadow=12:94a297badef437e1 indirect=12:94a297badef437e1 +geom 3: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.25 motion [] pieces all=800:4a8c9f44d777e131 camera=800:4a8c9f44d777e131 shadow=800:4a8c9f44d777e131 indirect=800:4a8c9f44d777e131 +geom 4: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.3585339 motion [] pieces all=760:2344ecf63e12c441 camera=760:2344ecf63e12c441 shadow=760:2344ecf63e12c441 indirect=760:2344ecf63e12c441 +provenance material /scene/Looks/initialShadingGroup: MaterialOrigin { slots: [0, 1, 2, 3, 4], displaced: false } +provenance light /scene/Sky: LightOrigin { index: 0, geoms: 0..0 } +provenance geometry 0..1: /scene/pCube1 +provenance geometry 1..2: /scene/pSphere1 +provenance geometry 2..3: /scene/pCube2 +provenance geometry 3..4: /scene/pTorus1 +provenance geometry 4..5: /scene/pSphere2 +provenance mesh: MeshOrigin { geom_id: 0, slot: 0, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 1, slot: 1, baked: false, moving: false } +provenance mesh: MeshOrigin { geom_id: 2, slot: 2, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 3, slot: 3, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 4, slot: 1, baked: false, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 12343188411137242430, n_points: 8, n_indices: 20, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 1: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 17119738035130870988, n_points: 382, n_indices: 1560, n_uvs: None, smooth: false, material: 0 }), placements: 2, shared: false, displaced: false } +provenance mesh slot 2: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 1739488954094729910, n_points: 8, n_indices: 24, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 3: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 6096447469814747168, n_points: 400, n_indices: 1600, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/scene/camera1"), cameras: ["/scene/camera1"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/scene/camera1"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/cornellbox_usda-816ed2710215c157-1.image b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-816ed2710215c157-1.image new file mode 100644 index 000000000..ba4884437 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-816ed2710215c157-1.image @@ -0,0 +1 @@ +640x360 16spp clamp-off 52a1a46f3a46d230 diff --git a/crates/crust-core/tests/data/import_baselines/cornellbox_usda-816ed2710215c157-2.digest b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-816ed2710215c157-2.digest new file mode 100644 index 000000000..0e859a952 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-816ed2710215c157-2.digest @@ -0,0 +1,40 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/scene/camera1") +camera: Camera { origin: Vec3A(0.0074343784, 1.9913422, 4.0133057), lower_left_corner: Vec3A(-8.881443, -3.0086517, -0.98669434), horizontal: Vec3A(17.777756, 0.0, 0.0), vertical: Vec3A(0.0, 9.999988, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: Some(Vec4(0.0, 0.0, -1.0, 3.9133058)), far: Some(Vec4(0.0, 0.0, 1.0, 9995.986)), planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: None +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 640, height: 360, region: PixelRect { x0: 0, y0: 0, x1: 640, y1: 360 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 12.700017, aperture: [25.4, 25.4], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 5.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/cornellbox.usda"], invisible_overrides: Some(0) } +layer: $DIR/cornellbox.usda +warning: Warning { code: AssetUnsupportedByHost, kind: Skipped, count: 1, prims: [], message: "No asset loader: environment map $DIR/sky_gradient.exr ignored — the dome falls back to its uniform colour. Use Scene::from_usd_with_assets to supply one." } +warning: Warning { code: MaterialFallbackDefault, kind: Skipped, count: 1, prims: ["/scene/Looks/initialShadingGroup"], message: "Material /scene/Looks/initialShadingGroup has no surface shader — using default grey OpenPBR" } +lights: 1 +light 0: dome name Some("/scene/Sky") lpe None pmf 1.0 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 5 geometries, PrimitiveBreakdown { triangles: 822, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 2 } top level, PrimitiveBreakdown { triangles: 1582, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 2 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 4.0 motion [] pieces all=10:88b22fc3345d5b05 camera=10:88b22fc3345d5b05 shadow=10:88b22fc3345d5b05 indirect=10:88b22fc3345d5b05 +geom 1: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.2 motion [] pieces all=760:c2b60a75c52c78b9 camera=760:c2b60a75c52c78b9 shadow=760:c2b60a75c52c78b9 indirect=760:c2b60a75c52c78b9 +geom 2: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=12:94a297badef437e1 camera=12:94a297badef437e1 shadow=12:94a297badef437e1 indirect=12:94a297badef437e1 +geom 3: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.25 motion [] pieces all=800:4a8c9f44d777e131 camera=800:4a8c9f44d777e131 shadow=800:4a8c9f44d777e131 indirect=800:4a8c9f44d777e131 +geom 4: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.3585339 motion [] pieces all=760:2344ecf63e12c441 camera=760:2344ecf63e12c441 shadow=760:2344ecf63e12c441 indirect=760:2344ecf63e12c441 +provenance material /scene/Looks/initialShadingGroup: MaterialOrigin { slots: [0, 1, 2, 3, 4], displaced: false } +provenance light /scene/Sky: LightOrigin { index: 0, geoms: 0..0 } +provenance geometry 0..1: /scene/pCube1 +provenance geometry 1..2: /scene/pSphere1 +provenance geometry 2..3: /scene/pCube2 +provenance geometry 3..4: /scene/pTorus1 +provenance geometry 4..5: /scene/pSphere2 +provenance mesh: MeshOrigin { geom_id: 0, slot: 0, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 1, slot: 1, baked: false, moving: false } +provenance mesh: MeshOrigin { geom_id: 2, slot: 2, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 3, slot: 3, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 4, slot: 1, baked: false, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 12343188411137242430, n_points: 8, n_indices: 20, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 1: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 17119738035130870988, n_points: 382, n_indices: 1560, n_uvs: None, smooth: false, material: 0 }), placements: 2, shared: false, displaced: false } +provenance mesh slot 2: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 1739488954094729910, n_points: 8, n_indices: 24, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 3: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 6096447469814747168, n_points: 400, n_indices: 1600, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/scene/camera1"), cameras: ["/scene/camera1"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/scene/camera1"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/cornellbox_usda-816ed2710215c157-2.image b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-816ed2710215c157-2.image new file mode 100644 index 000000000..ba4884437 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-816ed2710215c157-2.image @@ -0,0 +1 @@ +640x360 16spp clamp-off 52a1a46f3a46d230 diff --git a/crates/crust-core/tests/data/import_baselines/cornellbox_usda-816ed2710215c157-3.digest b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-816ed2710215c157-3.digest new file mode 100644 index 000000000..0e859a952 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-816ed2710215c157-3.digest @@ -0,0 +1,40 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/scene/camera1") +camera: Camera { origin: Vec3A(0.0074343784, 1.9913422, 4.0133057), lower_left_corner: Vec3A(-8.881443, -3.0086517, -0.98669434), horizontal: Vec3A(17.777756, 0.0, 0.0), vertical: Vec3A(0.0, 9.999988, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: Some(Vec4(0.0, 0.0, -1.0, 3.9133058)), far: Some(Vec4(0.0, 0.0, 1.0, 9995.986)), planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: None +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 640, height: 360, region: PixelRect { x0: 0, y0: 0, x1: 640, y1: 360 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 12.700017, aperture: [25.4, 25.4], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 5.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/cornellbox.usda"], invisible_overrides: Some(0) } +layer: $DIR/cornellbox.usda +warning: Warning { code: AssetUnsupportedByHost, kind: Skipped, count: 1, prims: [], message: "No asset loader: environment map $DIR/sky_gradient.exr ignored — the dome falls back to its uniform colour. Use Scene::from_usd_with_assets to supply one." } +warning: Warning { code: MaterialFallbackDefault, kind: Skipped, count: 1, prims: ["/scene/Looks/initialShadingGroup"], message: "Material /scene/Looks/initialShadingGroup has no surface shader — using default grey OpenPBR" } +lights: 1 +light 0: dome name Some("/scene/Sky") lpe None pmf 1.0 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 5 geometries, PrimitiveBreakdown { triangles: 822, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 2 } top level, PrimitiveBreakdown { triangles: 1582, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 2 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 4.0 motion [] pieces all=10:88b22fc3345d5b05 camera=10:88b22fc3345d5b05 shadow=10:88b22fc3345d5b05 indirect=10:88b22fc3345d5b05 +geom 1: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.2 motion [] pieces all=760:c2b60a75c52c78b9 camera=760:c2b60a75c52c78b9 shadow=760:c2b60a75c52c78b9 indirect=760:c2b60a75c52c78b9 +geom 2: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=12:94a297badef437e1 camera=12:94a297badef437e1 shadow=12:94a297badef437e1 indirect=12:94a297badef437e1 +geom 3: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.25 motion [] pieces all=800:4a8c9f44d777e131 camera=800:4a8c9f44d777e131 shadow=800:4a8c9f44d777e131 indirect=800:4a8c9f44d777e131 +geom 4: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.3585339 motion [] pieces all=760:2344ecf63e12c441 camera=760:2344ecf63e12c441 shadow=760:2344ecf63e12c441 indirect=760:2344ecf63e12c441 +provenance material /scene/Looks/initialShadingGroup: MaterialOrigin { slots: [0, 1, 2, 3, 4], displaced: false } +provenance light /scene/Sky: LightOrigin { index: 0, geoms: 0..0 } +provenance geometry 0..1: /scene/pCube1 +provenance geometry 1..2: /scene/pSphere1 +provenance geometry 2..3: /scene/pCube2 +provenance geometry 3..4: /scene/pTorus1 +provenance geometry 4..5: /scene/pSphere2 +provenance mesh: MeshOrigin { geom_id: 0, slot: 0, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 1, slot: 1, baked: false, moving: false } +provenance mesh: MeshOrigin { geom_id: 2, slot: 2, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 3, slot: 3, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 4, slot: 1, baked: false, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 12343188411137242430, n_points: 8, n_indices: 20, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 1: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 17119738035130870988, n_points: 382, n_indices: 1560, n_uvs: None, smooth: false, material: 0 }), placements: 2, shared: false, displaced: false } +provenance mesh slot 2: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 1739488954094729910, n_points: 8, n_indices: 24, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 3: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 6096447469814747168, n_points: 400, n_indices: 1600, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/scene/camera1"), cameras: ["/scene/camera1"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/scene/camera1"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/cornellbox_usda-816ed2710215c157-3.image b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-816ed2710215c157-3.image new file mode 100644 index 000000000..ba4884437 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-816ed2710215c157-3.image @@ -0,0 +1 @@ +640x360 16spp clamp-off 52a1a46f3a46d230 diff --git a/crates/crust-core/tests/data/import_baselines/cornellbox_usda-816ed2710215c157-4.digest b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-816ed2710215c157-4.digest new file mode 100644 index 000000000..0e859a952 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-816ed2710215c157-4.digest @@ -0,0 +1,40 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/scene/camera1") +camera: Camera { origin: Vec3A(0.0074343784, 1.9913422, 4.0133057), lower_left_corner: Vec3A(-8.881443, -3.0086517, -0.98669434), horizontal: Vec3A(17.777756, 0.0, 0.0), vertical: Vec3A(0.0, 9.999988, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: Some(Vec4(0.0, 0.0, -1.0, 3.9133058)), far: Some(Vec4(0.0, 0.0, 1.0, 9995.986)), planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: None +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 640, height: 360, region: PixelRect { x0: 0, y0: 0, x1: 640, y1: 360 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 12.700017, aperture: [25.4, 25.4], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 5.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/cornellbox.usda"], invisible_overrides: Some(0) } +layer: $DIR/cornellbox.usda +warning: Warning { code: AssetUnsupportedByHost, kind: Skipped, count: 1, prims: [], message: "No asset loader: environment map $DIR/sky_gradient.exr ignored — the dome falls back to its uniform colour. Use Scene::from_usd_with_assets to supply one." } +warning: Warning { code: MaterialFallbackDefault, kind: Skipped, count: 1, prims: ["/scene/Looks/initialShadingGroup"], message: "Material /scene/Looks/initialShadingGroup has no surface shader — using default grey OpenPBR" } +lights: 1 +light 0: dome name Some("/scene/Sky") lpe None pmf 1.0 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 5 geometries, PrimitiveBreakdown { triangles: 822, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 2 } top level, PrimitiveBreakdown { triangles: 1582, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 2 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 4.0 motion [] pieces all=10:88b22fc3345d5b05 camera=10:88b22fc3345d5b05 shadow=10:88b22fc3345d5b05 indirect=10:88b22fc3345d5b05 +geom 1: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.2 motion [] pieces all=760:c2b60a75c52c78b9 camera=760:c2b60a75c52c78b9 shadow=760:c2b60a75c52c78b9 indirect=760:c2b60a75c52c78b9 +geom 2: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=12:94a297badef437e1 camera=12:94a297badef437e1 shadow=12:94a297badef437e1 indirect=12:94a297badef437e1 +geom 3: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.25 motion [] pieces all=800:4a8c9f44d777e131 camera=800:4a8c9f44d777e131 shadow=800:4a8c9f44d777e131 indirect=800:4a8c9f44d777e131 +geom 4: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.3585339 motion [] pieces all=760:2344ecf63e12c441 camera=760:2344ecf63e12c441 shadow=760:2344ecf63e12c441 indirect=760:2344ecf63e12c441 +provenance material /scene/Looks/initialShadingGroup: MaterialOrigin { slots: [0, 1, 2, 3, 4], displaced: false } +provenance light /scene/Sky: LightOrigin { index: 0, geoms: 0..0 } +provenance geometry 0..1: /scene/pCube1 +provenance geometry 1..2: /scene/pSphere1 +provenance geometry 2..3: /scene/pCube2 +provenance geometry 3..4: /scene/pTorus1 +provenance geometry 4..5: /scene/pSphere2 +provenance mesh: MeshOrigin { geom_id: 0, slot: 0, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 1, slot: 1, baked: false, moving: false } +provenance mesh: MeshOrigin { geom_id: 2, slot: 2, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 3, slot: 3, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 4, slot: 1, baked: false, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 12343188411137242430, n_points: 8, n_indices: 20, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 1: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 17119738035130870988, n_points: 382, n_indices: 1560, n_uvs: None, smooth: false, material: 0 }), placements: 2, shared: false, displaced: false } +provenance mesh slot 2: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 1739488954094729910, n_points: 8, n_indices: 24, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 3: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 6096447469814747168, n_points: 400, n_indices: 1600, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/scene/camera1"), cameras: ["/scene/camera1"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/scene/camera1"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/cornellbox_usda-816ed2710215c157-4.image b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-816ed2710215c157-4.image new file mode 100644 index 000000000..ba4884437 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-816ed2710215c157-4.image @@ -0,0 +1 @@ +640x360 16spp clamp-off 52a1a46f3a46d230 diff --git a/crates/crust-core/tests/data/import_baselines/cornellbox_usda-88df24aa0618a335-1.digest b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-88df24aa0618a335-1.digest new file mode 100644 index 000000000..1d5ab0cab --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-88df24aa0618a335-1.digest @@ -0,0 +1,39 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/scene/camera1") +camera: Camera { origin: Vec3A(0.0074343784, 1.9913422, 4.0133057), lower_left_corner: Vec3A(-8.881443, -3.0086517, -0.98669434), horizontal: Vec3A(17.777756, 0.0, 0.0), vertical: Vec3A(0.0, 9.999988, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: Some(Vec4(0.0, 0.0, -1.0, 3.9133058)), far: Some(Vec4(0.0, 0.0, 1.0, 9995.986)), planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: None +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 640, height: 360, region: PixelRect { x0: 0, y0: 0, x1: 640, y1: 360 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 12.700017, aperture: [25.4, 25.4], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 5.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/cornellbox.usda"], invisible_overrides: Some(0) } +layer: $DIR/cornellbox.usda +warning: Warning { code: MaterialFallbackDefault, kind: Skipped, count: 1, prims: ["/scene/Looks/initialShadingGroup"], message: "Material /scene/Looks/initialShadingGroup has no surface shader — using default grey OpenPBR" } +lights: 1 +light 0: dome name Some("/scene/Sky") lpe None pmf 1.0 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 5 geometries, PrimitiveBreakdown { triangles: 822, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 2 } top level, PrimitiveBreakdown { triangles: 1582, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 2 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 4.0 motion [] pieces all=10:88b22fc3345d5b05 camera=10:88b22fc3345d5b05 shadow=10:88b22fc3345d5b05 indirect=10:88b22fc3345d5b05 +geom 1: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.2 motion [] pieces all=760:c2b60a75c52c78b9 camera=760:c2b60a75c52c78b9 shadow=760:c2b60a75c52c78b9 indirect=760:c2b60a75c52c78b9 +geom 2: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=12:94a297badef437e1 camera=12:94a297badef437e1 shadow=12:94a297badef437e1 indirect=12:94a297badef437e1 +geom 3: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.25 motion [] pieces all=800:4a8c9f44d777e131 camera=800:4a8c9f44d777e131 shadow=800:4a8c9f44d777e131 indirect=800:4a8c9f44d777e131 +geom 4: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.3585339 motion [] pieces all=760:2344ecf63e12c441 camera=760:2344ecf63e12c441 shadow=760:2344ecf63e12c441 indirect=760:2344ecf63e12c441 +provenance material /scene/Looks/initialShadingGroup: MaterialOrigin { slots: [0, 1, 2, 3, 4], displaced: false } +provenance light /scene/Sky: LightOrigin { index: 0, geoms: 0..0 } +provenance geometry 0..1: /scene/pCube1 +provenance geometry 1..2: /scene/pSphere1 +provenance geometry 2..3: /scene/pCube2 +provenance geometry 3..4: /scene/pTorus1 +provenance geometry 4..5: /scene/pSphere2 +provenance mesh: MeshOrigin { geom_id: 0, slot: 0, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 1, slot: 1, baked: false, moving: false } +provenance mesh: MeshOrigin { geom_id: 2, slot: 2, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 3, slot: 3, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 4, slot: 1, baked: false, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 12343188411137242430, n_points: 8, n_indices: 20, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 1: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 17119738035130870988, n_points: 382, n_indices: 1560, n_uvs: None, smooth: false, material: 0 }), placements: 2, shared: false, displaced: false } +provenance mesh slot 2: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 1739488954094729910, n_points: 8, n_indices: 24, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 3: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 6096447469814747168, n_points: 400, n_indices: 1600, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: true, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/scene/camera1"), cameras: ["/scene/camera1"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/scene/camera1"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/cornellbox_usda-88df24aa0618a335-1.image b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-88df24aa0618a335-1.image new file mode 100644 index 000000000..7172edbfe --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-88df24aa0618a335-1.image @@ -0,0 +1 @@ +640x360 16spp clamp-off 64ede904b11bab22 diff --git a/crates/crust-core/tests/data/import_baselines/cornellbox_usda-88e25ed80282bc79-1.digest b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-88e25ed80282bc79-1.digest new file mode 100644 index 000000000..1d5ab0cab --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-88e25ed80282bc79-1.digest @@ -0,0 +1,39 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/scene/camera1") +camera: Camera { origin: Vec3A(0.0074343784, 1.9913422, 4.0133057), lower_left_corner: Vec3A(-8.881443, -3.0086517, -0.98669434), horizontal: Vec3A(17.777756, 0.0, 0.0), vertical: Vec3A(0.0, 9.999988, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: Some(Vec4(0.0, 0.0, -1.0, 3.9133058)), far: Some(Vec4(0.0, 0.0, 1.0, 9995.986)), planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: None +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 640, height: 360, region: PixelRect { x0: 0, y0: 0, x1: 640, y1: 360 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 12.700017, aperture: [25.4, 25.4], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 5.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/cornellbox.usda"], invisible_overrides: Some(0) } +layer: $DIR/cornellbox.usda +warning: Warning { code: MaterialFallbackDefault, kind: Skipped, count: 1, prims: ["/scene/Looks/initialShadingGroup"], message: "Material /scene/Looks/initialShadingGroup has no surface shader — using default grey OpenPBR" } +lights: 1 +light 0: dome name Some("/scene/Sky") lpe None pmf 1.0 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 5 geometries, PrimitiveBreakdown { triangles: 822, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 2 } top level, PrimitiveBreakdown { triangles: 1582, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 2 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 4.0 motion [] pieces all=10:88b22fc3345d5b05 camera=10:88b22fc3345d5b05 shadow=10:88b22fc3345d5b05 indirect=10:88b22fc3345d5b05 +geom 1: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.2 motion [] pieces all=760:c2b60a75c52c78b9 camera=760:c2b60a75c52c78b9 shadow=760:c2b60a75c52c78b9 indirect=760:c2b60a75c52c78b9 +geom 2: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=12:94a297badef437e1 camera=12:94a297badef437e1 shadow=12:94a297badef437e1 indirect=12:94a297badef437e1 +geom 3: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.25 motion [] pieces all=800:4a8c9f44d777e131 camera=800:4a8c9f44d777e131 shadow=800:4a8c9f44d777e131 indirect=800:4a8c9f44d777e131 +geom 4: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.3585339 motion [] pieces all=760:2344ecf63e12c441 camera=760:2344ecf63e12c441 shadow=760:2344ecf63e12c441 indirect=760:2344ecf63e12c441 +provenance material /scene/Looks/initialShadingGroup: MaterialOrigin { slots: [0, 1, 2, 3, 4], displaced: false } +provenance light /scene/Sky: LightOrigin { index: 0, geoms: 0..0 } +provenance geometry 0..1: /scene/pCube1 +provenance geometry 1..2: /scene/pSphere1 +provenance geometry 2..3: /scene/pCube2 +provenance geometry 3..4: /scene/pTorus1 +provenance geometry 4..5: /scene/pSphere2 +provenance mesh: MeshOrigin { geom_id: 0, slot: 0, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 1, slot: 1, baked: false, moving: false } +provenance mesh: MeshOrigin { geom_id: 2, slot: 2, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 3, slot: 3, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 4, slot: 1, baked: false, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 12343188411137242430, n_points: 8, n_indices: 20, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 1: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 17119738035130870988, n_points: 382, n_indices: 1560, n_uvs: None, smooth: false, material: 0 }), placements: 2, shared: false, displaced: false } +provenance mesh slot 2: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 1739488954094729910, n_points: 8, n_indices: 24, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 3: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 6096447469814747168, n_points: 400, n_indices: 1600, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: true, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/scene/camera1"), cameras: ["/scene/camera1"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/scene/camera1"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/cornellbox_usda-88e25ed80282bc79-1.image b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-88e25ed80282bc79-1.image new file mode 100644 index 000000000..7172edbfe --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-88e25ed80282bc79-1.image @@ -0,0 +1 @@ +640x360 16spp clamp-off 64ede904b11bab22 diff --git a/crates/crust-core/tests/data/import_baselines/cornellbox_usda-88eeabb6ac92eef4-1.digest b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-88eeabb6ac92eef4-1.digest new file mode 100644 index 000000000..1d5ab0cab --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-88eeabb6ac92eef4-1.digest @@ -0,0 +1,39 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/scene/camera1") +camera: Camera { origin: Vec3A(0.0074343784, 1.9913422, 4.0133057), lower_left_corner: Vec3A(-8.881443, -3.0086517, -0.98669434), horizontal: Vec3A(17.777756, 0.0, 0.0), vertical: Vec3A(0.0, 9.999988, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: Some(Vec4(0.0, 0.0, -1.0, 3.9133058)), far: Some(Vec4(0.0, 0.0, 1.0, 9995.986)), planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: None +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 640, height: 360, region: PixelRect { x0: 0, y0: 0, x1: 640, y1: 360 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 12.700017, aperture: [25.4, 25.4], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 5.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/cornellbox.usda"], invisible_overrides: Some(0) } +layer: $DIR/cornellbox.usda +warning: Warning { code: MaterialFallbackDefault, kind: Skipped, count: 1, prims: ["/scene/Looks/initialShadingGroup"], message: "Material /scene/Looks/initialShadingGroup has no surface shader — using default grey OpenPBR" } +lights: 1 +light 0: dome name Some("/scene/Sky") lpe None pmf 1.0 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 5 geometries, PrimitiveBreakdown { triangles: 822, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 2 } top level, PrimitiveBreakdown { triangles: 1582, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 2 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 4.0 motion [] pieces all=10:88b22fc3345d5b05 camera=10:88b22fc3345d5b05 shadow=10:88b22fc3345d5b05 indirect=10:88b22fc3345d5b05 +geom 1: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.2 motion [] pieces all=760:c2b60a75c52c78b9 camera=760:c2b60a75c52c78b9 shadow=760:c2b60a75c52c78b9 indirect=760:c2b60a75c52c78b9 +geom 2: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=12:94a297badef437e1 camera=12:94a297badef437e1 shadow=12:94a297badef437e1 indirect=12:94a297badef437e1 +geom 3: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.25 motion [] pieces all=800:4a8c9f44d777e131 camera=800:4a8c9f44d777e131 shadow=800:4a8c9f44d777e131 indirect=800:4a8c9f44d777e131 +geom 4: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.3585339 motion [] pieces all=760:2344ecf63e12c441 camera=760:2344ecf63e12c441 shadow=760:2344ecf63e12c441 indirect=760:2344ecf63e12c441 +provenance material /scene/Looks/initialShadingGroup: MaterialOrigin { slots: [0, 1, 2, 3, 4], displaced: false } +provenance light /scene/Sky: LightOrigin { index: 0, geoms: 0..0 } +provenance geometry 0..1: /scene/pCube1 +provenance geometry 1..2: /scene/pSphere1 +provenance geometry 2..3: /scene/pCube2 +provenance geometry 3..4: /scene/pTorus1 +provenance geometry 4..5: /scene/pSphere2 +provenance mesh: MeshOrigin { geom_id: 0, slot: 0, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 1, slot: 1, baked: false, moving: false } +provenance mesh: MeshOrigin { geom_id: 2, slot: 2, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 3, slot: 3, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 4, slot: 1, baked: false, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 12343188411137242430, n_points: 8, n_indices: 20, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 1: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 17119738035130870988, n_points: 382, n_indices: 1560, n_uvs: None, smooth: false, material: 0 }), placements: 2, shared: false, displaced: false } +provenance mesh slot 2: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 1739488954094729910, n_points: 8, n_indices: 24, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 3: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 6096447469814747168, n_points: 400, n_indices: 1600, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: true, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/scene/camera1"), cameras: ["/scene/camera1"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/scene/camera1"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/cornellbox_usda-88eeabb6ac92eef4-1.image b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-88eeabb6ac92eef4-1.image new file mode 100644 index 000000000..7172edbfe --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-88eeabb6ac92eef4-1.image @@ -0,0 +1 @@ +640x360 16spp clamp-off 64ede904b11bab22 diff --git a/crates/crust-core/tests/data/import_baselines/cornellbox_usda-89c626c1e078ca38-1.digest b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-89c626c1e078ca38-1.digest new file mode 100644 index 000000000..0e859a952 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-89c626c1e078ca38-1.digest @@ -0,0 +1,40 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/scene/camera1") +camera: Camera { origin: Vec3A(0.0074343784, 1.9913422, 4.0133057), lower_left_corner: Vec3A(-8.881443, -3.0086517, -0.98669434), horizontal: Vec3A(17.777756, 0.0, 0.0), vertical: Vec3A(0.0, 9.999988, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: Some(Vec4(0.0, 0.0, -1.0, 3.9133058)), far: Some(Vec4(0.0, 0.0, 1.0, 9995.986)), planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: None +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 640, height: 360, region: PixelRect { x0: 0, y0: 0, x1: 640, y1: 360 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 12.700017, aperture: [25.4, 25.4], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 5.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/cornellbox.usda"], invisible_overrides: Some(0) } +layer: $DIR/cornellbox.usda +warning: Warning { code: AssetUnsupportedByHost, kind: Skipped, count: 1, prims: [], message: "No asset loader: environment map $DIR/sky_gradient.exr ignored — the dome falls back to its uniform colour. Use Scene::from_usd_with_assets to supply one." } +warning: Warning { code: MaterialFallbackDefault, kind: Skipped, count: 1, prims: ["/scene/Looks/initialShadingGroup"], message: "Material /scene/Looks/initialShadingGroup has no surface shader — using default grey OpenPBR" } +lights: 1 +light 0: dome name Some("/scene/Sky") lpe None pmf 1.0 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 5 geometries, PrimitiveBreakdown { triangles: 822, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 2 } top level, PrimitiveBreakdown { triangles: 1582, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 2 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 4.0 motion [] pieces all=10:88b22fc3345d5b05 camera=10:88b22fc3345d5b05 shadow=10:88b22fc3345d5b05 indirect=10:88b22fc3345d5b05 +geom 1: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.2 motion [] pieces all=760:c2b60a75c52c78b9 camera=760:c2b60a75c52c78b9 shadow=760:c2b60a75c52c78b9 indirect=760:c2b60a75c52c78b9 +geom 2: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=12:94a297badef437e1 camera=12:94a297badef437e1 shadow=12:94a297badef437e1 indirect=12:94a297badef437e1 +geom 3: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.25 motion [] pieces all=800:4a8c9f44d777e131 camera=800:4a8c9f44d777e131 shadow=800:4a8c9f44d777e131 indirect=800:4a8c9f44d777e131 +geom 4: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.3585339 motion [] pieces all=760:2344ecf63e12c441 camera=760:2344ecf63e12c441 shadow=760:2344ecf63e12c441 indirect=760:2344ecf63e12c441 +provenance material /scene/Looks/initialShadingGroup: MaterialOrigin { slots: [0, 1, 2, 3, 4], displaced: false } +provenance light /scene/Sky: LightOrigin { index: 0, geoms: 0..0 } +provenance geometry 0..1: /scene/pCube1 +provenance geometry 1..2: /scene/pSphere1 +provenance geometry 2..3: /scene/pCube2 +provenance geometry 3..4: /scene/pTorus1 +provenance geometry 4..5: /scene/pSphere2 +provenance mesh: MeshOrigin { geom_id: 0, slot: 0, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 1, slot: 1, baked: false, moving: false } +provenance mesh: MeshOrigin { geom_id: 2, slot: 2, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 3, slot: 3, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 4, slot: 1, baked: false, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 12343188411137242430, n_points: 8, n_indices: 20, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 1: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 17119738035130870988, n_points: 382, n_indices: 1560, n_uvs: None, smooth: false, material: 0 }), placements: 2, shared: false, displaced: false } +provenance mesh slot 2: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 1739488954094729910, n_points: 8, n_indices: 24, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 3: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 6096447469814747168, n_points: 400, n_indices: 1600, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/scene/camera1"), cameras: ["/scene/camera1"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/scene/camera1"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/cornellbox_usda-89c626c1e078ca38-1.image b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-89c626c1e078ca38-1.image new file mode 100644 index 000000000..ba4884437 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-89c626c1e078ca38-1.image @@ -0,0 +1 @@ +640x360 16spp clamp-off 52a1a46f3a46d230 diff --git a/crates/crust-core/tests/data/import_baselines/cornellbox_usda-8d8e99f6790507a9-1.digest b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-8d8e99f6790507a9-1.digest new file mode 100644 index 000000000..0e859a952 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-8d8e99f6790507a9-1.digest @@ -0,0 +1,40 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/scene/camera1") +camera: Camera { origin: Vec3A(0.0074343784, 1.9913422, 4.0133057), lower_left_corner: Vec3A(-8.881443, -3.0086517, -0.98669434), horizontal: Vec3A(17.777756, 0.0, 0.0), vertical: Vec3A(0.0, 9.999988, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: Some(Vec4(0.0, 0.0, -1.0, 3.9133058)), far: Some(Vec4(0.0, 0.0, 1.0, 9995.986)), planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: None +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 640, height: 360, region: PixelRect { x0: 0, y0: 0, x1: 640, y1: 360 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 12.700017, aperture: [25.4, 25.4], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 5.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/cornellbox.usda"], invisible_overrides: Some(0) } +layer: $DIR/cornellbox.usda +warning: Warning { code: AssetUnsupportedByHost, kind: Skipped, count: 1, prims: [], message: "No asset loader: environment map $DIR/sky_gradient.exr ignored — the dome falls back to its uniform colour. Use Scene::from_usd_with_assets to supply one." } +warning: Warning { code: MaterialFallbackDefault, kind: Skipped, count: 1, prims: ["/scene/Looks/initialShadingGroup"], message: "Material /scene/Looks/initialShadingGroup has no surface shader — using default grey OpenPBR" } +lights: 1 +light 0: dome name Some("/scene/Sky") lpe None pmf 1.0 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 5 geometries, PrimitiveBreakdown { triangles: 822, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 2 } top level, PrimitiveBreakdown { triangles: 1582, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 2 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 4.0 motion [] pieces all=10:88b22fc3345d5b05 camera=10:88b22fc3345d5b05 shadow=10:88b22fc3345d5b05 indirect=10:88b22fc3345d5b05 +geom 1: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.2 motion [] pieces all=760:c2b60a75c52c78b9 camera=760:c2b60a75c52c78b9 shadow=760:c2b60a75c52c78b9 indirect=760:c2b60a75c52c78b9 +geom 2: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=12:94a297badef437e1 camera=12:94a297badef437e1 shadow=12:94a297badef437e1 indirect=12:94a297badef437e1 +geom 3: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.25 motion [] pieces all=800:4a8c9f44d777e131 camera=800:4a8c9f44d777e131 shadow=800:4a8c9f44d777e131 indirect=800:4a8c9f44d777e131 +geom 4: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.3585339 motion [] pieces all=760:2344ecf63e12c441 camera=760:2344ecf63e12c441 shadow=760:2344ecf63e12c441 indirect=760:2344ecf63e12c441 +provenance material /scene/Looks/initialShadingGroup: MaterialOrigin { slots: [0, 1, 2, 3, 4], displaced: false } +provenance light /scene/Sky: LightOrigin { index: 0, geoms: 0..0 } +provenance geometry 0..1: /scene/pCube1 +provenance geometry 1..2: /scene/pSphere1 +provenance geometry 2..3: /scene/pCube2 +provenance geometry 3..4: /scene/pTorus1 +provenance geometry 4..5: /scene/pSphere2 +provenance mesh: MeshOrigin { geom_id: 0, slot: 0, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 1, slot: 1, baked: false, moving: false } +provenance mesh: MeshOrigin { geom_id: 2, slot: 2, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 3, slot: 3, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 4, slot: 1, baked: false, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 12343188411137242430, n_points: 8, n_indices: 20, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 1: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 17119738035130870988, n_points: 382, n_indices: 1560, n_uvs: None, smooth: false, material: 0 }), placements: 2, shared: false, displaced: false } +provenance mesh slot 2: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 1739488954094729910, n_points: 8, n_indices: 24, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 3: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 6096447469814747168, n_points: 400, n_indices: 1600, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/scene/camera1"), cameras: ["/scene/camera1"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/scene/camera1"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/cornellbox_usda-8d8e99f6790507a9-1.image b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-8d8e99f6790507a9-1.image new file mode 100644 index 000000000..ba4884437 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-8d8e99f6790507a9-1.image @@ -0,0 +1 @@ +640x360 16spp clamp-off 52a1a46f3a46d230 diff --git a/crates/crust-core/tests/data/import_baselines/cornellbox_usda-8d8e99f6790507a9-2.digest b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-8d8e99f6790507a9-2.digest new file mode 100644 index 000000000..0e859a952 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-8d8e99f6790507a9-2.digest @@ -0,0 +1,40 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/scene/camera1") +camera: Camera { origin: Vec3A(0.0074343784, 1.9913422, 4.0133057), lower_left_corner: Vec3A(-8.881443, -3.0086517, -0.98669434), horizontal: Vec3A(17.777756, 0.0, 0.0), vertical: Vec3A(0.0, 9.999988, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: Some(Vec4(0.0, 0.0, -1.0, 3.9133058)), far: Some(Vec4(0.0, 0.0, 1.0, 9995.986)), planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: None +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 640, height: 360, region: PixelRect { x0: 0, y0: 0, x1: 640, y1: 360 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 12.700017, aperture: [25.4, 25.4], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 5.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/cornellbox.usda"], invisible_overrides: Some(0) } +layer: $DIR/cornellbox.usda +warning: Warning { code: AssetUnsupportedByHost, kind: Skipped, count: 1, prims: [], message: "No asset loader: environment map $DIR/sky_gradient.exr ignored — the dome falls back to its uniform colour. Use Scene::from_usd_with_assets to supply one." } +warning: Warning { code: MaterialFallbackDefault, kind: Skipped, count: 1, prims: ["/scene/Looks/initialShadingGroup"], message: "Material /scene/Looks/initialShadingGroup has no surface shader — using default grey OpenPBR" } +lights: 1 +light 0: dome name Some("/scene/Sky") lpe None pmf 1.0 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 5 geometries, PrimitiveBreakdown { triangles: 822, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 2 } top level, PrimitiveBreakdown { triangles: 1582, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 2 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 4.0 motion [] pieces all=10:88b22fc3345d5b05 camera=10:88b22fc3345d5b05 shadow=10:88b22fc3345d5b05 indirect=10:88b22fc3345d5b05 +geom 1: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.2 motion [] pieces all=760:c2b60a75c52c78b9 camera=760:c2b60a75c52c78b9 shadow=760:c2b60a75c52c78b9 indirect=760:c2b60a75c52c78b9 +geom 2: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=12:94a297badef437e1 camera=12:94a297badef437e1 shadow=12:94a297badef437e1 indirect=12:94a297badef437e1 +geom 3: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.25 motion [] pieces all=800:4a8c9f44d777e131 camera=800:4a8c9f44d777e131 shadow=800:4a8c9f44d777e131 indirect=800:4a8c9f44d777e131 +geom 4: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.3585339 motion [] pieces all=760:2344ecf63e12c441 camera=760:2344ecf63e12c441 shadow=760:2344ecf63e12c441 indirect=760:2344ecf63e12c441 +provenance material /scene/Looks/initialShadingGroup: MaterialOrigin { slots: [0, 1, 2, 3, 4], displaced: false } +provenance light /scene/Sky: LightOrigin { index: 0, geoms: 0..0 } +provenance geometry 0..1: /scene/pCube1 +provenance geometry 1..2: /scene/pSphere1 +provenance geometry 2..3: /scene/pCube2 +provenance geometry 3..4: /scene/pTorus1 +provenance geometry 4..5: /scene/pSphere2 +provenance mesh: MeshOrigin { geom_id: 0, slot: 0, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 1, slot: 1, baked: false, moving: false } +provenance mesh: MeshOrigin { geom_id: 2, slot: 2, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 3, slot: 3, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 4, slot: 1, baked: false, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 12343188411137242430, n_points: 8, n_indices: 20, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 1: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 17119738035130870988, n_points: 382, n_indices: 1560, n_uvs: None, smooth: false, material: 0 }), placements: 2, shared: false, displaced: false } +provenance mesh slot 2: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 1739488954094729910, n_points: 8, n_indices: 24, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 3: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 6096447469814747168, n_points: 400, n_indices: 1600, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/scene/camera1"), cameras: ["/scene/camera1"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/scene/camera1"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/cornellbox_usda-8d8e99f6790507a9-2.image b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-8d8e99f6790507a9-2.image new file mode 100644 index 000000000..ba4884437 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-8d8e99f6790507a9-2.image @@ -0,0 +1 @@ +640x360 16spp clamp-off 52a1a46f3a46d230 diff --git a/crates/crust-core/tests/data/import_baselines/cornellbox_usda-8e692f67a3c276f4-1.digest b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-8e692f67a3c276f4-1.digest new file mode 100644 index 000000000..0e859a952 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-8e692f67a3c276f4-1.digest @@ -0,0 +1,40 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/scene/camera1") +camera: Camera { origin: Vec3A(0.0074343784, 1.9913422, 4.0133057), lower_left_corner: Vec3A(-8.881443, -3.0086517, -0.98669434), horizontal: Vec3A(17.777756, 0.0, 0.0), vertical: Vec3A(0.0, 9.999988, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: Some(Vec4(0.0, 0.0, -1.0, 3.9133058)), far: Some(Vec4(0.0, 0.0, 1.0, 9995.986)), planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: None +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 640, height: 360, region: PixelRect { x0: 0, y0: 0, x1: 640, y1: 360 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 12.700017, aperture: [25.4, 25.4], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 5.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/cornellbox.usda"], invisible_overrides: Some(0) } +layer: $DIR/cornellbox.usda +warning: Warning { code: AssetUnsupportedByHost, kind: Skipped, count: 1, prims: [], message: "No asset loader: environment map $DIR/sky_gradient.exr ignored — the dome falls back to its uniform colour. Use Scene::from_usd_with_assets to supply one." } +warning: Warning { code: MaterialFallbackDefault, kind: Skipped, count: 1, prims: ["/scene/Looks/initialShadingGroup"], message: "Material /scene/Looks/initialShadingGroup has no surface shader — using default grey OpenPBR" } +lights: 1 +light 0: dome name Some("/scene/Sky") lpe None pmf 1.0 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 5 geometries, PrimitiveBreakdown { triangles: 822, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 2 } top level, PrimitiveBreakdown { triangles: 1582, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 2 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 4.0 motion [] pieces all=10:88b22fc3345d5b05 camera=10:88b22fc3345d5b05 shadow=10:88b22fc3345d5b05 indirect=10:88b22fc3345d5b05 +geom 1: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.2 motion [] pieces all=760:c2b60a75c52c78b9 camera=760:c2b60a75c52c78b9 shadow=760:c2b60a75c52c78b9 indirect=760:c2b60a75c52c78b9 +geom 2: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=12:94a297badef437e1 camera=12:94a297badef437e1 shadow=12:94a297badef437e1 indirect=12:94a297badef437e1 +geom 3: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.25 motion [] pieces all=800:4a8c9f44d777e131 camera=800:4a8c9f44d777e131 shadow=800:4a8c9f44d777e131 indirect=800:4a8c9f44d777e131 +geom 4: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.3585339 motion [] pieces all=760:2344ecf63e12c441 camera=760:2344ecf63e12c441 shadow=760:2344ecf63e12c441 indirect=760:2344ecf63e12c441 +provenance material /scene/Looks/initialShadingGroup: MaterialOrigin { slots: [0, 1, 2, 3, 4], displaced: false } +provenance light /scene/Sky: LightOrigin { index: 0, geoms: 0..0 } +provenance geometry 0..1: /scene/pCube1 +provenance geometry 1..2: /scene/pSphere1 +provenance geometry 2..3: /scene/pCube2 +provenance geometry 3..4: /scene/pTorus1 +provenance geometry 4..5: /scene/pSphere2 +provenance mesh: MeshOrigin { geom_id: 0, slot: 0, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 1, slot: 1, baked: false, moving: false } +provenance mesh: MeshOrigin { geom_id: 2, slot: 2, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 3, slot: 3, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 4, slot: 1, baked: false, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 12343188411137242430, n_points: 8, n_indices: 20, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 1: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 17119738035130870988, n_points: 382, n_indices: 1560, n_uvs: None, smooth: false, material: 0 }), placements: 2, shared: false, displaced: false } +provenance mesh slot 2: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 1739488954094729910, n_points: 8, n_indices: 24, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 3: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 6096447469814747168, n_points: 400, n_indices: 1600, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/scene/camera1"), cameras: ["/scene/camera1"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/scene/camera1"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/cornellbox_usda-8e692f67a3c276f4-1.image b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-8e692f67a3c276f4-1.image new file mode 100644 index 000000000..ba4884437 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-8e692f67a3c276f4-1.image @@ -0,0 +1 @@ +640x360 16spp clamp-off 52a1a46f3a46d230 diff --git a/crates/crust-core/tests/data/import_baselines/cornellbox_usda-8ecb1db3e29a9e13-1.digest b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-8ecb1db3e29a9e13-1.digest new file mode 100644 index 000000000..1d5ab0cab --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-8ecb1db3e29a9e13-1.digest @@ -0,0 +1,39 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/scene/camera1") +camera: Camera { origin: Vec3A(0.0074343784, 1.9913422, 4.0133057), lower_left_corner: Vec3A(-8.881443, -3.0086517, -0.98669434), horizontal: Vec3A(17.777756, 0.0, 0.0), vertical: Vec3A(0.0, 9.999988, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: Some(Vec4(0.0, 0.0, -1.0, 3.9133058)), far: Some(Vec4(0.0, 0.0, 1.0, 9995.986)), planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: None +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 640, height: 360, region: PixelRect { x0: 0, y0: 0, x1: 640, y1: 360 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 12.700017, aperture: [25.4, 25.4], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 5.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/cornellbox.usda"], invisible_overrides: Some(0) } +layer: $DIR/cornellbox.usda +warning: Warning { code: MaterialFallbackDefault, kind: Skipped, count: 1, prims: ["/scene/Looks/initialShadingGroup"], message: "Material /scene/Looks/initialShadingGroup has no surface shader — using default grey OpenPBR" } +lights: 1 +light 0: dome name Some("/scene/Sky") lpe None pmf 1.0 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 5 geometries, PrimitiveBreakdown { triangles: 822, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 2 } top level, PrimitiveBreakdown { triangles: 1582, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 2 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 4.0 motion [] pieces all=10:88b22fc3345d5b05 camera=10:88b22fc3345d5b05 shadow=10:88b22fc3345d5b05 indirect=10:88b22fc3345d5b05 +geom 1: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.2 motion [] pieces all=760:c2b60a75c52c78b9 camera=760:c2b60a75c52c78b9 shadow=760:c2b60a75c52c78b9 indirect=760:c2b60a75c52c78b9 +geom 2: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=12:94a297badef437e1 camera=12:94a297badef437e1 shadow=12:94a297badef437e1 indirect=12:94a297badef437e1 +geom 3: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.25 motion [] pieces all=800:4a8c9f44d777e131 camera=800:4a8c9f44d777e131 shadow=800:4a8c9f44d777e131 indirect=800:4a8c9f44d777e131 +geom 4: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.3585339 motion [] pieces all=760:2344ecf63e12c441 camera=760:2344ecf63e12c441 shadow=760:2344ecf63e12c441 indirect=760:2344ecf63e12c441 +provenance material /scene/Looks/initialShadingGroup: MaterialOrigin { slots: [0, 1, 2, 3, 4], displaced: false } +provenance light /scene/Sky: LightOrigin { index: 0, geoms: 0..0 } +provenance geometry 0..1: /scene/pCube1 +provenance geometry 1..2: /scene/pSphere1 +provenance geometry 2..3: /scene/pCube2 +provenance geometry 3..4: /scene/pTorus1 +provenance geometry 4..5: /scene/pSphere2 +provenance mesh: MeshOrigin { geom_id: 0, slot: 0, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 1, slot: 1, baked: false, moving: false } +provenance mesh: MeshOrigin { geom_id: 2, slot: 2, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 3, slot: 3, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 4, slot: 1, baked: false, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 12343188411137242430, n_points: 8, n_indices: 20, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 1: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 17119738035130870988, n_points: 382, n_indices: 1560, n_uvs: None, smooth: false, material: 0 }), placements: 2, shared: false, displaced: false } +provenance mesh slot 2: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 1739488954094729910, n_points: 8, n_indices: 24, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 3: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 6096447469814747168, n_points: 400, n_indices: 1600, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: true, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/scene/camera1"), cameras: ["/scene/camera1"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/scene/camera1"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/cornellbox_usda-8ecb1db3e29a9e13-1.image b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-8ecb1db3e29a9e13-1.image new file mode 100644 index 000000000..7172edbfe --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-8ecb1db3e29a9e13-1.image @@ -0,0 +1 @@ +640x360 16spp clamp-off 64ede904b11bab22 diff --git a/crates/crust-core/tests/data/import_baselines/cornellbox_usda-93e84687c267227a-1.digest b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-93e84687c267227a-1.digest new file mode 100644 index 000000000..0e859a952 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-93e84687c267227a-1.digest @@ -0,0 +1,40 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/scene/camera1") +camera: Camera { origin: Vec3A(0.0074343784, 1.9913422, 4.0133057), lower_left_corner: Vec3A(-8.881443, -3.0086517, -0.98669434), horizontal: Vec3A(17.777756, 0.0, 0.0), vertical: Vec3A(0.0, 9.999988, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: Some(Vec4(0.0, 0.0, -1.0, 3.9133058)), far: Some(Vec4(0.0, 0.0, 1.0, 9995.986)), planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: None +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 640, height: 360, region: PixelRect { x0: 0, y0: 0, x1: 640, y1: 360 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 12.700017, aperture: [25.4, 25.4], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 5.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/cornellbox.usda"], invisible_overrides: Some(0) } +layer: $DIR/cornellbox.usda +warning: Warning { code: AssetUnsupportedByHost, kind: Skipped, count: 1, prims: [], message: "No asset loader: environment map $DIR/sky_gradient.exr ignored — the dome falls back to its uniform colour. Use Scene::from_usd_with_assets to supply one." } +warning: Warning { code: MaterialFallbackDefault, kind: Skipped, count: 1, prims: ["/scene/Looks/initialShadingGroup"], message: "Material /scene/Looks/initialShadingGroup has no surface shader — using default grey OpenPBR" } +lights: 1 +light 0: dome name Some("/scene/Sky") lpe None pmf 1.0 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 5 geometries, PrimitiveBreakdown { triangles: 822, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 2 } top level, PrimitiveBreakdown { triangles: 1582, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 2 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 4.0 motion [] pieces all=10:88b22fc3345d5b05 camera=10:88b22fc3345d5b05 shadow=10:88b22fc3345d5b05 indirect=10:88b22fc3345d5b05 +geom 1: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.2 motion [] pieces all=760:c2b60a75c52c78b9 camera=760:c2b60a75c52c78b9 shadow=760:c2b60a75c52c78b9 indirect=760:c2b60a75c52c78b9 +geom 2: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=12:94a297badef437e1 camera=12:94a297badef437e1 shadow=12:94a297badef437e1 indirect=12:94a297badef437e1 +geom 3: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.25 motion [] pieces all=800:4a8c9f44d777e131 camera=800:4a8c9f44d777e131 shadow=800:4a8c9f44d777e131 indirect=800:4a8c9f44d777e131 +geom 4: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.3585339 motion [] pieces all=760:2344ecf63e12c441 camera=760:2344ecf63e12c441 shadow=760:2344ecf63e12c441 indirect=760:2344ecf63e12c441 +provenance material /scene/Looks/initialShadingGroup: MaterialOrigin { slots: [0, 1, 2, 3, 4], displaced: false } +provenance light /scene/Sky: LightOrigin { index: 0, geoms: 0..0 } +provenance geometry 0..1: /scene/pCube1 +provenance geometry 1..2: /scene/pSphere1 +provenance geometry 2..3: /scene/pCube2 +provenance geometry 3..4: /scene/pTorus1 +provenance geometry 4..5: /scene/pSphere2 +provenance mesh: MeshOrigin { geom_id: 0, slot: 0, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 1, slot: 1, baked: false, moving: false } +provenance mesh: MeshOrigin { geom_id: 2, slot: 2, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 3, slot: 3, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 4, slot: 1, baked: false, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 12343188411137242430, n_points: 8, n_indices: 20, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 1: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 17119738035130870988, n_points: 382, n_indices: 1560, n_uvs: None, smooth: false, material: 0 }), placements: 2, shared: false, displaced: false } +provenance mesh slot 2: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 1739488954094729910, n_points: 8, n_indices: 24, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 3: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 6096447469814747168, n_points: 400, n_indices: 1600, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/scene/camera1"), cameras: ["/scene/camera1"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/scene/camera1"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/cornellbox_usda-93e84687c267227a-1.image b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-93e84687c267227a-1.image new file mode 100644 index 000000000..ba4884437 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-93e84687c267227a-1.image @@ -0,0 +1 @@ +640x360 16spp clamp-off 52a1a46f3a46d230 diff --git a/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9514c8683d2c9e4d-1.digest b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9514c8683d2c9e4d-1.digest new file mode 100644 index 000000000..1d5ab0cab --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9514c8683d2c9e4d-1.digest @@ -0,0 +1,39 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/scene/camera1") +camera: Camera { origin: Vec3A(0.0074343784, 1.9913422, 4.0133057), lower_left_corner: Vec3A(-8.881443, -3.0086517, -0.98669434), horizontal: Vec3A(17.777756, 0.0, 0.0), vertical: Vec3A(0.0, 9.999988, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: Some(Vec4(0.0, 0.0, -1.0, 3.9133058)), far: Some(Vec4(0.0, 0.0, 1.0, 9995.986)), planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: None +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 640, height: 360, region: PixelRect { x0: 0, y0: 0, x1: 640, y1: 360 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 12.700017, aperture: [25.4, 25.4], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 5.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/cornellbox.usda"], invisible_overrides: Some(0) } +layer: $DIR/cornellbox.usda +warning: Warning { code: MaterialFallbackDefault, kind: Skipped, count: 1, prims: ["/scene/Looks/initialShadingGroup"], message: "Material /scene/Looks/initialShadingGroup has no surface shader — using default grey OpenPBR" } +lights: 1 +light 0: dome name Some("/scene/Sky") lpe None pmf 1.0 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 5 geometries, PrimitiveBreakdown { triangles: 822, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 2 } top level, PrimitiveBreakdown { triangles: 1582, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 2 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 4.0 motion [] pieces all=10:88b22fc3345d5b05 camera=10:88b22fc3345d5b05 shadow=10:88b22fc3345d5b05 indirect=10:88b22fc3345d5b05 +geom 1: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.2 motion [] pieces all=760:c2b60a75c52c78b9 camera=760:c2b60a75c52c78b9 shadow=760:c2b60a75c52c78b9 indirect=760:c2b60a75c52c78b9 +geom 2: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=12:94a297badef437e1 camera=12:94a297badef437e1 shadow=12:94a297badef437e1 indirect=12:94a297badef437e1 +geom 3: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.25 motion [] pieces all=800:4a8c9f44d777e131 camera=800:4a8c9f44d777e131 shadow=800:4a8c9f44d777e131 indirect=800:4a8c9f44d777e131 +geom 4: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.3585339 motion [] pieces all=760:2344ecf63e12c441 camera=760:2344ecf63e12c441 shadow=760:2344ecf63e12c441 indirect=760:2344ecf63e12c441 +provenance material /scene/Looks/initialShadingGroup: MaterialOrigin { slots: [0, 1, 2, 3, 4], displaced: false } +provenance light /scene/Sky: LightOrigin { index: 0, geoms: 0..0 } +provenance geometry 0..1: /scene/pCube1 +provenance geometry 1..2: /scene/pSphere1 +provenance geometry 2..3: /scene/pCube2 +provenance geometry 3..4: /scene/pTorus1 +provenance geometry 4..5: /scene/pSphere2 +provenance mesh: MeshOrigin { geom_id: 0, slot: 0, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 1, slot: 1, baked: false, moving: false } +provenance mesh: MeshOrigin { geom_id: 2, slot: 2, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 3, slot: 3, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 4, slot: 1, baked: false, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 12343188411137242430, n_points: 8, n_indices: 20, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 1: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 17119738035130870988, n_points: 382, n_indices: 1560, n_uvs: None, smooth: false, material: 0 }), placements: 2, shared: false, displaced: false } +provenance mesh slot 2: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 1739488954094729910, n_points: 8, n_indices: 24, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 3: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 6096447469814747168, n_points: 400, n_indices: 1600, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: true, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/scene/camera1"), cameras: ["/scene/camera1"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/scene/camera1"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9514c8683d2c9e4d-1.image b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9514c8683d2c9e4d-1.image new file mode 100644 index 000000000..7172edbfe --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9514c8683d2c9e4d-1.image @@ -0,0 +1 @@ +640x360 16spp clamp-off 64ede904b11bab22 diff --git a/crates/crust-core/tests/data/import_baselines/cornellbox_usda-96761b8033e5fb3c-1.digest b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-96761b8033e5fb3c-1.digest new file mode 100644 index 000000000..0e859a952 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-96761b8033e5fb3c-1.digest @@ -0,0 +1,40 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/scene/camera1") +camera: Camera { origin: Vec3A(0.0074343784, 1.9913422, 4.0133057), lower_left_corner: Vec3A(-8.881443, -3.0086517, -0.98669434), horizontal: Vec3A(17.777756, 0.0, 0.0), vertical: Vec3A(0.0, 9.999988, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: Some(Vec4(0.0, 0.0, -1.0, 3.9133058)), far: Some(Vec4(0.0, 0.0, 1.0, 9995.986)), planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: None +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 640, height: 360, region: PixelRect { x0: 0, y0: 0, x1: 640, y1: 360 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 12.700017, aperture: [25.4, 25.4], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 5.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/cornellbox.usda"], invisible_overrides: Some(0) } +layer: $DIR/cornellbox.usda +warning: Warning { code: AssetUnsupportedByHost, kind: Skipped, count: 1, prims: [], message: "No asset loader: environment map $DIR/sky_gradient.exr ignored — the dome falls back to its uniform colour. Use Scene::from_usd_with_assets to supply one." } +warning: Warning { code: MaterialFallbackDefault, kind: Skipped, count: 1, prims: ["/scene/Looks/initialShadingGroup"], message: "Material /scene/Looks/initialShadingGroup has no surface shader — using default grey OpenPBR" } +lights: 1 +light 0: dome name Some("/scene/Sky") lpe None pmf 1.0 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 5 geometries, PrimitiveBreakdown { triangles: 822, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 2 } top level, PrimitiveBreakdown { triangles: 1582, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 2 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 4.0 motion [] pieces all=10:88b22fc3345d5b05 camera=10:88b22fc3345d5b05 shadow=10:88b22fc3345d5b05 indirect=10:88b22fc3345d5b05 +geom 1: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.2 motion [] pieces all=760:c2b60a75c52c78b9 camera=760:c2b60a75c52c78b9 shadow=760:c2b60a75c52c78b9 indirect=760:c2b60a75c52c78b9 +geom 2: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=12:94a297badef437e1 camera=12:94a297badef437e1 shadow=12:94a297badef437e1 indirect=12:94a297badef437e1 +geom 3: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.25 motion [] pieces all=800:4a8c9f44d777e131 camera=800:4a8c9f44d777e131 shadow=800:4a8c9f44d777e131 indirect=800:4a8c9f44d777e131 +geom 4: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.3585339 motion [] pieces all=760:2344ecf63e12c441 camera=760:2344ecf63e12c441 shadow=760:2344ecf63e12c441 indirect=760:2344ecf63e12c441 +provenance material /scene/Looks/initialShadingGroup: MaterialOrigin { slots: [0, 1, 2, 3, 4], displaced: false } +provenance light /scene/Sky: LightOrigin { index: 0, geoms: 0..0 } +provenance geometry 0..1: /scene/pCube1 +provenance geometry 1..2: /scene/pSphere1 +provenance geometry 2..3: /scene/pCube2 +provenance geometry 3..4: /scene/pTorus1 +provenance geometry 4..5: /scene/pSphere2 +provenance mesh: MeshOrigin { geom_id: 0, slot: 0, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 1, slot: 1, baked: false, moving: false } +provenance mesh: MeshOrigin { geom_id: 2, slot: 2, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 3, slot: 3, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 4, slot: 1, baked: false, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 12343188411137242430, n_points: 8, n_indices: 20, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 1: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 17119738035130870988, n_points: 382, n_indices: 1560, n_uvs: None, smooth: false, material: 0 }), placements: 2, shared: false, displaced: false } +provenance mesh slot 2: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 1739488954094729910, n_points: 8, n_indices: 24, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 3: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 6096447469814747168, n_points: 400, n_indices: 1600, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/scene/camera1"), cameras: ["/scene/camera1"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/scene/camera1"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/cornellbox_usda-96761b8033e5fb3c-1.image b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-96761b8033e5fb3c-1.image new file mode 100644 index 000000000..ba4884437 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-96761b8033e5fb3c-1.image @@ -0,0 +1 @@ +640x360 16spp clamp-off 52a1a46f3a46d230 diff --git a/crates/crust-core/tests/data/import_baselines/cornellbox_usda-987ee05acd715dfa-1.digest b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-987ee05acd715dfa-1.digest new file mode 100644 index 000000000..1d5ab0cab --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-987ee05acd715dfa-1.digest @@ -0,0 +1,39 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/scene/camera1") +camera: Camera { origin: Vec3A(0.0074343784, 1.9913422, 4.0133057), lower_left_corner: Vec3A(-8.881443, -3.0086517, -0.98669434), horizontal: Vec3A(17.777756, 0.0, 0.0), vertical: Vec3A(0.0, 9.999988, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: Some(Vec4(0.0, 0.0, -1.0, 3.9133058)), far: Some(Vec4(0.0, 0.0, 1.0, 9995.986)), planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: None +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 640, height: 360, region: PixelRect { x0: 0, y0: 0, x1: 640, y1: 360 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 12.700017, aperture: [25.4, 25.4], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 5.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/cornellbox.usda"], invisible_overrides: Some(0) } +layer: $DIR/cornellbox.usda +warning: Warning { code: MaterialFallbackDefault, kind: Skipped, count: 1, prims: ["/scene/Looks/initialShadingGroup"], message: "Material /scene/Looks/initialShadingGroup has no surface shader — using default grey OpenPBR" } +lights: 1 +light 0: dome name Some("/scene/Sky") lpe None pmf 1.0 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 5 geometries, PrimitiveBreakdown { triangles: 822, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 2 } top level, PrimitiveBreakdown { triangles: 1582, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 2 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 4.0 motion [] pieces all=10:88b22fc3345d5b05 camera=10:88b22fc3345d5b05 shadow=10:88b22fc3345d5b05 indirect=10:88b22fc3345d5b05 +geom 1: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.2 motion [] pieces all=760:c2b60a75c52c78b9 camera=760:c2b60a75c52c78b9 shadow=760:c2b60a75c52c78b9 indirect=760:c2b60a75c52c78b9 +geom 2: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=12:94a297badef437e1 camera=12:94a297badef437e1 shadow=12:94a297badef437e1 indirect=12:94a297badef437e1 +geom 3: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.25 motion [] pieces all=800:4a8c9f44d777e131 camera=800:4a8c9f44d777e131 shadow=800:4a8c9f44d777e131 indirect=800:4a8c9f44d777e131 +geom 4: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.3585339 motion [] pieces all=760:2344ecf63e12c441 camera=760:2344ecf63e12c441 shadow=760:2344ecf63e12c441 indirect=760:2344ecf63e12c441 +provenance material /scene/Looks/initialShadingGroup: MaterialOrigin { slots: [0, 1, 2, 3, 4], displaced: false } +provenance light /scene/Sky: LightOrigin { index: 0, geoms: 0..0 } +provenance geometry 0..1: /scene/pCube1 +provenance geometry 1..2: /scene/pSphere1 +provenance geometry 2..3: /scene/pCube2 +provenance geometry 3..4: /scene/pTorus1 +provenance geometry 4..5: /scene/pSphere2 +provenance mesh: MeshOrigin { geom_id: 0, slot: 0, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 1, slot: 1, baked: false, moving: false } +provenance mesh: MeshOrigin { geom_id: 2, slot: 2, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 3, slot: 3, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 4, slot: 1, baked: false, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 12343188411137242430, n_points: 8, n_indices: 20, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 1: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 17119738035130870988, n_points: 382, n_indices: 1560, n_uvs: None, smooth: false, material: 0 }), placements: 2, shared: false, displaced: false } +provenance mesh slot 2: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 1739488954094729910, n_points: 8, n_indices: 24, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 3: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 6096447469814747168, n_points: 400, n_indices: 1600, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: true, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/scene/camera1"), cameras: ["/scene/camera1"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/scene/camera1"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/cornellbox_usda-987ee05acd715dfa-1.image b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-987ee05acd715dfa-1.image new file mode 100644 index 000000000..7172edbfe --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-987ee05acd715dfa-1.image @@ -0,0 +1 @@ +640x360 16spp clamp-off 64ede904b11bab22 diff --git a/crates/crust-core/tests/data/import_baselines/cornellbox_usda-99aef82ca410b677-1.digest b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-99aef82ca410b677-1.digest new file mode 100644 index 000000000..be9190bf7 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-99aef82ca410b677-1.digest @@ -0,0 +1,40 @@ +time: Some(42.0) +working space: Linear Rec.709 (sRGB) +camera path: Some("/scene/camera1") +camera: Camera { origin: Vec3A(0.0074343784, 1.9913422, 4.0133057), lower_left_corner: Vec3A(-8.881443, -3.0086517, -0.98669434), horizontal: Vec3A(17.777756, 0.0, 0.0), vertical: Vec3A(0.0, 9.999988, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: Some(Vec4(0.0, 0.0, -1.0, 3.9133058)), far: Some(Vec4(0.0, 0.0, 1.0, 9995.986)), planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: None +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 640, height: 360, region: PixelRect { x0: 0, y0: 0, x1: 640, y1: 360 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 42, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 12.700017, aperture: [25.4, 25.4], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 5.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/cornellbox.usda"], invisible_overrides: Some(0) } +layer: $DIR/cornellbox.usda +warning: Warning { code: AssetUnsupportedByHost, kind: Skipped, count: 1, prims: [], message: "No asset loader: environment map $DIR/sky_gradient.exr ignored — the dome falls back to its uniform colour. Use Scene::from_usd_with_assets to supply one." } +warning: Warning { code: MaterialFallbackDefault, kind: Skipped, count: 1, prims: ["/scene/Looks/initialShadingGroup"], message: "Material /scene/Looks/initialShadingGroup has no surface shader — using default grey OpenPBR" } +lights: 1 +light 0: dome name Some("/scene/Sky") lpe None pmf 1.0 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 5 geometries, PrimitiveBreakdown { triangles: 822, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 2 } top level, PrimitiveBreakdown { triangles: 1582, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 2 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 4.0 motion [] pieces all=10:88b22fc3345d5b05 camera=10:88b22fc3345d5b05 shadow=10:88b22fc3345d5b05 indirect=10:88b22fc3345d5b05 +geom 1: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.2 motion [] pieces all=760:c2b60a75c52c78b9 camera=760:c2b60a75c52c78b9 shadow=760:c2b60a75c52c78b9 indirect=760:c2b60a75c52c78b9 +geom 2: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=12:94a297badef437e1 camera=12:94a297badef437e1 shadow=12:94a297badef437e1 indirect=12:94a297badef437e1 +geom 3: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.25 motion [] pieces all=800:4a8c9f44d777e131 camera=800:4a8c9f44d777e131 shadow=800:4a8c9f44d777e131 indirect=800:4a8c9f44d777e131 +geom 4: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.3585339 motion [] pieces all=760:2344ecf63e12c441 camera=760:2344ecf63e12c441 shadow=760:2344ecf63e12c441 indirect=760:2344ecf63e12c441 +provenance material /scene/Looks/initialShadingGroup: MaterialOrigin { slots: [0, 1, 2, 3, 4], displaced: false } +provenance light /scene/Sky: LightOrigin { index: 0, geoms: 0..0 } +provenance geometry 0..1: /scene/pCube1 +provenance geometry 1..2: /scene/pSphere1 +provenance geometry 2..3: /scene/pCube2 +provenance geometry 3..4: /scene/pTorus1 +provenance geometry 4..5: /scene/pSphere2 +provenance mesh: MeshOrigin { geom_id: 0, slot: 0, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 1, slot: 1, baked: false, moving: false } +provenance mesh: MeshOrigin { geom_id: 2, slot: 2, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 3, slot: 3, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 4, slot: 1, baked: false, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 12343188411137242430, n_points: 8, n_indices: 20, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 1: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 17119738035130870988, n_points: 382, n_indices: 1560, n_uvs: None, smooth: false, material: 0 }), placements: 2, shared: false, displaced: false } +provenance mesh slot 2: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 1739488954094729910, n_points: 8, n_indices: 24, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 3: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 6096447469814747168, n_points: 400, n_indices: 1600, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: Some(42.0), camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/scene/camera1"), cameras: ["/scene/camera1"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/scene/camera1"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/cornellbox_usda-99aef82ca410b677-1.image b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-99aef82ca410b677-1.image new file mode 100644 index 000000000..19d12aa0f --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-99aef82ca410b677-1.image @@ -0,0 +1 @@ +640x360 16spp clamp-off b5b042e3c8cb3b9b diff --git a/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9a0515f0d918dd40-1.digest b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9a0515f0d918dd40-1.digest new file mode 100644 index 000000000..0b46339e4 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9a0515f0d918dd40-1.digest @@ -0,0 +1,40 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/scene/camera1") +camera: Camera { origin: Vec3A(0.0074343784, 1.9913422, 4.0133057), lower_left_corner: Vec3A(-8.881443, -3.0086517, -0.98669434), horizontal: Vec3A(17.777756, 0.0, 0.0), vertical: Vec3A(0.0, 9.999988, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: Some(Vec4(0.0, 0.0, -1.0, 3.9133058)), far: Some(Vec4(0.0, 0.0, 1.0, 9995.986)), planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: None +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 640, height: 360, region: PixelRect { x0: 0, y0: 0, x1: 640, y1: 360 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 12.700017, aperture: [25.4, 25.4], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 5.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/cornellbox.usda"], invisible_overrides: Some(0) } +layer: $DIR/cornellbox.usda +warning: Warning { code: AssetUnsupportedByHost, kind: Skipped, count: 1, prims: [], message: "No asset loader: environment map $DIR/sky_gradient.exr ignored — the dome falls back to its uniform colour. Use Scene::from_usd_with_assets to supply one." } +warning: Warning { code: MaterialFallbackDefault, kind: Skipped, count: 1, prims: ["/scene/Looks/initialShadingGroup"], message: "Material /scene/Looks/initialShadingGroup has no surface shader — using default grey OpenPBR" } +lights: 1 +light 0: dome name Some("/scene/Sky") lpe None pmf 1.0 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 5 geometries, PrimitiveBreakdown { triangles: 822, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 2 } top level, PrimitiveBreakdown { triangles: 1582, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 2 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 4.0 motion [] pieces all=10:88b22fc3345d5b05 camera=10:88b22fc3345d5b05 shadow=10:88b22fc3345d5b05 indirect=10:88b22fc3345d5b05 +geom 1: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.2 motion [] pieces all=760:c2b60a75c52c78b9 camera=760:c2b60a75c52c78b9 shadow=760:c2b60a75c52c78b9 indirect=760:c2b60a75c52c78b9 +geom 2: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=12:94a297badef437e1 camera=12:94a297badef437e1 shadow=12:94a297badef437e1 indirect=12:94a297badef437e1 +geom 3: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.25 motion [] pieces all=800:4a8c9f44d777e131 camera=800:4a8c9f44d777e131 shadow=800:4a8c9f44d777e131 indirect=800:4a8c9f44d777e131 +geom 4: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.3585339 motion [] pieces all=760:2344ecf63e12c441 camera=760:2344ecf63e12c441 shadow=760:2344ecf63e12c441 indirect=760:2344ecf63e12c441 +provenance material /scene/Looks/initialShadingGroup: MaterialOrigin { slots: [0, 1, 2, 3, 4], displaced: false } +provenance light /scene/Sky: LightOrigin { index: 0, geoms: 0..0 } +provenance geometry 0..1: /scene/pCube1 +provenance geometry 1..2: /scene/pSphere1 +provenance geometry 2..3: /scene/pCube2 +provenance geometry 3..4: /scene/pTorus1 +provenance geometry 4..5: /scene/pSphere2 +provenance mesh: MeshOrigin { geom_id: 0, slot: 0, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 1, slot: 1, baked: false, moving: false } +provenance mesh: MeshOrigin { geom_id: 2, slot: 2, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 3, slot: 3, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 4, slot: 1, baked: false, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 12343188411137242430, n_points: 8, n_indices: 20, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 1: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 17119738035130870988, n_points: 382, n_indices: 1560, n_uvs: None, smooth: false, material: 0 }), placements: 2, shared: false, displaced: false } +provenance mesh slot 2: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 1739488954094729910, n_points: 8, n_indices: 24, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 3: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 6096447469814747168, n_points: 400, n_indices: 1600, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: true, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/scene/camera1"), cameras: ["/scene/camera1"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/scene/camera1"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9a0515f0d918dd40-1.image b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9a0515f0d918dd40-1.image new file mode 100644 index 000000000..ba4884437 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9a0515f0d918dd40-1.image @@ -0,0 +1 @@ +640x360 16spp clamp-off 52a1a46f3a46d230 diff --git a/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-1.digest b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-1.digest new file mode 100644 index 000000000..0e859a952 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-1.digest @@ -0,0 +1,40 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/scene/camera1") +camera: Camera { origin: Vec3A(0.0074343784, 1.9913422, 4.0133057), lower_left_corner: Vec3A(-8.881443, -3.0086517, -0.98669434), horizontal: Vec3A(17.777756, 0.0, 0.0), vertical: Vec3A(0.0, 9.999988, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: Some(Vec4(0.0, 0.0, -1.0, 3.9133058)), far: Some(Vec4(0.0, 0.0, 1.0, 9995.986)), planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: None +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 640, height: 360, region: PixelRect { x0: 0, y0: 0, x1: 640, y1: 360 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 12.700017, aperture: [25.4, 25.4], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 5.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/cornellbox.usda"], invisible_overrides: Some(0) } +layer: $DIR/cornellbox.usda +warning: Warning { code: AssetUnsupportedByHost, kind: Skipped, count: 1, prims: [], message: "No asset loader: environment map $DIR/sky_gradient.exr ignored — the dome falls back to its uniform colour. Use Scene::from_usd_with_assets to supply one." } +warning: Warning { code: MaterialFallbackDefault, kind: Skipped, count: 1, prims: ["/scene/Looks/initialShadingGroup"], message: "Material /scene/Looks/initialShadingGroup has no surface shader — using default grey OpenPBR" } +lights: 1 +light 0: dome name Some("/scene/Sky") lpe None pmf 1.0 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 5 geometries, PrimitiveBreakdown { triangles: 822, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 2 } top level, PrimitiveBreakdown { triangles: 1582, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 2 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 4.0 motion [] pieces all=10:88b22fc3345d5b05 camera=10:88b22fc3345d5b05 shadow=10:88b22fc3345d5b05 indirect=10:88b22fc3345d5b05 +geom 1: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.2 motion [] pieces all=760:c2b60a75c52c78b9 camera=760:c2b60a75c52c78b9 shadow=760:c2b60a75c52c78b9 indirect=760:c2b60a75c52c78b9 +geom 2: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=12:94a297badef437e1 camera=12:94a297badef437e1 shadow=12:94a297badef437e1 indirect=12:94a297badef437e1 +geom 3: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.25 motion [] pieces all=800:4a8c9f44d777e131 camera=800:4a8c9f44d777e131 shadow=800:4a8c9f44d777e131 indirect=800:4a8c9f44d777e131 +geom 4: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.3585339 motion [] pieces all=760:2344ecf63e12c441 camera=760:2344ecf63e12c441 shadow=760:2344ecf63e12c441 indirect=760:2344ecf63e12c441 +provenance material /scene/Looks/initialShadingGroup: MaterialOrigin { slots: [0, 1, 2, 3, 4], displaced: false } +provenance light /scene/Sky: LightOrigin { index: 0, geoms: 0..0 } +provenance geometry 0..1: /scene/pCube1 +provenance geometry 1..2: /scene/pSphere1 +provenance geometry 2..3: /scene/pCube2 +provenance geometry 3..4: /scene/pTorus1 +provenance geometry 4..5: /scene/pSphere2 +provenance mesh: MeshOrigin { geom_id: 0, slot: 0, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 1, slot: 1, baked: false, moving: false } +provenance mesh: MeshOrigin { geom_id: 2, slot: 2, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 3, slot: 3, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 4, slot: 1, baked: false, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 12343188411137242430, n_points: 8, n_indices: 20, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 1: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 17119738035130870988, n_points: 382, n_indices: 1560, n_uvs: None, smooth: false, material: 0 }), placements: 2, shared: false, displaced: false } +provenance mesh slot 2: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 1739488954094729910, n_points: 8, n_indices: 24, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 3: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 6096447469814747168, n_points: 400, n_indices: 1600, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/scene/camera1"), cameras: ["/scene/camera1"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/scene/camera1"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-1.image b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-1.image new file mode 100644 index 000000000..ba4884437 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-1.image @@ -0,0 +1 @@ +640x360 16spp clamp-off 52a1a46f3a46d230 diff --git a/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-10.digest b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-10.digest new file mode 100644 index 000000000..0e859a952 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-10.digest @@ -0,0 +1,40 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/scene/camera1") +camera: Camera { origin: Vec3A(0.0074343784, 1.9913422, 4.0133057), lower_left_corner: Vec3A(-8.881443, -3.0086517, -0.98669434), horizontal: Vec3A(17.777756, 0.0, 0.0), vertical: Vec3A(0.0, 9.999988, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: Some(Vec4(0.0, 0.0, -1.0, 3.9133058)), far: Some(Vec4(0.0, 0.0, 1.0, 9995.986)), planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: None +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 640, height: 360, region: PixelRect { x0: 0, y0: 0, x1: 640, y1: 360 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 12.700017, aperture: [25.4, 25.4], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 5.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/cornellbox.usda"], invisible_overrides: Some(0) } +layer: $DIR/cornellbox.usda +warning: Warning { code: AssetUnsupportedByHost, kind: Skipped, count: 1, prims: [], message: "No asset loader: environment map $DIR/sky_gradient.exr ignored — the dome falls back to its uniform colour. Use Scene::from_usd_with_assets to supply one." } +warning: Warning { code: MaterialFallbackDefault, kind: Skipped, count: 1, prims: ["/scene/Looks/initialShadingGroup"], message: "Material /scene/Looks/initialShadingGroup has no surface shader — using default grey OpenPBR" } +lights: 1 +light 0: dome name Some("/scene/Sky") lpe None pmf 1.0 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 5 geometries, PrimitiveBreakdown { triangles: 822, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 2 } top level, PrimitiveBreakdown { triangles: 1582, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 2 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 4.0 motion [] pieces all=10:88b22fc3345d5b05 camera=10:88b22fc3345d5b05 shadow=10:88b22fc3345d5b05 indirect=10:88b22fc3345d5b05 +geom 1: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.2 motion [] pieces all=760:c2b60a75c52c78b9 camera=760:c2b60a75c52c78b9 shadow=760:c2b60a75c52c78b9 indirect=760:c2b60a75c52c78b9 +geom 2: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=12:94a297badef437e1 camera=12:94a297badef437e1 shadow=12:94a297badef437e1 indirect=12:94a297badef437e1 +geom 3: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.25 motion [] pieces all=800:4a8c9f44d777e131 camera=800:4a8c9f44d777e131 shadow=800:4a8c9f44d777e131 indirect=800:4a8c9f44d777e131 +geom 4: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.3585339 motion [] pieces all=760:2344ecf63e12c441 camera=760:2344ecf63e12c441 shadow=760:2344ecf63e12c441 indirect=760:2344ecf63e12c441 +provenance material /scene/Looks/initialShadingGroup: MaterialOrigin { slots: [0, 1, 2, 3, 4], displaced: false } +provenance light /scene/Sky: LightOrigin { index: 0, geoms: 0..0 } +provenance geometry 0..1: /scene/pCube1 +provenance geometry 1..2: /scene/pSphere1 +provenance geometry 2..3: /scene/pCube2 +provenance geometry 3..4: /scene/pTorus1 +provenance geometry 4..5: /scene/pSphere2 +provenance mesh: MeshOrigin { geom_id: 0, slot: 0, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 1, slot: 1, baked: false, moving: false } +provenance mesh: MeshOrigin { geom_id: 2, slot: 2, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 3, slot: 3, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 4, slot: 1, baked: false, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 12343188411137242430, n_points: 8, n_indices: 20, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 1: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 17119738035130870988, n_points: 382, n_indices: 1560, n_uvs: None, smooth: false, material: 0 }), placements: 2, shared: false, displaced: false } +provenance mesh slot 2: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 1739488954094729910, n_points: 8, n_indices: 24, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 3: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 6096447469814747168, n_points: 400, n_indices: 1600, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/scene/camera1"), cameras: ["/scene/camera1"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/scene/camera1"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-10.image b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-10.image new file mode 100644 index 000000000..ba4884437 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-10.image @@ -0,0 +1 @@ +640x360 16spp clamp-off 52a1a46f3a46d230 diff --git a/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-100.digest b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-100.digest new file mode 100644 index 000000000..0e859a952 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-100.digest @@ -0,0 +1,40 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/scene/camera1") +camera: Camera { origin: Vec3A(0.0074343784, 1.9913422, 4.0133057), lower_left_corner: Vec3A(-8.881443, -3.0086517, -0.98669434), horizontal: Vec3A(17.777756, 0.0, 0.0), vertical: Vec3A(0.0, 9.999988, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: Some(Vec4(0.0, 0.0, -1.0, 3.9133058)), far: Some(Vec4(0.0, 0.0, 1.0, 9995.986)), planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: None +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 640, height: 360, region: PixelRect { x0: 0, y0: 0, x1: 640, y1: 360 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 12.700017, aperture: [25.4, 25.4], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 5.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/cornellbox.usda"], invisible_overrides: Some(0) } +layer: $DIR/cornellbox.usda +warning: Warning { code: AssetUnsupportedByHost, kind: Skipped, count: 1, prims: [], message: "No asset loader: environment map $DIR/sky_gradient.exr ignored — the dome falls back to its uniform colour. Use Scene::from_usd_with_assets to supply one." } +warning: Warning { code: MaterialFallbackDefault, kind: Skipped, count: 1, prims: ["/scene/Looks/initialShadingGroup"], message: "Material /scene/Looks/initialShadingGroup has no surface shader — using default grey OpenPBR" } +lights: 1 +light 0: dome name Some("/scene/Sky") lpe None pmf 1.0 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 5 geometries, PrimitiveBreakdown { triangles: 822, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 2 } top level, PrimitiveBreakdown { triangles: 1582, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 2 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 4.0 motion [] pieces all=10:88b22fc3345d5b05 camera=10:88b22fc3345d5b05 shadow=10:88b22fc3345d5b05 indirect=10:88b22fc3345d5b05 +geom 1: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.2 motion [] pieces all=760:c2b60a75c52c78b9 camera=760:c2b60a75c52c78b9 shadow=760:c2b60a75c52c78b9 indirect=760:c2b60a75c52c78b9 +geom 2: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=12:94a297badef437e1 camera=12:94a297badef437e1 shadow=12:94a297badef437e1 indirect=12:94a297badef437e1 +geom 3: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.25 motion [] pieces all=800:4a8c9f44d777e131 camera=800:4a8c9f44d777e131 shadow=800:4a8c9f44d777e131 indirect=800:4a8c9f44d777e131 +geom 4: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.3585339 motion [] pieces all=760:2344ecf63e12c441 camera=760:2344ecf63e12c441 shadow=760:2344ecf63e12c441 indirect=760:2344ecf63e12c441 +provenance material /scene/Looks/initialShadingGroup: MaterialOrigin { slots: [0, 1, 2, 3, 4], displaced: false } +provenance light /scene/Sky: LightOrigin { index: 0, geoms: 0..0 } +provenance geometry 0..1: /scene/pCube1 +provenance geometry 1..2: /scene/pSphere1 +provenance geometry 2..3: /scene/pCube2 +provenance geometry 3..4: /scene/pTorus1 +provenance geometry 4..5: /scene/pSphere2 +provenance mesh: MeshOrigin { geom_id: 0, slot: 0, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 1, slot: 1, baked: false, moving: false } +provenance mesh: MeshOrigin { geom_id: 2, slot: 2, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 3, slot: 3, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 4, slot: 1, baked: false, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 12343188411137242430, n_points: 8, n_indices: 20, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 1: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 17119738035130870988, n_points: 382, n_indices: 1560, n_uvs: None, smooth: false, material: 0 }), placements: 2, shared: false, displaced: false } +provenance mesh slot 2: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 1739488954094729910, n_points: 8, n_indices: 24, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 3: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 6096447469814747168, n_points: 400, n_indices: 1600, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/scene/camera1"), cameras: ["/scene/camera1"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/scene/camera1"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-100.image b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-100.image new file mode 100644 index 000000000..ba4884437 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-100.image @@ -0,0 +1 @@ +640x360 16spp clamp-off 52a1a46f3a46d230 diff --git a/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-101.digest b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-101.digest new file mode 100644 index 000000000..0e859a952 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-101.digest @@ -0,0 +1,40 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/scene/camera1") +camera: Camera { origin: Vec3A(0.0074343784, 1.9913422, 4.0133057), lower_left_corner: Vec3A(-8.881443, -3.0086517, -0.98669434), horizontal: Vec3A(17.777756, 0.0, 0.0), vertical: Vec3A(0.0, 9.999988, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: Some(Vec4(0.0, 0.0, -1.0, 3.9133058)), far: Some(Vec4(0.0, 0.0, 1.0, 9995.986)), planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: None +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 640, height: 360, region: PixelRect { x0: 0, y0: 0, x1: 640, y1: 360 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 12.700017, aperture: [25.4, 25.4], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 5.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/cornellbox.usda"], invisible_overrides: Some(0) } +layer: $DIR/cornellbox.usda +warning: Warning { code: AssetUnsupportedByHost, kind: Skipped, count: 1, prims: [], message: "No asset loader: environment map $DIR/sky_gradient.exr ignored — the dome falls back to its uniform colour. Use Scene::from_usd_with_assets to supply one." } +warning: Warning { code: MaterialFallbackDefault, kind: Skipped, count: 1, prims: ["/scene/Looks/initialShadingGroup"], message: "Material /scene/Looks/initialShadingGroup has no surface shader — using default grey OpenPBR" } +lights: 1 +light 0: dome name Some("/scene/Sky") lpe None pmf 1.0 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 5 geometries, PrimitiveBreakdown { triangles: 822, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 2 } top level, PrimitiveBreakdown { triangles: 1582, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 2 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 4.0 motion [] pieces all=10:88b22fc3345d5b05 camera=10:88b22fc3345d5b05 shadow=10:88b22fc3345d5b05 indirect=10:88b22fc3345d5b05 +geom 1: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.2 motion [] pieces all=760:c2b60a75c52c78b9 camera=760:c2b60a75c52c78b9 shadow=760:c2b60a75c52c78b9 indirect=760:c2b60a75c52c78b9 +geom 2: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=12:94a297badef437e1 camera=12:94a297badef437e1 shadow=12:94a297badef437e1 indirect=12:94a297badef437e1 +geom 3: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.25 motion [] pieces all=800:4a8c9f44d777e131 camera=800:4a8c9f44d777e131 shadow=800:4a8c9f44d777e131 indirect=800:4a8c9f44d777e131 +geom 4: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.3585339 motion [] pieces all=760:2344ecf63e12c441 camera=760:2344ecf63e12c441 shadow=760:2344ecf63e12c441 indirect=760:2344ecf63e12c441 +provenance material /scene/Looks/initialShadingGroup: MaterialOrigin { slots: [0, 1, 2, 3, 4], displaced: false } +provenance light /scene/Sky: LightOrigin { index: 0, geoms: 0..0 } +provenance geometry 0..1: /scene/pCube1 +provenance geometry 1..2: /scene/pSphere1 +provenance geometry 2..3: /scene/pCube2 +provenance geometry 3..4: /scene/pTorus1 +provenance geometry 4..5: /scene/pSphere2 +provenance mesh: MeshOrigin { geom_id: 0, slot: 0, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 1, slot: 1, baked: false, moving: false } +provenance mesh: MeshOrigin { geom_id: 2, slot: 2, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 3, slot: 3, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 4, slot: 1, baked: false, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 12343188411137242430, n_points: 8, n_indices: 20, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 1: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 17119738035130870988, n_points: 382, n_indices: 1560, n_uvs: None, smooth: false, material: 0 }), placements: 2, shared: false, displaced: false } +provenance mesh slot 2: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 1739488954094729910, n_points: 8, n_indices: 24, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 3: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 6096447469814747168, n_points: 400, n_indices: 1600, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/scene/camera1"), cameras: ["/scene/camera1"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/scene/camera1"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-101.image b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-101.image new file mode 100644 index 000000000..ba4884437 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-101.image @@ -0,0 +1 @@ +640x360 16spp clamp-off 52a1a46f3a46d230 diff --git a/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-102.digest b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-102.digest new file mode 100644 index 000000000..0e859a952 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-102.digest @@ -0,0 +1,40 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/scene/camera1") +camera: Camera { origin: Vec3A(0.0074343784, 1.9913422, 4.0133057), lower_left_corner: Vec3A(-8.881443, -3.0086517, -0.98669434), horizontal: Vec3A(17.777756, 0.0, 0.0), vertical: Vec3A(0.0, 9.999988, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: Some(Vec4(0.0, 0.0, -1.0, 3.9133058)), far: Some(Vec4(0.0, 0.0, 1.0, 9995.986)), planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: None +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 640, height: 360, region: PixelRect { x0: 0, y0: 0, x1: 640, y1: 360 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 12.700017, aperture: [25.4, 25.4], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 5.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/cornellbox.usda"], invisible_overrides: Some(0) } +layer: $DIR/cornellbox.usda +warning: Warning { code: AssetUnsupportedByHost, kind: Skipped, count: 1, prims: [], message: "No asset loader: environment map $DIR/sky_gradient.exr ignored — the dome falls back to its uniform colour. Use Scene::from_usd_with_assets to supply one." } +warning: Warning { code: MaterialFallbackDefault, kind: Skipped, count: 1, prims: ["/scene/Looks/initialShadingGroup"], message: "Material /scene/Looks/initialShadingGroup has no surface shader — using default grey OpenPBR" } +lights: 1 +light 0: dome name Some("/scene/Sky") lpe None pmf 1.0 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 5 geometries, PrimitiveBreakdown { triangles: 822, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 2 } top level, PrimitiveBreakdown { triangles: 1582, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 2 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 4.0 motion [] pieces all=10:88b22fc3345d5b05 camera=10:88b22fc3345d5b05 shadow=10:88b22fc3345d5b05 indirect=10:88b22fc3345d5b05 +geom 1: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.2 motion [] pieces all=760:c2b60a75c52c78b9 camera=760:c2b60a75c52c78b9 shadow=760:c2b60a75c52c78b9 indirect=760:c2b60a75c52c78b9 +geom 2: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=12:94a297badef437e1 camera=12:94a297badef437e1 shadow=12:94a297badef437e1 indirect=12:94a297badef437e1 +geom 3: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.25 motion [] pieces all=800:4a8c9f44d777e131 camera=800:4a8c9f44d777e131 shadow=800:4a8c9f44d777e131 indirect=800:4a8c9f44d777e131 +geom 4: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.3585339 motion [] pieces all=760:2344ecf63e12c441 camera=760:2344ecf63e12c441 shadow=760:2344ecf63e12c441 indirect=760:2344ecf63e12c441 +provenance material /scene/Looks/initialShadingGroup: MaterialOrigin { slots: [0, 1, 2, 3, 4], displaced: false } +provenance light /scene/Sky: LightOrigin { index: 0, geoms: 0..0 } +provenance geometry 0..1: /scene/pCube1 +provenance geometry 1..2: /scene/pSphere1 +provenance geometry 2..3: /scene/pCube2 +provenance geometry 3..4: /scene/pTorus1 +provenance geometry 4..5: /scene/pSphere2 +provenance mesh: MeshOrigin { geom_id: 0, slot: 0, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 1, slot: 1, baked: false, moving: false } +provenance mesh: MeshOrigin { geom_id: 2, slot: 2, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 3, slot: 3, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 4, slot: 1, baked: false, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 12343188411137242430, n_points: 8, n_indices: 20, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 1: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 17119738035130870988, n_points: 382, n_indices: 1560, n_uvs: None, smooth: false, material: 0 }), placements: 2, shared: false, displaced: false } +provenance mesh slot 2: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 1739488954094729910, n_points: 8, n_indices: 24, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 3: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 6096447469814747168, n_points: 400, n_indices: 1600, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/scene/camera1"), cameras: ["/scene/camera1"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/scene/camera1"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-102.image b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-102.image new file mode 100644 index 000000000..ba4884437 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-102.image @@ -0,0 +1 @@ +640x360 16spp clamp-off 52a1a46f3a46d230 diff --git a/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-103.digest b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-103.digest new file mode 100644 index 000000000..0e859a952 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-103.digest @@ -0,0 +1,40 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/scene/camera1") +camera: Camera { origin: Vec3A(0.0074343784, 1.9913422, 4.0133057), lower_left_corner: Vec3A(-8.881443, -3.0086517, -0.98669434), horizontal: Vec3A(17.777756, 0.0, 0.0), vertical: Vec3A(0.0, 9.999988, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: Some(Vec4(0.0, 0.0, -1.0, 3.9133058)), far: Some(Vec4(0.0, 0.0, 1.0, 9995.986)), planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: None +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 640, height: 360, region: PixelRect { x0: 0, y0: 0, x1: 640, y1: 360 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 12.700017, aperture: [25.4, 25.4], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 5.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/cornellbox.usda"], invisible_overrides: Some(0) } +layer: $DIR/cornellbox.usda +warning: Warning { code: AssetUnsupportedByHost, kind: Skipped, count: 1, prims: [], message: "No asset loader: environment map $DIR/sky_gradient.exr ignored — the dome falls back to its uniform colour. Use Scene::from_usd_with_assets to supply one." } +warning: Warning { code: MaterialFallbackDefault, kind: Skipped, count: 1, prims: ["/scene/Looks/initialShadingGroup"], message: "Material /scene/Looks/initialShadingGroup has no surface shader — using default grey OpenPBR" } +lights: 1 +light 0: dome name Some("/scene/Sky") lpe None pmf 1.0 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 5 geometries, PrimitiveBreakdown { triangles: 822, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 2 } top level, PrimitiveBreakdown { triangles: 1582, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 2 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 4.0 motion [] pieces all=10:88b22fc3345d5b05 camera=10:88b22fc3345d5b05 shadow=10:88b22fc3345d5b05 indirect=10:88b22fc3345d5b05 +geom 1: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.2 motion [] pieces all=760:c2b60a75c52c78b9 camera=760:c2b60a75c52c78b9 shadow=760:c2b60a75c52c78b9 indirect=760:c2b60a75c52c78b9 +geom 2: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=12:94a297badef437e1 camera=12:94a297badef437e1 shadow=12:94a297badef437e1 indirect=12:94a297badef437e1 +geom 3: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.25 motion [] pieces all=800:4a8c9f44d777e131 camera=800:4a8c9f44d777e131 shadow=800:4a8c9f44d777e131 indirect=800:4a8c9f44d777e131 +geom 4: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.3585339 motion [] pieces all=760:2344ecf63e12c441 camera=760:2344ecf63e12c441 shadow=760:2344ecf63e12c441 indirect=760:2344ecf63e12c441 +provenance material /scene/Looks/initialShadingGroup: MaterialOrigin { slots: [0, 1, 2, 3, 4], displaced: false } +provenance light /scene/Sky: LightOrigin { index: 0, geoms: 0..0 } +provenance geometry 0..1: /scene/pCube1 +provenance geometry 1..2: /scene/pSphere1 +provenance geometry 2..3: /scene/pCube2 +provenance geometry 3..4: /scene/pTorus1 +provenance geometry 4..5: /scene/pSphere2 +provenance mesh: MeshOrigin { geom_id: 0, slot: 0, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 1, slot: 1, baked: false, moving: false } +provenance mesh: MeshOrigin { geom_id: 2, slot: 2, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 3, slot: 3, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 4, slot: 1, baked: false, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 12343188411137242430, n_points: 8, n_indices: 20, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 1: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 17119738035130870988, n_points: 382, n_indices: 1560, n_uvs: None, smooth: false, material: 0 }), placements: 2, shared: false, displaced: false } +provenance mesh slot 2: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 1739488954094729910, n_points: 8, n_indices: 24, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 3: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 6096447469814747168, n_points: 400, n_indices: 1600, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/scene/camera1"), cameras: ["/scene/camera1"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/scene/camera1"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-103.image b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-103.image new file mode 100644 index 000000000..ba4884437 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-103.image @@ -0,0 +1 @@ +640x360 16spp clamp-off 52a1a46f3a46d230 diff --git a/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-104.digest b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-104.digest new file mode 100644 index 000000000..0e859a952 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-104.digest @@ -0,0 +1,40 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/scene/camera1") +camera: Camera { origin: Vec3A(0.0074343784, 1.9913422, 4.0133057), lower_left_corner: Vec3A(-8.881443, -3.0086517, -0.98669434), horizontal: Vec3A(17.777756, 0.0, 0.0), vertical: Vec3A(0.0, 9.999988, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: Some(Vec4(0.0, 0.0, -1.0, 3.9133058)), far: Some(Vec4(0.0, 0.0, 1.0, 9995.986)), planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: None +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 640, height: 360, region: PixelRect { x0: 0, y0: 0, x1: 640, y1: 360 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 12.700017, aperture: [25.4, 25.4], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 5.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/cornellbox.usda"], invisible_overrides: Some(0) } +layer: $DIR/cornellbox.usda +warning: Warning { code: AssetUnsupportedByHost, kind: Skipped, count: 1, prims: [], message: "No asset loader: environment map $DIR/sky_gradient.exr ignored — the dome falls back to its uniform colour. Use Scene::from_usd_with_assets to supply one." } +warning: Warning { code: MaterialFallbackDefault, kind: Skipped, count: 1, prims: ["/scene/Looks/initialShadingGroup"], message: "Material /scene/Looks/initialShadingGroup has no surface shader — using default grey OpenPBR" } +lights: 1 +light 0: dome name Some("/scene/Sky") lpe None pmf 1.0 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 5 geometries, PrimitiveBreakdown { triangles: 822, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 2 } top level, PrimitiveBreakdown { triangles: 1582, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 2 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 4.0 motion [] pieces all=10:88b22fc3345d5b05 camera=10:88b22fc3345d5b05 shadow=10:88b22fc3345d5b05 indirect=10:88b22fc3345d5b05 +geom 1: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.2 motion [] pieces all=760:c2b60a75c52c78b9 camera=760:c2b60a75c52c78b9 shadow=760:c2b60a75c52c78b9 indirect=760:c2b60a75c52c78b9 +geom 2: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=12:94a297badef437e1 camera=12:94a297badef437e1 shadow=12:94a297badef437e1 indirect=12:94a297badef437e1 +geom 3: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.25 motion [] pieces all=800:4a8c9f44d777e131 camera=800:4a8c9f44d777e131 shadow=800:4a8c9f44d777e131 indirect=800:4a8c9f44d777e131 +geom 4: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.3585339 motion [] pieces all=760:2344ecf63e12c441 camera=760:2344ecf63e12c441 shadow=760:2344ecf63e12c441 indirect=760:2344ecf63e12c441 +provenance material /scene/Looks/initialShadingGroup: MaterialOrigin { slots: [0, 1, 2, 3, 4], displaced: false } +provenance light /scene/Sky: LightOrigin { index: 0, geoms: 0..0 } +provenance geometry 0..1: /scene/pCube1 +provenance geometry 1..2: /scene/pSphere1 +provenance geometry 2..3: /scene/pCube2 +provenance geometry 3..4: /scene/pTorus1 +provenance geometry 4..5: /scene/pSphere2 +provenance mesh: MeshOrigin { geom_id: 0, slot: 0, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 1, slot: 1, baked: false, moving: false } +provenance mesh: MeshOrigin { geom_id: 2, slot: 2, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 3, slot: 3, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 4, slot: 1, baked: false, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 12343188411137242430, n_points: 8, n_indices: 20, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 1: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 17119738035130870988, n_points: 382, n_indices: 1560, n_uvs: None, smooth: false, material: 0 }), placements: 2, shared: false, displaced: false } +provenance mesh slot 2: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 1739488954094729910, n_points: 8, n_indices: 24, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 3: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 6096447469814747168, n_points: 400, n_indices: 1600, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/scene/camera1"), cameras: ["/scene/camera1"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/scene/camera1"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-104.image b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-104.image new file mode 100644 index 000000000..ba4884437 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-104.image @@ -0,0 +1 @@ +640x360 16spp clamp-off 52a1a46f3a46d230 diff --git a/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-105.digest b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-105.digest new file mode 100644 index 000000000..0e859a952 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-105.digest @@ -0,0 +1,40 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/scene/camera1") +camera: Camera { origin: Vec3A(0.0074343784, 1.9913422, 4.0133057), lower_left_corner: Vec3A(-8.881443, -3.0086517, -0.98669434), horizontal: Vec3A(17.777756, 0.0, 0.0), vertical: Vec3A(0.0, 9.999988, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: Some(Vec4(0.0, 0.0, -1.0, 3.9133058)), far: Some(Vec4(0.0, 0.0, 1.0, 9995.986)), planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: None +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 640, height: 360, region: PixelRect { x0: 0, y0: 0, x1: 640, y1: 360 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 12.700017, aperture: [25.4, 25.4], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 5.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/cornellbox.usda"], invisible_overrides: Some(0) } +layer: $DIR/cornellbox.usda +warning: Warning { code: AssetUnsupportedByHost, kind: Skipped, count: 1, prims: [], message: "No asset loader: environment map $DIR/sky_gradient.exr ignored — the dome falls back to its uniform colour. Use Scene::from_usd_with_assets to supply one." } +warning: Warning { code: MaterialFallbackDefault, kind: Skipped, count: 1, prims: ["/scene/Looks/initialShadingGroup"], message: "Material /scene/Looks/initialShadingGroup has no surface shader — using default grey OpenPBR" } +lights: 1 +light 0: dome name Some("/scene/Sky") lpe None pmf 1.0 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 5 geometries, PrimitiveBreakdown { triangles: 822, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 2 } top level, PrimitiveBreakdown { triangles: 1582, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 2 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 4.0 motion [] pieces all=10:88b22fc3345d5b05 camera=10:88b22fc3345d5b05 shadow=10:88b22fc3345d5b05 indirect=10:88b22fc3345d5b05 +geom 1: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.2 motion [] pieces all=760:c2b60a75c52c78b9 camera=760:c2b60a75c52c78b9 shadow=760:c2b60a75c52c78b9 indirect=760:c2b60a75c52c78b9 +geom 2: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=12:94a297badef437e1 camera=12:94a297badef437e1 shadow=12:94a297badef437e1 indirect=12:94a297badef437e1 +geom 3: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.25 motion [] pieces all=800:4a8c9f44d777e131 camera=800:4a8c9f44d777e131 shadow=800:4a8c9f44d777e131 indirect=800:4a8c9f44d777e131 +geom 4: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.3585339 motion [] pieces all=760:2344ecf63e12c441 camera=760:2344ecf63e12c441 shadow=760:2344ecf63e12c441 indirect=760:2344ecf63e12c441 +provenance material /scene/Looks/initialShadingGroup: MaterialOrigin { slots: [0, 1, 2, 3, 4], displaced: false } +provenance light /scene/Sky: LightOrigin { index: 0, geoms: 0..0 } +provenance geometry 0..1: /scene/pCube1 +provenance geometry 1..2: /scene/pSphere1 +provenance geometry 2..3: /scene/pCube2 +provenance geometry 3..4: /scene/pTorus1 +provenance geometry 4..5: /scene/pSphere2 +provenance mesh: MeshOrigin { geom_id: 0, slot: 0, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 1, slot: 1, baked: false, moving: false } +provenance mesh: MeshOrigin { geom_id: 2, slot: 2, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 3, slot: 3, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 4, slot: 1, baked: false, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 12343188411137242430, n_points: 8, n_indices: 20, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 1: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 17119738035130870988, n_points: 382, n_indices: 1560, n_uvs: None, smooth: false, material: 0 }), placements: 2, shared: false, displaced: false } +provenance mesh slot 2: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 1739488954094729910, n_points: 8, n_indices: 24, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 3: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 6096447469814747168, n_points: 400, n_indices: 1600, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/scene/camera1"), cameras: ["/scene/camera1"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/scene/camera1"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-105.image b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-105.image new file mode 100644 index 000000000..ba4884437 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-105.image @@ -0,0 +1 @@ +640x360 16spp clamp-off 52a1a46f3a46d230 diff --git a/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-106.digest b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-106.digest new file mode 100644 index 000000000..0e859a952 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-106.digest @@ -0,0 +1,40 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/scene/camera1") +camera: Camera { origin: Vec3A(0.0074343784, 1.9913422, 4.0133057), lower_left_corner: Vec3A(-8.881443, -3.0086517, -0.98669434), horizontal: Vec3A(17.777756, 0.0, 0.0), vertical: Vec3A(0.0, 9.999988, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: Some(Vec4(0.0, 0.0, -1.0, 3.9133058)), far: Some(Vec4(0.0, 0.0, 1.0, 9995.986)), planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: None +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 640, height: 360, region: PixelRect { x0: 0, y0: 0, x1: 640, y1: 360 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 12.700017, aperture: [25.4, 25.4], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 5.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/cornellbox.usda"], invisible_overrides: Some(0) } +layer: $DIR/cornellbox.usda +warning: Warning { code: AssetUnsupportedByHost, kind: Skipped, count: 1, prims: [], message: "No asset loader: environment map $DIR/sky_gradient.exr ignored — the dome falls back to its uniform colour. Use Scene::from_usd_with_assets to supply one." } +warning: Warning { code: MaterialFallbackDefault, kind: Skipped, count: 1, prims: ["/scene/Looks/initialShadingGroup"], message: "Material /scene/Looks/initialShadingGroup has no surface shader — using default grey OpenPBR" } +lights: 1 +light 0: dome name Some("/scene/Sky") lpe None pmf 1.0 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 5 geometries, PrimitiveBreakdown { triangles: 822, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 2 } top level, PrimitiveBreakdown { triangles: 1582, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 2 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 4.0 motion [] pieces all=10:88b22fc3345d5b05 camera=10:88b22fc3345d5b05 shadow=10:88b22fc3345d5b05 indirect=10:88b22fc3345d5b05 +geom 1: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.2 motion [] pieces all=760:c2b60a75c52c78b9 camera=760:c2b60a75c52c78b9 shadow=760:c2b60a75c52c78b9 indirect=760:c2b60a75c52c78b9 +geom 2: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=12:94a297badef437e1 camera=12:94a297badef437e1 shadow=12:94a297badef437e1 indirect=12:94a297badef437e1 +geom 3: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.25 motion [] pieces all=800:4a8c9f44d777e131 camera=800:4a8c9f44d777e131 shadow=800:4a8c9f44d777e131 indirect=800:4a8c9f44d777e131 +geom 4: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.3585339 motion [] pieces all=760:2344ecf63e12c441 camera=760:2344ecf63e12c441 shadow=760:2344ecf63e12c441 indirect=760:2344ecf63e12c441 +provenance material /scene/Looks/initialShadingGroup: MaterialOrigin { slots: [0, 1, 2, 3, 4], displaced: false } +provenance light /scene/Sky: LightOrigin { index: 0, geoms: 0..0 } +provenance geometry 0..1: /scene/pCube1 +provenance geometry 1..2: /scene/pSphere1 +provenance geometry 2..3: /scene/pCube2 +provenance geometry 3..4: /scene/pTorus1 +provenance geometry 4..5: /scene/pSphere2 +provenance mesh: MeshOrigin { geom_id: 0, slot: 0, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 1, slot: 1, baked: false, moving: false } +provenance mesh: MeshOrigin { geom_id: 2, slot: 2, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 3, slot: 3, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 4, slot: 1, baked: false, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 12343188411137242430, n_points: 8, n_indices: 20, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 1: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 17119738035130870988, n_points: 382, n_indices: 1560, n_uvs: None, smooth: false, material: 0 }), placements: 2, shared: false, displaced: false } +provenance mesh slot 2: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 1739488954094729910, n_points: 8, n_indices: 24, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 3: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 6096447469814747168, n_points: 400, n_indices: 1600, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/scene/camera1"), cameras: ["/scene/camera1"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/scene/camera1"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-106.image b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-106.image new file mode 100644 index 000000000..ba4884437 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-106.image @@ -0,0 +1 @@ +640x360 16spp clamp-off 52a1a46f3a46d230 diff --git a/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-107.digest b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-107.digest new file mode 100644 index 000000000..0e859a952 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-107.digest @@ -0,0 +1,40 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/scene/camera1") +camera: Camera { origin: Vec3A(0.0074343784, 1.9913422, 4.0133057), lower_left_corner: Vec3A(-8.881443, -3.0086517, -0.98669434), horizontal: Vec3A(17.777756, 0.0, 0.0), vertical: Vec3A(0.0, 9.999988, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: Some(Vec4(0.0, 0.0, -1.0, 3.9133058)), far: Some(Vec4(0.0, 0.0, 1.0, 9995.986)), planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: None +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 640, height: 360, region: PixelRect { x0: 0, y0: 0, x1: 640, y1: 360 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 12.700017, aperture: [25.4, 25.4], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 5.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/cornellbox.usda"], invisible_overrides: Some(0) } +layer: $DIR/cornellbox.usda +warning: Warning { code: AssetUnsupportedByHost, kind: Skipped, count: 1, prims: [], message: "No asset loader: environment map $DIR/sky_gradient.exr ignored — the dome falls back to its uniform colour. Use Scene::from_usd_with_assets to supply one." } +warning: Warning { code: MaterialFallbackDefault, kind: Skipped, count: 1, prims: ["/scene/Looks/initialShadingGroup"], message: "Material /scene/Looks/initialShadingGroup has no surface shader — using default grey OpenPBR" } +lights: 1 +light 0: dome name Some("/scene/Sky") lpe None pmf 1.0 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 5 geometries, PrimitiveBreakdown { triangles: 822, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 2 } top level, PrimitiveBreakdown { triangles: 1582, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 2 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 4.0 motion [] pieces all=10:88b22fc3345d5b05 camera=10:88b22fc3345d5b05 shadow=10:88b22fc3345d5b05 indirect=10:88b22fc3345d5b05 +geom 1: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.2 motion [] pieces all=760:c2b60a75c52c78b9 camera=760:c2b60a75c52c78b9 shadow=760:c2b60a75c52c78b9 indirect=760:c2b60a75c52c78b9 +geom 2: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=12:94a297badef437e1 camera=12:94a297badef437e1 shadow=12:94a297badef437e1 indirect=12:94a297badef437e1 +geom 3: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.25 motion [] pieces all=800:4a8c9f44d777e131 camera=800:4a8c9f44d777e131 shadow=800:4a8c9f44d777e131 indirect=800:4a8c9f44d777e131 +geom 4: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.3585339 motion [] pieces all=760:2344ecf63e12c441 camera=760:2344ecf63e12c441 shadow=760:2344ecf63e12c441 indirect=760:2344ecf63e12c441 +provenance material /scene/Looks/initialShadingGroup: MaterialOrigin { slots: [0, 1, 2, 3, 4], displaced: false } +provenance light /scene/Sky: LightOrigin { index: 0, geoms: 0..0 } +provenance geometry 0..1: /scene/pCube1 +provenance geometry 1..2: /scene/pSphere1 +provenance geometry 2..3: /scene/pCube2 +provenance geometry 3..4: /scene/pTorus1 +provenance geometry 4..5: /scene/pSphere2 +provenance mesh: MeshOrigin { geom_id: 0, slot: 0, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 1, slot: 1, baked: false, moving: false } +provenance mesh: MeshOrigin { geom_id: 2, slot: 2, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 3, slot: 3, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 4, slot: 1, baked: false, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 12343188411137242430, n_points: 8, n_indices: 20, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 1: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 17119738035130870988, n_points: 382, n_indices: 1560, n_uvs: None, smooth: false, material: 0 }), placements: 2, shared: false, displaced: false } +provenance mesh slot 2: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 1739488954094729910, n_points: 8, n_indices: 24, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 3: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 6096447469814747168, n_points: 400, n_indices: 1600, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/scene/camera1"), cameras: ["/scene/camera1"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/scene/camera1"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-107.image b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-107.image new file mode 100644 index 000000000..ba4884437 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-107.image @@ -0,0 +1 @@ +640x360 16spp clamp-off 52a1a46f3a46d230 diff --git a/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-108.digest b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-108.digest new file mode 100644 index 000000000..0e859a952 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-108.digest @@ -0,0 +1,40 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/scene/camera1") +camera: Camera { origin: Vec3A(0.0074343784, 1.9913422, 4.0133057), lower_left_corner: Vec3A(-8.881443, -3.0086517, -0.98669434), horizontal: Vec3A(17.777756, 0.0, 0.0), vertical: Vec3A(0.0, 9.999988, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: Some(Vec4(0.0, 0.0, -1.0, 3.9133058)), far: Some(Vec4(0.0, 0.0, 1.0, 9995.986)), planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: None +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 640, height: 360, region: PixelRect { x0: 0, y0: 0, x1: 640, y1: 360 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 12.700017, aperture: [25.4, 25.4], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 5.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/cornellbox.usda"], invisible_overrides: Some(0) } +layer: $DIR/cornellbox.usda +warning: Warning { code: AssetUnsupportedByHost, kind: Skipped, count: 1, prims: [], message: "No asset loader: environment map $DIR/sky_gradient.exr ignored — the dome falls back to its uniform colour. Use Scene::from_usd_with_assets to supply one." } +warning: Warning { code: MaterialFallbackDefault, kind: Skipped, count: 1, prims: ["/scene/Looks/initialShadingGroup"], message: "Material /scene/Looks/initialShadingGroup has no surface shader — using default grey OpenPBR" } +lights: 1 +light 0: dome name Some("/scene/Sky") lpe None pmf 1.0 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 5 geometries, PrimitiveBreakdown { triangles: 822, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 2 } top level, PrimitiveBreakdown { triangles: 1582, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 2 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 4.0 motion [] pieces all=10:88b22fc3345d5b05 camera=10:88b22fc3345d5b05 shadow=10:88b22fc3345d5b05 indirect=10:88b22fc3345d5b05 +geom 1: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.2 motion [] pieces all=760:c2b60a75c52c78b9 camera=760:c2b60a75c52c78b9 shadow=760:c2b60a75c52c78b9 indirect=760:c2b60a75c52c78b9 +geom 2: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=12:94a297badef437e1 camera=12:94a297badef437e1 shadow=12:94a297badef437e1 indirect=12:94a297badef437e1 +geom 3: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.25 motion [] pieces all=800:4a8c9f44d777e131 camera=800:4a8c9f44d777e131 shadow=800:4a8c9f44d777e131 indirect=800:4a8c9f44d777e131 +geom 4: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.3585339 motion [] pieces all=760:2344ecf63e12c441 camera=760:2344ecf63e12c441 shadow=760:2344ecf63e12c441 indirect=760:2344ecf63e12c441 +provenance material /scene/Looks/initialShadingGroup: MaterialOrigin { slots: [0, 1, 2, 3, 4], displaced: false } +provenance light /scene/Sky: LightOrigin { index: 0, geoms: 0..0 } +provenance geometry 0..1: /scene/pCube1 +provenance geometry 1..2: /scene/pSphere1 +provenance geometry 2..3: /scene/pCube2 +provenance geometry 3..4: /scene/pTorus1 +provenance geometry 4..5: /scene/pSphere2 +provenance mesh: MeshOrigin { geom_id: 0, slot: 0, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 1, slot: 1, baked: false, moving: false } +provenance mesh: MeshOrigin { geom_id: 2, slot: 2, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 3, slot: 3, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 4, slot: 1, baked: false, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 12343188411137242430, n_points: 8, n_indices: 20, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 1: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 17119738035130870988, n_points: 382, n_indices: 1560, n_uvs: None, smooth: false, material: 0 }), placements: 2, shared: false, displaced: false } +provenance mesh slot 2: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 1739488954094729910, n_points: 8, n_indices: 24, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 3: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 6096447469814747168, n_points: 400, n_indices: 1600, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/scene/camera1"), cameras: ["/scene/camera1"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/scene/camera1"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-108.image b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-108.image new file mode 100644 index 000000000..ba4884437 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-108.image @@ -0,0 +1 @@ +640x360 16spp clamp-off 52a1a46f3a46d230 diff --git a/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-109.digest b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-109.digest new file mode 100644 index 000000000..0e859a952 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-109.digest @@ -0,0 +1,40 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/scene/camera1") +camera: Camera { origin: Vec3A(0.0074343784, 1.9913422, 4.0133057), lower_left_corner: Vec3A(-8.881443, -3.0086517, -0.98669434), horizontal: Vec3A(17.777756, 0.0, 0.0), vertical: Vec3A(0.0, 9.999988, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: Some(Vec4(0.0, 0.0, -1.0, 3.9133058)), far: Some(Vec4(0.0, 0.0, 1.0, 9995.986)), planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: None +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 640, height: 360, region: PixelRect { x0: 0, y0: 0, x1: 640, y1: 360 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 12.700017, aperture: [25.4, 25.4], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 5.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/cornellbox.usda"], invisible_overrides: Some(0) } +layer: $DIR/cornellbox.usda +warning: Warning { code: AssetUnsupportedByHost, kind: Skipped, count: 1, prims: [], message: "No asset loader: environment map $DIR/sky_gradient.exr ignored — the dome falls back to its uniform colour. Use Scene::from_usd_with_assets to supply one." } +warning: Warning { code: MaterialFallbackDefault, kind: Skipped, count: 1, prims: ["/scene/Looks/initialShadingGroup"], message: "Material /scene/Looks/initialShadingGroup has no surface shader — using default grey OpenPBR" } +lights: 1 +light 0: dome name Some("/scene/Sky") lpe None pmf 1.0 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 5 geometries, PrimitiveBreakdown { triangles: 822, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 2 } top level, PrimitiveBreakdown { triangles: 1582, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 2 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 4.0 motion [] pieces all=10:88b22fc3345d5b05 camera=10:88b22fc3345d5b05 shadow=10:88b22fc3345d5b05 indirect=10:88b22fc3345d5b05 +geom 1: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.2 motion [] pieces all=760:c2b60a75c52c78b9 camera=760:c2b60a75c52c78b9 shadow=760:c2b60a75c52c78b9 indirect=760:c2b60a75c52c78b9 +geom 2: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=12:94a297badef437e1 camera=12:94a297badef437e1 shadow=12:94a297badef437e1 indirect=12:94a297badef437e1 +geom 3: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.25 motion [] pieces all=800:4a8c9f44d777e131 camera=800:4a8c9f44d777e131 shadow=800:4a8c9f44d777e131 indirect=800:4a8c9f44d777e131 +geom 4: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.3585339 motion [] pieces all=760:2344ecf63e12c441 camera=760:2344ecf63e12c441 shadow=760:2344ecf63e12c441 indirect=760:2344ecf63e12c441 +provenance material /scene/Looks/initialShadingGroup: MaterialOrigin { slots: [0, 1, 2, 3, 4], displaced: false } +provenance light /scene/Sky: LightOrigin { index: 0, geoms: 0..0 } +provenance geometry 0..1: /scene/pCube1 +provenance geometry 1..2: /scene/pSphere1 +provenance geometry 2..3: /scene/pCube2 +provenance geometry 3..4: /scene/pTorus1 +provenance geometry 4..5: /scene/pSphere2 +provenance mesh: MeshOrigin { geom_id: 0, slot: 0, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 1, slot: 1, baked: false, moving: false } +provenance mesh: MeshOrigin { geom_id: 2, slot: 2, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 3, slot: 3, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 4, slot: 1, baked: false, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 12343188411137242430, n_points: 8, n_indices: 20, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 1: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 17119738035130870988, n_points: 382, n_indices: 1560, n_uvs: None, smooth: false, material: 0 }), placements: 2, shared: false, displaced: false } +provenance mesh slot 2: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 1739488954094729910, n_points: 8, n_indices: 24, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 3: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 6096447469814747168, n_points: 400, n_indices: 1600, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/scene/camera1"), cameras: ["/scene/camera1"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/scene/camera1"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-109.image b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-109.image new file mode 100644 index 000000000..ba4884437 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-109.image @@ -0,0 +1 @@ +640x360 16spp clamp-off 52a1a46f3a46d230 diff --git a/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-11.digest b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-11.digest new file mode 100644 index 000000000..0e859a952 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-11.digest @@ -0,0 +1,40 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/scene/camera1") +camera: Camera { origin: Vec3A(0.0074343784, 1.9913422, 4.0133057), lower_left_corner: Vec3A(-8.881443, -3.0086517, -0.98669434), horizontal: Vec3A(17.777756, 0.0, 0.0), vertical: Vec3A(0.0, 9.999988, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: Some(Vec4(0.0, 0.0, -1.0, 3.9133058)), far: Some(Vec4(0.0, 0.0, 1.0, 9995.986)), planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: None +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 640, height: 360, region: PixelRect { x0: 0, y0: 0, x1: 640, y1: 360 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 12.700017, aperture: [25.4, 25.4], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 5.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/cornellbox.usda"], invisible_overrides: Some(0) } +layer: $DIR/cornellbox.usda +warning: Warning { code: AssetUnsupportedByHost, kind: Skipped, count: 1, prims: [], message: "No asset loader: environment map $DIR/sky_gradient.exr ignored — the dome falls back to its uniform colour. Use Scene::from_usd_with_assets to supply one." } +warning: Warning { code: MaterialFallbackDefault, kind: Skipped, count: 1, prims: ["/scene/Looks/initialShadingGroup"], message: "Material /scene/Looks/initialShadingGroup has no surface shader — using default grey OpenPBR" } +lights: 1 +light 0: dome name Some("/scene/Sky") lpe None pmf 1.0 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 5 geometries, PrimitiveBreakdown { triangles: 822, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 2 } top level, PrimitiveBreakdown { triangles: 1582, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 2 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 4.0 motion [] pieces all=10:88b22fc3345d5b05 camera=10:88b22fc3345d5b05 shadow=10:88b22fc3345d5b05 indirect=10:88b22fc3345d5b05 +geom 1: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.2 motion [] pieces all=760:c2b60a75c52c78b9 camera=760:c2b60a75c52c78b9 shadow=760:c2b60a75c52c78b9 indirect=760:c2b60a75c52c78b9 +geom 2: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=12:94a297badef437e1 camera=12:94a297badef437e1 shadow=12:94a297badef437e1 indirect=12:94a297badef437e1 +geom 3: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.25 motion [] pieces all=800:4a8c9f44d777e131 camera=800:4a8c9f44d777e131 shadow=800:4a8c9f44d777e131 indirect=800:4a8c9f44d777e131 +geom 4: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.3585339 motion [] pieces all=760:2344ecf63e12c441 camera=760:2344ecf63e12c441 shadow=760:2344ecf63e12c441 indirect=760:2344ecf63e12c441 +provenance material /scene/Looks/initialShadingGroup: MaterialOrigin { slots: [0, 1, 2, 3, 4], displaced: false } +provenance light /scene/Sky: LightOrigin { index: 0, geoms: 0..0 } +provenance geometry 0..1: /scene/pCube1 +provenance geometry 1..2: /scene/pSphere1 +provenance geometry 2..3: /scene/pCube2 +provenance geometry 3..4: /scene/pTorus1 +provenance geometry 4..5: /scene/pSphere2 +provenance mesh: MeshOrigin { geom_id: 0, slot: 0, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 1, slot: 1, baked: false, moving: false } +provenance mesh: MeshOrigin { geom_id: 2, slot: 2, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 3, slot: 3, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 4, slot: 1, baked: false, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 12343188411137242430, n_points: 8, n_indices: 20, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 1: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 17119738035130870988, n_points: 382, n_indices: 1560, n_uvs: None, smooth: false, material: 0 }), placements: 2, shared: false, displaced: false } +provenance mesh slot 2: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 1739488954094729910, n_points: 8, n_indices: 24, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 3: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 6096447469814747168, n_points: 400, n_indices: 1600, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/scene/camera1"), cameras: ["/scene/camera1"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/scene/camera1"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-11.image b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-11.image new file mode 100644 index 000000000..ba4884437 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-11.image @@ -0,0 +1 @@ +640x360 16spp clamp-off 52a1a46f3a46d230 diff --git a/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-110.digest b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-110.digest new file mode 100644 index 000000000..0e859a952 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-110.digest @@ -0,0 +1,40 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/scene/camera1") +camera: Camera { origin: Vec3A(0.0074343784, 1.9913422, 4.0133057), lower_left_corner: Vec3A(-8.881443, -3.0086517, -0.98669434), horizontal: Vec3A(17.777756, 0.0, 0.0), vertical: Vec3A(0.0, 9.999988, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: Some(Vec4(0.0, 0.0, -1.0, 3.9133058)), far: Some(Vec4(0.0, 0.0, 1.0, 9995.986)), planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: None +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 640, height: 360, region: PixelRect { x0: 0, y0: 0, x1: 640, y1: 360 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 12.700017, aperture: [25.4, 25.4], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 5.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/cornellbox.usda"], invisible_overrides: Some(0) } +layer: $DIR/cornellbox.usda +warning: Warning { code: AssetUnsupportedByHost, kind: Skipped, count: 1, prims: [], message: "No asset loader: environment map $DIR/sky_gradient.exr ignored — the dome falls back to its uniform colour. Use Scene::from_usd_with_assets to supply one." } +warning: Warning { code: MaterialFallbackDefault, kind: Skipped, count: 1, prims: ["/scene/Looks/initialShadingGroup"], message: "Material /scene/Looks/initialShadingGroup has no surface shader — using default grey OpenPBR" } +lights: 1 +light 0: dome name Some("/scene/Sky") lpe None pmf 1.0 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 5 geometries, PrimitiveBreakdown { triangles: 822, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 2 } top level, PrimitiveBreakdown { triangles: 1582, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 2 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 4.0 motion [] pieces all=10:88b22fc3345d5b05 camera=10:88b22fc3345d5b05 shadow=10:88b22fc3345d5b05 indirect=10:88b22fc3345d5b05 +geom 1: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.2 motion [] pieces all=760:c2b60a75c52c78b9 camera=760:c2b60a75c52c78b9 shadow=760:c2b60a75c52c78b9 indirect=760:c2b60a75c52c78b9 +geom 2: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=12:94a297badef437e1 camera=12:94a297badef437e1 shadow=12:94a297badef437e1 indirect=12:94a297badef437e1 +geom 3: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.25 motion [] pieces all=800:4a8c9f44d777e131 camera=800:4a8c9f44d777e131 shadow=800:4a8c9f44d777e131 indirect=800:4a8c9f44d777e131 +geom 4: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.3585339 motion [] pieces all=760:2344ecf63e12c441 camera=760:2344ecf63e12c441 shadow=760:2344ecf63e12c441 indirect=760:2344ecf63e12c441 +provenance material /scene/Looks/initialShadingGroup: MaterialOrigin { slots: [0, 1, 2, 3, 4], displaced: false } +provenance light /scene/Sky: LightOrigin { index: 0, geoms: 0..0 } +provenance geometry 0..1: /scene/pCube1 +provenance geometry 1..2: /scene/pSphere1 +provenance geometry 2..3: /scene/pCube2 +provenance geometry 3..4: /scene/pTorus1 +provenance geometry 4..5: /scene/pSphere2 +provenance mesh: MeshOrigin { geom_id: 0, slot: 0, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 1, slot: 1, baked: false, moving: false } +provenance mesh: MeshOrigin { geom_id: 2, slot: 2, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 3, slot: 3, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 4, slot: 1, baked: false, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 12343188411137242430, n_points: 8, n_indices: 20, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 1: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 17119738035130870988, n_points: 382, n_indices: 1560, n_uvs: None, smooth: false, material: 0 }), placements: 2, shared: false, displaced: false } +provenance mesh slot 2: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 1739488954094729910, n_points: 8, n_indices: 24, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 3: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 6096447469814747168, n_points: 400, n_indices: 1600, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/scene/camera1"), cameras: ["/scene/camera1"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/scene/camera1"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-110.image b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-110.image new file mode 100644 index 000000000..ba4884437 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-110.image @@ -0,0 +1 @@ +640x360 16spp clamp-off 52a1a46f3a46d230 diff --git a/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-111.digest b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-111.digest new file mode 100644 index 000000000..0e859a952 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-111.digest @@ -0,0 +1,40 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/scene/camera1") +camera: Camera { origin: Vec3A(0.0074343784, 1.9913422, 4.0133057), lower_left_corner: Vec3A(-8.881443, -3.0086517, -0.98669434), horizontal: Vec3A(17.777756, 0.0, 0.0), vertical: Vec3A(0.0, 9.999988, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: Some(Vec4(0.0, 0.0, -1.0, 3.9133058)), far: Some(Vec4(0.0, 0.0, 1.0, 9995.986)), planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: None +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 640, height: 360, region: PixelRect { x0: 0, y0: 0, x1: 640, y1: 360 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 12.700017, aperture: [25.4, 25.4], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 5.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/cornellbox.usda"], invisible_overrides: Some(0) } +layer: $DIR/cornellbox.usda +warning: Warning { code: AssetUnsupportedByHost, kind: Skipped, count: 1, prims: [], message: "No asset loader: environment map $DIR/sky_gradient.exr ignored — the dome falls back to its uniform colour. Use Scene::from_usd_with_assets to supply one." } +warning: Warning { code: MaterialFallbackDefault, kind: Skipped, count: 1, prims: ["/scene/Looks/initialShadingGroup"], message: "Material /scene/Looks/initialShadingGroup has no surface shader — using default grey OpenPBR" } +lights: 1 +light 0: dome name Some("/scene/Sky") lpe None pmf 1.0 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 5 geometries, PrimitiveBreakdown { triangles: 822, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 2 } top level, PrimitiveBreakdown { triangles: 1582, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 2 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 4.0 motion [] pieces all=10:88b22fc3345d5b05 camera=10:88b22fc3345d5b05 shadow=10:88b22fc3345d5b05 indirect=10:88b22fc3345d5b05 +geom 1: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.2 motion [] pieces all=760:c2b60a75c52c78b9 camera=760:c2b60a75c52c78b9 shadow=760:c2b60a75c52c78b9 indirect=760:c2b60a75c52c78b9 +geom 2: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=12:94a297badef437e1 camera=12:94a297badef437e1 shadow=12:94a297badef437e1 indirect=12:94a297badef437e1 +geom 3: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.25 motion [] pieces all=800:4a8c9f44d777e131 camera=800:4a8c9f44d777e131 shadow=800:4a8c9f44d777e131 indirect=800:4a8c9f44d777e131 +geom 4: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.3585339 motion [] pieces all=760:2344ecf63e12c441 camera=760:2344ecf63e12c441 shadow=760:2344ecf63e12c441 indirect=760:2344ecf63e12c441 +provenance material /scene/Looks/initialShadingGroup: MaterialOrigin { slots: [0, 1, 2, 3, 4], displaced: false } +provenance light /scene/Sky: LightOrigin { index: 0, geoms: 0..0 } +provenance geometry 0..1: /scene/pCube1 +provenance geometry 1..2: /scene/pSphere1 +provenance geometry 2..3: /scene/pCube2 +provenance geometry 3..4: /scene/pTorus1 +provenance geometry 4..5: /scene/pSphere2 +provenance mesh: MeshOrigin { geom_id: 0, slot: 0, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 1, slot: 1, baked: false, moving: false } +provenance mesh: MeshOrigin { geom_id: 2, slot: 2, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 3, slot: 3, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 4, slot: 1, baked: false, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 12343188411137242430, n_points: 8, n_indices: 20, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 1: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 17119738035130870988, n_points: 382, n_indices: 1560, n_uvs: None, smooth: false, material: 0 }), placements: 2, shared: false, displaced: false } +provenance mesh slot 2: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 1739488954094729910, n_points: 8, n_indices: 24, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 3: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 6096447469814747168, n_points: 400, n_indices: 1600, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/scene/camera1"), cameras: ["/scene/camera1"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/scene/camera1"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-111.image b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-111.image new file mode 100644 index 000000000..ba4884437 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-111.image @@ -0,0 +1 @@ +640x360 16spp clamp-off 52a1a46f3a46d230 diff --git a/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-112.digest b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-112.digest new file mode 100644 index 000000000..0e859a952 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-112.digest @@ -0,0 +1,40 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/scene/camera1") +camera: Camera { origin: Vec3A(0.0074343784, 1.9913422, 4.0133057), lower_left_corner: Vec3A(-8.881443, -3.0086517, -0.98669434), horizontal: Vec3A(17.777756, 0.0, 0.0), vertical: Vec3A(0.0, 9.999988, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: Some(Vec4(0.0, 0.0, -1.0, 3.9133058)), far: Some(Vec4(0.0, 0.0, 1.0, 9995.986)), planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: None +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 640, height: 360, region: PixelRect { x0: 0, y0: 0, x1: 640, y1: 360 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 12.700017, aperture: [25.4, 25.4], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 5.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/cornellbox.usda"], invisible_overrides: Some(0) } +layer: $DIR/cornellbox.usda +warning: Warning { code: AssetUnsupportedByHost, kind: Skipped, count: 1, prims: [], message: "No asset loader: environment map $DIR/sky_gradient.exr ignored — the dome falls back to its uniform colour. Use Scene::from_usd_with_assets to supply one." } +warning: Warning { code: MaterialFallbackDefault, kind: Skipped, count: 1, prims: ["/scene/Looks/initialShadingGroup"], message: "Material /scene/Looks/initialShadingGroup has no surface shader — using default grey OpenPBR" } +lights: 1 +light 0: dome name Some("/scene/Sky") lpe None pmf 1.0 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 5 geometries, PrimitiveBreakdown { triangles: 822, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 2 } top level, PrimitiveBreakdown { triangles: 1582, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 2 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 4.0 motion [] pieces all=10:88b22fc3345d5b05 camera=10:88b22fc3345d5b05 shadow=10:88b22fc3345d5b05 indirect=10:88b22fc3345d5b05 +geom 1: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.2 motion [] pieces all=760:c2b60a75c52c78b9 camera=760:c2b60a75c52c78b9 shadow=760:c2b60a75c52c78b9 indirect=760:c2b60a75c52c78b9 +geom 2: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=12:94a297badef437e1 camera=12:94a297badef437e1 shadow=12:94a297badef437e1 indirect=12:94a297badef437e1 +geom 3: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.25 motion [] pieces all=800:4a8c9f44d777e131 camera=800:4a8c9f44d777e131 shadow=800:4a8c9f44d777e131 indirect=800:4a8c9f44d777e131 +geom 4: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.3585339 motion [] pieces all=760:2344ecf63e12c441 camera=760:2344ecf63e12c441 shadow=760:2344ecf63e12c441 indirect=760:2344ecf63e12c441 +provenance material /scene/Looks/initialShadingGroup: MaterialOrigin { slots: [0, 1, 2, 3, 4], displaced: false } +provenance light /scene/Sky: LightOrigin { index: 0, geoms: 0..0 } +provenance geometry 0..1: /scene/pCube1 +provenance geometry 1..2: /scene/pSphere1 +provenance geometry 2..3: /scene/pCube2 +provenance geometry 3..4: /scene/pTorus1 +provenance geometry 4..5: /scene/pSphere2 +provenance mesh: MeshOrigin { geom_id: 0, slot: 0, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 1, slot: 1, baked: false, moving: false } +provenance mesh: MeshOrigin { geom_id: 2, slot: 2, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 3, slot: 3, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 4, slot: 1, baked: false, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 12343188411137242430, n_points: 8, n_indices: 20, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 1: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 17119738035130870988, n_points: 382, n_indices: 1560, n_uvs: None, smooth: false, material: 0 }), placements: 2, shared: false, displaced: false } +provenance mesh slot 2: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 1739488954094729910, n_points: 8, n_indices: 24, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 3: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 6096447469814747168, n_points: 400, n_indices: 1600, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/scene/camera1"), cameras: ["/scene/camera1"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/scene/camera1"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-112.image b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-112.image new file mode 100644 index 000000000..ba4884437 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-112.image @@ -0,0 +1 @@ +640x360 16spp clamp-off 52a1a46f3a46d230 diff --git a/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-113.digest b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-113.digest new file mode 100644 index 000000000..0e859a952 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-113.digest @@ -0,0 +1,40 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/scene/camera1") +camera: Camera { origin: Vec3A(0.0074343784, 1.9913422, 4.0133057), lower_left_corner: Vec3A(-8.881443, -3.0086517, -0.98669434), horizontal: Vec3A(17.777756, 0.0, 0.0), vertical: Vec3A(0.0, 9.999988, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: Some(Vec4(0.0, 0.0, -1.0, 3.9133058)), far: Some(Vec4(0.0, 0.0, 1.0, 9995.986)), planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: None +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 640, height: 360, region: PixelRect { x0: 0, y0: 0, x1: 640, y1: 360 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 12.700017, aperture: [25.4, 25.4], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 5.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/cornellbox.usda"], invisible_overrides: Some(0) } +layer: $DIR/cornellbox.usda +warning: Warning { code: AssetUnsupportedByHost, kind: Skipped, count: 1, prims: [], message: "No asset loader: environment map $DIR/sky_gradient.exr ignored — the dome falls back to its uniform colour. Use Scene::from_usd_with_assets to supply one." } +warning: Warning { code: MaterialFallbackDefault, kind: Skipped, count: 1, prims: ["/scene/Looks/initialShadingGroup"], message: "Material /scene/Looks/initialShadingGroup has no surface shader — using default grey OpenPBR" } +lights: 1 +light 0: dome name Some("/scene/Sky") lpe None pmf 1.0 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 5 geometries, PrimitiveBreakdown { triangles: 822, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 2 } top level, PrimitiveBreakdown { triangles: 1582, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 2 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 4.0 motion [] pieces all=10:88b22fc3345d5b05 camera=10:88b22fc3345d5b05 shadow=10:88b22fc3345d5b05 indirect=10:88b22fc3345d5b05 +geom 1: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.2 motion [] pieces all=760:c2b60a75c52c78b9 camera=760:c2b60a75c52c78b9 shadow=760:c2b60a75c52c78b9 indirect=760:c2b60a75c52c78b9 +geom 2: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=12:94a297badef437e1 camera=12:94a297badef437e1 shadow=12:94a297badef437e1 indirect=12:94a297badef437e1 +geom 3: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.25 motion [] pieces all=800:4a8c9f44d777e131 camera=800:4a8c9f44d777e131 shadow=800:4a8c9f44d777e131 indirect=800:4a8c9f44d777e131 +geom 4: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.3585339 motion [] pieces all=760:2344ecf63e12c441 camera=760:2344ecf63e12c441 shadow=760:2344ecf63e12c441 indirect=760:2344ecf63e12c441 +provenance material /scene/Looks/initialShadingGroup: MaterialOrigin { slots: [0, 1, 2, 3, 4], displaced: false } +provenance light /scene/Sky: LightOrigin { index: 0, geoms: 0..0 } +provenance geometry 0..1: /scene/pCube1 +provenance geometry 1..2: /scene/pSphere1 +provenance geometry 2..3: /scene/pCube2 +provenance geometry 3..4: /scene/pTorus1 +provenance geometry 4..5: /scene/pSphere2 +provenance mesh: MeshOrigin { geom_id: 0, slot: 0, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 1, slot: 1, baked: false, moving: false } +provenance mesh: MeshOrigin { geom_id: 2, slot: 2, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 3, slot: 3, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 4, slot: 1, baked: false, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 12343188411137242430, n_points: 8, n_indices: 20, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 1: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 17119738035130870988, n_points: 382, n_indices: 1560, n_uvs: None, smooth: false, material: 0 }), placements: 2, shared: false, displaced: false } +provenance mesh slot 2: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 1739488954094729910, n_points: 8, n_indices: 24, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 3: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 6096447469814747168, n_points: 400, n_indices: 1600, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/scene/camera1"), cameras: ["/scene/camera1"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/scene/camera1"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-113.image b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-113.image new file mode 100644 index 000000000..ba4884437 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-113.image @@ -0,0 +1 @@ +640x360 16spp clamp-off 52a1a46f3a46d230 diff --git a/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-114.digest b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-114.digest new file mode 100644 index 000000000..0e859a952 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-114.digest @@ -0,0 +1,40 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/scene/camera1") +camera: Camera { origin: Vec3A(0.0074343784, 1.9913422, 4.0133057), lower_left_corner: Vec3A(-8.881443, -3.0086517, -0.98669434), horizontal: Vec3A(17.777756, 0.0, 0.0), vertical: Vec3A(0.0, 9.999988, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: Some(Vec4(0.0, 0.0, -1.0, 3.9133058)), far: Some(Vec4(0.0, 0.0, 1.0, 9995.986)), planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: None +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 640, height: 360, region: PixelRect { x0: 0, y0: 0, x1: 640, y1: 360 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 12.700017, aperture: [25.4, 25.4], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 5.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/cornellbox.usda"], invisible_overrides: Some(0) } +layer: $DIR/cornellbox.usda +warning: Warning { code: AssetUnsupportedByHost, kind: Skipped, count: 1, prims: [], message: "No asset loader: environment map $DIR/sky_gradient.exr ignored — the dome falls back to its uniform colour. Use Scene::from_usd_with_assets to supply one." } +warning: Warning { code: MaterialFallbackDefault, kind: Skipped, count: 1, prims: ["/scene/Looks/initialShadingGroup"], message: "Material /scene/Looks/initialShadingGroup has no surface shader — using default grey OpenPBR" } +lights: 1 +light 0: dome name Some("/scene/Sky") lpe None pmf 1.0 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 5 geometries, PrimitiveBreakdown { triangles: 822, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 2 } top level, PrimitiveBreakdown { triangles: 1582, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 2 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 4.0 motion [] pieces all=10:88b22fc3345d5b05 camera=10:88b22fc3345d5b05 shadow=10:88b22fc3345d5b05 indirect=10:88b22fc3345d5b05 +geom 1: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.2 motion [] pieces all=760:c2b60a75c52c78b9 camera=760:c2b60a75c52c78b9 shadow=760:c2b60a75c52c78b9 indirect=760:c2b60a75c52c78b9 +geom 2: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=12:94a297badef437e1 camera=12:94a297badef437e1 shadow=12:94a297badef437e1 indirect=12:94a297badef437e1 +geom 3: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.25 motion [] pieces all=800:4a8c9f44d777e131 camera=800:4a8c9f44d777e131 shadow=800:4a8c9f44d777e131 indirect=800:4a8c9f44d777e131 +geom 4: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.3585339 motion [] pieces all=760:2344ecf63e12c441 camera=760:2344ecf63e12c441 shadow=760:2344ecf63e12c441 indirect=760:2344ecf63e12c441 +provenance material /scene/Looks/initialShadingGroup: MaterialOrigin { slots: [0, 1, 2, 3, 4], displaced: false } +provenance light /scene/Sky: LightOrigin { index: 0, geoms: 0..0 } +provenance geometry 0..1: /scene/pCube1 +provenance geometry 1..2: /scene/pSphere1 +provenance geometry 2..3: /scene/pCube2 +provenance geometry 3..4: /scene/pTorus1 +provenance geometry 4..5: /scene/pSphere2 +provenance mesh: MeshOrigin { geom_id: 0, slot: 0, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 1, slot: 1, baked: false, moving: false } +provenance mesh: MeshOrigin { geom_id: 2, slot: 2, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 3, slot: 3, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 4, slot: 1, baked: false, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 12343188411137242430, n_points: 8, n_indices: 20, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 1: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 17119738035130870988, n_points: 382, n_indices: 1560, n_uvs: None, smooth: false, material: 0 }), placements: 2, shared: false, displaced: false } +provenance mesh slot 2: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 1739488954094729910, n_points: 8, n_indices: 24, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 3: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 6096447469814747168, n_points: 400, n_indices: 1600, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/scene/camera1"), cameras: ["/scene/camera1"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/scene/camera1"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-114.image b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-114.image new file mode 100644 index 000000000..ba4884437 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-114.image @@ -0,0 +1 @@ +640x360 16spp clamp-off 52a1a46f3a46d230 diff --git a/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-115.digest b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-115.digest new file mode 100644 index 000000000..0e859a952 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-115.digest @@ -0,0 +1,40 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/scene/camera1") +camera: Camera { origin: Vec3A(0.0074343784, 1.9913422, 4.0133057), lower_left_corner: Vec3A(-8.881443, -3.0086517, -0.98669434), horizontal: Vec3A(17.777756, 0.0, 0.0), vertical: Vec3A(0.0, 9.999988, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: Some(Vec4(0.0, 0.0, -1.0, 3.9133058)), far: Some(Vec4(0.0, 0.0, 1.0, 9995.986)), planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: None +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 640, height: 360, region: PixelRect { x0: 0, y0: 0, x1: 640, y1: 360 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 12.700017, aperture: [25.4, 25.4], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 5.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/cornellbox.usda"], invisible_overrides: Some(0) } +layer: $DIR/cornellbox.usda +warning: Warning { code: AssetUnsupportedByHost, kind: Skipped, count: 1, prims: [], message: "No asset loader: environment map $DIR/sky_gradient.exr ignored — the dome falls back to its uniform colour. Use Scene::from_usd_with_assets to supply one." } +warning: Warning { code: MaterialFallbackDefault, kind: Skipped, count: 1, prims: ["/scene/Looks/initialShadingGroup"], message: "Material /scene/Looks/initialShadingGroup has no surface shader — using default grey OpenPBR" } +lights: 1 +light 0: dome name Some("/scene/Sky") lpe None pmf 1.0 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 5 geometries, PrimitiveBreakdown { triangles: 822, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 2 } top level, PrimitiveBreakdown { triangles: 1582, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 2 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 4.0 motion [] pieces all=10:88b22fc3345d5b05 camera=10:88b22fc3345d5b05 shadow=10:88b22fc3345d5b05 indirect=10:88b22fc3345d5b05 +geom 1: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.2 motion [] pieces all=760:c2b60a75c52c78b9 camera=760:c2b60a75c52c78b9 shadow=760:c2b60a75c52c78b9 indirect=760:c2b60a75c52c78b9 +geom 2: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=12:94a297badef437e1 camera=12:94a297badef437e1 shadow=12:94a297badef437e1 indirect=12:94a297badef437e1 +geom 3: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.25 motion [] pieces all=800:4a8c9f44d777e131 camera=800:4a8c9f44d777e131 shadow=800:4a8c9f44d777e131 indirect=800:4a8c9f44d777e131 +geom 4: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.3585339 motion [] pieces all=760:2344ecf63e12c441 camera=760:2344ecf63e12c441 shadow=760:2344ecf63e12c441 indirect=760:2344ecf63e12c441 +provenance material /scene/Looks/initialShadingGroup: MaterialOrigin { slots: [0, 1, 2, 3, 4], displaced: false } +provenance light /scene/Sky: LightOrigin { index: 0, geoms: 0..0 } +provenance geometry 0..1: /scene/pCube1 +provenance geometry 1..2: /scene/pSphere1 +provenance geometry 2..3: /scene/pCube2 +provenance geometry 3..4: /scene/pTorus1 +provenance geometry 4..5: /scene/pSphere2 +provenance mesh: MeshOrigin { geom_id: 0, slot: 0, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 1, slot: 1, baked: false, moving: false } +provenance mesh: MeshOrigin { geom_id: 2, slot: 2, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 3, slot: 3, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 4, slot: 1, baked: false, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 12343188411137242430, n_points: 8, n_indices: 20, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 1: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 17119738035130870988, n_points: 382, n_indices: 1560, n_uvs: None, smooth: false, material: 0 }), placements: 2, shared: false, displaced: false } +provenance mesh slot 2: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 1739488954094729910, n_points: 8, n_indices: 24, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 3: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 6096447469814747168, n_points: 400, n_indices: 1600, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/scene/camera1"), cameras: ["/scene/camera1"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/scene/camera1"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-115.image b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-115.image new file mode 100644 index 000000000..ba4884437 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-115.image @@ -0,0 +1 @@ +640x360 16spp clamp-off 52a1a46f3a46d230 diff --git a/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-116.digest b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-116.digest new file mode 100644 index 000000000..0e859a952 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-116.digest @@ -0,0 +1,40 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/scene/camera1") +camera: Camera { origin: Vec3A(0.0074343784, 1.9913422, 4.0133057), lower_left_corner: Vec3A(-8.881443, -3.0086517, -0.98669434), horizontal: Vec3A(17.777756, 0.0, 0.0), vertical: Vec3A(0.0, 9.999988, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: Some(Vec4(0.0, 0.0, -1.0, 3.9133058)), far: Some(Vec4(0.0, 0.0, 1.0, 9995.986)), planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: None +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 640, height: 360, region: PixelRect { x0: 0, y0: 0, x1: 640, y1: 360 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 12.700017, aperture: [25.4, 25.4], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 5.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/cornellbox.usda"], invisible_overrides: Some(0) } +layer: $DIR/cornellbox.usda +warning: Warning { code: AssetUnsupportedByHost, kind: Skipped, count: 1, prims: [], message: "No asset loader: environment map $DIR/sky_gradient.exr ignored — the dome falls back to its uniform colour. Use Scene::from_usd_with_assets to supply one." } +warning: Warning { code: MaterialFallbackDefault, kind: Skipped, count: 1, prims: ["/scene/Looks/initialShadingGroup"], message: "Material /scene/Looks/initialShadingGroup has no surface shader — using default grey OpenPBR" } +lights: 1 +light 0: dome name Some("/scene/Sky") lpe None pmf 1.0 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 5 geometries, PrimitiveBreakdown { triangles: 822, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 2 } top level, PrimitiveBreakdown { triangles: 1582, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 2 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 4.0 motion [] pieces all=10:88b22fc3345d5b05 camera=10:88b22fc3345d5b05 shadow=10:88b22fc3345d5b05 indirect=10:88b22fc3345d5b05 +geom 1: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.2 motion [] pieces all=760:c2b60a75c52c78b9 camera=760:c2b60a75c52c78b9 shadow=760:c2b60a75c52c78b9 indirect=760:c2b60a75c52c78b9 +geom 2: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=12:94a297badef437e1 camera=12:94a297badef437e1 shadow=12:94a297badef437e1 indirect=12:94a297badef437e1 +geom 3: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.25 motion [] pieces all=800:4a8c9f44d777e131 camera=800:4a8c9f44d777e131 shadow=800:4a8c9f44d777e131 indirect=800:4a8c9f44d777e131 +geom 4: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.3585339 motion [] pieces all=760:2344ecf63e12c441 camera=760:2344ecf63e12c441 shadow=760:2344ecf63e12c441 indirect=760:2344ecf63e12c441 +provenance material /scene/Looks/initialShadingGroup: MaterialOrigin { slots: [0, 1, 2, 3, 4], displaced: false } +provenance light /scene/Sky: LightOrigin { index: 0, geoms: 0..0 } +provenance geometry 0..1: /scene/pCube1 +provenance geometry 1..2: /scene/pSphere1 +provenance geometry 2..3: /scene/pCube2 +provenance geometry 3..4: /scene/pTorus1 +provenance geometry 4..5: /scene/pSphere2 +provenance mesh: MeshOrigin { geom_id: 0, slot: 0, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 1, slot: 1, baked: false, moving: false } +provenance mesh: MeshOrigin { geom_id: 2, slot: 2, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 3, slot: 3, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 4, slot: 1, baked: false, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 12343188411137242430, n_points: 8, n_indices: 20, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 1: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 17119738035130870988, n_points: 382, n_indices: 1560, n_uvs: None, smooth: false, material: 0 }), placements: 2, shared: false, displaced: false } +provenance mesh slot 2: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 1739488954094729910, n_points: 8, n_indices: 24, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 3: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 6096447469814747168, n_points: 400, n_indices: 1600, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/scene/camera1"), cameras: ["/scene/camera1"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/scene/camera1"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-116.image b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-116.image new file mode 100644 index 000000000..ba4884437 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-116.image @@ -0,0 +1 @@ +640x360 16spp clamp-off 52a1a46f3a46d230 diff --git a/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-117.digest b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-117.digest new file mode 100644 index 000000000..0e859a952 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-117.digest @@ -0,0 +1,40 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/scene/camera1") +camera: Camera { origin: Vec3A(0.0074343784, 1.9913422, 4.0133057), lower_left_corner: Vec3A(-8.881443, -3.0086517, -0.98669434), horizontal: Vec3A(17.777756, 0.0, 0.0), vertical: Vec3A(0.0, 9.999988, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: Some(Vec4(0.0, 0.0, -1.0, 3.9133058)), far: Some(Vec4(0.0, 0.0, 1.0, 9995.986)), planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: None +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 640, height: 360, region: PixelRect { x0: 0, y0: 0, x1: 640, y1: 360 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 12.700017, aperture: [25.4, 25.4], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 5.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/cornellbox.usda"], invisible_overrides: Some(0) } +layer: $DIR/cornellbox.usda +warning: Warning { code: AssetUnsupportedByHost, kind: Skipped, count: 1, prims: [], message: "No asset loader: environment map $DIR/sky_gradient.exr ignored — the dome falls back to its uniform colour. Use Scene::from_usd_with_assets to supply one." } +warning: Warning { code: MaterialFallbackDefault, kind: Skipped, count: 1, prims: ["/scene/Looks/initialShadingGroup"], message: "Material /scene/Looks/initialShadingGroup has no surface shader — using default grey OpenPBR" } +lights: 1 +light 0: dome name Some("/scene/Sky") lpe None pmf 1.0 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 5 geometries, PrimitiveBreakdown { triangles: 822, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 2 } top level, PrimitiveBreakdown { triangles: 1582, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 2 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 4.0 motion [] pieces all=10:88b22fc3345d5b05 camera=10:88b22fc3345d5b05 shadow=10:88b22fc3345d5b05 indirect=10:88b22fc3345d5b05 +geom 1: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.2 motion [] pieces all=760:c2b60a75c52c78b9 camera=760:c2b60a75c52c78b9 shadow=760:c2b60a75c52c78b9 indirect=760:c2b60a75c52c78b9 +geom 2: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=12:94a297badef437e1 camera=12:94a297badef437e1 shadow=12:94a297badef437e1 indirect=12:94a297badef437e1 +geom 3: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.25 motion [] pieces all=800:4a8c9f44d777e131 camera=800:4a8c9f44d777e131 shadow=800:4a8c9f44d777e131 indirect=800:4a8c9f44d777e131 +geom 4: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.3585339 motion [] pieces all=760:2344ecf63e12c441 camera=760:2344ecf63e12c441 shadow=760:2344ecf63e12c441 indirect=760:2344ecf63e12c441 +provenance material /scene/Looks/initialShadingGroup: MaterialOrigin { slots: [0, 1, 2, 3, 4], displaced: false } +provenance light /scene/Sky: LightOrigin { index: 0, geoms: 0..0 } +provenance geometry 0..1: /scene/pCube1 +provenance geometry 1..2: /scene/pSphere1 +provenance geometry 2..3: /scene/pCube2 +provenance geometry 3..4: /scene/pTorus1 +provenance geometry 4..5: /scene/pSphere2 +provenance mesh: MeshOrigin { geom_id: 0, slot: 0, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 1, slot: 1, baked: false, moving: false } +provenance mesh: MeshOrigin { geom_id: 2, slot: 2, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 3, slot: 3, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 4, slot: 1, baked: false, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 12343188411137242430, n_points: 8, n_indices: 20, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 1: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 17119738035130870988, n_points: 382, n_indices: 1560, n_uvs: None, smooth: false, material: 0 }), placements: 2, shared: false, displaced: false } +provenance mesh slot 2: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 1739488954094729910, n_points: 8, n_indices: 24, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 3: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 6096447469814747168, n_points: 400, n_indices: 1600, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/scene/camera1"), cameras: ["/scene/camera1"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/scene/camera1"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-117.image b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-117.image new file mode 100644 index 000000000..ba4884437 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-117.image @@ -0,0 +1 @@ +640x360 16spp clamp-off 52a1a46f3a46d230 diff --git a/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-118.digest b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-118.digest new file mode 100644 index 000000000..0e859a952 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-118.digest @@ -0,0 +1,40 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/scene/camera1") +camera: Camera { origin: Vec3A(0.0074343784, 1.9913422, 4.0133057), lower_left_corner: Vec3A(-8.881443, -3.0086517, -0.98669434), horizontal: Vec3A(17.777756, 0.0, 0.0), vertical: Vec3A(0.0, 9.999988, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: Some(Vec4(0.0, 0.0, -1.0, 3.9133058)), far: Some(Vec4(0.0, 0.0, 1.0, 9995.986)), planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: None +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 640, height: 360, region: PixelRect { x0: 0, y0: 0, x1: 640, y1: 360 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 12.700017, aperture: [25.4, 25.4], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 5.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/cornellbox.usda"], invisible_overrides: Some(0) } +layer: $DIR/cornellbox.usda +warning: Warning { code: AssetUnsupportedByHost, kind: Skipped, count: 1, prims: [], message: "No asset loader: environment map $DIR/sky_gradient.exr ignored — the dome falls back to its uniform colour. Use Scene::from_usd_with_assets to supply one." } +warning: Warning { code: MaterialFallbackDefault, kind: Skipped, count: 1, prims: ["/scene/Looks/initialShadingGroup"], message: "Material /scene/Looks/initialShadingGroup has no surface shader — using default grey OpenPBR" } +lights: 1 +light 0: dome name Some("/scene/Sky") lpe None pmf 1.0 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 5 geometries, PrimitiveBreakdown { triangles: 822, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 2 } top level, PrimitiveBreakdown { triangles: 1582, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 2 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 4.0 motion [] pieces all=10:88b22fc3345d5b05 camera=10:88b22fc3345d5b05 shadow=10:88b22fc3345d5b05 indirect=10:88b22fc3345d5b05 +geom 1: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.2 motion [] pieces all=760:c2b60a75c52c78b9 camera=760:c2b60a75c52c78b9 shadow=760:c2b60a75c52c78b9 indirect=760:c2b60a75c52c78b9 +geom 2: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=12:94a297badef437e1 camera=12:94a297badef437e1 shadow=12:94a297badef437e1 indirect=12:94a297badef437e1 +geom 3: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.25 motion [] pieces all=800:4a8c9f44d777e131 camera=800:4a8c9f44d777e131 shadow=800:4a8c9f44d777e131 indirect=800:4a8c9f44d777e131 +geom 4: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.3585339 motion [] pieces all=760:2344ecf63e12c441 camera=760:2344ecf63e12c441 shadow=760:2344ecf63e12c441 indirect=760:2344ecf63e12c441 +provenance material /scene/Looks/initialShadingGroup: MaterialOrigin { slots: [0, 1, 2, 3, 4], displaced: false } +provenance light /scene/Sky: LightOrigin { index: 0, geoms: 0..0 } +provenance geometry 0..1: /scene/pCube1 +provenance geometry 1..2: /scene/pSphere1 +provenance geometry 2..3: /scene/pCube2 +provenance geometry 3..4: /scene/pTorus1 +provenance geometry 4..5: /scene/pSphere2 +provenance mesh: MeshOrigin { geom_id: 0, slot: 0, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 1, slot: 1, baked: false, moving: false } +provenance mesh: MeshOrigin { geom_id: 2, slot: 2, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 3, slot: 3, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 4, slot: 1, baked: false, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 12343188411137242430, n_points: 8, n_indices: 20, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 1: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 17119738035130870988, n_points: 382, n_indices: 1560, n_uvs: None, smooth: false, material: 0 }), placements: 2, shared: false, displaced: false } +provenance mesh slot 2: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 1739488954094729910, n_points: 8, n_indices: 24, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 3: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 6096447469814747168, n_points: 400, n_indices: 1600, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/scene/camera1"), cameras: ["/scene/camera1"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/scene/camera1"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-118.image b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-118.image new file mode 100644 index 000000000..ba4884437 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-118.image @@ -0,0 +1 @@ +640x360 16spp clamp-off 52a1a46f3a46d230 diff --git a/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-119.digest b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-119.digest new file mode 100644 index 000000000..0e859a952 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-119.digest @@ -0,0 +1,40 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/scene/camera1") +camera: Camera { origin: Vec3A(0.0074343784, 1.9913422, 4.0133057), lower_left_corner: Vec3A(-8.881443, -3.0086517, -0.98669434), horizontal: Vec3A(17.777756, 0.0, 0.0), vertical: Vec3A(0.0, 9.999988, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: Some(Vec4(0.0, 0.0, -1.0, 3.9133058)), far: Some(Vec4(0.0, 0.0, 1.0, 9995.986)), planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: None +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 640, height: 360, region: PixelRect { x0: 0, y0: 0, x1: 640, y1: 360 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 12.700017, aperture: [25.4, 25.4], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 5.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/cornellbox.usda"], invisible_overrides: Some(0) } +layer: $DIR/cornellbox.usda +warning: Warning { code: AssetUnsupportedByHost, kind: Skipped, count: 1, prims: [], message: "No asset loader: environment map $DIR/sky_gradient.exr ignored — the dome falls back to its uniform colour. Use Scene::from_usd_with_assets to supply one." } +warning: Warning { code: MaterialFallbackDefault, kind: Skipped, count: 1, prims: ["/scene/Looks/initialShadingGroup"], message: "Material /scene/Looks/initialShadingGroup has no surface shader — using default grey OpenPBR" } +lights: 1 +light 0: dome name Some("/scene/Sky") lpe None pmf 1.0 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 5 geometries, PrimitiveBreakdown { triangles: 822, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 2 } top level, PrimitiveBreakdown { triangles: 1582, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 2 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 4.0 motion [] pieces all=10:88b22fc3345d5b05 camera=10:88b22fc3345d5b05 shadow=10:88b22fc3345d5b05 indirect=10:88b22fc3345d5b05 +geom 1: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.2 motion [] pieces all=760:c2b60a75c52c78b9 camera=760:c2b60a75c52c78b9 shadow=760:c2b60a75c52c78b9 indirect=760:c2b60a75c52c78b9 +geom 2: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=12:94a297badef437e1 camera=12:94a297badef437e1 shadow=12:94a297badef437e1 indirect=12:94a297badef437e1 +geom 3: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.25 motion [] pieces all=800:4a8c9f44d777e131 camera=800:4a8c9f44d777e131 shadow=800:4a8c9f44d777e131 indirect=800:4a8c9f44d777e131 +geom 4: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.3585339 motion [] pieces all=760:2344ecf63e12c441 camera=760:2344ecf63e12c441 shadow=760:2344ecf63e12c441 indirect=760:2344ecf63e12c441 +provenance material /scene/Looks/initialShadingGroup: MaterialOrigin { slots: [0, 1, 2, 3, 4], displaced: false } +provenance light /scene/Sky: LightOrigin { index: 0, geoms: 0..0 } +provenance geometry 0..1: /scene/pCube1 +provenance geometry 1..2: /scene/pSphere1 +provenance geometry 2..3: /scene/pCube2 +provenance geometry 3..4: /scene/pTorus1 +provenance geometry 4..5: /scene/pSphere2 +provenance mesh: MeshOrigin { geom_id: 0, slot: 0, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 1, slot: 1, baked: false, moving: false } +provenance mesh: MeshOrigin { geom_id: 2, slot: 2, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 3, slot: 3, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 4, slot: 1, baked: false, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 12343188411137242430, n_points: 8, n_indices: 20, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 1: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 17119738035130870988, n_points: 382, n_indices: 1560, n_uvs: None, smooth: false, material: 0 }), placements: 2, shared: false, displaced: false } +provenance mesh slot 2: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 1739488954094729910, n_points: 8, n_indices: 24, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 3: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 6096447469814747168, n_points: 400, n_indices: 1600, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/scene/camera1"), cameras: ["/scene/camera1"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/scene/camera1"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-119.image b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-119.image new file mode 100644 index 000000000..ba4884437 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-119.image @@ -0,0 +1 @@ +640x360 16spp clamp-off 52a1a46f3a46d230 diff --git a/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-12.digest b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-12.digest new file mode 100644 index 000000000..0e859a952 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-12.digest @@ -0,0 +1,40 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/scene/camera1") +camera: Camera { origin: Vec3A(0.0074343784, 1.9913422, 4.0133057), lower_left_corner: Vec3A(-8.881443, -3.0086517, -0.98669434), horizontal: Vec3A(17.777756, 0.0, 0.0), vertical: Vec3A(0.0, 9.999988, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: Some(Vec4(0.0, 0.0, -1.0, 3.9133058)), far: Some(Vec4(0.0, 0.0, 1.0, 9995.986)), planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: None +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 640, height: 360, region: PixelRect { x0: 0, y0: 0, x1: 640, y1: 360 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 12.700017, aperture: [25.4, 25.4], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 5.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/cornellbox.usda"], invisible_overrides: Some(0) } +layer: $DIR/cornellbox.usda +warning: Warning { code: AssetUnsupportedByHost, kind: Skipped, count: 1, prims: [], message: "No asset loader: environment map $DIR/sky_gradient.exr ignored — the dome falls back to its uniform colour. Use Scene::from_usd_with_assets to supply one." } +warning: Warning { code: MaterialFallbackDefault, kind: Skipped, count: 1, prims: ["/scene/Looks/initialShadingGroup"], message: "Material /scene/Looks/initialShadingGroup has no surface shader — using default grey OpenPBR" } +lights: 1 +light 0: dome name Some("/scene/Sky") lpe None pmf 1.0 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 5 geometries, PrimitiveBreakdown { triangles: 822, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 2 } top level, PrimitiveBreakdown { triangles: 1582, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 2 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 4.0 motion [] pieces all=10:88b22fc3345d5b05 camera=10:88b22fc3345d5b05 shadow=10:88b22fc3345d5b05 indirect=10:88b22fc3345d5b05 +geom 1: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.2 motion [] pieces all=760:c2b60a75c52c78b9 camera=760:c2b60a75c52c78b9 shadow=760:c2b60a75c52c78b9 indirect=760:c2b60a75c52c78b9 +geom 2: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=12:94a297badef437e1 camera=12:94a297badef437e1 shadow=12:94a297badef437e1 indirect=12:94a297badef437e1 +geom 3: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.25 motion [] pieces all=800:4a8c9f44d777e131 camera=800:4a8c9f44d777e131 shadow=800:4a8c9f44d777e131 indirect=800:4a8c9f44d777e131 +geom 4: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.3585339 motion [] pieces all=760:2344ecf63e12c441 camera=760:2344ecf63e12c441 shadow=760:2344ecf63e12c441 indirect=760:2344ecf63e12c441 +provenance material /scene/Looks/initialShadingGroup: MaterialOrigin { slots: [0, 1, 2, 3, 4], displaced: false } +provenance light /scene/Sky: LightOrigin { index: 0, geoms: 0..0 } +provenance geometry 0..1: /scene/pCube1 +provenance geometry 1..2: /scene/pSphere1 +provenance geometry 2..3: /scene/pCube2 +provenance geometry 3..4: /scene/pTorus1 +provenance geometry 4..5: /scene/pSphere2 +provenance mesh: MeshOrigin { geom_id: 0, slot: 0, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 1, slot: 1, baked: false, moving: false } +provenance mesh: MeshOrigin { geom_id: 2, slot: 2, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 3, slot: 3, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 4, slot: 1, baked: false, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 12343188411137242430, n_points: 8, n_indices: 20, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 1: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 17119738035130870988, n_points: 382, n_indices: 1560, n_uvs: None, smooth: false, material: 0 }), placements: 2, shared: false, displaced: false } +provenance mesh slot 2: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 1739488954094729910, n_points: 8, n_indices: 24, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 3: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 6096447469814747168, n_points: 400, n_indices: 1600, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/scene/camera1"), cameras: ["/scene/camera1"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/scene/camera1"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-12.image b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-12.image new file mode 100644 index 000000000..ba4884437 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-12.image @@ -0,0 +1 @@ +640x360 16spp clamp-off 52a1a46f3a46d230 diff --git a/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-120.digest b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-120.digest new file mode 100644 index 000000000..0e859a952 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-120.digest @@ -0,0 +1,40 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/scene/camera1") +camera: Camera { origin: Vec3A(0.0074343784, 1.9913422, 4.0133057), lower_left_corner: Vec3A(-8.881443, -3.0086517, -0.98669434), horizontal: Vec3A(17.777756, 0.0, 0.0), vertical: Vec3A(0.0, 9.999988, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: Some(Vec4(0.0, 0.0, -1.0, 3.9133058)), far: Some(Vec4(0.0, 0.0, 1.0, 9995.986)), planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: None +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 640, height: 360, region: PixelRect { x0: 0, y0: 0, x1: 640, y1: 360 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 12.700017, aperture: [25.4, 25.4], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 5.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/cornellbox.usda"], invisible_overrides: Some(0) } +layer: $DIR/cornellbox.usda +warning: Warning { code: AssetUnsupportedByHost, kind: Skipped, count: 1, prims: [], message: "No asset loader: environment map $DIR/sky_gradient.exr ignored — the dome falls back to its uniform colour. Use Scene::from_usd_with_assets to supply one." } +warning: Warning { code: MaterialFallbackDefault, kind: Skipped, count: 1, prims: ["/scene/Looks/initialShadingGroup"], message: "Material /scene/Looks/initialShadingGroup has no surface shader — using default grey OpenPBR" } +lights: 1 +light 0: dome name Some("/scene/Sky") lpe None pmf 1.0 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 5 geometries, PrimitiveBreakdown { triangles: 822, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 2 } top level, PrimitiveBreakdown { triangles: 1582, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 2 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 4.0 motion [] pieces all=10:88b22fc3345d5b05 camera=10:88b22fc3345d5b05 shadow=10:88b22fc3345d5b05 indirect=10:88b22fc3345d5b05 +geom 1: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.2 motion [] pieces all=760:c2b60a75c52c78b9 camera=760:c2b60a75c52c78b9 shadow=760:c2b60a75c52c78b9 indirect=760:c2b60a75c52c78b9 +geom 2: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=12:94a297badef437e1 camera=12:94a297badef437e1 shadow=12:94a297badef437e1 indirect=12:94a297badef437e1 +geom 3: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.25 motion [] pieces all=800:4a8c9f44d777e131 camera=800:4a8c9f44d777e131 shadow=800:4a8c9f44d777e131 indirect=800:4a8c9f44d777e131 +geom 4: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.3585339 motion [] pieces all=760:2344ecf63e12c441 camera=760:2344ecf63e12c441 shadow=760:2344ecf63e12c441 indirect=760:2344ecf63e12c441 +provenance material /scene/Looks/initialShadingGroup: MaterialOrigin { slots: [0, 1, 2, 3, 4], displaced: false } +provenance light /scene/Sky: LightOrigin { index: 0, geoms: 0..0 } +provenance geometry 0..1: /scene/pCube1 +provenance geometry 1..2: /scene/pSphere1 +provenance geometry 2..3: /scene/pCube2 +provenance geometry 3..4: /scene/pTorus1 +provenance geometry 4..5: /scene/pSphere2 +provenance mesh: MeshOrigin { geom_id: 0, slot: 0, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 1, slot: 1, baked: false, moving: false } +provenance mesh: MeshOrigin { geom_id: 2, slot: 2, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 3, slot: 3, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 4, slot: 1, baked: false, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 12343188411137242430, n_points: 8, n_indices: 20, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 1: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 17119738035130870988, n_points: 382, n_indices: 1560, n_uvs: None, smooth: false, material: 0 }), placements: 2, shared: false, displaced: false } +provenance mesh slot 2: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 1739488954094729910, n_points: 8, n_indices: 24, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 3: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 6096447469814747168, n_points: 400, n_indices: 1600, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/scene/camera1"), cameras: ["/scene/camera1"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/scene/camera1"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-120.image b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-120.image new file mode 100644 index 000000000..ba4884437 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-120.image @@ -0,0 +1 @@ +640x360 16spp clamp-off 52a1a46f3a46d230 diff --git a/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-121.digest b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-121.digest new file mode 100644 index 000000000..0e859a952 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-121.digest @@ -0,0 +1,40 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/scene/camera1") +camera: Camera { origin: Vec3A(0.0074343784, 1.9913422, 4.0133057), lower_left_corner: Vec3A(-8.881443, -3.0086517, -0.98669434), horizontal: Vec3A(17.777756, 0.0, 0.0), vertical: Vec3A(0.0, 9.999988, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: Some(Vec4(0.0, 0.0, -1.0, 3.9133058)), far: Some(Vec4(0.0, 0.0, 1.0, 9995.986)), planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: None +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 640, height: 360, region: PixelRect { x0: 0, y0: 0, x1: 640, y1: 360 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 12.700017, aperture: [25.4, 25.4], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 5.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/cornellbox.usda"], invisible_overrides: Some(0) } +layer: $DIR/cornellbox.usda +warning: Warning { code: AssetUnsupportedByHost, kind: Skipped, count: 1, prims: [], message: "No asset loader: environment map $DIR/sky_gradient.exr ignored — the dome falls back to its uniform colour. Use Scene::from_usd_with_assets to supply one." } +warning: Warning { code: MaterialFallbackDefault, kind: Skipped, count: 1, prims: ["/scene/Looks/initialShadingGroup"], message: "Material /scene/Looks/initialShadingGroup has no surface shader — using default grey OpenPBR" } +lights: 1 +light 0: dome name Some("/scene/Sky") lpe None pmf 1.0 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 5 geometries, PrimitiveBreakdown { triangles: 822, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 2 } top level, PrimitiveBreakdown { triangles: 1582, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 2 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 4.0 motion [] pieces all=10:88b22fc3345d5b05 camera=10:88b22fc3345d5b05 shadow=10:88b22fc3345d5b05 indirect=10:88b22fc3345d5b05 +geom 1: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.2 motion [] pieces all=760:c2b60a75c52c78b9 camera=760:c2b60a75c52c78b9 shadow=760:c2b60a75c52c78b9 indirect=760:c2b60a75c52c78b9 +geom 2: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=12:94a297badef437e1 camera=12:94a297badef437e1 shadow=12:94a297badef437e1 indirect=12:94a297badef437e1 +geom 3: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.25 motion [] pieces all=800:4a8c9f44d777e131 camera=800:4a8c9f44d777e131 shadow=800:4a8c9f44d777e131 indirect=800:4a8c9f44d777e131 +geom 4: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.3585339 motion [] pieces all=760:2344ecf63e12c441 camera=760:2344ecf63e12c441 shadow=760:2344ecf63e12c441 indirect=760:2344ecf63e12c441 +provenance material /scene/Looks/initialShadingGroup: MaterialOrigin { slots: [0, 1, 2, 3, 4], displaced: false } +provenance light /scene/Sky: LightOrigin { index: 0, geoms: 0..0 } +provenance geometry 0..1: /scene/pCube1 +provenance geometry 1..2: /scene/pSphere1 +provenance geometry 2..3: /scene/pCube2 +provenance geometry 3..4: /scene/pTorus1 +provenance geometry 4..5: /scene/pSphere2 +provenance mesh: MeshOrigin { geom_id: 0, slot: 0, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 1, slot: 1, baked: false, moving: false } +provenance mesh: MeshOrigin { geom_id: 2, slot: 2, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 3, slot: 3, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 4, slot: 1, baked: false, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 12343188411137242430, n_points: 8, n_indices: 20, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 1: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 17119738035130870988, n_points: 382, n_indices: 1560, n_uvs: None, smooth: false, material: 0 }), placements: 2, shared: false, displaced: false } +provenance mesh slot 2: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 1739488954094729910, n_points: 8, n_indices: 24, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 3: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 6096447469814747168, n_points: 400, n_indices: 1600, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/scene/camera1"), cameras: ["/scene/camera1"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/scene/camera1"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-121.image b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-121.image new file mode 100644 index 000000000..ba4884437 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-121.image @@ -0,0 +1 @@ +640x360 16spp clamp-off 52a1a46f3a46d230 diff --git a/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-122.digest b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-122.digest new file mode 100644 index 000000000..0e859a952 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-122.digest @@ -0,0 +1,40 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/scene/camera1") +camera: Camera { origin: Vec3A(0.0074343784, 1.9913422, 4.0133057), lower_left_corner: Vec3A(-8.881443, -3.0086517, -0.98669434), horizontal: Vec3A(17.777756, 0.0, 0.0), vertical: Vec3A(0.0, 9.999988, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: Some(Vec4(0.0, 0.0, -1.0, 3.9133058)), far: Some(Vec4(0.0, 0.0, 1.0, 9995.986)), planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: None +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 640, height: 360, region: PixelRect { x0: 0, y0: 0, x1: 640, y1: 360 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 12.700017, aperture: [25.4, 25.4], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 5.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/cornellbox.usda"], invisible_overrides: Some(0) } +layer: $DIR/cornellbox.usda +warning: Warning { code: AssetUnsupportedByHost, kind: Skipped, count: 1, prims: [], message: "No asset loader: environment map $DIR/sky_gradient.exr ignored — the dome falls back to its uniform colour. Use Scene::from_usd_with_assets to supply one." } +warning: Warning { code: MaterialFallbackDefault, kind: Skipped, count: 1, prims: ["/scene/Looks/initialShadingGroup"], message: "Material /scene/Looks/initialShadingGroup has no surface shader — using default grey OpenPBR" } +lights: 1 +light 0: dome name Some("/scene/Sky") lpe None pmf 1.0 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 5 geometries, PrimitiveBreakdown { triangles: 822, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 2 } top level, PrimitiveBreakdown { triangles: 1582, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 2 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 4.0 motion [] pieces all=10:88b22fc3345d5b05 camera=10:88b22fc3345d5b05 shadow=10:88b22fc3345d5b05 indirect=10:88b22fc3345d5b05 +geom 1: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.2 motion [] pieces all=760:c2b60a75c52c78b9 camera=760:c2b60a75c52c78b9 shadow=760:c2b60a75c52c78b9 indirect=760:c2b60a75c52c78b9 +geom 2: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=12:94a297badef437e1 camera=12:94a297badef437e1 shadow=12:94a297badef437e1 indirect=12:94a297badef437e1 +geom 3: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.25 motion [] pieces all=800:4a8c9f44d777e131 camera=800:4a8c9f44d777e131 shadow=800:4a8c9f44d777e131 indirect=800:4a8c9f44d777e131 +geom 4: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.3585339 motion [] pieces all=760:2344ecf63e12c441 camera=760:2344ecf63e12c441 shadow=760:2344ecf63e12c441 indirect=760:2344ecf63e12c441 +provenance material /scene/Looks/initialShadingGroup: MaterialOrigin { slots: [0, 1, 2, 3, 4], displaced: false } +provenance light /scene/Sky: LightOrigin { index: 0, geoms: 0..0 } +provenance geometry 0..1: /scene/pCube1 +provenance geometry 1..2: /scene/pSphere1 +provenance geometry 2..3: /scene/pCube2 +provenance geometry 3..4: /scene/pTorus1 +provenance geometry 4..5: /scene/pSphere2 +provenance mesh: MeshOrigin { geom_id: 0, slot: 0, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 1, slot: 1, baked: false, moving: false } +provenance mesh: MeshOrigin { geom_id: 2, slot: 2, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 3, slot: 3, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 4, slot: 1, baked: false, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 12343188411137242430, n_points: 8, n_indices: 20, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 1: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 17119738035130870988, n_points: 382, n_indices: 1560, n_uvs: None, smooth: false, material: 0 }), placements: 2, shared: false, displaced: false } +provenance mesh slot 2: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 1739488954094729910, n_points: 8, n_indices: 24, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 3: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 6096447469814747168, n_points: 400, n_indices: 1600, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/scene/camera1"), cameras: ["/scene/camera1"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/scene/camera1"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-122.image b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-122.image new file mode 100644 index 000000000..ba4884437 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-122.image @@ -0,0 +1 @@ +640x360 16spp clamp-off 52a1a46f3a46d230 diff --git a/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-123.digest b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-123.digest new file mode 100644 index 000000000..0e859a952 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-123.digest @@ -0,0 +1,40 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/scene/camera1") +camera: Camera { origin: Vec3A(0.0074343784, 1.9913422, 4.0133057), lower_left_corner: Vec3A(-8.881443, -3.0086517, -0.98669434), horizontal: Vec3A(17.777756, 0.0, 0.0), vertical: Vec3A(0.0, 9.999988, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: Some(Vec4(0.0, 0.0, -1.0, 3.9133058)), far: Some(Vec4(0.0, 0.0, 1.0, 9995.986)), planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: None +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 640, height: 360, region: PixelRect { x0: 0, y0: 0, x1: 640, y1: 360 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 12.700017, aperture: [25.4, 25.4], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 5.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/cornellbox.usda"], invisible_overrides: Some(0) } +layer: $DIR/cornellbox.usda +warning: Warning { code: AssetUnsupportedByHost, kind: Skipped, count: 1, prims: [], message: "No asset loader: environment map $DIR/sky_gradient.exr ignored — the dome falls back to its uniform colour. Use Scene::from_usd_with_assets to supply one." } +warning: Warning { code: MaterialFallbackDefault, kind: Skipped, count: 1, prims: ["/scene/Looks/initialShadingGroup"], message: "Material /scene/Looks/initialShadingGroup has no surface shader — using default grey OpenPBR" } +lights: 1 +light 0: dome name Some("/scene/Sky") lpe None pmf 1.0 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 5 geometries, PrimitiveBreakdown { triangles: 822, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 2 } top level, PrimitiveBreakdown { triangles: 1582, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 2 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 4.0 motion [] pieces all=10:88b22fc3345d5b05 camera=10:88b22fc3345d5b05 shadow=10:88b22fc3345d5b05 indirect=10:88b22fc3345d5b05 +geom 1: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.2 motion [] pieces all=760:c2b60a75c52c78b9 camera=760:c2b60a75c52c78b9 shadow=760:c2b60a75c52c78b9 indirect=760:c2b60a75c52c78b9 +geom 2: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=12:94a297badef437e1 camera=12:94a297badef437e1 shadow=12:94a297badef437e1 indirect=12:94a297badef437e1 +geom 3: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.25 motion [] pieces all=800:4a8c9f44d777e131 camera=800:4a8c9f44d777e131 shadow=800:4a8c9f44d777e131 indirect=800:4a8c9f44d777e131 +geom 4: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.3585339 motion [] pieces all=760:2344ecf63e12c441 camera=760:2344ecf63e12c441 shadow=760:2344ecf63e12c441 indirect=760:2344ecf63e12c441 +provenance material /scene/Looks/initialShadingGroup: MaterialOrigin { slots: [0, 1, 2, 3, 4], displaced: false } +provenance light /scene/Sky: LightOrigin { index: 0, geoms: 0..0 } +provenance geometry 0..1: /scene/pCube1 +provenance geometry 1..2: /scene/pSphere1 +provenance geometry 2..3: /scene/pCube2 +provenance geometry 3..4: /scene/pTorus1 +provenance geometry 4..5: /scene/pSphere2 +provenance mesh: MeshOrigin { geom_id: 0, slot: 0, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 1, slot: 1, baked: false, moving: false } +provenance mesh: MeshOrigin { geom_id: 2, slot: 2, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 3, slot: 3, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 4, slot: 1, baked: false, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 12343188411137242430, n_points: 8, n_indices: 20, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 1: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 17119738035130870988, n_points: 382, n_indices: 1560, n_uvs: None, smooth: false, material: 0 }), placements: 2, shared: false, displaced: false } +provenance mesh slot 2: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 1739488954094729910, n_points: 8, n_indices: 24, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 3: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 6096447469814747168, n_points: 400, n_indices: 1600, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/scene/camera1"), cameras: ["/scene/camera1"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/scene/camera1"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-123.image b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-123.image new file mode 100644 index 000000000..ba4884437 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-123.image @@ -0,0 +1 @@ +640x360 16spp clamp-off 52a1a46f3a46d230 diff --git a/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-124.digest b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-124.digest new file mode 100644 index 000000000..0e859a952 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-124.digest @@ -0,0 +1,40 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/scene/camera1") +camera: Camera { origin: Vec3A(0.0074343784, 1.9913422, 4.0133057), lower_left_corner: Vec3A(-8.881443, -3.0086517, -0.98669434), horizontal: Vec3A(17.777756, 0.0, 0.0), vertical: Vec3A(0.0, 9.999988, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: Some(Vec4(0.0, 0.0, -1.0, 3.9133058)), far: Some(Vec4(0.0, 0.0, 1.0, 9995.986)), planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: None +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 640, height: 360, region: PixelRect { x0: 0, y0: 0, x1: 640, y1: 360 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 12.700017, aperture: [25.4, 25.4], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 5.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/cornellbox.usda"], invisible_overrides: Some(0) } +layer: $DIR/cornellbox.usda +warning: Warning { code: AssetUnsupportedByHost, kind: Skipped, count: 1, prims: [], message: "No asset loader: environment map $DIR/sky_gradient.exr ignored — the dome falls back to its uniform colour. Use Scene::from_usd_with_assets to supply one." } +warning: Warning { code: MaterialFallbackDefault, kind: Skipped, count: 1, prims: ["/scene/Looks/initialShadingGroup"], message: "Material /scene/Looks/initialShadingGroup has no surface shader — using default grey OpenPBR" } +lights: 1 +light 0: dome name Some("/scene/Sky") lpe None pmf 1.0 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 5 geometries, PrimitiveBreakdown { triangles: 822, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 2 } top level, PrimitiveBreakdown { triangles: 1582, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 2 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 4.0 motion [] pieces all=10:88b22fc3345d5b05 camera=10:88b22fc3345d5b05 shadow=10:88b22fc3345d5b05 indirect=10:88b22fc3345d5b05 +geom 1: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.2 motion [] pieces all=760:c2b60a75c52c78b9 camera=760:c2b60a75c52c78b9 shadow=760:c2b60a75c52c78b9 indirect=760:c2b60a75c52c78b9 +geom 2: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=12:94a297badef437e1 camera=12:94a297badef437e1 shadow=12:94a297badef437e1 indirect=12:94a297badef437e1 +geom 3: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.25 motion [] pieces all=800:4a8c9f44d777e131 camera=800:4a8c9f44d777e131 shadow=800:4a8c9f44d777e131 indirect=800:4a8c9f44d777e131 +geom 4: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.3585339 motion [] pieces all=760:2344ecf63e12c441 camera=760:2344ecf63e12c441 shadow=760:2344ecf63e12c441 indirect=760:2344ecf63e12c441 +provenance material /scene/Looks/initialShadingGroup: MaterialOrigin { slots: [0, 1, 2, 3, 4], displaced: false } +provenance light /scene/Sky: LightOrigin { index: 0, geoms: 0..0 } +provenance geometry 0..1: /scene/pCube1 +provenance geometry 1..2: /scene/pSphere1 +provenance geometry 2..3: /scene/pCube2 +provenance geometry 3..4: /scene/pTorus1 +provenance geometry 4..5: /scene/pSphere2 +provenance mesh: MeshOrigin { geom_id: 0, slot: 0, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 1, slot: 1, baked: false, moving: false } +provenance mesh: MeshOrigin { geom_id: 2, slot: 2, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 3, slot: 3, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 4, slot: 1, baked: false, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 12343188411137242430, n_points: 8, n_indices: 20, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 1: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 17119738035130870988, n_points: 382, n_indices: 1560, n_uvs: None, smooth: false, material: 0 }), placements: 2, shared: false, displaced: false } +provenance mesh slot 2: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 1739488954094729910, n_points: 8, n_indices: 24, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 3: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 6096447469814747168, n_points: 400, n_indices: 1600, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/scene/camera1"), cameras: ["/scene/camera1"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/scene/camera1"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-124.image b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-124.image new file mode 100644 index 000000000..ba4884437 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-124.image @@ -0,0 +1 @@ +640x360 16spp clamp-off 52a1a46f3a46d230 diff --git a/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-125.digest b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-125.digest new file mode 100644 index 000000000..0e859a952 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-125.digest @@ -0,0 +1,40 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/scene/camera1") +camera: Camera { origin: Vec3A(0.0074343784, 1.9913422, 4.0133057), lower_left_corner: Vec3A(-8.881443, -3.0086517, -0.98669434), horizontal: Vec3A(17.777756, 0.0, 0.0), vertical: Vec3A(0.0, 9.999988, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: Some(Vec4(0.0, 0.0, -1.0, 3.9133058)), far: Some(Vec4(0.0, 0.0, 1.0, 9995.986)), planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: None +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 640, height: 360, region: PixelRect { x0: 0, y0: 0, x1: 640, y1: 360 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 12.700017, aperture: [25.4, 25.4], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 5.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/cornellbox.usda"], invisible_overrides: Some(0) } +layer: $DIR/cornellbox.usda +warning: Warning { code: AssetUnsupportedByHost, kind: Skipped, count: 1, prims: [], message: "No asset loader: environment map $DIR/sky_gradient.exr ignored — the dome falls back to its uniform colour. Use Scene::from_usd_with_assets to supply one." } +warning: Warning { code: MaterialFallbackDefault, kind: Skipped, count: 1, prims: ["/scene/Looks/initialShadingGroup"], message: "Material /scene/Looks/initialShadingGroup has no surface shader — using default grey OpenPBR" } +lights: 1 +light 0: dome name Some("/scene/Sky") lpe None pmf 1.0 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 5 geometries, PrimitiveBreakdown { triangles: 822, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 2 } top level, PrimitiveBreakdown { triangles: 1582, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 2 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 4.0 motion [] pieces all=10:88b22fc3345d5b05 camera=10:88b22fc3345d5b05 shadow=10:88b22fc3345d5b05 indirect=10:88b22fc3345d5b05 +geom 1: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.2 motion [] pieces all=760:c2b60a75c52c78b9 camera=760:c2b60a75c52c78b9 shadow=760:c2b60a75c52c78b9 indirect=760:c2b60a75c52c78b9 +geom 2: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=12:94a297badef437e1 camera=12:94a297badef437e1 shadow=12:94a297badef437e1 indirect=12:94a297badef437e1 +geom 3: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.25 motion [] pieces all=800:4a8c9f44d777e131 camera=800:4a8c9f44d777e131 shadow=800:4a8c9f44d777e131 indirect=800:4a8c9f44d777e131 +geom 4: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.3585339 motion [] pieces all=760:2344ecf63e12c441 camera=760:2344ecf63e12c441 shadow=760:2344ecf63e12c441 indirect=760:2344ecf63e12c441 +provenance material /scene/Looks/initialShadingGroup: MaterialOrigin { slots: [0, 1, 2, 3, 4], displaced: false } +provenance light /scene/Sky: LightOrigin { index: 0, geoms: 0..0 } +provenance geometry 0..1: /scene/pCube1 +provenance geometry 1..2: /scene/pSphere1 +provenance geometry 2..3: /scene/pCube2 +provenance geometry 3..4: /scene/pTorus1 +provenance geometry 4..5: /scene/pSphere2 +provenance mesh: MeshOrigin { geom_id: 0, slot: 0, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 1, slot: 1, baked: false, moving: false } +provenance mesh: MeshOrigin { geom_id: 2, slot: 2, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 3, slot: 3, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 4, slot: 1, baked: false, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 12343188411137242430, n_points: 8, n_indices: 20, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 1: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 17119738035130870988, n_points: 382, n_indices: 1560, n_uvs: None, smooth: false, material: 0 }), placements: 2, shared: false, displaced: false } +provenance mesh slot 2: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 1739488954094729910, n_points: 8, n_indices: 24, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 3: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 6096447469814747168, n_points: 400, n_indices: 1600, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/scene/camera1"), cameras: ["/scene/camera1"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/scene/camera1"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-125.image b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-125.image new file mode 100644 index 000000000..ba4884437 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-125.image @@ -0,0 +1 @@ +640x360 16spp clamp-off 52a1a46f3a46d230 diff --git a/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-126.digest b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-126.digest new file mode 100644 index 000000000..0e859a952 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-126.digest @@ -0,0 +1,40 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/scene/camera1") +camera: Camera { origin: Vec3A(0.0074343784, 1.9913422, 4.0133057), lower_left_corner: Vec3A(-8.881443, -3.0086517, -0.98669434), horizontal: Vec3A(17.777756, 0.0, 0.0), vertical: Vec3A(0.0, 9.999988, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: Some(Vec4(0.0, 0.0, -1.0, 3.9133058)), far: Some(Vec4(0.0, 0.0, 1.0, 9995.986)), planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: None +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 640, height: 360, region: PixelRect { x0: 0, y0: 0, x1: 640, y1: 360 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 12.700017, aperture: [25.4, 25.4], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 5.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/cornellbox.usda"], invisible_overrides: Some(0) } +layer: $DIR/cornellbox.usda +warning: Warning { code: AssetUnsupportedByHost, kind: Skipped, count: 1, prims: [], message: "No asset loader: environment map $DIR/sky_gradient.exr ignored — the dome falls back to its uniform colour. Use Scene::from_usd_with_assets to supply one." } +warning: Warning { code: MaterialFallbackDefault, kind: Skipped, count: 1, prims: ["/scene/Looks/initialShadingGroup"], message: "Material /scene/Looks/initialShadingGroup has no surface shader — using default grey OpenPBR" } +lights: 1 +light 0: dome name Some("/scene/Sky") lpe None pmf 1.0 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 5 geometries, PrimitiveBreakdown { triangles: 822, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 2 } top level, PrimitiveBreakdown { triangles: 1582, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 2 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 4.0 motion [] pieces all=10:88b22fc3345d5b05 camera=10:88b22fc3345d5b05 shadow=10:88b22fc3345d5b05 indirect=10:88b22fc3345d5b05 +geom 1: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.2 motion [] pieces all=760:c2b60a75c52c78b9 camera=760:c2b60a75c52c78b9 shadow=760:c2b60a75c52c78b9 indirect=760:c2b60a75c52c78b9 +geom 2: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=12:94a297badef437e1 camera=12:94a297badef437e1 shadow=12:94a297badef437e1 indirect=12:94a297badef437e1 +geom 3: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.25 motion [] pieces all=800:4a8c9f44d777e131 camera=800:4a8c9f44d777e131 shadow=800:4a8c9f44d777e131 indirect=800:4a8c9f44d777e131 +geom 4: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.3585339 motion [] pieces all=760:2344ecf63e12c441 camera=760:2344ecf63e12c441 shadow=760:2344ecf63e12c441 indirect=760:2344ecf63e12c441 +provenance material /scene/Looks/initialShadingGroup: MaterialOrigin { slots: [0, 1, 2, 3, 4], displaced: false } +provenance light /scene/Sky: LightOrigin { index: 0, geoms: 0..0 } +provenance geometry 0..1: /scene/pCube1 +provenance geometry 1..2: /scene/pSphere1 +provenance geometry 2..3: /scene/pCube2 +provenance geometry 3..4: /scene/pTorus1 +provenance geometry 4..5: /scene/pSphere2 +provenance mesh: MeshOrigin { geom_id: 0, slot: 0, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 1, slot: 1, baked: false, moving: false } +provenance mesh: MeshOrigin { geom_id: 2, slot: 2, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 3, slot: 3, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 4, slot: 1, baked: false, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 12343188411137242430, n_points: 8, n_indices: 20, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 1: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 17119738035130870988, n_points: 382, n_indices: 1560, n_uvs: None, smooth: false, material: 0 }), placements: 2, shared: false, displaced: false } +provenance mesh slot 2: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 1739488954094729910, n_points: 8, n_indices: 24, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 3: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 6096447469814747168, n_points: 400, n_indices: 1600, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/scene/camera1"), cameras: ["/scene/camera1"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/scene/camera1"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-126.image b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-126.image new file mode 100644 index 000000000..ba4884437 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-126.image @@ -0,0 +1 @@ +640x360 16spp clamp-off 52a1a46f3a46d230 diff --git a/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-127.digest b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-127.digest new file mode 100644 index 000000000..0e859a952 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-127.digest @@ -0,0 +1,40 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/scene/camera1") +camera: Camera { origin: Vec3A(0.0074343784, 1.9913422, 4.0133057), lower_left_corner: Vec3A(-8.881443, -3.0086517, -0.98669434), horizontal: Vec3A(17.777756, 0.0, 0.0), vertical: Vec3A(0.0, 9.999988, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: Some(Vec4(0.0, 0.0, -1.0, 3.9133058)), far: Some(Vec4(0.0, 0.0, 1.0, 9995.986)), planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: None +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 640, height: 360, region: PixelRect { x0: 0, y0: 0, x1: 640, y1: 360 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 12.700017, aperture: [25.4, 25.4], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 5.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/cornellbox.usda"], invisible_overrides: Some(0) } +layer: $DIR/cornellbox.usda +warning: Warning { code: AssetUnsupportedByHost, kind: Skipped, count: 1, prims: [], message: "No asset loader: environment map $DIR/sky_gradient.exr ignored — the dome falls back to its uniform colour. Use Scene::from_usd_with_assets to supply one." } +warning: Warning { code: MaterialFallbackDefault, kind: Skipped, count: 1, prims: ["/scene/Looks/initialShadingGroup"], message: "Material /scene/Looks/initialShadingGroup has no surface shader — using default grey OpenPBR" } +lights: 1 +light 0: dome name Some("/scene/Sky") lpe None pmf 1.0 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 5 geometries, PrimitiveBreakdown { triangles: 822, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 2 } top level, PrimitiveBreakdown { triangles: 1582, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 2 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 4.0 motion [] pieces all=10:88b22fc3345d5b05 camera=10:88b22fc3345d5b05 shadow=10:88b22fc3345d5b05 indirect=10:88b22fc3345d5b05 +geom 1: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.2 motion [] pieces all=760:c2b60a75c52c78b9 camera=760:c2b60a75c52c78b9 shadow=760:c2b60a75c52c78b9 indirect=760:c2b60a75c52c78b9 +geom 2: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=12:94a297badef437e1 camera=12:94a297badef437e1 shadow=12:94a297badef437e1 indirect=12:94a297badef437e1 +geom 3: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.25 motion [] pieces all=800:4a8c9f44d777e131 camera=800:4a8c9f44d777e131 shadow=800:4a8c9f44d777e131 indirect=800:4a8c9f44d777e131 +geom 4: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.3585339 motion [] pieces all=760:2344ecf63e12c441 camera=760:2344ecf63e12c441 shadow=760:2344ecf63e12c441 indirect=760:2344ecf63e12c441 +provenance material /scene/Looks/initialShadingGroup: MaterialOrigin { slots: [0, 1, 2, 3, 4], displaced: false } +provenance light /scene/Sky: LightOrigin { index: 0, geoms: 0..0 } +provenance geometry 0..1: /scene/pCube1 +provenance geometry 1..2: /scene/pSphere1 +provenance geometry 2..3: /scene/pCube2 +provenance geometry 3..4: /scene/pTorus1 +provenance geometry 4..5: /scene/pSphere2 +provenance mesh: MeshOrigin { geom_id: 0, slot: 0, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 1, slot: 1, baked: false, moving: false } +provenance mesh: MeshOrigin { geom_id: 2, slot: 2, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 3, slot: 3, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 4, slot: 1, baked: false, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 12343188411137242430, n_points: 8, n_indices: 20, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 1: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 17119738035130870988, n_points: 382, n_indices: 1560, n_uvs: None, smooth: false, material: 0 }), placements: 2, shared: false, displaced: false } +provenance mesh slot 2: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 1739488954094729910, n_points: 8, n_indices: 24, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 3: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 6096447469814747168, n_points: 400, n_indices: 1600, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/scene/camera1"), cameras: ["/scene/camera1"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/scene/camera1"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-127.image b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-127.image new file mode 100644 index 000000000..ba4884437 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-127.image @@ -0,0 +1 @@ +640x360 16spp clamp-off 52a1a46f3a46d230 diff --git a/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-128.digest b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-128.digest new file mode 100644 index 000000000..0e859a952 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-128.digest @@ -0,0 +1,40 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/scene/camera1") +camera: Camera { origin: Vec3A(0.0074343784, 1.9913422, 4.0133057), lower_left_corner: Vec3A(-8.881443, -3.0086517, -0.98669434), horizontal: Vec3A(17.777756, 0.0, 0.0), vertical: Vec3A(0.0, 9.999988, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: Some(Vec4(0.0, 0.0, -1.0, 3.9133058)), far: Some(Vec4(0.0, 0.0, 1.0, 9995.986)), planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: None +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 640, height: 360, region: PixelRect { x0: 0, y0: 0, x1: 640, y1: 360 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 12.700017, aperture: [25.4, 25.4], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 5.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/cornellbox.usda"], invisible_overrides: Some(0) } +layer: $DIR/cornellbox.usda +warning: Warning { code: AssetUnsupportedByHost, kind: Skipped, count: 1, prims: [], message: "No asset loader: environment map $DIR/sky_gradient.exr ignored — the dome falls back to its uniform colour. Use Scene::from_usd_with_assets to supply one." } +warning: Warning { code: MaterialFallbackDefault, kind: Skipped, count: 1, prims: ["/scene/Looks/initialShadingGroup"], message: "Material /scene/Looks/initialShadingGroup has no surface shader — using default grey OpenPBR" } +lights: 1 +light 0: dome name Some("/scene/Sky") lpe None pmf 1.0 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 5 geometries, PrimitiveBreakdown { triangles: 822, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 2 } top level, PrimitiveBreakdown { triangles: 1582, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 2 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 4.0 motion [] pieces all=10:88b22fc3345d5b05 camera=10:88b22fc3345d5b05 shadow=10:88b22fc3345d5b05 indirect=10:88b22fc3345d5b05 +geom 1: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.2 motion [] pieces all=760:c2b60a75c52c78b9 camera=760:c2b60a75c52c78b9 shadow=760:c2b60a75c52c78b9 indirect=760:c2b60a75c52c78b9 +geom 2: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=12:94a297badef437e1 camera=12:94a297badef437e1 shadow=12:94a297badef437e1 indirect=12:94a297badef437e1 +geom 3: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.25 motion [] pieces all=800:4a8c9f44d777e131 camera=800:4a8c9f44d777e131 shadow=800:4a8c9f44d777e131 indirect=800:4a8c9f44d777e131 +geom 4: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.3585339 motion [] pieces all=760:2344ecf63e12c441 camera=760:2344ecf63e12c441 shadow=760:2344ecf63e12c441 indirect=760:2344ecf63e12c441 +provenance material /scene/Looks/initialShadingGroup: MaterialOrigin { slots: [0, 1, 2, 3, 4], displaced: false } +provenance light /scene/Sky: LightOrigin { index: 0, geoms: 0..0 } +provenance geometry 0..1: /scene/pCube1 +provenance geometry 1..2: /scene/pSphere1 +provenance geometry 2..3: /scene/pCube2 +provenance geometry 3..4: /scene/pTorus1 +provenance geometry 4..5: /scene/pSphere2 +provenance mesh: MeshOrigin { geom_id: 0, slot: 0, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 1, slot: 1, baked: false, moving: false } +provenance mesh: MeshOrigin { geom_id: 2, slot: 2, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 3, slot: 3, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 4, slot: 1, baked: false, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 12343188411137242430, n_points: 8, n_indices: 20, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 1: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 17119738035130870988, n_points: 382, n_indices: 1560, n_uvs: None, smooth: false, material: 0 }), placements: 2, shared: false, displaced: false } +provenance mesh slot 2: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 1739488954094729910, n_points: 8, n_indices: 24, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 3: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 6096447469814747168, n_points: 400, n_indices: 1600, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/scene/camera1"), cameras: ["/scene/camera1"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/scene/camera1"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-128.image b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-128.image new file mode 100644 index 000000000..ba4884437 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-128.image @@ -0,0 +1 @@ +640x360 16spp clamp-off 52a1a46f3a46d230 diff --git a/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-129.digest b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-129.digest new file mode 100644 index 000000000..0e859a952 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-129.digest @@ -0,0 +1,40 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/scene/camera1") +camera: Camera { origin: Vec3A(0.0074343784, 1.9913422, 4.0133057), lower_left_corner: Vec3A(-8.881443, -3.0086517, -0.98669434), horizontal: Vec3A(17.777756, 0.0, 0.0), vertical: Vec3A(0.0, 9.999988, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: Some(Vec4(0.0, 0.0, -1.0, 3.9133058)), far: Some(Vec4(0.0, 0.0, 1.0, 9995.986)), planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: None +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 640, height: 360, region: PixelRect { x0: 0, y0: 0, x1: 640, y1: 360 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 12.700017, aperture: [25.4, 25.4], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 5.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/cornellbox.usda"], invisible_overrides: Some(0) } +layer: $DIR/cornellbox.usda +warning: Warning { code: AssetUnsupportedByHost, kind: Skipped, count: 1, prims: [], message: "No asset loader: environment map $DIR/sky_gradient.exr ignored — the dome falls back to its uniform colour. Use Scene::from_usd_with_assets to supply one." } +warning: Warning { code: MaterialFallbackDefault, kind: Skipped, count: 1, prims: ["/scene/Looks/initialShadingGroup"], message: "Material /scene/Looks/initialShadingGroup has no surface shader — using default grey OpenPBR" } +lights: 1 +light 0: dome name Some("/scene/Sky") lpe None pmf 1.0 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 5 geometries, PrimitiveBreakdown { triangles: 822, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 2 } top level, PrimitiveBreakdown { triangles: 1582, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 2 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 4.0 motion [] pieces all=10:88b22fc3345d5b05 camera=10:88b22fc3345d5b05 shadow=10:88b22fc3345d5b05 indirect=10:88b22fc3345d5b05 +geom 1: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.2 motion [] pieces all=760:c2b60a75c52c78b9 camera=760:c2b60a75c52c78b9 shadow=760:c2b60a75c52c78b9 indirect=760:c2b60a75c52c78b9 +geom 2: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=12:94a297badef437e1 camera=12:94a297badef437e1 shadow=12:94a297badef437e1 indirect=12:94a297badef437e1 +geom 3: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.25 motion [] pieces all=800:4a8c9f44d777e131 camera=800:4a8c9f44d777e131 shadow=800:4a8c9f44d777e131 indirect=800:4a8c9f44d777e131 +geom 4: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.3585339 motion [] pieces all=760:2344ecf63e12c441 camera=760:2344ecf63e12c441 shadow=760:2344ecf63e12c441 indirect=760:2344ecf63e12c441 +provenance material /scene/Looks/initialShadingGroup: MaterialOrigin { slots: [0, 1, 2, 3, 4], displaced: false } +provenance light /scene/Sky: LightOrigin { index: 0, geoms: 0..0 } +provenance geometry 0..1: /scene/pCube1 +provenance geometry 1..2: /scene/pSphere1 +provenance geometry 2..3: /scene/pCube2 +provenance geometry 3..4: /scene/pTorus1 +provenance geometry 4..5: /scene/pSphere2 +provenance mesh: MeshOrigin { geom_id: 0, slot: 0, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 1, slot: 1, baked: false, moving: false } +provenance mesh: MeshOrigin { geom_id: 2, slot: 2, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 3, slot: 3, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 4, slot: 1, baked: false, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 12343188411137242430, n_points: 8, n_indices: 20, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 1: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 17119738035130870988, n_points: 382, n_indices: 1560, n_uvs: None, smooth: false, material: 0 }), placements: 2, shared: false, displaced: false } +provenance mesh slot 2: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 1739488954094729910, n_points: 8, n_indices: 24, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 3: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 6096447469814747168, n_points: 400, n_indices: 1600, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/scene/camera1"), cameras: ["/scene/camera1"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/scene/camera1"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-129.image b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-129.image new file mode 100644 index 000000000..ba4884437 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-129.image @@ -0,0 +1 @@ +640x360 16spp clamp-off 52a1a46f3a46d230 diff --git a/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-13.digest b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-13.digest new file mode 100644 index 000000000..0e859a952 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-13.digest @@ -0,0 +1,40 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/scene/camera1") +camera: Camera { origin: Vec3A(0.0074343784, 1.9913422, 4.0133057), lower_left_corner: Vec3A(-8.881443, -3.0086517, -0.98669434), horizontal: Vec3A(17.777756, 0.0, 0.0), vertical: Vec3A(0.0, 9.999988, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: Some(Vec4(0.0, 0.0, -1.0, 3.9133058)), far: Some(Vec4(0.0, 0.0, 1.0, 9995.986)), planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: None +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 640, height: 360, region: PixelRect { x0: 0, y0: 0, x1: 640, y1: 360 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 12.700017, aperture: [25.4, 25.4], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 5.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/cornellbox.usda"], invisible_overrides: Some(0) } +layer: $DIR/cornellbox.usda +warning: Warning { code: AssetUnsupportedByHost, kind: Skipped, count: 1, prims: [], message: "No asset loader: environment map $DIR/sky_gradient.exr ignored — the dome falls back to its uniform colour. Use Scene::from_usd_with_assets to supply one." } +warning: Warning { code: MaterialFallbackDefault, kind: Skipped, count: 1, prims: ["/scene/Looks/initialShadingGroup"], message: "Material /scene/Looks/initialShadingGroup has no surface shader — using default grey OpenPBR" } +lights: 1 +light 0: dome name Some("/scene/Sky") lpe None pmf 1.0 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 5 geometries, PrimitiveBreakdown { triangles: 822, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 2 } top level, PrimitiveBreakdown { triangles: 1582, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 2 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 4.0 motion [] pieces all=10:88b22fc3345d5b05 camera=10:88b22fc3345d5b05 shadow=10:88b22fc3345d5b05 indirect=10:88b22fc3345d5b05 +geom 1: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.2 motion [] pieces all=760:c2b60a75c52c78b9 camera=760:c2b60a75c52c78b9 shadow=760:c2b60a75c52c78b9 indirect=760:c2b60a75c52c78b9 +geom 2: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=12:94a297badef437e1 camera=12:94a297badef437e1 shadow=12:94a297badef437e1 indirect=12:94a297badef437e1 +geom 3: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.25 motion [] pieces all=800:4a8c9f44d777e131 camera=800:4a8c9f44d777e131 shadow=800:4a8c9f44d777e131 indirect=800:4a8c9f44d777e131 +geom 4: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.3585339 motion [] pieces all=760:2344ecf63e12c441 camera=760:2344ecf63e12c441 shadow=760:2344ecf63e12c441 indirect=760:2344ecf63e12c441 +provenance material /scene/Looks/initialShadingGroup: MaterialOrigin { slots: [0, 1, 2, 3, 4], displaced: false } +provenance light /scene/Sky: LightOrigin { index: 0, geoms: 0..0 } +provenance geometry 0..1: /scene/pCube1 +provenance geometry 1..2: /scene/pSphere1 +provenance geometry 2..3: /scene/pCube2 +provenance geometry 3..4: /scene/pTorus1 +provenance geometry 4..5: /scene/pSphere2 +provenance mesh: MeshOrigin { geom_id: 0, slot: 0, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 1, slot: 1, baked: false, moving: false } +provenance mesh: MeshOrigin { geom_id: 2, slot: 2, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 3, slot: 3, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 4, slot: 1, baked: false, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 12343188411137242430, n_points: 8, n_indices: 20, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 1: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 17119738035130870988, n_points: 382, n_indices: 1560, n_uvs: None, smooth: false, material: 0 }), placements: 2, shared: false, displaced: false } +provenance mesh slot 2: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 1739488954094729910, n_points: 8, n_indices: 24, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 3: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 6096447469814747168, n_points: 400, n_indices: 1600, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/scene/camera1"), cameras: ["/scene/camera1"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/scene/camera1"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-13.image b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-13.image new file mode 100644 index 000000000..ba4884437 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-13.image @@ -0,0 +1 @@ +640x360 16spp clamp-off 52a1a46f3a46d230 diff --git a/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-130.digest b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-130.digest new file mode 100644 index 000000000..0e859a952 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-130.digest @@ -0,0 +1,40 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/scene/camera1") +camera: Camera { origin: Vec3A(0.0074343784, 1.9913422, 4.0133057), lower_left_corner: Vec3A(-8.881443, -3.0086517, -0.98669434), horizontal: Vec3A(17.777756, 0.0, 0.0), vertical: Vec3A(0.0, 9.999988, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: Some(Vec4(0.0, 0.0, -1.0, 3.9133058)), far: Some(Vec4(0.0, 0.0, 1.0, 9995.986)), planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: None +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 640, height: 360, region: PixelRect { x0: 0, y0: 0, x1: 640, y1: 360 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 12.700017, aperture: [25.4, 25.4], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 5.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/cornellbox.usda"], invisible_overrides: Some(0) } +layer: $DIR/cornellbox.usda +warning: Warning { code: AssetUnsupportedByHost, kind: Skipped, count: 1, prims: [], message: "No asset loader: environment map $DIR/sky_gradient.exr ignored — the dome falls back to its uniform colour. Use Scene::from_usd_with_assets to supply one." } +warning: Warning { code: MaterialFallbackDefault, kind: Skipped, count: 1, prims: ["/scene/Looks/initialShadingGroup"], message: "Material /scene/Looks/initialShadingGroup has no surface shader — using default grey OpenPBR" } +lights: 1 +light 0: dome name Some("/scene/Sky") lpe None pmf 1.0 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 5 geometries, PrimitiveBreakdown { triangles: 822, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 2 } top level, PrimitiveBreakdown { triangles: 1582, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 2 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 4.0 motion [] pieces all=10:88b22fc3345d5b05 camera=10:88b22fc3345d5b05 shadow=10:88b22fc3345d5b05 indirect=10:88b22fc3345d5b05 +geom 1: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.2 motion [] pieces all=760:c2b60a75c52c78b9 camera=760:c2b60a75c52c78b9 shadow=760:c2b60a75c52c78b9 indirect=760:c2b60a75c52c78b9 +geom 2: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=12:94a297badef437e1 camera=12:94a297badef437e1 shadow=12:94a297badef437e1 indirect=12:94a297badef437e1 +geom 3: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.25 motion [] pieces all=800:4a8c9f44d777e131 camera=800:4a8c9f44d777e131 shadow=800:4a8c9f44d777e131 indirect=800:4a8c9f44d777e131 +geom 4: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.3585339 motion [] pieces all=760:2344ecf63e12c441 camera=760:2344ecf63e12c441 shadow=760:2344ecf63e12c441 indirect=760:2344ecf63e12c441 +provenance material /scene/Looks/initialShadingGroup: MaterialOrigin { slots: [0, 1, 2, 3, 4], displaced: false } +provenance light /scene/Sky: LightOrigin { index: 0, geoms: 0..0 } +provenance geometry 0..1: /scene/pCube1 +provenance geometry 1..2: /scene/pSphere1 +provenance geometry 2..3: /scene/pCube2 +provenance geometry 3..4: /scene/pTorus1 +provenance geometry 4..5: /scene/pSphere2 +provenance mesh: MeshOrigin { geom_id: 0, slot: 0, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 1, slot: 1, baked: false, moving: false } +provenance mesh: MeshOrigin { geom_id: 2, slot: 2, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 3, slot: 3, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 4, slot: 1, baked: false, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 12343188411137242430, n_points: 8, n_indices: 20, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 1: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 17119738035130870988, n_points: 382, n_indices: 1560, n_uvs: None, smooth: false, material: 0 }), placements: 2, shared: false, displaced: false } +provenance mesh slot 2: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 1739488954094729910, n_points: 8, n_indices: 24, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 3: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 6096447469814747168, n_points: 400, n_indices: 1600, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/scene/camera1"), cameras: ["/scene/camera1"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/scene/camera1"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-130.image b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-130.image new file mode 100644 index 000000000..ba4884437 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-130.image @@ -0,0 +1 @@ +640x360 16spp clamp-off 52a1a46f3a46d230 diff --git a/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-131.digest b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-131.digest new file mode 100644 index 000000000..0e859a952 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-131.digest @@ -0,0 +1,40 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/scene/camera1") +camera: Camera { origin: Vec3A(0.0074343784, 1.9913422, 4.0133057), lower_left_corner: Vec3A(-8.881443, -3.0086517, -0.98669434), horizontal: Vec3A(17.777756, 0.0, 0.0), vertical: Vec3A(0.0, 9.999988, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: Some(Vec4(0.0, 0.0, -1.0, 3.9133058)), far: Some(Vec4(0.0, 0.0, 1.0, 9995.986)), planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: None +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 640, height: 360, region: PixelRect { x0: 0, y0: 0, x1: 640, y1: 360 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 12.700017, aperture: [25.4, 25.4], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 5.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/cornellbox.usda"], invisible_overrides: Some(0) } +layer: $DIR/cornellbox.usda +warning: Warning { code: AssetUnsupportedByHost, kind: Skipped, count: 1, prims: [], message: "No asset loader: environment map $DIR/sky_gradient.exr ignored — the dome falls back to its uniform colour. Use Scene::from_usd_with_assets to supply one." } +warning: Warning { code: MaterialFallbackDefault, kind: Skipped, count: 1, prims: ["/scene/Looks/initialShadingGroup"], message: "Material /scene/Looks/initialShadingGroup has no surface shader — using default grey OpenPBR" } +lights: 1 +light 0: dome name Some("/scene/Sky") lpe None pmf 1.0 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 5 geometries, PrimitiveBreakdown { triangles: 822, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 2 } top level, PrimitiveBreakdown { triangles: 1582, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 2 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 4.0 motion [] pieces all=10:88b22fc3345d5b05 camera=10:88b22fc3345d5b05 shadow=10:88b22fc3345d5b05 indirect=10:88b22fc3345d5b05 +geom 1: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.2 motion [] pieces all=760:c2b60a75c52c78b9 camera=760:c2b60a75c52c78b9 shadow=760:c2b60a75c52c78b9 indirect=760:c2b60a75c52c78b9 +geom 2: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=12:94a297badef437e1 camera=12:94a297badef437e1 shadow=12:94a297badef437e1 indirect=12:94a297badef437e1 +geom 3: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.25 motion [] pieces all=800:4a8c9f44d777e131 camera=800:4a8c9f44d777e131 shadow=800:4a8c9f44d777e131 indirect=800:4a8c9f44d777e131 +geom 4: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.3585339 motion [] pieces all=760:2344ecf63e12c441 camera=760:2344ecf63e12c441 shadow=760:2344ecf63e12c441 indirect=760:2344ecf63e12c441 +provenance material /scene/Looks/initialShadingGroup: MaterialOrigin { slots: [0, 1, 2, 3, 4], displaced: false } +provenance light /scene/Sky: LightOrigin { index: 0, geoms: 0..0 } +provenance geometry 0..1: /scene/pCube1 +provenance geometry 1..2: /scene/pSphere1 +provenance geometry 2..3: /scene/pCube2 +provenance geometry 3..4: /scene/pTorus1 +provenance geometry 4..5: /scene/pSphere2 +provenance mesh: MeshOrigin { geom_id: 0, slot: 0, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 1, slot: 1, baked: false, moving: false } +provenance mesh: MeshOrigin { geom_id: 2, slot: 2, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 3, slot: 3, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 4, slot: 1, baked: false, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 12343188411137242430, n_points: 8, n_indices: 20, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 1: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 17119738035130870988, n_points: 382, n_indices: 1560, n_uvs: None, smooth: false, material: 0 }), placements: 2, shared: false, displaced: false } +provenance mesh slot 2: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 1739488954094729910, n_points: 8, n_indices: 24, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 3: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 6096447469814747168, n_points: 400, n_indices: 1600, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/scene/camera1"), cameras: ["/scene/camera1"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/scene/camera1"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-131.image b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-131.image new file mode 100644 index 000000000..ba4884437 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-131.image @@ -0,0 +1 @@ +640x360 16spp clamp-off 52a1a46f3a46d230 diff --git a/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-132.digest b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-132.digest new file mode 100644 index 000000000..0e859a952 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-132.digest @@ -0,0 +1,40 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/scene/camera1") +camera: Camera { origin: Vec3A(0.0074343784, 1.9913422, 4.0133057), lower_left_corner: Vec3A(-8.881443, -3.0086517, -0.98669434), horizontal: Vec3A(17.777756, 0.0, 0.0), vertical: Vec3A(0.0, 9.999988, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: Some(Vec4(0.0, 0.0, -1.0, 3.9133058)), far: Some(Vec4(0.0, 0.0, 1.0, 9995.986)), planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: None +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 640, height: 360, region: PixelRect { x0: 0, y0: 0, x1: 640, y1: 360 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 12.700017, aperture: [25.4, 25.4], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 5.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/cornellbox.usda"], invisible_overrides: Some(0) } +layer: $DIR/cornellbox.usda +warning: Warning { code: AssetUnsupportedByHost, kind: Skipped, count: 1, prims: [], message: "No asset loader: environment map $DIR/sky_gradient.exr ignored — the dome falls back to its uniform colour. Use Scene::from_usd_with_assets to supply one." } +warning: Warning { code: MaterialFallbackDefault, kind: Skipped, count: 1, prims: ["/scene/Looks/initialShadingGroup"], message: "Material /scene/Looks/initialShadingGroup has no surface shader — using default grey OpenPBR" } +lights: 1 +light 0: dome name Some("/scene/Sky") lpe None pmf 1.0 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 5 geometries, PrimitiveBreakdown { triangles: 822, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 2 } top level, PrimitiveBreakdown { triangles: 1582, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 2 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 4.0 motion [] pieces all=10:88b22fc3345d5b05 camera=10:88b22fc3345d5b05 shadow=10:88b22fc3345d5b05 indirect=10:88b22fc3345d5b05 +geom 1: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.2 motion [] pieces all=760:c2b60a75c52c78b9 camera=760:c2b60a75c52c78b9 shadow=760:c2b60a75c52c78b9 indirect=760:c2b60a75c52c78b9 +geom 2: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=12:94a297badef437e1 camera=12:94a297badef437e1 shadow=12:94a297badef437e1 indirect=12:94a297badef437e1 +geom 3: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.25 motion [] pieces all=800:4a8c9f44d777e131 camera=800:4a8c9f44d777e131 shadow=800:4a8c9f44d777e131 indirect=800:4a8c9f44d777e131 +geom 4: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.3585339 motion [] pieces all=760:2344ecf63e12c441 camera=760:2344ecf63e12c441 shadow=760:2344ecf63e12c441 indirect=760:2344ecf63e12c441 +provenance material /scene/Looks/initialShadingGroup: MaterialOrigin { slots: [0, 1, 2, 3, 4], displaced: false } +provenance light /scene/Sky: LightOrigin { index: 0, geoms: 0..0 } +provenance geometry 0..1: /scene/pCube1 +provenance geometry 1..2: /scene/pSphere1 +provenance geometry 2..3: /scene/pCube2 +provenance geometry 3..4: /scene/pTorus1 +provenance geometry 4..5: /scene/pSphere2 +provenance mesh: MeshOrigin { geom_id: 0, slot: 0, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 1, slot: 1, baked: false, moving: false } +provenance mesh: MeshOrigin { geom_id: 2, slot: 2, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 3, slot: 3, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 4, slot: 1, baked: false, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 12343188411137242430, n_points: 8, n_indices: 20, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 1: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 17119738035130870988, n_points: 382, n_indices: 1560, n_uvs: None, smooth: false, material: 0 }), placements: 2, shared: false, displaced: false } +provenance mesh slot 2: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 1739488954094729910, n_points: 8, n_indices: 24, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 3: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 6096447469814747168, n_points: 400, n_indices: 1600, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/scene/camera1"), cameras: ["/scene/camera1"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/scene/camera1"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-132.image b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-132.image new file mode 100644 index 000000000..ba4884437 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-132.image @@ -0,0 +1 @@ +640x360 16spp clamp-off 52a1a46f3a46d230 diff --git a/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-133.digest b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-133.digest new file mode 100644 index 000000000..0e859a952 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-133.digest @@ -0,0 +1,40 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/scene/camera1") +camera: Camera { origin: Vec3A(0.0074343784, 1.9913422, 4.0133057), lower_left_corner: Vec3A(-8.881443, -3.0086517, -0.98669434), horizontal: Vec3A(17.777756, 0.0, 0.0), vertical: Vec3A(0.0, 9.999988, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: Some(Vec4(0.0, 0.0, -1.0, 3.9133058)), far: Some(Vec4(0.0, 0.0, 1.0, 9995.986)), planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: None +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 640, height: 360, region: PixelRect { x0: 0, y0: 0, x1: 640, y1: 360 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 12.700017, aperture: [25.4, 25.4], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 5.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/cornellbox.usda"], invisible_overrides: Some(0) } +layer: $DIR/cornellbox.usda +warning: Warning { code: AssetUnsupportedByHost, kind: Skipped, count: 1, prims: [], message: "No asset loader: environment map $DIR/sky_gradient.exr ignored — the dome falls back to its uniform colour. Use Scene::from_usd_with_assets to supply one." } +warning: Warning { code: MaterialFallbackDefault, kind: Skipped, count: 1, prims: ["/scene/Looks/initialShadingGroup"], message: "Material /scene/Looks/initialShadingGroup has no surface shader — using default grey OpenPBR" } +lights: 1 +light 0: dome name Some("/scene/Sky") lpe None pmf 1.0 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 5 geometries, PrimitiveBreakdown { triangles: 822, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 2 } top level, PrimitiveBreakdown { triangles: 1582, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 2 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 4.0 motion [] pieces all=10:88b22fc3345d5b05 camera=10:88b22fc3345d5b05 shadow=10:88b22fc3345d5b05 indirect=10:88b22fc3345d5b05 +geom 1: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.2 motion [] pieces all=760:c2b60a75c52c78b9 camera=760:c2b60a75c52c78b9 shadow=760:c2b60a75c52c78b9 indirect=760:c2b60a75c52c78b9 +geom 2: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=12:94a297badef437e1 camera=12:94a297badef437e1 shadow=12:94a297badef437e1 indirect=12:94a297badef437e1 +geom 3: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.25 motion [] pieces all=800:4a8c9f44d777e131 camera=800:4a8c9f44d777e131 shadow=800:4a8c9f44d777e131 indirect=800:4a8c9f44d777e131 +geom 4: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.3585339 motion [] pieces all=760:2344ecf63e12c441 camera=760:2344ecf63e12c441 shadow=760:2344ecf63e12c441 indirect=760:2344ecf63e12c441 +provenance material /scene/Looks/initialShadingGroup: MaterialOrigin { slots: [0, 1, 2, 3, 4], displaced: false } +provenance light /scene/Sky: LightOrigin { index: 0, geoms: 0..0 } +provenance geometry 0..1: /scene/pCube1 +provenance geometry 1..2: /scene/pSphere1 +provenance geometry 2..3: /scene/pCube2 +provenance geometry 3..4: /scene/pTorus1 +provenance geometry 4..5: /scene/pSphere2 +provenance mesh: MeshOrigin { geom_id: 0, slot: 0, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 1, slot: 1, baked: false, moving: false } +provenance mesh: MeshOrigin { geom_id: 2, slot: 2, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 3, slot: 3, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 4, slot: 1, baked: false, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 12343188411137242430, n_points: 8, n_indices: 20, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 1: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 17119738035130870988, n_points: 382, n_indices: 1560, n_uvs: None, smooth: false, material: 0 }), placements: 2, shared: false, displaced: false } +provenance mesh slot 2: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 1739488954094729910, n_points: 8, n_indices: 24, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 3: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 6096447469814747168, n_points: 400, n_indices: 1600, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/scene/camera1"), cameras: ["/scene/camera1"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/scene/camera1"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-133.image b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-133.image new file mode 100644 index 000000000..ba4884437 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-133.image @@ -0,0 +1 @@ +640x360 16spp clamp-off 52a1a46f3a46d230 diff --git a/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-134.digest b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-134.digest new file mode 100644 index 000000000..0e859a952 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-134.digest @@ -0,0 +1,40 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/scene/camera1") +camera: Camera { origin: Vec3A(0.0074343784, 1.9913422, 4.0133057), lower_left_corner: Vec3A(-8.881443, -3.0086517, -0.98669434), horizontal: Vec3A(17.777756, 0.0, 0.0), vertical: Vec3A(0.0, 9.999988, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: Some(Vec4(0.0, 0.0, -1.0, 3.9133058)), far: Some(Vec4(0.0, 0.0, 1.0, 9995.986)), planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: None +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 640, height: 360, region: PixelRect { x0: 0, y0: 0, x1: 640, y1: 360 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 12.700017, aperture: [25.4, 25.4], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 5.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/cornellbox.usda"], invisible_overrides: Some(0) } +layer: $DIR/cornellbox.usda +warning: Warning { code: AssetUnsupportedByHost, kind: Skipped, count: 1, prims: [], message: "No asset loader: environment map $DIR/sky_gradient.exr ignored — the dome falls back to its uniform colour. Use Scene::from_usd_with_assets to supply one." } +warning: Warning { code: MaterialFallbackDefault, kind: Skipped, count: 1, prims: ["/scene/Looks/initialShadingGroup"], message: "Material /scene/Looks/initialShadingGroup has no surface shader — using default grey OpenPBR" } +lights: 1 +light 0: dome name Some("/scene/Sky") lpe None pmf 1.0 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 5 geometries, PrimitiveBreakdown { triangles: 822, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 2 } top level, PrimitiveBreakdown { triangles: 1582, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 2 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 4.0 motion [] pieces all=10:88b22fc3345d5b05 camera=10:88b22fc3345d5b05 shadow=10:88b22fc3345d5b05 indirect=10:88b22fc3345d5b05 +geom 1: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.2 motion [] pieces all=760:c2b60a75c52c78b9 camera=760:c2b60a75c52c78b9 shadow=760:c2b60a75c52c78b9 indirect=760:c2b60a75c52c78b9 +geom 2: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=12:94a297badef437e1 camera=12:94a297badef437e1 shadow=12:94a297badef437e1 indirect=12:94a297badef437e1 +geom 3: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.25 motion [] pieces all=800:4a8c9f44d777e131 camera=800:4a8c9f44d777e131 shadow=800:4a8c9f44d777e131 indirect=800:4a8c9f44d777e131 +geom 4: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.3585339 motion [] pieces all=760:2344ecf63e12c441 camera=760:2344ecf63e12c441 shadow=760:2344ecf63e12c441 indirect=760:2344ecf63e12c441 +provenance material /scene/Looks/initialShadingGroup: MaterialOrigin { slots: [0, 1, 2, 3, 4], displaced: false } +provenance light /scene/Sky: LightOrigin { index: 0, geoms: 0..0 } +provenance geometry 0..1: /scene/pCube1 +provenance geometry 1..2: /scene/pSphere1 +provenance geometry 2..3: /scene/pCube2 +provenance geometry 3..4: /scene/pTorus1 +provenance geometry 4..5: /scene/pSphere2 +provenance mesh: MeshOrigin { geom_id: 0, slot: 0, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 1, slot: 1, baked: false, moving: false } +provenance mesh: MeshOrigin { geom_id: 2, slot: 2, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 3, slot: 3, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 4, slot: 1, baked: false, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 12343188411137242430, n_points: 8, n_indices: 20, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 1: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 17119738035130870988, n_points: 382, n_indices: 1560, n_uvs: None, smooth: false, material: 0 }), placements: 2, shared: false, displaced: false } +provenance mesh slot 2: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 1739488954094729910, n_points: 8, n_indices: 24, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 3: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 6096447469814747168, n_points: 400, n_indices: 1600, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/scene/camera1"), cameras: ["/scene/camera1"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/scene/camera1"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-134.image b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-134.image new file mode 100644 index 000000000..ba4884437 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-134.image @@ -0,0 +1 @@ +640x360 16spp clamp-off 52a1a46f3a46d230 diff --git a/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-135.digest b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-135.digest new file mode 100644 index 000000000..0e859a952 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-135.digest @@ -0,0 +1,40 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/scene/camera1") +camera: Camera { origin: Vec3A(0.0074343784, 1.9913422, 4.0133057), lower_left_corner: Vec3A(-8.881443, -3.0086517, -0.98669434), horizontal: Vec3A(17.777756, 0.0, 0.0), vertical: Vec3A(0.0, 9.999988, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: Some(Vec4(0.0, 0.0, -1.0, 3.9133058)), far: Some(Vec4(0.0, 0.0, 1.0, 9995.986)), planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: None +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 640, height: 360, region: PixelRect { x0: 0, y0: 0, x1: 640, y1: 360 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 12.700017, aperture: [25.4, 25.4], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 5.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/cornellbox.usda"], invisible_overrides: Some(0) } +layer: $DIR/cornellbox.usda +warning: Warning { code: AssetUnsupportedByHost, kind: Skipped, count: 1, prims: [], message: "No asset loader: environment map $DIR/sky_gradient.exr ignored — the dome falls back to its uniform colour. Use Scene::from_usd_with_assets to supply one." } +warning: Warning { code: MaterialFallbackDefault, kind: Skipped, count: 1, prims: ["/scene/Looks/initialShadingGroup"], message: "Material /scene/Looks/initialShadingGroup has no surface shader — using default grey OpenPBR" } +lights: 1 +light 0: dome name Some("/scene/Sky") lpe None pmf 1.0 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 5 geometries, PrimitiveBreakdown { triangles: 822, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 2 } top level, PrimitiveBreakdown { triangles: 1582, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 2 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 4.0 motion [] pieces all=10:88b22fc3345d5b05 camera=10:88b22fc3345d5b05 shadow=10:88b22fc3345d5b05 indirect=10:88b22fc3345d5b05 +geom 1: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.2 motion [] pieces all=760:c2b60a75c52c78b9 camera=760:c2b60a75c52c78b9 shadow=760:c2b60a75c52c78b9 indirect=760:c2b60a75c52c78b9 +geom 2: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=12:94a297badef437e1 camera=12:94a297badef437e1 shadow=12:94a297badef437e1 indirect=12:94a297badef437e1 +geom 3: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.25 motion [] pieces all=800:4a8c9f44d777e131 camera=800:4a8c9f44d777e131 shadow=800:4a8c9f44d777e131 indirect=800:4a8c9f44d777e131 +geom 4: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.3585339 motion [] pieces all=760:2344ecf63e12c441 camera=760:2344ecf63e12c441 shadow=760:2344ecf63e12c441 indirect=760:2344ecf63e12c441 +provenance material /scene/Looks/initialShadingGroup: MaterialOrigin { slots: [0, 1, 2, 3, 4], displaced: false } +provenance light /scene/Sky: LightOrigin { index: 0, geoms: 0..0 } +provenance geometry 0..1: /scene/pCube1 +provenance geometry 1..2: /scene/pSphere1 +provenance geometry 2..3: /scene/pCube2 +provenance geometry 3..4: /scene/pTorus1 +provenance geometry 4..5: /scene/pSphere2 +provenance mesh: MeshOrigin { geom_id: 0, slot: 0, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 1, slot: 1, baked: false, moving: false } +provenance mesh: MeshOrigin { geom_id: 2, slot: 2, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 3, slot: 3, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 4, slot: 1, baked: false, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 12343188411137242430, n_points: 8, n_indices: 20, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 1: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 17119738035130870988, n_points: 382, n_indices: 1560, n_uvs: None, smooth: false, material: 0 }), placements: 2, shared: false, displaced: false } +provenance mesh slot 2: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 1739488954094729910, n_points: 8, n_indices: 24, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 3: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 6096447469814747168, n_points: 400, n_indices: 1600, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/scene/camera1"), cameras: ["/scene/camera1"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/scene/camera1"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-135.image b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-135.image new file mode 100644 index 000000000..ba4884437 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-135.image @@ -0,0 +1 @@ +640x360 16spp clamp-off 52a1a46f3a46d230 diff --git a/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-136.digest b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-136.digest new file mode 100644 index 000000000..0e859a952 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-136.digest @@ -0,0 +1,40 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/scene/camera1") +camera: Camera { origin: Vec3A(0.0074343784, 1.9913422, 4.0133057), lower_left_corner: Vec3A(-8.881443, -3.0086517, -0.98669434), horizontal: Vec3A(17.777756, 0.0, 0.0), vertical: Vec3A(0.0, 9.999988, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: Some(Vec4(0.0, 0.0, -1.0, 3.9133058)), far: Some(Vec4(0.0, 0.0, 1.0, 9995.986)), planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: None +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 640, height: 360, region: PixelRect { x0: 0, y0: 0, x1: 640, y1: 360 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 12.700017, aperture: [25.4, 25.4], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 5.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/cornellbox.usda"], invisible_overrides: Some(0) } +layer: $DIR/cornellbox.usda +warning: Warning { code: AssetUnsupportedByHost, kind: Skipped, count: 1, prims: [], message: "No asset loader: environment map $DIR/sky_gradient.exr ignored — the dome falls back to its uniform colour. Use Scene::from_usd_with_assets to supply one." } +warning: Warning { code: MaterialFallbackDefault, kind: Skipped, count: 1, prims: ["/scene/Looks/initialShadingGroup"], message: "Material /scene/Looks/initialShadingGroup has no surface shader — using default grey OpenPBR" } +lights: 1 +light 0: dome name Some("/scene/Sky") lpe None pmf 1.0 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 5 geometries, PrimitiveBreakdown { triangles: 822, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 2 } top level, PrimitiveBreakdown { triangles: 1582, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 2 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 4.0 motion [] pieces all=10:88b22fc3345d5b05 camera=10:88b22fc3345d5b05 shadow=10:88b22fc3345d5b05 indirect=10:88b22fc3345d5b05 +geom 1: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.2 motion [] pieces all=760:c2b60a75c52c78b9 camera=760:c2b60a75c52c78b9 shadow=760:c2b60a75c52c78b9 indirect=760:c2b60a75c52c78b9 +geom 2: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=12:94a297badef437e1 camera=12:94a297badef437e1 shadow=12:94a297badef437e1 indirect=12:94a297badef437e1 +geom 3: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.25 motion [] pieces all=800:4a8c9f44d777e131 camera=800:4a8c9f44d777e131 shadow=800:4a8c9f44d777e131 indirect=800:4a8c9f44d777e131 +geom 4: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.3585339 motion [] pieces all=760:2344ecf63e12c441 camera=760:2344ecf63e12c441 shadow=760:2344ecf63e12c441 indirect=760:2344ecf63e12c441 +provenance material /scene/Looks/initialShadingGroup: MaterialOrigin { slots: [0, 1, 2, 3, 4], displaced: false } +provenance light /scene/Sky: LightOrigin { index: 0, geoms: 0..0 } +provenance geometry 0..1: /scene/pCube1 +provenance geometry 1..2: /scene/pSphere1 +provenance geometry 2..3: /scene/pCube2 +provenance geometry 3..4: /scene/pTorus1 +provenance geometry 4..5: /scene/pSphere2 +provenance mesh: MeshOrigin { geom_id: 0, slot: 0, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 1, slot: 1, baked: false, moving: false } +provenance mesh: MeshOrigin { geom_id: 2, slot: 2, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 3, slot: 3, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 4, slot: 1, baked: false, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 12343188411137242430, n_points: 8, n_indices: 20, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 1: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 17119738035130870988, n_points: 382, n_indices: 1560, n_uvs: None, smooth: false, material: 0 }), placements: 2, shared: false, displaced: false } +provenance mesh slot 2: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 1739488954094729910, n_points: 8, n_indices: 24, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 3: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 6096447469814747168, n_points: 400, n_indices: 1600, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/scene/camera1"), cameras: ["/scene/camera1"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/scene/camera1"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-136.image b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-136.image new file mode 100644 index 000000000..ba4884437 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-136.image @@ -0,0 +1 @@ +640x360 16spp clamp-off 52a1a46f3a46d230 diff --git a/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-137.digest b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-137.digest new file mode 100644 index 000000000..0e859a952 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-137.digest @@ -0,0 +1,40 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/scene/camera1") +camera: Camera { origin: Vec3A(0.0074343784, 1.9913422, 4.0133057), lower_left_corner: Vec3A(-8.881443, -3.0086517, -0.98669434), horizontal: Vec3A(17.777756, 0.0, 0.0), vertical: Vec3A(0.0, 9.999988, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: Some(Vec4(0.0, 0.0, -1.0, 3.9133058)), far: Some(Vec4(0.0, 0.0, 1.0, 9995.986)), planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: None +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 640, height: 360, region: PixelRect { x0: 0, y0: 0, x1: 640, y1: 360 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 12.700017, aperture: [25.4, 25.4], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 5.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/cornellbox.usda"], invisible_overrides: Some(0) } +layer: $DIR/cornellbox.usda +warning: Warning { code: AssetUnsupportedByHost, kind: Skipped, count: 1, prims: [], message: "No asset loader: environment map $DIR/sky_gradient.exr ignored — the dome falls back to its uniform colour. Use Scene::from_usd_with_assets to supply one." } +warning: Warning { code: MaterialFallbackDefault, kind: Skipped, count: 1, prims: ["/scene/Looks/initialShadingGroup"], message: "Material /scene/Looks/initialShadingGroup has no surface shader — using default grey OpenPBR" } +lights: 1 +light 0: dome name Some("/scene/Sky") lpe None pmf 1.0 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 5 geometries, PrimitiveBreakdown { triangles: 822, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 2 } top level, PrimitiveBreakdown { triangles: 1582, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 2 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 4.0 motion [] pieces all=10:88b22fc3345d5b05 camera=10:88b22fc3345d5b05 shadow=10:88b22fc3345d5b05 indirect=10:88b22fc3345d5b05 +geom 1: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.2 motion [] pieces all=760:c2b60a75c52c78b9 camera=760:c2b60a75c52c78b9 shadow=760:c2b60a75c52c78b9 indirect=760:c2b60a75c52c78b9 +geom 2: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=12:94a297badef437e1 camera=12:94a297badef437e1 shadow=12:94a297badef437e1 indirect=12:94a297badef437e1 +geom 3: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.25 motion [] pieces all=800:4a8c9f44d777e131 camera=800:4a8c9f44d777e131 shadow=800:4a8c9f44d777e131 indirect=800:4a8c9f44d777e131 +geom 4: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.3585339 motion [] pieces all=760:2344ecf63e12c441 camera=760:2344ecf63e12c441 shadow=760:2344ecf63e12c441 indirect=760:2344ecf63e12c441 +provenance material /scene/Looks/initialShadingGroup: MaterialOrigin { slots: [0, 1, 2, 3, 4], displaced: false } +provenance light /scene/Sky: LightOrigin { index: 0, geoms: 0..0 } +provenance geometry 0..1: /scene/pCube1 +provenance geometry 1..2: /scene/pSphere1 +provenance geometry 2..3: /scene/pCube2 +provenance geometry 3..4: /scene/pTorus1 +provenance geometry 4..5: /scene/pSphere2 +provenance mesh: MeshOrigin { geom_id: 0, slot: 0, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 1, slot: 1, baked: false, moving: false } +provenance mesh: MeshOrigin { geom_id: 2, slot: 2, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 3, slot: 3, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 4, slot: 1, baked: false, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 12343188411137242430, n_points: 8, n_indices: 20, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 1: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 17119738035130870988, n_points: 382, n_indices: 1560, n_uvs: None, smooth: false, material: 0 }), placements: 2, shared: false, displaced: false } +provenance mesh slot 2: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 1739488954094729910, n_points: 8, n_indices: 24, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 3: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 6096447469814747168, n_points: 400, n_indices: 1600, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/scene/camera1"), cameras: ["/scene/camera1"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/scene/camera1"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-137.image b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-137.image new file mode 100644 index 000000000..ba4884437 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-137.image @@ -0,0 +1 @@ +640x360 16spp clamp-off 52a1a46f3a46d230 diff --git a/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-138.digest b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-138.digest new file mode 100644 index 000000000..0e859a952 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-138.digest @@ -0,0 +1,40 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/scene/camera1") +camera: Camera { origin: Vec3A(0.0074343784, 1.9913422, 4.0133057), lower_left_corner: Vec3A(-8.881443, -3.0086517, -0.98669434), horizontal: Vec3A(17.777756, 0.0, 0.0), vertical: Vec3A(0.0, 9.999988, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: Some(Vec4(0.0, 0.0, -1.0, 3.9133058)), far: Some(Vec4(0.0, 0.0, 1.0, 9995.986)), planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: None +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 640, height: 360, region: PixelRect { x0: 0, y0: 0, x1: 640, y1: 360 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 12.700017, aperture: [25.4, 25.4], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 5.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/cornellbox.usda"], invisible_overrides: Some(0) } +layer: $DIR/cornellbox.usda +warning: Warning { code: AssetUnsupportedByHost, kind: Skipped, count: 1, prims: [], message: "No asset loader: environment map $DIR/sky_gradient.exr ignored — the dome falls back to its uniform colour. Use Scene::from_usd_with_assets to supply one." } +warning: Warning { code: MaterialFallbackDefault, kind: Skipped, count: 1, prims: ["/scene/Looks/initialShadingGroup"], message: "Material /scene/Looks/initialShadingGroup has no surface shader — using default grey OpenPBR" } +lights: 1 +light 0: dome name Some("/scene/Sky") lpe None pmf 1.0 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 5 geometries, PrimitiveBreakdown { triangles: 822, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 2 } top level, PrimitiveBreakdown { triangles: 1582, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 2 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 4.0 motion [] pieces all=10:88b22fc3345d5b05 camera=10:88b22fc3345d5b05 shadow=10:88b22fc3345d5b05 indirect=10:88b22fc3345d5b05 +geom 1: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.2 motion [] pieces all=760:c2b60a75c52c78b9 camera=760:c2b60a75c52c78b9 shadow=760:c2b60a75c52c78b9 indirect=760:c2b60a75c52c78b9 +geom 2: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=12:94a297badef437e1 camera=12:94a297badef437e1 shadow=12:94a297badef437e1 indirect=12:94a297badef437e1 +geom 3: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.25 motion [] pieces all=800:4a8c9f44d777e131 camera=800:4a8c9f44d777e131 shadow=800:4a8c9f44d777e131 indirect=800:4a8c9f44d777e131 +geom 4: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.3585339 motion [] pieces all=760:2344ecf63e12c441 camera=760:2344ecf63e12c441 shadow=760:2344ecf63e12c441 indirect=760:2344ecf63e12c441 +provenance material /scene/Looks/initialShadingGroup: MaterialOrigin { slots: [0, 1, 2, 3, 4], displaced: false } +provenance light /scene/Sky: LightOrigin { index: 0, geoms: 0..0 } +provenance geometry 0..1: /scene/pCube1 +provenance geometry 1..2: /scene/pSphere1 +provenance geometry 2..3: /scene/pCube2 +provenance geometry 3..4: /scene/pTorus1 +provenance geometry 4..5: /scene/pSphere2 +provenance mesh: MeshOrigin { geom_id: 0, slot: 0, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 1, slot: 1, baked: false, moving: false } +provenance mesh: MeshOrigin { geom_id: 2, slot: 2, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 3, slot: 3, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 4, slot: 1, baked: false, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 12343188411137242430, n_points: 8, n_indices: 20, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 1: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 17119738035130870988, n_points: 382, n_indices: 1560, n_uvs: None, smooth: false, material: 0 }), placements: 2, shared: false, displaced: false } +provenance mesh slot 2: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 1739488954094729910, n_points: 8, n_indices: 24, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 3: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 6096447469814747168, n_points: 400, n_indices: 1600, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/scene/camera1"), cameras: ["/scene/camera1"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/scene/camera1"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-138.image b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-138.image new file mode 100644 index 000000000..ba4884437 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-138.image @@ -0,0 +1 @@ +640x360 16spp clamp-off 52a1a46f3a46d230 diff --git a/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-139.digest b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-139.digest new file mode 100644 index 000000000..0e859a952 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-139.digest @@ -0,0 +1,40 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/scene/camera1") +camera: Camera { origin: Vec3A(0.0074343784, 1.9913422, 4.0133057), lower_left_corner: Vec3A(-8.881443, -3.0086517, -0.98669434), horizontal: Vec3A(17.777756, 0.0, 0.0), vertical: Vec3A(0.0, 9.999988, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: Some(Vec4(0.0, 0.0, -1.0, 3.9133058)), far: Some(Vec4(0.0, 0.0, 1.0, 9995.986)), planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: None +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 640, height: 360, region: PixelRect { x0: 0, y0: 0, x1: 640, y1: 360 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 12.700017, aperture: [25.4, 25.4], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 5.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/cornellbox.usda"], invisible_overrides: Some(0) } +layer: $DIR/cornellbox.usda +warning: Warning { code: AssetUnsupportedByHost, kind: Skipped, count: 1, prims: [], message: "No asset loader: environment map $DIR/sky_gradient.exr ignored — the dome falls back to its uniform colour. Use Scene::from_usd_with_assets to supply one." } +warning: Warning { code: MaterialFallbackDefault, kind: Skipped, count: 1, prims: ["/scene/Looks/initialShadingGroup"], message: "Material /scene/Looks/initialShadingGroup has no surface shader — using default grey OpenPBR" } +lights: 1 +light 0: dome name Some("/scene/Sky") lpe None pmf 1.0 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 5 geometries, PrimitiveBreakdown { triangles: 822, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 2 } top level, PrimitiveBreakdown { triangles: 1582, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 2 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 4.0 motion [] pieces all=10:88b22fc3345d5b05 camera=10:88b22fc3345d5b05 shadow=10:88b22fc3345d5b05 indirect=10:88b22fc3345d5b05 +geom 1: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.2 motion [] pieces all=760:c2b60a75c52c78b9 camera=760:c2b60a75c52c78b9 shadow=760:c2b60a75c52c78b9 indirect=760:c2b60a75c52c78b9 +geom 2: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=12:94a297badef437e1 camera=12:94a297badef437e1 shadow=12:94a297badef437e1 indirect=12:94a297badef437e1 +geom 3: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.25 motion [] pieces all=800:4a8c9f44d777e131 camera=800:4a8c9f44d777e131 shadow=800:4a8c9f44d777e131 indirect=800:4a8c9f44d777e131 +geom 4: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.3585339 motion [] pieces all=760:2344ecf63e12c441 camera=760:2344ecf63e12c441 shadow=760:2344ecf63e12c441 indirect=760:2344ecf63e12c441 +provenance material /scene/Looks/initialShadingGroup: MaterialOrigin { slots: [0, 1, 2, 3, 4], displaced: false } +provenance light /scene/Sky: LightOrigin { index: 0, geoms: 0..0 } +provenance geometry 0..1: /scene/pCube1 +provenance geometry 1..2: /scene/pSphere1 +provenance geometry 2..3: /scene/pCube2 +provenance geometry 3..4: /scene/pTorus1 +provenance geometry 4..5: /scene/pSphere2 +provenance mesh: MeshOrigin { geom_id: 0, slot: 0, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 1, slot: 1, baked: false, moving: false } +provenance mesh: MeshOrigin { geom_id: 2, slot: 2, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 3, slot: 3, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 4, slot: 1, baked: false, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 12343188411137242430, n_points: 8, n_indices: 20, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 1: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 17119738035130870988, n_points: 382, n_indices: 1560, n_uvs: None, smooth: false, material: 0 }), placements: 2, shared: false, displaced: false } +provenance mesh slot 2: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 1739488954094729910, n_points: 8, n_indices: 24, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 3: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 6096447469814747168, n_points: 400, n_indices: 1600, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/scene/camera1"), cameras: ["/scene/camera1"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/scene/camera1"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-139.image b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-139.image new file mode 100644 index 000000000..ba4884437 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-139.image @@ -0,0 +1 @@ +640x360 16spp clamp-off 52a1a46f3a46d230 diff --git a/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-14.digest b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-14.digest new file mode 100644 index 000000000..0e859a952 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-14.digest @@ -0,0 +1,40 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/scene/camera1") +camera: Camera { origin: Vec3A(0.0074343784, 1.9913422, 4.0133057), lower_left_corner: Vec3A(-8.881443, -3.0086517, -0.98669434), horizontal: Vec3A(17.777756, 0.0, 0.0), vertical: Vec3A(0.0, 9.999988, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: Some(Vec4(0.0, 0.0, -1.0, 3.9133058)), far: Some(Vec4(0.0, 0.0, 1.0, 9995.986)), planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: None +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 640, height: 360, region: PixelRect { x0: 0, y0: 0, x1: 640, y1: 360 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 12.700017, aperture: [25.4, 25.4], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 5.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/cornellbox.usda"], invisible_overrides: Some(0) } +layer: $DIR/cornellbox.usda +warning: Warning { code: AssetUnsupportedByHost, kind: Skipped, count: 1, prims: [], message: "No asset loader: environment map $DIR/sky_gradient.exr ignored — the dome falls back to its uniform colour. Use Scene::from_usd_with_assets to supply one." } +warning: Warning { code: MaterialFallbackDefault, kind: Skipped, count: 1, prims: ["/scene/Looks/initialShadingGroup"], message: "Material /scene/Looks/initialShadingGroup has no surface shader — using default grey OpenPBR" } +lights: 1 +light 0: dome name Some("/scene/Sky") lpe None pmf 1.0 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 5 geometries, PrimitiveBreakdown { triangles: 822, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 2 } top level, PrimitiveBreakdown { triangles: 1582, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 2 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 4.0 motion [] pieces all=10:88b22fc3345d5b05 camera=10:88b22fc3345d5b05 shadow=10:88b22fc3345d5b05 indirect=10:88b22fc3345d5b05 +geom 1: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.2 motion [] pieces all=760:c2b60a75c52c78b9 camera=760:c2b60a75c52c78b9 shadow=760:c2b60a75c52c78b9 indirect=760:c2b60a75c52c78b9 +geom 2: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=12:94a297badef437e1 camera=12:94a297badef437e1 shadow=12:94a297badef437e1 indirect=12:94a297badef437e1 +geom 3: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.25 motion [] pieces all=800:4a8c9f44d777e131 camera=800:4a8c9f44d777e131 shadow=800:4a8c9f44d777e131 indirect=800:4a8c9f44d777e131 +geom 4: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.3585339 motion [] pieces all=760:2344ecf63e12c441 camera=760:2344ecf63e12c441 shadow=760:2344ecf63e12c441 indirect=760:2344ecf63e12c441 +provenance material /scene/Looks/initialShadingGroup: MaterialOrigin { slots: [0, 1, 2, 3, 4], displaced: false } +provenance light /scene/Sky: LightOrigin { index: 0, geoms: 0..0 } +provenance geometry 0..1: /scene/pCube1 +provenance geometry 1..2: /scene/pSphere1 +provenance geometry 2..3: /scene/pCube2 +provenance geometry 3..4: /scene/pTorus1 +provenance geometry 4..5: /scene/pSphere2 +provenance mesh: MeshOrigin { geom_id: 0, slot: 0, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 1, slot: 1, baked: false, moving: false } +provenance mesh: MeshOrigin { geom_id: 2, slot: 2, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 3, slot: 3, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 4, slot: 1, baked: false, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 12343188411137242430, n_points: 8, n_indices: 20, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 1: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 17119738035130870988, n_points: 382, n_indices: 1560, n_uvs: None, smooth: false, material: 0 }), placements: 2, shared: false, displaced: false } +provenance mesh slot 2: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 1739488954094729910, n_points: 8, n_indices: 24, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 3: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 6096447469814747168, n_points: 400, n_indices: 1600, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/scene/camera1"), cameras: ["/scene/camera1"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/scene/camera1"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-14.image b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-14.image new file mode 100644 index 000000000..ba4884437 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-14.image @@ -0,0 +1 @@ +640x360 16spp clamp-off 52a1a46f3a46d230 diff --git a/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-140.digest b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-140.digest new file mode 100644 index 000000000..0e859a952 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-140.digest @@ -0,0 +1,40 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/scene/camera1") +camera: Camera { origin: Vec3A(0.0074343784, 1.9913422, 4.0133057), lower_left_corner: Vec3A(-8.881443, -3.0086517, -0.98669434), horizontal: Vec3A(17.777756, 0.0, 0.0), vertical: Vec3A(0.0, 9.999988, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: Some(Vec4(0.0, 0.0, -1.0, 3.9133058)), far: Some(Vec4(0.0, 0.0, 1.0, 9995.986)), planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: None +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 640, height: 360, region: PixelRect { x0: 0, y0: 0, x1: 640, y1: 360 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 12.700017, aperture: [25.4, 25.4], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 5.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/cornellbox.usda"], invisible_overrides: Some(0) } +layer: $DIR/cornellbox.usda +warning: Warning { code: AssetUnsupportedByHost, kind: Skipped, count: 1, prims: [], message: "No asset loader: environment map $DIR/sky_gradient.exr ignored — the dome falls back to its uniform colour. Use Scene::from_usd_with_assets to supply one." } +warning: Warning { code: MaterialFallbackDefault, kind: Skipped, count: 1, prims: ["/scene/Looks/initialShadingGroup"], message: "Material /scene/Looks/initialShadingGroup has no surface shader — using default grey OpenPBR" } +lights: 1 +light 0: dome name Some("/scene/Sky") lpe None pmf 1.0 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 5 geometries, PrimitiveBreakdown { triangles: 822, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 2 } top level, PrimitiveBreakdown { triangles: 1582, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 2 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 4.0 motion [] pieces all=10:88b22fc3345d5b05 camera=10:88b22fc3345d5b05 shadow=10:88b22fc3345d5b05 indirect=10:88b22fc3345d5b05 +geom 1: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.2 motion [] pieces all=760:c2b60a75c52c78b9 camera=760:c2b60a75c52c78b9 shadow=760:c2b60a75c52c78b9 indirect=760:c2b60a75c52c78b9 +geom 2: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=12:94a297badef437e1 camera=12:94a297badef437e1 shadow=12:94a297badef437e1 indirect=12:94a297badef437e1 +geom 3: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.25 motion [] pieces all=800:4a8c9f44d777e131 camera=800:4a8c9f44d777e131 shadow=800:4a8c9f44d777e131 indirect=800:4a8c9f44d777e131 +geom 4: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.3585339 motion [] pieces all=760:2344ecf63e12c441 camera=760:2344ecf63e12c441 shadow=760:2344ecf63e12c441 indirect=760:2344ecf63e12c441 +provenance material /scene/Looks/initialShadingGroup: MaterialOrigin { slots: [0, 1, 2, 3, 4], displaced: false } +provenance light /scene/Sky: LightOrigin { index: 0, geoms: 0..0 } +provenance geometry 0..1: /scene/pCube1 +provenance geometry 1..2: /scene/pSphere1 +provenance geometry 2..3: /scene/pCube2 +provenance geometry 3..4: /scene/pTorus1 +provenance geometry 4..5: /scene/pSphere2 +provenance mesh: MeshOrigin { geom_id: 0, slot: 0, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 1, slot: 1, baked: false, moving: false } +provenance mesh: MeshOrigin { geom_id: 2, slot: 2, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 3, slot: 3, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 4, slot: 1, baked: false, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 12343188411137242430, n_points: 8, n_indices: 20, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 1: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 17119738035130870988, n_points: 382, n_indices: 1560, n_uvs: None, smooth: false, material: 0 }), placements: 2, shared: false, displaced: false } +provenance mesh slot 2: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 1739488954094729910, n_points: 8, n_indices: 24, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 3: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 6096447469814747168, n_points: 400, n_indices: 1600, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/scene/camera1"), cameras: ["/scene/camera1"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/scene/camera1"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-140.image b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-140.image new file mode 100644 index 000000000..ba4884437 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-140.image @@ -0,0 +1 @@ +640x360 16spp clamp-off 52a1a46f3a46d230 diff --git a/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-141.digest b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-141.digest new file mode 100644 index 000000000..0e859a952 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-141.digest @@ -0,0 +1,40 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/scene/camera1") +camera: Camera { origin: Vec3A(0.0074343784, 1.9913422, 4.0133057), lower_left_corner: Vec3A(-8.881443, -3.0086517, -0.98669434), horizontal: Vec3A(17.777756, 0.0, 0.0), vertical: Vec3A(0.0, 9.999988, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: Some(Vec4(0.0, 0.0, -1.0, 3.9133058)), far: Some(Vec4(0.0, 0.0, 1.0, 9995.986)), planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: None +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 640, height: 360, region: PixelRect { x0: 0, y0: 0, x1: 640, y1: 360 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 12.700017, aperture: [25.4, 25.4], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 5.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/cornellbox.usda"], invisible_overrides: Some(0) } +layer: $DIR/cornellbox.usda +warning: Warning { code: AssetUnsupportedByHost, kind: Skipped, count: 1, prims: [], message: "No asset loader: environment map $DIR/sky_gradient.exr ignored — the dome falls back to its uniform colour. Use Scene::from_usd_with_assets to supply one." } +warning: Warning { code: MaterialFallbackDefault, kind: Skipped, count: 1, prims: ["/scene/Looks/initialShadingGroup"], message: "Material /scene/Looks/initialShadingGroup has no surface shader — using default grey OpenPBR" } +lights: 1 +light 0: dome name Some("/scene/Sky") lpe None pmf 1.0 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 5 geometries, PrimitiveBreakdown { triangles: 822, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 2 } top level, PrimitiveBreakdown { triangles: 1582, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 2 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 4.0 motion [] pieces all=10:88b22fc3345d5b05 camera=10:88b22fc3345d5b05 shadow=10:88b22fc3345d5b05 indirect=10:88b22fc3345d5b05 +geom 1: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.2 motion [] pieces all=760:c2b60a75c52c78b9 camera=760:c2b60a75c52c78b9 shadow=760:c2b60a75c52c78b9 indirect=760:c2b60a75c52c78b9 +geom 2: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=12:94a297badef437e1 camera=12:94a297badef437e1 shadow=12:94a297badef437e1 indirect=12:94a297badef437e1 +geom 3: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.25 motion [] pieces all=800:4a8c9f44d777e131 camera=800:4a8c9f44d777e131 shadow=800:4a8c9f44d777e131 indirect=800:4a8c9f44d777e131 +geom 4: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.3585339 motion [] pieces all=760:2344ecf63e12c441 camera=760:2344ecf63e12c441 shadow=760:2344ecf63e12c441 indirect=760:2344ecf63e12c441 +provenance material /scene/Looks/initialShadingGroup: MaterialOrigin { slots: [0, 1, 2, 3, 4], displaced: false } +provenance light /scene/Sky: LightOrigin { index: 0, geoms: 0..0 } +provenance geometry 0..1: /scene/pCube1 +provenance geometry 1..2: /scene/pSphere1 +provenance geometry 2..3: /scene/pCube2 +provenance geometry 3..4: /scene/pTorus1 +provenance geometry 4..5: /scene/pSphere2 +provenance mesh: MeshOrigin { geom_id: 0, slot: 0, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 1, slot: 1, baked: false, moving: false } +provenance mesh: MeshOrigin { geom_id: 2, slot: 2, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 3, slot: 3, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 4, slot: 1, baked: false, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 12343188411137242430, n_points: 8, n_indices: 20, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 1: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 17119738035130870988, n_points: 382, n_indices: 1560, n_uvs: None, smooth: false, material: 0 }), placements: 2, shared: false, displaced: false } +provenance mesh slot 2: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 1739488954094729910, n_points: 8, n_indices: 24, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 3: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 6096447469814747168, n_points: 400, n_indices: 1600, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/scene/camera1"), cameras: ["/scene/camera1"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/scene/camera1"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-141.image b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-141.image new file mode 100644 index 000000000..ba4884437 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-141.image @@ -0,0 +1 @@ +640x360 16spp clamp-off 52a1a46f3a46d230 diff --git a/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-142.digest b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-142.digest new file mode 100644 index 000000000..0e859a952 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-142.digest @@ -0,0 +1,40 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/scene/camera1") +camera: Camera { origin: Vec3A(0.0074343784, 1.9913422, 4.0133057), lower_left_corner: Vec3A(-8.881443, -3.0086517, -0.98669434), horizontal: Vec3A(17.777756, 0.0, 0.0), vertical: Vec3A(0.0, 9.999988, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: Some(Vec4(0.0, 0.0, -1.0, 3.9133058)), far: Some(Vec4(0.0, 0.0, 1.0, 9995.986)), planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: None +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 640, height: 360, region: PixelRect { x0: 0, y0: 0, x1: 640, y1: 360 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 12.700017, aperture: [25.4, 25.4], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 5.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/cornellbox.usda"], invisible_overrides: Some(0) } +layer: $DIR/cornellbox.usda +warning: Warning { code: AssetUnsupportedByHost, kind: Skipped, count: 1, prims: [], message: "No asset loader: environment map $DIR/sky_gradient.exr ignored — the dome falls back to its uniform colour. Use Scene::from_usd_with_assets to supply one." } +warning: Warning { code: MaterialFallbackDefault, kind: Skipped, count: 1, prims: ["/scene/Looks/initialShadingGroup"], message: "Material /scene/Looks/initialShadingGroup has no surface shader — using default grey OpenPBR" } +lights: 1 +light 0: dome name Some("/scene/Sky") lpe None pmf 1.0 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 5 geometries, PrimitiveBreakdown { triangles: 822, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 2 } top level, PrimitiveBreakdown { triangles: 1582, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 2 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 4.0 motion [] pieces all=10:88b22fc3345d5b05 camera=10:88b22fc3345d5b05 shadow=10:88b22fc3345d5b05 indirect=10:88b22fc3345d5b05 +geom 1: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.2 motion [] pieces all=760:c2b60a75c52c78b9 camera=760:c2b60a75c52c78b9 shadow=760:c2b60a75c52c78b9 indirect=760:c2b60a75c52c78b9 +geom 2: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=12:94a297badef437e1 camera=12:94a297badef437e1 shadow=12:94a297badef437e1 indirect=12:94a297badef437e1 +geom 3: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.25 motion [] pieces all=800:4a8c9f44d777e131 camera=800:4a8c9f44d777e131 shadow=800:4a8c9f44d777e131 indirect=800:4a8c9f44d777e131 +geom 4: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.3585339 motion [] pieces all=760:2344ecf63e12c441 camera=760:2344ecf63e12c441 shadow=760:2344ecf63e12c441 indirect=760:2344ecf63e12c441 +provenance material /scene/Looks/initialShadingGroup: MaterialOrigin { slots: [0, 1, 2, 3, 4], displaced: false } +provenance light /scene/Sky: LightOrigin { index: 0, geoms: 0..0 } +provenance geometry 0..1: /scene/pCube1 +provenance geometry 1..2: /scene/pSphere1 +provenance geometry 2..3: /scene/pCube2 +provenance geometry 3..4: /scene/pTorus1 +provenance geometry 4..5: /scene/pSphere2 +provenance mesh: MeshOrigin { geom_id: 0, slot: 0, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 1, slot: 1, baked: false, moving: false } +provenance mesh: MeshOrigin { geom_id: 2, slot: 2, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 3, slot: 3, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 4, slot: 1, baked: false, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 12343188411137242430, n_points: 8, n_indices: 20, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 1: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 17119738035130870988, n_points: 382, n_indices: 1560, n_uvs: None, smooth: false, material: 0 }), placements: 2, shared: false, displaced: false } +provenance mesh slot 2: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 1739488954094729910, n_points: 8, n_indices: 24, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 3: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 6096447469814747168, n_points: 400, n_indices: 1600, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/scene/camera1"), cameras: ["/scene/camera1"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/scene/camera1"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-142.image b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-142.image new file mode 100644 index 000000000..ba4884437 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-142.image @@ -0,0 +1 @@ +640x360 16spp clamp-off 52a1a46f3a46d230 diff --git a/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-143.digest b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-143.digest new file mode 100644 index 000000000..0e859a952 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-143.digest @@ -0,0 +1,40 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/scene/camera1") +camera: Camera { origin: Vec3A(0.0074343784, 1.9913422, 4.0133057), lower_left_corner: Vec3A(-8.881443, -3.0086517, -0.98669434), horizontal: Vec3A(17.777756, 0.0, 0.0), vertical: Vec3A(0.0, 9.999988, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: Some(Vec4(0.0, 0.0, -1.0, 3.9133058)), far: Some(Vec4(0.0, 0.0, 1.0, 9995.986)), planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: None +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 640, height: 360, region: PixelRect { x0: 0, y0: 0, x1: 640, y1: 360 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 12.700017, aperture: [25.4, 25.4], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 5.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/cornellbox.usda"], invisible_overrides: Some(0) } +layer: $DIR/cornellbox.usda +warning: Warning { code: AssetUnsupportedByHost, kind: Skipped, count: 1, prims: [], message: "No asset loader: environment map $DIR/sky_gradient.exr ignored — the dome falls back to its uniform colour. Use Scene::from_usd_with_assets to supply one." } +warning: Warning { code: MaterialFallbackDefault, kind: Skipped, count: 1, prims: ["/scene/Looks/initialShadingGroup"], message: "Material /scene/Looks/initialShadingGroup has no surface shader — using default grey OpenPBR" } +lights: 1 +light 0: dome name Some("/scene/Sky") lpe None pmf 1.0 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 5 geometries, PrimitiveBreakdown { triangles: 822, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 2 } top level, PrimitiveBreakdown { triangles: 1582, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 2 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 4.0 motion [] pieces all=10:88b22fc3345d5b05 camera=10:88b22fc3345d5b05 shadow=10:88b22fc3345d5b05 indirect=10:88b22fc3345d5b05 +geom 1: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.2 motion [] pieces all=760:c2b60a75c52c78b9 camera=760:c2b60a75c52c78b9 shadow=760:c2b60a75c52c78b9 indirect=760:c2b60a75c52c78b9 +geom 2: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=12:94a297badef437e1 camera=12:94a297badef437e1 shadow=12:94a297badef437e1 indirect=12:94a297badef437e1 +geom 3: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.25 motion [] pieces all=800:4a8c9f44d777e131 camera=800:4a8c9f44d777e131 shadow=800:4a8c9f44d777e131 indirect=800:4a8c9f44d777e131 +geom 4: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.3585339 motion [] pieces all=760:2344ecf63e12c441 camera=760:2344ecf63e12c441 shadow=760:2344ecf63e12c441 indirect=760:2344ecf63e12c441 +provenance material /scene/Looks/initialShadingGroup: MaterialOrigin { slots: [0, 1, 2, 3, 4], displaced: false } +provenance light /scene/Sky: LightOrigin { index: 0, geoms: 0..0 } +provenance geometry 0..1: /scene/pCube1 +provenance geometry 1..2: /scene/pSphere1 +provenance geometry 2..3: /scene/pCube2 +provenance geometry 3..4: /scene/pTorus1 +provenance geometry 4..5: /scene/pSphere2 +provenance mesh: MeshOrigin { geom_id: 0, slot: 0, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 1, slot: 1, baked: false, moving: false } +provenance mesh: MeshOrigin { geom_id: 2, slot: 2, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 3, slot: 3, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 4, slot: 1, baked: false, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 12343188411137242430, n_points: 8, n_indices: 20, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 1: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 17119738035130870988, n_points: 382, n_indices: 1560, n_uvs: None, smooth: false, material: 0 }), placements: 2, shared: false, displaced: false } +provenance mesh slot 2: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 1739488954094729910, n_points: 8, n_indices: 24, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 3: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 6096447469814747168, n_points: 400, n_indices: 1600, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/scene/camera1"), cameras: ["/scene/camera1"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/scene/camera1"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-143.image b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-143.image new file mode 100644 index 000000000..ba4884437 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-143.image @@ -0,0 +1 @@ +640x360 16spp clamp-off 52a1a46f3a46d230 diff --git a/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-144.digest b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-144.digest new file mode 100644 index 000000000..0e859a952 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-144.digest @@ -0,0 +1,40 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/scene/camera1") +camera: Camera { origin: Vec3A(0.0074343784, 1.9913422, 4.0133057), lower_left_corner: Vec3A(-8.881443, -3.0086517, -0.98669434), horizontal: Vec3A(17.777756, 0.0, 0.0), vertical: Vec3A(0.0, 9.999988, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: Some(Vec4(0.0, 0.0, -1.0, 3.9133058)), far: Some(Vec4(0.0, 0.0, 1.0, 9995.986)), planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: None +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 640, height: 360, region: PixelRect { x0: 0, y0: 0, x1: 640, y1: 360 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 12.700017, aperture: [25.4, 25.4], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 5.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/cornellbox.usda"], invisible_overrides: Some(0) } +layer: $DIR/cornellbox.usda +warning: Warning { code: AssetUnsupportedByHost, kind: Skipped, count: 1, prims: [], message: "No asset loader: environment map $DIR/sky_gradient.exr ignored — the dome falls back to its uniform colour. Use Scene::from_usd_with_assets to supply one." } +warning: Warning { code: MaterialFallbackDefault, kind: Skipped, count: 1, prims: ["/scene/Looks/initialShadingGroup"], message: "Material /scene/Looks/initialShadingGroup has no surface shader — using default grey OpenPBR" } +lights: 1 +light 0: dome name Some("/scene/Sky") lpe None pmf 1.0 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 5 geometries, PrimitiveBreakdown { triangles: 822, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 2 } top level, PrimitiveBreakdown { triangles: 1582, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 2 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 4.0 motion [] pieces all=10:88b22fc3345d5b05 camera=10:88b22fc3345d5b05 shadow=10:88b22fc3345d5b05 indirect=10:88b22fc3345d5b05 +geom 1: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.2 motion [] pieces all=760:c2b60a75c52c78b9 camera=760:c2b60a75c52c78b9 shadow=760:c2b60a75c52c78b9 indirect=760:c2b60a75c52c78b9 +geom 2: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=12:94a297badef437e1 camera=12:94a297badef437e1 shadow=12:94a297badef437e1 indirect=12:94a297badef437e1 +geom 3: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.25 motion [] pieces all=800:4a8c9f44d777e131 camera=800:4a8c9f44d777e131 shadow=800:4a8c9f44d777e131 indirect=800:4a8c9f44d777e131 +geom 4: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.3585339 motion [] pieces all=760:2344ecf63e12c441 camera=760:2344ecf63e12c441 shadow=760:2344ecf63e12c441 indirect=760:2344ecf63e12c441 +provenance material /scene/Looks/initialShadingGroup: MaterialOrigin { slots: [0, 1, 2, 3, 4], displaced: false } +provenance light /scene/Sky: LightOrigin { index: 0, geoms: 0..0 } +provenance geometry 0..1: /scene/pCube1 +provenance geometry 1..2: /scene/pSphere1 +provenance geometry 2..3: /scene/pCube2 +provenance geometry 3..4: /scene/pTorus1 +provenance geometry 4..5: /scene/pSphere2 +provenance mesh: MeshOrigin { geom_id: 0, slot: 0, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 1, slot: 1, baked: false, moving: false } +provenance mesh: MeshOrigin { geom_id: 2, slot: 2, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 3, slot: 3, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 4, slot: 1, baked: false, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 12343188411137242430, n_points: 8, n_indices: 20, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 1: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 17119738035130870988, n_points: 382, n_indices: 1560, n_uvs: None, smooth: false, material: 0 }), placements: 2, shared: false, displaced: false } +provenance mesh slot 2: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 1739488954094729910, n_points: 8, n_indices: 24, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 3: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 6096447469814747168, n_points: 400, n_indices: 1600, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/scene/camera1"), cameras: ["/scene/camera1"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/scene/camera1"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-144.image b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-144.image new file mode 100644 index 000000000..ba4884437 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-144.image @@ -0,0 +1 @@ +640x360 16spp clamp-off 52a1a46f3a46d230 diff --git a/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-145.digest b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-145.digest new file mode 100644 index 000000000..0e859a952 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-145.digest @@ -0,0 +1,40 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/scene/camera1") +camera: Camera { origin: Vec3A(0.0074343784, 1.9913422, 4.0133057), lower_left_corner: Vec3A(-8.881443, -3.0086517, -0.98669434), horizontal: Vec3A(17.777756, 0.0, 0.0), vertical: Vec3A(0.0, 9.999988, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: Some(Vec4(0.0, 0.0, -1.0, 3.9133058)), far: Some(Vec4(0.0, 0.0, 1.0, 9995.986)), planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: None +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 640, height: 360, region: PixelRect { x0: 0, y0: 0, x1: 640, y1: 360 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 12.700017, aperture: [25.4, 25.4], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 5.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/cornellbox.usda"], invisible_overrides: Some(0) } +layer: $DIR/cornellbox.usda +warning: Warning { code: AssetUnsupportedByHost, kind: Skipped, count: 1, prims: [], message: "No asset loader: environment map $DIR/sky_gradient.exr ignored — the dome falls back to its uniform colour. Use Scene::from_usd_with_assets to supply one." } +warning: Warning { code: MaterialFallbackDefault, kind: Skipped, count: 1, prims: ["/scene/Looks/initialShadingGroup"], message: "Material /scene/Looks/initialShadingGroup has no surface shader — using default grey OpenPBR" } +lights: 1 +light 0: dome name Some("/scene/Sky") lpe None pmf 1.0 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 5 geometries, PrimitiveBreakdown { triangles: 822, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 2 } top level, PrimitiveBreakdown { triangles: 1582, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 2 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 4.0 motion [] pieces all=10:88b22fc3345d5b05 camera=10:88b22fc3345d5b05 shadow=10:88b22fc3345d5b05 indirect=10:88b22fc3345d5b05 +geom 1: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.2 motion [] pieces all=760:c2b60a75c52c78b9 camera=760:c2b60a75c52c78b9 shadow=760:c2b60a75c52c78b9 indirect=760:c2b60a75c52c78b9 +geom 2: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=12:94a297badef437e1 camera=12:94a297badef437e1 shadow=12:94a297badef437e1 indirect=12:94a297badef437e1 +geom 3: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.25 motion [] pieces all=800:4a8c9f44d777e131 camera=800:4a8c9f44d777e131 shadow=800:4a8c9f44d777e131 indirect=800:4a8c9f44d777e131 +geom 4: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.3585339 motion [] pieces all=760:2344ecf63e12c441 camera=760:2344ecf63e12c441 shadow=760:2344ecf63e12c441 indirect=760:2344ecf63e12c441 +provenance material /scene/Looks/initialShadingGroup: MaterialOrigin { slots: [0, 1, 2, 3, 4], displaced: false } +provenance light /scene/Sky: LightOrigin { index: 0, geoms: 0..0 } +provenance geometry 0..1: /scene/pCube1 +provenance geometry 1..2: /scene/pSphere1 +provenance geometry 2..3: /scene/pCube2 +provenance geometry 3..4: /scene/pTorus1 +provenance geometry 4..5: /scene/pSphere2 +provenance mesh: MeshOrigin { geom_id: 0, slot: 0, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 1, slot: 1, baked: false, moving: false } +provenance mesh: MeshOrigin { geom_id: 2, slot: 2, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 3, slot: 3, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 4, slot: 1, baked: false, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 12343188411137242430, n_points: 8, n_indices: 20, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 1: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 17119738035130870988, n_points: 382, n_indices: 1560, n_uvs: None, smooth: false, material: 0 }), placements: 2, shared: false, displaced: false } +provenance mesh slot 2: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 1739488954094729910, n_points: 8, n_indices: 24, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 3: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 6096447469814747168, n_points: 400, n_indices: 1600, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/scene/camera1"), cameras: ["/scene/camera1"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/scene/camera1"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-145.image b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-145.image new file mode 100644 index 000000000..ba4884437 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-145.image @@ -0,0 +1 @@ +640x360 16spp clamp-off 52a1a46f3a46d230 diff --git a/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-146.digest b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-146.digest new file mode 100644 index 000000000..0e859a952 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-146.digest @@ -0,0 +1,40 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/scene/camera1") +camera: Camera { origin: Vec3A(0.0074343784, 1.9913422, 4.0133057), lower_left_corner: Vec3A(-8.881443, -3.0086517, -0.98669434), horizontal: Vec3A(17.777756, 0.0, 0.0), vertical: Vec3A(0.0, 9.999988, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: Some(Vec4(0.0, 0.0, -1.0, 3.9133058)), far: Some(Vec4(0.0, 0.0, 1.0, 9995.986)), planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: None +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 640, height: 360, region: PixelRect { x0: 0, y0: 0, x1: 640, y1: 360 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 12.700017, aperture: [25.4, 25.4], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 5.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/cornellbox.usda"], invisible_overrides: Some(0) } +layer: $DIR/cornellbox.usda +warning: Warning { code: AssetUnsupportedByHost, kind: Skipped, count: 1, prims: [], message: "No asset loader: environment map $DIR/sky_gradient.exr ignored — the dome falls back to its uniform colour. Use Scene::from_usd_with_assets to supply one." } +warning: Warning { code: MaterialFallbackDefault, kind: Skipped, count: 1, prims: ["/scene/Looks/initialShadingGroup"], message: "Material /scene/Looks/initialShadingGroup has no surface shader — using default grey OpenPBR" } +lights: 1 +light 0: dome name Some("/scene/Sky") lpe None pmf 1.0 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 5 geometries, PrimitiveBreakdown { triangles: 822, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 2 } top level, PrimitiveBreakdown { triangles: 1582, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 2 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 4.0 motion [] pieces all=10:88b22fc3345d5b05 camera=10:88b22fc3345d5b05 shadow=10:88b22fc3345d5b05 indirect=10:88b22fc3345d5b05 +geom 1: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.2 motion [] pieces all=760:c2b60a75c52c78b9 camera=760:c2b60a75c52c78b9 shadow=760:c2b60a75c52c78b9 indirect=760:c2b60a75c52c78b9 +geom 2: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=12:94a297badef437e1 camera=12:94a297badef437e1 shadow=12:94a297badef437e1 indirect=12:94a297badef437e1 +geom 3: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.25 motion [] pieces all=800:4a8c9f44d777e131 camera=800:4a8c9f44d777e131 shadow=800:4a8c9f44d777e131 indirect=800:4a8c9f44d777e131 +geom 4: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.3585339 motion [] pieces all=760:2344ecf63e12c441 camera=760:2344ecf63e12c441 shadow=760:2344ecf63e12c441 indirect=760:2344ecf63e12c441 +provenance material /scene/Looks/initialShadingGroup: MaterialOrigin { slots: [0, 1, 2, 3, 4], displaced: false } +provenance light /scene/Sky: LightOrigin { index: 0, geoms: 0..0 } +provenance geometry 0..1: /scene/pCube1 +provenance geometry 1..2: /scene/pSphere1 +provenance geometry 2..3: /scene/pCube2 +provenance geometry 3..4: /scene/pTorus1 +provenance geometry 4..5: /scene/pSphere2 +provenance mesh: MeshOrigin { geom_id: 0, slot: 0, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 1, slot: 1, baked: false, moving: false } +provenance mesh: MeshOrigin { geom_id: 2, slot: 2, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 3, slot: 3, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 4, slot: 1, baked: false, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 12343188411137242430, n_points: 8, n_indices: 20, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 1: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 17119738035130870988, n_points: 382, n_indices: 1560, n_uvs: None, smooth: false, material: 0 }), placements: 2, shared: false, displaced: false } +provenance mesh slot 2: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 1739488954094729910, n_points: 8, n_indices: 24, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 3: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 6096447469814747168, n_points: 400, n_indices: 1600, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/scene/camera1"), cameras: ["/scene/camera1"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/scene/camera1"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-146.image b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-146.image new file mode 100644 index 000000000..ba4884437 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-146.image @@ -0,0 +1 @@ +640x360 16spp clamp-off 52a1a46f3a46d230 diff --git a/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-147.digest b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-147.digest new file mode 100644 index 000000000..0e859a952 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-147.digest @@ -0,0 +1,40 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/scene/camera1") +camera: Camera { origin: Vec3A(0.0074343784, 1.9913422, 4.0133057), lower_left_corner: Vec3A(-8.881443, -3.0086517, -0.98669434), horizontal: Vec3A(17.777756, 0.0, 0.0), vertical: Vec3A(0.0, 9.999988, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: Some(Vec4(0.0, 0.0, -1.0, 3.9133058)), far: Some(Vec4(0.0, 0.0, 1.0, 9995.986)), planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: None +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 640, height: 360, region: PixelRect { x0: 0, y0: 0, x1: 640, y1: 360 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 12.700017, aperture: [25.4, 25.4], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 5.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/cornellbox.usda"], invisible_overrides: Some(0) } +layer: $DIR/cornellbox.usda +warning: Warning { code: AssetUnsupportedByHost, kind: Skipped, count: 1, prims: [], message: "No asset loader: environment map $DIR/sky_gradient.exr ignored — the dome falls back to its uniform colour. Use Scene::from_usd_with_assets to supply one." } +warning: Warning { code: MaterialFallbackDefault, kind: Skipped, count: 1, prims: ["/scene/Looks/initialShadingGroup"], message: "Material /scene/Looks/initialShadingGroup has no surface shader — using default grey OpenPBR" } +lights: 1 +light 0: dome name Some("/scene/Sky") lpe None pmf 1.0 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 5 geometries, PrimitiveBreakdown { triangles: 822, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 2 } top level, PrimitiveBreakdown { triangles: 1582, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 2 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 4.0 motion [] pieces all=10:88b22fc3345d5b05 camera=10:88b22fc3345d5b05 shadow=10:88b22fc3345d5b05 indirect=10:88b22fc3345d5b05 +geom 1: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.2 motion [] pieces all=760:c2b60a75c52c78b9 camera=760:c2b60a75c52c78b9 shadow=760:c2b60a75c52c78b9 indirect=760:c2b60a75c52c78b9 +geom 2: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=12:94a297badef437e1 camera=12:94a297badef437e1 shadow=12:94a297badef437e1 indirect=12:94a297badef437e1 +geom 3: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.25 motion [] pieces all=800:4a8c9f44d777e131 camera=800:4a8c9f44d777e131 shadow=800:4a8c9f44d777e131 indirect=800:4a8c9f44d777e131 +geom 4: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.3585339 motion [] pieces all=760:2344ecf63e12c441 camera=760:2344ecf63e12c441 shadow=760:2344ecf63e12c441 indirect=760:2344ecf63e12c441 +provenance material /scene/Looks/initialShadingGroup: MaterialOrigin { slots: [0, 1, 2, 3, 4], displaced: false } +provenance light /scene/Sky: LightOrigin { index: 0, geoms: 0..0 } +provenance geometry 0..1: /scene/pCube1 +provenance geometry 1..2: /scene/pSphere1 +provenance geometry 2..3: /scene/pCube2 +provenance geometry 3..4: /scene/pTorus1 +provenance geometry 4..5: /scene/pSphere2 +provenance mesh: MeshOrigin { geom_id: 0, slot: 0, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 1, slot: 1, baked: false, moving: false } +provenance mesh: MeshOrigin { geom_id: 2, slot: 2, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 3, slot: 3, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 4, slot: 1, baked: false, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 12343188411137242430, n_points: 8, n_indices: 20, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 1: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 17119738035130870988, n_points: 382, n_indices: 1560, n_uvs: None, smooth: false, material: 0 }), placements: 2, shared: false, displaced: false } +provenance mesh slot 2: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 1739488954094729910, n_points: 8, n_indices: 24, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 3: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 6096447469814747168, n_points: 400, n_indices: 1600, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/scene/camera1"), cameras: ["/scene/camera1"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/scene/camera1"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-147.image b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-147.image new file mode 100644 index 000000000..ba4884437 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-147.image @@ -0,0 +1 @@ +640x360 16spp clamp-off 52a1a46f3a46d230 diff --git a/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-148.digest b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-148.digest new file mode 100644 index 000000000..0e859a952 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-148.digest @@ -0,0 +1,40 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/scene/camera1") +camera: Camera { origin: Vec3A(0.0074343784, 1.9913422, 4.0133057), lower_left_corner: Vec3A(-8.881443, -3.0086517, -0.98669434), horizontal: Vec3A(17.777756, 0.0, 0.0), vertical: Vec3A(0.0, 9.999988, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: Some(Vec4(0.0, 0.0, -1.0, 3.9133058)), far: Some(Vec4(0.0, 0.0, 1.0, 9995.986)), planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: None +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 640, height: 360, region: PixelRect { x0: 0, y0: 0, x1: 640, y1: 360 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 12.700017, aperture: [25.4, 25.4], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 5.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/cornellbox.usda"], invisible_overrides: Some(0) } +layer: $DIR/cornellbox.usda +warning: Warning { code: AssetUnsupportedByHost, kind: Skipped, count: 1, prims: [], message: "No asset loader: environment map $DIR/sky_gradient.exr ignored — the dome falls back to its uniform colour. Use Scene::from_usd_with_assets to supply one." } +warning: Warning { code: MaterialFallbackDefault, kind: Skipped, count: 1, prims: ["/scene/Looks/initialShadingGroup"], message: "Material /scene/Looks/initialShadingGroup has no surface shader — using default grey OpenPBR" } +lights: 1 +light 0: dome name Some("/scene/Sky") lpe None pmf 1.0 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 5 geometries, PrimitiveBreakdown { triangles: 822, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 2 } top level, PrimitiveBreakdown { triangles: 1582, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 2 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 4.0 motion [] pieces all=10:88b22fc3345d5b05 camera=10:88b22fc3345d5b05 shadow=10:88b22fc3345d5b05 indirect=10:88b22fc3345d5b05 +geom 1: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.2 motion [] pieces all=760:c2b60a75c52c78b9 camera=760:c2b60a75c52c78b9 shadow=760:c2b60a75c52c78b9 indirect=760:c2b60a75c52c78b9 +geom 2: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=12:94a297badef437e1 camera=12:94a297badef437e1 shadow=12:94a297badef437e1 indirect=12:94a297badef437e1 +geom 3: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.25 motion [] pieces all=800:4a8c9f44d777e131 camera=800:4a8c9f44d777e131 shadow=800:4a8c9f44d777e131 indirect=800:4a8c9f44d777e131 +geom 4: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.3585339 motion [] pieces all=760:2344ecf63e12c441 camera=760:2344ecf63e12c441 shadow=760:2344ecf63e12c441 indirect=760:2344ecf63e12c441 +provenance material /scene/Looks/initialShadingGroup: MaterialOrigin { slots: [0, 1, 2, 3, 4], displaced: false } +provenance light /scene/Sky: LightOrigin { index: 0, geoms: 0..0 } +provenance geometry 0..1: /scene/pCube1 +provenance geometry 1..2: /scene/pSphere1 +provenance geometry 2..3: /scene/pCube2 +provenance geometry 3..4: /scene/pTorus1 +provenance geometry 4..5: /scene/pSphere2 +provenance mesh: MeshOrigin { geom_id: 0, slot: 0, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 1, slot: 1, baked: false, moving: false } +provenance mesh: MeshOrigin { geom_id: 2, slot: 2, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 3, slot: 3, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 4, slot: 1, baked: false, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 12343188411137242430, n_points: 8, n_indices: 20, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 1: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 17119738035130870988, n_points: 382, n_indices: 1560, n_uvs: None, smooth: false, material: 0 }), placements: 2, shared: false, displaced: false } +provenance mesh slot 2: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 1739488954094729910, n_points: 8, n_indices: 24, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 3: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 6096447469814747168, n_points: 400, n_indices: 1600, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/scene/camera1"), cameras: ["/scene/camera1"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/scene/camera1"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-148.image b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-148.image new file mode 100644 index 000000000..ba4884437 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-148.image @@ -0,0 +1 @@ +640x360 16spp clamp-off 52a1a46f3a46d230 diff --git a/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-149.digest b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-149.digest new file mode 100644 index 000000000..0e859a952 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-149.digest @@ -0,0 +1,40 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/scene/camera1") +camera: Camera { origin: Vec3A(0.0074343784, 1.9913422, 4.0133057), lower_left_corner: Vec3A(-8.881443, -3.0086517, -0.98669434), horizontal: Vec3A(17.777756, 0.0, 0.0), vertical: Vec3A(0.0, 9.999988, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: Some(Vec4(0.0, 0.0, -1.0, 3.9133058)), far: Some(Vec4(0.0, 0.0, 1.0, 9995.986)), planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: None +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 640, height: 360, region: PixelRect { x0: 0, y0: 0, x1: 640, y1: 360 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 12.700017, aperture: [25.4, 25.4], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 5.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/cornellbox.usda"], invisible_overrides: Some(0) } +layer: $DIR/cornellbox.usda +warning: Warning { code: AssetUnsupportedByHost, kind: Skipped, count: 1, prims: [], message: "No asset loader: environment map $DIR/sky_gradient.exr ignored — the dome falls back to its uniform colour. Use Scene::from_usd_with_assets to supply one." } +warning: Warning { code: MaterialFallbackDefault, kind: Skipped, count: 1, prims: ["/scene/Looks/initialShadingGroup"], message: "Material /scene/Looks/initialShadingGroup has no surface shader — using default grey OpenPBR" } +lights: 1 +light 0: dome name Some("/scene/Sky") lpe None pmf 1.0 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 5 geometries, PrimitiveBreakdown { triangles: 822, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 2 } top level, PrimitiveBreakdown { triangles: 1582, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 2 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 4.0 motion [] pieces all=10:88b22fc3345d5b05 camera=10:88b22fc3345d5b05 shadow=10:88b22fc3345d5b05 indirect=10:88b22fc3345d5b05 +geom 1: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.2 motion [] pieces all=760:c2b60a75c52c78b9 camera=760:c2b60a75c52c78b9 shadow=760:c2b60a75c52c78b9 indirect=760:c2b60a75c52c78b9 +geom 2: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=12:94a297badef437e1 camera=12:94a297badef437e1 shadow=12:94a297badef437e1 indirect=12:94a297badef437e1 +geom 3: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.25 motion [] pieces all=800:4a8c9f44d777e131 camera=800:4a8c9f44d777e131 shadow=800:4a8c9f44d777e131 indirect=800:4a8c9f44d777e131 +geom 4: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.3585339 motion [] pieces all=760:2344ecf63e12c441 camera=760:2344ecf63e12c441 shadow=760:2344ecf63e12c441 indirect=760:2344ecf63e12c441 +provenance material /scene/Looks/initialShadingGroup: MaterialOrigin { slots: [0, 1, 2, 3, 4], displaced: false } +provenance light /scene/Sky: LightOrigin { index: 0, geoms: 0..0 } +provenance geometry 0..1: /scene/pCube1 +provenance geometry 1..2: /scene/pSphere1 +provenance geometry 2..3: /scene/pCube2 +provenance geometry 3..4: /scene/pTorus1 +provenance geometry 4..5: /scene/pSphere2 +provenance mesh: MeshOrigin { geom_id: 0, slot: 0, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 1, slot: 1, baked: false, moving: false } +provenance mesh: MeshOrigin { geom_id: 2, slot: 2, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 3, slot: 3, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 4, slot: 1, baked: false, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 12343188411137242430, n_points: 8, n_indices: 20, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 1: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 17119738035130870988, n_points: 382, n_indices: 1560, n_uvs: None, smooth: false, material: 0 }), placements: 2, shared: false, displaced: false } +provenance mesh slot 2: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 1739488954094729910, n_points: 8, n_indices: 24, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 3: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 6096447469814747168, n_points: 400, n_indices: 1600, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/scene/camera1"), cameras: ["/scene/camera1"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/scene/camera1"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-149.image b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-149.image new file mode 100644 index 000000000..ba4884437 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-149.image @@ -0,0 +1 @@ +640x360 16spp clamp-off 52a1a46f3a46d230 diff --git a/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-15.digest b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-15.digest new file mode 100644 index 000000000..0e859a952 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-15.digest @@ -0,0 +1,40 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/scene/camera1") +camera: Camera { origin: Vec3A(0.0074343784, 1.9913422, 4.0133057), lower_left_corner: Vec3A(-8.881443, -3.0086517, -0.98669434), horizontal: Vec3A(17.777756, 0.0, 0.0), vertical: Vec3A(0.0, 9.999988, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: Some(Vec4(0.0, 0.0, -1.0, 3.9133058)), far: Some(Vec4(0.0, 0.0, 1.0, 9995.986)), planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: None +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 640, height: 360, region: PixelRect { x0: 0, y0: 0, x1: 640, y1: 360 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 12.700017, aperture: [25.4, 25.4], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 5.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/cornellbox.usda"], invisible_overrides: Some(0) } +layer: $DIR/cornellbox.usda +warning: Warning { code: AssetUnsupportedByHost, kind: Skipped, count: 1, prims: [], message: "No asset loader: environment map $DIR/sky_gradient.exr ignored — the dome falls back to its uniform colour. Use Scene::from_usd_with_assets to supply one." } +warning: Warning { code: MaterialFallbackDefault, kind: Skipped, count: 1, prims: ["/scene/Looks/initialShadingGroup"], message: "Material /scene/Looks/initialShadingGroup has no surface shader — using default grey OpenPBR" } +lights: 1 +light 0: dome name Some("/scene/Sky") lpe None pmf 1.0 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 5 geometries, PrimitiveBreakdown { triangles: 822, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 2 } top level, PrimitiveBreakdown { triangles: 1582, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 2 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 4.0 motion [] pieces all=10:88b22fc3345d5b05 camera=10:88b22fc3345d5b05 shadow=10:88b22fc3345d5b05 indirect=10:88b22fc3345d5b05 +geom 1: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.2 motion [] pieces all=760:c2b60a75c52c78b9 camera=760:c2b60a75c52c78b9 shadow=760:c2b60a75c52c78b9 indirect=760:c2b60a75c52c78b9 +geom 2: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=12:94a297badef437e1 camera=12:94a297badef437e1 shadow=12:94a297badef437e1 indirect=12:94a297badef437e1 +geom 3: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.25 motion [] pieces all=800:4a8c9f44d777e131 camera=800:4a8c9f44d777e131 shadow=800:4a8c9f44d777e131 indirect=800:4a8c9f44d777e131 +geom 4: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.3585339 motion [] pieces all=760:2344ecf63e12c441 camera=760:2344ecf63e12c441 shadow=760:2344ecf63e12c441 indirect=760:2344ecf63e12c441 +provenance material /scene/Looks/initialShadingGroup: MaterialOrigin { slots: [0, 1, 2, 3, 4], displaced: false } +provenance light /scene/Sky: LightOrigin { index: 0, geoms: 0..0 } +provenance geometry 0..1: /scene/pCube1 +provenance geometry 1..2: /scene/pSphere1 +provenance geometry 2..3: /scene/pCube2 +provenance geometry 3..4: /scene/pTorus1 +provenance geometry 4..5: /scene/pSphere2 +provenance mesh: MeshOrigin { geom_id: 0, slot: 0, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 1, slot: 1, baked: false, moving: false } +provenance mesh: MeshOrigin { geom_id: 2, slot: 2, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 3, slot: 3, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 4, slot: 1, baked: false, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 12343188411137242430, n_points: 8, n_indices: 20, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 1: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 17119738035130870988, n_points: 382, n_indices: 1560, n_uvs: None, smooth: false, material: 0 }), placements: 2, shared: false, displaced: false } +provenance mesh slot 2: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 1739488954094729910, n_points: 8, n_indices: 24, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 3: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 6096447469814747168, n_points: 400, n_indices: 1600, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/scene/camera1"), cameras: ["/scene/camera1"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/scene/camera1"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-15.image b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-15.image new file mode 100644 index 000000000..ba4884437 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-15.image @@ -0,0 +1 @@ +640x360 16spp clamp-off 52a1a46f3a46d230 diff --git a/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-150.digest b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-150.digest new file mode 100644 index 000000000..0e859a952 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-150.digest @@ -0,0 +1,40 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/scene/camera1") +camera: Camera { origin: Vec3A(0.0074343784, 1.9913422, 4.0133057), lower_left_corner: Vec3A(-8.881443, -3.0086517, -0.98669434), horizontal: Vec3A(17.777756, 0.0, 0.0), vertical: Vec3A(0.0, 9.999988, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: Some(Vec4(0.0, 0.0, -1.0, 3.9133058)), far: Some(Vec4(0.0, 0.0, 1.0, 9995.986)), planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: None +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 640, height: 360, region: PixelRect { x0: 0, y0: 0, x1: 640, y1: 360 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 12.700017, aperture: [25.4, 25.4], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 5.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/cornellbox.usda"], invisible_overrides: Some(0) } +layer: $DIR/cornellbox.usda +warning: Warning { code: AssetUnsupportedByHost, kind: Skipped, count: 1, prims: [], message: "No asset loader: environment map $DIR/sky_gradient.exr ignored — the dome falls back to its uniform colour. Use Scene::from_usd_with_assets to supply one." } +warning: Warning { code: MaterialFallbackDefault, kind: Skipped, count: 1, prims: ["/scene/Looks/initialShadingGroup"], message: "Material /scene/Looks/initialShadingGroup has no surface shader — using default grey OpenPBR" } +lights: 1 +light 0: dome name Some("/scene/Sky") lpe None pmf 1.0 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 5 geometries, PrimitiveBreakdown { triangles: 822, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 2 } top level, PrimitiveBreakdown { triangles: 1582, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 2 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 4.0 motion [] pieces all=10:88b22fc3345d5b05 camera=10:88b22fc3345d5b05 shadow=10:88b22fc3345d5b05 indirect=10:88b22fc3345d5b05 +geom 1: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.2 motion [] pieces all=760:c2b60a75c52c78b9 camera=760:c2b60a75c52c78b9 shadow=760:c2b60a75c52c78b9 indirect=760:c2b60a75c52c78b9 +geom 2: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=12:94a297badef437e1 camera=12:94a297badef437e1 shadow=12:94a297badef437e1 indirect=12:94a297badef437e1 +geom 3: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.25 motion [] pieces all=800:4a8c9f44d777e131 camera=800:4a8c9f44d777e131 shadow=800:4a8c9f44d777e131 indirect=800:4a8c9f44d777e131 +geom 4: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.3585339 motion [] pieces all=760:2344ecf63e12c441 camera=760:2344ecf63e12c441 shadow=760:2344ecf63e12c441 indirect=760:2344ecf63e12c441 +provenance material /scene/Looks/initialShadingGroup: MaterialOrigin { slots: [0, 1, 2, 3, 4], displaced: false } +provenance light /scene/Sky: LightOrigin { index: 0, geoms: 0..0 } +provenance geometry 0..1: /scene/pCube1 +provenance geometry 1..2: /scene/pSphere1 +provenance geometry 2..3: /scene/pCube2 +provenance geometry 3..4: /scene/pTorus1 +provenance geometry 4..5: /scene/pSphere2 +provenance mesh: MeshOrigin { geom_id: 0, slot: 0, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 1, slot: 1, baked: false, moving: false } +provenance mesh: MeshOrigin { geom_id: 2, slot: 2, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 3, slot: 3, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 4, slot: 1, baked: false, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 12343188411137242430, n_points: 8, n_indices: 20, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 1: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 17119738035130870988, n_points: 382, n_indices: 1560, n_uvs: None, smooth: false, material: 0 }), placements: 2, shared: false, displaced: false } +provenance mesh slot 2: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 1739488954094729910, n_points: 8, n_indices: 24, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 3: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 6096447469814747168, n_points: 400, n_indices: 1600, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/scene/camera1"), cameras: ["/scene/camera1"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/scene/camera1"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-150.image b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-150.image new file mode 100644 index 000000000..ba4884437 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-150.image @@ -0,0 +1 @@ +640x360 16spp clamp-off 52a1a46f3a46d230 diff --git a/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-151.digest b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-151.digest new file mode 100644 index 000000000..0e859a952 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-151.digest @@ -0,0 +1,40 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/scene/camera1") +camera: Camera { origin: Vec3A(0.0074343784, 1.9913422, 4.0133057), lower_left_corner: Vec3A(-8.881443, -3.0086517, -0.98669434), horizontal: Vec3A(17.777756, 0.0, 0.0), vertical: Vec3A(0.0, 9.999988, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: Some(Vec4(0.0, 0.0, -1.0, 3.9133058)), far: Some(Vec4(0.0, 0.0, 1.0, 9995.986)), planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: None +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 640, height: 360, region: PixelRect { x0: 0, y0: 0, x1: 640, y1: 360 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 12.700017, aperture: [25.4, 25.4], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 5.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/cornellbox.usda"], invisible_overrides: Some(0) } +layer: $DIR/cornellbox.usda +warning: Warning { code: AssetUnsupportedByHost, kind: Skipped, count: 1, prims: [], message: "No asset loader: environment map $DIR/sky_gradient.exr ignored — the dome falls back to its uniform colour. Use Scene::from_usd_with_assets to supply one." } +warning: Warning { code: MaterialFallbackDefault, kind: Skipped, count: 1, prims: ["/scene/Looks/initialShadingGroup"], message: "Material /scene/Looks/initialShadingGroup has no surface shader — using default grey OpenPBR" } +lights: 1 +light 0: dome name Some("/scene/Sky") lpe None pmf 1.0 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 5 geometries, PrimitiveBreakdown { triangles: 822, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 2 } top level, PrimitiveBreakdown { triangles: 1582, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 2 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 4.0 motion [] pieces all=10:88b22fc3345d5b05 camera=10:88b22fc3345d5b05 shadow=10:88b22fc3345d5b05 indirect=10:88b22fc3345d5b05 +geom 1: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.2 motion [] pieces all=760:c2b60a75c52c78b9 camera=760:c2b60a75c52c78b9 shadow=760:c2b60a75c52c78b9 indirect=760:c2b60a75c52c78b9 +geom 2: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=12:94a297badef437e1 camera=12:94a297badef437e1 shadow=12:94a297badef437e1 indirect=12:94a297badef437e1 +geom 3: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.25 motion [] pieces all=800:4a8c9f44d777e131 camera=800:4a8c9f44d777e131 shadow=800:4a8c9f44d777e131 indirect=800:4a8c9f44d777e131 +geom 4: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.3585339 motion [] pieces all=760:2344ecf63e12c441 camera=760:2344ecf63e12c441 shadow=760:2344ecf63e12c441 indirect=760:2344ecf63e12c441 +provenance material /scene/Looks/initialShadingGroup: MaterialOrigin { slots: [0, 1, 2, 3, 4], displaced: false } +provenance light /scene/Sky: LightOrigin { index: 0, geoms: 0..0 } +provenance geometry 0..1: /scene/pCube1 +provenance geometry 1..2: /scene/pSphere1 +provenance geometry 2..3: /scene/pCube2 +provenance geometry 3..4: /scene/pTorus1 +provenance geometry 4..5: /scene/pSphere2 +provenance mesh: MeshOrigin { geom_id: 0, slot: 0, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 1, slot: 1, baked: false, moving: false } +provenance mesh: MeshOrigin { geom_id: 2, slot: 2, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 3, slot: 3, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 4, slot: 1, baked: false, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 12343188411137242430, n_points: 8, n_indices: 20, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 1: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 17119738035130870988, n_points: 382, n_indices: 1560, n_uvs: None, smooth: false, material: 0 }), placements: 2, shared: false, displaced: false } +provenance mesh slot 2: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 1739488954094729910, n_points: 8, n_indices: 24, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 3: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 6096447469814747168, n_points: 400, n_indices: 1600, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/scene/camera1"), cameras: ["/scene/camera1"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/scene/camera1"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-151.image b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-151.image new file mode 100644 index 000000000..ba4884437 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-151.image @@ -0,0 +1 @@ +640x360 16spp clamp-off 52a1a46f3a46d230 diff --git a/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-152.digest b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-152.digest new file mode 100644 index 000000000..0e859a952 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-152.digest @@ -0,0 +1,40 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/scene/camera1") +camera: Camera { origin: Vec3A(0.0074343784, 1.9913422, 4.0133057), lower_left_corner: Vec3A(-8.881443, -3.0086517, -0.98669434), horizontal: Vec3A(17.777756, 0.0, 0.0), vertical: Vec3A(0.0, 9.999988, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: Some(Vec4(0.0, 0.0, -1.0, 3.9133058)), far: Some(Vec4(0.0, 0.0, 1.0, 9995.986)), planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: None +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 640, height: 360, region: PixelRect { x0: 0, y0: 0, x1: 640, y1: 360 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 12.700017, aperture: [25.4, 25.4], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 5.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/cornellbox.usda"], invisible_overrides: Some(0) } +layer: $DIR/cornellbox.usda +warning: Warning { code: AssetUnsupportedByHost, kind: Skipped, count: 1, prims: [], message: "No asset loader: environment map $DIR/sky_gradient.exr ignored — the dome falls back to its uniform colour. Use Scene::from_usd_with_assets to supply one." } +warning: Warning { code: MaterialFallbackDefault, kind: Skipped, count: 1, prims: ["/scene/Looks/initialShadingGroup"], message: "Material /scene/Looks/initialShadingGroup has no surface shader — using default grey OpenPBR" } +lights: 1 +light 0: dome name Some("/scene/Sky") lpe None pmf 1.0 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 5 geometries, PrimitiveBreakdown { triangles: 822, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 2 } top level, PrimitiveBreakdown { triangles: 1582, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 2 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 4.0 motion [] pieces all=10:88b22fc3345d5b05 camera=10:88b22fc3345d5b05 shadow=10:88b22fc3345d5b05 indirect=10:88b22fc3345d5b05 +geom 1: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.2 motion [] pieces all=760:c2b60a75c52c78b9 camera=760:c2b60a75c52c78b9 shadow=760:c2b60a75c52c78b9 indirect=760:c2b60a75c52c78b9 +geom 2: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=12:94a297badef437e1 camera=12:94a297badef437e1 shadow=12:94a297badef437e1 indirect=12:94a297badef437e1 +geom 3: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.25 motion [] pieces all=800:4a8c9f44d777e131 camera=800:4a8c9f44d777e131 shadow=800:4a8c9f44d777e131 indirect=800:4a8c9f44d777e131 +geom 4: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.3585339 motion [] pieces all=760:2344ecf63e12c441 camera=760:2344ecf63e12c441 shadow=760:2344ecf63e12c441 indirect=760:2344ecf63e12c441 +provenance material /scene/Looks/initialShadingGroup: MaterialOrigin { slots: [0, 1, 2, 3, 4], displaced: false } +provenance light /scene/Sky: LightOrigin { index: 0, geoms: 0..0 } +provenance geometry 0..1: /scene/pCube1 +provenance geometry 1..2: /scene/pSphere1 +provenance geometry 2..3: /scene/pCube2 +provenance geometry 3..4: /scene/pTorus1 +provenance geometry 4..5: /scene/pSphere2 +provenance mesh: MeshOrigin { geom_id: 0, slot: 0, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 1, slot: 1, baked: false, moving: false } +provenance mesh: MeshOrigin { geom_id: 2, slot: 2, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 3, slot: 3, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 4, slot: 1, baked: false, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 12343188411137242430, n_points: 8, n_indices: 20, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 1: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 17119738035130870988, n_points: 382, n_indices: 1560, n_uvs: None, smooth: false, material: 0 }), placements: 2, shared: false, displaced: false } +provenance mesh slot 2: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 1739488954094729910, n_points: 8, n_indices: 24, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 3: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 6096447469814747168, n_points: 400, n_indices: 1600, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/scene/camera1"), cameras: ["/scene/camera1"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/scene/camera1"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-152.image b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-152.image new file mode 100644 index 000000000..ba4884437 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-152.image @@ -0,0 +1 @@ +640x360 16spp clamp-off 52a1a46f3a46d230 diff --git a/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-153.digest b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-153.digest new file mode 100644 index 000000000..0e859a952 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-153.digest @@ -0,0 +1,40 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/scene/camera1") +camera: Camera { origin: Vec3A(0.0074343784, 1.9913422, 4.0133057), lower_left_corner: Vec3A(-8.881443, -3.0086517, -0.98669434), horizontal: Vec3A(17.777756, 0.0, 0.0), vertical: Vec3A(0.0, 9.999988, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: Some(Vec4(0.0, 0.0, -1.0, 3.9133058)), far: Some(Vec4(0.0, 0.0, 1.0, 9995.986)), planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: None +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 640, height: 360, region: PixelRect { x0: 0, y0: 0, x1: 640, y1: 360 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 12.700017, aperture: [25.4, 25.4], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 5.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/cornellbox.usda"], invisible_overrides: Some(0) } +layer: $DIR/cornellbox.usda +warning: Warning { code: AssetUnsupportedByHost, kind: Skipped, count: 1, prims: [], message: "No asset loader: environment map $DIR/sky_gradient.exr ignored — the dome falls back to its uniform colour. Use Scene::from_usd_with_assets to supply one." } +warning: Warning { code: MaterialFallbackDefault, kind: Skipped, count: 1, prims: ["/scene/Looks/initialShadingGroup"], message: "Material /scene/Looks/initialShadingGroup has no surface shader — using default grey OpenPBR" } +lights: 1 +light 0: dome name Some("/scene/Sky") lpe None pmf 1.0 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 5 geometries, PrimitiveBreakdown { triangles: 822, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 2 } top level, PrimitiveBreakdown { triangles: 1582, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 2 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 4.0 motion [] pieces all=10:88b22fc3345d5b05 camera=10:88b22fc3345d5b05 shadow=10:88b22fc3345d5b05 indirect=10:88b22fc3345d5b05 +geom 1: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.2 motion [] pieces all=760:c2b60a75c52c78b9 camera=760:c2b60a75c52c78b9 shadow=760:c2b60a75c52c78b9 indirect=760:c2b60a75c52c78b9 +geom 2: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=12:94a297badef437e1 camera=12:94a297badef437e1 shadow=12:94a297badef437e1 indirect=12:94a297badef437e1 +geom 3: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.25 motion [] pieces all=800:4a8c9f44d777e131 camera=800:4a8c9f44d777e131 shadow=800:4a8c9f44d777e131 indirect=800:4a8c9f44d777e131 +geom 4: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.3585339 motion [] pieces all=760:2344ecf63e12c441 camera=760:2344ecf63e12c441 shadow=760:2344ecf63e12c441 indirect=760:2344ecf63e12c441 +provenance material /scene/Looks/initialShadingGroup: MaterialOrigin { slots: [0, 1, 2, 3, 4], displaced: false } +provenance light /scene/Sky: LightOrigin { index: 0, geoms: 0..0 } +provenance geometry 0..1: /scene/pCube1 +provenance geometry 1..2: /scene/pSphere1 +provenance geometry 2..3: /scene/pCube2 +provenance geometry 3..4: /scene/pTorus1 +provenance geometry 4..5: /scene/pSphere2 +provenance mesh: MeshOrigin { geom_id: 0, slot: 0, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 1, slot: 1, baked: false, moving: false } +provenance mesh: MeshOrigin { geom_id: 2, slot: 2, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 3, slot: 3, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 4, slot: 1, baked: false, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 12343188411137242430, n_points: 8, n_indices: 20, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 1: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 17119738035130870988, n_points: 382, n_indices: 1560, n_uvs: None, smooth: false, material: 0 }), placements: 2, shared: false, displaced: false } +provenance mesh slot 2: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 1739488954094729910, n_points: 8, n_indices: 24, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 3: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 6096447469814747168, n_points: 400, n_indices: 1600, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/scene/camera1"), cameras: ["/scene/camera1"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/scene/camera1"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-153.image b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-153.image new file mode 100644 index 000000000..ba4884437 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-153.image @@ -0,0 +1 @@ +640x360 16spp clamp-off 52a1a46f3a46d230 diff --git a/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-154.digest b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-154.digest new file mode 100644 index 000000000..0e859a952 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-154.digest @@ -0,0 +1,40 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/scene/camera1") +camera: Camera { origin: Vec3A(0.0074343784, 1.9913422, 4.0133057), lower_left_corner: Vec3A(-8.881443, -3.0086517, -0.98669434), horizontal: Vec3A(17.777756, 0.0, 0.0), vertical: Vec3A(0.0, 9.999988, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: Some(Vec4(0.0, 0.0, -1.0, 3.9133058)), far: Some(Vec4(0.0, 0.0, 1.0, 9995.986)), planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: None +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 640, height: 360, region: PixelRect { x0: 0, y0: 0, x1: 640, y1: 360 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 12.700017, aperture: [25.4, 25.4], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 5.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/cornellbox.usda"], invisible_overrides: Some(0) } +layer: $DIR/cornellbox.usda +warning: Warning { code: AssetUnsupportedByHost, kind: Skipped, count: 1, prims: [], message: "No asset loader: environment map $DIR/sky_gradient.exr ignored — the dome falls back to its uniform colour. Use Scene::from_usd_with_assets to supply one." } +warning: Warning { code: MaterialFallbackDefault, kind: Skipped, count: 1, prims: ["/scene/Looks/initialShadingGroup"], message: "Material /scene/Looks/initialShadingGroup has no surface shader — using default grey OpenPBR" } +lights: 1 +light 0: dome name Some("/scene/Sky") lpe None pmf 1.0 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 5 geometries, PrimitiveBreakdown { triangles: 822, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 2 } top level, PrimitiveBreakdown { triangles: 1582, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 2 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 4.0 motion [] pieces all=10:88b22fc3345d5b05 camera=10:88b22fc3345d5b05 shadow=10:88b22fc3345d5b05 indirect=10:88b22fc3345d5b05 +geom 1: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.2 motion [] pieces all=760:c2b60a75c52c78b9 camera=760:c2b60a75c52c78b9 shadow=760:c2b60a75c52c78b9 indirect=760:c2b60a75c52c78b9 +geom 2: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=12:94a297badef437e1 camera=12:94a297badef437e1 shadow=12:94a297badef437e1 indirect=12:94a297badef437e1 +geom 3: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.25 motion [] pieces all=800:4a8c9f44d777e131 camera=800:4a8c9f44d777e131 shadow=800:4a8c9f44d777e131 indirect=800:4a8c9f44d777e131 +geom 4: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.3585339 motion [] pieces all=760:2344ecf63e12c441 camera=760:2344ecf63e12c441 shadow=760:2344ecf63e12c441 indirect=760:2344ecf63e12c441 +provenance material /scene/Looks/initialShadingGroup: MaterialOrigin { slots: [0, 1, 2, 3, 4], displaced: false } +provenance light /scene/Sky: LightOrigin { index: 0, geoms: 0..0 } +provenance geometry 0..1: /scene/pCube1 +provenance geometry 1..2: /scene/pSphere1 +provenance geometry 2..3: /scene/pCube2 +provenance geometry 3..4: /scene/pTorus1 +provenance geometry 4..5: /scene/pSphere2 +provenance mesh: MeshOrigin { geom_id: 0, slot: 0, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 1, slot: 1, baked: false, moving: false } +provenance mesh: MeshOrigin { geom_id: 2, slot: 2, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 3, slot: 3, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 4, slot: 1, baked: false, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 12343188411137242430, n_points: 8, n_indices: 20, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 1: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 17119738035130870988, n_points: 382, n_indices: 1560, n_uvs: None, smooth: false, material: 0 }), placements: 2, shared: false, displaced: false } +provenance mesh slot 2: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 1739488954094729910, n_points: 8, n_indices: 24, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 3: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 6096447469814747168, n_points: 400, n_indices: 1600, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/scene/camera1"), cameras: ["/scene/camera1"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/scene/camera1"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-154.image b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-154.image new file mode 100644 index 000000000..ba4884437 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-154.image @@ -0,0 +1 @@ +640x360 16spp clamp-off 52a1a46f3a46d230 diff --git a/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-155.digest b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-155.digest new file mode 100644 index 000000000..0e859a952 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-155.digest @@ -0,0 +1,40 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/scene/camera1") +camera: Camera { origin: Vec3A(0.0074343784, 1.9913422, 4.0133057), lower_left_corner: Vec3A(-8.881443, -3.0086517, -0.98669434), horizontal: Vec3A(17.777756, 0.0, 0.0), vertical: Vec3A(0.0, 9.999988, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: Some(Vec4(0.0, 0.0, -1.0, 3.9133058)), far: Some(Vec4(0.0, 0.0, 1.0, 9995.986)), planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: None +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 640, height: 360, region: PixelRect { x0: 0, y0: 0, x1: 640, y1: 360 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 12.700017, aperture: [25.4, 25.4], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 5.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/cornellbox.usda"], invisible_overrides: Some(0) } +layer: $DIR/cornellbox.usda +warning: Warning { code: AssetUnsupportedByHost, kind: Skipped, count: 1, prims: [], message: "No asset loader: environment map $DIR/sky_gradient.exr ignored — the dome falls back to its uniform colour. Use Scene::from_usd_with_assets to supply one." } +warning: Warning { code: MaterialFallbackDefault, kind: Skipped, count: 1, prims: ["/scene/Looks/initialShadingGroup"], message: "Material /scene/Looks/initialShadingGroup has no surface shader — using default grey OpenPBR" } +lights: 1 +light 0: dome name Some("/scene/Sky") lpe None pmf 1.0 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 5 geometries, PrimitiveBreakdown { triangles: 822, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 2 } top level, PrimitiveBreakdown { triangles: 1582, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 2 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 4.0 motion [] pieces all=10:88b22fc3345d5b05 camera=10:88b22fc3345d5b05 shadow=10:88b22fc3345d5b05 indirect=10:88b22fc3345d5b05 +geom 1: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.2 motion [] pieces all=760:c2b60a75c52c78b9 camera=760:c2b60a75c52c78b9 shadow=760:c2b60a75c52c78b9 indirect=760:c2b60a75c52c78b9 +geom 2: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=12:94a297badef437e1 camera=12:94a297badef437e1 shadow=12:94a297badef437e1 indirect=12:94a297badef437e1 +geom 3: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.25 motion [] pieces all=800:4a8c9f44d777e131 camera=800:4a8c9f44d777e131 shadow=800:4a8c9f44d777e131 indirect=800:4a8c9f44d777e131 +geom 4: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.3585339 motion [] pieces all=760:2344ecf63e12c441 camera=760:2344ecf63e12c441 shadow=760:2344ecf63e12c441 indirect=760:2344ecf63e12c441 +provenance material /scene/Looks/initialShadingGroup: MaterialOrigin { slots: [0, 1, 2, 3, 4], displaced: false } +provenance light /scene/Sky: LightOrigin { index: 0, geoms: 0..0 } +provenance geometry 0..1: /scene/pCube1 +provenance geometry 1..2: /scene/pSphere1 +provenance geometry 2..3: /scene/pCube2 +provenance geometry 3..4: /scene/pTorus1 +provenance geometry 4..5: /scene/pSphere2 +provenance mesh: MeshOrigin { geom_id: 0, slot: 0, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 1, slot: 1, baked: false, moving: false } +provenance mesh: MeshOrigin { geom_id: 2, slot: 2, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 3, slot: 3, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 4, slot: 1, baked: false, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 12343188411137242430, n_points: 8, n_indices: 20, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 1: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 17119738035130870988, n_points: 382, n_indices: 1560, n_uvs: None, smooth: false, material: 0 }), placements: 2, shared: false, displaced: false } +provenance mesh slot 2: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 1739488954094729910, n_points: 8, n_indices: 24, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 3: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 6096447469814747168, n_points: 400, n_indices: 1600, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/scene/camera1"), cameras: ["/scene/camera1"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/scene/camera1"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-155.image b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-155.image new file mode 100644 index 000000000..ba4884437 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-155.image @@ -0,0 +1 @@ +640x360 16spp clamp-off 52a1a46f3a46d230 diff --git a/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-156.digest b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-156.digest new file mode 100644 index 000000000..0e859a952 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-156.digest @@ -0,0 +1,40 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/scene/camera1") +camera: Camera { origin: Vec3A(0.0074343784, 1.9913422, 4.0133057), lower_left_corner: Vec3A(-8.881443, -3.0086517, -0.98669434), horizontal: Vec3A(17.777756, 0.0, 0.0), vertical: Vec3A(0.0, 9.999988, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: Some(Vec4(0.0, 0.0, -1.0, 3.9133058)), far: Some(Vec4(0.0, 0.0, 1.0, 9995.986)), planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: None +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 640, height: 360, region: PixelRect { x0: 0, y0: 0, x1: 640, y1: 360 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 12.700017, aperture: [25.4, 25.4], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 5.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/cornellbox.usda"], invisible_overrides: Some(0) } +layer: $DIR/cornellbox.usda +warning: Warning { code: AssetUnsupportedByHost, kind: Skipped, count: 1, prims: [], message: "No asset loader: environment map $DIR/sky_gradient.exr ignored — the dome falls back to its uniform colour. Use Scene::from_usd_with_assets to supply one." } +warning: Warning { code: MaterialFallbackDefault, kind: Skipped, count: 1, prims: ["/scene/Looks/initialShadingGroup"], message: "Material /scene/Looks/initialShadingGroup has no surface shader — using default grey OpenPBR" } +lights: 1 +light 0: dome name Some("/scene/Sky") lpe None pmf 1.0 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 5 geometries, PrimitiveBreakdown { triangles: 822, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 2 } top level, PrimitiveBreakdown { triangles: 1582, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 2 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 4.0 motion [] pieces all=10:88b22fc3345d5b05 camera=10:88b22fc3345d5b05 shadow=10:88b22fc3345d5b05 indirect=10:88b22fc3345d5b05 +geom 1: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.2 motion [] pieces all=760:c2b60a75c52c78b9 camera=760:c2b60a75c52c78b9 shadow=760:c2b60a75c52c78b9 indirect=760:c2b60a75c52c78b9 +geom 2: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=12:94a297badef437e1 camera=12:94a297badef437e1 shadow=12:94a297badef437e1 indirect=12:94a297badef437e1 +geom 3: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.25 motion [] pieces all=800:4a8c9f44d777e131 camera=800:4a8c9f44d777e131 shadow=800:4a8c9f44d777e131 indirect=800:4a8c9f44d777e131 +geom 4: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.3585339 motion [] pieces all=760:2344ecf63e12c441 camera=760:2344ecf63e12c441 shadow=760:2344ecf63e12c441 indirect=760:2344ecf63e12c441 +provenance material /scene/Looks/initialShadingGroup: MaterialOrigin { slots: [0, 1, 2, 3, 4], displaced: false } +provenance light /scene/Sky: LightOrigin { index: 0, geoms: 0..0 } +provenance geometry 0..1: /scene/pCube1 +provenance geometry 1..2: /scene/pSphere1 +provenance geometry 2..3: /scene/pCube2 +provenance geometry 3..4: /scene/pTorus1 +provenance geometry 4..5: /scene/pSphere2 +provenance mesh: MeshOrigin { geom_id: 0, slot: 0, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 1, slot: 1, baked: false, moving: false } +provenance mesh: MeshOrigin { geom_id: 2, slot: 2, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 3, slot: 3, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 4, slot: 1, baked: false, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 12343188411137242430, n_points: 8, n_indices: 20, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 1: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 17119738035130870988, n_points: 382, n_indices: 1560, n_uvs: None, smooth: false, material: 0 }), placements: 2, shared: false, displaced: false } +provenance mesh slot 2: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 1739488954094729910, n_points: 8, n_indices: 24, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 3: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 6096447469814747168, n_points: 400, n_indices: 1600, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/scene/camera1"), cameras: ["/scene/camera1"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/scene/camera1"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-156.image b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-156.image new file mode 100644 index 000000000..ba4884437 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-156.image @@ -0,0 +1 @@ +640x360 16spp clamp-off 52a1a46f3a46d230 diff --git a/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-157.digest b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-157.digest new file mode 100644 index 000000000..0e859a952 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-157.digest @@ -0,0 +1,40 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/scene/camera1") +camera: Camera { origin: Vec3A(0.0074343784, 1.9913422, 4.0133057), lower_left_corner: Vec3A(-8.881443, -3.0086517, -0.98669434), horizontal: Vec3A(17.777756, 0.0, 0.0), vertical: Vec3A(0.0, 9.999988, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: Some(Vec4(0.0, 0.0, -1.0, 3.9133058)), far: Some(Vec4(0.0, 0.0, 1.0, 9995.986)), planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: None +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 640, height: 360, region: PixelRect { x0: 0, y0: 0, x1: 640, y1: 360 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 12.700017, aperture: [25.4, 25.4], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 5.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/cornellbox.usda"], invisible_overrides: Some(0) } +layer: $DIR/cornellbox.usda +warning: Warning { code: AssetUnsupportedByHost, kind: Skipped, count: 1, prims: [], message: "No asset loader: environment map $DIR/sky_gradient.exr ignored — the dome falls back to its uniform colour. Use Scene::from_usd_with_assets to supply one." } +warning: Warning { code: MaterialFallbackDefault, kind: Skipped, count: 1, prims: ["/scene/Looks/initialShadingGroup"], message: "Material /scene/Looks/initialShadingGroup has no surface shader — using default grey OpenPBR" } +lights: 1 +light 0: dome name Some("/scene/Sky") lpe None pmf 1.0 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 5 geometries, PrimitiveBreakdown { triangles: 822, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 2 } top level, PrimitiveBreakdown { triangles: 1582, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 2 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 4.0 motion [] pieces all=10:88b22fc3345d5b05 camera=10:88b22fc3345d5b05 shadow=10:88b22fc3345d5b05 indirect=10:88b22fc3345d5b05 +geom 1: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.2 motion [] pieces all=760:c2b60a75c52c78b9 camera=760:c2b60a75c52c78b9 shadow=760:c2b60a75c52c78b9 indirect=760:c2b60a75c52c78b9 +geom 2: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=12:94a297badef437e1 camera=12:94a297badef437e1 shadow=12:94a297badef437e1 indirect=12:94a297badef437e1 +geom 3: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.25 motion [] pieces all=800:4a8c9f44d777e131 camera=800:4a8c9f44d777e131 shadow=800:4a8c9f44d777e131 indirect=800:4a8c9f44d777e131 +geom 4: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.3585339 motion [] pieces all=760:2344ecf63e12c441 camera=760:2344ecf63e12c441 shadow=760:2344ecf63e12c441 indirect=760:2344ecf63e12c441 +provenance material /scene/Looks/initialShadingGroup: MaterialOrigin { slots: [0, 1, 2, 3, 4], displaced: false } +provenance light /scene/Sky: LightOrigin { index: 0, geoms: 0..0 } +provenance geometry 0..1: /scene/pCube1 +provenance geometry 1..2: /scene/pSphere1 +provenance geometry 2..3: /scene/pCube2 +provenance geometry 3..4: /scene/pTorus1 +provenance geometry 4..5: /scene/pSphere2 +provenance mesh: MeshOrigin { geom_id: 0, slot: 0, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 1, slot: 1, baked: false, moving: false } +provenance mesh: MeshOrigin { geom_id: 2, slot: 2, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 3, slot: 3, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 4, slot: 1, baked: false, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 12343188411137242430, n_points: 8, n_indices: 20, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 1: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 17119738035130870988, n_points: 382, n_indices: 1560, n_uvs: None, smooth: false, material: 0 }), placements: 2, shared: false, displaced: false } +provenance mesh slot 2: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 1739488954094729910, n_points: 8, n_indices: 24, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 3: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 6096447469814747168, n_points: 400, n_indices: 1600, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/scene/camera1"), cameras: ["/scene/camera1"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/scene/camera1"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-157.image b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-157.image new file mode 100644 index 000000000..ba4884437 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-157.image @@ -0,0 +1 @@ +640x360 16spp clamp-off 52a1a46f3a46d230 diff --git a/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-158.digest b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-158.digest new file mode 100644 index 000000000..0e859a952 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-158.digest @@ -0,0 +1,40 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/scene/camera1") +camera: Camera { origin: Vec3A(0.0074343784, 1.9913422, 4.0133057), lower_left_corner: Vec3A(-8.881443, -3.0086517, -0.98669434), horizontal: Vec3A(17.777756, 0.0, 0.0), vertical: Vec3A(0.0, 9.999988, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: Some(Vec4(0.0, 0.0, -1.0, 3.9133058)), far: Some(Vec4(0.0, 0.0, 1.0, 9995.986)), planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: None +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 640, height: 360, region: PixelRect { x0: 0, y0: 0, x1: 640, y1: 360 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 12.700017, aperture: [25.4, 25.4], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 5.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/cornellbox.usda"], invisible_overrides: Some(0) } +layer: $DIR/cornellbox.usda +warning: Warning { code: AssetUnsupportedByHost, kind: Skipped, count: 1, prims: [], message: "No asset loader: environment map $DIR/sky_gradient.exr ignored — the dome falls back to its uniform colour. Use Scene::from_usd_with_assets to supply one." } +warning: Warning { code: MaterialFallbackDefault, kind: Skipped, count: 1, prims: ["/scene/Looks/initialShadingGroup"], message: "Material /scene/Looks/initialShadingGroup has no surface shader — using default grey OpenPBR" } +lights: 1 +light 0: dome name Some("/scene/Sky") lpe None pmf 1.0 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 5 geometries, PrimitiveBreakdown { triangles: 822, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 2 } top level, PrimitiveBreakdown { triangles: 1582, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 2 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 4.0 motion [] pieces all=10:88b22fc3345d5b05 camera=10:88b22fc3345d5b05 shadow=10:88b22fc3345d5b05 indirect=10:88b22fc3345d5b05 +geom 1: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.2 motion [] pieces all=760:c2b60a75c52c78b9 camera=760:c2b60a75c52c78b9 shadow=760:c2b60a75c52c78b9 indirect=760:c2b60a75c52c78b9 +geom 2: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=12:94a297badef437e1 camera=12:94a297badef437e1 shadow=12:94a297badef437e1 indirect=12:94a297badef437e1 +geom 3: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.25 motion [] pieces all=800:4a8c9f44d777e131 camera=800:4a8c9f44d777e131 shadow=800:4a8c9f44d777e131 indirect=800:4a8c9f44d777e131 +geom 4: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.3585339 motion [] pieces all=760:2344ecf63e12c441 camera=760:2344ecf63e12c441 shadow=760:2344ecf63e12c441 indirect=760:2344ecf63e12c441 +provenance material /scene/Looks/initialShadingGroup: MaterialOrigin { slots: [0, 1, 2, 3, 4], displaced: false } +provenance light /scene/Sky: LightOrigin { index: 0, geoms: 0..0 } +provenance geometry 0..1: /scene/pCube1 +provenance geometry 1..2: /scene/pSphere1 +provenance geometry 2..3: /scene/pCube2 +provenance geometry 3..4: /scene/pTorus1 +provenance geometry 4..5: /scene/pSphere2 +provenance mesh: MeshOrigin { geom_id: 0, slot: 0, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 1, slot: 1, baked: false, moving: false } +provenance mesh: MeshOrigin { geom_id: 2, slot: 2, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 3, slot: 3, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 4, slot: 1, baked: false, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 12343188411137242430, n_points: 8, n_indices: 20, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 1: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 17119738035130870988, n_points: 382, n_indices: 1560, n_uvs: None, smooth: false, material: 0 }), placements: 2, shared: false, displaced: false } +provenance mesh slot 2: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 1739488954094729910, n_points: 8, n_indices: 24, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 3: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 6096447469814747168, n_points: 400, n_indices: 1600, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/scene/camera1"), cameras: ["/scene/camera1"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/scene/camera1"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-158.image b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-158.image new file mode 100644 index 000000000..ba4884437 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-158.image @@ -0,0 +1 @@ +640x360 16spp clamp-off 52a1a46f3a46d230 diff --git a/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-159.digest b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-159.digest new file mode 100644 index 000000000..0e859a952 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-159.digest @@ -0,0 +1,40 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/scene/camera1") +camera: Camera { origin: Vec3A(0.0074343784, 1.9913422, 4.0133057), lower_left_corner: Vec3A(-8.881443, -3.0086517, -0.98669434), horizontal: Vec3A(17.777756, 0.0, 0.0), vertical: Vec3A(0.0, 9.999988, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: Some(Vec4(0.0, 0.0, -1.0, 3.9133058)), far: Some(Vec4(0.0, 0.0, 1.0, 9995.986)), planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: None +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 640, height: 360, region: PixelRect { x0: 0, y0: 0, x1: 640, y1: 360 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 12.700017, aperture: [25.4, 25.4], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 5.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/cornellbox.usda"], invisible_overrides: Some(0) } +layer: $DIR/cornellbox.usda +warning: Warning { code: AssetUnsupportedByHost, kind: Skipped, count: 1, prims: [], message: "No asset loader: environment map $DIR/sky_gradient.exr ignored — the dome falls back to its uniform colour. Use Scene::from_usd_with_assets to supply one." } +warning: Warning { code: MaterialFallbackDefault, kind: Skipped, count: 1, prims: ["/scene/Looks/initialShadingGroup"], message: "Material /scene/Looks/initialShadingGroup has no surface shader — using default grey OpenPBR" } +lights: 1 +light 0: dome name Some("/scene/Sky") lpe None pmf 1.0 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 5 geometries, PrimitiveBreakdown { triangles: 822, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 2 } top level, PrimitiveBreakdown { triangles: 1582, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 2 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 4.0 motion [] pieces all=10:88b22fc3345d5b05 camera=10:88b22fc3345d5b05 shadow=10:88b22fc3345d5b05 indirect=10:88b22fc3345d5b05 +geom 1: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.2 motion [] pieces all=760:c2b60a75c52c78b9 camera=760:c2b60a75c52c78b9 shadow=760:c2b60a75c52c78b9 indirect=760:c2b60a75c52c78b9 +geom 2: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=12:94a297badef437e1 camera=12:94a297badef437e1 shadow=12:94a297badef437e1 indirect=12:94a297badef437e1 +geom 3: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.25 motion [] pieces all=800:4a8c9f44d777e131 camera=800:4a8c9f44d777e131 shadow=800:4a8c9f44d777e131 indirect=800:4a8c9f44d777e131 +geom 4: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.3585339 motion [] pieces all=760:2344ecf63e12c441 camera=760:2344ecf63e12c441 shadow=760:2344ecf63e12c441 indirect=760:2344ecf63e12c441 +provenance material /scene/Looks/initialShadingGroup: MaterialOrigin { slots: [0, 1, 2, 3, 4], displaced: false } +provenance light /scene/Sky: LightOrigin { index: 0, geoms: 0..0 } +provenance geometry 0..1: /scene/pCube1 +provenance geometry 1..2: /scene/pSphere1 +provenance geometry 2..3: /scene/pCube2 +provenance geometry 3..4: /scene/pTorus1 +provenance geometry 4..5: /scene/pSphere2 +provenance mesh: MeshOrigin { geom_id: 0, slot: 0, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 1, slot: 1, baked: false, moving: false } +provenance mesh: MeshOrigin { geom_id: 2, slot: 2, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 3, slot: 3, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 4, slot: 1, baked: false, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 12343188411137242430, n_points: 8, n_indices: 20, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 1: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 17119738035130870988, n_points: 382, n_indices: 1560, n_uvs: None, smooth: false, material: 0 }), placements: 2, shared: false, displaced: false } +provenance mesh slot 2: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 1739488954094729910, n_points: 8, n_indices: 24, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 3: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 6096447469814747168, n_points: 400, n_indices: 1600, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/scene/camera1"), cameras: ["/scene/camera1"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/scene/camera1"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-159.image b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-159.image new file mode 100644 index 000000000..ba4884437 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-159.image @@ -0,0 +1 @@ +640x360 16spp clamp-off 52a1a46f3a46d230 diff --git a/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-16.digest b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-16.digest new file mode 100644 index 000000000..0e859a952 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-16.digest @@ -0,0 +1,40 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/scene/camera1") +camera: Camera { origin: Vec3A(0.0074343784, 1.9913422, 4.0133057), lower_left_corner: Vec3A(-8.881443, -3.0086517, -0.98669434), horizontal: Vec3A(17.777756, 0.0, 0.0), vertical: Vec3A(0.0, 9.999988, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: Some(Vec4(0.0, 0.0, -1.0, 3.9133058)), far: Some(Vec4(0.0, 0.0, 1.0, 9995.986)), planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: None +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 640, height: 360, region: PixelRect { x0: 0, y0: 0, x1: 640, y1: 360 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 12.700017, aperture: [25.4, 25.4], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 5.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/cornellbox.usda"], invisible_overrides: Some(0) } +layer: $DIR/cornellbox.usda +warning: Warning { code: AssetUnsupportedByHost, kind: Skipped, count: 1, prims: [], message: "No asset loader: environment map $DIR/sky_gradient.exr ignored — the dome falls back to its uniform colour. Use Scene::from_usd_with_assets to supply one." } +warning: Warning { code: MaterialFallbackDefault, kind: Skipped, count: 1, prims: ["/scene/Looks/initialShadingGroup"], message: "Material /scene/Looks/initialShadingGroup has no surface shader — using default grey OpenPBR" } +lights: 1 +light 0: dome name Some("/scene/Sky") lpe None pmf 1.0 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 5 geometries, PrimitiveBreakdown { triangles: 822, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 2 } top level, PrimitiveBreakdown { triangles: 1582, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 2 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 4.0 motion [] pieces all=10:88b22fc3345d5b05 camera=10:88b22fc3345d5b05 shadow=10:88b22fc3345d5b05 indirect=10:88b22fc3345d5b05 +geom 1: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.2 motion [] pieces all=760:c2b60a75c52c78b9 camera=760:c2b60a75c52c78b9 shadow=760:c2b60a75c52c78b9 indirect=760:c2b60a75c52c78b9 +geom 2: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=12:94a297badef437e1 camera=12:94a297badef437e1 shadow=12:94a297badef437e1 indirect=12:94a297badef437e1 +geom 3: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.25 motion [] pieces all=800:4a8c9f44d777e131 camera=800:4a8c9f44d777e131 shadow=800:4a8c9f44d777e131 indirect=800:4a8c9f44d777e131 +geom 4: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.3585339 motion [] pieces all=760:2344ecf63e12c441 camera=760:2344ecf63e12c441 shadow=760:2344ecf63e12c441 indirect=760:2344ecf63e12c441 +provenance material /scene/Looks/initialShadingGroup: MaterialOrigin { slots: [0, 1, 2, 3, 4], displaced: false } +provenance light /scene/Sky: LightOrigin { index: 0, geoms: 0..0 } +provenance geometry 0..1: /scene/pCube1 +provenance geometry 1..2: /scene/pSphere1 +provenance geometry 2..3: /scene/pCube2 +provenance geometry 3..4: /scene/pTorus1 +provenance geometry 4..5: /scene/pSphere2 +provenance mesh: MeshOrigin { geom_id: 0, slot: 0, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 1, slot: 1, baked: false, moving: false } +provenance mesh: MeshOrigin { geom_id: 2, slot: 2, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 3, slot: 3, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 4, slot: 1, baked: false, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 12343188411137242430, n_points: 8, n_indices: 20, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 1: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 17119738035130870988, n_points: 382, n_indices: 1560, n_uvs: None, smooth: false, material: 0 }), placements: 2, shared: false, displaced: false } +provenance mesh slot 2: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 1739488954094729910, n_points: 8, n_indices: 24, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 3: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 6096447469814747168, n_points: 400, n_indices: 1600, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/scene/camera1"), cameras: ["/scene/camera1"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/scene/camera1"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-16.image b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-16.image new file mode 100644 index 000000000..ba4884437 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-16.image @@ -0,0 +1 @@ +640x360 16spp clamp-off 52a1a46f3a46d230 diff --git a/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-160.digest b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-160.digest new file mode 100644 index 000000000..0e859a952 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-160.digest @@ -0,0 +1,40 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/scene/camera1") +camera: Camera { origin: Vec3A(0.0074343784, 1.9913422, 4.0133057), lower_left_corner: Vec3A(-8.881443, -3.0086517, -0.98669434), horizontal: Vec3A(17.777756, 0.0, 0.0), vertical: Vec3A(0.0, 9.999988, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: Some(Vec4(0.0, 0.0, -1.0, 3.9133058)), far: Some(Vec4(0.0, 0.0, 1.0, 9995.986)), planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: None +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 640, height: 360, region: PixelRect { x0: 0, y0: 0, x1: 640, y1: 360 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 12.700017, aperture: [25.4, 25.4], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 5.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/cornellbox.usda"], invisible_overrides: Some(0) } +layer: $DIR/cornellbox.usda +warning: Warning { code: AssetUnsupportedByHost, kind: Skipped, count: 1, prims: [], message: "No asset loader: environment map $DIR/sky_gradient.exr ignored — the dome falls back to its uniform colour. Use Scene::from_usd_with_assets to supply one." } +warning: Warning { code: MaterialFallbackDefault, kind: Skipped, count: 1, prims: ["/scene/Looks/initialShadingGroup"], message: "Material /scene/Looks/initialShadingGroup has no surface shader — using default grey OpenPBR" } +lights: 1 +light 0: dome name Some("/scene/Sky") lpe None pmf 1.0 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 5 geometries, PrimitiveBreakdown { triangles: 822, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 2 } top level, PrimitiveBreakdown { triangles: 1582, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 2 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 4.0 motion [] pieces all=10:88b22fc3345d5b05 camera=10:88b22fc3345d5b05 shadow=10:88b22fc3345d5b05 indirect=10:88b22fc3345d5b05 +geom 1: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.2 motion [] pieces all=760:c2b60a75c52c78b9 camera=760:c2b60a75c52c78b9 shadow=760:c2b60a75c52c78b9 indirect=760:c2b60a75c52c78b9 +geom 2: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=12:94a297badef437e1 camera=12:94a297badef437e1 shadow=12:94a297badef437e1 indirect=12:94a297badef437e1 +geom 3: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.25 motion [] pieces all=800:4a8c9f44d777e131 camera=800:4a8c9f44d777e131 shadow=800:4a8c9f44d777e131 indirect=800:4a8c9f44d777e131 +geom 4: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.3585339 motion [] pieces all=760:2344ecf63e12c441 camera=760:2344ecf63e12c441 shadow=760:2344ecf63e12c441 indirect=760:2344ecf63e12c441 +provenance material /scene/Looks/initialShadingGroup: MaterialOrigin { slots: [0, 1, 2, 3, 4], displaced: false } +provenance light /scene/Sky: LightOrigin { index: 0, geoms: 0..0 } +provenance geometry 0..1: /scene/pCube1 +provenance geometry 1..2: /scene/pSphere1 +provenance geometry 2..3: /scene/pCube2 +provenance geometry 3..4: /scene/pTorus1 +provenance geometry 4..5: /scene/pSphere2 +provenance mesh: MeshOrigin { geom_id: 0, slot: 0, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 1, slot: 1, baked: false, moving: false } +provenance mesh: MeshOrigin { geom_id: 2, slot: 2, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 3, slot: 3, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 4, slot: 1, baked: false, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 12343188411137242430, n_points: 8, n_indices: 20, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 1: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 17119738035130870988, n_points: 382, n_indices: 1560, n_uvs: None, smooth: false, material: 0 }), placements: 2, shared: false, displaced: false } +provenance mesh slot 2: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 1739488954094729910, n_points: 8, n_indices: 24, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 3: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 6096447469814747168, n_points: 400, n_indices: 1600, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/scene/camera1"), cameras: ["/scene/camera1"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/scene/camera1"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-160.image b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-160.image new file mode 100644 index 000000000..ba4884437 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-160.image @@ -0,0 +1 @@ +640x360 16spp clamp-off 52a1a46f3a46d230 diff --git a/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-161.digest b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-161.digest new file mode 100644 index 000000000..0e859a952 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-161.digest @@ -0,0 +1,40 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/scene/camera1") +camera: Camera { origin: Vec3A(0.0074343784, 1.9913422, 4.0133057), lower_left_corner: Vec3A(-8.881443, -3.0086517, -0.98669434), horizontal: Vec3A(17.777756, 0.0, 0.0), vertical: Vec3A(0.0, 9.999988, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: Some(Vec4(0.0, 0.0, -1.0, 3.9133058)), far: Some(Vec4(0.0, 0.0, 1.0, 9995.986)), planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: None +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 640, height: 360, region: PixelRect { x0: 0, y0: 0, x1: 640, y1: 360 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 12.700017, aperture: [25.4, 25.4], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 5.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/cornellbox.usda"], invisible_overrides: Some(0) } +layer: $DIR/cornellbox.usda +warning: Warning { code: AssetUnsupportedByHost, kind: Skipped, count: 1, prims: [], message: "No asset loader: environment map $DIR/sky_gradient.exr ignored — the dome falls back to its uniform colour. Use Scene::from_usd_with_assets to supply one." } +warning: Warning { code: MaterialFallbackDefault, kind: Skipped, count: 1, prims: ["/scene/Looks/initialShadingGroup"], message: "Material /scene/Looks/initialShadingGroup has no surface shader — using default grey OpenPBR" } +lights: 1 +light 0: dome name Some("/scene/Sky") lpe None pmf 1.0 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 5 geometries, PrimitiveBreakdown { triangles: 822, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 2 } top level, PrimitiveBreakdown { triangles: 1582, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 2 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 4.0 motion [] pieces all=10:88b22fc3345d5b05 camera=10:88b22fc3345d5b05 shadow=10:88b22fc3345d5b05 indirect=10:88b22fc3345d5b05 +geom 1: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.2 motion [] pieces all=760:c2b60a75c52c78b9 camera=760:c2b60a75c52c78b9 shadow=760:c2b60a75c52c78b9 indirect=760:c2b60a75c52c78b9 +geom 2: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=12:94a297badef437e1 camera=12:94a297badef437e1 shadow=12:94a297badef437e1 indirect=12:94a297badef437e1 +geom 3: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.25 motion [] pieces all=800:4a8c9f44d777e131 camera=800:4a8c9f44d777e131 shadow=800:4a8c9f44d777e131 indirect=800:4a8c9f44d777e131 +geom 4: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.3585339 motion [] pieces all=760:2344ecf63e12c441 camera=760:2344ecf63e12c441 shadow=760:2344ecf63e12c441 indirect=760:2344ecf63e12c441 +provenance material /scene/Looks/initialShadingGroup: MaterialOrigin { slots: [0, 1, 2, 3, 4], displaced: false } +provenance light /scene/Sky: LightOrigin { index: 0, geoms: 0..0 } +provenance geometry 0..1: /scene/pCube1 +provenance geometry 1..2: /scene/pSphere1 +provenance geometry 2..3: /scene/pCube2 +provenance geometry 3..4: /scene/pTorus1 +provenance geometry 4..5: /scene/pSphere2 +provenance mesh: MeshOrigin { geom_id: 0, slot: 0, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 1, slot: 1, baked: false, moving: false } +provenance mesh: MeshOrigin { geom_id: 2, slot: 2, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 3, slot: 3, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 4, slot: 1, baked: false, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 12343188411137242430, n_points: 8, n_indices: 20, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 1: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 17119738035130870988, n_points: 382, n_indices: 1560, n_uvs: None, smooth: false, material: 0 }), placements: 2, shared: false, displaced: false } +provenance mesh slot 2: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 1739488954094729910, n_points: 8, n_indices: 24, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 3: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 6096447469814747168, n_points: 400, n_indices: 1600, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/scene/camera1"), cameras: ["/scene/camera1"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/scene/camera1"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-161.image b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-161.image new file mode 100644 index 000000000..ba4884437 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-161.image @@ -0,0 +1 @@ +640x360 16spp clamp-off 52a1a46f3a46d230 diff --git a/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-162.digest b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-162.digest new file mode 100644 index 000000000..0e859a952 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-162.digest @@ -0,0 +1,40 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/scene/camera1") +camera: Camera { origin: Vec3A(0.0074343784, 1.9913422, 4.0133057), lower_left_corner: Vec3A(-8.881443, -3.0086517, -0.98669434), horizontal: Vec3A(17.777756, 0.0, 0.0), vertical: Vec3A(0.0, 9.999988, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: Some(Vec4(0.0, 0.0, -1.0, 3.9133058)), far: Some(Vec4(0.0, 0.0, 1.0, 9995.986)), planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: None +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 640, height: 360, region: PixelRect { x0: 0, y0: 0, x1: 640, y1: 360 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 12.700017, aperture: [25.4, 25.4], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 5.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/cornellbox.usda"], invisible_overrides: Some(0) } +layer: $DIR/cornellbox.usda +warning: Warning { code: AssetUnsupportedByHost, kind: Skipped, count: 1, prims: [], message: "No asset loader: environment map $DIR/sky_gradient.exr ignored — the dome falls back to its uniform colour. Use Scene::from_usd_with_assets to supply one." } +warning: Warning { code: MaterialFallbackDefault, kind: Skipped, count: 1, prims: ["/scene/Looks/initialShadingGroup"], message: "Material /scene/Looks/initialShadingGroup has no surface shader — using default grey OpenPBR" } +lights: 1 +light 0: dome name Some("/scene/Sky") lpe None pmf 1.0 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 5 geometries, PrimitiveBreakdown { triangles: 822, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 2 } top level, PrimitiveBreakdown { triangles: 1582, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 2 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 4.0 motion [] pieces all=10:88b22fc3345d5b05 camera=10:88b22fc3345d5b05 shadow=10:88b22fc3345d5b05 indirect=10:88b22fc3345d5b05 +geom 1: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.2 motion [] pieces all=760:c2b60a75c52c78b9 camera=760:c2b60a75c52c78b9 shadow=760:c2b60a75c52c78b9 indirect=760:c2b60a75c52c78b9 +geom 2: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=12:94a297badef437e1 camera=12:94a297badef437e1 shadow=12:94a297badef437e1 indirect=12:94a297badef437e1 +geom 3: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.25 motion [] pieces all=800:4a8c9f44d777e131 camera=800:4a8c9f44d777e131 shadow=800:4a8c9f44d777e131 indirect=800:4a8c9f44d777e131 +geom 4: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.3585339 motion [] pieces all=760:2344ecf63e12c441 camera=760:2344ecf63e12c441 shadow=760:2344ecf63e12c441 indirect=760:2344ecf63e12c441 +provenance material /scene/Looks/initialShadingGroup: MaterialOrigin { slots: [0, 1, 2, 3, 4], displaced: false } +provenance light /scene/Sky: LightOrigin { index: 0, geoms: 0..0 } +provenance geometry 0..1: /scene/pCube1 +provenance geometry 1..2: /scene/pSphere1 +provenance geometry 2..3: /scene/pCube2 +provenance geometry 3..4: /scene/pTorus1 +provenance geometry 4..5: /scene/pSphere2 +provenance mesh: MeshOrigin { geom_id: 0, slot: 0, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 1, slot: 1, baked: false, moving: false } +provenance mesh: MeshOrigin { geom_id: 2, slot: 2, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 3, slot: 3, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 4, slot: 1, baked: false, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 12343188411137242430, n_points: 8, n_indices: 20, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 1: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 17119738035130870988, n_points: 382, n_indices: 1560, n_uvs: None, smooth: false, material: 0 }), placements: 2, shared: false, displaced: false } +provenance mesh slot 2: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 1739488954094729910, n_points: 8, n_indices: 24, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 3: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 6096447469814747168, n_points: 400, n_indices: 1600, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/scene/camera1"), cameras: ["/scene/camera1"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/scene/camera1"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-162.image b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-162.image new file mode 100644 index 000000000..ba4884437 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-162.image @@ -0,0 +1 @@ +640x360 16spp clamp-off 52a1a46f3a46d230 diff --git a/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-163.digest b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-163.digest new file mode 100644 index 000000000..0e859a952 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-163.digest @@ -0,0 +1,40 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/scene/camera1") +camera: Camera { origin: Vec3A(0.0074343784, 1.9913422, 4.0133057), lower_left_corner: Vec3A(-8.881443, -3.0086517, -0.98669434), horizontal: Vec3A(17.777756, 0.0, 0.0), vertical: Vec3A(0.0, 9.999988, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: Some(Vec4(0.0, 0.0, -1.0, 3.9133058)), far: Some(Vec4(0.0, 0.0, 1.0, 9995.986)), planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: None +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 640, height: 360, region: PixelRect { x0: 0, y0: 0, x1: 640, y1: 360 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 12.700017, aperture: [25.4, 25.4], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 5.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/cornellbox.usda"], invisible_overrides: Some(0) } +layer: $DIR/cornellbox.usda +warning: Warning { code: AssetUnsupportedByHost, kind: Skipped, count: 1, prims: [], message: "No asset loader: environment map $DIR/sky_gradient.exr ignored — the dome falls back to its uniform colour. Use Scene::from_usd_with_assets to supply one." } +warning: Warning { code: MaterialFallbackDefault, kind: Skipped, count: 1, prims: ["/scene/Looks/initialShadingGroup"], message: "Material /scene/Looks/initialShadingGroup has no surface shader — using default grey OpenPBR" } +lights: 1 +light 0: dome name Some("/scene/Sky") lpe None pmf 1.0 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 5 geometries, PrimitiveBreakdown { triangles: 822, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 2 } top level, PrimitiveBreakdown { triangles: 1582, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 2 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 4.0 motion [] pieces all=10:88b22fc3345d5b05 camera=10:88b22fc3345d5b05 shadow=10:88b22fc3345d5b05 indirect=10:88b22fc3345d5b05 +geom 1: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.2 motion [] pieces all=760:c2b60a75c52c78b9 camera=760:c2b60a75c52c78b9 shadow=760:c2b60a75c52c78b9 indirect=760:c2b60a75c52c78b9 +geom 2: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=12:94a297badef437e1 camera=12:94a297badef437e1 shadow=12:94a297badef437e1 indirect=12:94a297badef437e1 +geom 3: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.25 motion [] pieces all=800:4a8c9f44d777e131 camera=800:4a8c9f44d777e131 shadow=800:4a8c9f44d777e131 indirect=800:4a8c9f44d777e131 +geom 4: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.3585339 motion [] pieces all=760:2344ecf63e12c441 camera=760:2344ecf63e12c441 shadow=760:2344ecf63e12c441 indirect=760:2344ecf63e12c441 +provenance material /scene/Looks/initialShadingGroup: MaterialOrigin { slots: [0, 1, 2, 3, 4], displaced: false } +provenance light /scene/Sky: LightOrigin { index: 0, geoms: 0..0 } +provenance geometry 0..1: /scene/pCube1 +provenance geometry 1..2: /scene/pSphere1 +provenance geometry 2..3: /scene/pCube2 +provenance geometry 3..4: /scene/pTorus1 +provenance geometry 4..5: /scene/pSphere2 +provenance mesh: MeshOrigin { geom_id: 0, slot: 0, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 1, slot: 1, baked: false, moving: false } +provenance mesh: MeshOrigin { geom_id: 2, slot: 2, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 3, slot: 3, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 4, slot: 1, baked: false, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 12343188411137242430, n_points: 8, n_indices: 20, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 1: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 17119738035130870988, n_points: 382, n_indices: 1560, n_uvs: None, smooth: false, material: 0 }), placements: 2, shared: false, displaced: false } +provenance mesh slot 2: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 1739488954094729910, n_points: 8, n_indices: 24, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 3: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 6096447469814747168, n_points: 400, n_indices: 1600, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/scene/camera1"), cameras: ["/scene/camera1"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/scene/camera1"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-163.image b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-163.image new file mode 100644 index 000000000..ba4884437 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-163.image @@ -0,0 +1 @@ +640x360 16spp clamp-off 52a1a46f3a46d230 diff --git a/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-164.digest b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-164.digest new file mode 100644 index 000000000..0e859a952 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-164.digest @@ -0,0 +1,40 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/scene/camera1") +camera: Camera { origin: Vec3A(0.0074343784, 1.9913422, 4.0133057), lower_left_corner: Vec3A(-8.881443, -3.0086517, -0.98669434), horizontal: Vec3A(17.777756, 0.0, 0.0), vertical: Vec3A(0.0, 9.999988, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: Some(Vec4(0.0, 0.0, -1.0, 3.9133058)), far: Some(Vec4(0.0, 0.0, 1.0, 9995.986)), planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: None +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 640, height: 360, region: PixelRect { x0: 0, y0: 0, x1: 640, y1: 360 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 12.700017, aperture: [25.4, 25.4], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 5.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/cornellbox.usda"], invisible_overrides: Some(0) } +layer: $DIR/cornellbox.usda +warning: Warning { code: AssetUnsupportedByHost, kind: Skipped, count: 1, prims: [], message: "No asset loader: environment map $DIR/sky_gradient.exr ignored — the dome falls back to its uniform colour. Use Scene::from_usd_with_assets to supply one." } +warning: Warning { code: MaterialFallbackDefault, kind: Skipped, count: 1, prims: ["/scene/Looks/initialShadingGroup"], message: "Material /scene/Looks/initialShadingGroup has no surface shader — using default grey OpenPBR" } +lights: 1 +light 0: dome name Some("/scene/Sky") lpe None pmf 1.0 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 5 geometries, PrimitiveBreakdown { triangles: 822, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 2 } top level, PrimitiveBreakdown { triangles: 1582, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 2 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 4.0 motion [] pieces all=10:88b22fc3345d5b05 camera=10:88b22fc3345d5b05 shadow=10:88b22fc3345d5b05 indirect=10:88b22fc3345d5b05 +geom 1: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.2 motion [] pieces all=760:c2b60a75c52c78b9 camera=760:c2b60a75c52c78b9 shadow=760:c2b60a75c52c78b9 indirect=760:c2b60a75c52c78b9 +geom 2: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=12:94a297badef437e1 camera=12:94a297badef437e1 shadow=12:94a297badef437e1 indirect=12:94a297badef437e1 +geom 3: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.25 motion [] pieces all=800:4a8c9f44d777e131 camera=800:4a8c9f44d777e131 shadow=800:4a8c9f44d777e131 indirect=800:4a8c9f44d777e131 +geom 4: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.3585339 motion [] pieces all=760:2344ecf63e12c441 camera=760:2344ecf63e12c441 shadow=760:2344ecf63e12c441 indirect=760:2344ecf63e12c441 +provenance material /scene/Looks/initialShadingGroup: MaterialOrigin { slots: [0, 1, 2, 3, 4], displaced: false } +provenance light /scene/Sky: LightOrigin { index: 0, geoms: 0..0 } +provenance geometry 0..1: /scene/pCube1 +provenance geometry 1..2: /scene/pSphere1 +provenance geometry 2..3: /scene/pCube2 +provenance geometry 3..4: /scene/pTorus1 +provenance geometry 4..5: /scene/pSphere2 +provenance mesh: MeshOrigin { geom_id: 0, slot: 0, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 1, slot: 1, baked: false, moving: false } +provenance mesh: MeshOrigin { geom_id: 2, slot: 2, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 3, slot: 3, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 4, slot: 1, baked: false, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 12343188411137242430, n_points: 8, n_indices: 20, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 1: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 17119738035130870988, n_points: 382, n_indices: 1560, n_uvs: None, smooth: false, material: 0 }), placements: 2, shared: false, displaced: false } +provenance mesh slot 2: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 1739488954094729910, n_points: 8, n_indices: 24, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 3: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 6096447469814747168, n_points: 400, n_indices: 1600, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/scene/camera1"), cameras: ["/scene/camera1"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/scene/camera1"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-164.image b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-164.image new file mode 100644 index 000000000..ba4884437 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-164.image @@ -0,0 +1 @@ +640x360 16spp clamp-off 52a1a46f3a46d230 diff --git a/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-165.digest b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-165.digest new file mode 100644 index 000000000..0e859a952 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-165.digest @@ -0,0 +1,40 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/scene/camera1") +camera: Camera { origin: Vec3A(0.0074343784, 1.9913422, 4.0133057), lower_left_corner: Vec3A(-8.881443, -3.0086517, -0.98669434), horizontal: Vec3A(17.777756, 0.0, 0.0), vertical: Vec3A(0.0, 9.999988, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: Some(Vec4(0.0, 0.0, -1.0, 3.9133058)), far: Some(Vec4(0.0, 0.0, 1.0, 9995.986)), planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: None +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 640, height: 360, region: PixelRect { x0: 0, y0: 0, x1: 640, y1: 360 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 12.700017, aperture: [25.4, 25.4], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 5.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/cornellbox.usda"], invisible_overrides: Some(0) } +layer: $DIR/cornellbox.usda +warning: Warning { code: AssetUnsupportedByHost, kind: Skipped, count: 1, prims: [], message: "No asset loader: environment map $DIR/sky_gradient.exr ignored — the dome falls back to its uniform colour. Use Scene::from_usd_with_assets to supply one." } +warning: Warning { code: MaterialFallbackDefault, kind: Skipped, count: 1, prims: ["/scene/Looks/initialShadingGroup"], message: "Material /scene/Looks/initialShadingGroup has no surface shader — using default grey OpenPBR" } +lights: 1 +light 0: dome name Some("/scene/Sky") lpe None pmf 1.0 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 5 geometries, PrimitiveBreakdown { triangles: 822, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 2 } top level, PrimitiveBreakdown { triangles: 1582, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 2 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 4.0 motion [] pieces all=10:88b22fc3345d5b05 camera=10:88b22fc3345d5b05 shadow=10:88b22fc3345d5b05 indirect=10:88b22fc3345d5b05 +geom 1: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.2 motion [] pieces all=760:c2b60a75c52c78b9 camera=760:c2b60a75c52c78b9 shadow=760:c2b60a75c52c78b9 indirect=760:c2b60a75c52c78b9 +geom 2: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=12:94a297badef437e1 camera=12:94a297badef437e1 shadow=12:94a297badef437e1 indirect=12:94a297badef437e1 +geom 3: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.25 motion [] pieces all=800:4a8c9f44d777e131 camera=800:4a8c9f44d777e131 shadow=800:4a8c9f44d777e131 indirect=800:4a8c9f44d777e131 +geom 4: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.3585339 motion [] pieces all=760:2344ecf63e12c441 camera=760:2344ecf63e12c441 shadow=760:2344ecf63e12c441 indirect=760:2344ecf63e12c441 +provenance material /scene/Looks/initialShadingGroup: MaterialOrigin { slots: [0, 1, 2, 3, 4], displaced: false } +provenance light /scene/Sky: LightOrigin { index: 0, geoms: 0..0 } +provenance geometry 0..1: /scene/pCube1 +provenance geometry 1..2: /scene/pSphere1 +provenance geometry 2..3: /scene/pCube2 +provenance geometry 3..4: /scene/pTorus1 +provenance geometry 4..5: /scene/pSphere2 +provenance mesh: MeshOrigin { geom_id: 0, slot: 0, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 1, slot: 1, baked: false, moving: false } +provenance mesh: MeshOrigin { geom_id: 2, slot: 2, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 3, slot: 3, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 4, slot: 1, baked: false, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 12343188411137242430, n_points: 8, n_indices: 20, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 1: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 17119738035130870988, n_points: 382, n_indices: 1560, n_uvs: None, smooth: false, material: 0 }), placements: 2, shared: false, displaced: false } +provenance mesh slot 2: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 1739488954094729910, n_points: 8, n_indices: 24, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 3: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 6096447469814747168, n_points: 400, n_indices: 1600, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/scene/camera1"), cameras: ["/scene/camera1"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/scene/camera1"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-165.image b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-165.image new file mode 100644 index 000000000..ba4884437 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-165.image @@ -0,0 +1 @@ +640x360 16spp clamp-off 52a1a46f3a46d230 diff --git a/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-166.digest b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-166.digest new file mode 100644 index 000000000..0e859a952 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-166.digest @@ -0,0 +1,40 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/scene/camera1") +camera: Camera { origin: Vec3A(0.0074343784, 1.9913422, 4.0133057), lower_left_corner: Vec3A(-8.881443, -3.0086517, -0.98669434), horizontal: Vec3A(17.777756, 0.0, 0.0), vertical: Vec3A(0.0, 9.999988, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: Some(Vec4(0.0, 0.0, -1.0, 3.9133058)), far: Some(Vec4(0.0, 0.0, 1.0, 9995.986)), planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: None +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 640, height: 360, region: PixelRect { x0: 0, y0: 0, x1: 640, y1: 360 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 12.700017, aperture: [25.4, 25.4], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 5.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/cornellbox.usda"], invisible_overrides: Some(0) } +layer: $DIR/cornellbox.usda +warning: Warning { code: AssetUnsupportedByHost, kind: Skipped, count: 1, prims: [], message: "No asset loader: environment map $DIR/sky_gradient.exr ignored — the dome falls back to its uniform colour. Use Scene::from_usd_with_assets to supply one." } +warning: Warning { code: MaterialFallbackDefault, kind: Skipped, count: 1, prims: ["/scene/Looks/initialShadingGroup"], message: "Material /scene/Looks/initialShadingGroup has no surface shader — using default grey OpenPBR" } +lights: 1 +light 0: dome name Some("/scene/Sky") lpe None pmf 1.0 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 5 geometries, PrimitiveBreakdown { triangles: 822, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 2 } top level, PrimitiveBreakdown { triangles: 1582, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 2 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 4.0 motion [] pieces all=10:88b22fc3345d5b05 camera=10:88b22fc3345d5b05 shadow=10:88b22fc3345d5b05 indirect=10:88b22fc3345d5b05 +geom 1: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.2 motion [] pieces all=760:c2b60a75c52c78b9 camera=760:c2b60a75c52c78b9 shadow=760:c2b60a75c52c78b9 indirect=760:c2b60a75c52c78b9 +geom 2: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=12:94a297badef437e1 camera=12:94a297badef437e1 shadow=12:94a297badef437e1 indirect=12:94a297badef437e1 +geom 3: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.25 motion [] pieces all=800:4a8c9f44d777e131 camera=800:4a8c9f44d777e131 shadow=800:4a8c9f44d777e131 indirect=800:4a8c9f44d777e131 +geom 4: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.3585339 motion [] pieces all=760:2344ecf63e12c441 camera=760:2344ecf63e12c441 shadow=760:2344ecf63e12c441 indirect=760:2344ecf63e12c441 +provenance material /scene/Looks/initialShadingGroup: MaterialOrigin { slots: [0, 1, 2, 3, 4], displaced: false } +provenance light /scene/Sky: LightOrigin { index: 0, geoms: 0..0 } +provenance geometry 0..1: /scene/pCube1 +provenance geometry 1..2: /scene/pSphere1 +provenance geometry 2..3: /scene/pCube2 +provenance geometry 3..4: /scene/pTorus1 +provenance geometry 4..5: /scene/pSphere2 +provenance mesh: MeshOrigin { geom_id: 0, slot: 0, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 1, slot: 1, baked: false, moving: false } +provenance mesh: MeshOrigin { geom_id: 2, slot: 2, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 3, slot: 3, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 4, slot: 1, baked: false, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 12343188411137242430, n_points: 8, n_indices: 20, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 1: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 17119738035130870988, n_points: 382, n_indices: 1560, n_uvs: None, smooth: false, material: 0 }), placements: 2, shared: false, displaced: false } +provenance mesh slot 2: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 1739488954094729910, n_points: 8, n_indices: 24, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 3: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 6096447469814747168, n_points: 400, n_indices: 1600, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/scene/camera1"), cameras: ["/scene/camera1"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/scene/camera1"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-166.image b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-166.image new file mode 100644 index 000000000..ba4884437 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-166.image @@ -0,0 +1 @@ +640x360 16spp clamp-off 52a1a46f3a46d230 diff --git a/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-167.digest b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-167.digest new file mode 100644 index 000000000..0e859a952 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-167.digest @@ -0,0 +1,40 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/scene/camera1") +camera: Camera { origin: Vec3A(0.0074343784, 1.9913422, 4.0133057), lower_left_corner: Vec3A(-8.881443, -3.0086517, -0.98669434), horizontal: Vec3A(17.777756, 0.0, 0.0), vertical: Vec3A(0.0, 9.999988, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: Some(Vec4(0.0, 0.0, -1.0, 3.9133058)), far: Some(Vec4(0.0, 0.0, 1.0, 9995.986)), planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: None +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 640, height: 360, region: PixelRect { x0: 0, y0: 0, x1: 640, y1: 360 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 12.700017, aperture: [25.4, 25.4], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 5.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/cornellbox.usda"], invisible_overrides: Some(0) } +layer: $DIR/cornellbox.usda +warning: Warning { code: AssetUnsupportedByHost, kind: Skipped, count: 1, prims: [], message: "No asset loader: environment map $DIR/sky_gradient.exr ignored — the dome falls back to its uniform colour. Use Scene::from_usd_with_assets to supply one." } +warning: Warning { code: MaterialFallbackDefault, kind: Skipped, count: 1, prims: ["/scene/Looks/initialShadingGroup"], message: "Material /scene/Looks/initialShadingGroup has no surface shader — using default grey OpenPBR" } +lights: 1 +light 0: dome name Some("/scene/Sky") lpe None pmf 1.0 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 5 geometries, PrimitiveBreakdown { triangles: 822, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 2 } top level, PrimitiveBreakdown { triangles: 1582, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 2 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 4.0 motion [] pieces all=10:88b22fc3345d5b05 camera=10:88b22fc3345d5b05 shadow=10:88b22fc3345d5b05 indirect=10:88b22fc3345d5b05 +geom 1: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.2 motion [] pieces all=760:c2b60a75c52c78b9 camera=760:c2b60a75c52c78b9 shadow=760:c2b60a75c52c78b9 indirect=760:c2b60a75c52c78b9 +geom 2: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=12:94a297badef437e1 camera=12:94a297badef437e1 shadow=12:94a297badef437e1 indirect=12:94a297badef437e1 +geom 3: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.25 motion [] pieces all=800:4a8c9f44d777e131 camera=800:4a8c9f44d777e131 shadow=800:4a8c9f44d777e131 indirect=800:4a8c9f44d777e131 +geom 4: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.3585339 motion [] pieces all=760:2344ecf63e12c441 camera=760:2344ecf63e12c441 shadow=760:2344ecf63e12c441 indirect=760:2344ecf63e12c441 +provenance material /scene/Looks/initialShadingGroup: MaterialOrigin { slots: [0, 1, 2, 3, 4], displaced: false } +provenance light /scene/Sky: LightOrigin { index: 0, geoms: 0..0 } +provenance geometry 0..1: /scene/pCube1 +provenance geometry 1..2: /scene/pSphere1 +provenance geometry 2..3: /scene/pCube2 +provenance geometry 3..4: /scene/pTorus1 +provenance geometry 4..5: /scene/pSphere2 +provenance mesh: MeshOrigin { geom_id: 0, slot: 0, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 1, slot: 1, baked: false, moving: false } +provenance mesh: MeshOrigin { geom_id: 2, slot: 2, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 3, slot: 3, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 4, slot: 1, baked: false, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 12343188411137242430, n_points: 8, n_indices: 20, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 1: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 17119738035130870988, n_points: 382, n_indices: 1560, n_uvs: None, smooth: false, material: 0 }), placements: 2, shared: false, displaced: false } +provenance mesh slot 2: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 1739488954094729910, n_points: 8, n_indices: 24, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 3: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 6096447469814747168, n_points: 400, n_indices: 1600, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/scene/camera1"), cameras: ["/scene/camera1"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/scene/camera1"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-167.image b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-167.image new file mode 100644 index 000000000..ba4884437 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-167.image @@ -0,0 +1 @@ +640x360 16spp clamp-off 52a1a46f3a46d230 diff --git a/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-168.digest b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-168.digest new file mode 100644 index 000000000..0e859a952 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-168.digest @@ -0,0 +1,40 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/scene/camera1") +camera: Camera { origin: Vec3A(0.0074343784, 1.9913422, 4.0133057), lower_left_corner: Vec3A(-8.881443, -3.0086517, -0.98669434), horizontal: Vec3A(17.777756, 0.0, 0.0), vertical: Vec3A(0.0, 9.999988, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: Some(Vec4(0.0, 0.0, -1.0, 3.9133058)), far: Some(Vec4(0.0, 0.0, 1.0, 9995.986)), planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: None +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 640, height: 360, region: PixelRect { x0: 0, y0: 0, x1: 640, y1: 360 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 12.700017, aperture: [25.4, 25.4], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 5.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/cornellbox.usda"], invisible_overrides: Some(0) } +layer: $DIR/cornellbox.usda +warning: Warning { code: AssetUnsupportedByHost, kind: Skipped, count: 1, prims: [], message: "No asset loader: environment map $DIR/sky_gradient.exr ignored — the dome falls back to its uniform colour. Use Scene::from_usd_with_assets to supply one." } +warning: Warning { code: MaterialFallbackDefault, kind: Skipped, count: 1, prims: ["/scene/Looks/initialShadingGroup"], message: "Material /scene/Looks/initialShadingGroup has no surface shader — using default grey OpenPBR" } +lights: 1 +light 0: dome name Some("/scene/Sky") lpe None pmf 1.0 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 5 geometries, PrimitiveBreakdown { triangles: 822, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 2 } top level, PrimitiveBreakdown { triangles: 1582, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 2 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 4.0 motion [] pieces all=10:88b22fc3345d5b05 camera=10:88b22fc3345d5b05 shadow=10:88b22fc3345d5b05 indirect=10:88b22fc3345d5b05 +geom 1: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.2 motion [] pieces all=760:c2b60a75c52c78b9 camera=760:c2b60a75c52c78b9 shadow=760:c2b60a75c52c78b9 indirect=760:c2b60a75c52c78b9 +geom 2: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=12:94a297badef437e1 camera=12:94a297badef437e1 shadow=12:94a297badef437e1 indirect=12:94a297badef437e1 +geom 3: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.25 motion [] pieces all=800:4a8c9f44d777e131 camera=800:4a8c9f44d777e131 shadow=800:4a8c9f44d777e131 indirect=800:4a8c9f44d777e131 +geom 4: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.3585339 motion [] pieces all=760:2344ecf63e12c441 camera=760:2344ecf63e12c441 shadow=760:2344ecf63e12c441 indirect=760:2344ecf63e12c441 +provenance material /scene/Looks/initialShadingGroup: MaterialOrigin { slots: [0, 1, 2, 3, 4], displaced: false } +provenance light /scene/Sky: LightOrigin { index: 0, geoms: 0..0 } +provenance geometry 0..1: /scene/pCube1 +provenance geometry 1..2: /scene/pSphere1 +provenance geometry 2..3: /scene/pCube2 +provenance geometry 3..4: /scene/pTorus1 +provenance geometry 4..5: /scene/pSphere2 +provenance mesh: MeshOrigin { geom_id: 0, slot: 0, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 1, slot: 1, baked: false, moving: false } +provenance mesh: MeshOrigin { geom_id: 2, slot: 2, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 3, slot: 3, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 4, slot: 1, baked: false, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 12343188411137242430, n_points: 8, n_indices: 20, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 1: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 17119738035130870988, n_points: 382, n_indices: 1560, n_uvs: None, smooth: false, material: 0 }), placements: 2, shared: false, displaced: false } +provenance mesh slot 2: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 1739488954094729910, n_points: 8, n_indices: 24, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 3: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 6096447469814747168, n_points: 400, n_indices: 1600, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/scene/camera1"), cameras: ["/scene/camera1"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/scene/camera1"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-168.image b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-168.image new file mode 100644 index 000000000..ba4884437 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-168.image @@ -0,0 +1 @@ +640x360 16spp clamp-off 52a1a46f3a46d230 diff --git a/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-169.digest b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-169.digest new file mode 100644 index 000000000..0e859a952 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-169.digest @@ -0,0 +1,40 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/scene/camera1") +camera: Camera { origin: Vec3A(0.0074343784, 1.9913422, 4.0133057), lower_left_corner: Vec3A(-8.881443, -3.0086517, -0.98669434), horizontal: Vec3A(17.777756, 0.0, 0.0), vertical: Vec3A(0.0, 9.999988, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: Some(Vec4(0.0, 0.0, -1.0, 3.9133058)), far: Some(Vec4(0.0, 0.0, 1.0, 9995.986)), planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: None +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 640, height: 360, region: PixelRect { x0: 0, y0: 0, x1: 640, y1: 360 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 12.700017, aperture: [25.4, 25.4], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 5.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/cornellbox.usda"], invisible_overrides: Some(0) } +layer: $DIR/cornellbox.usda +warning: Warning { code: AssetUnsupportedByHost, kind: Skipped, count: 1, prims: [], message: "No asset loader: environment map $DIR/sky_gradient.exr ignored — the dome falls back to its uniform colour. Use Scene::from_usd_with_assets to supply one." } +warning: Warning { code: MaterialFallbackDefault, kind: Skipped, count: 1, prims: ["/scene/Looks/initialShadingGroup"], message: "Material /scene/Looks/initialShadingGroup has no surface shader — using default grey OpenPBR" } +lights: 1 +light 0: dome name Some("/scene/Sky") lpe None pmf 1.0 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 5 geometries, PrimitiveBreakdown { triangles: 822, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 2 } top level, PrimitiveBreakdown { triangles: 1582, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 2 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 4.0 motion [] pieces all=10:88b22fc3345d5b05 camera=10:88b22fc3345d5b05 shadow=10:88b22fc3345d5b05 indirect=10:88b22fc3345d5b05 +geom 1: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.2 motion [] pieces all=760:c2b60a75c52c78b9 camera=760:c2b60a75c52c78b9 shadow=760:c2b60a75c52c78b9 indirect=760:c2b60a75c52c78b9 +geom 2: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=12:94a297badef437e1 camera=12:94a297badef437e1 shadow=12:94a297badef437e1 indirect=12:94a297badef437e1 +geom 3: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.25 motion [] pieces all=800:4a8c9f44d777e131 camera=800:4a8c9f44d777e131 shadow=800:4a8c9f44d777e131 indirect=800:4a8c9f44d777e131 +geom 4: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.3585339 motion [] pieces all=760:2344ecf63e12c441 camera=760:2344ecf63e12c441 shadow=760:2344ecf63e12c441 indirect=760:2344ecf63e12c441 +provenance material /scene/Looks/initialShadingGroup: MaterialOrigin { slots: [0, 1, 2, 3, 4], displaced: false } +provenance light /scene/Sky: LightOrigin { index: 0, geoms: 0..0 } +provenance geometry 0..1: /scene/pCube1 +provenance geometry 1..2: /scene/pSphere1 +provenance geometry 2..3: /scene/pCube2 +provenance geometry 3..4: /scene/pTorus1 +provenance geometry 4..5: /scene/pSphere2 +provenance mesh: MeshOrigin { geom_id: 0, slot: 0, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 1, slot: 1, baked: false, moving: false } +provenance mesh: MeshOrigin { geom_id: 2, slot: 2, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 3, slot: 3, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 4, slot: 1, baked: false, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 12343188411137242430, n_points: 8, n_indices: 20, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 1: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 17119738035130870988, n_points: 382, n_indices: 1560, n_uvs: None, smooth: false, material: 0 }), placements: 2, shared: false, displaced: false } +provenance mesh slot 2: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 1739488954094729910, n_points: 8, n_indices: 24, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 3: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 6096447469814747168, n_points: 400, n_indices: 1600, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/scene/camera1"), cameras: ["/scene/camera1"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/scene/camera1"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-169.image b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-169.image new file mode 100644 index 000000000..ba4884437 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-169.image @@ -0,0 +1 @@ +640x360 16spp clamp-off 52a1a46f3a46d230 diff --git a/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-17.digest b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-17.digest new file mode 100644 index 000000000..0e859a952 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-17.digest @@ -0,0 +1,40 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/scene/camera1") +camera: Camera { origin: Vec3A(0.0074343784, 1.9913422, 4.0133057), lower_left_corner: Vec3A(-8.881443, -3.0086517, -0.98669434), horizontal: Vec3A(17.777756, 0.0, 0.0), vertical: Vec3A(0.0, 9.999988, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: Some(Vec4(0.0, 0.0, -1.0, 3.9133058)), far: Some(Vec4(0.0, 0.0, 1.0, 9995.986)), planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: None +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 640, height: 360, region: PixelRect { x0: 0, y0: 0, x1: 640, y1: 360 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 12.700017, aperture: [25.4, 25.4], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 5.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/cornellbox.usda"], invisible_overrides: Some(0) } +layer: $DIR/cornellbox.usda +warning: Warning { code: AssetUnsupportedByHost, kind: Skipped, count: 1, prims: [], message: "No asset loader: environment map $DIR/sky_gradient.exr ignored — the dome falls back to its uniform colour. Use Scene::from_usd_with_assets to supply one." } +warning: Warning { code: MaterialFallbackDefault, kind: Skipped, count: 1, prims: ["/scene/Looks/initialShadingGroup"], message: "Material /scene/Looks/initialShadingGroup has no surface shader — using default grey OpenPBR" } +lights: 1 +light 0: dome name Some("/scene/Sky") lpe None pmf 1.0 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 5 geometries, PrimitiveBreakdown { triangles: 822, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 2 } top level, PrimitiveBreakdown { triangles: 1582, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 2 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 4.0 motion [] pieces all=10:88b22fc3345d5b05 camera=10:88b22fc3345d5b05 shadow=10:88b22fc3345d5b05 indirect=10:88b22fc3345d5b05 +geom 1: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.2 motion [] pieces all=760:c2b60a75c52c78b9 camera=760:c2b60a75c52c78b9 shadow=760:c2b60a75c52c78b9 indirect=760:c2b60a75c52c78b9 +geom 2: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=12:94a297badef437e1 camera=12:94a297badef437e1 shadow=12:94a297badef437e1 indirect=12:94a297badef437e1 +geom 3: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.25 motion [] pieces all=800:4a8c9f44d777e131 camera=800:4a8c9f44d777e131 shadow=800:4a8c9f44d777e131 indirect=800:4a8c9f44d777e131 +geom 4: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.3585339 motion [] pieces all=760:2344ecf63e12c441 camera=760:2344ecf63e12c441 shadow=760:2344ecf63e12c441 indirect=760:2344ecf63e12c441 +provenance material /scene/Looks/initialShadingGroup: MaterialOrigin { slots: [0, 1, 2, 3, 4], displaced: false } +provenance light /scene/Sky: LightOrigin { index: 0, geoms: 0..0 } +provenance geometry 0..1: /scene/pCube1 +provenance geometry 1..2: /scene/pSphere1 +provenance geometry 2..3: /scene/pCube2 +provenance geometry 3..4: /scene/pTorus1 +provenance geometry 4..5: /scene/pSphere2 +provenance mesh: MeshOrigin { geom_id: 0, slot: 0, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 1, slot: 1, baked: false, moving: false } +provenance mesh: MeshOrigin { geom_id: 2, slot: 2, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 3, slot: 3, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 4, slot: 1, baked: false, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 12343188411137242430, n_points: 8, n_indices: 20, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 1: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 17119738035130870988, n_points: 382, n_indices: 1560, n_uvs: None, smooth: false, material: 0 }), placements: 2, shared: false, displaced: false } +provenance mesh slot 2: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 1739488954094729910, n_points: 8, n_indices: 24, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 3: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 6096447469814747168, n_points: 400, n_indices: 1600, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/scene/camera1"), cameras: ["/scene/camera1"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/scene/camera1"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-17.image b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-17.image new file mode 100644 index 000000000..ba4884437 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-17.image @@ -0,0 +1 @@ +640x360 16spp clamp-off 52a1a46f3a46d230 diff --git a/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-170.digest b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-170.digest new file mode 100644 index 000000000..0e859a952 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-170.digest @@ -0,0 +1,40 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/scene/camera1") +camera: Camera { origin: Vec3A(0.0074343784, 1.9913422, 4.0133057), lower_left_corner: Vec3A(-8.881443, -3.0086517, -0.98669434), horizontal: Vec3A(17.777756, 0.0, 0.0), vertical: Vec3A(0.0, 9.999988, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: Some(Vec4(0.0, 0.0, -1.0, 3.9133058)), far: Some(Vec4(0.0, 0.0, 1.0, 9995.986)), planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: None +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 640, height: 360, region: PixelRect { x0: 0, y0: 0, x1: 640, y1: 360 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 12.700017, aperture: [25.4, 25.4], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 5.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/cornellbox.usda"], invisible_overrides: Some(0) } +layer: $DIR/cornellbox.usda +warning: Warning { code: AssetUnsupportedByHost, kind: Skipped, count: 1, prims: [], message: "No asset loader: environment map $DIR/sky_gradient.exr ignored — the dome falls back to its uniform colour. Use Scene::from_usd_with_assets to supply one." } +warning: Warning { code: MaterialFallbackDefault, kind: Skipped, count: 1, prims: ["/scene/Looks/initialShadingGroup"], message: "Material /scene/Looks/initialShadingGroup has no surface shader — using default grey OpenPBR" } +lights: 1 +light 0: dome name Some("/scene/Sky") lpe None pmf 1.0 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 5 geometries, PrimitiveBreakdown { triangles: 822, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 2 } top level, PrimitiveBreakdown { triangles: 1582, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 2 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 4.0 motion [] pieces all=10:88b22fc3345d5b05 camera=10:88b22fc3345d5b05 shadow=10:88b22fc3345d5b05 indirect=10:88b22fc3345d5b05 +geom 1: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.2 motion [] pieces all=760:c2b60a75c52c78b9 camera=760:c2b60a75c52c78b9 shadow=760:c2b60a75c52c78b9 indirect=760:c2b60a75c52c78b9 +geom 2: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=12:94a297badef437e1 camera=12:94a297badef437e1 shadow=12:94a297badef437e1 indirect=12:94a297badef437e1 +geom 3: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.25 motion [] pieces all=800:4a8c9f44d777e131 camera=800:4a8c9f44d777e131 shadow=800:4a8c9f44d777e131 indirect=800:4a8c9f44d777e131 +geom 4: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.3585339 motion [] pieces all=760:2344ecf63e12c441 camera=760:2344ecf63e12c441 shadow=760:2344ecf63e12c441 indirect=760:2344ecf63e12c441 +provenance material /scene/Looks/initialShadingGroup: MaterialOrigin { slots: [0, 1, 2, 3, 4], displaced: false } +provenance light /scene/Sky: LightOrigin { index: 0, geoms: 0..0 } +provenance geometry 0..1: /scene/pCube1 +provenance geometry 1..2: /scene/pSphere1 +provenance geometry 2..3: /scene/pCube2 +provenance geometry 3..4: /scene/pTorus1 +provenance geometry 4..5: /scene/pSphere2 +provenance mesh: MeshOrigin { geom_id: 0, slot: 0, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 1, slot: 1, baked: false, moving: false } +provenance mesh: MeshOrigin { geom_id: 2, slot: 2, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 3, slot: 3, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 4, slot: 1, baked: false, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 12343188411137242430, n_points: 8, n_indices: 20, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 1: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 17119738035130870988, n_points: 382, n_indices: 1560, n_uvs: None, smooth: false, material: 0 }), placements: 2, shared: false, displaced: false } +provenance mesh slot 2: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 1739488954094729910, n_points: 8, n_indices: 24, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 3: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 6096447469814747168, n_points: 400, n_indices: 1600, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/scene/camera1"), cameras: ["/scene/camera1"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/scene/camera1"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-170.image b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-170.image new file mode 100644 index 000000000..ba4884437 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-170.image @@ -0,0 +1 @@ +640x360 16spp clamp-off 52a1a46f3a46d230 diff --git a/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-171.digest b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-171.digest new file mode 100644 index 000000000..0e859a952 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-171.digest @@ -0,0 +1,40 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/scene/camera1") +camera: Camera { origin: Vec3A(0.0074343784, 1.9913422, 4.0133057), lower_left_corner: Vec3A(-8.881443, -3.0086517, -0.98669434), horizontal: Vec3A(17.777756, 0.0, 0.0), vertical: Vec3A(0.0, 9.999988, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: Some(Vec4(0.0, 0.0, -1.0, 3.9133058)), far: Some(Vec4(0.0, 0.0, 1.0, 9995.986)), planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: None +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 640, height: 360, region: PixelRect { x0: 0, y0: 0, x1: 640, y1: 360 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 12.700017, aperture: [25.4, 25.4], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 5.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/cornellbox.usda"], invisible_overrides: Some(0) } +layer: $DIR/cornellbox.usda +warning: Warning { code: AssetUnsupportedByHost, kind: Skipped, count: 1, prims: [], message: "No asset loader: environment map $DIR/sky_gradient.exr ignored — the dome falls back to its uniform colour. Use Scene::from_usd_with_assets to supply one." } +warning: Warning { code: MaterialFallbackDefault, kind: Skipped, count: 1, prims: ["/scene/Looks/initialShadingGroup"], message: "Material /scene/Looks/initialShadingGroup has no surface shader — using default grey OpenPBR" } +lights: 1 +light 0: dome name Some("/scene/Sky") lpe None pmf 1.0 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 5 geometries, PrimitiveBreakdown { triangles: 822, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 2 } top level, PrimitiveBreakdown { triangles: 1582, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 2 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 4.0 motion [] pieces all=10:88b22fc3345d5b05 camera=10:88b22fc3345d5b05 shadow=10:88b22fc3345d5b05 indirect=10:88b22fc3345d5b05 +geom 1: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.2 motion [] pieces all=760:c2b60a75c52c78b9 camera=760:c2b60a75c52c78b9 shadow=760:c2b60a75c52c78b9 indirect=760:c2b60a75c52c78b9 +geom 2: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=12:94a297badef437e1 camera=12:94a297badef437e1 shadow=12:94a297badef437e1 indirect=12:94a297badef437e1 +geom 3: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.25 motion [] pieces all=800:4a8c9f44d777e131 camera=800:4a8c9f44d777e131 shadow=800:4a8c9f44d777e131 indirect=800:4a8c9f44d777e131 +geom 4: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.3585339 motion [] pieces all=760:2344ecf63e12c441 camera=760:2344ecf63e12c441 shadow=760:2344ecf63e12c441 indirect=760:2344ecf63e12c441 +provenance material /scene/Looks/initialShadingGroup: MaterialOrigin { slots: [0, 1, 2, 3, 4], displaced: false } +provenance light /scene/Sky: LightOrigin { index: 0, geoms: 0..0 } +provenance geometry 0..1: /scene/pCube1 +provenance geometry 1..2: /scene/pSphere1 +provenance geometry 2..3: /scene/pCube2 +provenance geometry 3..4: /scene/pTorus1 +provenance geometry 4..5: /scene/pSphere2 +provenance mesh: MeshOrigin { geom_id: 0, slot: 0, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 1, slot: 1, baked: false, moving: false } +provenance mesh: MeshOrigin { geom_id: 2, slot: 2, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 3, slot: 3, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 4, slot: 1, baked: false, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 12343188411137242430, n_points: 8, n_indices: 20, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 1: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 17119738035130870988, n_points: 382, n_indices: 1560, n_uvs: None, smooth: false, material: 0 }), placements: 2, shared: false, displaced: false } +provenance mesh slot 2: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 1739488954094729910, n_points: 8, n_indices: 24, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 3: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 6096447469814747168, n_points: 400, n_indices: 1600, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/scene/camera1"), cameras: ["/scene/camera1"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/scene/camera1"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-171.image b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-171.image new file mode 100644 index 000000000..ba4884437 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-171.image @@ -0,0 +1 @@ +640x360 16spp clamp-off 52a1a46f3a46d230 diff --git a/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-172.digest b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-172.digest new file mode 100644 index 000000000..0e859a952 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-172.digest @@ -0,0 +1,40 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/scene/camera1") +camera: Camera { origin: Vec3A(0.0074343784, 1.9913422, 4.0133057), lower_left_corner: Vec3A(-8.881443, -3.0086517, -0.98669434), horizontal: Vec3A(17.777756, 0.0, 0.0), vertical: Vec3A(0.0, 9.999988, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: Some(Vec4(0.0, 0.0, -1.0, 3.9133058)), far: Some(Vec4(0.0, 0.0, 1.0, 9995.986)), planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: None +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 640, height: 360, region: PixelRect { x0: 0, y0: 0, x1: 640, y1: 360 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 12.700017, aperture: [25.4, 25.4], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 5.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/cornellbox.usda"], invisible_overrides: Some(0) } +layer: $DIR/cornellbox.usda +warning: Warning { code: AssetUnsupportedByHost, kind: Skipped, count: 1, prims: [], message: "No asset loader: environment map $DIR/sky_gradient.exr ignored — the dome falls back to its uniform colour. Use Scene::from_usd_with_assets to supply one." } +warning: Warning { code: MaterialFallbackDefault, kind: Skipped, count: 1, prims: ["/scene/Looks/initialShadingGroup"], message: "Material /scene/Looks/initialShadingGroup has no surface shader — using default grey OpenPBR" } +lights: 1 +light 0: dome name Some("/scene/Sky") lpe None pmf 1.0 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 5 geometries, PrimitiveBreakdown { triangles: 822, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 2 } top level, PrimitiveBreakdown { triangles: 1582, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 2 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 4.0 motion [] pieces all=10:88b22fc3345d5b05 camera=10:88b22fc3345d5b05 shadow=10:88b22fc3345d5b05 indirect=10:88b22fc3345d5b05 +geom 1: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.2 motion [] pieces all=760:c2b60a75c52c78b9 camera=760:c2b60a75c52c78b9 shadow=760:c2b60a75c52c78b9 indirect=760:c2b60a75c52c78b9 +geom 2: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=12:94a297badef437e1 camera=12:94a297badef437e1 shadow=12:94a297badef437e1 indirect=12:94a297badef437e1 +geom 3: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.25 motion [] pieces all=800:4a8c9f44d777e131 camera=800:4a8c9f44d777e131 shadow=800:4a8c9f44d777e131 indirect=800:4a8c9f44d777e131 +geom 4: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.3585339 motion [] pieces all=760:2344ecf63e12c441 camera=760:2344ecf63e12c441 shadow=760:2344ecf63e12c441 indirect=760:2344ecf63e12c441 +provenance material /scene/Looks/initialShadingGroup: MaterialOrigin { slots: [0, 1, 2, 3, 4], displaced: false } +provenance light /scene/Sky: LightOrigin { index: 0, geoms: 0..0 } +provenance geometry 0..1: /scene/pCube1 +provenance geometry 1..2: /scene/pSphere1 +provenance geometry 2..3: /scene/pCube2 +provenance geometry 3..4: /scene/pTorus1 +provenance geometry 4..5: /scene/pSphere2 +provenance mesh: MeshOrigin { geom_id: 0, slot: 0, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 1, slot: 1, baked: false, moving: false } +provenance mesh: MeshOrigin { geom_id: 2, slot: 2, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 3, slot: 3, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 4, slot: 1, baked: false, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 12343188411137242430, n_points: 8, n_indices: 20, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 1: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 17119738035130870988, n_points: 382, n_indices: 1560, n_uvs: None, smooth: false, material: 0 }), placements: 2, shared: false, displaced: false } +provenance mesh slot 2: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 1739488954094729910, n_points: 8, n_indices: 24, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 3: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 6096447469814747168, n_points: 400, n_indices: 1600, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/scene/camera1"), cameras: ["/scene/camera1"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/scene/camera1"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-172.image b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-172.image new file mode 100644 index 000000000..ba4884437 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-172.image @@ -0,0 +1 @@ +640x360 16spp clamp-off 52a1a46f3a46d230 diff --git a/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-173.digest b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-173.digest new file mode 100644 index 000000000..0e859a952 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-173.digest @@ -0,0 +1,40 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/scene/camera1") +camera: Camera { origin: Vec3A(0.0074343784, 1.9913422, 4.0133057), lower_left_corner: Vec3A(-8.881443, -3.0086517, -0.98669434), horizontal: Vec3A(17.777756, 0.0, 0.0), vertical: Vec3A(0.0, 9.999988, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: Some(Vec4(0.0, 0.0, -1.0, 3.9133058)), far: Some(Vec4(0.0, 0.0, 1.0, 9995.986)), planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: None +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 640, height: 360, region: PixelRect { x0: 0, y0: 0, x1: 640, y1: 360 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 12.700017, aperture: [25.4, 25.4], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 5.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/cornellbox.usda"], invisible_overrides: Some(0) } +layer: $DIR/cornellbox.usda +warning: Warning { code: AssetUnsupportedByHost, kind: Skipped, count: 1, prims: [], message: "No asset loader: environment map $DIR/sky_gradient.exr ignored — the dome falls back to its uniform colour. Use Scene::from_usd_with_assets to supply one." } +warning: Warning { code: MaterialFallbackDefault, kind: Skipped, count: 1, prims: ["/scene/Looks/initialShadingGroup"], message: "Material /scene/Looks/initialShadingGroup has no surface shader — using default grey OpenPBR" } +lights: 1 +light 0: dome name Some("/scene/Sky") lpe None pmf 1.0 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 5 geometries, PrimitiveBreakdown { triangles: 822, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 2 } top level, PrimitiveBreakdown { triangles: 1582, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 2 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 4.0 motion [] pieces all=10:88b22fc3345d5b05 camera=10:88b22fc3345d5b05 shadow=10:88b22fc3345d5b05 indirect=10:88b22fc3345d5b05 +geom 1: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.2 motion [] pieces all=760:c2b60a75c52c78b9 camera=760:c2b60a75c52c78b9 shadow=760:c2b60a75c52c78b9 indirect=760:c2b60a75c52c78b9 +geom 2: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=12:94a297badef437e1 camera=12:94a297badef437e1 shadow=12:94a297badef437e1 indirect=12:94a297badef437e1 +geom 3: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.25 motion [] pieces all=800:4a8c9f44d777e131 camera=800:4a8c9f44d777e131 shadow=800:4a8c9f44d777e131 indirect=800:4a8c9f44d777e131 +geom 4: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.3585339 motion [] pieces all=760:2344ecf63e12c441 camera=760:2344ecf63e12c441 shadow=760:2344ecf63e12c441 indirect=760:2344ecf63e12c441 +provenance material /scene/Looks/initialShadingGroup: MaterialOrigin { slots: [0, 1, 2, 3, 4], displaced: false } +provenance light /scene/Sky: LightOrigin { index: 0, geoms: 0..0 } +provenance geometry 0..1: /scene/pCube1 +provenance geometry 1..2: /scene/pSphere1 +provenance geometry 2..3: /scene/pCube2 +provenance geometry 3..4: /scene/pTorus1 +provenance geometry 4..5: /scene/pSphere2 +provenance mesh: MeshOrigin { geom_id: 0, slot: 0, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 1, slot: 1, baked: false, moving: false } +provenance mesh: MeshOrigin { geom_id: 2, slot: 2, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 3, slot: 3, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 4, slot: 1, baked: false, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 12343188411137242430, n_points: 8, n_indices: 20, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 1: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 17119738035130870988, n_points: 382, n_indices: 1560, n_uvs: None, smooth: false, material: 0 }), placements: 2, shared: false, displaced: false } +provenance mesh slot 2: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 1739488954094729910, n_points: 8, n_indices: 24, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 3: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 6096447469814747168, n_points: 400, n_indices: 1600, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/scene/camera1"), cameras: ["/scene/camera1"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/scene/camera1"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-173.image b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-173.image new file mode 100644 index 000000000..ba4884437 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-173.image @@ -0,0 +1 @@ +640x360 16spp clamp-off 52a1a46f3a46d230 diff --git a/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-174.digest b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-174.digest new file mode 100644 index 000000000..0e859a952 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-174.digest @@ -0,0 +1,40 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/scene/camera1") +camera: Camera { origin: Vec3A(0.0074343784, 1.9913422, 4.0133057), lower_left_corner: Vec3A(-8.881443, -3.0086517, -0.98669434), horizontal: Vec3A(17.777756, 0.0, 0.0), vertical: Vec3A(0.0, 9.999988, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: Some(Vec4(0.0, 0.0, -1.0, 3.9133058)), far: Some(Vec4(0.0, 0.0, 1.0, 9995.986)), planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: None +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 640, height: 360, region: PixelRect { x0: 0, y0: 0, x1: 640, y1: 360 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 12.700017, aperture: [25.4, 25.4], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 5.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/cornellbox.usda"], invisible_overrides: Some(0) } +layer: $DIR/cornellbox.usda +warning: Warning { code: AssetUnsupportedByHost, kind: Skipped, count: 1, prims: [], message: "No asset loader: environment map $DIR/sky_gradient.exr ignored — the dome falls back to its uniform colour. Use Scene::from_usd_with_assets to supply one." } +warning: Warning { code: MaterialFallbackDefault, kind: Skipped, count: 1, prims: ["/scene/Looks/initialShadingGroup"], message: "Material /scene/Looks/initialShadingGroup has no surface shader — using default grey OpenPBR" } +lights: 1 +light 0: dome name Some("/scene/Sky") lpe None pmf 1.0 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 5 geometries, PrimitiveBreakdown { triangles: 822, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 2 } top level, PrimitiveBreakdown { triangles: 1582, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 2 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 4.0 motion [] pieces all=10:88b22fc3345d5b05 camera=10:88b22fc3345d5b05 shadow=10:88b22fc3345d5b05 indirect=10:88b22fc3345d5b05 +geom 1: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.2 motion [] pieces all=760:c2b60a75c52c78b9 camera=760:c2b60a75c52c78b9 shadow=760:c2b60a75c52c78b9 indirect=760:c2b60a75c52c78b9 +geom 2: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=12:94a297badef437e1 camera=12:94a297badef437e1 shadow=12:94a297badef437e1 indirect=12:94a297badef437e1 +geom 3: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.25 motion [] pieces all=800:4a8c9f44d777e131 camera=800:4a8c9f44d777e131 shadow=800:4a8c9f44d777e131 indirect=800:4a8c9f44d777e131 +geom 4: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.3585339 motion [] pieces all=760:2344ecf63e12c441 camera=760:2344ecf63e12c441 shadow=760:2344ecf63e12c441 indirect=760:2344ecf63e12c441 +provenance material /scene/Looks/initialShadingGroup: MaterialOrigin { slots: [0, 1, 2, 3, 4], displaced: false } +provenance light /scene/Sky: LightOrigin { index: 0, geoms: 0..0 } +provenance geometry 0..1: /scene/pCube1 +provenance geometry 1..2: /scene/pSphere1 +provenance geometry 2..3: /scene/pCube2 +provenance geometry 3..4: /scene/pTorus1 +provenance geometry 4..5: /scene/pSphere2 +provenance mesh: MeshOrigin { geom_id: 0, slot: 0, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 1, slot: 1, baked: false, moving: false } +provenance mesh: MeshOrigin { geom_id: 2, slot: 2, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 3, slot: 3, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 4, slot: 1, baked: false, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 12343188411137242430, n_points: 8, n_indices: 20, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 1: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 17119738035130870988, n_points: 382, n_indices: 1560, n_uvs: None, smooth: false, material: 0 }), placements: 2, shared: false, displaced: false } +provenance mesh slot 2: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 1739488954094729910, n_points: 8, n_indices: 24, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 3: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 6096447469814747168, n_points: 400, n_indices: 1600, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/scene/camera1"), cameras: ["/scene/camera1"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/scene/camera1"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-174.image b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-174.image new file mode 100644 index 000000000..ba4884437 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-174.image @@ -0,0 +1 @@ +640x360 16spp clamp-off 52a1a46f3a46d230 diff --git a/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-175.digest b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-175.digest new file mode 100644 index 000000000..0e859a952 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-175.digest @@ -0,0 +1,40 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/scene/camera1") +camera: Camera { origin: Vec3A(0.0074343784, 1.9913422, 4.0133057), lower_left_corner: Vec3A(-8.881443, -3.0086517, -0.98669434), horizontal: Vec3A(17.777756, 0.0, 0.0), vertical: Vec3A(0.0, 9.999988, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: Some(Vec4(0.0, 0.0, -1.0, 3.9133058)), far: Some(Vec4(0.0, 0.0, 1.0, 9995.986)), planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: None +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 640, height: 360, region: PixelRect { x0: 0, y0: 0, x1: 640, y1: 360 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 12.700017, aperture: [25.4, 25.4], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 5.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/cornellbox.usda"], invisible_overrides: Some(0) } +layer: $DIR/cornellbox.usda +warning: Warning { code: AssetUnsupportedByHost, kind: Skipped, count: 1, prims: [], message: "No asset loader: environment map $DIR/sky_gradient.exr ignored — the dome falls back to its uniform colour. Use Scene::from_usd_with_assets to supply one." } +warning: Warning { code: MaterialFallbackDefault, kind: Skipped, count: 1, prims: ["/scene/Looks/initialShadingGroup"], message: "Material /scene/Looks/initialShadingGroup has no surface shader — using default grey OpenPBR" } +lights: 1 +light 0: dome name Some("/scene/Sky") lpe None pmf 1.0 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 5 geometries, PrimitiveBreakdown { triangles: 822, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 2 } top level, PrimitiveBreakdown { triangles: 1582, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 2 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 4.0 motion [] pieces all=10:88b22fc3345d5b05 camera=10:88b22fc3345d5b05 shadow=10:88b22fc3345d5b05 indirect=10:88b22fc3345d5b05 +geom 1: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.2 motion [] pieces all=760:c2b60a75c52c78b9 camera=760:c2b60a75c52c78b9 shadow=760:c2b60a75c52c78b9 indirect=760:c2b60a75c52c78b9 +geom 2: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=12:94a297badef437e1 camera=12:94a297badef437e1 shadow=12:94a297badef437e1 indirect=12:94a297badef437e1 +geom 3: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.25 motion [] pieces all=800:4a8c9f44d777e131 camera=800:4a8c9f44d777e131 shadow=800:4a8c9f44d777e131 indirect=800:4a8c9f44d777e131 +geom 4: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.3585339 motion [] pieces all=760:2344ecf63e12c441 camera=760:2344ecf63e12c441 shadow=760:2344ecf63e12c441 indirect=760:2344ecf63e12c441 +provenance material /scene/Looks/initialShadingGroup: MaterialOrigin { slots: [0, 1, 2, 3, 4], displaced: false } +provenance light /scene/Sky: LightOrigin { index: 0, geoms: 0..0 } +provenance geometry 0..1: /scene/pCube1 +provenance geometry 1..2: /scene/pSphere1 +provenance geometry 2..3: /scene/pCube2 +provenance geometry 3..4: /scene/pTorus1 +provenance geometry 4..5: /scene/pSphere2 +provenance mesh: MeshOrigin { geom_id: 0, slot: 0, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 1, slot: 1, baked: false, moving: false } +provenance mesh: MeshOrigin { geom_id: 2, slot: 2, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 3, slot: 3, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 4, slot: 1, baked: false, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 12343188411137242430, n_points: 8, n_indices: 20, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 1: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 17119738035130870988, n_points: 382, n_indices: 1560, n_uvs: None, smooth: false, material: 0 }), placements: 2, shared: false, displaced: false } +provenance mesh slot 2: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 1739488954094729910, n_points: 8, n_indices: 24, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 3: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 6096447469814747168, n_points: 400, n_indices: 1600, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/scene/camera1"), cameras: ["/scene/camera1"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/scene/camera1"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-175.image b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-175.image new file mode 100644 index 000000000..ba4884437 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-175.image @@ -0,0 +1 @@ +640x360 16spp clamp-off 52a1a46f3a46d230 diff --git a/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-176.digest b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-176.digest new file mode 100644 index 000000000..0e859a952 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-176.digest @@ -0,0 +1,40 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/scene/camera1") +camera: Camera { origin: Vec3A(0.0074343784, 1.9913422, 4.0133057), lower_left_corner: Vec3A(-8.881443, -3.0086517, -0.98669434), horizontal: Vec3A(17.777756, 0.0, 0.0), vertical: Vec3A(0.0, 9.999988, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: Some(Vec4(0.0, 0.0, -1.0, 3.9133058)), far: Some(Vec4(0.0, 0.0, 1.0, 9995.986)), planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: None +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 640, height: 360, region: PixelRect { x0: 0, y0: 0, x1: 640, y1: 360 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 12.700017, aperture: [25.4, 25.4], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 5.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/cornellbox.usda"], invisible_overrides: Some(0) } +layer: $DIR/cornellbox.usda +warning: Warning { code: AssetUnsupportedByHost, kind: Skipped, count: 1, prims: [], message: "No asset loader: environment map $DIR/sky_gradient.exr ignored — the dome falls back to its uniform colour. Use Scene::from_usd_with_assets to supply one." } +warning: Warning { code: MaterialFallbackDefault, kind: Skipped, count: 1, prims: ["/scene/Looks/initialShadingGroup"], message: "Material /scene/Looks/initialShadingGroup has no surface shader — using default grey OpenPBR" } +lights: 1 +light 0: dome name Some("/scene/Sky") lpe None pmf 1.0 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 5 geometries, PrimitiveBreakdown { triangles: 822, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 2 } top level, PrimitiveBreakdown { triangles: 1582, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 2 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 4.0 motion [] pieces all=10:88b22fc3345d5b05 camera=10:88b22fc3345d5b05 shadow=10:88b22fc3345d5b05 indirect=10:88b22fc3345d5b05 +geom 1: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.2 motion [] pieces all=760:c2b60a75c52c78b9 camera=760:c2b60a75c52c78b9 shadow=760:c2b60a75c52c78b9 indirect=760:c2b60a75c52c78b9 +geom 2: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=12:94a297badef437e1 camera=12:94a297badef437e1 shadow=12:94a297badef437e1 indirect=12:94a297badef437e1 +geom 3: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.25 motion [] pieces all=800:4a8c9f44d777e131 camera=800:4a8c9f44d777e131 shadow=800:4a8c9f44d777e131 indirect=800:4a8c9f44d777e131 +geom 4: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.3585339 motion [] pieces all=760:2344ecf63e12c441 camera=760:2344ecf63e12c441 shadow=760:2344ecf63e12c441 indirect=760:2344ecf63e12c441 +provenance material /scene/Looks/initialShadingGroup: MaterialOrigin { slots: [0, 1, 2, 3, 4], displaced: false } +provenance light /scene/Sky: LightOrigin { index: 0, geoms: 0..0 } +provenance geometry 0..1: /scene/pCube1 +provenance geometry 1..2: /scene/pSphere1 +provenance geometry 2..3: /scene/pCube2 +provenance geometry 3..4: /scene/pTorus1 +provenance geometry 4..5: /scene/pSphere2 +provenance mesh: MeshOrigin { geom_id: 0, slot: 0, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 1, slot: 1, baked: false, moving: false } +provenance mesh: MeshOrigin { geom_id: 2, slot: 2, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 3, slot: 3, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 4, slot: 1, baked: false, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 12343188411137242430, n_points: 8, n_indices: 20, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 1: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 17119738035130870988, n_points: 382, n_indices: 1560, n_uvs: None, smooth: false, material: 0 }), placements: 2, shared: false, displaced: false } +provenance mesh slot 2: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 1739488954094729910, n_points: 8, n_indices: 24, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 3: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 6096447469814747168, n_points: 400, n_indices: 1600, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/scene/camera1"), cameras: ["/scene/camera1"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/scene/camera1"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-176.image b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-176.image new file mode 100644 index 000000000..ba4884437 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-176.image @@ -0,0 +1 @@ +640x360 16spp clamp-off 52a1a46f3a46d230 diff --git a/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-177.digest b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-177.digest new file mode 100644 index 000000000..0e859a952 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-177.digest @@ -0,0 +1,40 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/scene/camera1") +camera: Camera { origin: Vec3A(0.0074343784, 1.9913422, 4.0133057), lower_left_corner: Vec3A(-8.881443, -3.0086517, -0.98669434), horizontal: Vec3A(17.777756, 0.0, 0.0), vertical: Vec3A(0.0, 9.999988, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: Some(Vec4(0.0, 0.0, -1.0, 3.9133058)), far: Some(Vec4(0.0, 0.0, 1.0, 9995.986)), planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: None +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 640, height: 360, region: PixelRect { x0: 0, y0: 0, x1: 640, y1: 360 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 12.700017, aperture: [25.4, 25.4], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 5.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/cornellbox.usda"], invisible_overrides: Some(0) } +layer: $DIR/cornellbox.usda +warning: Warning { code: AssetUnsupportedByHost, kind: Skipped, count: 1, prims: [], message: "No asset loader: environment map $DIR/sky_gradient.exr ignored — the dome falls back to its uniform colour. Use Scene::from_usd_with_assets to supply one." } +warning: Warning { code: MaterialFallbackDefault, kind: Skipped, count: 1, prims: ["/scene/Looks/initialShadingGroup"], message: "Material /scene/Looks/initialShadingGroup has no surface shader — using default grey OpenPBR" } +lights: 1 +light 0: dome name Some("/scene/Sky") lpe None pmf 1.0 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 5 geometries, PrimitiveBreakdown { triangles: 822, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 2 } top level, PrimitiveBreakdown { triangles: 1582, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 2 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 4.0 motion [] pieces all=10:88b22fc3345d5b05 camera=10:88b22fc3345d5b05 shadow=10:88b22fc3345d5b05 indirect=10:88b22fc3345d5b05 +geom 1: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.2 motion [] pieces all=760:c2b60a75c52c78b9 camera=760:c2b60a75c52c78b9 shadow=760:c2b60a75c52c78b9 indirect=760:c2b60a75c52c78b9 +geom 2: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=12:94a297badef437e1 camera=12:94a297badef437e1 shadow=12:94a297badef437e1 indirect=12:94a297badef437e1 +geom 3: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.25 motion [] pieces all=800:4a8c9f44d777e131 camera=800:4a8c9f44d777e131 shadow=800:4a8c9f44d777e131 indirect=800:4a8c9f44d777e131 +geom 4: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.3585339 motion [] pieces all=760:2344ecf63e12c441 camera=760:2344ecf63e12c441 shadow=760:2344ecf63e12c441 indirect=760:2344ecf63e12c441 +provenance material /scene/Looks/initialShadingGroup: MaterialOrigin { slots: [0, 1, 2, 3, 4], displaced: false } +provenance light /scene/Sky: LightOrigin { index: 0, geoms: 0..0 } +provenance geometry 0..1: /scene/pCube1 +provenance geometry 1..2: /scene/pSphere1 +provenance geometry 2..3: /scene/pCube2 +provenance geometry 3..4: /scene/pTorus1 +provenance geometry 4..5: /scene/pSphere2 +provenance mesh: MeshOrigin { geom_id: 0, slot: 0, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 1, slot: 1, baked: false, moving: false } +provenance mesh: MeshOrigin { geom_id: 2, slot: 2, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 3, slot: 3, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 4, slot: 1, baked: false, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 12343188411137242430, n_points: 8, n_indices: 20, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 1: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 17119738035130870988, n_points: 382, n_indices: 1560, n_uvs: None, smooth: false, material: 0 }), placements: 2, shared: false, displaced: false } +provenance mesh slot 2: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 1739488954094729910, n_points: 8, n_indices: 24, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 3: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 6096447469814747168, n_points: 400, n_indices: 1600, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/scene/camera1"), cameras: ["/scene/camera1"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/scene/camera1"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-177.image b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-177.image new file mode 100644 index 000000000..ba4884437 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-177.image @@ -0,0 +1 @@ +640x360 16spp clamp-off 52a1a46f3a46d230 diff --git a/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-178.digest b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-178.digest new file mode 100644 index 000000000..0e859a952 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-178.digest @@ -0,0 +1,40 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/scene/camera1") +camera: Camera { origin: Vec3A(0.0074343784, 1.9913422, 4.0133057), lower_left_corner: Vec3A(-8.881443, -3.0086517, -0.98669434), horizontal: Vec3A(17.777756, 0.0, 0.0), vertical: Vec3A(0.0, 9.999988, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: Some(Vec4(0.0, 0.0, -1.0, 3.9133058)), far: Some(Vec4(0.0, 0.0, 1.0, 9995.986)), planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: None +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 640, height: 360, region: PixelRect { x0: 0, y0: 0, x1: 640, y1: 360 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 12.700017, aperture: [25.4, 25.4], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 5.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/cornellbox.usda"], invisible_overrides: Some(0) } +layer: $DIR/cornellbox.usda +warning: Warning { code: AssetUnsupportedByHost, kind: Skipped, count: 1, prims: [], message: "No asset loader: environment map $DIR/sky_gradient.exr ignored — the dome falls back to its uniform colour. Use Scene::from_usd_with_assets to supply one." } +warning: Warning { code: MaterialFallbackDefault, kind: Skipped, count: 1, prims: ["/scene/Looks/initialShadingGroup"], message: "Material /scene/Looks/initialShadingGroup has no surface shader — using default grey OpenPBR" } +lights: 1 +light 0: dome name Some("/scene/Sky") lpe None pmf 1.0 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 5 geometries, PrimitiveBreakdown { triangles: 822, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 2 } top level, PrimitiveBreakdown { triangles: 1582, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 2 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 4.0 motion [] pieces all=10:88b22fc3345d5b05 camera=10:88b22fc3345d5b05 shadow=10:88b22fc3345d5b05 indirect=10:88b22fc3345d5b05 +geom 1: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.2 motion [] pieces all=760:c2b60a75c52c78b9 camera=760:c2b60a75c52c78b9 shadow=760:c2b60a75c52c78b9 indirect=760:c2b60a75c52c78b9 +geom 2: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=12:94a297badef437e1 camera=12:94a297badef437e1 shadow=12:94a297badef437e1 indirect=12:94a297badef437e1 +geom 3: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.25 motion [] pieces all=800:4a8c9f44d777e131 camera=800:4a8c9f44d777e131 shadow=800:4a8c9f44d777e131 indirect=800:4a8c9f44d777e131 +geom 4: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.3585339 motion [] pieces all=760:2344ecf63e12c441 camera=760:2344ecf63e12c441 shadow=760:2344ecf63e12c441 indirect=760:2344ecf63e12c441 +provenance material /scene/Looks/initialShadingGroup: MaterialOrigin { slots: [0, 1, 2, 3, 4], displaced: false } +provenance light /scene/Sky: LightOrigin { index: 0, geoms: 0..0 } +provenance geometry 0..1: /scene/pCube1 +provenance geometry 1..2: /scene/pSphere1 +provenance geometry 2..3: /scene/pCube2 +provenance geometry 3..4: /scene/pTorus1 +provenance geometry 4..5: /scene/pSphere2 +provenance mesh: MeshOrigin { geom_id: 0, slot: 0, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 1, slot: 1, baked: false, moving: false } +provenance mesh: MeshOrigin { geom_id: 2, slot: 2, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 3, slot: 3, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 4, slot: 1, baked: false, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 12343188411137242430, n_points: 8, n_indices: 20, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 1: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 17119738035130870988, n_points: 382, n_indices: 1560, n_uvs: None, smooth: false, material: 0 }), placements: 2, shared: false, displaced: false } +provenance mesh slot 2: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 1739488954094729910, n_points: 8, n_indices: 24, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 3: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 6096447469814747168, n_points: 400, n_indices: 1600, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/scene/camera1"), cameras: ["/scene/camera1"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/scene/camera1"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-178.image b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-178.image new file mode 100644 index 000000000..ba4884437 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-178.image @@ -0,0 +1 @@ +640x360 16spp clamp-off 52a1a46f3a46d230 diff --git a/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-179.digest b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-179.digest new file mode 100644 index 000000000..0e859a952 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-179.digest @@ -0,0 +1,40 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/scene/camera1") +camera: Camera { origin: Vec3A(0.0074343784, 1.9913422, 4.0133057), lower_left_corner: Vec3A(-8.881443, -3.0086517, -0.98669434), horizontal: Vec3A(17.777756, 0.0, 0.0), vertical: Vec3A(0.0, 9.999988, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: Some(Vec4(0.0, 0.0, -1.0, 3.9133058)), far: Some(Vec4(0.0, 0.0, 1.0, 9995.986)), planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: None +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 640, height: 360, region: PixelRect { x0: 0, y0: 0, x1: 640, y1: 360 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 12.700017, aperture: [25.4, 25.4], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 5.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/cornellbox.usda"], invisible_overrides: Some(0) } +layer: $DIR/cornellbox.usda +warning: Warning { code: AssetUnsupportedByHost, kind: Skipped, count: 1, prims: [], message: "No asset loader: environment map $DIR/sky_gradient.exr ignored — the dome falls back to its uniform colour. Use Scene::from_usd_with_assets to supply one." } +warning: Warning { code: MaterialFallbackDefault, kind: Skipped, count: 1, prims: ["/scene/Looks/initialShadingGroup"], message: "Material /scene/Looks/initialShadingGroup has no surface shader — using default grey OpenPBR" } +lights: 1 +light 0: dome name Some("/scene/Sky") lpe None pmf 1.0 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 5 geometries, PrimitiveBreakdown { triangles: 822, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 2 } top level, PrimitiveBreakdown { triangles: 1582, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 2 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 4.0 motion [] pieces all=10:88b22fc3345d5b05 camera=10:88b22fc3345d5b05 shadow=10:88b22fc3345d5b05 indirect=10:88b22fc3345d5b05 +geom 1: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.2 motion [] pieces all=760:c2b60a75c52c78b9 camera=760:c2b60a75c52c78b9 shadow=760:c2b60a75c52c78b9 indirect=760:c2b60a75c52c78b9 +geom 2: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=12:94a297badef437e1 camera=12:94a297badef437e1 shadow=12:94a297badef437e1 indirect=12:94a297badef437e1 +geom 3: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.25 motion [] pieces all=800:4a8c9f44d777e131 camera=800:4a8c9f44d777e131 shadow=800:4a8c9f44d777e131 indirect=800:4a8c9f44d777e131 +geom 4: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.3585339 motion [] pieces all=760:2344ecf63e12c441 camera=760:2344ecf63e12c441 shadow=760:2344ecf63e12c441 indirect=760:2344ecf63e12c441 +provenance material /scene/Looks/initialShadingGroup: MaterialOrigin { slots: [0, 1, 2, 3, 4], displaced: false } +provenance light /scene/Sky: LightOrigin { index: 0, geoms: 0..0 } +provenance geometry 0..1: /scene/pCube1 +provenance geometry 1..2: /scene/pSphere1 +provenance geometry 2..3: /scene/pCube2 +provenance geometry 3..4: /scene/pTorus1 +provenance geometry 4..5: /scene/pSphere2 +provenance mesh: MeshOrigin { geom_id: 0, slot: 0, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 1, slot: 1, baked: false, moving: false } +provenance mesh: MeshOrigin { geom_id: 2, slot: 2, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 3, slot: 3, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 4, slot: 1, baked: false, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 12343188411137242430, n_points: 8, n_indices: 20, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 1: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 17119738035130870988, n_points: 382, n_indices: 1560, n_uvs: None, smooth: false, material: 0 }), placements: 2, shared: false, displaced: false } +provenance mesh slot 2: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 1739488954094729910, n_points: 8, n_indices: 24, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 3: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 6096447469814747168, n_points: 400, n_indices: 1600, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/scene/camera1"), cameras: ["/scene/camera1"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/scene/camera1"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-179.image b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-179.image new file mode 100644 index 000000000..ba4884437 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-179.image @@ -0,0 +1 @@ +640x360 16spp clamp-off 52a1a46f3a46d230 diff --git a/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-18.digest b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-18.digest new file mode 100644 index 000000000..0e859a952 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-18.digest @@ -0,0 +1,40 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/scene/camera1") +camera: Camera { origin: Vec3A(0.0074343784, 1.9913422, 4.0133057), lower_left_corner: Vec3A(-8.881443, -3.0086517, -0.98669434), horizontal: Vec3A(17.777756, 0.0, 0.0), vertical: Vec3A(0.0, 9.999988, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: Some(Vec4(0.0, 0.0, -1.0, 3.9133058)), far: Some(Vec4(0.0, 0.0, 1.0, 9995.986)), planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: None +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 640, height: 360, region: PixelRect { x0: 0, y0: 0, x1: 640, y1: 360 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 12.700017, aperture: [25.4, 25.4], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 5.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/cornellbox.usda"], invisible_overrides: Some(0) } +layer: $DIR/cornellbox.usda +warning: Warning { code: AssetUnsupportedByHost, kind: Skipped, count: 1, prims: [], message: "No asset loader: environment map $DIR/sky_gradient.exr ignored — the dome falls back to its uniform colour. Use Scene::from_usd_with_assets to supply one." } +warning: Warning { code: MaterialFallbackDefault, kind: Skipped, count: 1, prims: ["/scene/Looks/initialShadingGroup"], message: "Material /scene/Looks/initialShadingGroup has no surface shader — using default grey OpenPBR" } +lights: 1 +light 0: dome name Some("/scene/Sky") lpe None pmf 1.0 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 5 geometries, PrimitiveBreakdown { triangles: 822, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 2 } top level, PrimitiveBreakdown { triangles: 1582, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 2 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 4.0 motion [] pieces all=10:88b22fc3345d5b05 camera=10:88b22fc3345d5b05 shadow=10:88b22fc3345d5b05 indirect=10:88b22fc3345d5b05 +geom 1: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.2 motion [] pieces all=760:c2b60a75c52c78b9 camera=760:c2b60a75c52c78b9 shadow=760:c2b60a75c52c78b9 indirect=760:c2b60a75c52c78b9 +geom 2: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=12:94a297badef437e1 camera=12:94a297badef437e1 shadow=12:94a297badef437e1 indirect=12:94a297badef437e1 +geom 3: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.25 motion [] pieces all=800:4a8c9f44d777e131 camera=800:4a8c9f44d777e131 shadow=800:4a8c9f44d777e131 indirect=800:4a8c9f44d777e131 +geom 4: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.3585339 motion [] pieces all=760:2344ecf63e12c441 camera=760:2344ecf63e12c441 shadow=760:2344ecf63e12c441 indirect=760:2344ecf63e12c441 +provenance material /scene/Looks/initialShadingGroup: MaterialOrigin { slots: [0, 1, 2, 3, 4], displaced: false } +provenance light /scene/Sky: LightOrigin { index: 0, geoms: 0..0 } +provenance geometry 0..1: /scene/pCube1 +provenance geometry 1..2: /scene/pSphere1 +provenance geometry 2..3: /scene/pCube2 +provenance geometry 3..4: /scene/pTorus1 +provenance geometry 4..5: /scene/pSphere2 +provenance mesh: MeshOrigin { geom_id: 0, slot: 0, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 1, slot: 1, baked: false, moving: false } +provenance mesh: MeshOrigin { geom_id: 2, slot: 2, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 3, slot: 3, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 4, slot: 1, baked: false, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 12343188411137242430, n_points: 8, n_indices: 20, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 1: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 17119738035130870988, n_points: 382, n_indices: 1560, n_uvs: None, smooth: false, material: 0 }), placements: 2, shared: false, displaced: false } +provenance mesh slot 2: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 1739488954094729910, n_points: 8, n_indices: 24, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 3: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 6096447469814747168, n_points: 400, n_indices: 1600, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/scene/camera1"), cameras: ["/scene/camera1"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/scene/camera1"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-18.image b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-18.image new file mode 100644 index 000000000..ba4884437 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-18.image @@ -0,0 +1 @@ +640x360 16spp clamp-off 52a1a46f3a46d230 diff --git a/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-180.digest b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-180.digest new file mode 100644 index 000000000..0e859a952 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-180.digest @@ -0,0 +1,40 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/scene/camera1") +camera: Camera { origin: Vec3A(0.0074343784, 1.9913422, 4.0133057), lower_left_corner: Vec3A(-8.881443, -3.0086517, -0.98669434), horizontal: Vec3A(17.777756, 0.0, 0.0), vertical: Vec3A(0.0, 9.999988, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: Some(Vec4(0.0, 0.0, -1.0, 3.9133058)), far: Some(Vec4(0.0, 0.0, 1.0, 9995.986)), planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: None +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 640, height: 360, region: PixelRect { x0: 0, y0: 0, x1: 640, y1: 360 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 12.700017, aperture: [25.4, 25.4], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 5.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/cornellbox.usda"], invisible_overrides: Some(0) } +layer: $DIR/cornellbox.usda +warning: Warning { code: AssetUnsupportedByHost, kind: Skipped, count: 1, prims: [], message: "No asset loader: environment map $DIR/sky_gradient.exr ignored — the dome falls back to its uniform colour. Use Scene::from_usd_with_assets to supply one." } +warning: Warning { code: MaterialFallbackDefault, kind: Skipped, count: 1, prims: ["/scene/Looks/initialShadingGroup"], message: "Material /scene/Looks/initialShadingGroup has no surface shader — using default grey OpenPBR" } +lights: 1 +light 0: dome name Some("/scene/Sky") lpe None pmf 1.0 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 5 geometries, PrimitiveBreakdown { triangles: 822, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 2 } top level, PrimitiveBreakdown { triangles: 1582, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 2 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 4.0 motion [] pieces all=10:88b22fc3345d5b05 camera=10:88b22fc3345d5b05 shadow=10:88b22fc3345d5b05 indirect=10:88b22fc3345d5b05 +geom 1: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.2 motion [] pieces all=760:c2b60a75c52c78b9 camera=760:c2b60a75c52c78b9 shadow=760:c2b60a75c52c78b9 indirect=760:c2b60a75c52c78b9 +geom 2: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=12:94a297badef437e1 camera=12:94a297badef437e1 shadow=12:94a297badef437e1 indirect=12:94a297badef437e1 +geom 3: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.25 motion [] pieces all=800:4a8c9f44d777e131 camera=800:4a8c9f44d777e131 shadow=800:4a8c9f44d777e131 indirect=800:4a8c9f44d777e131 +geom 4: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.3585339 motion [] pieces all=760:2344ecf63e12c441 camera=760:2344ecf63e12c441 shadow=760:2344ecf63e12c441 indirect=760:2344ecf63e12c441 +provenance material /scene/Looks/initialShadingGroup: MaterialOrigin { slots: [0, 1, 2, 3, 4], displaced: false } +provenance light /scene/Sky: LightOrigin { index: 0, geoms: 0..0 } +provenance geometry 0..1: /scene/pCube1 +provenance geometry 1..2: /scene/pSphere1 +provenance geometry 2..3: /scene/pCube2 +provenance geometry 3..4: /scene/pTorus1 +provenance geometry 4..5: /scene/pSphere2 +provenance mesh: MeshOrigin { geom_id: 0, slot: 0, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 1, slot: 1, baked: false, moving: false } +provenance mesh: MeshOrigin { geom_id: 2, slot: 2, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 3, slot: 3, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 4, slot: 1, baked: false, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 12343188411137242430, n_points: 8, n_indices: 20, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 1: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 17119738035130870988, n_points: 382, n_indices: 1560, n_uvs: None, smooth: false, material: 0 }), placements: 2, shared: false, displaced: false } +provenance mesh slot 2: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 1739488954094729910, n_points: 8, n_indices: 24, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 3: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 6096447469814747168, n_points: 400, n_indices: 1600, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/scene/camera1"), cameras: ["/scene/camera1"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/scene/camera1"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-180.image b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-180.image new file mode 100644 index 000000000..ba4884437 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-180.image @@ -0,0 +1 @@ +640x360 16spp clamp-off 52a1a46f3a46d230 diff --git a/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-181.digest b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-181.digest new file mode 100644 index 000000000..0e859a952 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-181.digest @@ -0,0 +1,40 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/scene/camera1") +camera: Camera { origin: Vec3A(0.0074343784, 1.9913422, 4.0133057), lower_left_corner: Vec3A(-8.881443, -3.0086517, -0.98669434), horizontal: Vec3A(17.777756, 0.0, 0.0), vertical: Vec3A(0.0, 9.999988, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: Some(Vec4(0.0, 0.0, -1.0, 3.9133058)), far: Some(Vec4(0.0, 0.0, 1.0, 9995.986)), planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: None +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 640, height: 360, region: PixelRect { x0: 0, y0: 0, x1: 640, y1: 360 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 12.700017, aperture: [25.4, 25.4], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 5.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/cornellbox.usda"], invisible_overrides: Some(0) } +layer: $DIR/cornellbox.usda +warning: Warning { code: AssetUnsupportedByHost, kind: Skipped, count: 1, prims: [], message: "No asset loader: environment map $DIR/sky_gradient.exr ignored — the dome falls back to its uniform colour. Use Scene::from_usd_with_assets to supply one." } +warning: Warning { code: MaterialFallbackDefault, kind: Skipped, count: 1, prims: ["/scene/Looks/initialShadingGroup"], message: "Material /scene/Looks/initialShadingGroup has no surface shader — using default grey OpenPBR" } +lights: 1 +light 0: dome name Some("/scene/Sky") lpe None pmf 1.0 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 5 geometries, PrimitiveBreakdown { triangles: 822, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 2 } top level, PrimitiveBreakdown { triangles: 1582, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 2 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 4.0 motion [] pieces all=10:88b22fc3345d5b05 camera=10:88b22fc3345d5b05 shadow=10:88b22fc3345d5b05 indirect=10:88b22fc3345d5b05 +geom 1: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.2 motion [] pieces all=760:c2b60a75c52c78b9 camera=760:c2b60a75c52c78b9 shadow=760:c2b60a75c52c78b9 indirect=760:c2b60a75c52c78b9 +geom 2: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=12:94a297badef437e1 camera=12:94a297badef437e1 shadow=12:94a297badef437e1 indirect=12:94a297badef437e1 +geom 3: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.25 motion [] pieces all=800:4a8c9f44d777e131 camera=800:4a8c9f44d777e131 shadow=800:4a8c9f44d777e131 indirect=800:4a8c9f44d777e131 +geom 4: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.3585339 motion [] pieces all=760:2344ecf63e12c441 camera=760:2344ecf63e12c441 shadow=760:2344ecf63e12c441 indirect=760:2344ecf63e12c441 +provenance material /scene/Looks/initialShadingGroup: MaterialOrigin { slots: [0, 1, 2, 3, 4], displaced: false } +provenance light /scene/Sky: LightOrigin { index: 0, geoms: 0..0 } +provenance geometry 0..1: /scene/pCube1 +provenance geometry 1..2: /scene/pSphere1 +provenance geometry 2..3: /scene/pCube2 +provenance geometry 3..4: /scene/pTorus1 +provenance geometry 4..5: /scene/pSphere2 +provenance mesh: MeshOrigin { geom_id: 0, slot: 0, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 1, slot: 1, baked: false, moving: false } +provenance mesh: MeshOrigin { geom_id: 2, slot: 2, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 3, slot: 3, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 4, slot: 1, baked: false, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 12343188411137242430, n_points: 8, n_indices: 20, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 1: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 17119738035130870988, n_points: 382, n_indices: 1560, n_uvs: None, smooth: false, material: 0 }), placements: 2, shared: false, displaced: false } +provenance mesh slot 2: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 1739488954094729910, n_points: 8, n_indices: 24, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 3: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 6096447469814747168, n_points: 400, n_indices: 1600, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/scene/camera1"), cameras: ["/scene/camera1"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/scene/camera1"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-181.image b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-181.image new file mode 100644 index 000000000..ba4884437 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-181.image @@ -0,0 +1 @@ +640x360 16spp clamp-off 52a1a46f3a46d230 diff --git a/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-182.digest b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-182.digest new file mode 100644 index 000000000..0e859a952 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-182.digest @@ -0,0 +1,40 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/scene/camera1") +camera: Camera { origin: Vec3A(0.0074343784, 1.9913422, 4.0133057), lower_left_corner: Vec3A(-8.881443, -3.0086517, -0.98669434), horizontal: Vec3A(17.777756, 0.0, 0.0), vertical: Vec3A(0.0, 9.999988, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: Some(Vec4(0.0, 0.0, -1.0, 3.9133058)), far: Some(Vec4(0.0, 0.0, 1.0, 9995.986)), planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: None +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 640, height: 360, region: PixelRect { x0: 0, y0: 0, x1: 640, y1: 360 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 12.700017, aperture: [25.4, 25.4], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 5.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/cornellbox.usda"], invisible_overrides: Some(0) } +layer: $DIR/cornellbox.usda +warning: Warning { code: AssetUnsupportedByHost, kind: Skipped, count: 1, prims: [], message: "No asset loader: environment map $DIR/sky_gradient.exr ignored — the dome falls back to its uniform colour. Use Scene::from_usd_with_assets to supply one." } +warning: Warning { code: MaterialFallbackDefault, kind: Skipped, count: 1, prims: ["/scene/Looks/initialShadingGroup"], message: "Material /scene/Looks/initialShadingGroup has no surface shader — using default grey OpenPBR" } +lights: 1 +light 0: dome name Some("/scene/Sky") lpe None pmf 1.0 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 5 geometries, PrimitiveBreakdown { triangles: 822, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 2 } top level, PrimitiveBreakdown { triangles: 1582, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 2 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 4.0 motion [] pieces all=10:88b22fc3345d5b05 camera=10:88b22fc3345d5b05 shadow=10:88b22fc3345d5b05 indirect=10:88b22fc3345d5b05 +geom 1: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.2 motion [] pieces all=760:c2b60a75c52c78b9 camera=760:c2b60a75c52c78b9 shadow=760:c2b60a75c52c78b9 indirect=760:c2b60a75c52c78b9 +geom 2: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=12:94a297badef437e1 camera=12:94a297badef437e1 shadow=12:94a297badef437e1 indirect=12:94a297badef437e1 +geom 3: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.25 motion [] pieces all=800:4a8c9f44d777e131 camera=800:4a8c9f44d777e131 shadow=800:4a8c9f44d777e131 indirect=800:4a8c9f44d777e131 +geom 4: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.3585339 motion [] pieces all=760:2344ecf63e12c441 camera=760:2344ecf63e12c441 shadow=760:2344ecf63e12c441 indirect=760:2344ecf63e12c441 +provenance material /scene/Looks/initialShadingGroup: MaterialOrigin { slots: [0, 1, 2, 3, 4], displaced: false } +provenance light /scene/Sky: LightOrigin { index: 0, geoms: 0..0 } +provenance geometry 0..1: /scene/pCube1 +provenance geometry 1..2: /scene/pSphere1 +provenance geometry 2..3: /scene/pCube2 +provenance geometry 3..4: /scene/pTorus1 +provenance geometry 4..5: /scene/pSphere2 +provenance mesh: MeshOrigin { geom_id: 0, slot: 0, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 1, slot: 1, baked: false, moving: false } +provenance mesh: MeshOrigin { geom_id: 2, slot: 2, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 3, slot: 3, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 4, slot: 1, baked: false, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 12343188411137242430, n_points: 8, n_indices: 20, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 1: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 17119738035130870988, n_points: 382, n_indices: 1560, n_uvs: None, smooth: false, material: 0 }), placements: 2, shared: false, displaced: false } +provenance mesh slot 2: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 1739488954094729910, n_points: 8, n_indices: 24, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 3: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 6096447469814747168, n_points: 400, n_indices: 1600, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/scene/camera1"), cameras: ["/scene/camera1"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/scene/camera1"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-182.image b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-182.image new file mode 100644 index 000000000..ba4884437 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-182.image @@ -0,0 +1 @@ +640x360 16spp clamp-off 52a1a46f3a46d230 diff --git a/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-183.digest b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-183.digest new file mode 100644 index 000000000..0e859a952 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-183.digest @@ -0,0 +1,40 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/scene/camera1") +camera: Camera { origin: Vec3A(0.0074343784, 1.9913422, 4.0133057), lower_left_corner: Vec3A(-8.881443, -3.0086517, -0.98669434), horizontal: Vec3A(17.777756, 0.0, 0.0), vertical: Vec3A(0.0, 9.999988, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: Some(Vec4(0.0, 0.0, -1.0, 3.9133058)), far: Some(Vec4(0.0, 0.0, 1.0, 9995.986)), planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: None +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 640, height: 360, region: PixelRect { x0: 0, y0: 0, x1: 640, y1: 360 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 12.700017, aperture: [25.4, 25.4], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 5.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/cornellbox.usda"], invisible_overrides: Some(0) } +layer: $DIR/cornellbox.usda +warning: Warning { code: AssetUnsupportedByHost, kind: Skipped, count: 1, prims: [], message: "No asset loader: environment map $DIR/sky_gradient.exr ignored — the dome falls back to its uniform colour. Use Scene::from_usd_with_assets to supply one." } +warning: Warning { code: MaterialFallbackDefault, kind: Skipped, count: 1, prims: ["/scene/Looks/initialShadingGroup"], message: "Material /scene/Looks/initialShadingGroup has no surface shader — using default grey OpenPBR" } +lights: 1 +light 0: dome name Some("/scene/Sky") lpe None pmf 1.0 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 5 geometries, PrimitiveBreakdown { triangles: 822, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 2 } top level, PrimitiveBreakdown { triangles: 1582, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 2 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 4.0 motion [] pieces all=10:88b22fc3345d5b05 camera=10:88b22fc3345d5b05 shadow=10:88b22fc3345d5b05 indirect=10:88b22fc3345d5b05 +geom 1: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.2 motion [] pieces all=760:c2b60a75c52c78b9 camera=760:c2b60a75c52c78b9 shadow=760:c2b60a75c52c78b9 indirect=760:c2b60a75c52c78b9 +geom 2: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=12:94a297badef437e1 camera=12:94a297badef437e1 shadow=12:94a297badef437e1 indirect=12:94a297badef437e1 +geom 3: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.25 motion [] pieces all=800:4a8c9f44d777e131 camera=800:4a8c9f44d777e131 shadow=800:4a8c9f44d777e131 indirect=800:4a8c9f44d777e131 +geom 4: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.3585339 motion [] pieces all=760:2344ecf63e12c441 camera=760:2344ecf63e12c441 shadow=760:2344ecf63e12c441 indirect=760:2344ecf63e12c441 +provenance material /scene/Looks/initialShadingGroup: MaterialOrigin { slots: [0, 1, 2, 3, 4], displaced: false } +provenance light /scene/Sky: LightOrigin { index: 0, geoms: 0..0 } +provenance geometry 0..1: /scene/pCube1 +provenance geometry 1..2: /scene/pSphere1 +provenance geometry 2..3: /scene/pCube2 +provenance geometry 3..4: /scene/pTorus1 +provenance geometry 4..5: /scene/pSphere2 +provenance mesh: MeshOrigin { geom_id: 0, slot: 0, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 1, slot: 1, baked: false, moving: false } +provenance mesh: MeshOrigin { geom_id: 2, slot: 2, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 3, slot: 3, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 4, slot: 1, baked: false, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 12343188411137242430, n_points: 8, n_indices: 20, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 1: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 17119738035130870988, n_points: 382, n_indices: 1560, n_uvs: None, smooth: false, material: 0 }), placements: 2, shared: false, displaced: false } +provenance mesh slot 2: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 1739488954094729910, n_points: 8, n_indices: 24, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 3: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 6096447469814747168, n_points: 400, n_indices: 1600, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/scene/camera1"), cameras: ["/scene/camera1"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/scene/camera1"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-183.image b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-183.image new file mode 100644 index 000000000..ba4884437 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-183.image @@ -0,0 +1 @@ +640x360 16spp clamp-off 52a1a46f3a46d230 diff --git a/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-184.digest b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-184.digest new file mode 100644 index 000000000..0e859a952 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-184.digest @@ -0,0 +1,40 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/scene/camera1") +camera: Camera { origin: Vec3A(0.0074343784, 1.9913422, 4.0133057), lower_left_corner: Vec3A(-8.881443, -3.0086517, -0.98669434), horizontal: Vec3A(17.777756, 0.0, 0.0), vertical: Vec3A(0.0, 9.999988, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: Some(Vec4(0.0, 0.0, -1.0, 3.9133058)), far: Some(Vec4(0.0, 0.0, 1.0, 9995.986)), planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: None +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 640, height: 360, region: PixelRect { x0: 0, y0: 0, x1: 640, y1: 360 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 12.700017, aperture: [25.4, 25.4], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 5.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/cornellbox.usda"], invisible_overrides: Some(0) } +layer: $DIR/cornellbox.usda +warning: Warning { code: AssetUnsupportedByHost, kind: Skipped, count: 1, prims: [], message: "No asset loader: environment map $DIR/sky_gradient.exr ignored — the dome falls back to its uniform colour. Use Scene::from_usd_with_assets to supply one." } +warning: Warning { code: MaterialFallbackDefault, kind: Skipped, count: 1, prims: ["/scene/Looks/initialShadingGroup"], message: "Material /scene/Looks/initialShadingGroup has no surface shader — using default grey OpenPBR" } +lights: 1 +light 0: dome name Some("/scene/Sky") lpe None pmf 1.0 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 5 geometries, PrimitiveBreakdown { triangles: 822, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 2 } top level, PrimitiveBreakdown { triangles: 1582, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 2 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 4.0 motion [] pieces all=10:88b22fc3345d5b05 camera=10:88b22fc3345d5b05 shadow=10:88b22fc3345d5b05 indirect=10:88b22fc3345d5b05 +geom 1: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.2 motion [] pieces all=760:c2b60a75c52c78b9 camera=760:c2b60a75c52c78b9 shadow=760:c2b60a75c52c78b9 indirect=760:c2b60a75c52c78b9 +geom 2: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=12:94a297badef437e1 camera=12:94a297badef437e1 shadow=12:94a297badef437e1 indirect=12:94a297badef437e1 +geom 3: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.25 motion [] pieces all=800:4a8c9f44d777e131 camera=800:4a8c9f44d777e131 shadow=800:4a8c9f44d777e131 indirect=800:4a8c9f44d777e131 +geom 4: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.3585339 motion [] pieces all=760:2344ecf63e12c441 camera=760:2344ecf63e12c441 shadow=760:2344ecf63e12c441 indirect=760:2344ecf63e12c441 +provenance material /scene/Looks/initialShadingGroup: MaterialOrigin { slots: [0, 1, 2, 3, 4], displaced: false } +provenance light /scene/Sky: LightOrigin { index: 0, geoms: 0..0 } +provenance geometry 0..1: /scene/pCube1 +provenance geometry 1..2: /scene/pSphere1 +provenance geometry 2..3: /scene/pCube2 +provenance geometry 3..4: /scene/pTorus1 +provenance geometry 4..5: /scene/pSphere2 +provenance mesh: MeshOrigin { geom_id: 0, slot: 0, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 1, slot: 1, baked: false, moving: false } +provenance mesh: MeshOrigin { geom_id: 2, slot: 2, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 3, slot: 3, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 4, slot: 1, baked: false, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 12343188411137242430, n_points: 8, n_indices: 20, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 1: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 17119738035130870988, n_points: 382, n_indices: 1560, n_uvs: None, smooth: false, material: 0 }), placements: 2, shared: false, displaced: false } +provenance mesh slot 2: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 1739488954094729910, n_points: 8, n_indices: 24, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 3: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 6096447469814747168, n_points: 400, n_indices: 1600, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/scene/camera1"), cameras: ["/scene/camera1"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/scene/camera1"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-184.image b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-184.image new file mode 100644 index 000000000..ba4884437 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-184.image @@ -0,0 +1 @@ +640x360 16spp clamp-off 52a1a46f3a46d230 diff --git a/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-185.digest b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-185.digest new file mode 100644 index 000000000..0e859a952 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-185.digest @@ -0,0 +1,40 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/scene/camera1") +camera: Camera { origin: Vec3A(0.0074343784, 1.9913422, 4.0133057), lower_left_corner: Vec3A(-8.881443, -3.0086517, -0.98669434), horizontal: Vec3A(17.777756, 0.0, 0.0), vertical: Vec3A(0.0, 9.999988, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: Some(Vec4(0.0, 0.0, -1.0, 3.9133058)), far: Some(Vec4(0.0, 0.0, 1.0, 9995.986)), planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: None +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 640, height: 360, region: PixelRect { x0: 0, y0: 0, x1: 640, y1: 360 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 12.700017, aperture: [25.4, 25.4], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 5.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/cornellbox.usda"], invisible_overrides: Some(0) } +layer: $DIR/cornellbox.usda +warning: Warning { code: AssetUnsupportedByHost, kind: Skipped, count: 1, prims: [], message: "No asset loader: environment map $DIR/sky_gradient.exr ignored — the dome falls back to its uniform colour. Use Scene::from_usd_with_assets to supply one." } +warning: Warning { code: MaterialFallbackDefault, kind: Skipped, count: 1, prims: ["/scene/Looks/initialShadingGroup"], message: "Material /scene/Looks/initialShadingGroup has no surface shader — using default grey OpenPBR" } +lights: 1 +light 0: dome name Some("/scene/Sky") lpe None pmf 1.0 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 5 geometries, PrimitiveBreakdown { triangles: 822, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 2 } top level, PrimitiveBreakdown { triangles: 1582, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 2 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 4.0 motion [] pieces all=10:88b22fc3345d5b05 camera=10:88b22fc3345d5b05 shadow=10:88b22fc3345d5b05 indirect=10:88b22fc3345d5b05 +geom 1: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.2 motion [] pieces all=760:c2b60a75c52c78b9 camera=760:c2b60a75c52c78b9 shadow=760:c2b60a75c52c78b9 indirect=760:c2b60a75c52c78b9 +geom 2: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=12:94a297badef437e1 camera=12:94a297badef437e1 shadow=12:94a297badef437e1 indirect=12:94a297badef437e1 +geom 3: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.25 motion [] pieces all=800:4a8c9f44d777e131 camera=800:4a8c9f44d777e131 shadow=800:4a8c9f44d777e131 indirect=800:4a8c9f44d777e131 +geom 4: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.3585339 motion [] pieces all=760:2344ecf63e12c441 camera=760:2344ecf63e12c441 shadow=760:2344ecf63e12c441 indirect=760:2344ecf63e12c441 +provenance material /scene/Looks/initialShadingGroup: MaterialOrigin { slots: [0, 1, 2, 3, 4], displaced: false } +provenance light /scene/Sky: LightOrigin { index: 0, geoms: 0..0 } +provenance geometry 0..1: /scene/pCube1 +provenance geometry 1..2: /scene/pSphere1 +provenance geometry 2..3: /scene/pCube2 +provenance geometry 3..4: /scene/pTorus1 +provenance geometry 4..5: /scene/pSphere2 +provenance mesh: MeshOrigin { geom_id: 0, slot: 0, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 1, slot: 1, baked: false, moving: false } +provenance mesh: MeshOrigin { geom_id: 2, slot: 2, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 3, slot: 3, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 4, slot: 1, baked: false, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 12343188411137242430, n_points: 8, n_indices: 20, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 1: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 17119738035130870988, n_points: 382, n_indices: 1560, n_uvs: None, smooth: false, material: 0 }), placements: 2, shared: false, displaced: false } +provenance mesh slot 2: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 1739488954094729910, n_points: 8, n_indices: 24, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 3: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 6096447469814747168, n_points: 400, n_indices: 1600, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/scene/camera1"), cameras: ["/scene/camera1"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/scene/camera1"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-185.image b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-185.image new file mode 100644 index 000000000..ba4884437 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-185.image @@ -0,0 +1 @@ +640x360 16spp clamp-off 52a1a46f3a46d230 diff --git a/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-186.digest b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-186.digest new file mode 100644 index 000000000..0e859a952 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-186.digest @@ -0,0 +1,40 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/scene/camera1") +camera: Camera { origin: Vec3A(0.0074343784, 1.9913422, 4.0133057), lower_left_corner: Vec3A(-8.881443, -3.0086517, -0.98669434), horizontal: Vec3A(17.777756, 0.0, 0.0), vertical: Vec3A(0.0, 9.999988, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: Some(Vec4(0.0, 0.0, -1.0, 3.9133058)), far: Some(Vec4(0.0, 0.0, 1.0, 9995.986)), planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: None +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 640, height: 360, region: PixelRect { x0: 0, y0: 0, x1: 640, y1: 360 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 12.700017, aperture: [25.4, 25.4], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 5.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/cornellbox.usda"], invisible_overrides: Some(0) } +layer: $DIR/cornellbox.usda +warning: Warning { code: AssetUnsupportedByHost, kind: Skipped, count: 1, prims: [], message: "No asset loader: environment map $DIR/sky_gradient.exr ignored — the dome falls back to its uniform colour. Use Scene::from_usd_with_assets to supply one." } +warning: Warning { code: MaterialFallbackDefault, kind: Skipped, count: 1, prims: ["/scene/Looks/initialShadingGroup"], message: "Material /scene/Looks/initialShadingGroup has no surface shader — using default grey OpenPBR" } +lights: 1 +light 0: dome name Some("/scene/Sky") lpe None pmf 1.0 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 5 geometries, PrimitiveBreakdown { triangles: 822, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 2 } top level, PrimitiveBreakdown { triangles: 1582, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 2 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 4.0 motion [] pieces all=10:88b22fc3345d5b05 camera=10:88b22fc3345d5b05 shadow=10:88b22fc3345d5b05 indirect=10:88b22fc3345d5b05 +geom 1: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.2 motion [] pieces all=760:c2b60a75c52c78b9 camera=760:c2b60a75c52c78b9 shadow=760:c2b60a75c52c78b9 indirect=760:c2b60a75c52c78b9 +geom 2: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=12:94a297badef437e1 camera=12:94a297badef437e1 shadow=12:94a297badef437e1 indirect=12:94a297badef437e1 +geom 3: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.25 motion [] pieces all=800:4a8c9f44d777e131 camera=800:4a8c9f44d777e131 shadow=800:4a8c9f44d777e131 indirect=800:4a8c9f44d777e131 +geom 4: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.3585339 motion [] pieces all=760:2344ecf63e12c441 camera=760:2344ecf63e12c441 shadow=760:2344ecf63e12c441 indirect=760:2344ecf63e12c441 +provenance material /scene/Looks/initialShadingGroup: MaterialOrigin { slots: [0, 1, 2, 3, 4], displaced: false } +provenance light /scene/Sky: LightOrigin { index: 0, geoms: 0..0 } +provenance geometry 0..1: /scene/pCube1 +provenance geometry 1..2: /scene/pSphere1 +provenance geometry 2..3: /scene/pCube2 +provenance geometry 3..4: /scene/pTorus1 +provenance geometry 4..5: /scene/pSphere2 +provenance mesh: MeshOrigin { geom_id: 0, slot: 0, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 1, slot: 1, baked: false, moving: false } +provenance mesh: MeshOrigin { geom_id: 2, slot: 2, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 3, slot: 3, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 4, slot: 1, baked: false, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 12343188411137242430, n_points: 8, n_indices: 20, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 1: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 17119738035130870988, n_points: 382, n_indices: 1560, n_uvs: None, smooth: false, material: 0 }), placements: 2, shared: false, displaced: false } +provenance mesh slot 2: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 1739488954094729910, n_points: 8, n_indices: 24, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 3: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 6096447469814747168, n_points: 400, n_indices: 1600, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/scene/camera1"), cameras: ["/scene/camera1"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/scene/camera1"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-186.image b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-186.image new file mode 100644 index 000000000..ba4884437 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-186.image @@ -0,0 +1 @@ +640x360 16spp clamp-off 52a1a46f3a46d230 diff --git a/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-187.digest b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-187.digest new file mode 100644 index 000000000..0e859a952 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-187.digest @@ -0,0 +1,40 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/scene/camera1") +camera: Camera { origin: Vec3A(0.0074343784, 1.9913422, 4.0133057), lower_left_corner: Vec3A(-8.881443, -3.0086517, -0.98669434), horizontal: Vec3A(17.777756, 0.0, 0.0), vertical: Vec3A(0.0, 9.999988, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: Some(Vec4(0.0, 0.0, -1.0, 3.9133058)), far: Some(Vec4(0.0, 0.0, 1.0, 9995.986)), planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: None +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 640, height: 360, region: PixelRect { x0: 0, y0: 0, x1: 640, y1: 360 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 12.700017, aperture: [25.4, 25.4], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 5.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/cornellbox.usda"], invisible_overrides: Some(0) } +layer: $DIR/cornellbox.usda +warning: Warning { code: AssetUnsupportedByHost, kind: Skipped, count: 1, prims: [], message: "No asset loader: environment map $DIR/sky_gradient.exr ignored — the dome falls back to its uniform colour. Use Scene::from_usd_with_assets to supply one." } +warning: Warning { code: MaterialFallbackDefault, kind: Skipped, count: 1, prims: ["/scene/Looks/initialShadingGroup"], message: "Material /scene/Looks/initialShadingGroup has no surface shader — using default grey OpenPBR" } +lights: 1 +light 0: dome name Some("/scene/Sky") lpe None pmf 1.0 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 5 geometries, PrimitiveBreakdown { triangles: 822, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 2 } top level, PrimitiveBreakdown { triangles: 1582, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 2 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 4.0 motion [] pieces all=10:88b22fc3345d5b05 camera=10:88b22fc3345d5b05 shadow=10:88b22fc3345d5b05 indirect=10:88b22fc3345d5b05 +geom 1: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.2 motion [] pieces all=760:c2b60a75c52c78b9 camera=760:c2b60a75c52c78b9 shadow=760:c2b60a75c52c78b9 indirect=760:c2b60a75c52c78b9 +geom 2: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=12:94a297badef437e1 camera=12:94a297badef437e1 shadow=12:94a297badef437e1 indirect=12:94a297badef437e1 +geom 3: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.25 motion [] pieces all=800:4a8c9f44d777e131 camera=800:4a8c9f44d777e131 shadow=800:4a8c9f44d777e131 indirect=800:4a8c9f44d777e131 +geom 4: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.3585339 motion [] pieces all=760:2344ecf63e12c441 camera=760:2344ecf63e12c441 shadow=760:2344ecf63e12c441 indirect=760:2344ecf63e12c441 +provenance material /scene/Looks/initialShadingGroup: MaterialOrigin { slots: [0, 1, 2, 3, 4], displaced: false } +provenance light /scene/Sky: LightOrigin { index: 0, geoms: 0..0 } +provenance geometry 0..1: /scene/pCube1 +provenance geometry 1..2: /scene/pSphere1 +provenance geometry 2..3: /scene/pCube2 +provenance geometry 3..4: /scene/pTorus1 +provenance geometry 4..5: /scene/pSphere2 +provenance mesh: MeshOrigin { geom_id: 0, slot: 0, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 1, slot: 1, baked: false, moving: false } +provenance mesh: MeshOrigin { geom_id: 2, slot: 2, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 3, slot: 3, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 4, slot: 1, baked: false, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 12343188411137242430, n_points: 8, n_indices: 20, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 1: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 17119738035130870988, n_points: 382, n_indices: 1560, n_uvs: None, smooth: false, material: 0 }), placements: 2, shared: false, displaced: false } +provenance mesh slot 2: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 1739488954094729910, n_points: 8, n_indices: 24, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 3: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 6096447469814747168, n_points: 400, n_indices: 1600, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/scene/camera1"), cameras: ["/scene/camera1"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/scene/camera1"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-187.image b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-187.image new file mode 100644 index 000000000..ba4884437 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-187.image @@ -0,0 +1 @@ +640x360 16spp clamp-off 52a1a46f3a46d230 diff --git a/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-188.digest b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-188.digest new file mode 100644 index 000000000..0e859a952 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-188.digest @@ -0,0 +1,40 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/scene/camera1") +camera: Camera { origin: Vec3A(0.0074343784, 1.9913422, 4.0133057), lower_left_corner: Vec3A(-8.881443, -3.0086517, -0.98669434), horizontal: Vec3A(17.777756, 0.0, 0.0), vertical: Vec3A(0.0, 9.999988, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: Some(Vec4(0.0, 0.0, -1.0, 3.9133058)), far: Some(Vec4(0.0, 0.0, 1.0, 9995.986)), planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: None +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 640, height: 360, region: PixelRect { x0: 0, y0: 0, x1: 640, y1: 360 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 12.700017, aperture: [25.4, 25.4], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 5.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/cornellbox.usda"], invisible_overrides: Some(0) } +layer: $DIR/cornellbox.usda +warning: Warning { code: AssetUnsupportedByHost, kind: Skipped, count: 1, prims: [], message: "No asset loader: environment map $DIR/sky_gradient.exr ignored — the dome falls back to its uniform colour. Use Scene::from_usd_with_assets to supply one." } +warning: Warning { code: MaterialFallbackDefault, kind: Skipped, count: 1, prims: ["/scene/Looks/initialShadingGroup"], message: "Material /scene/Looks/initialShadingGroup has no surface shader — using default grey OpenPBR" } +lights: 1 +light 0: dome name Some("/scene/Sky") lpe None pmf 1.0 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 5 geometries, PrimitiveBreakdown { triangles: 822, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 2 } top level, PrimitiveBreakdown { triangles: 1582, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 2 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 4.0 motion [] pieces all=10:88b22fc3345d5b05 camera=10:88b22fc3345d5b05 shadow=10:88b22fc3345d5b05 indirect=10:88b22fc3345d5b05 +geom 1: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.2 motion [] pieces all=760:c2b60a75c52c78b9 camera=760:c2b60a75c52c78b9 shadow=760:c2b60a75c52c78b9 indirect=760:c2b60a75c52c78b9 +geom 2: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=12:94a297badef437e1 camera=12:94a297badef437e1 shadow=12:94a297badef437e1 indirect=12:94a297badef437e1 +geom 3: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.25 motion [] pieces all=800:4a8c9f44d777e131 camera=800:4a8c9f44d777e131 shadow=800:4a8c9f44d777e131 indirect=800:4a8c9f44d777e131 +geom 4: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.3585339 motion [] pieces all=760:2344ecf63e12c441 camera=760:2344ecf63e12c441 shadow=760:2344ecf63e12c441 indirect=760:2344ecf63e12c441 +provenance material /scene/Looks/initialShadingGroup: MaterialOrigin { slots: [0, 1, 2, 3, 4], displaced: false } +provenance light /scene/Sky: LightOrigin { index: 0, geoms: 0..0 } +provenance geometry 0..1: /scene/pCube1 +provenance geometry 1..2: /scene/pSphere1 +provenance geometry 2..3: /scene/pCube2 +provenance geometry 3..4: /scene/pTorus1 +provenance geometry 4..5: /scene/pSphere2 +provenance mesh: MeshOrigin { geom_id: 0, slot: 0, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 1, slot: 1, baked: false, moving: false } +provenance mesh: MeshOrigin { geom_id: 2, slot: 2, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 3, slot: 3, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 4, slot: 1, baked: false, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 12343188411137242430, n_points: 8, n_indices: 20, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 1: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 17119738035130870988, n_points: 382, n_indices: 1560, n_uvs: None, smooth: false, material: 0 }), placements: 2, shared: false, displaced: false } +provenance mesh slot 2: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 1739488954094729910, n_points: 8, n_indices: 24, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 3: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 6096447469814747168, n_points: 400, n_indices: 1600, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/scene/camera1"), cameras: ["/scene/camera1"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/scene/camera1"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-188.image b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-188.image new file mode 100644 index 000000000..ba4884437 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-188.image @@ -0,0 +1 @@ +640x360 16spp clamp-off 52a1a46f3a46d230 diff --git a/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-189.digest b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-189.digest new file mode 100644 index 000000000..0e859a952 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-189.digest @@ -0,0 +1,40 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/scene/camera1") +camera: Camera { origin: Vec3A(0.0074343784, 1.9913422, 4.0133057), lower_left_corner: Vec3A(-8.881443, -3.0086517, -0.98669434), horizontal: Vec3A(17.777756, 0.0, 0.0), vertical: Vec3A(0.0, 9.999988, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: Some(Vec4(0.0, 0.0, -1.0, 3.9133058)), far: Some(Vec4(0.0, 0.0, 1.0, 9995.986)), planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: None +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 640, height: 360, region: PixelRect { x0: 0, y0: 0, x1: 640, y1: 360 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 12.700017, aperture: [25.4, 25.4], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 5.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/cornellbox.usda"], invisible_overrides: Some(0) } +layer: $DIR/cornellbox.usda +warning: Warning { code: AssetUnsupportedByHost, kind: Skipped, count: 1, prims: [], message: "No asset loader: environment map $DIR/sky_gradient.exr ignored — the dome falls back to its uniform colour. Use Scene::from_usd_with_assets to supply one." } +warning: Warning { code: MaterialFallbackDefault, kind: Skipped, count: 1, prims: ["/scene/Looks/initialShadingGroup"], message: "Material /scene/Looks/initialShadingGroup has no surface shader — using default grey OpenPBR" } +lights: 1 +light 0: dome name Some("/scene/Sky") lpe None pmf 1.0 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 5 geometries, PrimitiveBreakdown { triangles: 822, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 2 } top level, PrimitiveBreakdown { triangles: 1582, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 2 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 4.0 motion [] pieces all=10:88b22fc3345d5b05 camera=10:88b22fc3345d5b05 shadow=10:88b22fc3345d5b05 indirect=10:88b22fc3345d5b05 +geom 1: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.2 motion [] pieces all=760:c2b60a75c52c78b9 camera=760:c2b60a75c52c78b9 shadow=760:c2b60a75c52c78b9 indirect=760:c2b60a75c52c78b9 +geom 2: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=12:94a297badef437e1 camera=12:94a297badef437e1 shadow=12:94a297badef437e1 indirect=12:94a297badef437e1 +geom 3: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.25 motion [] pieces all=800:4a8c9f44d777e131 camera=800:4a8c9f44d777e131 shadow=800:4a8c9f44d777e131 indirect=800:4a8c9f44d777e131 +geom 4: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.3585339 motion [] pieces all=760:2344ecf63e12c441 camera=760:2344ecf63e12c441 shadow=760:2344ecf63e12c441 indirect=760:2344ecf63e12c441 +provenance material /scene/Looks/initialShadingGroup: MaterialOrigin { slots: [0, 1, 2, 3, 4], displaced: false } +provenance light /scene/Sky: LightOrigin { index: 0, geoms: 0..0 } +provenance geometry 0..1: /scene/pCube1 +provenance geometry 1..2: /scene/pSphere1 +provenance geometry 2..3: /scene/pCube2 +provenance geometry 3..4: /scene/pTorus1 +provenance geometry 4..5: /scene/pSphere2 +provenance mesh: MeshOrigin { geom_id: 0, slot: 0, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 1, slot: 1, baked: false, moving: false } +provenance mesh: MeshOrigin { geom_id: 2, slot: 2, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 3, slot: 3, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 4, slot: 1, baked: false, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 12343188411137242430, n_points: 8, n_indices: 20, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 1: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 17119738035130870988, n_points: 382, n_indices: 1560, n_uvs: None, smooth: false, material: 0 }), placements: 2, shared: false, displaced: false } +provenance mesh slot 2: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 1739488954094729910, n_points: 8, n_indices: 24, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 3: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 6096447469814747168, n_points: 400, n_indices: 1600, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/scene/camera1"), cameras: ["/scene/camera1"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/scene/camera1"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-189.image b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-189.image new file mode 100644 index 000000000..ba4884437 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-189.image @@ -0,0 +1 @@ +640x360 16spp clamp-off 52a1a46f3a46d230 diff --git a/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-19.digest b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-19.digest new file mode 100644 index 000000000..0e859a952 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-19.digest @@ -0,0 +1,40 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/scene/camera1") +camera: Camera { origin: Vec3A(0.0074343784, 1.9913422, 4.0133057), lower_left_corner: Vec3A(-8.881443, -3.0086517, -0.98669434), horizontal: Vec3A(17.777756, 0.0, 0.0), vertical: Vec3A(0.0, 9.999988, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: Some(Vec4(0.0, 0.0, -1.0, 3.9133058)), far: Some(Vec4(0.0, 0.0, 1.0, 9995.986)), planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: None +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 640, height: 360, region: PixelRect { x0: 0, y0: 0, x1: 640, y1: 360 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 12.700017, aperture: [25.4, 25.4], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 5.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/cornellbox.usda"], invisible_overrides: Some(0) } +layer: $DIR/cornellbox.usda +warning: Warning { code: AssetUnsupportedByHost, kind: Skipped, count: 1, prims: [], message: "No asset loader: environment map $DIR/sky_gradient.exr ignored — the dome falls back to its uniform colour. Use Scene::from_usd_with_assets to supply one." } +warning: Warning { code: MaterialFallbackDefault, kind: Skipped, count: 1, prims: ["/scene/Looks/initialShadingGroup"], message: "Material /scene/Looks/initialShadingGroup has no surface shader — using default grey OpenPBR" } +lights: 1 +light 0: dome name Some("/scene/Sky") lpe None pmf 1.0 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 5 geometries, PrimitiveBreakdown { triangles: 822, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 2 } top level, PrimitiveBreakdown { triangles: 1582, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 2 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 4.0 motion [] pieces all=10:88b22fc3345d5b05 camera=10:88b22fc3345d5b05 shadow=10:88b22fc3345d5b05 indirect=10:88b22fc3345d5b05 +geom 1: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.2 motion [] pieces all=760:c2b60a75c52c78b9 camera=760:c2b60a75c52c78b9 shadow=760:c2b60a75c52c78b9 indirect=760:c2b60a75c52c78b9 +geom 2: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=12:94a297badef437e1 camera=12:94a297badef437e1 shadow=12:94a297badef437e1 indirect=12:94a297badef437e1 +geom 3: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.25 motion [] pieces all=800:4a8c9f44d777e131 camera=800:4a8c9f44d777e131 shadow=800:4a8c9f44d777e131 indirect=800:4a8c9f44d777e131 +geom 4: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.3585339 motion [] pieces all=760:2344ecf63e12c441 camera=760:2344ecf63e12c441 shadow=760:2344ecf63e12c441 indirect=760:2344ecf63e12c441 +provenance material /scene/Looks/initialShadingGroup: MaterialOrigin { slots: [0, 1, 2, 3, 4], displaced: false } +provenance light /scene/Sky: LightOrigin { index: 0, geoms: 0..0 } +provenance geometry 0..1: /scene/pCube1 +provenance geometry 1..2: /scene/pSphere1 +provenance geometry 2..3: /scene/pCube2 +provenance geometry 3..4: /scene/pTorus1 +provenance geometry 4..5: /scene/pSphere2 +provenance mesh: MeshOrigin { geom_id: 0, slot: 0, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 1, slot: 1, baked: false, moving: false } +provenance mesh: MeshOrigin { geom_id: 2, slot: 2, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 3, slot: 3, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 4, slot: 1, baked: false, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 12343188411137242430, n_points: 8, n_indices: 20, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 1: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 17119738035130870988, n_points: 382, n_indices: 1560, n_uvs: None, smooth: false, material: 0 }), placements: 2, shared: false, displaced: false } +provenance mesh slot 2: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 1739488954094729910, n_points: 8, n_indices: 24, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 3: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 6096447469814747168, n_points: 400, n_indices: 1600, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/scene/camera1"), cameras: ["/scene/camera1"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/scene/camera1"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-19.image b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-19.image new file mode 100644 index 000000000..ba4884437 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-19.image @@ -0,0 +1 @@ +640x360 16spp clamp-off 52a1a46f3a46d230 diff --git a/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-190.digest b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-190.digest new file mode 100644 index 000000000..0e859a952 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-190.digest @@ -0,0 +1,40 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/scene/camera1") +camera: Camera { origin: Vec3A(0.0074343784, 1.9913422, 4.0133057), lower_left_corner: Vec3A(-8.881443, -3.0086517, -0.98669434), horizontal: Vec3A(17.777756, 0.0, 0.0), vertical: Vec3A(0.0, 9.999988, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: Some(Vec4(0.0, 0.0, -1.0, 3.9133058)), far: Some(Vec4(0.0, 0.0, 1.0, 9995.986)), planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: None +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 640, height: 360, region: PixelRect { x0: 0, y0: 0, x1: 640, y1: 360 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 12.700017, aperture: [25.4, 25.4], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 5.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/cornellbox.usda"], invisible_overrides: Some(0) } +layer: $DIR/cornellbox.usda +warning: Warning { code: AssetUnsupportedByHost, kind: Skipped, count: 1, prims: [], message: "No asset loader: environment map $DIR/sky_gradient.exr ignored — the dome falls back to its uniform colour. Use Scene::from_usd_with_assets to supply one." } +warning: Warning { code: MaterialFallbackDefault, kind: Skipped, count: 1, prims: ["/scene/Looks/initialShadingGroup"], message: "Material /scene/Looks/initialShadingGroup has no surface shader — using default grey OpenPBR" } +lights: 1 +light 0: dome name Some("/scene/Sky") lpe None pmf 1.0 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 5 geometries, PrimitiveBreakdown { triangles: 822, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 2 } top level, PrimitiveBreakdown { triangles: 1582, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 2 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 4.0 motion [] pieces all=10:88b22fc3345d5b05 camera=10:88b22fc3345d5b05 shadow=10:88b22fc3345d5b05 indirect=10:88b22fc3345d5b05 +geom 1: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.2 motion [] pieces all=760:c2b60a75c52c78b9 camera=760:c2b60a75c52c78b9 shadow=760:c2b60a75c52c78b9 indirect=760:c2b60a75c52c78b9 +geom 2: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=12:94a297badef437e1 camera=12:94a297badef437e1 shadow=12:94a297badef437e1 indirect=12:94a297badef437e1 +geom 3: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.25 motion [] pieces all=800:4a8c9f44d777e131 camera=800:4a8c9f44d777e131 shadow=800:4a8c9f44d777e131 indirect=800:4a8c9f44d777e131 +geom 4: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.3585339 motion [] pieces all=760:2344ecf63e12c441 camera=760:2344ecf63e12c441 shadow=760:2344ecf63e12c441 indirect=760:2344ecf63e12c441 +provenance material /scene/Looks/initialShadingGroup: MaterialOrigin { slots: [0, 1, 2, 3, 4], displaced: false } +provenance light /scene/Sky: LightOrigin { index: 0, geoms: 0..0 } +provenance geometry 0..1: /scene/pCube1 +provenance geometry 1..2: /scene/pSphere1 +provenance geometry 2..3: /scene/pCube2 +provenance geometry 3..4: /scene/pTorus1 +provenance geometry 4..5: /scene/pSphere2 +provenance mesh: MeshOrigin { geom_id: 0, slot: 0, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 1, slot: 1, baked: false, moving: false } +provenance mesh: MeshOrigin { geom_id: 2, slot: 2, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 3, slot: 3, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 4, slot: 1, baked: false, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 12343188411137242430, n_points: 8, n_indices: 20, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 1: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 17119738035130870988, n_points: 382, n_indices: 1560, n_uvs: None, smooth: false, material: 0 }), placements: 2, shared: false, displaced: false } +provenance mesh slot 2: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 1739488954094729910, n_points: 8, n_indices: 24, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 3: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 6096447469814747168, n_points: 400, n_indices: 1600, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/scene/camera1"), cameras: ["/scene/camera1"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/scene/camera1"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-190.image b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-190.image new file mode 100644 index 000000000..ba4884437 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-190.image @@ -0,0 +1 @@ +640x360 16spp clamp-off 52a1a46f3a46d230 diff --git a/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-191.digest b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-191.digest new file mode 100644 index 000000000..0e859a952 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-191.digest @@ -0,0 +1,40 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/scene/camera1") +camera: Camera { origin: Vec3A(0.0074343784, 1.9913422, 4.0133057), lower_left_corner: Vec3A(-8.881443, -3.0086517, -0.98669434), horizontal: Vec3A(17.777756, 0.0, 0.0), vertical: Vec3A(0.0, 9.999988, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: Some(Vec4(0.0, 0.0, -1.0, 3.9133058)), far: Some(Vec4(0.0, 0.0, 1.0, 9995.986)), planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: None +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 640, height: 360, region: PixelRect { x0: 0, y0: 0, x1: 640, y1: 360 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 12.700017, aperture: [25.4, 25.4], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 5.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/cornellbox.usda"], invisible_overrides: Some(0) } +layer: $DIR/cornellbox.usda +warning: Warning { code: AssetUnsupportedByHost, kind: Skipped, count: 1, prims: [], message: "No asset loader: environment map $DIR/sky_gradient.exr ignored — the dome falls back to its uniform colour. Use Scene::from_usd_with_assets to supply one." } +warning: Warning { code: MaterialFallbackDefault, kind: Skipped, count: 1, prims: ["/scene/Looks/initialShadingGroup"], message: "Material /scene/Looks/initialShadingGroup has no surface shader — using default grey OpenPBR" } +lights: 1 +light 0: dome name Some("/scene/Sky") lpe None pmf 1.0 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 5 geometries, PrimitiveBreakdown { triangles: 822, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 2 } top level, PrimitiveBreakdown { triangles: 1582, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 2 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 4.0 motion [] pieces all=10:88b22fc3345d5b05 camera=10:88b22fc3345d5b05 shadow=10:88b22fc3345d5b05 indirect=10:88b22fc3345d5b05 +geom 1: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.2 motion [] pieces all=760:c2b60a75c52c78b9 camera=760:c2b60a75c52c78b9 shadow=760:c2b60a75c52c78b9 indirect=760:c2b60a75c52c78b9 +geom 2: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=12:94a297badef437e1 camera=12:94a297badef437e1 shadow=12:94a297badef437e1 indirect=12:94a297badef437e1 +geom 3: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.25 motion [] pieces all=800:4a8c9f44d777e131 camera=800:4a8c9f44d777e131 shadow=800:4a8c9f44d777e131 indirect=800:4a8c9f44d777e131 +geom 4: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.3585339 motion [] pieces all=760:2344ecf63e12c441 camera=760:2344ecf63e12c441 shadow=760:2344ecf63e12c441 indirect=760:2344ecf63e12c441 +provenance material /scene/Looks/initialShadingGroup: MaterialOrigin { slots: [0, 1, 2, 3, 4], displaced: false } +provenance light /scene/Sky: LightOrigin { index: 0, geoms: 0..0 } +provenance geometry 0..1: /scene/pCube1 +provenance geometry 1..2: /scene/pSphere1 +provenance geometry 2..3: /scene/pCube2 +provenance geometry 3..4: /scene/pTorus1 +provenance geometry 4..5: /scene/pSphere2 +provenance mesh: MeshOrigin { geom_id: 0, slot: 0, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 1, slot: 1, baked: false, moving: false } +provenance mesh: MeshOrigin { geom_id: 2, slot: 2, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 3, slot: 3, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 4, slot: 1, baked: false, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 12343188411137242430, n_points: 8, n_indices: 20, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 1: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 17119738035130870988, n_points: 382, n_indices: 1560, n_uvs: None, smooth: false, material: 0 }), placements: 2, shared: false, displaced: false } +provenance mesh slot 2: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 1739488954094729910, n_points: 8, n_indices: 24, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 3: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 6096447469814747168, n_points: 400, n_indices: 1600, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/scene/camera1"), cameras: ["/scene/camera1"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/scene/camera1"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-191.image b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-191.image new file mode 100644 index 000000000..ba4884437 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-191.image @@ -0,0 +1 @@ +640x360 16spp clamp-off 52a1a46f3a46d230 diff --git a/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-192.digest b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-192.digest new file mode 100644 index 000000000..0e859a952 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-192.digest @@ -0,0 +1,40 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/scene/camera1") +camera: Camera { origin: Vec3A(0.0074343784, 1.9913422, 4.0133057), lower_left_corner: Vec3A(-8.881443, -3.0086517, -0.98669434), horizontal: Vec3A(17.777756, 0.0, 0.0), vertical: Vec3A(0.0, 9.999988, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: Some(Vec4(0.0, 0.0, -1.0, 3.9133058)), far: Some(Vec4(0.0, 0.0, 1.0, 9995.986)), planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: None +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 640, height: 360, region: PixelRect { x0: 0, y0: 0, x1: 640, y1: 360 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 12.700017, aperture: [25.4, 25.4], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 5.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/cornellbox.usda"], invisible_overrides: Some(0) } +layer: $DIR/cornellbox.usda +warning: Warning { code: AssetUnsupportedByHost, kind: Skipped, count: 1, prims: [], message: "No asset loader: environment map $DIR/sky_gradient.exr ignored — the dome falls back to its uniform colour. Use Scene::from_usd_with_assets to supply one." } +warning: Warning { code: MaterialFallbackDefault, kind: Skipped, count: 1, prims: ["/scene/Looks/initialShadingGroup"], message: "Material /scene/Looks/initialShadingGroup has no surface shader — using default grey OpenPBR" } +lights: 1 +light 0: dome name Some("/scene/Sky") lpe None pmf 1.0 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 5 geometries, PrimitiveBreakdown { triangles: 822, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 2 } top level, PrimitiveBreakdown { triangles: 1582, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 2 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 4.0 motion [] pieces all=10:88b22fc3345d5b05 camera=10:88b22fc3345d5b05 shadow=10:88b22fc3345d5b05 indirect=10:88b22fc3345d5b05 +geom 1: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.2 motion [] pieces all=760:c2b60a75c52c78b9 camera=760:c2b60a75c52c78b9 shadow=760:c2b60a75c52c78b9 indirect=760:c2b60a75c52c78b9 +geom 2: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=12:94a297badef437e1 camera=12:94a297badef437e1 shadow=12:94a297badef437e1 indirect=12:94a297badef437e1 +geom 3: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.25 motion [] pieces all=800:4a8c9f44d777e131 camera=800:4a8c9f44d777e131 shadow=800:4a8c9f44d777e131 indirect=800:4a8c9f44d777e131 +geom 4: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.3585339 motion [] pieces all=760:2344ecf63e12c441 camera=760:2344ecf63e12c441 shadow=760:2344ecf63e12c441 indirect=760:2344ecf63e12c441 +provenance material /scene/Looks/initialShadingGroup: MaterialOrigin { slots: [0, 1, 2, 3, 4], displaced: false } +provenance light /scene/Sky: LightOrigin { index: 0, geoms: 0..0 } +provenance geometry 0..1: /scene/pCube1 +provenance geometry 1..2: /scene/pSphere1 +provenance geometry 2..3: /scene/pCube2 +provenance geometry 3..4: /scene/pTorus1 +provenance geometry 4..5: /scene/pSphere2 +provenance mesh: MeshOrigin { geom_id: 0, slot: 0, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 1, slot: 1, baked: false, moving: false } +provenance mesh: MeshOrigin { geom_id: 2, slot: 2, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 3, slot: 3, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 4, slot: 1, baked: false, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 12343188411137242430, n_points: 8, n_indices: 20, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 1: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 17119738035130870988, n_points: 382, n_indices: 1560, n_uvs: None, smooth: false, material: 0 }), placements: 2, shared: false, displaced: false } +provenance mesh slot 2: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 1739488954094729910, n_points: 8, n_indices: 24, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 3: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 6096447469814747168, n_points: 400, n_indices: 1600, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/scene/camera1"), cameras: ["/scene/camera1"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/scene/camera1"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-192.image b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-192.image new file mode 100644 index 000000000..ba4884437 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-192.image @@ -0,0 +1 @@ +640x360 16spp clamp-off 52a1a46f3a46d230 diff --git a/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-2.digest b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-2.digest new file mode 100644 index 000000000..0e859a952 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-2.digest @@ -0,0 +1,40 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/scene/camera1") +camera: Camera { origin: Vec3A(0.0074343784, 1.9913422, 4.0133057), lower_left_corner: Vec3A(-8.881443, -3.0086517, -0.98669434), horizontal: Vec3A(17.777756, 0.0, 0.0), vertical: Vec3A(0.0, 9.999988, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: Some(Vec4(0.0, 0.0, -1.0, 3.9133058)), far: Some(Vec4(0.0, 0.0, 1.0, 9995.986)), planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: None +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 640, height: 360, region: PixelRect { x0: 0, y0: 0, x1: 640, y1: 360 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 12.700017, aperture: [25.4, 25.4], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 5.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/cornellbox.usda"], invisible_overrides: Some(0) } +layer: $DIR/cornellbox.usda +warning: Warning { code: AssetUnsupportedByHost, kind: Skipped, count: 1, prims: [], message: "No asset loader: environment map $DIR/sky_gradient.exr ignored — the dome falls back to its uniform colour. Use Scene::from_usd_with_assets to supply one." } +warning: Warning { code: MaterialFallbackDefault, kind: Skipped, count: 1, prims: ["/scene/Looks/initialShadingGroup"], message: "Material /scene/Looks/initialShadingGroup has no surface shader — using default grey OpenPBR" } +lights: 1 +light 0: dome name Some("/scene/Sky") lpe None pmf 1.0 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 5 geometries, PrimitiveBreakdown { triangles: 822, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 2 } top level, PrimitiveBreakdown { triangles: 1582, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 2 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 4.0 motion [] pieces all=10:88b22fc3345d5b05 camera=10:88b22fc3345d5b05 shadow=10:88b22fc3345d5b05 indirect=10:88b22fc3345d5b05 +geom 1: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.2 motion [] pieces all=760:c2b60a75c52c78b9 camera=760:c2b60a75c52c78b9 shadow=760:c2b60a75c52c78b9 indirect=760:c2b60a75c52c78b9 +geom 2: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=12:94a297badef437e1 camera=12:94a297badef437e1 shadow=12:94a297badef437e1 indirect=12:94a297badef437e1 +geom 3: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.25 motion [] pieces all=800:4a8c9f44d777e131 camera=800:4a8c9f44d777e131 shadow=800:4a8c9f44d777e131 indirect=800:4a8c9f44d777e131 +geom 4: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.3585339 motion [] pieces all=760:2344ecf63e12c441 camera=760:2344ecf63e12c441 shadow=760:2344ecf63e12c441 indirect=760:2344ecf63e12c441 +provenance material /scene/Looks/initialShadingGroup: MaterialOrigin { slots: [0, 1, 2, 3, 4], displaced: false } +provenance light /scene/Sky: LightOrigin { index: 0, geoms: 0..0 } +provenance geometry 0..1: /scene/pCube1 +provenance geometry 1..2: /scene/pSphere1 +provenance geometry 2..3: /scene/pCube2 +provenance geometry 3..4: /scene/pTorus1 +provenance geometry 4..5: /scene/pSphere2 +provenance mesh: MeshOrigin { geom_id: 0, slot: 0, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 1, slot: 1, baked: false, moving: false } +provenance mesh: MeshOrigin { geom_id: 2, slot: 2, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 3, slot: 3, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 4, slot: 1, baked: false, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 12343188411137242430, n_points: 8, n_indices: 20, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 1: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 17119738035130870988, n_points: 382, n_indices: 1560, n_uvs: None, smooth: false, material: 0 }), placements: 2, shared: false, displaced: false } +provenance mesh slot 2: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 1739488954094729910, n_points: 8, n_indices: 24, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 3: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 6096447469814747168, n_points: 400, n_indices: 1600, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/scene/camera1"), cameras: ["/scene/camera1"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/scene/camera1"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-2.image b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-2.image new file mode 100644 index 000000000..ba4884437 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-2.image @@ -0,0 +1 @@ +640x360 16spp clamp-off 52a1a46f3a46d230 diff --git a/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-20.digest b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-20.digest new file mode 100644 index 000000000..0e859a952 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-20.digest @@ -0,0 +1,40 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/scene/camera1") +camera: Camera { origin: Vec3A(0.0074343784, 1.9913422, 4.0133057), lower_left_corner: Vec3A(-8.881443, -3.0086517, -0.98669434), horizontal: Vec3A(17.777756, 0.0, 0.0), vertical: Vec3A(0.0, 9.999988, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: Some(Vec4(0.0, 0.0, -1.0, 3.9133058)), far: Some(Vec4(0.0, 0.0, 1.0, 9995.986)), planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: None +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 640, height: 360, region: PixelRect { x0: 0, y0: 0, x1: 640, y1: 360 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 12.700017, aperture: [25.4, 25.4], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 5.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/cornellbox.usda"], invisible_overrides: Some(0) } +layer: $DIR/cornellbox.usda +warning: Warning { code: AssetUnsupportedByHost, kind: Skipped, count: 1, prims: [], message: "No asset loader: environment map $DIR/sky_gradient.exr ignored — the dome falls back to its uniform colour. Use Scene::from_usd_with_assets to supply one." } +warning: Warning { code: MaterialFallbackDefault, kind: Skipped, count: 1, prims: ["/scene/Looks/initialShadingGroup"], message: "Material /scene/Looks/initialShadingGroup has no surface shader — using default grey OpenPBR" } +lights: 1 +light 0: dome name Some("/scene/Sky") lpe None pmf 1.0 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 5 geometries, PrimitiveBreakdown { triangles: 822, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 2 } top level, PrimitiveBreakdown { triangles: 1582, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 2 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 4.0 motion [] pieces all=10:88b22fc3345d5b05 camera=10:88b22fc3345d5b05 shadow=10:88b22fc3345d5b05 indirect=10:88b22fc3345d5b05 +geom 1: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.2 motion [] pieces all=760:c2b60a75c52c78b9 camera=760:c2b60a75c52c78b9 shadow=760:c2b60a75c52c78b9 indirect=760:c2b60a75c52c78b9 +geom 2: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=12:94a297badef437e1 camera=12:94a297badef437e1 shadow=12:94a297badef437e1 indirect=12:94a297badef437e1 +geom 3: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.25 motion [] pieces all=800:4a8c9f44d777e131 camera=800:4a8c9f44d777e131 shadow=800:4a8c9f44d777e131 indirect=800:4a8c9f44d777e131 +geom 4: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.3585339 motion [] pieces all=760:2344ecf63e12c441 camera=760:2344ecf63e12c441 shadow=760:2344ecf63e12c441 indirect=760:2344ecf63e12c441 +provenance material /scene/Looks/initialShadingGroup: MaterialOrigin { slots: [0, 1, 2, 3, 4], displaced: false } +provenance light /scene/Sky: LightOrigin { index: 0, geoms: 0..0 } +provenance geometry 0..1: /scene/pCube1 +provenance geometry 1..2: /scene/pSphere1 +provenance geometry 2..3: /scene/pCube2 +provenance geometry 3..4: /scene/pTorus1 +provenance geometry 4..5: /scene/pSphere2 +provenance mesh: MeshOrigin { geom_id: 0, slot: 0, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 1, slot: 1, baked: false, moving: false } +provenance mesh: MeshOrigin { geom_id: 2, slot: 2, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 3, slot: 3, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 4, slot: 1, baked: false, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 12343188411137242430, n_points: 8, n_indices: 20, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 1: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 17119738035130870988, n_points: 382, n_indices: 1560, n_uvs: None, smooth: false, material: 0 }), placements: 2, shared: false, displaced: false } +provenance mesh slot 2: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 1739488954094729910, n_points: 8, n_indices: 24, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 3: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 6096447469814747168, n_points: 400, n_indices: 1600, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/scene/camera1"), cameras: ["/scene/camera1"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/scene/camera1"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-20.image b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-20.image new file mode 100644 index 000000000..ba4884437 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-20.image @@ -0,0 +1 @@ +640x360 16spp clamp-off 52a1a46f3a46d230 diff --git a/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-21.digest b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-21.digest new file mode 100644 index 000000000..0e859a952 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-21.digest @@ -0,0 +1,40 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/scene/camera1") +camera: Camera { origin: Vec3A(0.0074343784, 1.9913422, 4.0133057), lower_left_corner: Vec3A(-8.881443, -3.0086517, -0.98669434), horizontal: Vec3A(17.777756, 0.0, 0.0), vertical: Vec3A(0.0, 9.999988, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: Some(Vec4(0.0, 0.0, -1.0, 3.9133058)), far: Some(Vec4(0.0, 0.0, 1.0, 9995.986)), planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: None +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 640, height: 360, region: PixelRect { x0: 0, y0: 0, x1: 640, y1: 360 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 12.700017, aperture: [25.4, 25.4], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 5.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/cornellbox.usda"], invisible_overrides: Some(0) } +layer: $DIR/cornellbox.usda +warning: Warning { code: AssetUnsupportedByHost, kind: Skipped, count: 1, prims: [], message: "No asset loader: environment map $DIR/sky_gradient.exr ignored — the dome falls back to its uniform colour. Use Scene::from_usd_with_assets to supply one." } +warning: Warning { code: MaterialFallbackDefault, kind: Skipped, count: 1, prims: ["/scene/Looks/initialShadingGroup"], message: "Material /scene/Looks/initialShadingGroup has no surface shader — using default grey OpenPBR" } +lights: 1 +light 0: dome name Some("/scene/Sky") lpe None pmf 1.0 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 5 geometries, PrimitiveBreakdown { triangles: 822, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 2 } top level, PrimitiveBreakdown { triangles: 1582, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 2 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 4.0 motion [] pieces all=10:88b22fc3345d5b05 camera=10:88b22fc3345d5b05 shadow=10:88b22fc3345d5b05 indirect=10:88b22fc3345d5b05 +geom 1: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.2 motion [] pieces all=760:c2b60a75c52c78b9 camera=760:c2b60a75c52c78b9 shadow=760:c2b60a75c52c78b9 indirect=760:c2b60a75c52c78b9 +geom 2: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=12:94a297badef437e1 camera=12:94a297badef437e1 shadow=12:94a297badef437e1 indirect=12:94a297badef437e1 +geom 3: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.25 motion [] pieces all=800:4a8c9f44d777e131 camera=800:4a8c9f44d777e131 shadow=800:4a8c9f44d777e131 indirect=800:4a8c9f44d777e131 +geom 4: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.3585339 motion [] pieces all=760:2344ecf63e12c441 camera=760:2344ecf63e12c441 shadow=760:2344ecf63e12c441 indirect=760:2344ecf63e12c441 +provenance material /scene/Looks/initialShadingGroup: MaterialOrigin { slots: [0, 1, 2, 3, 4], displaced: false } +provenance light /scene/Sky: LightOrigin { index: 0, geoms: 0..0 } +provenance geometry 0..1: /scene/pCube1 +provenance geometry 1..2: /scene/pSphere1 +provenance geometry 2..3: /scene/pCube2 +provenance geometry 3..4: /scene/pTorus1 +provenance geometry 4..5: /scene/pSphere2 +provenance mesh: MeshOrigin { geom_id: 0, slot: 0, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 1, slot: 1, baked: false, moving: false } +provenance mesh: MeshOrigin { geom_id: 2, slot: 2, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 3, slot: 3, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 4, slot: 1, baked: false, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 12343188411137242430, n_points: 8, n_indices: 20, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 1: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 17119738035130870988, n_points: 382, n_indices: 1560, n_uvs: None, smooth: false, material: 0 }), placements: 2, shared: false, displaced: false } +provenance mesh slot 2: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 1739488954094729910, n_points: 8, n_indices: 24, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 3: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 6096447469814747168, n_points: 400, n_indices: 1600, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/scene/camera1"), cameras: ["/scene/camera1"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/scene/camera1"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-21.image b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-21.image new file mode 100644 index 000000000..ba4884437 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-21.image @@ -0,0 +1 @@ +640x360 16spp clamp-off 52a1a46f3a46d230 diff --git a/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-22.digest b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-22.digest new file mode 100644 index 000000000..0e859a952 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-22.digest @@ -0,0 +1,40 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/scene/camera1") +camera: Camera { origin: Vec3A(0.0074343784, 1.9913422, 4.0133057), lower_left_corner: Vec3A(-8.881443, -3.0086517, -0.98669434), horizontal: Vec3A(17.777756, 0.0, 0.0), vertical: Vec3A(0.0, 9.999988, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: Some(Vec4(0.0, 0.0, -1.0, 3.9133058)), far: Some(Vec4(0.0, 0.0, 1.0, 9995.986)), planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: None +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 640, height: 360, region: PixelRect { x0: 0, y0: 0, x1: 640, y1: 360 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 12.700017, aperture: [25.4, 25.4], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 5.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/cornellbox.usda"], invisible_overrides: Some(0) } +layer: $DIR/cornellbox.usda +warning: Warning { code: AssetUnsupportedByHost, kind: Skipped, count: 1, prims: [], message: "No asset loader: environment map $DIR/sky_gradient.exr ignored — the dome falls back to its uniform colour. Use Scene::from_usd_with_assets to supply one." } +warning: Warning { code: MaterialFallbackDefault, kind: Skipped, count: 1, prims: ["/scene/Looks/initialShadingGroup"], message: "Material /scene/Looks/initialShadingGroup has no surface shader — using default grey OpenPBR" } +lights: 1 +light 0: dome name Some("/scene/Sky") lpe None pmf 1.0 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 5 geometries, PrimitiveBreakdown { triangles: 822, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 2 } top level, PrimitiveBreakdown { triangles: 1582, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 2 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 4.0 motion [] pieces all=10:88b22fc3345d5b05 camera=10:88b22fc3345d5b05 shadow=10:88b22fc3345d5b05 indirect=10:88b22fc3345d5b05 +geom 1: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.2 motion [] pieces all=760:c2b60a75c52c78b9 camera=760:c2b60a75c52c78b9 shadow=760:c2b60a75c52c78b9 indirect=760:c2b60a75c52c78b9 +geom 2: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=12:94a297badef437e1 camera=12:94a297badef437e1 shadow=12:94a297badef437e1 indirect=12:94a297badef437e1 +geom 3: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.25 motion [] pieces all=800:4a8c9f44d777e131 camera=800:4a8c9f44d777e131 shadow=800:4a8c9f44d777e131 indirect=800:4a8c9f44d777e131 +geom 4: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.3585339 motion [] pieces all=760:2344ecf63e12c441 camera=760:2344ecf63e12c441 shadow=760:2344ecf63e12c441 indirect=760:2344ecf63e12c441 +provenance material /scene/Looks/initialShadingGroup: MaterialOrigin { slots: [0, 1, 2, 3, 4], displaced: false } +provenance light /scene/Sky: LightOrigin { index: 0, geoms: 0..0 } +provenance geometry 0..1: /scene/pCube1 +provenance geometry 1..2: /scene/pSphere1 +provenance geometry 2..3: /scene/pCube2 +provenance geometry 3..4: /scene/pTorus1 +provenance geometry 4..5: /scene/pSphere2 +provenance mesh: MeshOrigin { geom_id: 0, slot: 0, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 1, slot: 1, baked: false, moving: false } +provenance mesh: MeshOrigin { geom_id: 2, slot: 2, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 3, slot: 3, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 4, slot: 1, baked: false, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 12343188411137242430, n_points: 8, n_indices: 20, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 1: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 17119738035130870988, n_points: 382, n_indices: 1560, n_uvs: None, smooth: false, material: 0 }), placements: 2, shared: false, displaced: false } +provenance mesh slot 2: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 1739488954094729910, n_points: 8, n_indices: 24, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 3: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 6096447469814747168, n_points: 400, n_indices: 1600, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/scene/camera1"), cameras: ["/scene/camera1"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/scene/camera1"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-22.image b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-22.image new file mode 100644 index 000000000..ba4884437 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-22.image @@ -0,0 +1 @@ +640x360 16spp clamp-off 52a1a46f3a46d230 diff --git a/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-23.digest b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-23.digest new file mode 100644 index 000000000..0e859a952 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-23.digest @@ -0,0 +1,40 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/scene/camera1") +camera: Camera { origin: Vec3A(0.0074343784, 1.9913422, 4.0133057), lower_left_corner: Vec3A(-8.881443, -3.0086517, -0.98669434), horizontal: Vec3A(17.777756, 0.0, 0.0), vertical: Vec3A(0.0, 9.999988, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: Some(Vec4(0.0, 0.0, -1.0, 3.9133058)), far: Some(Vec4(0.0, 0.0, 1.0, 9995.986)), planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: None +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 640, height: 360, region: PixelRect { x0: 0, y0: 0, x1: 640, y1: 360 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 12.700017, aperture: [25.4, 25.4], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 5.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/cornellbox.usda"], invisible_overrides: Some(0) } +layer: $DIR/cornellbox.usda +warning: Warning { code: AssetUnsupportedByHost, kind: Skipped, count: 1, prims: [], message: "No asset loader: environment map $DIR/sky_gradient.exr ignored — the dome falls back to its uniform colour. Use Scene::from_usd_with_assets to supply one." } +warning: Warning { code: MaterialFallbackDefault, kind: Skipped, count: 1, prims: ["/scene/Looks/initialShadingGroup"], message: "Material /scene/Looks/initialShadingGroup has no surface shader — using default grey OpenPBR" } +lights: 1 +light 0: dome name Some("/scene/Sky") lpe None pmf 1.0 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 5 geometries, PrimitiveBreakdown { triangles: 822, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 2 } top level, PrimitiveBreakdown { triangles: 1582, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 2 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 4.0 motion [] pieces all=10:88b22fc3345d5b05 camera=10:88b22fc3345d5b05 shadow=10:88b22fc3345d5b05 indirect=10:88b22fc3345d5b05 +geom 1: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.2 motion [] pieces all=760:c2b60a75c52c78b9 camera=760:c2b60a75c52c78b9 shadow=760:c2b60a75c52c78b9 indirect=760:c2b60a75c52c78b9 +geom 2: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=12:94a297badef437e1 camera=12:94a297badef437e1 shadow=12:94a297badef437e1 indirect=12:94a297badef437e1 +geom 3: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.25 motion [] pieces all=800:4a8c9f44d777e131 camera=800:4a8c9f44d777e131 shadow=800:4a8c9f44d777e131 indirect=800:4a8c9f44d777e131 +geom 4: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.3585339 motion [] pieces all=760:2344ecf63e12c441 camera=760:2344ecf63e12c441 shadow=760:2344ecf63e12c441 indirect=760:2344ecf63e12c441 +provenance material /scene/Looks/initialShadingGroup: MaterialOrigin { slots: [0, 1, 2, 3, 4], displaced: false } +provenance light /scene/Sky: LightOrigin { index: 0, geoms: 0..0 } +provenance geometry 0..1: /scene/pCube1 +provenance geometry 1..2: /scene/pSphere1 +provenance geometry 2..3: /scene/pCube2 +provenance geometry 3..4: /scene/pTorus1 +provenance geometry 4..5: /scene/pSphere2 +provenance mesh: MeshOrigin { geom_id: 0, slot: 0, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 1, slot: 1, baked: false, moving: false } +provenance mesh: MeshOrigin { geom_id: 2, slot: 2, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 3, slot: 3, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 4, slot: 1, baked: false, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 12343188411137242430, n_points: 8, n_indices: 20, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 1: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 17119738035130870988, n_points: 382, n_indices: 1560, n_uvs: None, smooth: false, material: 0 }), placements: 2, shared: false, displaced: false } +provenance mesh slot 2: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 1739488954094729910, n_points: 8, n_indices: 24, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 3: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 6096447469814747168, n_points: 400, n_indices: 1600, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/scene/camera1"), cameras: ["/scene/camera1"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/scene/camera1"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-23.image b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-23.image new file mode 100644 index 000000000..ba4884437 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-23.image @@ -0,0 +1 @@ +640x360 16spp clamp-off 52a1a46f3a46d230 diff --git a/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-24.digest b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-24.digest new file mode 100644 index 000000000..0e859a952 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-24.digest @@ -0,0 +1,40 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/scene/camera1") +camera: Camera { origin: Vec3A(0.0074343784, 1.9913422, 4.0133057), lower_left_corner: Vec3A(-8.881443, -3.0086517, -0.98669434), horizontal: Vec3A(17.777756, 0.0, 0.0), vertical: Vec3A(0.0, 9.999988, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: Some(Vec4(0.0, 0.0, -1.0, 3.9133058)), far: Some(Vec4(0.0, 0.0, 1.0, 9995.986)), planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: None +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 640, height: 360, region: PixelRect { x0: 0, y0: 0, x1: 640, y1: 360 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 12.700017, aperture: [25.4, 25.4], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 5.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/cornellbox.usda"], invisible_overrides: Some(0) } +layer: $DIR/cornellbox.usda +warning: Warning { code: AssetUnsupportedByHost, kind: Skipped, count: 1, prims: [], message: "No asset loader: environment map $DIR/sky_gradient.exr ignored — the dome falls back to its uniform colour. Use Scene::from_usd_with_assets to supply one." } +warning: Warning { code: MaterialFallbackDefault, kind: Skipped, count: 1, prims: ["/scene/Looks/initialShadingGroup"], message: "Material /scene/Looks/initialShadingGroup has no surface shader — using default grey OpenPBR" } +lights: 1 +light 0: dome name Some("/scene/Sky") lpe None pmf 1.0 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 5 geometries, PrimitiveBreakdown { triangles: 822, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 2 } top level, PrimitiveBreakdown { triangles: 1582, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 2 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 4.0 motion [] pieces all=10:88b22fc3345d5b05 camera=10:88b22fc3345d5b05 shadow=10:88b22fc3345d5b05 indirect=10:88b22fc3345d5b05 +geom 1: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.2 motion [] pieces all=760:c2b60a75c52c78b9 camera=760:c2b60a75c52c78b9 shadow=760:c2b60a75c52c78b9 indirect=760:c2b60a75c52c78b9 +geom 2: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=12:94a297badef437e1 camera=12:94a297badef437e1 shadow=12:94a297badef437e1 indirect=12:94a297badef437e1 +geom 3: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.25 motion [] pieces all=800:4a8c9f44d777e131 camera=800:4a8c9f44d777e131 shadow=800:4a8c9f44d777e131 indirect=800:4a8c9f44d777e131 +geom 4: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.3585339 motion [] pieces all=760:2344ecf63e12c441 camera=760:2344ecf63e12c441 shadow=760:2344ecf63e12c441 indirect=760:2344ecf63e12c441 +provenance material /scene/Looks/initialShadingGroup: MaterialOrigin { slots: [0, 1, 2, 3, 4], displaced: false } +provenance light /scene/Sky: LightOrigin { index: 0, geoms: 0..0 } +provenance geometry 0..1: /scene/pCube1 +provenance geometry 1..2: /scene/pSphere1 +provenance geometry 2..3: /scene/pCube2 +provenance geometry 3..4: /scene/pTorus1 +provenance geometry 4..5: /scene/pSphere2 +provenance mesh: MeshOrigin { geom_id: 0, slot: 0, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 1, slot: 1, baked: false, moving: false } +provenance mesh: MeshOrigin { geom_id: 2, slot: 2, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 3, slot: 3, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 4, slot: 1, baked: false, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 12343188411137242430, n_points: 8, n_indices: 20, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 1: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 17119738035130870988, n_points: 382, n_indices: 1560, n_uvs: None, smooth: false, material: 0 }), placements: 2, shared: false, displaced: false } +provenance mesh slot 2: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 1739488954094729910, n_points: 8, n_indices: 24, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 3: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 6096447469814747168, n_points: 400, n_indices: 1600, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/scene/camera1"), cameras: ["/scene/camera1"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/scene/camera1"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-24.image b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-24.image new file mode 100644 index 000000000..ba4884437 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-24.image @@ -0,0 +1 @@ +640x360 16spp clamp-off 52a1a46f3a46d230 diff --git a/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-25.digest b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-25.digest new file mode 100644 index 000000000..0e859a952 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-25.digest @@ -0,0 +1,40 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/scene/camera1") +camera: Camera { origin: Vec3A(0.0074343784, 1.9913422, 4.0133057), lower_left_corner: Vec3A(-8.881443, -3.0086517, -0.98669434), horizontal: Vec3A(17.777756, 0.0, 0.0), vertical: Vec3A(0.0, 9.999988, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: Some(Vec4(0.0, 0.0, -1.0, 3.9133058)), far: Some(Vec4(0.0, 0.0, 1.0, 9995.986)), planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: None +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 640, height: 360, region: PixelRect { x0: 0, y0: 0, x1: 640, y1: 360 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 12.700017, aperture: [25.4, 25.4], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 5.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/cornellbox.usda"], invisible_overrides: Some(0) } +layer: $DIR/cornellbox.usda +warning: Warning { code: AssetUnsupportedByHost, kind: Skipped, count: 1, prims: [], message: "No asset loader: environment map $DIR/sky_gradient.exr ignored — the dome falls back to its uniform colour. Use Scene::from_usd_with_assets to supply one." } +warning: Warning { code: MaterialFallbackDefault, kind: Skipped, count: 1, prims: ["/scene/Looks/initialShadingGroup"], message: "Material /scene/Looks/initialShadingGroup has no surface shader — using default grey OpenPBR" } +lights: 1 +light 0: dome name Some("/scene/Sky") lpe None pmf 1.0 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 5 geometries, PrimitiveBreakdown { triangles: 822, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 2 } top level, PrimitiveBreakdown { triangles: 1582, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 2 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 4.0 motion [] pieces all=10:88b22fc3345d5b05 camera=10:88b22fc3345d5b05 shadow=10:88b22fc3345d5b05 indirect=10:88b22fc3345d5b05 +geom 1: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.2 motion [] pieces all=760:c2b60a75c52c78b9 camera=760:c2b60a75c52c78b9 shadow=760:c2b60a75c52c78b9 indirect=760:c2b60a75c52c78b9 +geom 2: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=12:94a297badef437e1 camera=12:94a297badef437e1 shadow=12:94a297badef437e1 indirect=12:94a297badef437e1 +geom 3: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.25 motion [] pieces all=800:4a8c9f44d777e131 camera=800:4a8c9f44d777e131 shadow=800:4a8c9f44d777e131 indirect=800:4a8c9f44d777e131 +geom 4: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.3585339 motion [] pieces all=760:2344ecf63e12c441 camera=760:2344ecf63e12c441 shadow=760:2344ecf63e12c441 indirect=760:2344ecf63e12c441 +provenance material /scene/Looks/initialShadingGroup: MaterialOrigin { slots: [0, 1, 2, 3, 4], displaced: false } +provenance light /scene/Sky: LightOrigin { index: 0, geoms: 0..0 } +provenance geometry 0..1: /scene/pCube1 +provenance geometry 1..2: /scene/pSphere1 +provenance geometry 2..3: /scene/pCube2 +provenance geometry 3..4: /scene/pTorus1 +provenance geometry 4..5: /scene/pSphere2 +provenance mesh: MeshOrigin { geom_id: 0, slot: 0, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 1, slot: 1, baked: false, moving: false } +provenance mesh: MeshOrigin { geom_id: 2, slot: 2, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 3, slot: 3, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 4, slot: 1, baked: false, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 12343188411137242430, n_points: 8, n_indices: 20, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 1: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 17119738035130870988, n_points: 382, n_indices: 1560, n_uvs: None, smooth: false, material: 0 }), placements: 2, shared: false, displaced: false } +provenance mesh slot 2: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 1739488954094729910, n_points: 8, n_indices: 24, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 3: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 6096447469814747168, n_points: 400, n_indices: 1600, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/scene/camera1"), cameras: ["/scene/camera1"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/scene/camera1"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-25.image b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-25.image new file mode 100644 index 000000000..ba4884437 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-25.image @@ -0,0 +1 @@ +640x360 16spp clamp-off 52a1a46f3a46d230 diff --git a/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-26.digest b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-26.digest new file mode 100644 index 000000000..0e859a952 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-26.digest @@ -0,0 +1,40 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/scene/camera1") +camera: Camera { origin: Vec3A(0.0074343784, 1.9913422, 4.0133057), lower_left_corner: Vec3A(-8.881443, -3.0086517, -0.98669434), horizontal: Vec3A(17.777756, 0.0, 0.0), vertical: Vec3A(0.0, 9.999988, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: Some(Vec4(0.0, 0.0, -1.0, 3.9133058)), far: Some(Vec4(0.0, 0.0, 1.0, 9995.986)), planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: None +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 640, height: 360, region: PixelRect { x0: 0, y0: 0, x1: 640, y1: 360 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 12.700017, aperture: [25.4, 25.4], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 5.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/cornellbox.usda"], invisible_overrides: Some(0) } +layer: $DIR/cornellbox.usda +warning: Warning { code: AssetUnsupportedByHost, kind: Skipped, count: 1, prims: [], message: "No asset loader: environment map $DIR/sky_gradient.exr ignored — the dome falls back to its uniform colour. Use Scene::from_usd_with_assets to supply one." } +warning: Warning { code: MaterialFallbackDefault, kind: Skipped, count: 1, prims: ["/scene/Looks/initialShadingGroup"], message: "Material /scene/Looks/initialShadingGroup has no surface shader — using default grey OpenPBR" } +lights: 1 +light 0: dome name Some("/scene/Sky") lpe None pmf 1.0 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 5 geometries, PrimitiveBreakdown { triangles: 822, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 2 } top level, PrimitiveBreakdown { triangles: 1582, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 2 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 4.0 motion [] pieces all=10:88b22fc3345d5b05 camera=10:88b22fc3345d5b05 shadow=10:88b22fc3345d5b05 indirect=10:88b22fc3345d5b05 +geom 1: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.2 motion [] pieces all=760:c2b60a75c52c78b9 camera=760:c2b60a75c52c78b9 shadow=760:c2b60a75c52c78b9 indirect=760:c2b60a75c52c78b9 +geom 2: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=12:94a297badef437e1 camera=12:94a297badef437e1 shadow=12:94a297badef437e1 indirect=12:94a297badef437e1 +geom 3: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.25 motion [] pieces all=800:4a8c9f44d777e131 camera=800:4a8c9f44d777e131 shadow=800:4a8c9f44d777e131 indirect=800:4a8c9f44d777e131 +geom 4: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.3585339 motion [] pieces all=760:2344ecf63e12c441 camera=760:2344ecf63e12c441 shadow=760:2344ecf63e12c441 indirect=760:2344ecf63e12c441 +provenance material /scene/Looks/initialShadingGroup: MaterialOrigin { slots: [0, 1, 2, 3, 4], displaced: false } +provenance light /scene/Sky: LightOrigin { index: 0, geoms: 0..0 } +provenance geometry 0..1: /scene/pCube1 +provenance geometry 1..2: /scene/pSphere1 +provenance geometry 2..3: /scene/pCube2 +provenance geometry 3..4: /scene/pTorus1 +provenance geometry 4..5: /scene/pSphere2 +provenance mesh: MeshOrigin { geom_id: 0, slot: 0, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 1, slot: 1, baked: false, moving: false } +provenance mesh: MeshOrigin { geom_id: 2, slot: 2, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 3, slot: 3, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 4, slot: 1, baked: false, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 12343188411137242430, n_points: 8, n_indices: 20, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 1: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 17119738035130870988, n_points: 382, n_indices: 1560, n_uvs: None, smooth: false, material: 0 }), placements: 2, shared: false, displaced: false } +provenance mesh slot 2: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 1739488954094729910, n_points: 8, n_indices: 24, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 3: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 6096447469814747168, n_points: 400, n_indices: 1600, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/scene/camera1"), cameras: ["/scene/camera1"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/scene/camera1"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-26.image b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-26.image new file mode 100644 index 000000000..ba4884437 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-26.image @@ -0,0 +1 @@ +640x360 16spp clamp-off 52a1a46f3a46d230 diff --git a/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-27.digest b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-27.digest new file mode 100644 index 000000000..0e859a952 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-27.digest @@ -0,0 +1,40 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/scene/camera1") +camera: Camera { origin: Vec3A(0.0074343784, 1.9913422, 4.0133057), lower_left_corner: Vec3A(-8.881443, -3.0086517, -0.98669434), horizontal: Vec3A(17.777756, 0.0, 0.0), vertical: Vec3A(0.0, 9.999988, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: Some(Vec4(0.0, 0.0, -1.0, 3.9133058)), far: Some(Vec4(0.0, 0.0, 1.0, 9995.986)), planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: None +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 640, height: 360, region: PixelRect { x0: 0, y0: 0, x1: 640, y1: 360 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 12.700017, aperture: [25.4, 25.4], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 5.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/cornellbox.usda"], invisible_overrides: Some(0) } +layer: $DIR/cornellbox.usda +warning: Warning { code: AssetUnsupportedByHost, kind: Skipped, count: 1, prims: [], message: "No asset loader: environment map $DIR/sky_gradient.exr ignored — the dome falls back to its uniform colour. Use Scene::from_usd_with_assets to supply one." } +warning: Warning { code: MaterialFallbackDefault, kind: Skipped, count: 1, prims: ["/scene/Looks/initialShadingGroup"], message: "Material /scene/Looks/initialShadingGroup has no surface shader — using default grey OpenPBR" } +lights: 1 +light 0: dome name Some("/scene/Sky") lpe None pmf 1.0 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 5 geometries, PrimitiveBreakdown { triangles: 822, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 2 } top level, PrimitiveBreakdown { triangles: 1582, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 2 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 4.0 motion [] pieces all=10:88b22fc3345d5b05 camera=10:88b22fc3345d5b05 shadow=10:88b22fc3345d5b05 indirect=10:88b22fc3345d5b05 +geom 1: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.2 motion [] pieces all=760:c2b60a75c52c78b9 camera=760:c2b60a75c52c78b9 shadow=760:c2b60a75c52c78b9 indirect=760:c2b60a75c52c78b9 +geom 2: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=12:94a297badef437e1 camera=12:94a297badef437e1 shadow=12:94a297badef437e1 indirect=12:94a297badef437e1 +geom 3: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.25 motion [] pieces all=800:4a8c9f44d777e131 camera=800:4a8c9f44d777e131 shadow=800:4a8c9f44d777e131 indirect=800:4a8c9f44d777e131 +geom 4: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.3585339 motion [] pieces all=760:2344ecf63e12c441 camera=760:2344ecf63e12c441 shadow=760:2344ecf63e12c441 indirect=760:2344ecf63e12c441 +provenance material /scene/Looks/initialShadingGroup: MaterialOrigin { slots: [0, 1, 2, 3, 4], displaced: false } +provenance light /scene/Sky: LightOrigin { index: 0, geoms: 0..0 } +provenance geometry 0..1: /scene/pCube1 +provenance geometry 1..2: /scene/pSphere1 +provenance geometry 2..3: /scene/pCube2 +provenance geometry 3..4: /scene/pTorus1 +provenance geometry 4..5: /scene/pSphere2 +provenance mesh: MeshOrigin { geom_id: 0, slot: 0, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 1, slot: 1, baked: false, moving: false } +provenance mesh: MeshOrigin { geom_id: 2, slot: 2, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 3, slot: 3, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 4, slot: 1, baked: false, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 12343188411137242430, n_points: 8, n_indices: 20, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 1: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 17119738035130870988, n_points: 382, n_indices: 1560, n_uvs: None, smooth: false, material: 0 }), placements: 2, shared: false, displaced: false } +provenance mesh slot 2: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 1739488954094729910, n_points: 8, n_indices: 24, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 3: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 6096447469814747168, n_points: 400, n_indices: 1600, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/scene/camera1"), cameras: ["/scene/camera1"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/scene/camera1"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-27.image b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-27.image new file mode 100644 index 000000000..ba4884437 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-27.image @@ -0,0 +1 @@ +640x360 16spp clamp-off 52a1a46f3a46d230 diff --git a/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-28.digest b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-28.digest new file mode 100644 index 000000000..0e859a952 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-28.digest @@ -0,0 +1,40 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/scene/camera1") +camera: Camera { origin: Vec3A(0.0074343784, 1.9913422, 4.0133057), lower_left_corner: Vec3A(-8.881443, -3.0086517, -0.98669434), horizontal: Vec3A(17.777756, 0.0, 0.0), vertical: Vec3A(0.0, 9.999988, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: Some(Vec4(0.0, 0.0, -1.0, 3.9133058)), far: Some(Vec4(0.0, 0.0, 1.0, 9995.986)), planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: None +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 640, height: 360, region: PixelRect { x0: 0, y0: 0, x1: 640, y1: 360 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 12.700017, aperture: [25.4, 25.4], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 5.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/cornellbox.usda"], invisible_overrides: Some(0) } +layer: $DIR/cornellbox.usda +warning: Warning { code: AssetUnsupportedByHost, kind: Skipped, count: 1, prims: [], message: "No asset loader: environment map $DIR/sky_gradient.exr ignored — the dome falls back to its uniform colour. Use Scene::from_usd_with_assets to supply one." } +warning: Warning { code: MaterialFallbackDefault, kind: Skipped, count: 1, prims: ["/scene/Looks/initialShadingGroup"], message: "Material /scene/Looks/initialShadingGroup has no surface shader — using default grey OpenPBR" } +lights: 1 +light 0: dome name Some("/scene/Sky") lpe None pmf 1.0 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 5 geometries, PrimitiveBreakdown { triangles: 822, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 2 } top level, PrimitiveBreakdown { triangles: 1582, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 2 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 4.0 motion [] pieces all=10:88b22fc3345d5b05 camera=10:88b22fc3345d5b05 shadow=10:88b22fc3345d5b05 indirect=10:88b22fc3345d5b05 +geom 1: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.2 motion [] pieces all=760:c2b60a75c52c78b9 camera=760:c2b60a75c52c78b9 shadow=760:c2b60a75c52c78b9 indirect=760:c2b60a75c52c78b9 +geom 2: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=12:94a297badef437e1 camera=12:94a297badef437e1 shadow=12:94a297badef437e1 indirect=12:94a297badef437e1 +geom 3: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.25 motion [] pieces all=800:4a8c9f44d777e131 camera=800:4a8c9f44d777e131 shadow=800:4a8c9f44d777e131 indirect=800:4a8c9f44d777e131 +geom 4: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.3585339 motion [] pieces all=760:2344ecf63e12c441 camera=760:2344ecf63e12c441 shadow=760:2344ecf63e12c441 indirect=760:2344ecf63e12c441 +provenance material /scene/Looks/initialShadingGroup: MaterialOrigin { slots: [0, 1, 2, 3, 4], displaced: false } +provenance light /scene/Sky: LightOrigin { index: 0, geoms: 0..0 } +provenance geometry 0..1: /scene/pCube1 +provenance geometry 1..2: /scene/pSphere1 +provenance geometry 2..3: /scene/pCube2 +provenance geometry 3..4: /scene/pTorus1 +provenance geometry 4..5: /scene/pSphere2 +provenance mesh: MeshOrigin { geom_id: 0, slot: 0, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 1, slot: 1, baked: false, moving: false } +provenance mesh: MeshOrigin { geom_id: 2, slot: 2, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 3, slot: 3, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 4, slot: 1, baked: false, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 12343188411137242430, n_points: 8, n_indices: 20, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 1: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 17119738035130870988, n_points: 382, n_indices: 1560, n_uvs: None, smooth: false, material: 0 }), placements: 2, shared: false, displaced: false } +provenance mesh slot 2: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 1739488954094729910, n_points: 8, n_indices: 24, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 3: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 6096447469814747168, n_points: 400, n_indices: 1600, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/scene/camera1"), cameras: ["/scene/camera1"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/scene/camera1"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-28.image b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-28.image new file mode 100644 index 000000000..ba4884437 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-28.image @@ -0,0 +1 @@ +640x360 16spp clamp-off 52a1a46f3a46d230 diff --git a/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-29.digest b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-29.digest new file mode 100644 index 000000000..0e859a952 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-29.digest @@ -0,0 +1,40 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/scene/camera1") +camera: Camera { origin: Vec3A(0.0074343784, 1.9913422, 4.0133057), lower_left_corner: Vec3A(-8.881443, -3.0086517, -0.98669434), horizontal: Vec3A(17.777756, 0.0, 0.0), vertical: Vec3A(0.0, 9.999988, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: Some(Vec4(0.0, 0.0, -1.0, 3.9133058)), far: Some(Vec4(0.0, 0.0, 1.0, 9995.986)), planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: None +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 640, height: 360, region: PixelRect { x0: 0, y0: 0, x1: 640, y1: 360 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 12.700017, aperture: [25.4, 25.4], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 5.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/cornellbox.usda"], invisible_overrides: Some(0) } +layer: $DIR/cornellbox.usda +warning: Warning { code: AssetUnsupportedByHost, kind: Skipped, count: 1, prims: [], message: "No asset loader: environment map $DIR/sky_gradient.exr ignored — the dome falls back to its uniform colour. Use Scene::from_usd_with_assets to supply one." } +warning: Warning { code: MaterialFallbackDefault, kind: Skipped, count: 1, prims: ["/scene/Looks/initialShadingGroup"], message: "Material /scene/Looks/initialShadingGroup has no surface shader — using default grey OpenPBR" } +lights: 1 +light 0: dome name Some("/scene/Sky") lpe None pmf 1.0 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 5 geometries, PrimitiveBreakdown { triangles: 822, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 2 } top level, PrimitiveBreakdown { triangles: 1582, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 2 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 4.0 motion [] pieces all=10:88b22fc3345d5b05 camera=10:88b22fc3345d5b05 shadow=10:88b22fc3345d5b05 indirect=10:88b22fc3345d5b05 +geom 1: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.2 motion [] pieces all=760:c2b60a75c52c78b9 camera=760:c2b60a75c52c78b9 shadow=760:c2b60a75c52c78b9 indirect=760:c2b60a75c52c78b9 +geom 2: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=12:94a297badef437e1 camera=12:94a297badef437e1 shadow=12:94a297badef437e1 indirect=12:94a297badef437e1 +geom 3: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.25 motion [] pieces all=800:4a8c9f44d777e131 camera=800:4a8c9f44d777e131 shadow=800:4a8c9f44d777e131 indirect=800:4a8c9f44d777e131 +geom 4: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.3585339 motion [] pieces all=760:2344ecf63e12c441 camera=760:2344ecf63e12c441 shadow=760:2344ecf63e12c441 indirect=760:2344ecf63e12c441 +provenance material /scene/Looks/initialShadingGroup: MaterialOrigin { slots: [0, 1, 2, 3, 4], displaced: false } +provenance light /scene/Sky: LightOrigin { index: 0, geoms: 0..0 } +provenance geometry 0..1: /scene/pCube1 +provenance geometry 1..2: /scene/pSphere1 +provenance geometry 2..3: /scene/pCube2 +provenance geometry 3..4: /scene/pTorus1 +provenance geometry 4..5: /scene/pSphere2 +provenance mesh: MeshOrigin { geom_id: 0, slot: 0, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 1, slot: 1, baked: false, moving: false } +provenance mesh: MeshOrigin { geom_id: 2, slot: 2, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 3, slot: 3, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 4, slot: 1, baked: false, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 12343188411137242430, n_points: 8, n_indices: 20, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 1: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 17119738035130870988, n_points: 382, n_indices: 1560, n_uvs: None, smooth: false, material: 0 }), placements: 2, shared: false, displaced: false } +provenance mesh slot 2: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 1739488954094729910, n_points: 8, n_indices: 24, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 3: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 6096447469814747168, n_points: 400, n_indices: 1600, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/scene/camera1"), cameras: ["/scene/camera1"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/scene/camera1"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-29.image b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-29.image new file mode 100644 index 000000000..ba4884437 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-29.image @@ -0,0 +1 @@ +640x360 16spp clamp-off 52a1a46f3a46d230 diff --git a/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-3.digest b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-3.digest new file mode 100644 index 000000000..0e859a952 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-3.digest @@ -0,0 +1,40 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/scene/camera1") +camera: Camera { origin: Vec3A(0.0074343784, 1.9913422, 4.0133057), lower_left_corner: Vec3A(-8.881443, -3.0086517, -0.98669434), horizontal: Vec3A(17.777756, 0.0, 0.0), vertical: Vec3A(0.0, 9.999988, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: Some(Vec4(0.0, 0.0, -1.0, 3.9133058)), far: Some(Vec4(0.0, 0.0, 1.0, 9995.986)), planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: None +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 640, height: 360, region: PixelRect { x0: 0, y0: 0, x1: 640, y1: 360 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 12.700017, aperture: [25.4, 25.4], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 5.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/cornellbox.usda"], invisible_overrides: Some(0) } +layer: $DIR/cornellbox.usda +warning: Warning { code: AssetUnsupportedByHost, kind: Skipped, count: 1, prims: [], message: "No asset loader: environment map $DIR/sky_gradient.exr ignored — the dome falls back to its uniform colour. Use Scene::from_usd_with_assets to supply one." } +warning: Warning { code: MaterialFallbackDefault, kind: Skipped, count: 1, prims: ["/scene/Looks/initialShadingGroup"], message: "Material /scene/Looks/initialShadingGroup has no surface shader — using default grey OpenPBR" } +lights: 1 +light 0: dome name Some("/scene/Sky") lpe None pmf 1.0 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 5 geometries, PrimitiveBreakdown { triangles: 822, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 2 } top level, PrimitiveBreakdown { triangles: 1582, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 2 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 4.0 motion [] pieces all=10:88b22fc3345d5b05 camera=10:88b22fc3345d5b05 shadow=10:88b22fc3345d5b05 indirect=10:88b22fc3345d5b05 +geom 1: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.2 motion [] pieces all=760:c2b60a75c52c78b9 camera=760:c2b60a75c52c78b9 shadow=760:c2b60a75c52c78b9 indirect=760:c2b60a75c52c78b9 +geom 2: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=12:94a297badef437e1 camera=12:94a297badef437e1 shadow=12:94a297badef437e1 indirect=12:94a297badef437e1 +geom 3: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.25 motion [] pieces all=800:4a8c9f44d777e131 camera=800:4a8c9f44d777e131 shadow=800:4a8c9f44d777e131 indirect=800:4a8c9f44d777e131 +geom 4: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.3585339 motion [] pieces all=760:2344ecf63e12c441 camera=760:2344ecf63e12c441 shadow=760:2344ecf63e12c441 indirect=760:2344ecf63e12c441 +provenance material /scene/Looks/initialShadingGroup: MaterialOrigin { slots: [0, 1, 2, 3, 4], displaced: false } +provenance light /scene/Sky: LightOrigin { index: 0, geoms: 0..0 } +provenance geometry 0..1: /scene/pCube1 +provenance geometry 1..2: /scene/pSphere1 +provenance geometry 2..3: /scene/pCube2 +provenance geometry 3..4: /scene/pTorus1 +provenance geometry 4..5: /scene/pSphere2 +provenance mesh: MeshOrigin { geom_id: 0, slot: 0, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 1, slot: 1, baked: false, moving: false } +provenance mesh: MeshOrigin { geom_id: 2, slot: 2, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 3, slot: 3, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 4, slot: 1, baked: false, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 12343188411137242430, n_points: 8, n_indices: 20, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 1: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 17119738035130870988, n_points: 382, n_indices: 1560, n_uvs: None, smooth: false, material: 0 }), placements: 2, shared: false, displaced: false } +provenance mesh slot 2: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 1739488954094729910, n_points: 8, n_indices: 24, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 3: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 6096447469814747168, n_points: 400, n_indices: 1600, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/scene/camera1"), cameras: ["/scene/camera1"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/scene/camera1"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-3.image b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-3.image new file mode 100644 index 000000000..ba4884437 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-3.image @@ -0,0 +1 @@ +640x360 16spp clamp-off 52a1a46f3a46d230 diff --git a/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-30.digest b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-30.digest new file mode 100644 index 000000000..0e859a952 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-30.digest @@ -0,0 +1,40 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/scene/camera1") +camera: Camera { origin: Vec3A(0.0074343784, 1.9913422, 4.0133057), lower_left_corner: Vec3A(-8.881443, -3.0086517, -0.98669434), horizontal: Vec3A(17.777756, 0.0, 0.0), vertical: Vec3A(0.0, 9.999988, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: Some(Vec4(0.0, 0.0, -1.0, 3.9133058)), far: Some(Vec4(0.0, 0.0, 1.0, 9995.986)), planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: None +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 640, height: 360, region: PixelRect { x0: 0, y0: 0, x1: 640, y1: 360 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 12.700017, aperture: [25.4, 25.4], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 5.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/cornellbox.usda"], invisible_overrides: Some(0) } +layer: $DIR/cornellbox.usda +warning: Warning { code: AssetUnsupportedByHost, kind: Skipped, count: 1, prims: [], message: "No asset loader: environment map $DIR/sky_gradient.exr ignored — the dome falls back to its uniform colour. Use Scene::from_usd_with_assets to supply one." } +warning: Warning { code: MaterialFallbackDefault, kind: Skipped, count: 1, prims: ["/scene/Looks/initialShadingGroup"], message: "Material /scene/Looks/initialShadingGroup has no surface shader — using default grey OpenPBR" } +lights: 1 +light 0: dome name Some("/scene/Sky") lpe None pmf 1.0 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 5 geometries, PrimitiveBreakdown { triangles: 822, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 2 } top level, PrimitiveBreakdown { triangles: 1582, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 2 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 4.0 motion [] pieces all=10:88b22fc3345d5b05 camera=10:88b22fc3345d5b05 shadow=10:88b22fc3345d5b05 indirect=10:88b22fc3345d5b05 +geom 1: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.2 motion [] pieces all=760:c2b60a75c52c78b9 camera=760:c2b60a75c52c78b9 shadow=760:c2b60a75c52c78b9 indirect=760:c2b60a75c52c78b9 +geom 2: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=12:94a297badef437e1 camera=12:94a297badef437e1 shadow=12:94a297badef437e1 indirect=12:94a297badef437e1 +geom 3: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.25 motion [] pieces all=800:4a8c9f44d777e131 camera=800:4a8c9f44d777e131 shadow=800:4a8c9f44d777e131 indirect=800:4a8c9f44d777e131 +geom 4: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.3585339 motion [] pieces all=760:2344ecf63e12c441 camera=760:2344ecf63e12c441 shadow=760:2344ecf63e12c441 indirect=760:2344ecf63e12c441 +provenance material /scene/Looks/initialShadingGroup: MaterialOrigin { slots: [0, 1, 2, 3, 4], displaced: false } +provenance light /scene/Sky: LightOrigin { index: 0, geoms: 0..0 } +provenance geometry 0..1: /scene/pCube1 +provenance geometry 1..2: /scene/pSphere1 +provenance geometry 2..3: /scene/pCube2 +provenance geometry 3..4: /scene/pTorus1 +provenance geometry 4..5: /scene/pSphere2 +provenance mesh: MeshOrigin { geom_id: 0, slot: 0, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 1, slot: 1, baked: false, moving: false } +provenance mesh: MeshOrigin { geom_id: 2, slot: 2, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 3, slot: 3, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 4, slot: 1, baked: false, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 12343188411137242430, n_points: 8, n_indices: 20, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 1: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 17119738035130870988, n_points: 382, n_indices: 1560, n_uvs: None, smooth: false, material: 0 }), placements: 2, shared: false, displaced: false } +provenance mesh slot 2: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 1739488954094729910, n_points: 8, n_indices: 24, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 3: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 6096447469814747168, n_points: 400, n_indices: 1600, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/scene/camera1"), cameras: ["/scene/camera1"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/scene/camera1"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-30.image b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-30.image new file mode 100644 index 000000000..ba4884437 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-30.image @@ -0,0 +1 @@ +640x360 16spp clamp-off 52a1a46f3a46d230 diff --git a/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-31.digest b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-31.digest new file mode 100644 index 000000000..0e859a952 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-31.digest @@ -0,0 +1,40 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/scene/camera1") +camera: Camera { origin: Vec3A(0.0074343784, 1.9913422, 4.0133057), lower_left_corner: Vec3A(-8.881443, -3.0086517, -0.98669434), horizontal: Vec3A(17.777756, 0.0, 0.0), vertical: Vec3A(0.0, 9.999988, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: Some(Vec4(0.0, 0.0, -1.0, 3.9133058)), far: Some(Vec4(0.0, 0.0, 1.0, 9995.986)), planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: None +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 640, height: 360, region: PixelRect { x0: 0, y0: 0, x1: 640, y1: 360 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 12.700017, aperture: [25.4, 25.4], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 5.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/cornellbox.usda"], invisible_overrides: Some(0) } +layer: $DIR/cornellbox.usda +warning: Warning { code: AssetUnsupportedByHost, kind: Skipped, count: 1, prims: [], message: "No asset loader: environment map $DIR/sky_gradient.exr ignored — the dome falls back to its uniform colour. Use Scene::from_usd_with_assets to supply one." } +warning: Warning { code: MaterialFallbackDefault, kind: Skipped, count: 1, prims: ["/scene/Looks/initialShadingGroup"], message: "Material /scene/Looks/initialShadingGroup has no surface shader — using default grey OpenPBR" } +lights: 1 +light 0: dome name Some("/scene/Sky") lpe None pmf 1.0 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 5 geometries, PrimitiveBreakdown { triangles: 822, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 2 } top level, PrimitiveBreakdown { triangles: 1582, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 2 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 4.0 motion [] pieces all=10:88b22fc3345d5b05 camera=10:88b22fc3345d5b05 shadow=10:88b22fc3345d5b05 indirect=10:88b22fc3345d5b05 +geom 1: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.2 motion [] pieces all=760:c2b60a75c52c78b9 camera=760:c2b60a75c52c78b9 shadow=760:c2b60a75c52c78b9 indirect=760:c2b60a75c52c78b9 +geom 2: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=12:94a297badef437e1 camera=12:94a297badef437e1 shadow=12:94a297badef437e1 indirect=12:94a297badef437e1 +geom 3: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.25 motion [] pieces all=800:4a8c9f44d777e131 camera=800:4a8c9f44d777e131 shadow=800:4a8c9f44d777e131 indirect=800:4a8c9f44d777e131 +geom 4: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.3585339 motion [] pieces all=760:2344ecf63e12c441 camera=760:2344ecf63e12c441 shadow=760:2344ecf63e12c441 indirect=760:2344ecf63e12c441 +provenance material /scene/Looks/initialShadingGroup: MaterialOrigin { slots: [0, 1, 2, 3, 4], displaced: false } +provenance light /scene/Sky: LightOrigin { index: 0, geoms: 0..0 } +provenance geometry 0..1: /scene/pCube1 +provenance geometry 1..2: /scene/pSphere1 +provenance geometry 2..3: /scene/pCube2 +provenance geometry 3..4: /scene/pTorus1 +provenance geometry 4..5: /scene/pSphere2 +provenance mesh: MeshOrigin { geom_id: 0, slot: 0, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 1, slot: 1, baked: false, moving: false } +provenance mesh: MeshOrigin { geom_id: 2, slot: 2, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 3, slot: 3, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 4, slot: 1, baked: false, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 12343188411137242430, n_points: 8, n_indices: 20, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 1: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 17119738035130870988, n_points: 382, n_indices: 1560, n_uvs: None, smooth: false, material: 0 }), placements: 2, shared: false, displaced: false } +provenance mesh slot 2: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 1739488954094729910, n_points: 8, n_indices: 24, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 3: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 6096447469814747168, n_points: 400, n_indices: 1600, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/scene/camera1"), cameras: ["/scene/camera1"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/scene/camera1"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-31.image b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-31.image new file mode 100644 index 000000000..ba4884437 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-31.image @@ -0,0 +1 @@ +640x360 16spp clamp-off 52a1a46f3a46d230 diff --git a/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-32.digest b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-32.digest new file mode 100644 index 000000000..0e859a952 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-32.digest @@ -0,0 +1,40 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/scene/camera1") +camera: Camera { origin: Vec3A(0.0074343784, 1.9913422, 4.0133057), lower_left_corner: Vec3A(-8.881443, -3.0086517, -0.98669434), horizontal: Vec3A(17.777756, 0.0, 0.0), vertical: Vec3A(0.0, 9.999988, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: Some(Vec4(0.0, 0.0, -1.0, 3.9133058)), far: Some(Vec4(0.0, 0.0, 1.0, 9995.986)), planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: None +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 640, height: 360, region: PixelRect { x0: 0, y0: 0, x1: 640, y1: 360 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 12.700017, aperture: [25.4, 25.4], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 5.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/cornellbox.usda"], invisible_overrides: Some(0) } +layer: $DIR/cornellbox.usda +warning: Warning { code: AssetUnsupportedByHost, kind: Skipped, count: 1, prims: [], message: "No asset loader: environment map $DIR/sky_gradient.exr ignored — the dome falls back to its uniform colour. Use Scene::from_usd_with_assets to supply one." } +warning: Warning { code: MaterialFallbackDefault, kind: Skipped, count: 1, prims: ["/scene/Looks/initialShadingGroup"], message: "Material /scene/Looks/initialShadingGroup has no surface shader — using default grey OpenPBR" } +lights: 1 +light 0: dome name Some("/scene/Sky") lpe None pmf 1.0 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 5 geometries, PrimitiveBreakdown { triangles: 822, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 2 } top level, PrimitiveBreakdown { triangles: 1582, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 2 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 4.0 motion [] pieces all=10:88b22fc3345d5b05 camera=10:88b22fc3345d5b05 shadow=10:88b22fc3345d5b05 indirect=10:88b22fc3345d5b05 +geom 1: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.2 motion [] pieces all=760:c2b60a75c52c78b9 camera=760:c2b60a75c52c78b9 shadow=760:c2b60a75c52c78b9 indirect=760:c2b60a75c52c78b9 +geom 2: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=12:94a297badef437e1 camera=12:94a297badef437e1 shadow=12:94a297badef437e1 indirect=12:94a297badef437e1 +geom 3: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.25 motion [] pieces all=800:4a8c9f44d777e131 camera=800:4a8c9f44d777e131 shadow=800:4a8c9f44d777e131 indirect=800:4a8c9f44d777e131 +geom 4: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.3585339 motion [] pieces all=760:2344ecf63e12c441 camera=760:2344ecf63e12c441 shadow=760:2344ecf63e12c441 indirect=760:2344ecf63e12c441 +provenance material /scene/Looks/initialShadingGroup: MaterialOrigin { slots: [0, 1, 2, 3, 4], displaced: false } +provenance light /scene/Sky: LightOrigin { index: 0, geoms: 0..0 } +provenance geometry 0..1: /scene/pCube1 +provenance geometry 1..2: /scene/pSphere1 +provenance geometry 2..3: /scene/pCube2 +provenance geometry 3..4: /scene/pTorus1 +provenance geometry 4..5: /scene/pSphere2 +provenance mesh: MeshOrigin { geom_id: 0, slot: 0, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 1, slot: 1, baked: false, moving: false } +provenance mesh: MeshOrigin { geom_id: 2, slot: 2, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 3, slot: 3, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 4, slot: 1, baked: false, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 12343188411137242430, n_points: 8, n_indices: 20, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 1: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 17119738035130870988, n_points: 382, n_indices: 1560, n_uvs: None, smooth: false, material: 0 }), placements: 2, shared: false, displaced: false } +provenance mesh slot 2: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 1739488954094729910, n_points: 8, n_indices: 24, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 3: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 6096447469814747168, n_points: 400, n_indices: 1600, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/scene/camera1"), cameras: ["/scene/camera1"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/scene/camera1"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-32.image b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-32.image new file mode 100644 index 000000000..ba4884437 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-32.image @@ -0,0 +1 @@ +640x360 16spp clamp-off 52a1a46f3a46d230 diff --git a/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-33.digest b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-33.digest new file mode 100644 index 000000000..0e859a952 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-33.digest @@ -0,0 +1,40 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/scene/camera1") +camera: Camera { origin: Vec3A(0.0074343784, 1.9913422, 4.0133057), lower_left_corner: Vec3A(-8.881443, -3.0086517, -0.98669434), horizontal: Vec3A(17.777756, 0.0, 0.0), vertical: Vec3A(0.0, 9.999988, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: Some(Vec4(0.0, 0.0, -1.0, 3.9133058)), far: Some(Vec4(0.0, 0.0, 1.0, 9995.986)), planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: None +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 640, height: 360, region: PixelRect { x0: 0, y0: 0, x1: 640, y1: 360 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 12.700017, aperture: [25.4, 25.4], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 5.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/cornellbox.usda"], invisible_overrides: Some(0) } +layer: $DIR/cornellbox.usda +warning: Warning { code: AssetUnsupportedByHost, kind: Skipped, count: 1, prims: [], message: "No asset loader: environment map $DIR/sky_gradient.exr ignored — the dome falls back to its uniform colour. Use Scene::from_usd_with_assets to supply one." } +warning: Warning { code: MaterialFallbackDefault, kind: Skipped, count: 1, prims: ["/scene/Looks/initialShadingGroup"], message: "Material /scene/Looks/initialShadingGroup has no surface shader — using default grey OpenPBR" } +lights: 1 +light 0: dome name Some("/scene/Sky") lpe None pmf 1.0 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 5 geometries, PrimitiveBreakdown { triangles: 822, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 2 } top level, PrimitiveBreakdown { triangles: 1582, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 2 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 4.0 motion [] pieces all=10:88b22fc3345d5b05 camera=10:88b22fc3345d5b05 shadow=10:88b22fc3345d5b05 indirect=10:88b22fc3345d5b05 +geom 1: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.2 motion [] pieces all=760:c2b60a75c52c78b9 camera=760:c2b60a75c52c78b9 shadow=760:c2b60a75c52c78b9 indirect=760:c2b60a75c52c78b9 +geom 2: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=12:94a297badef437e1 camera=12:94a297badef437e1 shadow=12:94a297badef437e1 indirect=12:94a297badef437e1 +geom 3: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.25 motion [] pieces all=800:4a8c9f44d777e131 camera=800:4a8c9f44d777e131 shadow=800:4a8c9f44d777e131 indirect=800:4a8c9f44d777e131 +geom 4: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.3585339 motion [] pieces all=760:2344ecf63e12c441 camera=760:2344ecf63e12c441 shadow=760:2344ecf63e12c441 indirect=760:2344ecf63e12c441 +provenance material /scene/Looks/initialShadingGroup: MaterialOrigin { slots: [0, 1, 2, 3, 4], displaced: false } +provenance light /scene/Sky: LightOrigin { index: 0, geoms: 0..0 } +provenance geometry 0..1: /scene/pCube1 +provenance geometry 1..2: /scene/pSphere1 +provenance geometry 2..3: /scene/pCube2 +provenance geometry 3..4: /scene/pTorus1 +provenance geometry 4..5: /scene/pSphere2 +provenance mesh: MeshOrigin { geom_id: 0, slot: 0, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 1, slot: 1, baked: false, moving: false } +provenance mesh: MeshOrigin { geom_id: 2, slot: 2, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 3, slot: 3, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 4, slot: 1, baked: false, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 12343188411137242430, n_points: 8, n_indices: 20, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 1: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 17119738035130870988, n_points: 382, n_indices: 1560, n_uvs: None, smooth: false, material: 0 }), placements: 2, shared: false, displaced: false } +provenance mesh slot 2: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 1739488954094729910, n_points: 8, n_indices: 24, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 3: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 6096447469814747168, n_points: 400, n_indices: 1600, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/scene/camera1"), cameras: ["/scene/camera1"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/scene/camera1"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-33.image b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-33.image new file mode 100644 index 000000000..ba4884437 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-33.image @@ -0,0 +1 @@ +640x360 16spp clamp-off 52a1a46f3a46d230 diff --git a/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-34.digest b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-34.digest new file mode 100644 index 000000000..0e859a952 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-34.digest @@ -0,0 +1,40 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/scene/camera1") +camera: Camera { origin: Vec3A(0.0074343784, 1.9913422, 4.0133057), lower_left_corner: Vec3A(-8.881443, -3.0086517, -0.98669434), horizontal: Vec3A(17.777756, 0.0, 0.0), vertical: Vec3A(0.0, 9.999988, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: Some(Vec4(0.0, 0.0, -1.0, 3.9133058)), far: Some(Vec4(0.0, 0.0, 1.0, 9995.986)), planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: None +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 640, height: 360, region: PixelRect { x0: 0, y0: 0, x1: 640, y1: 360 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 12.700017, aperture: [25.4, 25.4], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 5.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/cornellbox.usda"], invisible_overrides: Some(0) } +layer: $DIR/cornellbox.usda +warning: Warning { code: AssetUnsupportedByHost, kind: Skipped, count: 1, prims: [], message: "No asset loader: environment map $DIR/sky_gradient.exr ignored — the dome falls back to its uniform colour. Use Scene::from_usd_with_assets to supply one." } +warning: Warning { code: MaterialFallbackDefault, kind: Skipped, count: 1, prims: ["/scene/Looks/initialShadingGroup"], message: "Material /scene/Looks/initialShadingGroup has no surface shader — using default grey OpenPBR" } +lights: 1 +light 0: dome name Some("/scene/Sky") lpe None pmf 1.0 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 5 geometries, PrimitiveBreakdown { triangles: 822, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 2 } top level, PrimitiveBreakdown { triangles: 1582, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 2 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 4.0 motion [] pieces all=10:88b22fc3345d5b05 camera=10:88b22fc3345d5b05 shadow=10:88b22fc3345d5b05 indirect=10:88b22fc3345d5b05 +geom 1: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.2 motion [] pieces all=760:c2b60a75c52c78b9 camera=760:c2b60a75c52c78b9 shadow=760:c2b60a75c52c78b9 indirect=760:c2b60a75c52c78b9 +geom 2: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=12:94a297badef437e1 camera=12:94a297badef437e1 shadow=12:94a297badef437e1 indirect=12:94a297badef437e1 +geom 3: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.25 motion [] pieces all=800:4a8c9f44d777e131 camera=800:4a8c9f44d777e131 shadow=800:4a8c9f44d777e131 indirect=800:4a8c9f44d777e131 +geom 4: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.3585339 motion [] pieces all=760:2344ecf63e12c441 camera=760:2344ecf63e12c441 shadow=760:2344ecf63e12c441 indirect=760:2344ecf63e12c441 +provenance material /scene/Looks/initialShadingGroup: MaterialOrigin { slots: [0, 1, 2, 3, 4], displaced: false } +provenance light /scene/Sky: LightOrigin { index: 0, geoms: 0..0 } +provenance geometry 0..1: /scene/pCube1 +provenance geometry 1..2: /scene/pSphere1 +provenance geometry 2..3: /scene/pCube2 +provenance geometry 3..4: /scene/pTorus1 +provenance geometry 4..5: /scene/pSphere2 +provenance mesh: MeshOrigin { geom_id: 0, slot: 0, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 1, slot: 1, baked: false, moving: false } +provenance mesh: MeshOrigin { geom_id: 2, slot: 2, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 3, slot: 3, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 4, slot: 1, baked: false, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 12343188411137242430, n_points: 8, n_indices: 20, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 1: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 17119738035130870988, n_points: 382, n_indices: 1560, n_uvs: None, smooth: false, material: 0 }), placements: 2, shared: false, displaced: false } +provenance mesh slot 2: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 1739488954094729910, n_points: 8, n_indices: 24, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 3: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 6096447469814747168, n_points: 400, n_indices: 1600, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/scene/camera1"), cameras: ["/scene/camera1"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/scene/camera1"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-34.image b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-34.image new file mode 100644 index 000000000..ba4884437 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-34.image @@ -0,0 +1 @@ +640x360 16spp clamp-off 52a1a46f3a46d230 diff --git a/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-35.digest b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-35.digest new file mode 100644 index 000000000..0e859a952 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-35.digest @@ -0,0 +1,40 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/scene/camera1") +camera: Camera { origin: Vec3A(0.0074343784, 1.9913422, 4.0133057), lower_left_corner: Vec3A(-8.881443, -3.0086517, -0.98669434), horizontal: Vec3A(17.777756, 0.0, 0.0), vertical: Vec3A(0.0, 9.999988, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: Some(Vec4(0.0, 0.0, -1.0, 3.9133058)), far: Some(Vec4(0.0, 0.0, 1.0, 9995.986)), planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: None +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 640, height: 360, region: PixelRect { x0: 0, y0: 0, x1: 640, y1: 360 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 12.700017, aperture: [25.4, 25.4], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 5.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/cornellbox.usda"], invisible_overrides: Some(0) } +layer: $DIR/cornellbox.usda +warning: Warning { code: AssetUnsupportedByHost, kind: Skipped, count: 1, prims: [], message: "No asset loader: environment map $DIR/sky_gradient.exr ignored — the dome falls back to its uniform colour. Use Scene::from_usd_with_assets to supply one." } +warning: Warning { code: MaterialFallbackDefault, kind: Skipped, count: 1, prims: ["/scene/Looks/initialShadingGroup"], message: "Material /scene/Looks/initialShadingGroup has no surface shader — using default grey OpenPBR" } +lights: 1 +light 0: dome name Some("/scene/Sky") lpe None pmf 1.0 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 5 geometries, PrimitiveBreakdown { triangles: 822, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 2 } top level, PrimitiveBreakdown { triangles: 1582, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 2 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 4.0 motion [] pieces all=10:88b22fc3345d5b05 camera=10:88b22fc3345d5b05 shadow=10:88b22fc3345d5b05 indirect=10:88b22fc3345d5b05 +geom 1: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.2 motion [] pieces all=760:c2b60a75c52c78b9 camera=760:c2b60a75c52c78b9 shadow=760:c2b60a75c52c78b9 indirect=760:c2b60a75c52c78b9 +geom 2: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=12:94a297badef437e1 camera=12:94a297badef437e1 shadow=12:94a297badef437e1 indirect=12:94a297badef437e1 +geom 3: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.25 motion [] pieces all=800:4a8c9f44d777e131 camera=800:4a8c9f44d777e131 shadow=800:4a8c9f44d777e131 indirect=800:4a8c9f44d777e131 +geom 4: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.3585339 motion [] pieces all=760:2344ecf63e12c441 camera=760:2344ecf63e12c441 shadow=760:2344ecf63e12c441 indirect=760:2344ecf63e12c441 +provenance material /scene/Looks/initialShadingGroup: MaterialOrigin { slots: [0, 1, 2, 3, 4], displaced: false } +provenance light /scene/Sky: LightOrigin { index: 0, geoms: 0..0 } +provenance geometry 0..1: /scene/pCube1 +provenance geometry 1..2: /scene/pSphere1 +provenance geometry 2..3: /scene/pCube2 +provenance geometry 3..4: /scene/pTorus1 +provenance geometry 4..5: /scene/pSphere2 +provenance mesh: MeshOrigin { geom_id: 0, slot: 0, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 1, slot: 1, baked: false, moving: false } +provenance mesh: MeshOrigin { geom_id: 2, slot: 2, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 3, slot: 3, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 4, slot: 1, baked: false, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 12343188411137242430, n_points: 8, n_indices: 20, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 1: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 17119738035130870988, n_points: 382, n_indices: 1560, n_uvs: None, smooth: false, material: 0 }), placements: 2, shared: false, displaced: false } +provenance mesh slot 2: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 1739488954094729910, n_points: 8, n_indices: 24, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 3: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 6096447469814747168, n_points: 400, n_indices: 1600, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/scene/camera1"), cameras: ["/scene/camera1"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/scene/camera1"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-35.image b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-35.image new file mode 100644 index 000000000..ba4884437 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-35.image @@ -0,0 +1 @@ +640x360 16spp clamp-off 52a1a46f3a46d230 diff --git a/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-36.digest b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-36.digest new file mode 100644 index 000000000..0e859a952 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-36.digest @@ -0,0 +1,40 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/scene/camera1") +camera: Camera { origin: Vec3A(0.0074343784, 1.9913422, 4.0133057), lower_left_corner: Vec3A(-8.881443, -3.0086517, -0.98669434), horizontal: Vec3A(17.777756, 0.0, 0.0), vertical: Vec3A(0.0, 9.999988, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: Some(Vec4(0.0, 0.0, -1.0, 3.9133058)), far: Some(Vec4(0.0, 0.0, 1.0, 9995.986)), planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: None +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 640, height: 360, region: PixelRect { x0: 0, y0: 0, x1: 640, y1: 360 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 12.700017, aperture: [25.4, 25.4], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 5.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/cornellbox.usda"], invisible_overrides: Some(0) } +layer: $DIR/cornellbox.usda +warning: Warning { code: AssetUnsupportedByHost, kind: Skipped, count: 1, prims: [], message: "No asset loader: environment map $DIR/sky_gradient.exr ignored — the dome falls back to its uniform colour. Use Scene::from_usd_with_assets to supply one." } +warning: Warning { code: MaterialFallbackDefault, kind: Skipped, count: 1, prims: ["/scene/Looks/initialShadingGroup"], message: "Material /scene/Looks/initialShadingGroup has no surface shader — using default grey OpenPBR" } +lights: 1 +light 0: dome name Some("/scene/Sky") lpe None pmf 1.0 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 5 geometries, PrimitiveBreakdown { triangles: 822, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 2 } top level, PrimitiveBreakdown { triangles: 1582, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 2 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 4.0 motion [] pieces all=10:88b22fc3345d5b05 camera=10:88b22fc3345d5b05 shadow=10:88b22fc3345d5b05 indirect=10:88b22fc3345d5b05 +geom 1: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.2 motion [] pieces all=760:c2b60a75c52c78b9 camera=760:c2b60a75c52c78b9 shadow=760:c2b60a75c52c78b9 indirect=760:c2b60a75c52c78b9 +geom 2: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=12:94a297badef437e1 camera=12:94a297badef437e1 shadow=12:94a297badef437e1 indirect=12:94a297badef437e1 +geom 3: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.25 motion [] pieces all=800:4a8c9f44d777e131 camera=800:4a8c9f44d777e131 shadow=800:4a8c9f44d777e131 indirect=800:4a8c9f44d777e131 +geom 4: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.3585339 motion [] pieces all=760:2344ecf63e12c441 camera=760:2344ecf63e12c441 shadow=760:2344ecf63e12c441 indirect=760:2344ecf63e12c441 +provenance material /scene/Looks/initialShadingGroup: MaterialOrigin { slots: [0, 1, 2, 3, 4], displaced: false } +provenance light /scene/Sky: LightOrigin { index: 0, geoms: 0..0 } +provenance geometry 0..1: /scene/pCube1 +provenance geometry 1..2: /scene/pSphere1 +provenance geometry 2..3: /scene/pCube2 +provenance geometry 3..4: /scene/pTorus1 +provenance geometry 4..5: /scene/pSphere2 +provenance mesh: MeshOrigin { geom_id: 0, slot: 0, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 1, slot: 1, baked: false, moving: false } +provenance mesh: MeshOrigin { geom_id: 2, slot: 2, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 3, slot: 3, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 4, slot: 1, baked: false, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 12343188411137242430, n_points: 8, n_indices: 20, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 1: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 17119738035130870988, n_points: 382, n_indices: 1560, n_uvs: None, smooth: false, material: 0 }), placements: 2, shared: false, displaced: false } +provenance mesh slot 2: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 1739488954094729910, n_points: 8, n_indices: 24, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 3: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 6096447469814747168, n_points: 400, n_indices: 1600, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/scene/camera1"), cameras: ["/scene/camera1"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/scene/camera1"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-36.image b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-36.image new file mode 100644 index 000000000..ba4884437 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-36.image @@ -0,0 +1 @@ +640x360 16spp clamp-off 52a1a46f3a46d230 diff --git a/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-37.digest b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-37.digest new file mode 100644 index 000000000..0e859a952 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-37.digest @@ -0,0 +1,40 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/scene/camera1") +camera: Camera { origin: Vec3A(0.0074343784, 1.9913422, 4.0133057), lower_left_corner: Vec3A(-8.881443, -3.0086517, -0.98669434), horizontal: Vec3A(17.777756, 0.0, 0.0), vertical: Vec3A(0.0, 9.999988, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: Some(Vec4(0.0, 0.0, -1.0, 3.9133058)), far: Some(Vec4(0.0, 0.0, 1.0, 9995.986)), planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: None +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 640, height: 360, region: PixelRect { x0: 0, y0: 0, x1: 640, y1: 360 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 12.700017, aperture: [25.4, 25.4], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 5.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/cornellbox.usda"], invisible_overrides: Some(0) } +layer: $DIR/cornellbox.usda +warning: Warning { code: AssetUnsupportedByHost, kind: Skipped, count: 1, prims: [], message: "No asset loader: environment map $DIR/sky_gradient.exr ignored — the dome falls back to its uniform colour. Use Scene::from_usd_with_assets to supply one." } +warning: Warning { code: MaterialFallbackDefault, kind: Skipped, count: 1, prims: ["/scene/Looks/initialShadingGroup"], message: "Material /scene/Looks/initialShadingGroup has no surface shader — using default grey OpenPBR" } +lights: 1 +light 0: dome name Some("/scene/Sky") lpe None pmf 1.0 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 5 geometries, PrimitiveBreakdown { triangles: 822, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 2 } top level, PrimitiveBreakdown { triangles: 1582, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 2 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 4.0 motion [] pieces all=10:88b22fc3345d5b05 camera=10:88b22fc3345d5b05 shadow=10:88b22fc3345d5b05 indirect=10:88b22fc3345d5b05 +geom 1: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.2 motion [] pieces all=760:c2b60a75c52c78b9 camera=760:c2b60a75c52c78b9 shadow=760:c2b60a75c52c78b9 indirect=760:c2b60a75c52c78b9 +geom 2: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=12:94a297badef437e1 camera=12:94a297badef437e1 shadow=12:94a297badef437e1 indirect=12:94a297badef437e1 +geom 3: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.25 motion [] pieces all=800:4a8c9f44d777e131 camera=800:4a8c9f44d777e131 shadow=800:4a8c9f44d777e131 indirect=800:4a8c9f44d777e131 +geom 4: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.3585339 motion [] pieces all=760:2344ecf63e12c441 camera=760:2344ecf63e12c441 shadow=760:2344ecf63e12c441 indirect=760:2344ecf63e12c441 +provenance material /scene/Looks/initialShadingGroup: MaterialOrigin { slots: [0, 1, 2, 3, 4], displaced: false } +provenance light /scene/Sky: LightOrigin { index: 0, geoms: 0..0 } +provenance geometry 0..1: /scene/pCube1 +provenance geometry 1..2: /scene/pSphere1 +provenance geometry 2..3: /scene/pCube2 +provenance geometry 3..4: /scene/pTorus1 +provenance geometry 4..5: /scene/pSphere2 +provenance mesh: MeshOrigin { geom_id: 0, slot: 0, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 1, slot: 1, baked: false, moving: false } +provenance mesh: MeshOrigin { geom_id: 2, slot: 2, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 3, slot: 3, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 4, slot: 1, baked: false, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 12343188411137242430, n_points: 8, n_indices: 20, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 1: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 17119738035130870988, n_points: 382, n_indices: 1560, n_uvs: None, smooth: false, material: 0 }), placements: 2, shared: false, displaced: false } +provenance mesh slot 2: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 1739488954094729910, n_points: 8, n_indices: 24, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 3: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 6096447469814747168, n_points: 400, n_indices: 1600, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/scene/camera1"), cameras: ["/scene/camera1"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/scene/camera1"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-37.image b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-37.image new file mode 100644 index 000000000..ba4884437 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-37.image @@ -0,0 +1 @@ +640x360 16spp clamp-off 52a1a46f3a46d230 diff --git a/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-38.digest b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-38.digest new file mode 100644 index 000000000..0e859a952 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-38.digest @@ -0,0 +1,40 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/scene/camera1") +camera: Camera { origin: Vec3A(0.0074343784, 1.9913422, 4.0133057), lower_left_corner: Vec3A(-8.881443, -3.0086517, -0.98669434), horizontal: Vec3A(17.777756, 0.0, 0.0), vertical: Vec3A(0.0, 9.999988, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: Some(Vec4(0.0, 0.0, -1.0, 3.9133058)), far: Some(Vec4(0.0, 0.0, 1.0, 9995.986)), planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: None +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 640, height: 360, region: PixelRect { x0: 0, y0: 0, x1: 640, y1: 360 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 12.700017, aperture: [25.4, 25.4], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 5.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/cornellbox.usda"], invisible_overrides: Some(0) } +layer: $DIR/cornellbox.usda +warning: Warning { code: AssetUnsupportedByHost, kind: Skipped, count: 1, prims: [], message: "No asset loader: environment map $DIR/sky_gradient.exr ignored — the dome falls back to its uniform colour. Use Scene::from_usd_with_assets to supply one." } +warning: Warning { code: MaterialFallbackDefault, kind: Skipped, count: 1, prims: ["/scene/Looks/initialShadingGroup"], message: "Material /scene/Looks/initialShadingGroup has no surface shader — using default grey OpenPBR" } +lights: 1 +light 0: dome name Some("/scene/Sky") lpe None pmf 1.0 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 5 geometries, PrimitiveBreakdown { triangles: 822, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 2 } top level, PrimitiveBreakdown { triangles: 1582, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 2 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 4.0 motion [] pieces all=10:88b22fc3345d5b05 camera=10:88b22fc3345d5b05 shadow=10:88b22fc3345d5b05 indirect=10:88b22fc3345d5b05 +geom 1: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.2 motion [] pieces all=760:c2b60a75c52c78b9 camera=760:c2b60a75c52c78b9 shadow=760:c2b60a75c52c78b9 indirect=760:c2b60a75c52c78b9 +geom 2: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=12:94a297badef437e1 camera=12:94a297badef437e1 shadow=12:94a297badef437e1 indirect=12:94a297badef437e1 +geom 3: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.25 motion [] pieces all=800:4a8c9f44d777e131 camera=800:4a8c9f44d777e131 shadow=800:4a8c9f44d777e131 indirect=800:4a8c9f44d777e131 +geom 4: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.3585339 motion [] pieces all=760:2344ecf63e12c441 camera=760:2344ecf63e12c441 shadow=760:2344ecf63e12c441 indirect=760:2344ecf63e12c441 +provenance material /scene/Looks/initialShadingGroup: MaterialOrigin { slots: [0, 1, 2, 3, 4], displaced: false } +provenance light /scene/Sky: LightOrigin { index: 0, geoms: 0..0 } +provenance geometry 0..1: /scene/pCube1 +provenance geometry 1..2: /scene/pSphere1 +provenance geometry 2..3: /scene/pCube2 +provenance geometry 3..4: /scene/pTorus1 +provenance geometry 4..5: /scene/pSphere2 +provenance mesh: MeshOrigin { geom_id: 0, slot: 0, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 1, slot: 1, baked: false, moving: false } +provenance mesh: MeshOrigin { geom_id: 2, slot: 2, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 3, slot: 3, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 4, slot: 1, baked: false, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 12343188411137242430, n_points: 8, n_indices: 20, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 1: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 17119738035130870988, n_points: 382, n_indices: 1560, n_uvs: None, smooth: false, material: 0 }), placements: 2, shared: false, displaced: false } +provenance mesh slot 2: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 1739488954094729910, n_points: 8, n_indices: 24, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 3: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 6096447469814747168, n_points: 400, n_indices: 1600, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/scene/camera1"), cameras: ["/scene/camera1"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/scene/camera1"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-38.image b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-38.image new file mode 100644 index 000000000..ba4884437 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-38.image @@ -0,0 +1 @@ +640x360 16spp clamp-off 52a1a46f3a46d230 diff --git a/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-39.digest b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-39.digest new file mode 100644 index 000000000..0e859a952 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-39.digest @@ -0,0 +1,40 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/scene/camera1") +camera: Camera { origin: Vec3A(0.0074343784, 1.9913422, 4.0133057), lower_left_corner: Vec3A(-8.881443, -3.0086517, -0.98669434), horizontal: Vec3A(17.777756, 0.0, 0.0), vertical: Vec3A(0.0, 9.999988, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: Some(Vec4(0.0, 0.0, -1.0, 3.9133058)), far: Some(Vec4(0.0, 0.0, 1.0, 9995.986)), planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: None +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 640, height: 360, region: PixelRect { x0: 0, y0: 0, x1: 640, y1: 360 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 12.700017, aperture: [25.4, 25.4], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 5.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/cornellbox.usda"], invisible_overrides: Some(0) } +layer: $DIR/cornellbox.usda +warning: Warning { code: AssetUnsupportedByHost, kind: Skipped, count: 1, prims: [], message: "No asset loader: environment map $DIR/sky_gradient.exr ignored — the dome falls back to its uniform colour. Use Scene::from_usd_with_assets to supply one." } +warning: Warning { code: MaterialFallbackDefault, kind: Skipped, count: 1, prims: ["/scene/Looks/initialShadingGroup"], message: "Material /scene/Looks/initialShadingGroup has no surface shader — using default grey OpenPBR" } +lights: 1 +light 0: dome name Some("/scene/Sky") lpe None pmf 1.0 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 5 geometries, PrimitiveBreakdown { triangles: 822, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 2 } top level, PrimitiveBreakdown { triangles: 1582, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 2 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 4.0 motion [] pieces all=10:88b22fc3345d5b05 camera=10:88b22fc3345d5b05 shadow=10:88b22fc3345d5b05 indirect=10:88b22fc3345d5b05 +geom 1: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.2 motion [] pieces all=760:c2b60a75c52c78b9 camera=760:c2b60a75c52c78b9 shadow=760:c2b60a75c52c78b9 indirect=760:c2b60a75c52c78b9 +geom 2: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=12:94a297badef437e1 camera=12:94a297badef437e1 shadow=12:94a297badef437e1 indirect=12:94a297badef437e1 +geom 3: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.25 motion [] pieces all=800:4a8c9f44d777e131 camera=800:4a8c9f44d777e131 shadow=800:4a8c9f44d777e131 indirect=800:4a8c9f44d777e131 +geom 4: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.3585339 motion [] pieces all=760:2344ecf63e12c441 camera=760:2344ecf63e12c441 shadow=760:2344ecf63e12c441 indirect=760:2344ecf63e12c441 +provenance material /scene/Looks/initialShadingGroup: MaterialOrigin { slots: [0, 1, 2, 3, 4], displaced: false } +provenance light /scene/Sky: LightOrigin { index: 0, geoms: 0..0 } +provenance geometry 0..1: /scene/pCube1 +provenance geometry 1..2: /scene/pSphere1 +provenance geometry 2..3: /scene/pCube2 +provenance geometry 3..4: /scene/pTorus1 +provenance geometry 4..5: /scene/pSphere2 +provenance mesh: MeshOrigin { geom_id: 0, slot: 0, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 1, slot: 1, baked: false, moving: false } +provenance mesh: MeshOrigin { geom_id: 2, slot: 2, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 3, slot: 3, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 4, slot: 1, baked: false, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 12343188411137242430, n_points: 8, n_indices: 20, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 1: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 17119738035130870988, n_points: 382, n_indices: 1560, n_uvs: None, smooth: false, material: 0 }), placements: 2, shared: false, displaced: false } +provenance mesh slot 2: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 1739488954094729910, n_points: 8, n_indices: 24, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 3: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 6096447469814747168, n_points: 400, n_indices: 1600, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/scene/camera1"), cameras: ["/scene/camera1"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/scene/camera1"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-39.image b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-39.image new file mode 100644 index 000000000..ba4884437 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-39.image @@ -0,0 +1 @@ +640x360 16spp clamp-off 52a1a46f3a46d230 diff --git a/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-4.digest b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-4.digest new file mode 100644 index 000000000..0e859a952 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-4.digest @@ -0,0 +1,40 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/scene/camera1") +camera: Camera { origin: Vec3A(0.0074343784, 1.9913422, 4.0133057), lower_left_corner: Vec3A(-8.881443, -3.0086517, -0.98669434), horizontal: Vec3A(17.777756, 0.0, 0.0), vertical: Vec3A(0.0, 9.999988, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: Some(Vec4(0.0, 0.0, -1.0, 3.9133058)), far: Some(Vec4(0.0, 0.0, 1.0, 9995.986)), planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: None +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 640, height: 360, region: PixelRect { x0: 0, y0: 0, x1: 640, y1: 360 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 12.700017, aperture: [25.4, 25.4], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 5.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/cornellbox.usda"], invisible_overrides: Some(0) } +layer: $DIR/cornellbox.usda +warning: Warning { code: AssetUnsupportedByHost, kind: Skipped, count: 1, prims: [], message: "No asset loader: environment map $DIR/sky_gradient.exr ignored — the dome falls back to its uniform colour. Use Scene::from_usd_with_assets to supply one." } +warning: Warning { code: MaterialFallbackDefault, kind: Skipped, count: 1, prims: ["/scene/Looks/initialShadingGroup"], message: "Material /scene/Looks/initialShadingGroup has no surface shader — using default grey OpenPBR" } +lights: 1 +light 0: dome name Some("/scene/Sky") lpe None pmf 1.0 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 5 geometries, PrimitiveBreakdown { triangles: 822, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 2 } top level, PrimitiveBreakdown { triangles: 1582, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 2 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 4.0 motion [] pieces all=10:88b22fc3345d5b05 camera=10:88b22fc3345d5b05 shadow=10:88b22fc3345d5b05 indirect=10:88b22fc3345d5b05 +geom 1: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.2 motion [] pieces all=760:c2b60a75c52c78b9 camera=760:c2b60a75c52c78b9 shadow=760:c2b60a75c52c78b9 indirect=760:c2b60a75c52c78b9 +geom 2: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=12:94a297badef437e1 camera=12:94a297badef437e1 shadow=12:94a297badef437e1 indirect=12:94a297badef437e1 +geom 3: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.25 motion [] pieces all=800:4a8c9f44d777e131 camera=800:4a8c9f44d777e131 shadow=800:4a8c9f44d777e131 indirect=800:4a8c9f44d777e131 +geom 4: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.3585339 motion [] pieces all=760:2344ecf63e12c441 camera=760:2344ecf63e12c441 shadow=760:2344ecf63e12c441 indirect=760:2344ecf63e12c441 +provenance material /scene/Looks/initialShadingGroup: MaterialOrigin { slots: [0, 1, 2, 3, 4], displaced: false } +provenance light /scene/Sky: LightOrigin { index: 0, geoms: 0..0 } +provenance geometry 0..1: /scene/pCube1 +provenance geometry 1..2: /scene/pSphere1 +provenance geometry 2..3: /scene/pCube2 +provenance geometry 3..4: /scene/pTorus1 +provenance geometry 4..5: /scene/pSphere2 +provenance mesh: MeshOrigin { geom_id: 0, slot: 0, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 1, slot: 1, baked: false, moving: false } +provenance mesh: MeshOrigin { geom_id: 2, slot: 2, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 3, slot: 3, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 4, slot: 1, baked: false, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 12343188411137242430, n_points: 8, n_indices: 20, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 1: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 17119738035130870988, n_points: 382, n_indices: 1560, n_uvs: None, smooth: false, material: 0 }), placements: 2, shared: false, displaced: false } +provenance mesh slot 2: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 1739488954094729910, n_points: 8, n_indices: 24, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 3: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 6096447469814747168, n_points: 400, n_indices: 1600, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/scene/camera1"), cameras: ["/scene/camera1"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/scene/camera1"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-4.image b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-4.image new file mode 100644 index 000000000..ba4884437 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-4.image @@ -0,0 +1 @@ +640x360 16spp clamp-off 52a1a46f3a46d230 diff --git a/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-40.digest b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-40.digest new file mode 100644 index 000000000..0e859a952 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-40.digest @@ -0,0 +1,40 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/scene/camera1") +camera: Camera { origin: Vec3A(0.0074343784, 1.9913422, 4.0133057), lower_left_corner: Vec3A(-8.881443, -3.0086517, -0.98669434), horizontal: Vec3A(17.777756, 0.0, 0.0), vertical: Vec3A(0.0, 9.999988, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: Some(Vec4(0.0, 0.0, -1.0, 3.9133058)), far: Some(Vec4(0.0, 0.0, 1.0, 9995.986)), planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: None +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 640, height: 360, region: PixelRect { x0: 0, y0: 0, x1: 640, y1: 360 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 12.700017, aperture: [25.4, 25.4], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 5.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/cornellbox.usda"], invisible_overrides: Some(0) } +layer: $DIR/cornellbox.usda +warning: Warning { code: AssetUnsupportedByHost, kind: Skipped, count: 1, prims: [], message: "No asset loader: environment map $DIR/sky_gradient.exr ignored — the dome falls back to its uniform colour. Use Scene::from_usd_with_assets to supply one." } +warning: Warning { code: MaterialFallbackDefault, kind: Skipped, count: 1, prims: ["/scene/Looks/initialShadingGroup"], message: "Material /scene/Looks/initialShadingGroup has no surface shader — using default grey OpenPBR" } +lights: 1 +light 0: dome name Some("/scene/Sky") lpe None pmf 1.0 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 5 geometries, PrimitiveBreakdown { triangles: 822, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 2 } top level, PrimitiveBreakdown { triangles: 1582, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 2 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 4.0 motion [] pieces all=10:88b22fc3345d5b05 camera=10:88b22fc3345d5b05 shadow=10:88b22fc3345d5b05 indirect=10:88b22fc3345d5b05 +geom 1: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.2 motion [] pieces all=760:c2b60a75c52c78b9 camera=760:c2b60a75c52c78b9 shadow=760:c2b60a75c52c78b9 indirect=760:c2b60a75c52c78b9 +geom 2: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=12:94a297badef437e1 camera=12:94a297badef437e1 shadow=12:94a297badef437e1 indirect=12:94a297badef437e1 +geom 3: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.25 motion [] pieces all=800:4a8c9f44d777e131 camera=800:4a8c9f44d777e131 shadow=800:4a8c9f44d777e131 indirect=800:4a8c9f44d777e131 +geom 4: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.3585339 motion [] pieces all=760:2344ecf63e12c441 camera=760:2344ecf63e12c441 shadow=760:2344ecf63e12c441 indirect=760:2344ecf63e12c441 +provenance material /scene/Looks/initialShadingGroup: MaterialOrigin { slots: [0, 1, 2, 3, 4], displaced: false } +provenance light /scene/Sky: LightOrigin { index: 0, geoms: 0..0 } +provenance geometry 0..1: /scene/pCube1 +provenance geometry 1..2: /scene/pSphere1 +provenance geometry 2..3: /scene/pCube2 +provenance geometry 3..4: /scene/pTorus1 +provenance geometry 4..5: /scene/pSphere2 +provenance mesh: MeshOrigin { geom_id: 0, slot: 0, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 1, slot: 1, baked: false, moving: false } +provenance mesh: MeshOrigin { geom_id: 2, slot: 2, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 3, slot: 3, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 4, slot: 1, baked: false, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 12343188411137242430, n_points: 8, n_indices: 20, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 1: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 17119738035130870988, n_points: 382, n_indices: 1560, n_uvs: None, smooth: false, material: 0 }), placements: 2, shared: false, displaced: false } +provenance mesh slot 2: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 1739488954094729910, n_points: 8, n_indices: 24, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 3: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 6096447469814747168, n_points: 400, n_indices: 1600, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/scene/camera1"), cameras: ["/scene/camera1"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/scene/camera1"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-40.image b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-40.image new file mode 100644 index 000000000..ba4884437 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-40.image @@ -0,0 +1 @@ +640x360 16spp clamp-off 52a1a46f3a46d230 diff --git a/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-41.digest b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-41.digest new file mode 100644 index 000000000..0e859a952 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-41.digest @@ -0,0 +1,40 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/scene/camera1") +camera: Camera { origin: Vec3A(0.0074343784, 1.9913422, 4.0133057), lower_left_corner: Vec3A(-8.881443, -3.0086517, -0.98669434), horizontal: Vec3A(17.777756, 0.0, 0.0), vertical: Vec3A(0.0, 9.999988, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: Some(Vec4(0.0, 0.0, -1.0, 3.9133058)), far: Some(Vec4(0.0, 0.0, 1.0, 9995.986)), planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: None +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 640, height: 360, region: PixelRect { x0: 0, y0: 0, x1: 640, y1: 360 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 12.700017, aperture: [25.4, 25.4], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 5.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/cornellbox.usda"], invisible_overrides: Some(0) } +layer: $DIR/cornellbox.usda +warning: Warning { code: AssetUnsupportedByHost, kind: Skipped, count: 1, prims: [], message: "No asset loader: environment map $DIR/sky_gradient.exr ignored — the dome falls back to its uniform colour. Use Scene::from_usd_with_assets to supply one." } +warning: Warning { code: MaterialFallbackDefault, kind: Skipped, count: 1, prims: ["/scene/Looks/initialShadingGroup"], message: "Material /scene/Looks/initialShadingGroup has no surface shader — using default grey OpenPBR" } +lights: 1 +light 0: dome name Some("/scene/Sky") lpe None pmf 1.0 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 5 geometries, PrimitiveBreakdown { triangles: 822, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 2 } top level, PrimitiveBreakdown { triangles: 1582, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 2 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 4.0 motion [] pieces all=10:88b22fc3345d5b05 camera=10:88b22fc3345d5b05 shadow=10:88b22fc3345d5b05 indirect=10:88b22fc3345d5b05 +geom 1: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.2 motion [] pieces all=760:c2b60a75c52c78b9 camera=760:c2b60a75c52c78b9 shadow=760:c2b60a75c52c78b9 indirect=760:c2b60a75c52c78b9 +geom 2: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=12:94a297badef437e1 camera=12:94a297badef437e1 shadow=12:94a297badef437e1 indirect=12:94a297badef437e1 +geom 3: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.25 motion [] pieces all=800:4a8c9f44d777e131 camera=800:4a8c9f44d777e131 shadow=800:4a8c9f44d777e131 indirect=800:4a8c9f44d777e131 +geom 4: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.3585339 motion [] pieces all=760:2344ecf63e12c441 camera=760:2344ecf63e12c441 shadow=760:2344ecf63e12c441 indirect=760:2344ecf63e12c441 +provenance material /scene/Looks/initialShadingGroup: MaterialOrigin { slots: [0, 1, 2, 3, 4], displaced: false } +provenance light /scene/Sky: LightOrigin { index: 0, geoms: 0..0 } +provenance geometry 0..1: /scene/pCube1 +provenance geometry 1..2: /scene/pSphere1 +provenance geometry 2..3: /scene/pCube2 +provenance geometry 3..4: /scene/pTorus1 +provenance geometry 4..5: /scene/pSphere2 +provenance mesh: MeshOrigin { geom_id: 0, slot: 0, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 1, slot: 1, baked: false, moving: false } +provenance mesh: MeshOrigin { geom_id: 2, slot: 2, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 3, slot: 3, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 4, slot: 1, baked: false, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 12343188411137242430, n_points: 8, n_indices: 20, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 1: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 17119738035130870988, n_points: 382, n_indices: 1560, n_uvs: None, smooth: false, material: 0 }), placements: 2, shared: false, displaced: false } +provenance mesh slot 2: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 1739488954094729910, n_points: 8, n_indices: 24, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 3: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 6096447469814747168, n_points: 400, n_indices: 1600, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/scene/camera1"), cameras: ["/scene/camera1"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/scene/camera1"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-41.image b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-41.image new file mode 100644 index 000000000..ba4884437 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-41.image @@ -0,0 +1 @@ +640x360 16spp clamp-off 52a1a46f3a46d230 diff --git a/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-42.digest b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-42.digest new file mode 100644 index 000000000..0e859a952 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-42.digest @@ -0,0 +1,40 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/scene/camera1") +camera: Camera { origin: Vec3A(0.0074343784, 1.9913422, 4.0133057), lower_left_corner: Vec3A(-8.881443, -3.0086517, -0.98669434), horizontal: Vec3A(17.777756, 0.0, 0.0), vertical: Vec3A(0.0, 9.999988, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: Some(Vec4(0.0, 0.0, -1.0, 3.9133058)), far: Some(Vec4(0.0, 0.0, 1.0, 9995.986)), planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: None +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 640, height: 360, region: PixelRect { x0: 0, y0: 0, x1: 640, y1: 360 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 12.700017, aperture: [25.4, 25.4], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 5.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/cornellbox.usda"], invisible_overrides: Some(0) } +layer: $DIR/cornellbox.usda +warning: Warning { code: AssetUnsupportedByHost, kind: Skipped, count: 1, prims: [], message: "No asset loader: environment map $DIR/sky_gradient.exr ignored — the dome falls back to its uniform colour. Use Scene::from_usd_with_assets to supply one." } +warning: Warning { code: MaterialFallbackDefault, kind: Skipped, count: 1, prims: ["/scene/Looks/initialShadingGroup"], message: "Material /scene/Looks/initialShadingGroup has no surface shader — using default grey OpenPBR" } +lights: 1 +light 0: dome name Some("/scene/Sky") lpe None pmf 1.0 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 5 geometries, PrimitiveBreakdown { triangles: 822, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 2 } top level, PrimitiveBreakdown { triangles: 1582, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 2 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 4.0 motion [] pieces all=10:88b22fc3345d5b05 camera=10:88b22fc3345d5b05 shadow=10:88b22fc3345d5b05 indirect=10:88b22fc3345d5b05 +geom 1: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.2 motion [] pieces all=760:c2b60a75c52c78b9 camera=760:c2b60a75c52c78b9 shadow=760:c2b60a75c52c78b9 indirect=760:c2b60a75c52c78b9 +geom 2: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=12:94a297badef437e1 camera=12:94a297badef437e1 shadow=12:94a297badef437e1 indirect=12:94a297badef437e1 +geom 3: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.25 motion [] pieces all=800:4a8c9f44d777e131 camera=800:4a8c9f44d777e131 shadow=800:4a8c9f44d777e131 indirect=800:4a8c9f44d777e131 +geom 4: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.3585339 motion [] pieces all=760:2344ecf63e12c441 camera=760:2344ecf63e12c441 shadow=760:2344ecf63e12c441 indirect=760:2344ecf63e12c441 +provenance material /scene/Looks/initialShadingGroup: MaterialOrigin { slots: [0, 1, 2, 3, 4], displaced: false } +provenance light /scene/Sky: LightOrigin { index: 0, geoms: 0..0 } +provenance geometry 0..1: /scene/pCube1 +provenance geometry 1..2: /scene/pSphere1 +provenance geometry 2..3: /scene/pCube2 +provenance geometry 3..4: /scene/pTorus1 +provenance geometry 4..5: /scene/pSphere2 +provenance mesh: MeshOrigin { geom_id: 0, slot: 0, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 1, slot: 1, baked: false, moving: false } +provenance mesh: MeshOrigin { geom_id: 2, slot: 2, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 3, slot: 3, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 4, slot: 1, baked: false, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 12343188411137242430, n_points: 8, n_indices: 20, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 1: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 17119738035130870988, n_points: 382, n_indices: 1560, n_uvs: None, smooth: false, material: 0 }), placements: 2, shared: false, displaced: false } +provenance mesh slot 2: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 1739488954094729910, n_points: 8, n_indices: 24, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 3: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 6096447469814747168, n_points: 400, n_indices: 1600, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/scene/camera1"), cameras: ["/scene/camera1"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/scene/camera1"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-42.image b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-42.image new file mode 100644 index 000000000..ba4884437 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-42.image @@ -0,0 +1 @@ +640x360 16spp clamp-off 52a1a46f3a46d230 diff --git a/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-43.digest b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-43.digest new file mode 100644 index 000000000..0e859a952 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-43.digest @@ -0,0 +1,40 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/scene/camera1") +camera: Camera { origin: Vec3A(0.0074343784, 1.9913422, 4.0133057), lower_left_corner: Vec3A(-8.881443, -3.0086517, -0.98669434), horizontal: Vec3A(17.777756, 0.0, 0.0), vertical: Vec3A(0.0, 9.999988, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: Some(Vec4(0.0, 0.0, -1.0, 3.9133058)), far: Some(Vec4(0.0, 0.0, 1.0, 9995.986)), planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: None +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 640, height: 360, region: PixelRect { x0: 0, y0: 0, x1: 640, y1: 360 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 12.700017, aperture: [25.4, 25.4], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 5.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/cornellbox.usda"], invisible_overrides: Some(0) } +layer: $DIR/cornellbox.usda +warning: Warning { code: AssetUnsupportedByHost, kind: Skipped, count: 1, prims: [], message: "No asset loader: environment map $DIR/sky_gradient.exr ignored — the dome falls back to its uniform colour. Use Scene::from_usd_with_assets to supply one." } +warning: Warning { code: MaterialFallbackDefault, kind: Skipped, count: 1, prims: ["/scene/Looks/initialShadingGroup"], message: "Material /scene/Looks/initialShadingGroup has no surface shader — using default grey OpenPBR" } +lights: 1 +light 0: dome name Some("/scene/Sky") lpe None pmf 1.0 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 5 geometries, PrimitiveBreakdown { triangles: 822, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 2 } top level, PrimitiveBreakdown { triangles: 1582, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 2 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 4.0 motion [] pieces all=10:88b22fc3345d5b05 camera=10:88b22fc3345d5b05 shadow=10:88b22fc3345d5b05 indirect=10:88b22fc3345d5b05 +geom 1: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.2 motion [] pieces all=760:c2b60a75c52c78b9 camera=760:c2b60a75c52c78b9 shadow=760:c2b60a75c52c78b9 indirect=760:c2b60a75c52c78b9 +geom 2: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=12:94a297badef437e1 camera=12:94a297badef437e1 shadow=12:94a297badef437e1 indirect=12:94a297badef437e1 +geom 3: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.25 motion [] pieces all=800:4a8c9f44d777e131 camera=800:4a8c9f44d777e131 shadow=800:4a8c9f44d777e131 indirect=800:4a8c9f44d777e131 +geom 4: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.3585339 motion [] pieces all=760:2344ecf63e12c441 camera=760:2344ecf63e12c441 shadow=760:2344ecf63e12c441 indirect=760:2344ecf63e12c441 +provenance material /scene/Looks/initialShadingGroup: MaterialOrigin { slots: [0, 1, 2, 3, 4], displaced: false } +provenance light /scene/Sky: LightOrigin { index: 0, geoms: 0..0 } +provenance geometry 0..1: /scene/pCube1 +provenance geometry 1..2: /scene/pSphere1 +provenance geometry 2..3: /scene/pCube2 +provenance geometry 3..4: /scene/pTorus1 +provenance geometry 4..5: /scene/pSphere2 +provenance mesh: MeshOrigin { geom_id: 0, slot: 0, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 1, slot: 1, baked: false, moving: false } +provenance mesh: MeshOrigin { geom_id: 2, slot: 2, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 3, slot: 3, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 4, slot: 1, baked: false, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 12343188411137242430, n_points: 8, n_indices: 20, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 1: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 17119738035130870988, n_points: 382, n_indices: 1560, n_uvs: None, smooth: false, material: 0 }), placements: 2, shared: false, displaced: false } +provenance mesh slot 2: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 1739488954094729910, n_points: 8, n_indices: 24, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 3: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 6096447469814747168, n_points: 400, n_indices: 1600, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/scene/camera1"), cameras: ["/scene/camera1"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/scene/camera1"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-43.image b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-43.image new file mode 100644 index 000000000..ba4884437 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-43.image @@ -0,0 +1 @@ +640x360 16spp clamp-off 52a1a46f3a46d230 diff --git a/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-44.digest b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-44.digest new file mode 100644 index 000000000..0e859a952 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-44.digest @@ -0,0 +1,40 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/scene/camera1") +camera: Camera { origin: Vec3A(0.0074343784, 1.9913422, 4.0133057), lower_left_corner: Vec3A(-8.881443, -3.0086517, -0.98669434), horizontal: Vec3A(17.777756, 0.0, 0.0), vertical: Vec3A(0.0, 9.999988, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: Some(Vec4(0.0, 0.0, -1.0, 3.9133058)), far: Some(Vec4(0.0, 0.0, 1.0, 9995.986)), planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: None +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 640, height: 360, region: PixelRect { x0: 0, y0: 0, x1: 640, y1: 360 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 12.700017, aperture: [25.4, 25.4], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 5.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/cornellbox.usda"], invisible_overrides: Some(0) } +layer: $DIR/cornellbox.usda +warning: Warning { code: AssetUnsupportedByHost, kind: Skipped, count: 1, prims: [], message: "No asset loader: environment map $DIR/sky_gradient.exr ignored — the dome falls back to its uniform colour. Use Scene::from_usd_with_assets to supply one." } +warning: Warning { code: MaterialFallbackDefault, kind: Skipped, count: 1, prims: ["/scene/Looks/initialShadingGroup"], message: "Material /scene/Looks/initialShadingGroup has no surface shader — using default grey OpenPBR" } +lights: 1 +light 0: dome name Some("/scene/Sky") lpe None pmf 1.0 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 5 geometries, PrimitiveBreakdown { triangles: 822, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 2 } top level, PrimitiveBreakdown { triangles: 1582, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 2 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 4.0 motion [] pieces all=10:88b22fc3345d5b05 camera=10:88b22fc3345d5b05 shadow=10:88b22fc3345d5b05 indirect=10:88b22fc3345d5b05 +geom 1: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.2 motion [] pieces all=760:c2b60a75c52c78b9 camera=760:c2b60a75c52c78b9 shadow=760:c2b60a75c52c78b9 indirect=760:c2b60a75c52c78b9 +geom 2: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=12:94a297badef437e1 camera=12:94a297badef437e1 shadow=12:94a297badef437e1 indirect=12:94a297badef437e1 +geom 3: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.25 motion [] pieces all=800:4a8c9f44d777e131 camera=800:4a8c9f44d777e131 shadow=800:4a8c9f44d777e131 indirect=800:4a8c9f44d777e131 +geom 4: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.3585339 motion [] pieces all=760:2344ecf63e12c441 camera=760:2344ecf63e12c441 shadow=760:2344ecf63e12c441 indirect=760:2344ecf63e12c441 +provenance material /scene/Looks/initialShadingGroup: MaterialOrigin { slots: [0, 1, 2, 3, 4], displaced: false } +provenance light /scene/Sky: LightOrigin { index: 0, geoms: 0..0 } +provenance geometry 0..1: /scene/pCube1 +provenance geometry 1..2: /scene/pSphere1 +provenance geometry 2..3: /scene/pCube2 +provenance geometry 3..4: /scene/pTorus1 +provenance geometry 4..5: /scene/pSphere2 +provenance mesh: MeshOrigin { geom_id: 0, slot: 0, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 1, slot: 1, baked: false, moving: false } +provenance mesh: MeshOrigin { geom_id: 2, slot: 2, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 3, slot: 3, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 4, slot: 1, baked: false, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 12343188411137242430, n_points: 8, n_indices: 20, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 1: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 17119738035130870988, n_points: 382, n_indices: 1560, n_uvs: None, smooth: false, material: 0 }), placements: 2, shared: false, displaced: false } +provenance mesh slot 2: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 1739488954094729910, n_points: 8, n_indices: 24, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 3: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 6096447469814747168, n_points: 400, n_indices: 1600, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/scene/camera1"), cameras: ["/scene/camera1"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/scene/camera1"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-44.image b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-44.image new file mode 100644 index 000000000..ba4884437 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-44.image @@ -0,0 +1 @@ +640x360 16spp clamp-off 52a1a46f3a46d230 diff --git a/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-45.digest b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-45.digest new file mode 100644 index 000000000..0e859a952 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-45.digest @@ -0,0 +1,40 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/scene/camera1") +camera: Camera { origin: Vec3A(0.0074343784, 1.9913422, 4.0133057), lower_left_corner: Vec3A(-8.881443, -3.0086517, -0.98669434), horizontal: Vec3A(17.777756, 0.0, 0.0), vertical: Vec3A(0.0, 9.999988, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: Some(Vec4(0.0, 0.0, -1.0, 3.9133058)), far: Some(Vec4(0.0, 0.0, 1.0, 9995.986)), planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: None +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 640, height: 360, region: PixelRect { x0: 0, y0: 0, x1: 640, y1: 360 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 12.700017, aperture: [25.4, 25.4], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 5.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/cornellbox.usda"], invisible_overrides: Some(0) } +layer: $DIR/cornellbox.usda +warning: Warning { code: AssetUnsupportedByHost, kind: Skipped, count: 1, prims: [], message: "No asset loader: environment map $DIR/sky_gradient.exr ignored — the dome falls back to its uniform colour. Use Scene::from_usd_with_assets to supply one." } +warning: Warning { code: MaterialFallbackDefault, kind: Skipped, count: 1, prims: ["/scene/Looks/initialShadingGroup"], message: "Material /scene/Looks/initialShadingGroup has no surface shader — using default grey OpenPBR" } +lights: 1 +light 0: dome name Some("/scene/Sky") lpe None pmf 1.0 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 5 geometries, PrimitiveBreakdown { triangles: 822, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 2 } top level, PrimitiveBreakdown { triangles: 1582, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 2 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 4.0 motion [] pieces all=10:88b22fc3345d5b05 camera=10:88b22fc3345d5b05 shadow=10:88b22fc3345d5b05 indirect=10:88b22fc3345d5b05 +geom 1: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.2 motion [] pieces all=760:c2b60a75c52c78b9 camera=760:c2b60a75c52c78b9 shadow=760:c2b60a75c52c78b9 indirect=760:c2b60a75c52c78b9 +geom 2: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=12:94a297badef437e1 camera=12:94a297badef437e1 shadow=12:94a297badef437e1 indirect=12:94a297badef437e1 +geom 3: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.25 motion [] pieces all=800:4a8c9f44d777e131 camera=800:4a8c9f44d777e131 shadow=800:4a8c9f44d777e131 indirect=800:4a8c9f44d777e131 +geom 4: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.3585339 motion [] pieces all=760:2344ecf63e12c441 camera=760:2344ecf63e12c441 shadow=760:2344ecf63e12c441 indirect=760:2344ecf63e12c441 +provenance material /scene/Looks/initialShadingGroup: MaterialOrigin { slots: [0, 1, 2, 3, 4], displaced: false } +provenance light /scene/Sky: LightOrigin { index: 0, geoms: 0..0 } +provenance geometry 0..1: /scene/pCube1 +provenance geometry 1..2: /scene/pSphere1 +provenance geometry 2..3: /scene/pCube2 +provenance geometry 3..4: /scene/pTorus1 +provenance geometry 4..5: /scene/pSphere2 +provenance mesh: MeshOrigin { geom_id: 0, slot: 0, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 1, slot: 1, baked: false, moving: false } +provenance mesh: MeshOrigin { geom_id: 2, slot: 2, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 3, slot: 3, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 4, slot: 1, baked: false, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 12343188411137242430, n_points: 8, n_indices: 20, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 1: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 17119738035130870988, n_points: 382, n_indices: 1560, n_uvs: None, smooth: false, material: 0 }), placements: 2, shared: false, displaced: false } +provenance mesh slot 2: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 1739488954094729910, n_points: 8, n_indices: 24, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 3: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 6096447469814747168, n_points: 400, n_indices: 1600, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/scene/camera1"), cameras: ["/scene/camera1"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/scene/camera1"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-45.image b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-45.image new file mode 100644 index 000000000..ba4884437 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-45.image @@ -0,0 +1 @@ +640x360 16spp clamp-off 52a1a46f3a46d230 diff --git a/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-46.digest b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-46.digest new file mode 100644 index 000000000..0e859a952 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-46.digest @@ -0,0 +1,40 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/scene/camera1") +camera: Camera { origin: Vec3A(0.0074343784, 1.9913422, 4.0133057), lower_left_corner: Vec3A(-8.881443, -3.0086517, -0.98669434), horizontal: Vec3A(17.777756, 0.0, 0.0), vertical: Vec3A(0.0, 9.999988, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: Some(Vec4(0.0, 0.0, -1.0, 3.9133058)), far: Some(Vec4(0.0, 0.0, 1.0, 9995.986)), planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: None +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 640, height: 360, region: PixelRect { x0: 0, y0: 0, x1: 640, y1: 360 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 12.700017, aperture: [25.4, 25.4], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 5.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/cornellbox.usda"], invisible_overrides: Some(0) } +layer: $DIR/cornellbox.usda +warning: Warning { code: AssetUnsupportedByHost, kind: Skipped, count: 1, prims: [], message: "No asset loader: environment map $DIR/sky_gradient.exr ignored — the dome falls back to its uniform colour. Use Scene::from_usd_with_assets to supply one." } +warning: Warning { code: MaterialFallbackDefault, kind: Skipped, count: 1, prims: ["/scene/Looks/initialShadingGroup"], message: "Material /scene/Looks/initialShadingGroup has no surface shader — using default grey OpenPBR" } +lights: 1 +light 0: dome name Some("/scene/Sky") lpe None pmf 1.0 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 5 geometries, PrimitiveBreakdown { triangles: 822, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 2 } top level, PrimitiveBreakdown { triangles: 1582, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 2 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 4.0 motion [] pieces all=10:88b22fc3345d5b05 camera=10:88b22fc3345d5b05 shadow=10:88b22fc3345d5b05 indirect=10:88b22fc3345d5b05 +geom 1: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.2 motion [] pieces all=760:c2b60a75c52c78b9 camera=760:c2b60a75c52c78b9 shadow=760:c2b60a75c52c78b9 indirect=760:c2b60a75c52c78b9 +geom 2: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=12:94a297badef437e1 camera=12:94a297badef437e1 shadow=12:94a297badef437e1 indirect=12:94a297badef437e1 +geom 3: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.25 motion [] pieces all=800:4a8c9f44d777e131 camera=800:4a8c9f44d777e131 shadow=800:4a8c9f44d777e131 indirect=800:4a8c9f44d777e131 +geom 4: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.3585339 motion [] pieces all=760:2344ecf63e12c441 camera=760:2344ecf63e12c441 shadow=760:2344ecf63e12c441 indirect=760:2344ecf63e12c441 +provenance material /scene/Looks/initialShadingGroup: MaterialOrigin { slots: [0, 1, 2, 3, 4], displaced: false } +provenance light /scene/Sky: LightOrigin { index: 0, geoms: 0..0 } +provenance geometry 0..1: /scene/pCube1 +provenance geometry 1..2: /scene/pSphere1 +provenance geometry 2..3: /scene/pCube2 +provenance geometry 3..4: /scene/pTorus1 +provenance geometry 4..5: /scene/pSphere2 +provenance mesh: MeshOrigin { geom_id: 0, slot: 0, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 1, slot: 1, baked: false, moving: false } +provenance mesh: MeshOrigin { geom_id: 2, slot: 2, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 3, slot: 3, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 4, slot: 1, baked: false, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 12343188411137242430, n_points: 8, n_indices: 20, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 1: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 17119738035130870988, n_points: 382, n_indices: 1560, n_uvs: None, smooth: false, material: 0 }), placements: 2, shared: false, displaced: false } +provenance mesh slot 2: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 1739488954094729910, n_points: 8, n_indices: 24, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 3: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 6096447469814747168, n_points: 400, n_indices: 1600, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/scene/camera1"), cameras: ["/scene/camera1"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/scene/camera1"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-46.image b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-46.image new file mode 100644 index 000000000..ba4884437 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-46.image @@ -0,0 +1 @@ +640x360 16spp clamp-off 52a1a46f3a46d230 diff --git a/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-47.digest b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-47.digest new file mode 100644 index 000000000..0e859a952 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-47.digest @@ -0,0 +1,40 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/scene/camera1") +camera: Camera { origin: Vec3A(0.0074343784, 1.9913422, 4.0133057), lower_left_corner: Vec3A(-8.881443, -3.0086517, -0.98669434), horizontal: Vec3A(17.777756, 0.0, 0.0), vertical: Vec3A(0.0, 9.999988, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: Some(Vec4(0.0, 0.0, -1.0, 3.9133058)), far: Some(Vec4(0.0, 0.0, 1.0, 9995.986)), planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: None +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 640, height: 360, region: PixelRect { x0: 0, y0: 0, x1: 640, y1: 360 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 12.700017, aperture: [25.4, 25.4], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 5.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/cornellbox.usda"], invisible_overrides: Some(0) } +layer: $DIR/cornellbox.usda +warning: Warning { code: AssetUnsupportedByHost, kind: Skipped, count: 1, prims: [], message: "No asset loader: environment map $DIR/sky_gradient.exr ignored — the dome falls back to its uniform colour. Use Scene::from_usd_with_assets to supply one." } +warning: Warning { code: MaterialFallbackDefault, kind: Skipped, count: 1, prims: ["/scene/Looks/initialShadingGroup"], message: "Material /scene/Looks/initialShadingGroup has no surface shader — using default grey OpenPBR" } +lights: 1 +light 0: dome name Some("/scene/Sky") lpe None pmf 1.0 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 5 geometries, PrimitiveBreakdown { triangles: 822, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 2 } top level, PrimitiveBreakdown { triangles: 1582, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 2 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 4.0 motion [] pieces all=10:88b22fc3345d5b05 camera=10:88b22fc3345d5b05 shadow=10:88b22fc3345d5b05 indirect=10:88b22fc3345d5b05 +geom 1: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.2 motion [] pieces all=760:c2b60a75c52c78b9 camera=760:c2b60a75c52c78b9 shadow=760:c2b60a75c52c78b9 indirect=760:c2b60a75c52c78b9 +geom 2: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=12:94a297badef437e1 camera=12:94a297badef437e1 shadow=12:94a297badef437e1 indirect=12:94a297badef437e1 +geom 3: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.25 motion [] pieces all=800:4a8c9f44d777e131 camera=800:4a8c9f44d777e131 shadow=800:4a8c9f44d777e131 indirect=800:4a8c9f44d777e131 +geom 4: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.3585339 motion [] pieces all=760:2344ecf63e12c441 camera=760:2344ecf63e12c441 shadow=760:2344ecf63e12c441 indirect=760:2344ecf63e12c441 +provenance material /scene/Looks/initialShadingGroup: MaterialOrigin { slots: [0, 1, 2, 3, 4], displaced: false } +provenance light /scene/Sky: LightOrigin { index: 0, geoms: 0..0 } +provenance geometry 0..1: /scene/pCube1 +provenance geometry 1..2: /scene/pSphere1 +provenance geometry 2..3: /scene/pCube2 +provenance geometry 3..4: /scene/pTorus1 +provenance geometry 4..5: /scene/pSphere2 +provenance mesh: MeshOrigin { geom_id: 0, slot: 0, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 1, slot: 1, baked: false, moving: false } +provenance mesh: MeshOrigin { geom_id: 2, slot: 2, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 3, slot: 3, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 4, slot: 1, baked: false, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 12343188411137242430, n_points: 8, n_indices: 20, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 1: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 17119738035130870988, n_points: 382, n_indices: 1560, n_uvs: None, smooth: false, material: 0 }), placements: 2, shared: false, displaced: false } +provenance mesh slot 2: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 1739488954094729910, n_points: 8, n_indices: 24, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 3: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 6096447469814747168, n_points: 400, n_indices: 1600, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/scene/camera1"), cameras: ["/scene/camera1"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/scene/camera1"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-47.image b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-47.image new file mode 100644 index 000000000..ba4884437 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-47.image @@ -0,0 +1 @@ +640x360 16spp clamp-off 52a1a46f3a46d230 diff --git a/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-48.digest b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-48.digest new file mode 100644 index 000000000..0e859a952 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-48.digest @@ -0,0 +1,40 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/scene/camera1") +camera: Camera { origin: Vec3A(0.0074343784, 1.9913422, 4.0133057), lower_left_corner: Vec3A(-8.881443, -3.0086517, -0.98669434), horizontal: Vec3A(17.777756, 0.0, 0.0), vertical: Vec3A(0.0, 9.999988, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: Some(Vec4(0.0, 0.0, -1.0, 3.9133058)), far: Some(Vec4(0.0, 0.0, 1.0, 9995.986)), planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: None +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 640, height: 360, region: PixelRect { x0: 0, y0: 0, x1: 640, y1: 360 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 12.700017, aperture: [25.4, 25.4], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 5.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/cornellbox.usda"], invisible_overrides: Some(0) } +layer: $DIR/cornellbox.usda +warning: Warning { code: AssetUnsupportedByHost, kind: Skipped, count: 1, prims: [], message: "No asset loader: environment map $DIR/sky_gradient.exr ignored — the dome falls back to its uniform colour. Use Scene::from_usd_with_assets to supply one." } +warning: Warning { code: MaterialFallbackDefault, kind: Skipped, count: 1, prims: ["/scene/Looks/initialShadingGroup"], message: "Material /scene/Looks/initialShadingGroup has no surface shader — using default grey OpenPBR" } +lights: 1 +light 0: dome name Some("/scene/Sky") lpe None pmf 1.0 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 5 geometries, PrimitiveBreakdown { triangles: 822, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 2 } top level, PrimitiveBreakdown { triangles: 1582, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 2 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 4.0 motion [] pieces all=10:88b22fc3345d5b05 camera=10:88b22fc3345d5b05 shadow=10:88b22fc3345d5b05 indirect=10:88b22fc3345d5b05 +geom 1: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.2 motion [] pieces all=760:c2b60a75c52c78b9 camera=760:c2b60a75c52c78b9 shadow=760:c2b60a75c52c78b9 indirect=760:c2b60a75c52c78b9 +geom 2: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=12:94a297badef437e1 camera=12:94a297badef437e1 shadow=12:94a297badef437e1 indirect=12:94a297badef437e1 +geom 3: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.25 motion [] pieces all=800:4a8c9f44d777e131 camera=800:4a8c9f44d777e131 shadow=800:4a8c9f44d777e131 indirect=800:4a8c9f44d777e131 +geom 4: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.3585339 motion [] pieces all=760:2344ecf63e12c441 camera=760:2344ecf63e12c441 shadow=760:2344ecf63e12c441 indirect=760:2344ecf63e12c441 +provenance material /scene/Looks/initialShadingGroup: MaterialOrigin { slots: [0, 1, 2, 3, 4], displaced: false } +provenance light /scene/Sky: LightOrigin { index: 0, geoms: 0..0 } +provenance geometry 0..1: /scene/pCube1 +provenance geometry 1..2: /scene/pSphere1 +provenance geometry 2..3: /scene/pCube2 +provenance geometry 3..4: /scene/pTorus1 +provenance geometry 4..5: /scene/pSphere2 +provenance mesh: MeshOrigin { geom_id: 0, slot: 0, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 1, slot: 1, baked: false, moving: false } +provenance mesh: MeshOrigin { geom_id: 2, slot: 2, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 3, slot: 3, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 4, slot: 1, baked: false, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 12343188411137242430, n_points: 8, n_indices: 20, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 1: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 17119738035130870988, n_points: 382, n_indices: 1560, n_uvs: None, smooth: false, material: 0 }), placements: 2, shared: false, displaced: false } +provenance mesh slot 2: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 1739488954094729910, n_points: 8, n_indices: 24, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 3: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 6096447469814747168, n_points: 400, n_indices: 1600, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/scene/camera1"), cameras: ["/scene/camera1"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/scene/camera1"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-48.image b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-48.image new file mode 100644 index 000000000..ba4884437 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-48.image @@ -0,0 +1 @@ +640x360 16spp clamp-off 52a1a46f3a46d230 diff --git a/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-49.digest b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-49.digest new file mode 100644 index 000000000..0e859a952 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-49.digest @@ -0,0 +1,40 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/scene/camera1") +camera: Camera { origin: Vec3A(0.0074343784, 1.9913422, 4.0133057), lower_left_corner: Vec3A(-8.881443, -3.0086517, -0.98669434), horizontal: Vec3A(17.777756, 0.0, 0.0), vertical: Vec3A(0.0, 9.999988, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: Some(Vec4(0.0, 0.0, -1.0, 3.9133058)), far: Some(Vec4(0.0, 0.0, 1.0, 9995.986)), planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: None +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 640, height: 360, region: PixelRect { x0: 0, y0: 0, x1: 640, y1: 360 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 12.700017, aperture: [25.4, 25.4], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 5.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/cornellbox.usda"], invisible_overrides: Some(0) } +layer: $DIR/cornellbox.usda +warning: Warning { code: AssetUnsupportedByHost, kind: Skipped, count: 1, prims: [], message: "No asset loader: environment map $DIR/sky_gradient.exr ignored — the dome falls back to its uniform colour. Use Scene::from_usd_with_assets to supply one." } +warning: Warning { code: MaterialFallbackDefault, kind: Skipped, count: 1, prims: ["/scene/Looks/initialShadingGroup"], message: "Material /scene/Looks/initialShadingGroup has no surface shader — using default grey OpenPBR" } +lights: 1 +light 0: dome name Some("/scene/Sky") lpe None pmf 1.0 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 5 geometries, PrimitiveBreakdown { triangles: 822, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 2 } top level, PrimitiveBreakdown { triangles: 1582, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 2 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 4.0 motion [] pieces all=10:88b22fc3345d5b05 camera=10:88b22fc3345d5b05 shadow=10:88b22fc3345d5b05 indirect=10:88b22fc3345d5b05 +geom 1: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.2 motion [] pieces all=760:c2b60a75c52c78b9 camera=760:c2b60a75c52c78b9 shadow=760:c2b60a75c52c78b9 indirect=760:c2b60a75c52c78b9 +geom 2: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=12:94a297badef437e1 camera=12:94a297badef437e1 shadow=12:94a297badef437e1 indirect=12:94a297badef437e1 +geom 3: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.25 motion [] pieces all=800:4a8c9f44d777e131 camera=800:4a8c9f44d777e131 shadow=800:4a8c9f44d777e131 indirect=800:4a8c9f44d777e131 +geom 4: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.3585339 motion [] pieces all=760:2344ecf63e12c441 camera=760:2344ecf63e12c441 shadow=760:2344ecf63e12c441 indirect=760:2344ecf63e12c441 +provenance material /scene/Looks/initialShadingGroup: MaterialOrigin { slots: [0, 1, 2, 3, 4], displaced: false } +provenance light /scene/Sky: LightOrigin { index: 0, geoms: 0..0 } +provenance geometry 0..1: /scene/pCube1 +provenance geometry 1..2: /scene/pSphere1 +provenance geometry 2..3: /scene/pCube2 +provenance geometry 3..4: /scene/pTorus1 +provenance geometry 4..5: /scene/pSphere2 +provenance mesh: MeshOrigin { geom_id: 0, slot: 0, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 1, slot: 1, baked: false, moving: false } +provenance mesh: MeshOrigin { geom_id: 2, slot: 2, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 3, slot: 3, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 4, slot: 1, baked: false, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 12343188411137242430, n_points: 8, n_indices: 20, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 1: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 17119738035130870988, n_points: 382, n_indices: 1560, n_uvs: None, smooth: false, material: 0 }), placements: 2, shared: false, displaced: false } +provenance mesh slot 2: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 1739488954094729910, n_points: 8, n_indices: 24, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 3: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 6096447469814747168, n_points: 400, n_indices: 1600, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/scene/camera1"), cameras: ["/scene/camera1"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/scene/camera1"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-49.image b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-49.image new file mode 100644 index 000000000..ba4884437 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-49.image @@ -0,0 +1 @@ +640x360 16spp clamp-off 52a1a46f3a46d230 diff --git a/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-5.digest b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-5.digest new file mode 100644 index 000000000..0e859a952 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-5.digest @@ -0,0 +1,40 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/scene/camera1") +camera: Camera { origin: Vec3A(0.0074343784, 1.9913422, 4.0133057), lower_left_corner: Vec3A(-8.881443, -3.0086517, -0.98669434), horizontal: Vec3A(17.777756, 0.0, 0.0), vertical: Vec3A(0.0, 9.999988, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: Some(Vec4(0.0, 0.0, -1.0, 3.9133058)), far: Some(Vec4(0.0, 0.0, 1.0, 9995.986)), planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: None +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 640, height: 360, region: PixelRect { x0: 0, y0: 0, x1: 640, y1: 360 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 12.700017, aperture: [25.4, 25.4], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 5.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/cornellbox.usda"], invisible_overrides: Some(0) } +layer: $DIR/cornellbox.usda +warning: Warning { code: AssetUnsupportedByHost, kind: Skipped, count: 1, prims: [], message: "No asset loader: environment map $DIR/sky_gradient.exr ignored — the dome falls back to its uniform colour. Use Scene::from_usd_with_assets to supply one." } +warning: Warning { code: MaterialFallbackDefault, kind: Skipped, count: 1, prims: ["/scene/Looks/initialShadingGroup"], message: "Material /scene/Looks/initialShadingGroup has no surface shader — using default grey OpenPBR" } +lights: 1 +light 0: dome name Some("/scene/Sky") lpe None pmf 1.0 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 5 geometries, PrimitiveBreakdown { triangles: 822, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 2 } top level, PrimitiveBreakdown { triangles: 1582, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 2 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 4.0 motion [] pieces all=10:88b22fc3345d5b05 camera=10:88b22fc3345d5b05 shadow=10:88b22fc3345d5b05 indirect=10:88b22fc3345d5b05 +geom 1: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.2 motion [] pieces all=760:c2b60a75c52c78b9 camera=760:c2b60a75c52c78b9 shadow=760:c2b60a75c52c78b9 indirect=760:c2b60a75c52c78b9 +geom 2: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=12:94a297badef437e1 camera=12:94a297badef437e1 shadow=12:94a297badef437e1 indirect=12:94a297badef437e1 +geom 3: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.25 motion [] pieces all=800:4a8c9f44d777e131 camera=800:4a8c9f44d777e131 shadow=800:4a8c9f44d777e131 indirect=800:4a8c9f44d777e131 +geom 4: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.3585339 motion [] pieces all=760:2344ecf63e12c441 camera=760:2344ecf63e12c441 shadow=760:2344ecf63e12c441 indirect=760:2344ecf63e12c441 +provenance material /scene/Looks/initialShadingGroup: MaterialOrigin { slots: [0, 1, 2, 3, 4], displaced: false } +provenance light /scene/Sky: LightOrigin { index: 0, geoms: 0..0 } +provenance geometry 0..1: /scene/pCube1 +provenance geometry 1..2: /scene/pSphere1 +provenance geometry 2..3: /scene/pCube2 +provenance geometry 3..4: /scene/pTorus1 +provenance geometry 4..5: /scene/pSphere2 +provenance mesh: MeshOrigin { geom_id: 0, slot: 0, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 1, slot: 1, baked: false, moving: false } +provenance mesh: MeshOrigin { geom_id: 2, slot: 2, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 3, slot: 3, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 4, slot: 1, baked: false, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 12343188411137242430, n_points: 8, n_indices: 20, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 1: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 17119738035130870988, n_points: 382, n_indices: 1560, n_uvs: None, smooth: false, material: 0 }), placements: 2, shared: false, displaced: false } +provenance mesh slot 2: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 1739488954094729910, n_points: 8, n_indices: 24, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 3: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 6096447469814747168, n_points: 400, n_indices: 1600, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/scene/camera1"), cameras: ["/scene/camera1"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/scene/camera1"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-5.image b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-5.image new file mode 100644 index 000000000..ba4884437 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-5.image @@ -0,0 +1 @@ +640x360 16spp clamp-off 52a1a46f3a46d230 diff --git a/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-50.digest b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-50.digest new file mode 100644 index 000000000..0e859a952 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-50.digest @@ -0,0 +1,40 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/scene/camera1") +camera: Camera { origin: Vec3A(0.0074343784, 1.9913422, 4.0133057), lower_left_corner: Vec3A(-8.881443, -3.0086517, -0.98669434), horizontal: Vec3A(17.777756, 0.0, 0.0), vertical: Vec3A(0.0, 9.999988, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: Some(Vec4(0.0, 0.0, -1.0, 3.9133058)), far: Some(Vec4(0.0, 0.0, 1.0, 9995.986)), planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: None +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 640, height: 360, region: PixelRect { x0: 0, y0: 0, x1: 640, y1: 360 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 12.700017, aperture: [25.4, 25.4], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 5.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/cornellbox.usda"], invisible_overrides: Some(0) } +layer: $DIR/cornellbox.usda +warning: Warning { code: AssetUnsupportedByHost, kind: Skipped, count: 1, prims: [], message: "No asset loader: environment map $DIR/sky_gradient.exr ignored — the dome falls back to its uniform colour. Use Scene::from_usd_with_assets to supply one." } +warning: Warning { code: MaterialFallbackDefault, kind: Skipped, count: 1, prims: ["/scene/Looks/initialShadingGroup"], message: "Material /scene/Looks/initialShadingGroup has no surface shader — using default grey OpenPBR" } +lights: 1 +light 0: dome name Some("/scene/Sky") lpe None pmf 1.0 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 5 geometries, PrimitiveBreakdown { triangles: 822, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 2 } top level, PrimitiveBreakdown { triangles: 1582, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 2 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 4.0 motion [] pieces all=10:88b22fc3345d5b05 camera=10:88b22fc3345d5b05 shadow=10:88b22fc3345d5b05 indirect=10:88b22fc3345d5b05 +geom 1: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.2 motion [] pieces all=760:c2b60a75c52c78b9 camera=760:c2b60a75c52c78b9 shadow=760:c2b60a75c52c78b9 indirect=760:c2b60a75c52c78b9 +geom 2: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=12:94a297badef437e1 camera=12:94a297badef437e1 shadow=12:94a297badef437e1 indirect=12:94a297badef437e1 +geom 3: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.25 motion [] pieces all=800:4a8c9f44d777e131 camera=800:4a8c9f44d777e131 shadow=800:4a8c9f44d777e131 indirect=800:4a8c9f44d777e131 +geom 4: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.3585339 motion [] pieces all=760:2344ecf63e12c441 camera=760:2344ecf63e12c441 shadow=760:2344ecf63e12c441 indirect=760:2344ecf63e12c441 +provenance material /scene/Looks/initialShadingGroup: MaterialOrigin { slots: [0, 1, 2, 3, 4], displaced: false } +provenance light /scene/Sky: LightOrigin { index: 0, geoms: 0..0 } +provenance geometry 0..1: /scene/pCube1 +provenance geometry 1..2: /scene/pSphere1 +provenance geometry 2..3: /scene/pCube2 +provenance geometry 3..4: /scene/pTorus1 +provenance geometry 4..5: /scene/pSphere2 +provenance mesh: MeshOrigin { geom_id: 0, slot: 0, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 1, slot: 1, baked: false, moving: false } +provenance mesh: MeshOrigin { geom_id: 2, slot: 2, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 3, slot: 3, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 4, slot: 1, baked: false, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 12343188411137242430, n_points: 8, n_indices: 20, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 1: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 17119738035130870988, n_points: 382, n_indices: 1560, n_uvs: None, smooth: false, material: 0 }), placements: 2, shared: false, displaced: false } +provenance mesh slot 2: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 1739488954094729910, n_points: 8, n_indices: 24, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 3: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 6096447469814747168, n_points: 400, n_indices: 1600, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/scene/camera1"), cameras: ["/scene/camera1"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/scene/camera1"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-50.image b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-50.image new file mode 100644 index 000000000..ba4884437 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-50.image @@ -0,0 +1 @@ +640x360 16spp clamp-off 52a1a46f3a46d230 diff --git a/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-51.digest b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-51.digest new file mode 100644 index 000000000..0e859a952 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-51.digest @@ -0,0 +1,40 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/scene/camera1") +camera: Camera { origin: Vec3A(0.0074343784, 1.9913422, 4.0133057), lower_left_corner: Vec3A(-8.881443, -3.0086517, -0.98669434), horizontal: Vec3A(17.777756, 0.0, 0.0), vertical: Vec3A(0.0, 9.999988, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: Some(Vec4(0.0, 0.0, -1.0, 3.9133058)), far: Some(Vec4(0.0, 0.0, 1.0, 9995.986)), planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: None +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 640, height: 360, region: PixelRect { x0: 0, y0: 0, x1: 640, y1: 360 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 12.700017, aperture: [25.4, 25.4], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 5.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/cornellbox.usda"], invisible_overrides: Some(0) } +layer: $DIR/cornellbox.usda +warning: Warning { code: AssetUnsupportedByHost, kind: Skipped, count: 1, prims: [], message: "No asset loader: environment map $DIR/sky_gradient.exr ignored — the dome falls back to its uniform colour. Use Scene::from_usd_with_assets to supply one." } +warning: Warning { code: MaterialFallbackDefault, kind: Skipped, count: 1, prims: ["/scene/Looks/initialShadingGroup"], message: "Material /scene/Looks/initialShadingGroup has no surface shader — using default grey OpenPBR" } +lights: 1 +light 0: dome name Some("/scene/Sky") lpe None pmf 1.0 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 5 geometries, PrimitiveBreakdown { triangles: 822, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 2 } top level, PrimitiveBreakdown { triangles: 1582, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 2 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 4.0 motion [] pieces all=10:88b22fc3345d5b05 camera=10:88b22fc3345d5b05 shadow=10:88b22fc3345d5b05 indirect=10:88b22fc3345d5b05 +geom 1: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.2 motion [] pieces all=760:c2b60a75c52c78b9 camera=760:c2b60a75c52c78b9 shadow=760:c2b60a75c52c78b9 indirect=760:c2b60a75c52c78b9 +geom 2: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=12:94a297badef437e1 camera=12:94a297badef437e1 shadow=12:94a297badef437e1 indirect=12:94a297badef437e1 +geom 3: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.25 motion [] pieces all=800:4a8c9f44d777e131 camera=800:4a8c9f44d777e131 shadow=800:4a8c9f44d777e131 indirect=800:4a8c9f44d777e131 +geom 4: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.3585339 motion [] pieces all=760:2344ecf63e12c441 camera=760:2344ecf63e12c441 shadow=760:2344ecf63e12c441 indirect=760:2344ecf63e12c441 +provenance material /scene/Looks/initialShadingGroup: MaterialOrigin { slots: [0, 1, 2, 3, 4], displaced: false } +provenance light /scene/Sky: LightOrigin { index: 0, geoms: 0..0 } +provenance geometry 0..1: /scene/pCube1 +provenance geometry 1..2: /scene/pSphere1 +provenance geometry 2..3: /scene/pCube2 +provenance geometry 3..4: /scene/pTorus1 +provenance geometry 4..5: /scene/pSphere2 +provenance mesh: MeshOrigin { geom_id: 0, slot: 0, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 1, slot: 1, baked: false, moving: false } +provenance mesh: MeshOrigin { geom_id: 2, slot: 2, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 3, slot: 3, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 4, slot: 1, baked: false, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 12343188411137242430, n_points: 8, n_indices: 20, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 1: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 17119738035130870988, n_points: 382, n_indices: 1560, n_uvs: None, smooth: false, material: 0 }), placements: 2, shared: false, displaced: false } +provenance mesh slot 2: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 1739488954094729910, n_points: 8, n_indices: 24, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 3: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 6096447469814747168, n_points: 400, n_indices: 1600, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/scene/camera1"), cameras: ["/scene/camera1"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/scene/camera1"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-51.image b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-51.image new file mode 100644 index 000000000..ba4884437 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-51.image @@ -0,0 +1 @@ +640x360 16spp clamp-off 52a1a46f3a46d230 diff --git a/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-52.digest b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-52.digest new file mode 100644 index 000000000..0e859a952 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-52.digest @@ -0,0 +1,40 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/scene/camera1") +camera: Camera { origin: Vec3A(0.0074343784, 1.9913422, 4.0133057), lower_left_corner: Vec3A(-8.881443, -3.0086517, -0.98669434), horizontal: Vec3A(17.777756, 0.0, 0.0), vertical: Vec3A(0.0, 9.999988, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: Some(Vec4(0.0, 0.0, -1.0, 3.9133058)), far: Some(Vec4(0.0, 0.0, 1.0, 9995.986)), planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: None +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 640, height: 360, region: PixelRect { x0: 0, y0: 0, x1: 640, y1: 360 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 12.700017, aperture: [25.4, 25.4], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 5.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/cornellbox.usda"], invisible_overrides: Some(0) } +layer: $DIR/cornellbox.usda +warning: Warning { code: AssetUnsupportedByHost, kind: Skipped, count: 1, prims: [], message: "No asset loader: environment map $DIR/sky_gradient.exr ignored — the dome falls back to its uniform colour. Use Scene::from_usd_with_assets to supply one." } +warning: Warning { code: MaterialFallbackDefault, kind: Skipped, count: 1, prims: ["/scene/Looks/initialShadingGroup"], message: "Material /scene/Looks/initialShadingGroup has no surface shader — using default grey OpenPBR" } +lights: 1 +light 0: dome name Some("/scene/Sky") lpe None pmf 1.0 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 5 geometries, PrimitiveBreakdown { triangles: 822, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 2 } top level, PrimitiveBreakdown { triangles: 1582, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 2 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 4.0 motion [] pieces all=10:88b22fc3345d5b05 camera=10:88b22fc3345d5b05 shadow=10:88b22fc3345d5b05 indirect=10:88b22fc3345d5b05 +geom 1: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.2 motion [] pieces all=760:c2b60a75c52c78b9 camera=760:c2b60a75c52c78b9 shadow=760:c2b60a75c52c78b9 indirect=760:c2b60a75c52c78b9 +geom 2: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=12:94a297badef437e1 camera=12:94a297badef437e1 shadow=12:94a297badef437e1 indirect=12:94a297badef437e1 +geom 3: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.25 motion [] pieces all=800:4a8c9f44d777e131 camera=800:4a8c9f44d777e131 shadow=800:4a8c9f44d777e131 indirect=800:4a8c9f44d777e131 +geom 4: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.3585339 motion [] pieces all=760:2344ecf63e12c441 camera=760:2344ecf63e12c441 shadow=760:2344ecf63e12c441 indirect=760:2344ecf63e12c441 +provenance material /scene/Looks/initialShadingGroup: MaterialOrigin { slots: [0, 1, 2, 3, 4], displaced: false } +provenance light /scene/Sky: LightOrigin { index: 0, geoms: 0..0 } +provenance geometry 0..1: /scene/pCube1 +provenance geometry 1..2: /scene/pSphere1 +provenance geometry 2..3: /scene/pCube2 +provenance geometry 3..4: /scene/pTorus1 +provenance geometry 4..5: /scene/pSphere2 +provenance mesh: MeshOrigin { geom_id: 0, slot: 0, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 1, slot: 1, baked: false, moving: false } +provenance mesh: MeshOrigin { geom_id: 2, slot: 2, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 3, slot: 3, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 4, slot: 1, baked: false, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 12343188411137242430, n_points: 8, n_indices: 20, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 1: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 17119738035130870988, n_points: 382, n_indices: 1560, n_uvs: None, smooth: false, material: 0 }), placements: 2, shared: false, displaced: false } +provenance mesh slot 2: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 1739488954094729910, n_points: 8, n_indices: 24, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 3: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 6096447469814747168, n_points: 400, n_indices: 1600, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/scene/camera1"), cameras: ["/scene/camera1"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/scene/camera1"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-52.image b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-52.image new file mode 100644 index 000000000..ba4884437 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-52.image @@ -0,0 +1 @@ +640x360 16spp clamp-off 52a1a46f3a46d230 diff --git a/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-53.digest b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-53.digest new file mode 100644 index 000000000..0e859a952 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-53.digest @@ -0,0 +1,40 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/scene/camera1") +camera: Camera { origin: Vec3A(0.0074343784, 1.9913422, 4.0133057), lower_left_corner: Vec3A(-8.881443, -3.0086517, -0.98669434), horizontal: Vec3A(17.777756, 0.0, 0.0), vertical: Vec3A(0.0, 9.999988, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: Some(Vec4(0.0, 0.0, -1.0, 3.9133058)), far: Some(Vec4(0.0, 0.0, 1.0, 9995.986)), planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: None +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 640, height: 360, region: PixelRect { x0: 0, y0: 0, x1: 640, y1: 360 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 12.700017, aperture: [25.4, 25.4], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 5.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/cornellbox.usda"], invisible_overrides: Some(0) } +layer: $DIR/cornellbox.usda +warning: Warning { code: AssetUnsupportedByHost, kind: Skipped, count: 1, prims: [], message: "No asset loader: environment map $DIR/sky_gradient.exr ignored — the dome falls back to its uniform colour. Use Scene::from_usd_with_assets to supply one." } +warning: Warning { code: MaterialFallbackDefault, kind: Skipped, count: 1, prims: ["/scene/Looks/initialShadingGroup"], message: "Material /scene/Looks/initialShadingGroup has no surface shader — using default grey OpenPBR" } +lights: 1 +light 0: dome name Some("/scene/Sky") lpe None pmf 1.0 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 5 geometries, PrimitiveBreakdown { triangles: 822, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 2 } top level, PrimitiveBreakdown { triangles: 1582, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 2 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 4.0 motion [] pieces all=10:88b22fc3345d5b05 camera=10:88b22fc3345d5b05 shadow=10:88b22fc3345d5b05 indirect=10:88b22fc3345d5b05 +geom 1: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.2 motion [] pieces all=760:c2b60a75c52c78b9 camera=760:c2b60a75c52c78b9 shadow=760:c2b60a75c52c78b9 indirect=760:c2b60a75c52c78b9 +geom 2: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=12:94a297badef437e1 camera=12:94a297badef437e1 shadow=12:94a297badef437e1 indirect=12:94a297badef437e1 +geom 3: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.25 motion [] pieces all=800:4a8c9f44d777e131 camera=800:4a8c9f44d777e131 shadow=800:4a8c9f44d777e131 indirect=800:4a8c9f44d777e131 +geom 4: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.3585339 motion [] pieces all=760:2344ecf63e12c441 camera=760:2344ecf63e12c441 shadow=760:2344ecf63e12c441 indirect=760:2344ecf63e12c441 +provenance material /scene/Looks/initialShadingGroup: MaterialOrigin { slots: [0, 1, 2, 3, 4], displaced: false } +provenance light /scene/Sky: LightOrigin { index: 0, geoms: 0..0 } +provenance geometry 0..1: /scene/pCube1 +provenance geometry 1..2: /scene/pSphere1 +provenance geometry 2..3: /scene/pCube2 +provenance geometry 3..4: /scene/pTorus1 +provenance geometry 4..5: /scene/pSphere2 +provenance mesh: MeshOrigin { geom_id: 0, slot: 0, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 1, slot: 1, baked: false, moving: false } +provenance mesh: MeshOrigin { geom_id: 2, slot: 2, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 3, slot: 3, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 4, slot: 1, baked: false, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 12343188411137242430, n_points: 8, n_indices: 20, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 1: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 17119738035130870988, n_points: 382, n_indices: 1560, n_uvs: None, smooth: false, material: 0 }), placements: 2, shared: false, displaced: false } +provenance mesh slot 2: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 1739488954094729910, n_points: 8, n_indices: 24, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 3: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 6096447469814747168, n_points: 400, n_indices: 1600, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/scene/camera1"), cameras: ["/scene/camera1"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/scene/camera1"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-53.image b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-53.image new file mode 100644 index 000000000..ba4884437 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-53.image @@ -0,0 +1 @@ +640x360 16spp clamp-off 52a1a46f3a46d230 diff --git a/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-54.digest b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-54.digest new file mode 100644 index 000000000..0e859a952 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-54.digest @@ -0,0 +1,40 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/scene/camera1") +camera: Camera { origin: Vec3A(0.0074343784, 1.9913422, 4.0133057), lower_left_corner: Vec3A(-8.881443, -3.0086517, -0.98669434), horizontal: Vec3A(17.777756, 0.0, 0.0), vertical: Vec3A(0.0, 9.999988, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: Some(Vec4(0.0, 0.0, -1.0, 3.9133058)), far: Some(Vec4(0.0, 0.0, 1.0, 9995.986)), planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: None +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 640, height: 360, region: PixelRect { x0: 0, y0: 0, x1: 640, y1: 360 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 12.700017, aperture: [25.4, 25.4], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 5.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/cornellbox.usda"], invisible_overrides: Some(0) } +layer: $DIR/cornellbox.usda +warning: Warning { code: AssetUnsupportedByHost, kind: Skipped, count: 1, prims: [], message: "No asset loader: environment map $DIR/sky_gradient.exr ignored — the dome falls back to its uniform colour. Use Scene::from_usd_with_assets to supply one." } +warning: Warning { code: MaterialFallbackDefault, kind: Skipped, count: 1, prims: ["/scene/Looks/initialShadingGroup"], message: "Material /scene/Looks/initialShadingGroup has no surface shader — using default grey OpenPBR" } +lights: 1 +light 0: dome name Some("/scene/Sky") lpe None pmf 1.0 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 5 geometries, PrimitiveBreakdown { triangles: 822, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 2 } top level, PrimitiveBreakdown { triangles: 1582, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 2 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 4.0 motion [] pieces all=10:88b22fc3345d5b05 camera=10:88b22fc3345d5b05 shadow=10:88b22fc3345d5b05 indirect=10:88b22fc3345d5b05 +geom 1: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.2 motion [] pieces all=760:c2b60a75c52c78b9 camera=760:c2b60a75c52c78b9 shadow=760:c2b60a75c52c78b9 indirect=760:c2b60a75c52c78b9 +geom 2: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=12:94a297badef437e1 camera=12:94a297badef437e1 shadow=12:94a297badef437e1 indirect=12:94a297badef437e1 +geom 3: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.25 motion [] pieces all=800:4a8c9f44d777e131 camera=800:4a8c9f44d777e131 shadow=800:4a8c9f44d777e131 indirect=800:4a8c9f44d777e131 +geom 4: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.3585339 motion [] pieces all=760:2344ecf63e12c441 camera=760:2344ecf63e12c441 shadow=760:2344ecf63e12c441 indirect=760:2344ecf63e12c441 +provenance material /scene/Looks/initialShadingGroup: MaterialOrigin { slots: [0, 1, 2, 3, 4], displaced: false } +provenance light /scene/Sky: LightOrigin { index: 0, geoms: 0..0 } +provenance geometry 0..1: /scene/pCube1 +provenance geometry 1..2: /scene/pSphere1 +provenance geometry 2..3: /scene/pCube2 +provenance geometry 3..4: /scene/pTorus1 +provenance geometry 4..5: /scene/pSphere2 +provenance mesh: MeshOrigin { geom_id: 0, slot: 0, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 1, slot: 1, baked: false, moving: false } +provenance mesh: MeshOrigin { geom_id: 2, slot: 2, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 3, slot: 3, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 4, slot: 1, baked: false, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 12343188411137242430, n_points: 8, n_indices: 20, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 1: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 17119738035130870988, n_points: 382, n_indices: 1560, n_uvs: None, smooth: false, material: 0 }), placements: 2, shared: false, displaced: false } +provenance mesh slot 2: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 1739488954094729910, n_points: 8, n_indices: 24, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 3: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 6096447469814747168, n_points: 400, n_indices: 1600, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/scene/camera1"), cameras: ["/scene/camera1"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/scene/camera1"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-54.image b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-54.image new file mode 100644 index 000000000..ba4884437 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-54.image @@ -0,0 +1 @@ +640x360 16spp clamp-off 52a1a46f3a46d230 diff --git a/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-55.digest b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-55.digest new file mode 100644 index 000000000..0e859a952 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-55.digest @@ -0,0 +1,40 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/scene/camera1") +camera: Camera { origin: Vec3A(0.0074343784, 1.9913422, 4.0133057), lower_left_corner: Vec3A(-8.881443, -3.0086517, -0.98669434), horizontal: Vec3A(17.777756, 0.0, 0.0), vertical: Vec3A(0.0, 9.999988, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: Some(Vec4(0.0, 0.0, -1.0, 3.9133058)), far: Some(Vec4(0.0, 0.0, 1.0, 9995.986)), planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: None +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 640, height: 360, region: PixelRect { x0: 0, y0: 0, x1: 640, y1: 360 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 12.700017, aperture: [25.4, 25.4], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 5.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/cornellbox.usda"], invisible_overrides: Some(0) } +layer: $DIR/cornellbox.usda +warning: Warning { code: AssetUnsupportedByHost, kind: Skipped, count: 1, prims: [], message: "No asset loader: environment map $DIR/sky_gradient.exr ignored — the dome falls back to its uniform colour. Use Scene::from_usd_with_assets to supply one." } +warning: Warning { code: MaterialFallbackDefault, kind: Skipped, count: 1, prims: ["/scene/Looks/initialShadingGroup"], message: "Material /scene/Looks/initialShadingGroup has no surface shader — using default grey OpenPBR" } +lights: 1 +light 0: dome name Some("/scene/Sky") lpe None pmf 1.0 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 5 geometries, PrimitiveBreakdown { triangles: 822, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 2 } top level, PrimitiveBreakdown { triangles: 1582, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 2 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 4.0 motion [] pieces all=10:88b22fc3345d5b05 camera=10:88b22fc3345d5b05 shadow=10:88b22fc3345d5b05 indirect=10:88b22fc3345d5b05 +geom 1: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.2 motion [] pieces all=760:c2b60a75c52c78b9 camera=760:c2b60a75c52c78b9 shadow=760:c2b60a75c52c78b9 indirect=760:c2b60a75c52c78b9 +geom 2: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=12:94a297badef437e1 camera=12:94a297badef437e1 shadow=12:94a297badef437e1 indirect=12:94a297badef437e1 +geom 3: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.25 motion [] pieces all=800:4a8c9f44d777e131 camera=800:4a8c9f44d777e131 shadow=800:4a8c9f44d777e131 indirect=800:4a8c9f44d777e131 +geom 4: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.3585339 motion [] pieces all=760:2344ecf63e12c441 camera=760:2344ecf63e12c441 shadow=760:2344ecf63e12c441 indirect=760:2344ecf63e12c441 +provenance material /scene/Looks/initialShadingGroup: MaterialOrigin { slots: [0, 1, 2, 3, 4], displaced: false } +provenance light /scene/Sky: LightOrigin { index: 0, geoms: 0..0 } +provenance geometry 0..1: /scene/pCube1 +provenance geometry 1..2: /scene/pSphere1 +provenance geometry 2..3: /scene/pCube2 +provenance geometry 3..4: /scene/pTorus1 +provenance geometry 4..5: /scene/pSphere2 +provenance mesh: MeshOrigin { geom_id: 0, slot: 0, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 1, slot: 1, baked: false, moving: false } +provenance mesh: MeshOrigin { geom_id: 2, slot: 2, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 3, slot: 3, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 4, slot: 1, baked: false, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 12343188411137242430, n_points: 8, n_indices: 20, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 1: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 17119738035130870988, n_points: 382, n_indices: 1560, n_uvs: None, smooth: false, material: 0 }), placements: 2, shared: false, displaced: false } +provenance mesh slot 2: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 1739488954094729910, n_points: 8, n_indices: 24, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 3: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 6096447469814747168, n_points: 400, n_indices: 1600, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/scene/camera1"), cameras: ["/scene/camera1"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/scene/camera1"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-55.image b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-55.image new file mode 100644 index 000000000..ba4884437 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-55.image @@ -0,0 +1 @@ +640x360 16spp clamp-off 52a1a46f3a46d230 diff --git a/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-56.digest b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-56.digest new file mode 100644 index 000000000..0e859a952 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-56.digest @@ -0,0 +1,40 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/scene/camera1") +camera: Camera { origin: Vec3A(0.0074343784, 1.9913422, 4.0133057), lower_left_corner: Vec3A(-8.881443, -3.0086517, -0.98669434), horizontal: Vec3A(17.777756, 0.0, 0.0), vertical: Vec3A(0.0, 9.999988, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: Some(Vec4(0.0, 0.0, -1.0, 3.9133058)), far: Some(Vec4(0.0, 0.0, 1.0, 9995.986)), planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: None +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 640, height: 360, region: PixelRect { x0: 0, y0: 0, x1: 640, y1: 360 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 12.700017, aperture: [25.4, 25.4], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 5.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/cornellbox.usda"], invisible_overrides: Some(0) } +layer: $DIR/cornellbox.usda +warning: Warning { code: AssetUnsupportedByHost, kind: Skipped, count: 1, prims: [], message: "No asset loader: environment map $DIR/sky_gradient.exr ignored — the dome falls back to its uniform colour. Use Scene::from_usd_with_assets to supply one." } +warning: Warning { code: MaterialFallbackDefault, kind: Skipped, count: 1, prims: ["/scene/Looks/initialShadingGroup"], message: "Material /scene/Looks/initialShadingGroup has no surface shader — using default grey OpenPBR" } +lights: 1 +light 0: dome name Some("/scene/Sky") lpe None pmf 1.0 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 5 geometries, PrimitiveBreakdown { triangles: 822, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 2 } top level, PrimitiveBreakdown { triangles: 1582, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 2 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 4.0 motion [] pieces all=10:88b22fc3345d5b05 camera=10:88b22fc3345d5b05 shadow=10:88b22fc3345d5b05 indirect=10:88b22fc3345d5b05 +geom 1: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.2 motion [] pieces all=760:c2b60a75c52c78b9 camera=760:c2b60a75c52c78b9 shadow=760:c2b60a75c52c78b9 indirect=760:c2b60a75c52c78b9 +geom 2: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=12:94a297badef437e1 camera=12:94a297badef437e1 shadow=12:94a297badef437e1 indirect=12:94a297badef437e1 +geom 3: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.25 motion [] pieces all=800:4a8c9f44d777e131 camera=800:4a8c9f44d777e131 shadow=800:4a8c9f44d777e131 indirect=800:4a8c9f44d777e131 +geom 4: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.3585339 motion [] pieces all=760:2344ecf63e12c441 camera=760:2344ecf63e12c441 shadow=760:2344ecf63e12c441 indirect=760:2344ecf63e12c441 +provenance material /scene/Looks/initialShadingGroup: MaterialOrigin { slots: [0, 1, 2, 3, 4], displaced: false } +provenance light /scene/Sky: LightOrigin { index: 0, geoms: 0..0 } +provenance geometry 0..1: /scene/pCube1 +provenance geometry 1..2: /scene/pSphere1 +provenance geometry 2..3: /scene/pCube2 +provenance geometry 3..4: /scene/pTorus1 +provenance geometry 4..5: /scene/pSphere2 +provenance mesh: MeshOrigin { geom_id: 0, slot: 0, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 1, slot: 1, baked: false, moving: false } +provenance mesh: MeshOrigin { geom_id: 2, slot: 2, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 3, slot: 3, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 4, slot: 1, baked: false, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 12343188411137242430, n_points: 8, n_indices: 20, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 1: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 17119738035130870988, n_points: 382, n_indices: 1560, n_uvs: None, smooth: false, material: 0 }), placements: 2, shared: false, displaced: false } +provenance mesh slot 2: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 1739488954094729910, n_points: 8, n_indices: 24, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 3: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 6096447469814747168, n_points: 400, n_indices: 1600, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/scene/camera1"), cameras: ["/scene/camera1"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/scene/camera1"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-56.image b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-56.image new file mode 100644 index 000000000..ba4884437 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-56.image @@ -0,0 +1 @@ +640x360 16spp clamp-off 52a1a46f3a46d230 diff --git a/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-57.digest b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-57.digest new file mode 100644 index 000000000..0e859a952 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-57.digest @@ -0,0 +1,40 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/scene/camera1") +camera: Camera { origin: Vec3A(0.0074343784, 1.9913422, 4.0133057), lower_left_corner: Vec3A(-8.881443, -3.0086517, -0.98669434), horizontal: Vec3A(17.777756, 0.0, 0.0), vertical: Vec3A(0.0, 9.999988, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: Some(Vec4(0.0, 0.0, -1.0, 3.9133058)), far: Some(Vec4(0.0, 0.0, 1.0, 9995.986)), planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: None +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 640, height: 360, region: PixelRect { x0: 0, y0: 0, x1: 640, y1: 360 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 12.700017, aperture: [25.4, 25.4], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 5.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/cornellbox.usda"], invisible_overrides: Some(0) } +layer: $DIR/cornellbox.usda +warning: Warning { code: AssetUnsupportedByHost, kind: Skipped, count: 1, prims: [], message: "No asset loader: environment map $DIR/sky_gradient.exr ignored — the dome falls back to its uniform colour. Use Scene::from_usd_with_assets to supply one." } +warning: Warning { code: MaterialFallbackDefault, kind: Skipped, count: 1, prims: ["/scene/Looks/initialShadingGroup"], message: "Material /scene/Looks/initialShadingGroup has no surface shader — using default grey OpenPBR" } +lights: 1 +light 0: dome name Some("/scene/Sky") lpe None pmf 1.0 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 5 geometries, PrimitiveBreakdown { triangles: 822, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 2 } top level, PrimitiveBreakdown { triangles: 1582, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 2 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 4.0 motion [] pieces all=10:88b22fc3345d5b05 camera=10:88b22fc3345d5b05 shadow=10:88b22fc3345d5b05 indirect=10:88b22fc3345d5b05 +geom 1: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.2 motion [] pieces all=760:c2b60a75c52c78b9 camera=760:c2b60a75c52c78b9 shadow=760:c2b60a75c52c78b9 indirect=760:c2b60a75c52c78b9 +geom 2: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=12:94a297badef437e1 camera=12:94a297badef437e1 shadow=12:94a297badef437e1 indirect=12:94a297badef437e1 +geom 3: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.25 motion [] pieces all=800:4a8c9f44d777e131 camera=800:4a8c9f44d777e131 shadow=800:4a8c9f44d777e131 indirect=800:4a8c9f44d777e131 +geom 4: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.3585339 motion [] pieces all=760:2344ecf63e12c441 camera=760:2344ecf63e12c441 shadow=760:2344ecf63e12c441 indirect=760:2344ecf63e12c441 +provenance material /scene/Looks/initialShadingGroup: MaterialOrigin { slots: [0, 1, 2, 3, 4], displaced: false } +provenance light /scene/Sky: LightOrigin { index: 0, geoms: 0..0 } +provenance geometry 0..1: /scene/pCube1 +provenance geometry 1..2: /scene/pSphere1 +provenance geometry 2..3: /scene/pCube2 +provenance geometry 3..4: /scene/pTorus1 +provenance geometry 4..5: /scene/pSphere2 +provenance mesh: MeshOrigin { geom_id: 0, slot: 0, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 1, slot: 1, baked: false, moving: false } +provenance mesh: MeshOrigin { geom_id: 2, slot: 2, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 3, slot: 3, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 4, slot: 1, baked: false, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 12343188411137242430, n_points: 8, n_indices: 20, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 1: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 17119738035130870988, n_points: 382, n_indices: 1560, n_uvs: None, smooth: false, material: 0 }), placements: 2, shared: false, displaced: false } +provenance mesh slot 2: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 1739488954094729910, n_points: 8, n_indices: 24, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 3: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 6096447469814747168, n_points: 400, n_indices: 1600, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/scene/camera1"), cameras: ["/scene/camera1"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/scene/camera1"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-57.image b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-57.image new file mode 100644 index 000000000..ba4884437 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-57.image @@ -0,0 +1 @@ +640x360 16spp clamp-off 52a1a46f3a46d230 diff --git a/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-58.digest b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-58.digest new file mode 100644 index 000000000..0e859a952 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-58.digest @@ -0,0 +1,40 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/scene/camera1") +camera: Camera { origin: Vec3A(0.0074343784, 1.9913422, 4.0133057), lower_left_corner: Vec3A(-8.881443, -3.0086517, -0.98669434), horizontal: Vec3A(17.777756, 0.0, 0.0), vertical: Vec3A(0.0, 9.999988, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: Some(Vec4(0.0, 0.0, -1.0, 3.9133058)), far: Some(Vec4(0.0, 0.0, 1.0, 9995.986)), planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: None +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 640, height: 360, region: PixelRect { x0: 0, y0: 0, x1: 640, y1: 360 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 12.700017, aperture: [25.4, 25.4], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 5.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/cornellbox.usda"], invisible_overrides: Some(0) } +layer: $DIR/cornellbox.usda +warning: Warning { code: AssetUnsupportedByHost, kind: Skipped, count: 1, prims: [], message: "No asset loader: environment map $DIR/sky_gradient.exr ignored — the dome falls back to its uniform colour. Use Scene::from_usd_with_assets to supply one." } +warning: Warning { code: MaterialFallbackDefault, kind: Skipped, count: 1, prims: ["/scene/Looks/initialShadingGroup"], message: "Material /scene/Looks/initialShadingGroup has no surface shader — using default grey OpenPBR" } +lights: 1 +light 0: dome name Some("/scene/Sky") lpe None pmf 1.0 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 5 geometries, PrimitiveBreakdown { triangles: 822, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 2 } top level, PrimitiveBreakdown { triangles: 1582, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 2 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 4.0 motion [] pieces all=10:88b22fc3345d5b05 camera=10:88b22fc3345d5b05 shadow=10:88b22fc3345d5b05 indirect=10:88b22fc3345d5b05 +geom 1: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.2 motion [] pieces all=760:c2b60a75c52c78b9 camera=760:c2b60a75c52c78b9 shadow=760:c2b60a75c52c78b9 indirect=760:c2b60a75c52c78b9 +geom 2: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=12:94a297badef437e1 camera=12:94a297badef437e1 shadow=12:94a297badef437e1 indirect=12:94a297badef437e1 +geom 3: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.25 motion [] pieces all=800:4a8c9f44d777e131 camera=800:4a8c9f44d777e131 shadow=800:4a8c9f44d777e131 indirect=800:4a8c9f44d777e131 +geom 4: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.3585339 motion [] pieces all=760:2344ecf63e12c441 camera=760:2344ecf63e12c441 shadow=760:2344ecf63e12c441 indirect=760:2344ecf63e12c441 +provenance material /scene/Looks/initialShadingGroup: MaterialOrigin { slots: [0, 1, 2, 3, 4], displaced: false } +provenance light /scene/Sky: LightOrigin { index: 0, geoms: 0..0 } +provenance geometry 0..1: /scene/pCube1 +provenance geometry 1..2: /scene/pSphere1 +provenance geometry 2..3: /scene/pCube2 +provenance geometry 3..4: /scene/pTorus1 +provenance geometry 4..5: /scene/pSphere2 +provenance mesh: MeshOrigin { geom_id: 0, slot: 0, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 1, slot: 1, baked: false, moving: false } +provenance mesh: MeshOrigin { geom_id: 2, slot: 2, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 3, slot: 3, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 4, slot: 1, baked: false, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 12343188411137242430, n_points: 8, n_indices: 20, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 1: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 17119738035130870988, n_points: 382, n_indices: 1560, n_uvs: None, smooth: false, material: 0 }), placements: 2, shared: false, displaced: false } +provenance mesh slot 2: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 1739488954094729910, n_points: 8, n_indices: 24, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 3: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 6096447469814747168, n_points: 400, n_indices: 1600, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/scene/camera1"), cameras: ["/scene/camera1"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/scene/camera1"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-58.image b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-58.image new file mode 100644 index 000000000..ba4884437 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-58.image @@ -0,0 +1 @@ +640x360 16spp clamp-off 52a1a46f3a46d230 diff --git a/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-59.digest b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-59.digest new file mode 100644 index 000000000..0e859a952 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-59.digest @@ -0,0 +1,40 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/scene/camera1") +camera: Camera { origin: Vec3A(0.0074343784, 1.9913422, 4.0133057), lower_left_corner: Vec3A(-8.881443, -3.0086517, -0.98669434), horizontal: Vec3A(17.777756, 0.0, 0.0), vertical: Vec3A(0.0, 9.999988, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: Some(Vec4(0.0, 0.0, -1.0, 3.9133058)), far: Some(Vec4(0.0, 0.0, 1.0, 9995.986)), planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: None +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 640, height: 360, region: PixelRect { x0: 0, y0: 0, x1: 640, y1: 360 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 12.700017, aperture: [25.4, 25.4], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 5.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/cornellbox.usda"], invisible_overrides: Some(0) } +layer: $DIR/cornellbox.usda +warning: Warning { code: AssetUnsupportedByHost, kind: Skipped, count: 1, prims: [], message: "No asset loader: environment map $DIR/sky_gradient.exr ignored — the dome falls back to its uniform colour. Use Scene::from_usd_with_assets to supply one." } +warning: Warning { code: MaterialFallbackDefault, kind: Skipped, count: 1, prims: ["/scene/Looks/initialShadingGroup"], message: "Material /scene/Looks/initialShadingGroup has no surface shader — using default grey OpenPBR" } +lights: 1 +light 0: dome name Some("/scene/Sky") lpe None pmf 1.0 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 5 geometries, PrimitiveBreakdown { triangles: 822, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 2 } top level, PrimitiveBreakdown { triangles: 1582, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 2 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 4.0 motion [] pieces all=10:88b22fc3345d5b05 camera=10:88b22fc3345d5b05 shadow=10:88b22fc3345d5b05 indirect=10:88b22fc3345d5b05 +geom 1: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.2 motion [] pieces all=760:c2b60a75c52c78b9 camera=760:c2b60a75c52c78b9 shadow=760:c2b60a75c52c78b9 indirect=760:c2b60a75c52c78b9 +geom 2: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=12:94a297badef437e1 camera=12:94a297badef437e1 shadow=12:94a297badef437e1 indirect=12:94a297badef437e1 +geom 3: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.25 motion [] pieces all=800:4a8c9f44d777e131 camera=800:4a8c9f44d777e131 shadow=800:4a8c9f44d777e131 indirect=800:4a8c9f44d777e131 +geom 4: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.3585339 motion [] pieces all=760:2344ecf63e12c441 camera=760:2344ecf63e12c441 shadow=760:2344ecf63e12c441 indirect=760:2344ecf63e12c441 +provenance material /scene/Looks/initialShadingGroup: MaterialOrigin { slots: [0, 1, 2, 3, 4], displaced: false } +provenance light /scene/Sky: LightOrigin { index: 0, geoms: 0..0 } +provenance geometry 0..1: /scene/pCube1 +provenance geometry 1..2: /scene/pSphere1 +provenance geometry 2..3: /scene/pCube2 +provenance geometry 3..4: /scene/pTorus1 +provenance geometry 4..5: /scene/pSphere2 +provenance mesh: MeshOrigin { geom_id: 0, slot: 0, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 1, slot: 1, baked: false, moving: false } +provenance mesh: MeshOrigin { geom_id: 2, slot: 2, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 3, slot: 3, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 4, slot: 1, baked: false, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 12343188411137242430, n_points: 8, n_indices: 20, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 1: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 17119738035130870988, n_points: 382, n_indices: 1560, n_uvs: None, smooth: false, material: 0 }), placements: 2, shared: false, displaced: false } +provenance mesh slot 2: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 1739488954094729910, n_points: 8, n_indices: 24, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 3: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 6096447469814747168, n_points: 400, n_indices: 1600, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/scene/camera1"), cameras: ["/scene/camera1"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/scene/camera1"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-59.image b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-59.image new file mode 100644 index 000000000..ba4884437 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-59.image @@ -0,0 +1 @@ +640x360 16spp clamp-off 52a1a46f3a46d230 diff --git a/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-6.digest b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-6.digest new file mode 100644 index 000000000..0e859a952 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-6.digest @@ -0,0 +1,40 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/scene/camera1") +camera: Camera { origin: Vec3A(0.0074343784, 1.9913422, 4.0133057), lower_left_corner: Vec3A(-8.881443, -3.0086517, -0.98669434), horizontal: Vec3A(17.777756, 0.0, 0.0), vertical: Vec3A(0.0, 9.999988, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: Some(Vec4(0.0, 0.0, -1.0, 3.9133058)), far: Some(Vec4(0.0, 0.0, 1.0, 9995.986)), planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: None +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 640, height: 360, region: PixelRect { x0: 0, y0: 0, x1: 640, y1: 360 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 12.700017, aperture: [25.4, 25.4], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 5.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/cornellbox.usda"], invisible_overrides: Some(0) } +layer: $DIR/cornellbox.usda +warning: Warning { code: AssetUnsupportedByHost, kind: Skipped, count: 1, prims: [], message: "No asset loader: environment map $DIR/sky_gradient.exr ignored — the dome falls back to its uniform colour. Use Scene::from_usd_with_assets to supply one." } +warning: Warning { code: MaterialFallbackDefault, kind: Skipped, count: 1, prims: ["/scene/Looks/initialShadingGroup"], message: "Material /scene/Looks/initialShadingGroup has no surface shader — using default grey OpenPBR" } +lights: 1 +light 0: dome name Some("/scene/Sky") lpe None pmf 1.0 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 5 geometries, PrimitiveBreakdown { triangles: 822, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 2 } top level, PrimitiveBreakdown { triangles: 1582, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 2 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 4.0 motion [] pieces all=10:88b22fc3345d5b05 camera=10:88b22fc3345d5b05 shadow=10:88b22fc3345d5b05 indirect=10:88b22fc3345d5b05 +geom 1: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.2 motion [] pieces all=760:c2b60a75c52c78b9 camera=760:c2b60a75c52c78b9 shadow=760:c2b60a75c52c78b9 indirect=760:c2b60a75c52c78b9 +geom 2: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=12:94a297badef437e1 camera=12:94a297badef437e1 shadow=12:94a297badef437e1 indirect=12:94a297badef437e1 +geom 3: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.25 motion [] pieces all=800:4a8c9f44d777e131 camera=800:4a8c9f44d777e131 shadow=800:4a8c9f44d777e131 indirect=800:4a8c9f44d777e131 +geom 4: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.3585339 motion [] pieces all=760:2344ecf63e12c441 camera=760:2344ecf63e12c441 shadow=760:2344ecf63e12c441 indirect=760:2344ecf63e12c441 +provenance material /scene/Looks/initialShadingGroup: MaterialOrigin { slots: [0, 1, 2, 3, 4], displaced: false } +provenance light /scene/Sky: LightOrigin { index: 0, geoms: 0..0 } +provenance geometry 0..1: /scene/pCube1 +provenance geometry 1..2: /scene/pSphere1 +provenance geometry 2..3: /scene/pCube2 +provenance geometry 3..4: /scene/pTorus1 +provenance geometry 4..5: /scene/pSphere2 +provenance mesh: MeshOrigin { geom_id: 0, slot: 0, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 1, slot: 1, baked: false, moving: false } +provenance mesh: MeshOrigin { geom_id: 2, slot: 2, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 3, slot: 3, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 4, slot: 1, baked: false, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 12343188411137242430, n_points: 8, n_indices: 20, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 1: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 17119738035130870988, n_points: 382, n_indices: 1560, n_uvs: None, smooth: false, material: 0 }), placements: 2, shared: false, displaced: false } +provenance mesh slot 2: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 1739488954094729910, n_points: 8, n_indices: 24, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 3: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 6096447469814747168, n_points: 400, n_indices: 1600, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/scene/camera1"), cameras: ["/scene/camera1"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/scene/camera1"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-6.image b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-6.image new file mode 100644 index 000000000..ba4884437 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-6.image @@ -0,0 +1 @@ +640x360 16spp clamp-off 52a1a46f3a46d230 diff --git a/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-60.digest b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-60.digest new file mode 100644 index 000000000..0e859a952 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-60.digest @@ -0,0 +1,40 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/scene/camera1") +camera: Camera { origin: Vec3A(0.0074343784, 1.9913422, 4.0133057), lower_left_corner: Vec3A(-8.881443, -3.0086517, -0.98669434), horizontal: Vec3A(17.777756, 0.0, 0.0), vertical: Vec3A(0.0, 9.999988, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: Some(Vec4(0.0, 0.0, -1.0, 3.9133058)), far: Some(Vec4(0.0, 0.0, 1.0, 9995.986)), planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: None +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 640, height: 360, region: PixelRect { x0: 0, y0: 0, x1: 640, y1: 360 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 12.700017, aperture: [25.4, 25.4], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 5.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/cornellbox.usda"], invisible_overrides: Some(0) } +layer: $DIR/cornellbox.usda +warning: Warning { code: AssetUnsupportedByHost, kind: Skipped, count: 1, prims: [], message: "No asset loader: environment map $DIR/sky_gradient.exr ignored — the dome falls back to its uniform colour. Use Scene::from_usd_with_assets to supply one." } +warning: Warning { code: MaterialFallbackDefault, kind: Skipped, count: 1, prims: ["/scene/Looks/initialShadingGroup"], message: "Material /scene/Looks/initialShadingGroup has no surface shader — using default grey OpenPBR" } +lights: 1 +light 0: dome name Some("/scene/Sky") lpe None pmf 1.0 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 5 geometries, PrimitiveBreakdown { triangles: 822, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 2 } top level, PrimitiveBreakdown { triangles: 1582, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 2 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 4.0 motion [] pieces all=10:88b22fc3345d5b05 camera=10:88b22fc3345d5b05 shadow=10:88b22fc3345d5b05 indirect=10:88b22fc3345d5b05 +geom 1: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.2 motion [] pieces all=760:c2b60a75c52c78b9 camera=760:c2b60a75c52c78b9 shadow=760:c2b60a75c52c78b9 indirect=760:c2b60a75c52c78b9 +geom 2: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=12:94a297badef437e1 camera=12:94a297badef437e1 shadow=12:94a297badef437e1 indirect=12:94a297badef437e1 +geom 3: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.25 motion [] pieces all=800:4a8c9f44d777e131 camera=800:4a8c9f44d777e131 shadow=800:4a8c9f44d777e131 indirect=800:4a8c9f44d777e131 +geom 4: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.3585339 motion [] pieces all=760:2344ecf63e12c441 camera=760:2344ecf63e12c441 shadow=760:2344ecf63e12c441 indirect=760:2344ecf63e12c441 +provenance material /scene/Looks/initialShadingGroup: MaterialOrigin { slots: [0, 1, 2, 3, 4], displaced: false } +provenance light /scene/Sky: LightOrigin { index: 0, geoms: 0..0 } +provenance geometry 0..1: /scene/pCube1 +provenance geometry 1..2: /scene/pSphere1 +provenance geometry 2..3: /scene/pCube2 +provenance geometry 3..4: /scene/pTorus1 +provenance geometry 4..5: /scene/pSphere2 +provenance mesh: MeshOrigin { geom_id: 0, slot: 0, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 1, slot: 1, baked: false, moving: false } +provenance mesh: MeshOrigin { geom_id: 2, slot: 2, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 3, slot: 3, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 4, slot: 1, baked: false, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 12343188411137242430, n_points: 8, n_indices: 20, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 1: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 17119738035130870988, n_points: 382, n_indices: 1560, n_uvs: None, smooth: false, material: 0 }), placements: 2, shared: false, displaced: false } +provenance mesh slot 2: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 1739488954094729910, n_points: 8, n_indices: 24, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 3: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 6096447469814747168, n_points: 400, n_indices: 1600, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/scene/camera1"), cameras: ["/scene/camera1"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/scene/camera1"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-60.image b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-60.image new file mode 100644 index 000000000..ba4884437 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-60.image @@ -0,0 +1 @@ +640x360 16spp clamp-off 52a1a46f3a46d230 diff --git a/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-61.digest b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-61.digest new file mode 100644 index 000000000..0e859a952 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-61.digest @@ -0,0 +1,40 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/scene/camera1") +camera: Camera { origin: Vec3A(0.0074343784, 1.9913422, 4.0133057), lower_left_corner: Vec3A(-8.881443, -3.0086517, -0.98669434), horizontal: Vec3A(17.777756, 0.0, 0.0), vertical: Vec3A(0.0, 9.999988, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: Some(Vec4(0.0, 0.0, -1.0, 3.9133058)), far: Some(Vec4(0.0, 0.0, 1.0, 9995.986)), planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: None +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 640, height: 360, region: PixelRect { x0: 0, y0: 0, x1: 640, y1: 360 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 12.700017, aperture: [25.4, 25.4], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 5.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/cornellbox.usda"], invisible_overrides: Some(0) } +layer: $DIR/cornellbox.usda +warning: Warning { code: AssetUnsupportedByHost, kind: Skipped, count: 1, prims: [], message: "No asset loader: environment map $DIR/sky_gradient.exr ignored — the dome falls back to its uniform colour. Use Scene::from_usd_with_assets to supply one." } +warning: Warning { code: MaterialFallbackDefault, kind: Skipped, count: 1, prims: ["/scene/Looks/initialShadingGroup"], message: "Material /scene/Looks/initialShadingGroup has no surface shader — using default grey OpenPBR" } +lights: 1 +light 0: dome name Some("/scene/Sky") lpe None pmf 1.0 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 5 geometries, PrimitiveBreakdown { triangles: 822, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 2 } top level, PrimitiveBreakdown { triangles: 1582, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 2 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 4.0 motion [] pieces all=10:88b22fc3345d5b05 camera=10:88b22fc3345d5b05 shadow=10:88b22fc3345d5b05 indirect=10:88b22fc3345d5b05 +geom 1: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.2 motion [] pieces all=760:c2b60a75c52c78b9 camera=760:c2b60a75c52c78b9 shadow=760:c2b60a75c52c78b9 indirect=760:c2b60a75c52c78b9 +geom 2: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=12:94a297badef437e1 camera=12:94a297badef437e1 shadow=12:94a297badef437e1 indirect=12:94a297badef437e1 +geom 3: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.25 motion [] pieces all=800:4a8c9f44d777e131 camera=800:4a8c9f44d777e131 shadow=800:4a8c9f44d777e131 indirect=800:4a8c9f44d777e131 +geom 4: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.3585339 motion [] pieces all=760:2344ecf63e12c441 camera=760:2344ecf63e12c441 shadow=760:2344ecf63e12c441 indirect=760:2344ecf63e12c441 +provenance material /scene/Looks/initialShadingGroup: MaterialOrigin { slots: [0, 1, 2, 3, 4], displaced: false } +provenance light /scene/Sky: LightOrigin { index: 0, geoms: 0..0 } +provenance geometry 0..1: /scene/pCube1 +provenance geometry 1..2: /scene/pSphere1 +provenance geometry 2..3: /scene/pCube2 +provenance geometry 3..4: /scene/pTorus1 +provenance geometry 4..5: /scene/pSphere2 +provenance mesh: MeshOrigin { geom_id: 0, slot: 0, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 1, slot: 1, baked: false, moving: false } +provenance mesh: MeshOrigin { geom_id: 2, slot: 2, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 3, slot: 3, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 4, slot: 1, baked: false, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 12343188411137242430, n_points: 8, n_indices: 20, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 1: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 17119738035130870988, n_points: 382, n_indices: 1560, n_uvs: None, smooth: false, material: 0 }), placements: 2, shared: false, displaced: false } +provenance mesh slot 2: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 1739488954094729910, n_points: 8, n_indices: 24, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 3: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 6096447469814747168, n_points: 400, n_indices: 1600, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/scene/camera1"), cameras: ["/scene/camera1"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/scene/camera1"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-61.image b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-61.image new file mode 100644 index 000000000..ba4884437 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-61.image @@ -0,0 +1 @@ +640x360 16spp clamp-off 52a1a46f3a46d230 diff --git a/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-62.digest b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-62.digest new file mode 100644 index 000000000..0e859a952 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-62.digest @@ -0,0 +1,40 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/scene/camera1") +camera: Camera { origin: Vec3A(0.0074343784, 1.9913422, 4.0133057), lower_left_corner: Vec3A(-8.881443, -3.0086517, -0.98669434), horizontal: Vec3A(17.777756, 0.0, 0.0), vertical: Vec3A(0.0, 9.999988, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: Some(Vec4(0.0, 0.0, -1.0, 3.9133058)), far: Some(Vec4(0.0, 0.0, 1.0, 9995.986)), planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: None +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 640, height: 360, region: PixelRect { x0: 0, y0: 0, x1: 640, y1: 360 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 12.700017, aperture: [25.4, 25.4], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 5.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/cornellbox.usda"], invisible_overrides: Some(0) } +layer: $DIR/cornellbox.usda +warning: Warning { code: AssetUnsupportedByHost, kind: Skipped, count: 1, prims: [], message: "No asset loader: environment map $DIR/sky_gradient.exr ignored — the dome falls back to its uniform colour. Use Scene::from_usd_with_assets to supply one." } +warning: Warning { code: MaterialFallbackDefault, kind: Skipped, count: 1, prims: ["/scene/Looks/initialShadingGroup"], message: "Material /scene/Looks/initialShadingGroup has no surface shader — using default grey OpenPBR" } +lights: 1 +light 0: dome name Some("/scene/Sky") lpe None pmf 1.0 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 5 geometries, PrimitiveBreakdown { triangles: 822, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 2 } top level, PrimitiveBreakdown { triangles: 1582, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 2 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 4.0 motion [] pieces all=10:88b22fc3345d5b05 camera=10:88b22fc3345d5b05 shadow=10:88b22fc3345d5b05 indirect=10:88b22fc3345d5b05 +geom 1: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.2 motion [] pieces all=760:c2b60a75c52c78b9 camera=760:c2b60a75c52c78b9 shadow=760:c2b60a75c52c78b9 indirect=760:c2b60a75c52c78b9 +geom 2: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=12:94a297badef437e1 camera=12:94a297badef437e1 shadow=12:94a297badef437e1 indirect=12:94a297badef437e1 +geom 3: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.25 motion [] pieces all=800:4a8c9f44d777e131 camera=800:4a8c9f44d777e131 shadow=800:4a8c9f44d777e131 indirect=800:4a8c9f44d777e131 +geom 4: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.3585339 motion [] pieces all=760:2344ecf63e12c441 camera=760:2344ecf63e12c441 shadow=760:2344ecf63e12c441 indirect=760:2344ecf63e12c441 +provenance material /scene/Looks/initialShadingGroup: MaterialOrigin { slots: [0, 1, 2, 3, 4], displaced: false } +provenance light /scene/Sky: LightOrigin { index: 0, geoms: 0..0 } +provenance geometry 0..1: /scene/pCube1 +provenance geometry 1..2: /scene/pSphere1 +provenance geometry 2..3: /scene/pCube2 +provenance geometry 3..4: /scene/pTorus1 +provenance geometry 4..5: /scene/pSphere2 +provenance mesh: MeshOrigin { geom_id: 0, slot: 0, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 1, slot: 1, baked: false, moving: false } +provenance mesh: MeshOrigin { geom_id: 2, slot: 2, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 3, slot: 3, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 4, slot: 1, baked: false, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 12343188411137242430, n_points: 8, n_indices: 20, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 1: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 17119738035130870988, n_points: 382, n_indices: 1560, n_uvs: None, smooth: false, material: 0 }), placements: 2, shared: false, displaced: false } +provenance mesh slot 2: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 1739488954094729910, n_points: 8, n_indices: 24, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 3: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 6096447469814747168, n_points: 400, n_indices: 1600, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/scene/camera1"), cameras: ["/scene/camera1"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/scene/camera1"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-62.image b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-62.image new file mode 100644 index 000000000..ba4884437 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-62.image @@ -0,0 +1 @@ +640x360 16spp clamp-off 52a1a46f3a46d230 diff --git a/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-63.digest b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-63.digest new file mode 100644 index 000000000..0e859a952 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-63.digest @@ -0,0 +1,40 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/scene/camera1") +camera: Camera { origin: Vec3A(0.0074343784, 1.9913422, 4.0133057), lower_left_corner: Vec3A(-8.881443, -3.0086517, -0.98669434), horizontal: Vec3A(17.777756, 0.0, 0.0), vertical: Vec3A(0.0, 9.999988, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: Some(Vec4(0.0, 0.0, -1.0, 3.9133058)), far: Some(Vec4(0.0, 0.0, 1.0, 9995.986)), planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: None +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 640, height: 360, region: PixelRect { x0: 0, y0: 0, x1: 640, y1: 360 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 12.700017, aperture: [25.4, 25.4], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 5.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/cornellbox.usda"], invisible_overrides: Some(0) } +layer: $DIR/cornellbox.usda +warning: Warning { code: AssetUnsupportedByHost, kind: Skipped, count: 1, prims: [], message: "No asset loader: environment map $DIR/sky_gradient.exr ignored — the dome falls back to its uniform colour. Use Scene::from_usd_with_assets to supply one." } +warning: Warning { code: MaterialFallbackDefault, kind: Skipped, count: 1, prims: ["/scene/Looks/initialShadingGroup"], message: "Material /scene/Looks/initialShadingGroup has no surface shader — using default grey OpenPBR" } +lights: 1 +light 0: dome name Some("/scene/Sky") lpe None pmf 1.0 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 5 geometries, PrimitiveBreakdown { triangles: 822, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 2 } top level, PrimitiveBreakdown { triangles: 1582, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 2 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 4.0 motion [] pieces all=10:88b22fc3345d5b05 camera=10:88b22fc3345d5b05 shadow=10:88b22fc3345d5b05 indirect=10:88b22fc3345d5b05 +geom 1: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.2 motion [] pieces all=760:c2b60a75c52c78b9 camera=760:c2b60a75c52c78b9 shadow=760:c2b60a75c52c78b9 indirect=760:c2b60a75c52c78b9 +geom 2: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=12:94a297badef437e1 camera=12:94a297badef437e1 shadow=12:94a297badef437e1 indirect=12:94a297badef437e1 +geom 3: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.25 motion [] pieces all=800:4a8c9f44d777e131 camera=800:4a8c9f44d777e131 shadow=800:4a8c9f44d777e131 indirect=800:4a8c9f44d777e131 +geom 4: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.3585339 motion [] pieces all=760:2344ecf63e12c441 camera=760:2344ecf63e12c441 shadow=760:2344ecf63e12c441 indirect=760:2344ecf63e12c441 +provenance material /scene/Looks/initialShadingGroup: MaterialOrigin { slots: [0, 1, 2, 3, 4], displaced: false } +provenance light /scene/Sky: LightOrigin { index: 0, geoms: 0..0 } +provenance geometry 0..1: /scene/pCube1 +provenance geometry 1..2: /scene/pSphere1 +provenance geometry 2..3: /scene/pCube2 +provenance geometry 3..4: /scene/pTorus1 +provenance geometry 4..5: /scene/pSphere2 +provenance mesh: MeshOrigin { geom_id: 0, slot: 0, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 1, slot: 1, baked: false, moving: false } +provenance mesh: MeshOrigin { geom_id: 2, slot: 2, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 3, slot: 3, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 4, slot: 1, baked: false, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 12343188411137242430, n_points: 8, n_indices: 20, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 1: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 17119738035130870988, n_points: 382, n_indices: 1560, n_uvs: None, smooth: false, material: 0 }), placements: 2, shared: false, displaced: false } +provenance mesh slot 2: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 1739488954094729910, n_points: 8, n_indices: 24, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 3: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 6096447469814747168, n_points: 400, n_indices: 1600, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/scene/camera1"), cameras: ["/scene/camera1"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/scene/camera1"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-63.image b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-63.image new file mode 100644 index 000000000..ba4884437 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-63.image @@ -0,0 +1 @@ +640x360 16spp clamp-off 52a1a46f3a46d230 diff --git a/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-64.digest b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-64.digest new file mode 100644 index 000000000..0e859a952 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-64.digest @@ -0,0 +1,40 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/scene/camera1") +camera: Camera { origin: Vec3A(0.0074343784, 1.9913422, 4.0133057), lower_left_corner: Vec3A(-8.881443, -3.0086517, -0.98669434), horizontal: Vec3A(17.777756, 0.0, 0.0), vertical: Vec3A(0.0, 9.999988, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: Some(Vec4(0.0, 0.0, -1.0, 3.9133058)), far: Some(Vec4(0.0, 0.0, 1.0, 9995.986)), planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: None +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 640, height: 360, region: PixelRect { x0: 0, y0: 0, x1: 640, y1: 360 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 12.700017, aperture: [25.4, 25.4], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 5.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/cornellbox.usda"], invisible_overrides: Some(0) } +layer: $DIR/cornellbox.usda +warning: Warning { code: AssetUnsupportedByHost, kind: Skipped, count: 1, prims: [], message: "No asset loader: environment map $DIR/sky_gradient.exr ignored — the dome falls back to its uniform colour. Use Scene::from_usd_with_assets to supply one." } +warning: Warning { code: MaterialFallbackDefault, kind: Skipped, count: 1, prims: ["/scene/Looks/initialShadingGroup"], message: "Material /scene/Looks/initialShadingGroup has no surface shader — using default grey OpenPBR" } +lights: 1 +light 0: dome name Some("/scene/Sky") lpe None pmf 1.0 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 5 geometries, PrimitiveBreakdown { triangles: 822, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 2 } top level, PrimitiveBreakdown { triangles: 1582, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 2 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 4.0 motion [] pieces all=10:88b22fc3345d5b05 camera=10:88b22fc3345d5b05 shadow=10:88b22fc3345d5b05 indirect=10:88b22fc3345d5b05 +geom 1: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.2 motion [] pieces all=760:c2b60a75c52c78b9 camera=760:c2b60a75c52c78b9 shadow=760:c2b60a75c52c78b9 indirect=760:c2b60a75c52c78b9 +geom 2: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=12:94a297badef437e1 camera=12:94a297badef437e1 shadow=12:94a297badef437e1 indirect=12:94a297badef437e1 +geom 3: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.25 motion [] pieces all=800:4a8c9f44d777e131 camera=800:4a8c9f44d777e131 shadow=800:4a8c9f44d777e131 indirect=800:4a8c9f44d777e131 +geom 4: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.3585339 motion [] pieces all=760:2344ecf63e12c441 camera=760:2344ecf63e12c441 shadow=760:2344ecf63e12c441 indirect=760:2344ecf63e12c441 +provenance material /scene/Looks/initialShadingGroup: MaterialOrigin { slots: [0, 1, 2, 3, 4], displaced: false } +provenance light /scene/Sky: LightOrigin { index: 0, geoms: 0..0 } +provenance geometry 0..1: /scene/pCube1 +provenance geometry 1..2: /scene/pSphere1 +provenance geometry 2..3: /scene/pCube2 +provenance geometry 3..4: /scene/pTorus1 +provenance geometry 4..5: /scene/pSphere2 +provenance mesh: MeshOrigin { geom_id: 0, slot: 0, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 1, slot: 1, baked: false, moving: false } +provenance mesh: MeshOrigin { geom_id: 2, slot: 2, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 3, slot: 3, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 4, slot: 1, baked: false, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 12343188411137242430, n_points: 8, n_indices: 20, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 1: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 17119738035130870988, n_points: 382, n_indices: 1560, n_uvs: None, smooth: false, material: 0 }), placements: 2, shared: false, displaced: false } +provenance mesh slot 2: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 1739488954094729910, n_points: 8, n_indices: 24, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 3: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 6096447469814747168, n_points: 400, n_indices: 1600, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/scene/camera1"), cameras: ["/scene/camera1"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/scene/camera1"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-64.image b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-64.image new file mode 100644 index 000000000..ba4884437 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-64.image @@ -0,0 +1 @@ +640x360 16spp clamp-off 52a1a46f3a46d230 diff --git a/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-65.digest b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-65.digest new file mode 100644 index 000000000..0e859a952 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-65.digest @@ -0,0 +1,40 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/scene/camera1") +camera: Camera { origin: Vec3A(0.0074343784, 1.9913422, 4.0133057), lower_left_corner: Vec3A(-8.881443, -3.0086517, -0.98669434), horizontal: Vec3A(17.777756, 0.0, 0.0), vertical: Vec3A(0.0, 9.999988, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: Some(Vec4(0.0, 0.0, -1.0, 3.9133058)), far: Some(Vec4(0.0, 0.0, 1.0, 9995.986)), planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: None +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 640, height: 360, region: PixelRect { x0: 0, y0: 0, x1: 640, y1: 360 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 12.700017, aperture: [25.4, 25.4], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 5.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/cornellbox.usda"], invisible_overrides: Some(0) } +layer: $DIR/cornellbox.usda +warning: Warning { code: AssetUnsupportedByHost, kind: Skipped, count: 1, prims: [], message: "No asset loader: environment map $DIR/sky_gradient.exr ignored — the dome falls back to its uniform colour. Use Scene::from_usd_with_assets to supply one." } +warning: Warning { code: MaterialFallbackDefault, kind: Skipped, count: 1, prims: ["/scene/Looks/initialShadingGroup"], message: "Material /scene/Looks/initialShadingGroup has no surface shader — using default grey OpenPBR" } +lights: 1 +light 0: dome name Some("/scene/Sky") lpe None pmf 1.0 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 5 geometries, PrimitiveBreakdown { triangles: 822, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 2 } top level, PrimitiveBreakdown { triangles: 1582, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 2 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 4.0 motion [] pieces all=10:88b22fc3345d5b05 camera=10:88b22fc3345d5b05 shadow=10:88b22fc3345d5b05 indirect=10:88b22fc3345d5b05 +geom 1: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.2 motion [] pieces all=760:c2b60a75c52c78b9 camera=760:c2b60a75c52c78b9 shadow=760:c2b60a75c52c78b9 indirect=760:c2b60a75c52c78b9 +geom 2: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=12:94a297badef437e1 camera=12:94a297badef437e1 shadow=12:94a297badef437e1 indirect=12:94a297badef437e1 +geom 3: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.25 motion [] pieces all=800:4a8c9f44d777e131 camera=800:4a8c9f44d777e131 shadow=800:4a8c9f44d777e131 indirect=800:4a8c9f44d777e131 +geom 4: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.3585339 motion [] pieces all=760:2344ecf63e12c441 camera=760:2344ecf63e12c441 shadow=760:2344ecf63e12c441 indirect=760:2344ecf63e12c441 +provenance material /scene/Looks/initialShadingGroup: MaterialOrigin { slots: [0, 1, 2, 3, 4], displaced: false } +provenance light /scene/Sky: LightOrigin { index: 0, geoms: 0..0 } +provenance geometry 0..1: /scene/pCube1 +provenance geometry 1..2: /scene/pSphere1 +provenance geometry 2..3: /scene/pCube2 +provenance geometry 3..4: /scene/pTorus1 +provenance geometry 4..5: /scene/pSphere2 +provenance mesh: MeshOrigin { geom_id: 0, slot: 0, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 1, slot: 1, baked: false, moving: false } +provenance mesh: MeshOrigin { geom_id: 2, slot: 2, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 3, slot: 3, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 4, slot: 1, baked: false, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 12343188411137242430, n_points: 8, n_indices: 20, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 1: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 17119738035130870988, n_points: 382, n_indices: 1560, n_uvs: None, smooth: false, material: 0 }), placements: 2, shared: false, displaced: false } +provenance mesh slot 2: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 1739488954094729910, n_points: 8, n_indices: 24, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 3: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 6096447469814747168, n_points: 400, n_indices: 1600, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/scene/camera1"), cameras: ["/scene/camera1"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/scene/camera1"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-65.image b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-65.image new file mode 100644 index 000000000..ba4884437 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-65.image @@ -0,0 +1 @@ +640x360 16spp clamp-off 52a1a46f3a46d230 diff --git a/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-66.digest b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-66.digest new file mode 100644 index 000000000..0e859a952 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-66.digest @@ -0,0 +1,40 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/scene/camera1") +camera: Camera { origin: Vec3A(0.0074343784, 1.9913422, 4.0133057), lower_left_corner: Vec3A(-8.881443, -3.0086517, -0.98669434), horizontal: Vec3A(17.777756, 0.0, 0.0), vertical: Vec3A(0.0, 9.999988, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: Some(Vec4(0.0, 0.0, -1.0, 3.9133058)), far: Some(Vec4(0.0, 0.0, 1.0, 9995.986)), planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: None +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 640, height: 360, region: PixelRect { x0: 0, y0: 0, x1: 640, y1: 360 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 12.700017, aperture: [25.4, 25.4], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 5.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/cornellbox.usda"], invisible_overrides: Some(0) } +layer: $DIR/cornellbox.usda +warning: Warning { code: AssetUnsupportedByHost, kind: Skipped, count: 1, prims: [], message: "No asset loader: environment map $DIR/sky_gradient.exr ignored — the dome falls back to its uniform colour. Use Scene::from_usd_with_assets to supply one." } +warning: Warning { code: MaterialFallbackDefault, kind: Skipped, count: 1, prims: ["/scene/Looks/initialShadingGroup"], message: "Material /scene/Looks/initialShadingGroup has no surface shader — using default grey OpenPBR" } +lights: 1 +light 0: dome name Some("/scene/Sky") lpe None pmf 1.0 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 5 geometries, PrimitiveBreakdown { triangles: 822, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 2 } top level, PrimitiveBreakdown { triangles: 1582, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 2 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 4.0 motion [] pieces all=10:88b22fc3345d5b05 camera=10:88b22fc3345d5b05 shadow=10:88b22fc3345d5b05 indirect=10:88b22fc3345d5b05 +geom 1: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.2 motion [] pieces all=760:c2b60a75c52c78b9 camera=760:c2b60a75c52c78b9 shadow=760:c2b60a75c52c78b9 indirect=760:c2b60a75c52c78b9 +geom 2: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=12:94a297badef437e1 camera=12:94a297badef437e1 shadow=12:94a297badef437e1 indirect=12:94a297badef437e1 +geom 3: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.25 motion [] pieces all=800:4a8c9f44d777e131 camera=800:4a8c9f44d777e131 shadow=800:4a8c9f44d777e131 indirect=800:4a8c9f44d777e131 +geom 4: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.3585339 motion [] pieces all=760:2344ecf63e12c441 camera=760:2344ecf63e12c441 shadow=760:2344ecf63e12c441 indirect=760:2344ecf63e12c441 +provenance material /scene/Looks/initialShadingGroup: MaterialOrigin { slots: [0, 1, 2, 3, 4], displaced: false } +provenance light /scene/Sky: LightOrigin { index: 0, geoms: 0..0 } +provenance geometry 0..1: /scene/pCube1 +provenance geometry 1..2: /scene/pSphere1 +provenance geometry 2..3: /scene/pCube2 +provenance geometry 3..4: /scene/pTorus1 +provenance geometry 4..5: /scene/pSphere2 +provenance mesh: MeshOrigin { geom_id: 0, slot: 0, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 1, slot: 1, baked: false, moving: false } +provenance mesh: MeshOrigin { geom_id: 2, slot: 2, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 3, slot: 3, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 4, slot: 1, baked: false, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 12343188411137242430, n_points: 8, n_indices: 20, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 1: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 17119738035130870988, n_points: 382, n_indices: 1560, n_uvs: None, smooth: false, material: 0 }), placements: 2, shared: false, displaced: false } +provenance mesh slot 2: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 1739488954094729910, n_points: 8, n_indices: 24, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 3: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 6096447469814747168, n_points: 400, n_indices: 1600, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/scene/camera1"), cameras: ["/scene/camera1"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/scene/camera1"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-66.image b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-66.image new file mode 100644 index 000000000..ba4884437 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-66.image @@ -0,0 +1 @@ +640x360 16spp clamp-off 52a1a46f3a46d230 diff --git a/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-67.digest b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-67.digest new file mode 100644 index 000000000..0e859a952 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-67.digest @@ -0,0 +1,40 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/scene/camera1") +camera: Camera { origin: Vec3A(0.0074343784, 1.9913422, 4.0133057), lower_left_corner: Vec3A(-8.881443, -3.0086517, -0.98669434), horizontal: Vec3A(17.777756, 0.0, 0.0), vertical: Vec3A(0.0, 9.999988, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: Some(Vec4(0.0, 0.0, -1.0, 3.9133058)), far: Some(Vec4(0.0, 0.0, 1.0, 9995.986)), planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: None +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 640, height: 360, region: PixelRect { x0: 0, y0: 0, x1: 640, y1: 360 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 12.700017, aperture: [25.4, 25.4], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 5.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/cornellbox.usda"], invisible_overrides: Some(0) } +layer: $DIR/cornellbox.usda +warning: Warning { code: AssetUnsupportedByHost, kind: Skipped, count: 1, prims: [], message: "No asset loader: environment map $DIR/sky_gradient.exr ignored — the dome falls back to its uniform colour. Use Scene::from_usd_with_assets to supply one." } +warning: Warning { code: MaterialFallbackDefault, kind: Skipped, count: 1, prims: ["/scene/Looks/initialShadingGroup"], message: "Material /scene/Looks/initialShadingGroup has no surface shader — using default grey OpenPBR" } +lights: 1 +light 0: dome name Some("/scene/Sky") lpe None pmf 1.0 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 5 geometries, PrimitiveBreakdown { triangles: 822, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 2 } top level, PrimitiveBreakdown { triangles: 1582, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 2 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 4.0 motion [] pieces all=10:88b22fc3345d5b05 camera=10:88b22fc3345d5b05 shadow=10:88b22fc3345d5b05 indirect=10:88b22fc3345d5b05 +geom 1: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.2 motion [] pieces all=760:c2b60a75c52c78b9 camera=760:c2b60a75c52c78b9 shadow=760:c2b60a75c52c78b9 indirect=760:c2b60a75c52c78b9 +geom 2: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=12:94a297badef437e1 camera=12:94a297badef437e1 shadow=12:94a297badef437e1 indirect=12:94a297badef437e1 +geom 3: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.25 motion [] pieces all=800:4a8c9f44d777e131 camera=800:4a8c9f44d777e131 shadow=800:4a8c9f44d777e131 indirect=800:4a8c9f44d777e131 +geom 4: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.3585339 motion [] pieces all=760:2344ecf63e12c441 camera=760:2344ecf63e12c441 shadow=760:2344ecf63e12c441 indirect=760:2344ecf63e12c441 +provenance material /scene/Looks/initialShadingGroup: MaterialOrigin { slots: [0, 1, 2, 3, 4], displaced: false } +provenance light /scene/Sky: LightOrigin { index: 0, geoms: 0..0 } +provenance geometry 0..1: /scene/pCube1 +provenance geometry 1..2: /scene/pSphere1 +provenance geometry 2..3: /scene/pCube2 +provenance geometry 3..4: /scene/pTorus1 +provenance geometry 4..5: /scene/pSphere2 +provenance mesh: MeshOrigin { geom_id: 0, slot: 0, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 1, slot: 1, baked: false, moving: false } +provenance mesh: MeshOrigin { geom_id: 2, slot: 2, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 3, slot: 3, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 4, slot: 1, baked: false, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 12343188411137242430, n_points: 8, n_indices: 20, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 1: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 17119738035130870988, n_points: 382, n_indices: 1560, n_uvs: None, smooth: false, material: 0 }), placements: 2, shared: false, displaced: false } +provenance mesh slot 2: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 1739488954094729910, n_points: 8, n_indices: 24, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 3: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 6096447469814747168, n_points: 400, n_indices: 1600, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/scene/camera1"), cameras: ["/scene/camera1"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/scene/camera1"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-67.image b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-67.image new file mode 100644 index 000000000..ba4884437 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-67.image @@ -0,0 +1 @@ +640x360 16spp clamp-off 52a1a46f3a46d230 diff --git a/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-68.digest b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-68.digest new file mode 100644 index 000000000..0e859a952 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-68.digest @@ -0,0 +1,40 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/scene/camera1") +camera: Camera { origin: Vec3A(0.0074343784, 1.9913422, 4.0133057), lower_left_corner: Vec3A(-8.881443, -3.0086517, -0.98669434), horizontal: Vec3A(17.777756, 0.0, 0.0), vertical: Vec3A(0.0, 9.999988, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: Some(Vec4(0.0, 0.0, -1.0, 3.9133058)), far: Some(Vec4(0.0, 0.0, 1.0, 9995.986)), planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: None +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 640, height: 360, region: PixelRect { x0: 0, y0: 0, x1: 640, y1: 360 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 12.700017, aperture: [25.4, 25.4], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 5.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/cornellbox.usda"], invisible_overrides: Some(0) } +layer: $DIR/cornellbox.usda +warning: Warning { code: AssetUnsupportedByHost, kind: Skipped, count: 1, prims: [], message: "No asset loader: environment map $DIR/sky_gradient.exr ignored — the dome falls back to its uniform colour. Use Scene::from_usd_with_assets to supply one." } +warning: Warning { code: MaterialFallbackDefault, kind: Skipped, count: 1, prims: ["/scene/Looks/initialShadingGroup"], message: "Material /scene/Looks/initialShadingGroup has no surface shader — using default grey OpenPBR" } +lights: 1 +light 0: dome name Some("/scene/Sky") lpe None pmf 1.0 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 5 geometries, PrimitiveBreakdown { triangles: 822, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 2 } top level, PrimitiveBreakdown { triangles: 1582, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 2 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 4.0 motion [] pieces all=10:88b22fc3345d5b05 camera=10:88b22fc3345d5b05 shadow=10:88b22fc3345d5b05 indirect=10:88b22fc3345d5b05 +geom 1: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.2 motion [] pieces all=760:c2b60a75c52c78b9 camera=760:c2b60a75c52c78b9 shadow=760:c2b60a75c52c78b9 indirect=760:c2b60a75c52c78b9 +geom 2: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=12:94a297badef437e1 camera=12:94a297badef437e1 shadow=12:94a297badef437e1 indirect=12:94a297badef437e1 +geom 3: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.25 motion [] pieces all=800:4a8c9f44d777e131 camera=800:4a8c9f44d777e131 shadow=800:4a8c9f44d777e131 indirect=800:4a8c9f44d777e131 +geom 4: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.3585339 motion [] pieces all=760:2344ecf63e12c441 camera=760:2344ecf63e12c441 shadow=760:2344ecf63e12c441 indirect=760:2344ecf63e12c441 +provenance material /scene/Looks/initialShadingGroup: MaterialOrigin { slots: [0, 1, 2, 3, 4], displaced: false } +provenance light /scene/Sky: LightOrigin { index: 0, geoms: 0..0 } +provenance geometry 0..1: /scene/pCube1 +provenance geometry 1..2: /scene/pSphere1 +provenance geometry 2..3: /scene/pCube2 +provenance geometry 3..4: /scene/pTorus1 +provenance geometry 4..5: /scene/pSphere2 +provenance mesh: MeshOrigin { geom_id: 0, slot: 0, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 1, slot: 1, baked: false, moving: false } +provenance mesh: MeshOrigin { geom_id: 2, slot: 2, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 3, slot: 3, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 4, slot: 1, baked: false, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 12343188411137242430, n_points: 8, n_indices: 20, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 1: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 17119738035130870988, n_points: 382, n_indices: 1560, n_uvs: None, smooth: false, material: 0 }), placements: 2, shared: false, displaced: false } +provenance mesh slot 2: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 1739488954094729910, n_points: 8, n_indices: 24, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 3: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 6096447469814747168, n_points: 400, n_indices: 1600, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/scene/camera1"), cameras: ["/scene/camera1"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/scene/camera1"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-68.image b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-68.image new file mode 100644 index 000000000..ba4884437 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-68.image @@ -0,0 +1 @@ +640x360 16spp clamp-off 52a1a46f3a46d230 diff --git a/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-69.digest b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-69.digest new file mode 100644 index 000000000..0e859a952 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-69.digest @@ -0,0 +1,40 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/scene/camera1") +camera: Camera { origin: Vec3A(0.0074343784, 1.9913422, 4.0133057), lower_left_corner: Vec3A(-8.881443, -3.0086517, -0.98669434), horizontal: Vec3A(17.777756, 0.0, 0.0), vertical: Vec3A(0.0, 9.999988, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: Some(Vec4(0.0, 0.0, -1.0, 3.9133058)), far: Some(Vec4(0.0, 0.0, 1.0, 9995.986)), planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: None +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 640, height: 360, region: PixelRect { x0: 0, y0: 0, x1: 640, y1: 360 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 12.700017, aperture: [25.4, 25.4], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 5.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/cornellbox.usda"], invisible_overrides: Some(0) } +layer: $DIR/cornellbox.usda +warning: Warning { code: AssetUnsupportedByHost, kind: Skipped, count: 1, prims: [], message: "No asset loader: environment map $DIR/sky_gradient.exr ignored — the dome falls back to its uniform colour. Use Scene::from_usd_with_assets to supply one." } +warning: Warning { code: MaterialFallbackDefault, kind: Skipped, count: 1, prims: ["/scene/Looks/initialShadingGroup"], message: "Material /scene/Looks/initialShadingGroup has no surface shader — using default grey OpenPBR" } +lights: 1 +light 0: dome name Some("/scene/Sky") lpe None pmf 1.0 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 5 geometries, PrimitiveBreakdown { triangles: 822, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 2 } top level, PrimitiveBreakdown { triangles: 1582, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 2 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 4.0 motion [] pieces all=10:88b22fc3345d5b05 camera=10:88b22fc3345d5b05 shadow=10:88b22fc3345d5b05 indirect=10:88b22fc3345d5b05 +geom 1: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.2 motion [] pieces all=760:c2b60a75c52c78b9 camera=760:c2b60a75c52c78b9 shadow=760:c2b60a75c52c78b9 indirect=760:c2b60a75c52c78b9 +geom 2: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=12:94a297badef437e1 camera=12:94a297badef437e1 shadow=12:94a297badef437e1 indirect=12:94a297badef437e1 +geom 3: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.25 motion [] pieces all=800:4a8c9f44d777e131 camera=800:4a8c9f44d777e131 shadow=800:4a8c9f44d777e131 indirect=800:4a8c9f44d777e131 +geom 4: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.3585339 motion [] pieces all=760:2344ecf63e12c441 camera=760:2344ecf63e12c441 shadow=760:2344ecf63e12c441 indirect=760:2344ecf63e12c441 +provenance material /scene/Looks/initialShadingGroup: MaterialOrigin { slots: [0, 1, 2, 3, 4], displaced: false } +provenance light /scene/Sky: LightOrigin { index: 0, geoms: 0..0 } +provenance geometry 0..1: /scene/pCube1 +provenance geometry 1..2: /scene/pSphere1 +provenance geometry 2..3: /scene/pCube2 +provenance geometry 3..4: /scene/pTorus1 +provenance geometry 4..5: /scene/pSphere2 +provenance mesh: MeshOrigin { geom_id: 0, slot: 0, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 1, slot: 1, baked: false, moving: false } +provenance mesh: MeshOrigin { geom_id: 2, slot: 2, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 3, slot: 3, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 4, slot: 1, baked: false, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 12343188411137242430, n_points: 8, n_indices: 20, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 1: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 17119738035130870988, n_points: 382, n_indices: 1560, n_uvs: None, smooth: false, material: 0 }), placements: 2, shared: false, displaced: false } +provenance mesh slot 2: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 1739488954094729910, n_points: 8, n_indices: 24, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 3: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 6096447469814747168, n_points: 400, n_indices: 1600, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/scene/camera1"), cameras: ["/scene/camera1"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/scene/camera1"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-69.image b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-69.image new file mode 100644 index 000000000..ba4884437 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-69.image @@ -0,0 +1 @@ +640x360 16spp clamp-off 52a1a46f3a46d230 diff --git a/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-7.digest b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-7.digest new file mode 100644 index 000000000..0e859a952 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-7.digest @@ -0,0 +1,40 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/scene/camera1") +camera: Camera { origin: Vec3A(0.0074343784, 1.9913422, 4.0133057), lower_left_corner: Vec3A(-8.881443, -3.0086517, -0.98669434), horizontal: Vec3A(17.777756, 0.0, 0.0), vertical: Vec3A(0.0, 9.999988, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: Some(Vec4(0.0, 0.0, -1.0, 3.9133058)), far: Some(Vec4(0.0, 0.0, 1.0, 9995.986)), planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: None +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 640, height: 360, region: PixelRect { x0: 0, y0: 0, x1: 640, y1: 360 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 12.700017, aperture: [25.4, 25.4], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 5.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/cornellbox.usda"], invisible_overrides: Some(0) } +layer: $DIR/cornellbox.usda +warning: Warning { code: AssetUnsupportedByHost, kind: Skipped, count: 1, prims: [], message: "No asset loader: environment map $DIR/sky_gradient.exr ignored — the dome falls back to its uniform colour. Use Scene::from_usd_with_assets to supply one." } +warning: Warning { code: MaterialFallbackDefault, kind: Skipped, count: 1, prims: ["/scene/Looks/initialShadingGroup"], message: "Material /scene/Looks/initialShadingGroup has no surface shader — using default grey OpenPBR" } +lights: 1 +light 0: dome name Some("/scene/Sky") lpe None pmf 1.0 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 5 geometries, PrimitiveBreakdown { triangles: 822, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 2 } top level, PrimitiveBreakdown { triangles: 1582, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 2 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 4.0 motion [] pieces all=10:88b22fc3345d5b05 camera=10:88b22fc3345d5b05 shadow=10:88b22fc3345d5b05 indirect=10:88b22fc3345d5b05 +geom 1: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.2 motion [] pieces all=760:c2b60a75c52c78b9 camera=760:c2b60a75c52c78b9 shadow=760:c2b60a75c52c78b9 indirect=760:c2b60a75c52c78b9 +geom 2: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=12:94a297badef437e1 camera=12:94a297badef437e1 shadow=12:94a297badef437e1 indirect=12:94a297badef437e1 +geom 3: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.25 motion [] pieces all=800:4a8c9f44d777e131 camera=800:4a8c9f44d777e131 shadow=800:4a8c9f44d777e131 indirect=800:4a8c9f44d777e131 +geom 4: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.3585339 motion [] pieces all=760:2344ecf63e12c441 camera=760:2344ecf63e12c441 shadow=760:2344ecf63e12c441 indirect=760:2344ecf63e12c441 +provenance material /scene/Looks/initialShadingGroup: MaterialOrigin { slots: [0, 1, 2, 3, 4], displaced: false } +provenance light /scene/Sky: LightOrigin { index: 0, geoms: 0..0 } +provenance geometry 0..1: /scene/pCube1 +provenance geometry 1..2: /scene/pSphere1 +provenance geometry 2..3: /scene/pCube2 +provenance geometry 3..4: /scene/pTorus1 +provenance geometry 4..5: /scene/pSphere2 +provenance mesh: MeshOrigin { geom_id: 0, slot: 0, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 1, slot: 1, baked: false, moving: false } +provenance mesh: MeshOrigin { geom_id: 2, slot: 2, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 3, slot: 3, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 4, slot: 1, baked: false, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 12343188411137242430, n_points: 8, n_indices: 20, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 1: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 17119738035130870988, n_points: 382, n_indices: 1560, n_uvs: None, smooth: false, material: 0 }), placements: 2, shared: false, displaced: false } +provenance mesh slot 2: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 1739488954094729910, n_points: 8, n_indices: 24, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 3: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 6096447469814747168, n_points: 400, n_indices: 1600, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/scene/camera1"), cameras: ["/scene/camera1"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/scene/camera1"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-7.image b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-7.image new file mode 100644 index 000000000..ba4884437 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-7.image @@ -0,0 +1 @@ +640x360 16spp clamp-off 52a1a46f3a46d230 diff --git a/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-70.digest b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-70.digest new file mode 100644 index 000000000..0e859a952 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-70.digest @@ -0,0 +1,40 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/scene/camera1") +camera: Camera { origin: Vec3A(0.0074343784, 1.9913422, 4.0133057), lower_left_corner: Vec3A(-8.881443, -3.0086517, -0.98669434), horizontal: Vec3A(17.777756, 0.0, 0.0), vertical: Vec3A(0.0, 9.999988, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: Some(Vec4(0.0, 0.0, -1.0, 3.9133058)), far: Some(Vec4(0.0, 0.0, 1.0, 9995.986)), planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: None +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 640, height: 360, region: PixelRect { x0: 0, y0: 0, x1: 640, y1: 360 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 12.700017, aperture: [25.4, 25.4], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 5.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/cornellbox.usda"], invisible_overrides: Some(0) } +layer: $DIR/cornellbox.usda +warning: Warning { code: AssetUnsupportedByHost, kind: Skipped, count: 1, prims: [], message: "No asset loader: environment map $DIR/sky_gradient.exr ignored — the dome falls back to its uniform colour. Use Scene::from_usd_with_assets to supply one." } +warning: Warning { code: MaterialFallbackDefault, kind: Skipped, count: 1, prims: ["/scene/Looks/initialShadingGroup"], message: "Material /scene/Looks/initialShadingGroup has no surface shader — using default grey OpenPBR" } +lights: 1 +light 0: dome name Some("/scene/Sky") lpe None pmf 1.0 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 5 geometries, PrimitiveBreakdown { triangles: 822, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 2 } top level, PrimitiveBreakdown { triangles: 1582, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 2 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 4.0 motion [] pieces all=10:88b22fc3345d5b05 camera=10:88b22fc3345d5b05 shadow=10:88b22fc3345d5b05 indirect=10:88b22fc3345d5b05 +geom 1: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.2 motion [] pieces all=760:c2b60a75c52c78b9 camera=760:c2b60a75c52c78b9 shadow=760:c2b60a75c52c78b9 indirect=760:c2b60a75c52c78b9 +geom 2: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=12:94a297badef437e1 camera=12:94a297badef437e1 shadow=12:94a297badef437e1 indirect=12:94a297badef437e1 +geom 3: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.25 motion [] pieces all=800:4a8c9f44d777e131 camera=800:4a8c9f44d777e131 shadow=800:4a8c9f44d777e131 indirect=800:4a8c9f44d777e131 +geom 4: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.3585339 motion [] pieces all=760:2344ecf63e12c441 camera=760:2344ecf63e12c441 shadow=760:2344ecf63e12c441 indirect=760:2344ecf63e12c441 +provenance material /scene/Looks/initialShadingGroup: MaterialOrigin { slots: [0, 1, 2, 3, 4], displaced: false } +provenance light /scene/Sky: LightOrigin { index: 0, geoms: 0..0 } +provenance geometry 0..1: /scene/pCube1 +provenance geometry 1..2: /scene/pSphere1 +provenance geometry 2..3: /scene/pCube2 +provenance geometry 3..4: /scene/pTorus1 +provenance geometry 4..5: /scene/pSphere2 +provenance mesh: MeshOrigin { geom_id: 0, slot: 0, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 1, slot: 1, baked: false, moving: false } +provenance mesh: MeshOrigin { geom_id: 2, slot: 2, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 3, slot: 3, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 4, slot: 1, baked: false, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 12343188411137242430, n_points: 8, n_indices: 20, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 1: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 17119738035130870988, n_points: 382, n_indices: 1560, n_uvs: None, smooth: false, material: 0 }), placements: 2, shared: false, displaced: false } +provenance mesh slot 2: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 1739488954094729910, n_points: 8, n_indices: 24, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 3: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 6096447469814747168, n_points: 400, n_indices: 1600, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/scene/camera1"), cameras: ["/scene/camera1"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/scene/camera1"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-70.image b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-70.image new file mode 100644 index 000000000..ba4884437 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-70.image @@ -0,0 +1 @@ +640x360 16spp clamp-off 52a1a46f3a46d230 diff --git a/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-71.digest b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-71.digest new file mode 100644 index 000000000..0e859a952 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-71.digest @@ -0,0 +1,40 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/scene/camera1") +camera: Camera { origin: Vec3A(0.0074343784, 1.9913422, 4.0133057), lower_left_corner: Vec3A(-8.881443, -3.0086517, -0.98669434), horizontal: Vec3A(17.777756, 0.0, 0.0), vertical: Vec3A(0.0, 9.999988, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: Some(Vec4(0.0, 0.0, -1.0, 3.9133058)), far: Some(Vec4(0.0, 0.0, 1.0, 9995.986)), planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: None +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 640, height: 360, region: PixelRect { x0: 0, y0: 0, x1: 640, y1: 360 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 12.700017, aperture: [25.4, 25.4], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 5.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/cornellbox.usda"], invisible_overrides: Some(0) } +layer: $DIR/cornellbox.usda +warning: Warning { code: AssetUnsupportedByHost, kind: Skipped, count: 1, prims: [], message: "No asset loader: environment map $DIR/sky_gradient.exr ignored — the dome falls back to its uniform colour. Use Scene::from_usd_with_assets to supply one." } +warning: Warning { code: MaterialFallbackDefault, kind: Skipped, count: 1, prims: ["/scene/Looks/initialShadingGroup"], message: "Material /scene/Looks/initialShadingGroup has no surface shader — using default grey OpenPBR" } +lights: 1 +light 0: dome name Some("/scene/Sky") lpe None pmf 1.0 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 5 geometries, PrimitiveBreakdown { triangles: 822, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 2 } top level, PrimitiveBreakdown { triangles: 1582, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 2 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 4.0 motion [] pieces all=10:88b22fc3345d5b05 camera=10:88b22fc3345d5b05 shadow=10:88b22fc3345d5b05 indirect=10:88b22fc3345d5b05 +geom 1: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.2 motion [] pieces all=760:c2b60a75c52c78b9 camera=760:c2b60a75c52c78b9 shadow=760:c2b60a75c52c78b9 indirect=760:c2b60a75c52c78b9 +geom 2: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=12:94a297badef437e1 camera=12:94a297badef437e1 shadow=12:94a297badef437e1 indirect=12:94a297badef437e1 +geom 3: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.25 motion [] pieces all=800:4a8c9f44d777e131 camera=800:4a8c9f44d777e131 shadow=800:4a8c9f44d777e131 indirect=800:4a8c9f44d777e131 +geom 4: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.3585339 motion [] pieces all=760:2344ecf63e12c441 camera=760:2344ecf63e12c441 shadow=760:2344ecf63e12c441 indirect=760:2344ecf63e12c441 +provenance material /scene/Looks/initialShadingGroup: MaterialOrigin { slots: [0, 1, 2, 3, 4], displaced: false } +provenance light /scene/Sky: LightOrigin { index: 0, geoms: 0..0 } +provenance geometry 0..1: /scene/pCube1 +provenance geometry 1..2: /scene/pSphere1 +provenance geometry 2..3: /scene/pCube2 +provenance geometry 3..4: /scene/pTorus1 +provenance geometry 4..5: /scene/pSphere2 +provenance mesh: MeshOrigin { geom_id: 0, slot: 0, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 1, slot: 1, baked: false, moving: false } +provenance mesh: MeshOrigin { geom_id: 2, slot: 2, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 3, slot: 3, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 4, slot: 1, baked: false, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 12343188411137242430, n_points: 8, n_indices: 20, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 1: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 17119738035130870988, n_points: 382, n_indices: 1560, n_uvs: None, smooth: false, material: 0 }), placements: 2, shared: false, displaced: false } +provenance mesh slot 2: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 1739488954094729910, n_points: 8, n_indices: 24, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 3: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 6096447469814747168, n_points: 400, n_indices: 1600, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/scene/camera1"), cameras: ["/scene/camera1"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/scene/camera1"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-71.image b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-71.image new file mode 100644 index 000000000..ba4884437 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-71.image @@ -0,0 +1 @@ +640x360 16spp clamp-off 52a1a46f3a46d230 diff --git a/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-72.digest b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-72.digest new file mode 100644 index 000000000..0e859a952 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-72.digest @@ -0,0 +1,40 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/scene/camera1") +camera: Camera { origin: Vec3A(0.0074343784, 1.9913422, 4.0133057), lower_left_corner: Vec3A(-8.881443, -3.0086517, -0.98669434), horizontal: Vec3A(17.777756, 0.0, 0.0), vertical: Vec3A(0.0, 9.999988, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: Some(Vec4(0.0, 0.0, -1.0, 3.9133058)), far: Some(Vec4(0.0, 0.0, 1.0, 9995.986)), planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: None +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 640, height: 360, region: PixelRect { x0: 0, y0: 0, x1: 640, y1: 360 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 12.700017, aperture: [25.4, 25.4], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 5.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/cornellbox.usda"], invisible_overrides: Some(0) } +layer: $DIR/cornellbox.usda +warning: Warning { code: AssetUnsupportedByHost, kind: Skipped, count: 1, prims: [], message: "No asset loader: environment map $DIR/sky_gradient.exr ignored — the dome falls back to its uniform colour. Use Scene::from_usd_with_assets to supply one." } +warning: Warning { code: MaterialFallbackDefault, kind: Skipped, count: 1, prims: ["/scene/Looks/initialShadingGroup"], message: "Material /scene/Looks/initialShadingGroup has no surface shader — using default grey OpenPBR" } +lights: 1 +light 0: dome name Some("/scene/Sky") lpe None pmf 1.0 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 5 geometries, PrimitiveBreakdown { triangles: 822, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 2 } top level, PrimitiveBreakdown { triangles: 1582, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 2 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 4.0 motion [] pieces all=10:88b22fc3345d5b05 camera=10:88b22fc3345d5b05 shadow=10:88b22fc3345d5b05 indirect=10:88b22fc3345d5b05 +geom 1: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.2 motion [] pieces all=760:c2b60a75c52c78b9 camera=760:c2b60a75c52c78b9 shadow=760:c2b60a75c52c78b9 indirect=760:c2b60a75c52c78b9 +geom 2: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=12:94a297badef437e1 camera=12:94a297badef437e1 shadow=12:94a297badef437e1 indirect=12:94a297badef437e1 +geom 3: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.25 motion [] pieces all=800:4a8c9f44d777e131 camera=800:4a8c9f44d777e131 shadow=800:4a8c9f44d777e131 indirect=800:4a8c9f44d777e131 +geom 4: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.3585339 motion [] pieces all=760:2344ecf63e12c441 camera=760:2344ecf63e12c441 shadow=760:2344ecf63e12c441 indirect=760:2344ecf63e12c441 +provenance material /scene/Looks/initialShadingGroup: MaterialOrigin { slots: [0, 1, 2, 3, 4], displaced: false } +provenance light /scene/Sky: LightOrigin { index: 0, geoms: 0..0 } +provenance geometry 0..1: /scene/pCube1 +provenance geometry 1..2: /scene/pSphere1 +provenance geometry 2..3: /scene/pCube2 +provenance geometry 3..4: /scene/pTorus1 +provenance geometry 4..5: /scene/pSphere2 +provenance mesh: MeshOrigin { geom_id: 0, slot: 0, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 1, slot: 1, baked: false, moving: false } +provenance mesh: MeshOrigin { geom_id: 2, slot: 2, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 3, slot: 3, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 4, slot: 1, baked: false, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 12343188411137242430, n_points: 8, n_indices: 20, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 1: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 17119738035130870988, n_points: 382, n_indices: 1560, n_uvs: None, smooth: false, material: 0 }), placements: 2, shared: false, displaced: false } +provenance mesh slot 2: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 1739488954094729910, n_points: 8, n_indices: 24, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 3: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 6096447469814747168, n_points: 400, n_indices: 1600, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/scene/camera1"), cameras: ["/scene/camera1"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/scene/camera1"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-72.image b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-72.image new file mode 100644 index 000000000..ba4884437 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-72.image @@ -0,0 +1 @@ +640x360 16spp clamp-off 52a1a46f3a46d230 diff --git a/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-73.digest b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-73.digest new file mode 100644 index 000000000..0e859a952 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-73.digest @@ -0,0 +1,40 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/scene/camera1") +camera: Camera { origin: Vec3A(0.0074343784, 1.9913422, 4.0133057), lower_left_corner: Vec3A(-8.881443, -3.0086517, -0.98669434), horizontal: Vec3A(17.777756, 0.0, 0.0), vertical: Vec3A(0.0, 9.999988, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: Some(Vec4(0.0, 0.0, -1.0, 3.9133058)), far: Some(Vec4(0.0, 0.0, 1.0, 9995.986)), planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: None +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 640, height: 360, region: PixelRect { x0: 0, y0: 0, x1: 640, y1: 360 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 12.700017, aperture: [25.4, 25.4], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 5.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/cornellbox.usda"], invisible_overrides: Some(0) } +layer: $DIR/cornellbox.usda +warning: Warning { code: AssetUnsupportedByHost, kind: Skipped, count: 1, prims: [], message: "No asset loader: environment map $DIR/sky_gradient.exr ignored — the dome falls back to its uniform colour. Use Scene::from_usd_with_assets to supply one." } +warning: Warning { code: MaterialFallbackDefault, kind: Skipped, count: 1, prims: ["/scene/Looks/initialShadingGroup"], message: "Material /scene/Looks/initialShadingGroup has no surface shader — using default grey OpenPBR" } +lights: 1 +light 0: dome name Some("/scene/Sky") lpe None pmf 1.0 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 5 geometries, PrimitiveBreakdown { triangles: 822, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 2 } top level, PrimitiveBreakdown { triangles: 1582, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 2 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 4.0 motion [] pieces all=10:88b22fc3345d5b05 camera=10:88b22fc3345d5b05 shadow=10:88b22fc3345d5b05 indirect=10:88b22fc3345d5b05 +geom 1: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.2 motion [] pieces all=760:c2b60a75c52c78b9 camera=760:c2b60a75c52c78b9 shadow=760:c2b60a75c52c78b9 indirect=760:c2b60a75c52c78b9 +geom 2: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=12:94a297badef437e1 camera=12:94a297badef437e1 shadow=12:94a297badef437e1 indirect=12:94a297badef437e1 +geom 3: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.25 motion [] pieces all=800:4a8c9f44d777e131 camera=800:4a8c9f44d777e131 shadow=800:4a8c9f44d777e131 indirect=800:4a8c9f44d777e131 +geom 4: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.3585339 motion [] pieces all=760:2344ecf63e12c441 camera=760:2344ecf63e12c441 shadow=760:2344ecf63e12c441 indirect=760:2344ecf63e12c441 +provenance material /scene/Looks/initialShadingGroup: MaterialOrigin { slots: [0, 1, 2, 3, 4], displaced: false } +provenance light /scene/Sky: LightOrigin { index: 0, geoms: 0..0 } +provenance geometry 0..1: /scene/pCube1 +provenance geometry 1..2: /scene/pSphere1 +provenance geometry 2..3: /scene/pCube2 +provenance geometry 3..4: /scene/pTorus1 +provenance geometry 4..5: /scene/pSphere2 +provenance mesh: MeshOrigin { geom_id: 0, slot: 0, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 1, slot: 1, baked: false, moving: false } +provenance mesh: MeshOrigin { geom_id: 2, slot: 2, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 3, slot: 3, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 4, slot: 1, baked: false, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 12343188411137242430, n_points: 8, n_indices: 20, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 1: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 17119738035130870988, n_points: 382, n_indices: 1560, n_uvs: None, smooth: false, material: 0 }), placements: 2, shared: false, displaced: false } +provenance mesh slot 2: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 1739488954094729910, n_points: 8, n_indices: 24, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 3: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 6096447469814747168, n_points: 400, n_indices: 1600, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/scene/camera1"), cameras: ["/scene/camera1"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/scene/camera1"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-73.image b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-73.image new file mode 100644 index 000000000..ba4884437 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-73.image @@ -0,0 +1 @@ +640x360 16spp clamp-off 52a1a46f3a46d230 diff --git a/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-74.digest b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-74.digest new file mode 100644 index 000000000..0e859a952 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-74.digest @@ -0,0 +1,40 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/scene/camera1") +camera: Camera { origin: Vec3A(0.0074343784, 1.9913422, 4.0133057), lower_left_corner: Vec3A(-8.881443, -3.0086517, -0.98669434), horizontal: Vec3A(17.777756, 0.0, 0.0), vertical: Vec3A(0.0, 9.999988, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: Some(Vec4(0.0, 0.0, -1.0, 3.9133058)), far: Some(Vec4(0.0, 0.0, 1.0, 9995.986)), planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: None +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 640, height: 360, region: PixelRect { x0: 0, y0: 0, x1: 640, y1: 360 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 12.700017, aperture: [25.4, 25.4], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 5.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/cornellbox.usda"], invisible_overrides: Some(0) } +layer: $DIR/cornellbox.usda +warning: Warning { code: AssetUnsupportedByHost, kind: Skipped, count: 1, prims: [], message: "No asset loader: environment map $DIR/sky_gradient.exr ignored — the dome falls back to its uniform colour. Use Scene::from_usd_with_assets to supply one." } +warning: Warning { code: MaterialFallbackDefault, kind: Skipped, count: 1, prims: ["/scene/Looks/initialShadingGroup"], message: "Material /scene/Looks/initialShadingGroup has no surface shader — using default grey OpenPBR" } +lights: 1 +light 0: dome name Some("/scene/Sky") lpe None pmf 1.0 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 5 geometries, PrimitiveBreakdown { triangles: 822, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 2 } top level, PrimitiveBreakdown { triangles: 1582, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 2 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 4.0 motion [] pieces all=10:88b22fc3345d5b05 camera=10:88b22fc3345d5b05 shadow=10:88b22fc3345d5b05 indirect=10:88b22fc3345d5b05 +geom 1: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.2 motion [] pieces all=760:c2b60a75c52c78b9 camera=760:c2b60a75c52c78b9 shadow=760:c2b60a75c52c78b9 indirect=760:c2b60a75c52c78b9 +geom 2: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=12:94a297badef437e1 camera=12:94a297badef437e1 shadow=12:94a297badef437e1 indirect=12:94a297badef437e1 +geom 3: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.25 motion [] pieces all=800:4a8c9f44d777e131 camera=800:4a8c9f44d777e131 shadow=800:4a8c9f44d777e131 indirect=800:4a8c9f44d777e131 +geom 4: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.3585339 motion [] pieces all=760:2344ecf63e12c441 camera=760:2344ecf63e12c441 shadow=760:2344ecf63e12c441 indirect=760:2344ecf63e12c441 +provenance material /scene/Looks/initialShadingGroup: MaterialOrigin { slots: [0, 1, 2, 3, 4], displaced: false } +provenance light /scene/Sky: LightOrigin { index: 0, geoms: 0..0 } +provenance geometry 0..1: /scene/pCube1 +provenance geometry 1..2: /scene/pSphere1 +provenance geometry 2..3: /scene/pCube2 +provenance geometry 3..4: /scene/pTorus1 +provenance geometry 4..5: /scene/pSphere2 +provenance mesh: MeshOrigin { geom_id: 0, slot: 0, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 1, slot: 1, baked: false, moving: false } +provenance mesh: MeshOrigin { geom_id: 2, slot: 2, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 3, slot: 3, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 4, slot: 1, baked: false, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 12343188411137242430, n_points: 8, n_indices: 20, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 1: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 17119738035130870988, n_points: 382, n_indices: 1560, n_uvs: None, smooth: false, material: 0 }), placements: 2, shared: false, displaced: false } +provenance mesh slot 2: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 1739488954094729910, n_points: 8, n_indices: 24, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 3: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 6096447469814747168, n_points: 400, n_indices: 1600, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/scene/camera1"), cameras: ["/scene/camera1"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/scene/camera1"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-74.image b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-74.image new file mode 100644 index 000000000..ba4884437 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-74.image @@ -0,0 +1 @@ +640x360 16spp clamp-off 52a1a46f3a46d230 diff --git a/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-75.digest b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-75.digest new file mode 100644 index 000000000..0e859a952 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-75.digest @@ -0,0 +1,40 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/scene/camera1") +camera: Camera { origin: Vec3A(0.0074343784, 1.9913422, 4.0133057), lower_left_corner: Vec3A(-8.881443, -3.0086517, -0.98669434), horizontal: Vec3A(17.777756, 0.0, 0.0), vertical: Vec3A(0.0, 9.999988, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: Some(Vec4(0.0, 0.0, -1.0, 3.9133058)), far: Some(Vec4(0.0, 0.0, 1.0, 9995.986)), planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: None +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 640, height: 360, region: PixelRect { x0: 0, y0: 0, x1: 640, y1: 360 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 12.700017, aperture: [25.4, 25.4], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 5.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/cornellbox.usda"], invisible_overrides: Some(0) } +layer: $DIR/cornellbox.usda +warning: Warning { code: AssetUnsupportedByHost, kind: Skipped, count: 1, prims: [], message: "No asset loader: environment map $DIR/sky_gradient.exr ignored — the dome falls back to its uniform colour. Use Scene::from_usd_with_assets to supply one." } +warning: Warning { code: MaterialFallbackDefault, kind: Skipped, count: 1, prims: ["/scene/Looks/initialShadingGroup"], message: "Material /scene/Looks/initialShadingGroup has no surface shader — using default grey OpenPBR" } +lights: 1 +light 0: dome name Some("/scene/Sky") lpe None pmf 1.0 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 5 geometries, PrimitiveBreakdown { triangles: 822, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 2 } top level, PrimitiveBreakdown { triangles: 1582, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 2 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 4.0 motion [] pieces all=10:88b22fc3345d5b05 camera=10:88b22fc3345d5b05 shadow=10:88b22fc3345d5b05 indirect=10:88b22fc3345d5b05 +geom 1: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.2 motion [] pieces all=760:c2b60a75c52c78b9 camera=760:c2b60a75c52c78b9 shadow=760:c2b60a75c52c78b9 indirect=760:c2b60a75c52c78b9 +geom 2: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=12:94a297badef437e1 camera=12:94a297badef437e1 shadow=12:94a297badef437e1 indirect=12:94a297badef437e1 +geom 3: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.25 motion [] pieces all=800:4a8c9f44d777e131 camera=800:4a8c9f44d777e131 shadow=800:4a8c9f44d777e131 indirect=800:4a8c9f44d777e131 +geom 4: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.3585339 motion [] pieces all=760:2344ecf63e12c441 camera=760:2344ecf63e12c441 shadow=760:2344ecf63e12c441 indirect=760:2344ecf63e12c441 +provenance material /scene/Looks/initialShadingGroup: MaterialOrigin { slots: [0, 1, 2, 3, 4], displaced: false } +provenance light /scene/Sky: LightOrigin { index: 0, geoms: 0..0 } +provenance geometry 0..1: /scene/pCube1 +provenance geometry 1..2: /scene/pSphere1 +provenance geometry 2..3: /scene/pCube2 +provenance geometry 3..4: /scene/pTorus1 +provenance geometry 4..5: /scene/pSphere2 +provenance mesh: MeshOrigin { geom_id: 0, slot: 0, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 1, slot: 1, baked: false, moving: false } +provenance mesh: MeshOrigin { geom_id: 2, slot: 2, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 3, slot: 3, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 4, slot: 1, baked: false, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 12343188411137242430, n_points: 8, n_indices: 20, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 1: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 17119738035130870988, n_points: 382, n_indices: 1560, n_uvs: None, smooth: false, material: 0 }), placements: 2, shared: false, displaced: false } +provenance mesh slot 2: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 1739488954094729910, n_points: 8, n_indices: 24, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 3: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 6096447469814747168, n_points: 400, n_indices: 1600, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/scene/camera1"), cameras: ["/scene/camera1"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/scene/camera1"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-75.image b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-75.image new file mode 100644 index 000000000..ba4884437 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-75.image @@ -0,0 +1 @@ +640x360 16spp clamp-off 52a1a46f3a46d230 diff --git a/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-76.digest b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-76.digest new file mode 100644 index 000000000..0e859a952 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-76.digest @@ -0,0 +1,40 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/scene/camera1") +camera: Camera { origin: Vec3A(0.0074343784, 1.9913422, 4.0133057), lower_left_corner: Vec3A(-8.881443, -3.0086517, -0.98669434), horizontal: Vec3A(17.777756, 0.0, 0.0), vertical: Vec3A(0.0, 9.999988, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: Some(Vec4(0.0, 0.0, -1.0, 3.9133058)), far: Some(Vec4(0.0, 0.0, 1.0, 9995.986)), planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: None +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 640, height: 360, region: PixelRect { x0: 0, y0: 0, x1: 640, y1: 360 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 12.700017, aperture: [25.4, 25.4], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 5.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/cornellbox.usda"], invisible_overrides: Some(0) } +layer: $DIR/cornellbox.usda +warning: Warning { code: AssetUnsupportedByHost, kind: Skipped, count: 1, prims: [], message: "No asset loader: environment map $DIR/sky_gradient.exr ignored — the dome falls back to its uniform colour. Use Scene::from_usd_with_assets to supply one." } +warning: Warning { code: MaterialFallbackDefault, kind: Skipped, count: 1, prims: ["/scene/Looks/initialShadingGroup"], message: "Material /scene/Looks/initialShadingGroup has no surface shader — using default grey OpenPBR" } +lights: 1 +light 0: dome name Some("/scene/Sky") lpe None pmf 1.0 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 5 geometries, PrimitiveBreakdown { triangles: 822, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 2 } top level, PrimitiveBreakdown { triangles: 1582, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 2 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 4.0 motion [] pieces all=10:88b22fc3345d5b05 camera=10:88b22fc3345d5b05 shadow=10:88b22fc3345d5b05 indirect=10:88b22fc3345d5b05 +geom 1: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.2 motion [] pieces all=760:c2b60a75c52c78b9 camera=760:c2b60a75c52c78b9 shadow=760:c2b60a75c52c78b9 indirect=760:c2b60a75c52c78b9 +geom 2: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=12:94a297badef437e1 camera=12:94a297badef437e1 shadow=12:94a297badef437e1 indirect=12:94a297badef437e1 +geom 3: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.25 motion [] pieces all=800:4a8c9f44d777e131 camera=800:4a8c9f44d777e131 shadow=800:4a8c9f44d777e131 indirect=800:4a8c9f44d777e131 +geom 4: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.3585339 motion [] pieces all=760:2344ecf63e12c441 camera=760:2344ecf63e12c441 shadow=760:2344ecf63e12c441 indirect=760:2344ecf63e12c441 +provenance material /scene/Looks/initialShadingGroup: MaterialOrigin { slots: [0, 1, 2, 3, 4], displaced: false } +provenance light /scene/Sky: LightOrigin { index: 0, geoms: 0..0 } +provenance geometry 0..1: /scene/pCube1 +provenance geometry 1..2: /scene/pSphere1 +provenance geometry 2..3: /scene/pCube2 +provenance geometry 3..4: /scene/pTorus1 +provenance geometry 4..5: /scene/pSphere2 +provenance mesh: MeshOrigin { geom_id: 0, slot: 0, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 1, slot: 1, baked: false, moving: false } +provenance mesh: MeshOrigin { geom_id: 2, slot: 2, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 3, slot: 3, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 4, slot: 1, baked: false, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 12343188411137242430, n_points: 8, n_indices: 20, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 1: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 17119738035130870988, n_points: 382, n_indices: 1560, n_uvs: None, smooth: false, material: 0 }), placements: 2, shared: false, displaced: false } +provenance mesh slot 2: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 1739488954094729910, n_points: 8, n_indices: 24, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 3: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 6096447469814747168, n_points: 400, n_indices: 1600, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/scene/camera1"), cameras: ["/scene/camera1"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/scene/camera1"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-76.image b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-76.image new file mode 100644 index 000000000..ba4884437 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-76.image @@ -0,0 +1 @@ +640x360 16spp clamp-off 52a1a46f3a46d230 diff --git a/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-77.digest b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-77.digest new file mode 100644 index 000000000..0e859a952 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-77.digest @@ -0,0 +1,40 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/scene/camera1") +camera: Camera { origin: Vec3A(0.0074343784, 1.9913422, 4.0133057), lower_left_corner: Vec3A(-8.881443, -3.0086517, -0.98669434), horizontal: Vec3A(17.777756, 0.0, 0.0), vertical: Vec3A(0.0, 9.999988, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: Some(Vec4(0.0, 0.0, -1.0, 3.9133058)), far: Some(Vec4(0.0, 0.0, 1.0, 9995.986)), planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: None +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 640, height: 360, region: PixelRect { x0: 0, y0: 0, x1: 640, y1: 360 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 12.700017, aperture: [25.4, 25.4], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 5.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/cornellbox.usda"], invisible_overrides: Some(0) } +layer: $DIR/cornellbox.usda +warning: Warning { code: AssetUnsupportedByHost, kind: Skipped, count: 1, prims: [], message: "No asset loader: environment map $DIR/sky_gradient.exr ignored — the dome falls back to its uniform colour. Use Scene::from_usd_with_assets to supply one." } +warning: Warning { code: MaterialFallbackDefault, kind: Skipped, count: 1, prims: ["/scene/Looks/initialShadingGroup"], message: "Material /scene/Looks/initialShadingGroup has no surface shader — using default grey OpenPBR" } +lights: 1 +light 0: dome name Some("/scene/Sky") lpe None pmf 1.0 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 5 geometries, PrimitiveBreakdown { triangles: 822, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 2 } top level, PrimitiveBreakdown { triangles: 1582, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 2 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 4.0 motion [] pieces all=10:88b22fc3345d5b05 camera=10:88b22fc3345d5b05 shadow=10:88b22fc3345d5b05 indirect=10:88b22fc3345d5b05 +geom 1: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.2 motion [] pieces all=760:c2b60a75c52c78b9 camera=760:c2b60a75c52c78b9 shadow=760:c2b60a75c52c78b9 indirect=760:c2b60a75c52c78b9 +geom 2: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=12:94a297badef437e1 camera=12:94a297badef437e1 shadow=12:94a297badef437e1 indirect=12:94a297badef437e1 +geom 3: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.25 motion [] pieces all=800:4a8c9f44d777e131 camera=800:4a8c9f44d777e131 shadow=800:4a8c9f44d777e131 indirect=800:4a8c9f44d777e131 +geom 4: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.3585339 motion [] pieces all=760:2344ecf63e12c441 camera=760:2344ecf63e12c441 shadow=760:2344ecf63e12c441 indirect=760:2344ecf63e12c441 +provenance material /scene/Looks/initialShadingGroup: MaterialOrigin { slots: [0, 1, 2, 3, 4], displaced: false } +provenance light /scene/Sky: LightOrigin { index: 0, geoms: 0..0 } +provenance geometry 0..1: /scene/pCube1 +provenance geometry 1..2: /scene/pSphere1 +provenance geometry 2..3: /scene/pCube2 +provenance geometry 3..4: /scene/pTorus1 +provenance geometry 4..5: /scene/pSphere2 +provenance mesh: MeshOrigin { geom_id: 0, slot: 0, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 1, slot: 1, baked: false, moving: false } +provenance mesh: MeshOrigin { geom_id: 2, slot: 2, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 3, slot: 3, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 4, slot: 1, baked: false, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 12343188411137242430, n_points: 8, n_indices: 20, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 1: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 17119738035130870988, n_points: 382, n_indices: 1560, n_uvs: None, smooth: false, material: 0 }), placements: 2, shared: false, displaced: false } +provenance mesh slot 2: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 1739488954094729910, n_points: 8, n_indices: 24, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 3: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 6096447469814747168, n_points: 400, n_indices: 1600, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/scene/camera1"), cameras: ["/scene/camera1"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/scene/camera1"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-77.image b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-77.image new file mode 100644 index 000000000..ba4884437 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-77.image @@ -0,0 +1 @@ +640x360 16spp clamp-off 52a1a46f3a46d230 diff --git a/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-78.digest b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-78.digest new file mode 100644 index 000000000..0e859a952 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-78.digest @@ -0,0 +1,40 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/scene/camera1") +camera: Camera { origin: Vec3A(0.0074343784, 1.9913422, 4.0133057), lower_left_corner: Vec3A(-8.881443, -3.0086517, -0.98669434), horizontal: Vec3A(17.777756, 0.0, 0.0), vertical: Vec3A(0.0, 9.999988, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: Some(Vec4(0.0, 0.0, -1.0, 3.9133058)), far: Some(Vec4(0.0, 0.0, 1.0, 9995.986)), planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: None +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 640, height: 360, region: PixelRect { x0: 0, y0: 0, x1: 640, y1: 360 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 12.700017, aperture: [25.4, 25.4], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 5.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/cornellbox.usda"], invisible_overrides: Some(0) } +layer: $DIR/cornellbox.usda +warning: Warning { code: AssetUnsupportedByHost, kind: Skipped, count: 1, prims: [], message: "No asset loader: environment map $DIR/sky_gradient.exr ignored — the dome falls back to its uniform colour. Use Scene::from_usd_with_assets to supply one." } +warning: Warning { code: MaterialFallbackDefault, kind: Skipped, count: 1, prims: ["/scene/Looks/initialShadingGroup"], message: "Material /scene/Looks/initialShadingGroup has no surface shader — using default grey OpenPBR" } +lights: 1 +light 0: dome name Some("/scene/Sky") lpe None pmf 1.0 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 5 geometries, PrimitiveBreakdown { triangles: 822, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 2 } top level, PrimitiveBreakdown { triangles: 1582, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 2 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 4.0 motion [] pieces all=10:88b22fc3345d5b05 camera=10:88b22fc3345d5b05 shadow=10:88b22fc3345d5b05 indirect=10:88b22fc3345d5b05 +geom 1: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.2 motion [] pieces all=760:c2b60a75c52c78b9 camera=760:c2b60a75c52c78b9 shadow=760:c2b60a75c52c78b9 indirect=760:c2b60a75c52c78b9 +geom 2: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=12:94a297badef437e1 camera=12:94a297badef437e1 shadow=12:94a297badef437e1 indirect=12:94a297badef437e1 +geom 3: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.25 motion [] pieces all=800:4a8c9f44d777e131 camera=800:4a8c9f44d777e131 shadow=800:4a8c9f44d777e131 indirect=800:4a8c9f44d777e131 +geom 4: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.3585339 motion [] pieces all=760:2344ecf63e12c441 camera=760:2344ecf63e12c441 shadow=760:2344ecf63e12c441 indirect=760:2344ecf63e12c441 +provenance material /scene/Looks/initialShadingGroup: MaterialOrigin { slots: [0, 1, 2, 3, 4], displaced: false } +provenance light /scene/Sky: LightOrigin { index: 0, geoms: 0..0 } +provenance geometry 0..1: /scene/pCube1 +provenance geometry 1..2: /scene/pSphere1 +provenance geometry 2..3: /scene/pCube2 +provenance geometry 3..4: /scene/pTorus1 +provenance geometry 4..5: /scene/pSphere2 +provenance mesh: MeshOrigin { geom_id: 0, slot: 0, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 1, slot: 1, baked: false, moving: false } +provenance mesh: MeshOrigin { geom_id: 2, slot: 2, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 3, slot: 3, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 4, slot: 1, baked: false, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 12343188411137242430, n_points: 8, n_indices: 20, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 1: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 17119738035130870988, n_points: 382, n_indices: 1560, n_uvs: None, smooth: false, material: 0 }), placements: 2, shared: false, displaced: false } +provenance mesh slot 2: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 1739488954094729910, n_points: 8, n_indices: 24, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 3: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 6096447469814747168, n_points: 400, n_indices: 1600, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/scene/camera1"), cameras: ["/scene/camera1"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/scene/camera1"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-78.image b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-78.image new file mode 100644 index 000000000..ba4884437 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-78.image @@ -0,0 +1 @@ +640x360 16spp clamp-off 52a1a46f3a46d230 diff --git a/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-79.digest b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-79.digest new file mode 100644 index 000000000..0e859a952 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-79.digest @@ -0,0 +1,40 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/scene/camera1") +camera: Camera { origin: Vec3A(0.0074343784, 1.9913422, 4.0133057), lower_left_corner: Vec3A(-8.881443, -3.0086517, -0.98669434), horizontal: Vec3A(17.777756, 0.0, 0.0), vertical: Vec3A(0.0, 9.999988, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: Some(Vec4(0.0, 0.0, -1.0, 3.9133058)), far: Some(Vec4(0.0, 0.0, 1.0, 9995.986)), planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: None +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 640, height: 360, region: PixelRect { x0: 0, y0: 0, x1: 640, y1: 360 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 12.700017, aperture: [25.4, 25.4], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 5.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/cornellbox.usda"], invisible_overrides: Some(0) } +layer: $DIR/cornellbox.usda +warning: Warning { code: AssetUnsupportedByHost, kind: Skipped, count: 1, prims: [], message: "No asset loader: environment map $DIR/sky_gradient.exr ignored — the dome falls back to its uniform colour. Use Scene::from_usd_with_assets to supply one." } +warning: Warning { code: MaterialFallbackDefault, kind: Skipped, count: 1, prims: ["/scene/Looks/initialShadingGroup"], message: "Material /scene/Looks/initialShadingGroup has no surface shader — using default grey OpenPBR" } +lights: 1 +light 0: dome name Some("/scene/Sky") lpe None pmf 1.0 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 5 geometries, PrimitiveBreakdown { triangles: 822, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 2 } top level, PrimitiveBreakdown { triangles: 1582, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 2 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 4.0 motion [] pieces all=10:88b22fc3345d5b05 camera=10:88b22fc3345d5b05 shadow=10:88b22fc3345d5b05 indirect=10:88b22fc3345d5b05 +geom 1: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.2 motion [] pieces all=760:c2b60a75c52c78b9 camera=760:c2b60a75c52c78b9 shadow=760:c2b60a75c52c78b9 indirect=760:c2b60a75c52c78b9 +geom 2: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=12:94a297badef437e1 camera=12:94a297badef437e1 shadow=12:94a297badef437e1 indirect=12:94a297badef437e1 +geom 3: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.25 motion [] pieces all=800:4a8c9f44d777e131 camera=800:4a8c9f44d777e131 shadow=800:4a8c9f44d777e131 indirect=800:4a8c9f44d777e131 +geom 4: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.3585339 motion [] pieces all=760:2344ecf63e12c441 camera=760:2344ecf63e12c441 shadow=760:2344ecf63e12c441 indirect=760:2344ecf63e12c441 +provenance material /scene/Looks/initialShadingGroup: MaterialOrigin { slots: [0, 1, 2, 3, 4], displaced: false } +provenance light /scene/Sky: LightOrigin { index: 0, geoms: 0..0 } +provenance geometry 0..1: /scene/pCube1 +provenance geometry 1..2: /scene/pSphere1 +provenance geometry 2..3: /scene/pCube2 +provenance geometry 3..4: /scene/pTorus1 +provenance geometry 4..5: /scene/pSphere2 +provenance mesh: MeshOrigin { geom_id: 0, slot: 0, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 1, slot: 1, baked: false, moving: false } +provenance mesh: MeshOrigin { geom_id: 2, slot: 2, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 3, slot: 3, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 4, slot: 1, baked: false, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 12343188411137242430, n_points: 8, n_indices: 20, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 1: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 17119738035130870988, n_points: 382, n_indices: 1560, n_uvs: None, smooth: false, material: 0 }), placements: 2, shared: false, displaced: false } +provenance mesh slot 2: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 1739488954094729910, n_points: 8, n_indices: 24, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 3: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 6096447469814747168, n_points: 400, n_indices: 1600, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/scene/camera1"), cameras: ["/scene/camera1"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/scene/camera1"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-79.image b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-79.image new file mode 100644 index 000000000..ba4884437 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-79.image @@ -0,0 +1 @@ +640x360 16spp clamp-off 52a1a46f3a46d230 diff --git a/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-8.digest b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-8.digest new file mode 100644 index 000000000..0e859a952 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-8.digest @@ -0,0 +1,40 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/scene/camera1") +camera: Camera { origin: Vec3A(0.0074343784, 1.9913422, 4.0133057), lower_left_corner: Vec3A(-8.881443, -3.0086517, -0.98669434), horizontal: Vec3A(17.777756, 0.0, 0.0), vertical: Vec3A(0.0, 9.999988, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: Some(Vec4(0.0, 0.0, -1.0, 3.9133058)), far: Some(Vec4(0.0, 0.0, 1.0, 9995.986)), planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: None +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 640, height: 360, region: PixelRect { x0: 0, y0: 0, x1: 640, y1: 360 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 12.700017, aperture: [25.4, 25.4], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 5.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/cornellbox.usda"], invisible_overrides: Some(0) } +layer: $DIR/cornellbox.usda +warning: Warning { code: AssetUnsupportedByHost, kind: Skipped, count: 1, prims: [], message: "No asset loader: environment map $DIR/sky_gradient.exr ignored — the dome falls back to its uniform colour. Use Scene::from_usd_with_assets to supply one." } +warning: Warning { code: MaterialFallbackDefault, kind: Skipped, count: 1, prims: ["/scene/Looks/initialShadingGroup"], message: "Material /scene/Looks/initialShadingGroup has no surface shader — using default grey OpenPBR" } +lights: 1 +light 0: dome name Some("/scene/Sky") lpe None pmf 1.0 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 5 geometries, PrimitiveBreakdown { triangles: 822, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 2 } top level, PrimitiveBreakdown { triangles: 1582, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 2 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 4.0 motion [] pieces all=10:88b22fc3345d5b05 camera=10:88b22fc3345d5b05 shadow=10:88b22fc3345d5b05 indirect=10:88b22fc3345d5b05 +geom 1: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.2 motion [] pieces all=760:c2b60a75c52c78b9 camera=760:c2b60a75c52c78b9 shadow=760:c2b60a75c52c78b9 indirect=760:c2b60a75c52c78b9 +geom 2: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=12:94a297badef437e1 camera=12:94a297badef437e1 shadow=12:94a297badef437e1 indirect=12:94a297badef437e1 +geom 3: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.25 motion [] pieces all=800:4a8c9f44d777e131 camera=800:4a8c9f44d777e131 shadow=800:4a8c9f44d777e131 indirect=800:4a8c9f44d777e131 +geom 4: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.3585339 motion [] pieces all=760:2344ecf63e12c441 camera=760:2344ecf63e12c441 shadow=760:2344ecf63e12c441 indirect=760:2344ecf63e12c441 +provenance material /scene/Looks/initialShadingGroup: MaterialOrigin { slots: [0, 1, 2, 3, 4], displaced: false } +provenance light /scene/Sky: LightOrigin { index: 0, geoms: 0..0 } +provenance geometry 0..1: /scene/pCube1 +provenance geometry 1..2: /scene/pSphere1 +provenance geometry 2..3: /scene/pCube2 +provenance geometry 3..4: /scene/pTorus1 +provenance geometry 4..5: /scene/pSphere2 +provenance mesh: MeshOrigin { geom_id: 0, slot: 0, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 1, slot: 1, baked: false, moving: false } +provenance mesh: MeshOrigin { geom_id: 2, slot: 2, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 3, slot: 3, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 4, slot: 1, baked: false, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 12343188411137242430, n_points: 8, n_indices: 20, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 1: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 17119738035130870988, n_points: 382, n_indices: 1560, n_uvs: None, smooth: false, material: 0 }), placements: 2, shared: false, displaced: false } +provenance mesh slot 2: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 1739488954094729910, n_points: 8, n_indices: 24, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 3: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 6096447469814747168, n_points: 400, n_indices: 1600, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/scene/camera1"), cameras: ["/scene/camera1"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/scene/camera1"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-8.image b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-8.image new file mode 100644 index 000000000..ba4884437 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-8.image @@ -0,0 +1 @@ +640x360 16spp clamp-off 52a1a46f3a46d230 diff --git a/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-80.digest b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-80.digest new file mode 100644 index 000000000..0e859a952 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-80.digest @@ -0,0 +1,40 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/scene/camera1") +camera: Camera { origin: Vec3A(0.0074343784, 1.9913422, 4.0133057), lower_left_corner: Vec3A(-8.881443, -3.0086517, -0.98669434), horizontal: Vec3A(17.777756, 0.0, 0.0), vertical: Vec3A(0.0, 9.999988, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: Some(Vec4(0.0, 0.0, -1.0, 3.9133058)), far: Some(Vec4(0.0, 0.0, 1.0, 9995.986)), planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: None +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 640, height: 360, region: PixelRect { x0: 0, y0: 0, x1: 640, y1: 360 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 12.700017, aperture: [25.4, 25.4], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 5.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/cornellbox.usda"], invisible_overrides: Some(0) } +layer: $DIR/cornellbox.usda +warning: Warning { code: AssetUnsupportedByHost, kind: Skipped, count: 1, prims: [], message: "No asset loader: environment map $DIR/sky_gradient.exr ignored — the dome falls back to its uniform colour. Use Scene::from_usd_with_assets to supply one." } +warning: Warning { code: MaterialFallbackDefault, kind: Skipped, count: 1, prims: ["/scene/Looks/initialShadingGroup"], message: "Material /scene/Looks/initialShadingGroup has no surface shader — using default grey OpenPBR" } +lights: 1 +light 0: dome name Some("/scene/Sky") lpe None pmf 1.0 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 5 geometries, PrimitiveBreakdown { triangles: 822, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 2 } top level, PrimitiveBreakdown { triangles: 1582, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 2 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 4.0 motion [] pieces all=10:88b22fc3345d5b05 camera=10:88b22fc3345d5b05 shadow=10:88b22fc3345d5b05 indirect=10:88b22fc3345d5b05 +geom 1: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.2 motion [] pieces all=760:c2b60a75c52c78b9 camera=760:c2b60a75c52c78b9 shadow=760:c2b60a75c52c78b9 indirect=760:c2b60a75c52c78b9 +geom 2: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=12:94a297badef437e1 camera=12:94a297badef437e1 shadow=12:94a297badef437e1 indirect=12:94a297badef437e1 +geom 3: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.25 motion [] pieces all=800:4a8c9f44d777e131 camera=800:4a8c9f44d777e131 shadow=800:4a8c9f44d777e131 indirect=800:4a8c9f44d777e131 +geom 4: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.3585339 motion [] pieces all=760:2344ecf63e12c441 camera=760:2344ecf63e12c441 shadow=760:2344ecf63e12c441 indirect=760:2344ecf63e12c441 +provenance material /scene/Looks/initialShadingGroup: MaterialOrigin { slots: [0, 1, 2, 3, 4], displaced: false } +provenance light /scene/Sky: LightOrigin { index: 0, geoms: 0..0 } +provenance geometry 0..1: /scene/pCube1 +provenance geometry 1..2: /scene/pSphere1 +provenance geometry 2..3: /scene/pCube2 +provenance geometry 3..4: /scene/pTorus1 +provenance geometry 4..5: /scene/pSphere2 +provenance mesh: MeshOrigin { geom_id: 0, slot: 0, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 1, slot: 1, baked: false, moving: false } +provenance mesh: MeshOrigin { geom_id: 2, slot: 2, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 3, slot: 3, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 4, slot: 1, baked: false, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 12343188411137242430, n_points: 8, n_indices: 20, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 1: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 17119738035130870988, n_points: 382, n_indices: 1560, n_uvs: None, smooth: false, material: 0 }), placements: 2, shared: false, displaced: false } +provenance mesh slot 2: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 1739488954094729910, n_points: 8, n_indices: 24, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 3: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 6096447469814747168, n_points: 400, n_indices: 1600, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/scene/camera1"), cameras: ["/scene/camera1"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/scene/camera1"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-80.image b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-80.image new file mode 100644 index 000000000..ba4884437 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-80.image @@ -0,0 +1 @@ +640x360 16spp clamp-off 52a1a46f3a46d230 diff --git a/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-81.digest b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-81.digest new file mode 100644 index 000000000..0e859a952 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-81.digest @@ -0,0 +1,40 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/scene/camera1") +camera: Camera { origin: Vec3A(0.0074343784, 1.9913422, 4.0133057), lower_left_corner: Vec3A(-8.881443, -3.0086517, -0.98669434), horizontal: Vec3A(17.777756, 0.0, 0.0), vertical: Vec3A(0.0, 9.999988, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: Some(Vec4(0.0, 0.0, -1.0, 3.9133058)), far: Some(Vec4(0.0, 0.0, 1.0, 9995.986)), planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: None +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 640, height: 360, region: PixelRect { x0: 0, y0: 0, x1: 640, y1: 360 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 12.700017, aperture: [25.4, 25.4], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 5.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/cornellbox.usda"], invisible_overrides: Some(0) } +layer: $DIR/cornellbox.usda +warning: Warning { code: AssetUnsupportedByHost, kind: Skipped, count: 1, prims: [], message: "No asset loader: environment map $DIR/sky_gradient.exr ignored — the dome falls back to its uniform colour. Use Scene::from_usd_with_assets to supply one." } +warning: Warning { code: MaterialFallbackDefault, kind: Skipped, count: 1, prims: ["/scene/Looks/initialShadingGroup"], message: "Material /scene/Looks/initialShadingGroup has no surface shader — using default grey OpenPBR" } +lights: 1 +light 0: dome name Some("/scene/Sky") lpe None pmf 1.0 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 5 geometries, PrimitiveBreakdown { triangles: 822, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 2 } top level, PrimitiveBreakdown { triangles: 1582, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 2 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 4.0 motion [] pieces all=10:88b22fc3345d5b05 camera=10:88b22fc3345d5b05 shadow=10:88b22fc3345d5b05 indirect=10:88b22fc3345d5b05 +geom 1: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.2 motion [] pieces all=760:c2b60a75c52c78b9 camera=760:c2b60a75c52c78b9 shadow=760:c2b60a75c52c78b9 indirect=760:c2b60a75c52c78b9 +geom 2: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=12:94a297badef437e1 camera=12:94a297badef437e1 shadow=12:94a297badef437e1 indirect=12:94a297badef437e1 +geom 3: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.25 motion [] pieces all=800:4a8c9f44d777e131 camera=800:4a8c9f44d777e131 shadow=800:4a8c9f44d777e131 indirect=800:4a8c9f44d777e131 +geom 4: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.3585339 motion [] pieces all=760:2344ecf63e12c441 camera=760:2344ecf63e12c441 shadow=760:2344ecf63e12c441 indirect=760:2344ecf63e12c441 +provenance material /scene/Looks/initialShadingGroup: MaterialOrigin { slots: [0, 1, 2, 3, 4], displaced: false } +provenance light /scene/Sky: LightOrigin { index: 0, geoms: 0..0 } +provenance geometry 0..1: /scene/pCube1 +provenance geometry 1..2: /scene/pSphere1 +provenance geometry 2..3: /scene/pCube2 +provenance geometry 3..4: /scene/pTorus1 +provenance geometry 4..5: /scene/pSphere2 +provenance mesh: MeshOrigin { geom_id: 0, slot: 0, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 1, slot: 1, baked: false, moving: false } +provenance mesh: MeshOrigin { geom_id: 2, slot: 2, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 3, slot: 3, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 4, slot: 1, baked: false, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 12343188411137242430, n_points: 8, n_indices: 20, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 1: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 17119738035130870988, n_points: 382, n_indices: 1560, n_uvs: None, smooth: false, material: 0 }), placements: 2, shared: false, displaced: false } +provenance mesh slot 2: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 1739488954094729910, n_points: 8, n_indices: 24, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 3: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 6096447469814747168, n_points: 400, n_indices: 1600, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/scene/camera1"), cameras: ["/scene/camera1"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/scene/camera1"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-81.image b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-81.image new file mode 100644 index 000000000..ba4884437 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-81.image @@ -0,0 +1 @@ +640x360 16spp clamp-off 52a1a46f3a46d230 diff --git a/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-82.digest b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-82.digest new file mode 100644 index 000000000..0e859a952 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-82.digest @@ -0,0 +1,40 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/scene/camera1") +camera: Camera { origin: Vec3A(0.0074343784, 1.9913422, 4.0133057), lower_left_corner: Vec3A(-8.881443, -3.0086517, -0.98669434), horizontal: Vec3A(17.777756, 0.0, 0.0), vertical: Vec3A(0.0, 9.999988, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: Some(Vec4(0.0, 0.0, -1.0, 3.9133058)), far: Some(Vec4(0.0, 0.0, 1.0, 9995.986)), planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: None +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 640, height: 360, region: PixelRect { x0: 0, y0: 0, x1: 640, y1: 360 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 12.700017, aperture: [25.4, 25.4], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 5.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/cornellbox.usda"], invisible_overrides: Some(0) } +layer: $DIR/cornellbox.usda +warning: Warning { code: AssetUnsupportedByHost, kind: Skipped, count: 1, prims: [], message: "No asset loader: environment map $DIR/sky_gradient.exr ignored — the dome falls back to its uniform colour. Use Scene::from_usd_with_assets to supply one." } +warning: Warning { code: MaterialFallbackDefault, kind: Skipped, count: 1, prims: ["/scene/Looks/initialShadingGroup"], message: "Material /scene/Looks/initialShadingGroup has no surface shader — using default grey OpenPBR" } +lights: 1 +light 0: dome name Some("/scene/Sky") lpe None pmf 1.0 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 5 geometries, PrimitiveBreakdown { triangles: 822, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 2 } top level, PrimitiveBreakdown { triangles: 1582, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 2 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 4.0 motion [] pieces all=10:88b22fc3345d5b05 camera=10:88b22fc3345d5b05 shadow=10:88b22fc3345d5b05 indirect=10:88b22fc3345d5b05 +geom 1: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.2 motion [] pieces all=760:c2b60a75c52c78b9 camera=760:c2b60a75c52c78b9 shadow=760:c2b60a75c52c78b9 indirect=760:c2b60a75c52c78b9 +geom 2: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=12:94a297badef437e1 camera=12:94a297badef437e1 shadow=12:94a297badef437e1 indirect=12:94a297badef437e1 +geom 3: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.25 motion [] pieces all=800:4a8c9f44d777e131 camera=800:4a8c9f44d777e131 shadow=800:4a8c9f44d777e131 indirect=800:4a8c9f44d777e131 +geom 4: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.3585339 motion [] pieces all=760:2344ecf63e12c441 camera=760:2344ecf63e12c441 shadow=760:2344ecf63e12c441 indirect=760:2344ecf63e12c441 +provenance material /scene/Looks/initialShadingGroup: MaterialOrigin { slots: [0, 1, 2, 3, 4], displaced: false } +provenance light /scene/Sky: LightOrigin { index: 0, geoms: 0..0 } +provenance geometry 0..1: /scene/pCube1 +provenance geometry 1..2: /scene/pSphere1 +provenance geometry 2..3: /scene/pCube2 +provenance geometry 3..4: /scene/pTorus1 +provenance geometry 4..5: /scene/pSphere2 +provenance mesh: MeshOrigin { geom_id: 0, slot: 0, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 1, slot: 1, baked: false, moving: false } +provenance mesh: MeshOrigin { geom_id: 2, slot: 2, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 3, slot: 3, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 4, slot: 1, baked: false, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 12343188411137242430, n_points: 8, n_indices: 20, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 1: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 17119738035130870988, n_points: 382, n_indices: 1560, n_uvs: None, smooth: false, material: 0 }), placements: 2, shared: false, displaced: false } +provenance mesh slot 2: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 1739488954094729910, n_points: 8, n_indices: 24, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 3: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 6096447469814747168, n_points: 400, n_indices: 1600, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/scene/camera1"), cameras: ["/scene/camera1"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/scene/camera1"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-82.image b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-82.image new file mode 100644 index 000000000..ba4884437 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-82.image @@ -0,0 +1 @@ +640x360 16spp clamp-off 52a1a46f3a46d230 diff --git a/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-83.digest b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-83.digest new file mode 100644 index 000000000..0e859a952 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-83.digest @@ -0,0 +1,40 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/scene/camera1") +camera: Camera { origin: Vec3A(0.0074343784, 1.9913422, 4.0133057), lower_left_corner: Vec3A(-8.881443, -3.0086517, -0.98669434), horizontal: Vec3A(17.777756, 0.0, 0.0), vertical: Vec3A(0.0, 9.999988, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: Some(Vec4(0.0, 0.0, -1.0, 3.9133058)), far: Some(Vec4(0.0, 0.0, 1.0, 9995.986)), planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: None +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 640, height: 360, region: PixelRect { x0: 0, y0: 0, x1: 640, y1: 360 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 12.700017, aperture: [25.4, 25.4], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 5.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/cornellbox.usda"], invisible_overrides: Some(0) } +layer: $DIR/cornellbox.usda +warning: Warning { code: AssetUnsupportedByHost, kind: Skipped, count: 1, prims: [], message: "No asset loader: environment map $DIR/sky_gradient.exr ignored — the dome falls back to its uniform colour. Use Scene::from_usd_with_assets to supply one." } +warning: Warning { code: MaterialFallbackDefault, kind: Skipped, count: 1, prims: ["/scene/Looks/initialShadingGroup"], message: "Material /scene/Looks/initialShadingGroup has no surface shader — using default grey OpenPBR" } +lights: 1 +light 0: dome name Some("/scene/Sky") lpe None pmf 1.0 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 5 geometries, PrimitiveBreakdown { triangles: 822, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 2 } top level, PrimitiveBreakdown { triangles: 1582, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 2 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 4.0 motion [] pieces all=10:88b22fc3345d5b05 camera=10:88b22fc3345d5b05 shadow=10:88b22fc3345d5b05 indirect=10:88b22fc3345d5b05 +geom 1: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.2 motion [] pieces all=760:c2b60a75c52c78b9 camera=760:c2b60a75c52c78b9 shadow=760:c2b60a75c52c78b9 indirect=760:c2b60a75c52c78b9 +geom 2: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=12:94a297badef437e1 camera=12:94a297badef437e1 shadow=12:94a297badef437e1 indirect=12:94a297badef437e1 +geom 3: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.25 motion [] pieces all=800:4a8c9f44d777e131 camera=800:4a8c9f44d777e131 shadow=800:4a8c9f44d777e131 indirect=800:4a8c9f44d777e131 +geom 4: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.3585339 motion [] pieces all=760:2344ecf63e12c441 camera=760:2344ecf63e12c441 shadow=760:2344ecf63e12c441 indirect=760:2344ecf63e12c441 +provenance material /scene/Looks/initialShadingGroup: MaterialOrigin { slots: [0, 1, 2, 3, 4], displaced: false } +provenance light /scene/Sky: LightOrigin { index: 0, geoms: 0..0 } +provenance geometry 0..1: /scene/pCube1 +provenance geometry 1..2: /scene/pSphere1 +provenance geometry 2..3: /scene/pCube2 +provenance geometry 3..4: /scene/pTorus1 +provenance geometry 4..5: /scene/pSphere2 +provenance mesh: MeshOrigin { geom_id: 0, slot: 0, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 1, slot: 1, baked: false, moving: false } +provenance mesh: MeshOrigin { geom_id: 2, slot: 2, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 3, slot: 3, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 4, slot: 1, baked: false, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 12343188411137242430, n_points: 8, n_indices: 20, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 1: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 17119738035130870988, n_points: 382, n_indices: 1560, n_uvs: None, smooth: false, material: 0 }), placements: 2, shared: false, displaced: false } +provenance mesh slot 2: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 1739488954094729910, n_points: 8, n_indices: 24, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 3: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 6096447469814747168, n_points: 400, n_indices: 1600, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/scene/camera1"), cameras: ["/scene/camera1"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/scene/camera1"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-83.image b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-83.image new file mode 100644 index 000000000..ba4884437 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-83.image @@ -0,0 +1 @@ +640x360 16spp clamp-off 52a1a46f3a46d230 diff --git a/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-84.digest b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-84.digest new file mode 100644 index 000000000..0e859a952 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-84.digest @@ -0,0 +1,40 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/scene/camera1") +camera: Camera { origin: Vec3A(0.0074343784, 1.9913422, 4.0133057), lower_left_corner: Vec3A(-8.881443, -3.0086517, -0.98669434), horizontal: Vec3A(17.777756, 0.0, 0.0), vertical: Vec3A(0.0, 9.999988, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: Some(Vec4(0.0, 0.0, -1.0, 3.9133058)), far: Some(Vec4(0.0, 0.0, 1.0, 9995.986)), planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: None +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 640, height: 360, region: PixelRect { x0: 0, y0: 0, x1: 640, y1: 360 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 12.700017, aperture: [25.4, 25.4], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 5.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/cornellbox.usda"], invisible_overrides: Some(0) } +layer: $DIR/cornellbox.usda +warning: Warning { code: AssetUnsupportedByHost, kind: Skipped, count: 1, prims: [], message: "No asset loader: environment map $DIR/sky_gradient.exr ignored — the dome falls back to its uniform colour. Use Scene::from_usd_with_assets to supply one." } +warning: Warning { code: MaterialFallbackDefault, kind: Skipped, count: 1, prims: ["/scene/Looks/initialShadingGroup"], message: "Material /scene/Looks/initialShadingGroup has no surface shader — using default grey OpenPBR" } +lights: 1 +light 0: dome name Some("/scene/Sky") lpe None pmf 1.0 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 5 geometries, PrimitiveBreakdown { triangles: 822, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 2 } top level, PrimitiveBreakdown { triangles: 1582, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 2 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 4.0 motion [] pieces all=10:88b22fc3345d5b05 camera=10:88b22fc3345d5b05 shadow=10:88b22fc3345d5b05 indirect=10:88b22fc3345d5b05 +geom 1: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.2 motion [] pieces all=760:c2b60a75c52c78b9 camera=760:c2b60a75c52c78b9 shadow=760:c2b60a75c52c78b9 indirect=760:c2b60a75c52c78b9 +geom 2: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=12:94a297badef437e1 camera=12:94a297badef437e1 shadow=12:94a297badef437e1 indirect=12:94a297badef437e1 +geom 3: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.25 motion [] pieces all=800:4a8c9f44d777e131 camera=800:4a8c9f44d777e131 shadow=800:4a8c9f44d777e131 indirect=800:4a8c9f44d777e131 +geom 4: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.3585339 motion [] pieces all=760:2344ecf63e12c441 camera=760:2344ecf63e12c441 shadow=760:2344ecf63e12c441 indirect=760:2344ecf63e12c441 +provenance material /scene/Looks/initialShadingGroup: MaterialOrigin { slots: [0, 1, 2, 3, 4], displaced: false } +provenance light /scene/Sky: LightOrigin { index: 0, geoms: 0..0 } +provenance geometry 0..1: /scene/pCube1 +provenance geometry 1..2: /scene/pSphere1 +provenance geometry 2..3: /scene/pCube2 +provenance geometry 3..4: /scene/pTorus1 +provenance geometry 4..5: /scene/pSphere2 +provenance mesh: MeshOrigin { geom_id: 0, slot: 0, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 1, slot: 1, baked: false, moving: false } +provenance mesh: MeshOrigin { geom_id: 2, slot: 2, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 3, slot: 3, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 4, slot: 1, baked: false, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 12343188411137242430, n_points: 8, n_indices: 20, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 1: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 17119738035130870988, n_points: 382, n_indices: 1560, n_uvs: None, smooth: false, material: 0 }), placements: 2, shared: false, displaced: false } +provenance mesh slot 2: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 1739488954094729910, n_points: 8, n_indices: 24, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 3: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 6096447469814747168, n_points: 400, n_indices: 1600, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/scene/camera1"), cameras: ["/scene/camera1"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/scene/camera1"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-84.image b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-84.image new file mode 100644 index 000000000..ba4884437 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-84.image @@ -0,0 +1 @@ +640x360 16spp clamp-off 52a1a46f3a46d230 diff --git a/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-85.digest b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-85.digest new file mode 100644 index 000000000..0e859a952 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-85.digest @@ -0,0 +1,40 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/scene/camera1") +camera: Camera { origin: Vec3A(0.0074343784, 1.9913422, 4.0133057), lower_left_corner: Vec3A(-8.881443, -3.0086517, -0.98669434), horizontal: Vec3A(17.777756, 0.0, 0.0), vertical: Vec3A(0.0, 9.999988, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: Some(Vec4(0.0, 0.0, -1.0, 3.9133058)), far: Some(Vec4(0.0, 0.0, 1.0, 9995.986)), planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: None +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 640, height: 360, region: PixelRect { x0: 0, y0: 0, x1: 640, y1: 360 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 12.700017, aperture: [25.4, 25.4], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 5.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/cornellbox.usda"], invisible_overrides: Some(0) } +layer: $DIR/cornellbox.usda +warning: Warning { code: AssetUnsupportedByHost, kind: Skipped, count: 1, prims: [], message: "No asset loader: environment map $DIR/sky_gradient.exr ignored — the dome falls back to its uniform colour. Use Scene::from_usd_with_assets to supply one." } +warning: Warning { code: MaterialFallbackDefault, kind: Skipped, count: 1, prims: ["/scene/Looks/initialShadingGroup"], message: "Material /scene/Looks/initialShadingGroup has no surface shader — using default grey OpenPBR" } +lights: 1 +light 0: dome name Some("/scene/Sky") lpe None pmf 1.0 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 5 geometries, PrimitiveBreakdown { triangles: 822, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 2 } top level, PrimitiveBreakdown { triangles: 1582, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 2 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 4.0 motion [] pieces all=10:88b22fc3345d5b05 camera=10:88b22fc3345d5b05 shadow=10:88b22fc3345d5b05 indirect=10:88b22fc3345d5b05 +geom 1: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.2 motion [] pieces all=760:c2b60a75c52c78b9 camera=760:c2b60a75c52c78b9 shadow=760:c2b60a75c52c78b9 indirect=760:c2b60a75c52c78b9 +geom 2: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=12:94a297badef437e1 camera=12:94a297badef437e1 shadow=12:94a297badef437e1 indirect=12:94a297badef437e1 +geom 3: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.25 motion [] pieces all=800:4a8c9f44d777e131 camera=800:4a8c9f44d777e131 shadow=800:4a8c9f44d777e131 indirect=800:4a8c9f44d777e131 +geom 4: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.3585339 motion [] pieces all=760:2344ecf63e12c441 camera=760:2344ecf63e12c441 shadow=760:2344ecf63e12c441 indirect=760:2344ecf63e12c441 +provenance material /scene/Looks/initialShadingGroup: MaterialOrigin { slots: [0, 1, 2, 3, 4], displaced: false } +provenance light /scene/Sky: LightOrigin { index: 0, geoms: 0..0 } +provenance geometry 0..1: /scene/pCube1 +provenance geometry 1..2: /scene/pSphere1 +provenance geometry 2..3: /scene/pCube2 +provenance geometry 3..4: /scene/pTorus1 +provenance geometry 4..5: /scene/pSphere2 +provenance mesh: MeshOrigin { geom_id: 0, slot: 0, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 1, slot: 1, baked: false, moving: false } +provenance mesh: MeshOrigin { geom_id: 2, slot: 2, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 3, slot: 3, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 4, slot: 1, baked: false, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 12343188411137242430, n_points: 8, n_indices: 20, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 1: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 17119738035130870988, n_points: 382, n_indices: 1560, n_uvs: None, smooth: false, material: 0 }), placements: 2, shared: false, displaced: false } +provenance mesh slot 2: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 1739488954094729910, n_points: 8, n_indices: 24, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 3: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 6096447469814747168, n_points: 400, n_indices: 1600, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/scene/camera1"), cameras: ["/scene/camera1"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/scene/camera1"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-85.image b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-85.image new file mode 100644 index 000000000..ba4884437 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-85.image @@ -0,0 +1 @@ +640x360 16spp clamp-off 52a1a46f3a46d230 diff --git a/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-86.digest b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-86.digest new file mode 100644 index 000000000..0e859a952 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-86.digest @@ -0,0 +1,40 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/scene/camera1") +camera: Camera { origin: Vec3A(0.0074343784, 1.9913422, 4.0133057), lower_left_corner: Vec3A(-8.881443, -3.0086517, -0.98669434), horizontal: Vec3A(17.777756, 0.0, 0.0), vertical: Vec3A(0.0, 9.999988, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: Some(Vec4(0.0, 0.0, -1.0, 3.9133058)), far: Some(Vec4(0.0, 0.0, 1.0, 9995.986)), planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: None +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 640, height: 360, region: PixelRect { x0: 0, y0: 0, x1: 640, y1: 360 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 12.700017, aperture: [25.4, 25.4], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 5.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/cornellbox.usda"], invisible_overrides: Some(0) } +layer: $DIR/cornellbox.usda +warning: Warning { code: AssetUnsupportedByHost, kind: Skipped, count: 1, prims: [], message: "No asset loader: environment map $DIR/sky_gradient.exr ignored — the dome falls back to its uniform colour. Use Scene::from_usd_with_assets to supply one." } +warning: Warning { code: MaterialFallbackDefault, kind: Skipped, count: 1, prims: ["/scene/Looks/initialShadingGroup"], message: "Material /scene/Looks/initialShadingGroup has no surface shader — using default grey OpenPBR" } +lights: 1 +light 0: dome name Some("/scene/Sky") lpe None pmf 1.0 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 5 geometries, PrimitiveBreakdown { triangles: 822, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 2 } top level, PrimitiveBreakdown { triangles: 1582, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 2 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 4.0 motion [] pieces all=10:88b22fc3345d5b05 camera=10:88b22fc3345d5b05 shadow=10:88b22fc3345d5b05 indirect=10:88b22fc3345d5b05 +geom 1: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.2 motion [] pieces all=760:c2b60a75c52c78b9 camera=760:c2b60a75c52c78b9 shadow=760:c2b60a75c52c78b9 indirect=760:c2b60a75c52c78b9 +geom 2: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=12:94a297badef437e1 camera=12:94a297badef437e1 shadow=12:94a297badef437e1 indirect=12:94a297badef437e1 +geom 3: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.25 motion [] pieces all=800:4a8c9f44d777e131 camera=800:4a8c9f44d777e131 shadow=800:4a8c9f44d777e131 indirect=800:4a8c9f44d777e131 +geom 4: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.3585339 motion [] pieces all=760:2344ecf63e12c441 camera=760:2344ecf63e12c441 shadow=760:2344ecf63e12c441 indirect=760:2344ecf63e12c441 +provenance material /scene/Looks/initialShadingGroup: MaterialOrigin { slots: [0, 1, 2, 3, 4], displaced: false } +provenance light /scene/Sky: LightOrigin { index: 0, geoms: 0..0 } +provenance geometry 0..1: /scene/pCube1 +provenance geometry 1..2: /scene/pSphere1 +provenance geometry 2..3: /scene/pCube2 +provenance geometry 3..4: /scene/pTorus1 +provenance geometry 4..5: /scene/pSphere2 +provenance mesh: MeshOrigin { geom_id: 0, slot: 0, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 1, slot: 1, baked: false, moving: false } +provenance mesh: MeshOrigin { geom_id: 2, slot: 2, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 3, slot: 3, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 4, slot: 1, baked: false, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 12343188411137242430, n_points: 8, n_indices: 20, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 1: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 17119738035130870988, n_points: 382, n_indices: 1560, n_uvs: None, smooth: false, material: 0 }), placements: 2, shared: false, displaced: false } +provenance mesh slot 2: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 1739488954094729910, n_points: 8, n_indices: 24, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 3: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 6096447469814747168, n_points: 400, n_indices: 1600, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/scene/camera1"), cameras: ["/scene/camera1"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/scene/camera1"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-86.image b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-86.image new file mode 100644 index 000000000..ba4884437 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-86.image @@ -0,0 +1 @@ +640x360 16spp clamp-off 52a1a46f3a46d230 diff --git a/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-87.digest b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-87.digest new file mode 100644 index 000000000..0e859a952 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-87.digest @@ -0,0 +1,40 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/scene/camera1") +camera: Camera { origin: Vec3A(0.0074343784, 1.9913422, 4.0133057), lower_left_corner: Vec3A(-8.881443, -3.0086517, -0.98669434), horizontal: Vec3A(17.777756, 0.0, 0.0), vertical: Vec3A(0.0, 9.999988, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: Some(Vec4(0.0, 0.0, -1.0, 3.9133058)), far: Some(Vec4(0.0, 0.0, 1.0, 9995.986)), planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: None +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 640, height: 360, region: PixelRect { x0: 0, y0: 0, x1: 640, y1: 360 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 12.700017, aperture: [25.4, 25.4], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 5.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/cornellbox.usda"], invisible_overrides: Some(0) } +layer: $DIR/cornellbox.usda +warning: Warning { code: AssetUnsupportedByHost, kind: Skipped, count: 1, prims: [], message: "No asset loader: environment map $DIR/sky_gradient.exr ignored — the dome falls back to its uniform colour. Use Scene::from_usd_with_assets to supply one." } +warning: Warning { code: MaterialFallbackDefault, kind: Skipped, count: 1, prims: ["/scene/Looks/initialShadingGroup"], message: "Material /scene/Looks/initialShadingGroup has no surface shader — using default grey OpenPBR" } +lights: 1 +light 0: dome name Some("/scene/Sky") lpe None pmf 1.0 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 5 geometries, PrimitiveBreakdown { triangles: 822, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 2 } top level, PrimitiveBreakdown { triangles: 1582, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 2 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 4.0 motion [] pieces all=10:88b22fc3345d5b05 camera=10:88b22fc3345d5b05 shadow=10:88b22fc3345d5b05 indirect=10:88b22fc3345d5b05 +geom 1: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.2 motion [] pieces all=760:c2b60a75c52c78b9 camera=760:c2b60a75c52c78b9 shadow=760:c2b60a75c52c78b9 indirect=760:c2b60a75c52c78b9 +geom 2: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=12:94a297badef437e1 camera=12:94a297badef437e1 shadow=12:94a297badef437e1 indirect=12:94a297badef437e1 +geom 3: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.25 motion [] pieces all=800:4a8c9f44d777e131 camera=800:4a8c9f44d777e131 shadow=800:4a8c9f44d777e131 indirect=800:4a8c9f44d777e131 +geom 4: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.3585339 motion [] pieces all=760:2344ecf63e12c441 camera=760:2344ecf63e12c441 shadow=760:2344ecf63e12c441 indirect=760:2344ecf63e12c441 +provenance material /scene/Looks/initialShadingGroup: MaterialOrigin { slots: [0, 1, 2, 3, 4], displaced: false } +provenance light /scene/Sky: LightOrigin { index: 0, geoms: 0..0 } +provenance geometry 0..1: /scene/pCube1 +provenance geometry 1..2: /scene/pSphere1 +provenance geometry 2..3: /scene/pCube2 +provenance geometry 3..4: /scene/pTorus1 +provenance geometry 4..5: /scene/pSphere2 +provenance mesh: MeshOrigin { geom_id: 0, slot: 0, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 1, slot: 1, baked: false, moving: false } +provenance mesh: MeshOrigin { geom_id: 2, slot: 2, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 3, slot: 3, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 4, slot: 1, baked: false, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 12343188411137242430, n_points: 8, n_indices: 20, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 1: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 17119738035130870988, n_points: 382, n_indices: 1560, n_uvs: None, smooth: false, material: 0 }), placements: 2, shared: false, displaced: false } +provenance mesh slot 2: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 1739488954094729910, n_points: 8, n_indices: 24, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 3: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 6096447469814747168, n_points: 400, n_indices: 1600, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/scene/camera1"), cameras: ["/scene/camera1"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/scene/camera1"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-87.image b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-87.image new file mode 100644 index 000000000..ba4884437 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-87.image @@ -0,0 +1 @@ +640x360 16spp clamp-off 52a1a46f3a46d230 diff --git a/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-88.digest b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-88.digest new file mode 100644 index 000000000..0e859a952 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-88.digest @@ -0,0 +1,40 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/scene/camera1") +camera: Camera { origin: Vec3A(0.0074343784, 1.9913422, 4.0133057), lower_left_corner: Vec3A(-8.881443, -3.0086517, -0.98669434), horizontal: Vec3A(17.777756, 0.0, 0.0), vertical: Vec3A(0.0, 9.999988, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: Some(Vec4(0.0, 0.0, -1.0, 3.9133058)), far: Some(Vec4(0.0, 0.0, 1.0, 9995.986)), planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: None +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 640, height: 360, region: PixelRect { x0: 0, y0: 0, x1: 640, y1: 360 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 12.700017, aperture: [25.4, 25.4], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 5.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/cornellbox.usda"], invisible_overrides: Some(0) } +layer: $DIR/cornellbox.usda +warning: Warning { code: AssetUnsupportedByHost, kind: Skipped, count: 1, prims: [], message: "No asset loader: environment map $DIR/sky_gradient.exr ignored — the dome falls back to its uniform colour. Use Scene::from_usd_with_assets to supply one." } +warning: Warning { code: MaterialFallbackDefault, kind: Skipped, count: 1, prims: ["/scene/Looks/initialShadingGroup"], message: "Material /scene/Looks/initialShadingGroup has no surface shader — using default grey OpenPBR" } +lights: 1 +light 0: dome name Some("/scene/Sky") lpe None pmf 1.0 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 5 geometries, PrimitiveBreakdown { triangles: 822, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 2 } top level, PrimitiveBreakdown { triangles: 1582, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 2 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 4.0 motion [] pieces all=10:88b22fc3345d5b05 camera=10:88b22fc3345d5b05 shadow=10:88b22fc3345d5b05 indirect=10:88b22fc3345d5b05 +geom 1: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.2 motion [] pieces all=760:c2b60a75c52c78b9 camera=760:c2b60a75c52c78b9 shadow=760:c2b60a75c52c78b9 indirect=760:c2b60a75c52c78b9 +geom 2: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=12:94a297badef437e1 camera=12:94a297badef437e1 shadow=12:94a297badef437e1 indirect=12:94a297badef437e1 +geom 3: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.25 motion [] pieces all=800:4a8c9f44d777e131 camera=800:4a8c9f44d777e131 shadow=800:4a8c9f44d777e131 indirect=800:4a8c9f44d777e131 +geom 4: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.3585339 motion [] pieces all=760:2344ecf63e12c441 camera=760:2344ecf63e12c441 shadow=760:2344ecf63e12c441 indirect=760:2344ecf63e12c441 +provenance material /scene/Looks/initialShadingGroup: MaterialOrigin { slots: [0, 1, 2, 3, 4], displaced: false } +provenance light /scene/Sky: LightOrigin { index: 0, geoms: 0..0 } +provenance geometry 0..1: /scene/pCube1 +provenance geometry 1..2: /scene/pSphere1 +provenance geometry 2..3: /scene/pCube2 +provenance geometry 3..4: /scene/pTorus1 +provenance geometry 4..5: /scene/pSphere2 +provenance mesh: MeshOrigin { geom_id: 0, slot: 0, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 1, slot: 1, baked: false, moving: false } +provenance mesh: MeshOrigin { geom_id: 2, slot: 2, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 3, slot: 3, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 4, slot: 1, baked: false, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 12343188411137242430, n_points: 8, n_indices: 20, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 1: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 17119738035130870988, n_points: 382, n_indices: 1560, n_uvs: None, smooth: false, material: 0 }), placements: 2, shared: false, displaced: false } +provenance mesh slot 2: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 1739488954094729910, n_points: 8, n_indices: 24, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 3: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 6096447469814747168, n_points: 400, n_indices: 1600, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/scene/camera1"), cameras: ["/scene/camera1"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/scene/camera1"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-88.image b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-88.image new file mode 100644 index 000000000..ba4884437 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-88.image @@ -0,0 +1 @@ +640x360 16spp clamp-off 52a1a46f3a46d230 diff --git a/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-89.digest b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-89.digest new file mode 100644 index 000000000..0e859a952 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-89.digest @@ -0,0 +1,40 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/scene/camera1") +camera: Camera { origin: Vec3A(0.0074343784, 1.9913422, 4.0133057), lower_left_corner: Vec3A(-8.881443, -3.0086517, -0.98669434), horizontal: Vec3A(17.777756, 0.0, 0.0), vertical: Vec3A(0.0, 9.999988, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: Some(Vec4(0.0, 0.0, -1.0, 3.9133058)), far: Some(Vec4(0.0, 0.0, 1.0, 9995.986)), planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: None +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 640, height: 360, region: PixelRect { x0: 0, y0: 0, x1: 640, y1: 360 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 12.700017, aperture: [25.4, 25.4], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 5.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/cornellbox.usda"], invisible_overrides: Some(0) } +layer: $DIR/cornellbox.usda +warning: Warning { code: AssetUnsupportedByHost, kind: Skipped, count: 1, prims: [], message: "No asset loader: environment map $DIR/sky_gradient.exr ignored — the dome falls back to its uniform colour. Use Scene::from_usd_with_assets to supply one." } +warning: Warning { code: MaterialFallbackDefault, kind: Skipped, count: 1, prims: ["/scene/Looks/initialShadingGroup"], message: "Material /scene/Looks/initialShadingGroup has no surface shader — using default grey OpenPBR" } +lights: 1 +light 0: dome name Some("/scene/Sky") lpe None pmf 1.0 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 5 geometries, PrimitiveBreakdown { triangles: 822, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 2 } top level, PrimitiveBreakdown { triangles: 1582, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 2 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 4.0 motion [] pieces all=10:88b22fc3345d5b05 camera=10:88b22fc3345d5b05 shadow=10:88b22fc3345d5b05 indirect=10:88b22fc3345d5b05 +geom 1: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.2 motion [] pieces all=760:c2b60a75c52c78b9 camera=760:c2b60a75c52c78b9 shadow=760:c2b60a75c52c78b9 indirect=760:c2b60a75c52c78b9 +geom 2: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=12:94a297badef437e1 camera=12:94a297badef437e1 shadow=12:94a297badef437e1 indirect=12:94a297badef437e1 +geom 3: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.25 motion [] pieces all=800:4a8c9f44d777e131 camera=800:4a8c9f44d777e131 shadow=800:4a8c9f44d777e131 indirect=800:4a8c9f44d777e131 +geom 4: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.3585339 motion [] pieces all=760:2344ecf63e12c441 camera=760:2344ecf63e12c441 shadow=760:2344ecf63e12c441 indirect=760:2344ecf63e12c441 +provenance material /scene/Looks/initialShadingGroup: MaterialOrigin { slots: [0, 1, 2, 3, 4], displaced: false } +provenance light /scene/Sky: LightOrigin { index: 0, geoms: 0..0 } +provenance geometry 0..1: /scene/pCube1 +provenance geometry 1..2: /scene/pSphere1 +provenance geometry 2..3: /scene/pCube2 +provenance geometry 3..4: /scene/pTorus1 +provenance geometry 4..5: /scene/pSphere2 +provenance mesh: MeshOrigin { geom_id: 0, slot: 0, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 1, slot: 1, baked: false, moving: false } +provenance mesh: MeshOrigin { geom_id: 2, slot: 2, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 3, slot: 3, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 4, slot: 1, baked: false, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 12343188411137242430, n_points: 8, n_indices: 20, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 1: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 17119738035130870988, n_points: 382, n_indices: 1560, n_uvs: None, smooth: false, material: 0 }), placements: 2, shared: false, displaced: false } +provenance mesh slot 2: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 1739488954094729910, n_points: 8, n_indices: 24, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 3: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 6096447469814747168, n_points: 400, n_indices: 1600, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/scene/camera1"), cameras: ["/scene/camera1"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/scene/camera1"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-89.image b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-89.image new file mode 100644 index 000000000..ba4884437 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-89.image @@ -0,0 +1 @@ +640x360 16spp clamp-off 52a1a46f3a46d230 diff --git a/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-9.digest b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-9.digest new file mode 100644 index 000000000..0e859a952 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-9.digest @@ -0,0 +1,40 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/scene/camera1") +camera: Camera { origin: Vec3A(0.0074343784, 1.9913422, 4.0133057), lower_left_corner: Vec3A(-8.881443, -3.0086517, -0.98669434), horizontal: Vec3A(17.777756, 0.0, 0.0), vertical: Vec3A(0.0, 9.999988, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: Some(Vec4(0.0, 0.0, -1.0, 3.9133058)), far: Some(Vec4(0.0, 0.0, 1.0, 9995.986)), planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: None +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 640, height: 360, region: PixelRect { x0: 0, y0: 0, x1: 640, y1: 360 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 12.700017, aperture: [25.4, 25.4], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 5.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/cornellbox.usda"], invisible_overrides: Some(0) } +layer: $DIR/cornellbox.usda +warning: Warning { code: AssetUnsupportedByHost, kind: Skipped, count: 1, prims: [], message: "No asset loader: environment map $DIR/sky_gradient.exr ignored — the dome falls back to its uniform colour. Use Scene::from_usd_with_assets to supply one." } +warning: Warning { code: MaterialFallbackDefault, kind: Skipped, count: 1, prims: ["/scene/Looks/initialShadingGroup"], message: "Material /scene/Looks/initialShadingGroup has no surface shader — using default grey OpenPBR" } +lights: 1 +light 0: dome name Some("/scene/Sky") lpe None pmf 1.0 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 5 geometries, PrimitiveBreakdown { triangles: 822, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 2 } top level, PrimitiveBreakdown { triangles: 1582, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 2 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 4.0 motion [] pieces all=10:88b22fc3345d5b05 camera=10:88b22fc3345d5b05 shadow=10:88b22fc3345d5b05 indirect=10:88b22fc3345d5b05 +geom 1: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.2 motion [] pieces all=760:c2b60a75c52c78b9 camera=760:c2b60a75c52c78b9 shadow=760:c2b60a75c52c78b9 indirect=760:c2b60a75c52c78b9 +geom 2: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=12:94a297badef437e1 camera=12:94a297badef437e1 shadow=12:94a297badef437e1 indirect=12:94a297badef437e1 +geom 3: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.25 motion [] pieces all=800:4a8c9f44d777e131 camera=800:4a8c9f44d777e131 shadow=800:4a8c9f44d777e131 indirect=800:4a8c9f44d777e131 +geom 4: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.3585339 motion [] pieces all=760:2344ecf63e12c441 camera=760:2344ecf63e12c441 shadow=760:2344ecf63e12c441 indirect=760:2344ecf63e12c441 +provenance material /scene/Looks/initialShadingGroup: MaterialOrigin { slots: [0, 1, 2, 3, 4], displaced: false } +provenance light /scene/Sky: LightOrigin { index: 0, geoms: 0..0 } +provenance geometry 0..1: /scene/pCube1 +provenance geometry 1..2: /scene/pSphere1 +provenance geometry 2..3: /scene/pCube2 +provenance geometry 3..4: /scene/pTorus1 +provenance geometry 4..5: /scene/pSphere2 +provenance mesh: MeshOrigin { geom_id: 0, slot: 0, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 1, slot: 1, baked: false, moving: false } +provenance mesh: MeshOrigin { geom_id: 2, slot: 2, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 3, slot: 3, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 4, slot: 1, baked: false, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 12343188411137242430, n_points: 8, n_indices: 20, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 1: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 17119738035130870988, n_points: 382, n_indices: 1560, n_uvs: None, smooth: false, material: 0 }), placements: 2, shared: false, displaced: false } +provenance mesh slot 2: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 1739488954094729910, n_points: 8, n_indices: 24, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 3: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 6096447469814747168, n_points: 400, n_indices: 1600, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/scene/camera1"), cameras: ["/scene/camera1"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/scene/camera1"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-9.image b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-9.image new file mode 100644 index 000000000..ba4884437 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-9.image @@ -0,0 +1 @@ +640x360 16spp clamp-off 52a1a46f3a46d230 diff --git a/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-90.digest b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-90.digest new file mode 100644 index 000000000..0e859a952 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-90.digest @@ -0,0 +1,40 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/scene/camera1") +camera: Camera { origin: Vec3A(0.0074343784, 1.9913422, 4.0133057), lower_left_corner: Vec3A(-8.881443, -3.0086517, -0.98669434), horizontal: Vec3A(17.777756, 0.0, 0.0), vertical: Vec3A(0.0, 9.999988, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: Some(Vec4(0.0, 0.0, -1.0, 3.9133058)), far: Some(Vec4(0.0, 0.0, 1.0, 9995.986)), planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: None +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 640, height: 360, region: PixelRect { x0: 0, y0: 0, x1: 640, y1: 360 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 12.700017, aperture: [25.4, 25.4], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 5.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/cornellbox.usda"], invisible_overrides: Some(0) } +layer: $DIR/cornellbox.usda +warning: Warning { code: AssetUnsupportedByHost, kind: Skipped, count: 1, prims: [], message: "No asset loader: environment map $DIR/sky_gradient.exr ignored — the dome falls back to its uniform colour. Use Scene::from_usd_with_assets to supply one." } +warning: Warning { code: MaterialFallbackDefault, kind: Skipped, count: 1, prims: ["/scene/Looks/initialShadingGroup"], message: "Material /scene/Looks/initialShadingGroup has no surface shader — using default grey OpenPBR" } +lights: 1 +light 0: dome name Some("/scene/Sky") lpe None pmf 1.0 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 5 geometries, PrimitiveBreakdown { triangles: 822, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 2 } top level, PrimitiveBreakdown { triangles: 1582, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 2 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 4.0 motion [] pieces all=10:88b22fc3345d5b05 camera=10:88b22fc3345d5b05 shadow=10:88b22fc3345d5b05 indirect=10:88b22fc3345d5b05 +geom 1: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.2 motion [] pieces all=760:c2b60a75c52c78b9 camera=760:c2b60a75c52c78b9 shadow=760:c2b60a75c52c78b9 indirect=760:c2b60a75c52c78b9 +geom 2: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=12:94a297badef437e1 camera=12:94a297badef437e1 shadow=12:94a297badef437e1 indirect=12:94a297badef437e1 +geom 3: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.25 motion [] pieces all=800:4a8c9f44d777e131 camera=800:4a8c9f44d777e131 shadow=800:4a8c9f44d777e131 indirect=800:4a8c9f44d777e131 +geom 4: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.3585339 motion [] pieces all=760:2344ecf63e12c441 camera=760:2344ecf63e12c441 shadow=760:2344ecf63e12c441 indirect=760:2344ecf63e12c441 +provenance material /scene/Looks/initialShadingGroup: MaterialOrigin { slots: [0, 1, 2, 3, 4], displaced: false } +provenance light /scene/Sky: LightOrigin { index: 0, geoms: 0..0 } +provenance geometry 0..1: /scene/pCube1 +provenance geometry 1..2: /scene/pSphere1 +provenance geometry 2..3: /scene/pCube2 +provenance geometry 3..4: /scene/pTorus1 +provenance geometry 4..5: /scene/pSphere2 +provenance mesh: MeshOrigin { geom_id: 0, slot: 0, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 1, slot: 1, baked: false, moving: false } +provenance mesh: MeshOrigin { geom_id: 2, slot: 2, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 3, slot: 3, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 4, slot: 1, baked: false, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 12343188411137242430, n_points: 8, n_indices: 20, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 1: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 17119738035130870988, n_points: 382, n_indices: 1560, n_uvs: None, smooth: false, material: 0 }), placements: 2, shared: false, displaced: false } +provenance mesh slot 2: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 1739488954094729910, n_points: 8, n_indices: 24, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 3: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 6096447469814747168, n_points: 400, n_indices: 1600, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/scene/camera1"), cameras: ["/scene/camera1"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/scene/camera1"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-90.image b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-90.image new file mode 100644 index 000000000..ba4884437 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-90.image @@ -0,0 +1 @@ +640x360 16spp clamp-off 52a1a46f3a46d230 diff --git a/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-91.digest b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-91.digest new file mode 100644 index 000000000..0e859a952 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-91.digest @@ -0,0 +1,40 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/scene/camera1") +camera: Camera { origin: Vec3A(0.0074343784, 1.9913422, 4.0133057), lower_left_corner: Vec3A(-8.881443, -3.0086517, -0.98669434), horizontal: Vec3A(17.777756, 0.0, 0.0), vertical: Vec3A(0.0, 9.999988, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: Some(Vec4(0.0, 0.0, -1.0, 3.9133058)), far: Some(Vec4(0.0, 0.0, 1.0, 9995.986)), planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: None +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 640, height: 360, region: PixelRect { x0: 0, y0: 0, x1: 640, y1: 360 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 12.700017, aperture: [25.4, 25.4], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 5.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/cornellbox.usda"], invisible_overrides: Some(0) } +layer: $DIR/cornellbox.usda +warning: Warning { code: AssetUnsupportedByHost, kind: Skipped, count: 1, prims: [], message: "No asset loader: environment map $DIR/sky_gradient.exr ignored — the dome falls back to its uniform colour. Use Scene::from_usd_with_assets to supply one." } +warning: Warning { code: MaterialFallbackDefault, kind: Skipped, count: 1, prims: ["/scene/Looks/initialShadingGroup"], message: "Material /scene/Looks/initialShadingGroup has no surface shader — using default grey OpenPBR" } +lights: 1 +light 0: dome name Some("/scene/Sky") lpe None pmf 1.0 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 5 geometries, PrimitiveBreakdown { triangles: 822, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 2 } top level, PrimitiveBreakdown { triangles: 1582, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 2 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 4.0 motion [] pieces all=10:88b22fc3345d5b05 camera=10:88b22fc3345d5b05 shadow=10:88b22fc3345d5b05 indirect=10:88b22fc3345d5b05 +geom 1: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.2 motion [] pieces all=760:c2b60a75c52c78b9 camera=760:c2b60a75c52c78b9 shadow=760:c2b60a75c52c78b9 indirect=760:c2b60a75c52c78b9 +geom 2: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=12:94a297badef437e1 camera=12:94a297badef437e1 shadow=12:94a297badef437e1 indirect=12:94a297badef437e1 +geom 3: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.25 motion [] pieces all=800:4a8c9f44d777e131 camera=800:4a8c9f44d777e131 shadow=800:4a8c9f44d777e131 indirect=800:4a8c9f44d777e131 +geom 4: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.3585339 motion [] pieces all=760:2344ecf63e12c441 camera=760:2344ecf63e12c441 shadow=760:2344ecf63e12c441 indirect=760:2344ecf63e12c441 +provenance material /scene/Looks/initialShadingGroup: MaterialOrigin { slots: [0, 1, 2, 3, 4], displaced: false } +provenance light /scene/Sky: LightOrigin { index: 0, geoms: 0..0 } +provenance geometry 0..1: /scene/pCube1 +provenance geometry 1..2: /scene/pSphere1 +provenance geometry 2..3: /scene/pCube2 +provenance geometry 3..4: /scene/pTorus1 +provenance geometry 4..5: /scene/pSphere2 +provenance mesh: MeshOrigin { geom_id: 0, slot: 0, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 1, slot: 1, baked: false, moving: false } +provenance mesh: MeshOrigin { geom_id: 2, slot: 2, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 3, slot: 3, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 4, slot: 1, baked: false, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 12343188411137242430, n_points: 8, n_indices: 20, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 1: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 17119738035130870988, n_points: 382, n_indices: 1560, n_uvs: None, smooth: false, material: 0 }), placements: 2, shared: false, displaced: false } +provenance mesh slot 2: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 1739488954094729910, n_points: 8, n_indices: 24, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 3: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 6096447469814747168, n_points: 400, n_indices: 1600, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/scene/camera1"), cameras: ["/scene/camera1"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/scene/camera1"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-91.image b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-91.image new file mode 100644 index 000000000..ba4884437 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-91.image @@ -0,0 +1 @@ +640x360 16spp clamp-off 52a1a46f3a46d230 diff --git a/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-92.digest b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-92.digest new file mode 100644 index 000000000..0e859a952 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-92.digest @@ -0,0 +1,40 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/scene/camera1") +camera: Camera { origin: Vec3A(0.0074343784, 1.9913422, 4.0133057), lower_left_corner: Vec3A(-8.881443, -3.0086517, -0.98669434), horizontal: Vec3A(17.777756, 0.0, 0.0), vertical: Vec3A(0.0, 9.999988, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: Some(Vec4(0.0, 0.0, -1.0, 3.9133058)), far: Some(Vec4(0.0, 0.0, 1.0, 9995.986)), planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: None +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 640, height: 360, region: PixelRect { x0: 0, y0: 0, x1: 640, y1: 360 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 12.700017, aperture: [25.4, 25.4], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 5.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/cornellbox.usda"], invisible_overrides: Some(0) } +layer: $DIR/cornellbox.usda +warning: Warning { code: AssetUnsupportedByHost, kind: Skipped, count: 1, prims: [], message: "No asset loader: environment map $DIR/sky_gradient.exr ignored — the dome falls back to its uniform colour. Use Scene::from_usd_with_assets to supply one." } +warning: Warning { code: MaterialFallbackDefault, kind: Skipped, count: 1, prims: ["/scene/Looks/initialShadingGroup"], message: "Material /scene/Looks/initialShadingGroup has no surface shader — using default grey OpenPBR" } +lights: 1 +light 0: dome name Some("/scene/Sky") lpe None pmf 1.0 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 5 geometries, PrimitiveBreakdown { triangles: 822, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 2 } top level, PrimitiveBreakdown { triangles: 1582, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 2 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 4.0 motion [] pieces all=10:88b22fc3345d5b05 camera=10:88b22fc3345d5b05 shadow=10:88b22fc3345d5b05 indirect=10:88b22fc3345d5b05 +geom 1: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.2 motion [] pieces all=760:c2b60a75c52c78b9 camera=760:c2b60a75c52c78b9 shadow=760:c2b60a75c52c78b9 indirect=760:c2b60a75c52c78b9 +geom 2: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=12:94a297badef437e1 camera=12:94a297badef437e1 shadow=12:94a297badef437e1 indirect=12:94a297badef437e1 +geom 3: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.25 motion [] pieces all=800:4a8c9f44d777e131 camera=800:4a8c9f44d777e131 shadow=800:4a8c9f44d777e131 indirect=800:4a8c9f44d777e131 +geom 4: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.3585339 motion [] pieces all=760:2344ecf63e12c441 camera=760:2344ecf63e12c441 shadow=760:2344ecf63e12c441 indirect=760:2344ecf63e12c441 +provenance material /scene/Looks/initialShadingGroup: MaterialOrigin { slots: [0, 1, 2, 3, 4], displaced: false } +provenance light /scene/Sky: LightOrigin { index: 0, geoms: 0..0 } +provenance geometry 0..1: /scene/pCube1 +provenance geometry 1..2: /scene/pSphere1 +provenance geometry 2..3: /scene/pCube2 +provenance geometry 3..4: /scene/pTorus1 +provenance geometry 4..5: /scene/pSphere2 +provenance mesh: MeshOrigin { geom_id: 0, slot: 0, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 1, slot: 1, baked: false, moving: false } +provenance mesh: MeshOrigin { geom_id: 2, slot: 2, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 3, slot: 3, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 4, slot: 1, baked: false, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 12343188411137242430, n_points: 8, n_indices: 20, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 1: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 17119738035130870988, n_points: 382, n_indices: 1560, n_uvs: None, smooth: false, material: 0 }), placements: 2, shared: false, displaced: false } +provenance mesh slot 2: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 1739488954094729910, n_points: 8, n_indices: 24, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 3: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 6096447469814747168, n_points: 400, n_indices: 1600, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/scene/camera1"), cameras: ["/scene/camera1"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/scene/camera1"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-92.image b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-92.image new file mode 100644 index 000000000..ba4884437 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-92.image @@ -0,0 +1 @@ +640x360 16spp clamp-off 52a1a46f3a46d230 diff --git a/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-93.digest b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-93.digest new file mode 100644 index 000000000..0e859a952 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-93.digest @@ -0,0 +1,40 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/scene/camera1") +camera: Camera { origin: Vec3A(0.0074343784, 1.9913422, 4.0133057), lower_left_corner: Vec3A(-8.881443, -3.0086517, -0.98669434), horizontal: Vec3A(17.777756, 0.0, 0.0), vertical: Vec3A(0.0, 9.999988, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: Some(Vec4(0.0, 0.0, -1.0, 3.9133058)), far: Some(Vec4(0.0, 0.0, 1.0, 9995.986)), planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: None +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 640, height: 360, region: PixelRect { x0: 0, y0: 0, x1: 640, y1: 360 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 12.700017, aperture: [25.4, 25.4], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 5.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/cornellbox.usda"], invisible_overrides: Some(0) } +layer: $DIR/cornellbox.usda +warning: Warning { code: AssetUnsupportedByHost, kind: Skipped, count: 1, prims: [], message: "No asset loader: environment map $DIR/sky_gradient.exr ignored — the dome falls back to its uniform colour. Use Scene::from_usd_with_assets to supply one." } +warning: Warning { code: MaterialFallbackDefault, kind: Skipped, count: 1, prims: ["/scene/Looks/initialShadingGroup"], message: "Material /scene/Looks/initialShadingGroup has no surface shader — using default grey OpenPBR" } +lights: 1 +light 0: dome name Some("/scene/Sky") lpe None pmf 1.0 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 5 geometries, PrimitiveBreakdown { triangles: 822, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 2 } top level, PrimitiveBreakdown { triangles: 1582, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 2 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 4.0 motion [] pieces all=10:88b22fc3345d5b05 camera=10:88b22fc3345d5b05 shadow=10:88b22fc3345d5b05 indirect=10:88b22fc3345d5b05 +geom 1: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.2 motion [] pieces all=760:c2b60a75c52c78b9 camera=760:c2b60a75c52c78b9 shadow=760:c2b60a75c52c78b9 indirect=760:c2b60a75c52c78b9 +geom 2: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=12:94a297badef437e1 camera=12:94a297badef437e1 shadow=12:94a297badef437e1 indirect=12:94a297badef437e1 +geom 3: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.25 motion [] pieces all=800:4a8c9f44d777e131 camera=800:4a8c9f44d777e131 shadow=800:4a8c9f44d777e131 indirect=800:4a8c9f44d777e131 +geom 4: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.3585339 motion [] pieces all=760:2344ecf63e12c441 camera=760:2344ecf63e12c441 shadow=760:2344ecf63e12c441 indirect=760:2344ecf63e12c441 +provenance material /scene/Looks/initialShadingGroup: MaterialOrigin { slots: [0, 1, 2, 3, 4], displaced: false } +provenance light /scene/Sky: LightOrigin { index: 0, geoms: 0..0 } +provenance geometry 0..1: /scene/pCube1 +provenance geometry 1..2: /scene/pSphere1 +provenance geometry 2..3: /scene/pCube2 +provenance geometry 3..4: /scene/pTorus1 +provenance geometry 4..5: /scene/pSphere2 +provenance mesh: MeshOrigin { geom_id: 0, slot: 0, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 1, slot: 1, baked: false, moving: false } +provenance mesh: MeshOrigin { geom_id: 2, slot: 2, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 3, slot: 3, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 4, slot: 1, baked: false, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 12343188411137242430, n_points: 8, n_indices: 20, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 1: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 17119738035130870988, n_points: 382, n_indices: 1560, n_uvs: None, smooth: false, material: 0 }), placements: 2, shared: false, displaced: false } +provenance mesh slot 2: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 1739488954094729910, n_points: 8, n_indices: 24, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 3: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 6096447469814747168, n_points: 400, n_indices: 1600, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/scene/camera1"), cameras: ["/scene/camera1"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/scene/camera1"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-93.image b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-93.image new file mode 100644 index 000000000..ba4884437 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-93.image @@ -0,0 +1 @@ +640x360 16spp clamp-off 52a1a46f3a46d230 diff --git a/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-94.digest b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-94.digest new file mode 100644 index 000000000..0e859a952 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-94.digest @@ -0,0 +1,40 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/scene/camera1") +camera: Camera { origin: Vec3A(0.0074343784, 1.9913422, 4.0133057), lower_left_corner: Vec3A(-8.881443, -3.0086517, -0.98669434), horizontal: Vec3A(17.777756, 0.0, 0.0), vertical: Vec3A(0.0, 9.999988, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: Some(Vec4(0.0, 0.0, -1.0, 3.9133058)), far: Some(Vec4(0.0, 0.0, 1.0, 9995.986)), planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: None +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 640, height: 360, region: PixelRect { x0: 0, y0: 0, x1: 640, y1: 360 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 12.700017, aperture: [25.4, 25.4], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 5.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/cornellbox.usda"], invisible_overrides: Some(0) } +layer: $DIR/cornellbox.usda +warning: Warning { code: AssetUnsupportedByHost, kind: Skipped, count: 1, prims: [], message: "No asset loader: environment map $DIR/sky_gradient.exr ignored — the dome falls back to its uniform colour. Use Scene::from_usd_with_assets to supply one." } +warning: Warning { code: MaterialFallbackDefault, kind: Skipped, count: 1, prims: ["/scene/Looks/initialShadingGroup"], message: "Material /scene/Looks/initialShadingGroup has no surface shader — using default grey OpenPBR" } +lights: 1 +light 0: dome name Some("/scene/Sky") lpe None pmf 1.0 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 5 geometries, PrimitiveBreakdown { triangles: 822, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 2 } top level, PrimitiveBreakdown { triangles: 1582, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 2 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 4.0 motion [] pieces all=10:88b22fc3345d5b05 camera=10:88b22fc3345d5b05 shadow=10:88b22fc3345d5b05 indirect=10:88b22fc3345d5b05 +geom 1: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.2 motion [] pieces all=760:c2b60a75c52c78b9 camera=760:c2b60a75c52c78b9 shadow=760:c2b60a75c52c78b9 indirect=760:c2b60a75c52c78b9 +geom 2: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=12:94a297badef437e1 camera=12:94a297badef437e1 shadow=12:94a297badef437e1 indirect=12:94a297badef437e1 +geom 3: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.25 motion [] pieces all=800:4a8c9f44d777e131 camera=800:4a8c9f44d777e131 shadow=800:4a8c9f44d777e131 indirect=800:4a8c9f44d777e131 +geom 4: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.3585339 motion [] pieces all=760:2344ecf63e12c441 camera=760:2344ecf63e12c441 shadow=760:2344ecf63e12c441 indirect=760:2344ecf63e12c441 +provenance material /scene/Looks/initialShadingGroup: MaterialOrigin { slots: [0, 1, 2, 3, 4], displaced: false } +provenance light /scene/Sky: LightOrigin { index: 0, geoms: 0..0 } +provenance geometry 0..1: /scene/pCube1 +provenance geometry 1..2: /scene/pSphere1 +provenance geometry 2..3: /scene/pCube2 +provenance geometry 3..4: /scene/pTorus1 +provenance geometry 4..5: /scene/pSphere2 +provenance mesh: MeshOrigin { geom_id: 0, slot: 0, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 1, slot: 1, baked: false, moving: false } +provenance mesh: MeshOrigin { geom_id: 2, slot: 2, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 3, slot: 3, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 4, slot: 1, baked: false, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 12343188411137242430, n_points: 8, n_indices: 20, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 1: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 17119738035130870988, n_points: 382, n_indices: 1560, n_uvs: None, smooth: false, material: 0 }), placements: 2, shared: false, displaced: false } +provenance mesh slot 2: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 1739488954094729910, n_points: 8, n_indices: 24, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 3: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 6096447469814747168, n_points: 400, n_indices: 1600, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/scene/camera1"), cameras: ["/scene/camera1"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/scene/camera1"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-94.image b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-94.image new file mode 100644 index 000000000..ba4884437 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-94.image @@ -0,0 +1 @@ +640x360 16spp clamp-off 52a1a46f3a46d230 diff --git a/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-95.digest b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-95.digest new file mode 100644 index 000000000..0e859a952 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-95.digest @@ -0,0 +1,40 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/scene/camera1") +camera: Camera { origin: Vec3A(0.0074343784, 1.9913422, 4.0133057), lower_left_corner: Vec3A(-8.881443, -3.0086517, -0.98669434), horizontal: Vec3A(17.777756, 0.0, 0.0), vertical: Vec3A(0.0, 9.999988, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: Some(Vec4(0.0, 0.0, -1.0, 3.9133058)), far: Some(Vec4(0.0, 0.0, 1.0, 9995.986)), planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: None +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 640, height: 360, region: PixelRect { x0: 0, y0: 0, x1: 640, y1: 360 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 12.700017, aperture: [25.4, 25.4], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 5.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/cornellbox.usda"], invisible_overrides: Some(0) } +layer: $DIR/cornellbox.usda +warning: Warning { code: AssetUnsupportedByHost, kind: Skipped, count: 1, prims: [], message: "No asset loader: environment map $DIR/sky_gradient.exr ignored — the dome falls back to its uniform colour. Use Scene::from_usd_with_assets to supply one." } +warning: Warning { code: MaterialFallbackDefault, kind: Skipped, count: 1, prims: ["/scene/Looks/initialShadingGroup"], message: "Material /scene/Looks/initialShadingGroup has no surface shader — using default grey OpenPBR" } +lights: 1 +light 0: dome name Some("/scene/Sky") lpe None pmf 1.0 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 5 geometries, PrimitiveBreakdown { triangles: 822, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 2 } top level, PrimitiveBreakdown { triangles: 1582, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 2 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 4.0 motion [] pieces all=10:88b22fc3345d5b05 camera=10:88b22fc3345d5b05 shadow=10:88b22fc3345d5b05 indirect=10:88b22fc3345d5b05 +geom 1: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.2 motion [] pieces all=760:c2b60a75c52c78b9 camera=760:c2b60a75c52c78b9 shadow=760:c2b60a75c52c78b9 indirect=760:c2b60a75c52c78b9 +geom 2: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=12:94a297badef437e1 camera=12:94a297badef437e1 shadow=12:94a297badef437e1 indirect=12:94a297badef437e1 +geom 3: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.25 motion [] pieces all=800:4a8c9f44d777e131 camera=800:4a8c9f44d777e131 shadow=800:4a8c9f44d777e131 indirect=800:4a8c9f44d777e131 +geom 4: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.3585339 motion [] pieces all=760:2344ecf63e12c441 camera=760:2344ecf63e12c441 shadow=760:2344ecf63e12c441 indirect=760:2344ecf63e12c441 +provenance material /scene/Looks/initialShadingGroup: MaterialOrigin { slots: [0, 1, 2, 3, 4], displaced: false } +provenance light /scene/Sky: LightOrigin { index: 0, geoms: 0..0 } +provenance geometry 0..1: /scene/pCube1 +provenance geometry 1..2: /scene/pSphere1 +provenance geometry 2..3: /scene/pCube2 +provenance geometry 3..4: /scene/pTorus1 +provenance geometry 4..5: /scene/pSphere2 +provenance mesh: MeshOrigin { geom_id: 0, slot: 0, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 1, slot: 1, baked: false, moving: false } +provenance mesh: MeshOrigin { geom_id: 2, slot: 2, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 3, slot: 3, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 4, slot: 1, baked: false, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 12343188411137242430, n_points: 8, n_indices: 20, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 1: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 17119738035130870988, n_points: 382, n_indices: 1560, n_uvs: None, smooth: false, material: 0 }), placements: 2, shared: false, displaced: false } +provenance mesh slot 2: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 1739488954094729910, n_points: 8, n_indices: 24, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 3: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 6096447469814747168, n_points: 400, n_indices: 1600, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/scene/camera1"), cameras: ["/scene/camera1"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/scene/camera1"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-95.image b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-95.image new file mode 100644 index 000000000..ba4884437 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-95.image @@ -0,0 +1 @@ +640x360 16spp clamp-off 52a1a46f3a46d230 diff --git a/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-96.digest b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-96.digest new file mode 100644 index 000000000..0e859a952 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-96.digest @@ -0,0 +1,40 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/scene/camera1") +camera: Camera { origin: Vec3A(0.0074343784, 1.9913422, 4.0133057), lower_left_corner: Vec3A(-8.881443, -3.0086517, -0.98669434), horizontal: Vec3A(17.777756, 0.0, 0.0), vertical: Vec3A(0.0, 9.999988, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: Some(Vec4(0.0, 0.0, -1.0, 3.9133058)), far: Some(Vec4(0.0, 0.0, 1.0, 9995.986)), planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: None +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 640, height: 360, region: PixelRect { x0: 0, y0: 0, x1: 640, y1: 360 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 12.700017, aperture: [25.4, 25.4], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 5.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/cornellbox.usda"], invisible_overrides: Some(0) } +layer: $DIR/cornellbox.usda +warning: Warning { code: AssetUnsupportedByHost, kind: Skipped, count: 1, prims: [], message: "No asset loader: environment map $DIR/sky_gradient.exr ignored — the dome falls back to its uniform colour. Use Scene::from_usd_with_assets to supply one." } +warning: Warning { code: MaterialFallbackDefault, kind: Skipped, count: 1, prims: ["/scene/Looks/initialShadingGroup"], message: "Material /scene/Looks/initialShadingGroup has no surface shader — using default grey OpenPBR" } +lights: 1 +light 0: dome name Some("/scene/Sky") lpe None pmf 1.0 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 5 geometries, PrimitiveBreakdown { triangles: 822, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 2 } top level, PrimitiveBreakdown { triangles: 1582, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 2 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 4.0 motion [] pieces all=10:88b22fc3345d5b05 camera=10:88b22fc3345d5b05 shadow=10:88b22fc3345d5b05 indirect=10:88b22fc3345d5b05 +geom 1: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.2 motion [] pieces all=760:c2b60a75c52c78b9 camera=760:c2b60a75c52c78b9 shadow=760:c2b60a75c52c78b9 indirect=760:c2b60a75c52c78b9 +geom 2: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=12:94a297badef437e1 camera=12:94a297badef437e1 shadow=12:94a297badef437e1 indirect=12:94a297badef437e1 +geom 3: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.25 motion [] pieces all=800:4a8c9f44d777e131 camera=800:4a8c9f44d777e131 shadow=800:4a8c9f44d777e131 indirect=800:4a8c9f44d777e131 +geom 4: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.3585339 motion [] pieces all=760:2344ecf63e12c441 camera=760:2344ecf63e12c441 shadow=760:2344ecf63e12c441 indirect=760:2344ecf63e12c441 +provenance material /scene/Looks/initialShadingGroup: MaterialOrigin { slots: [0, 1, 2, 3, 4], displaced: false } +provenance light /scene/Sky: LightOrigin { index: 0, geoms: 0..0 } +provenance geometry 0..1: /scene/pCube1 +provenance geometry 1..2: /scene/pSphere1 +provenance geometry 2..3: /scene/pCube2 +provenance geometry 3..4: /scene/pTorus1 +provenance geometry 4..5: /scene/pSphere2 +provenance mesh: MeshOrigin { geom_id: 0, slot: 0, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 1, slot: 1, baked: false, moving: false } +provenance mesh: MeshOrigin { geom_id: 2, slot: 2, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 3, slot: 3, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 4, slot: 1, baked: false, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 12343188411137242430, n_points: 8, n_indices: 20, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 1: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 17119738035130870988, n_points: 382, n_indices: 1560, n_uvs: None, smooth: false, material: 0 }), placements: 2, shared: false, displaced: false } +provenance mesh slot 2: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 1739488954094729910, n_points: 8, n_indices: 24, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 3: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 6096447469814747168, n_points: 400, n_indices: 1600, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/scene/camera1"), cameras: ["/scene/camera1"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/scene/camera1"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-96.image b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-96.image new file mode 100644 index 000000000..ba4884437 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-96.image @@ -0,0 +1 @@ +640x360 16spp clamp-off 52a1a46f3a46d230 diff --git a/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-97.digest b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-97.digest new file mode 100644 index 000000000..0e859a952 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-97.digest @@ -0,0 +1,40 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/scene/camera1") +camera: Camera { origin: Vec3A(0.0074343784, 1.9913422, 4.0133057), lower_left_corner: Vec3A(-8.881443, -3.0086517, -0.98669434), horizontal: Vec3A(17.777756, 0.0, 0.0), vertical: Vec3A(0.0, 9.999988, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: Some(Vec4(0.0, 0.0, -1.0, 3.9133058)), far: Some(Vec4(0.0, 0.0, 1.0, 9995.986)), planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: None +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 640, height: 360, region: PixelRect { x0: 0, y0: 0, x1: 640, y1: 360 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 12.700017, aperture: [25.4, 25.4], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 5.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/cornellbox.usda"], invisible_overrides: Some(0) } +layer: $DIR/cornellbox.usda +warning: Warning { code: AssetUnsupportedByHost, kind: Skipped, count: 1, prims: [], message: "No asset loader: environment map $DIR/sky_gradient.exr ignored — the dome falls back to its uniform colour. Use Scene::from_usd_with_assets to supply one." } +warning: Warning { code: MaterialFallbackDefault, kind: Skipped, count: 1, prims: ["/scene/Looks/initialShadingGroup"], message: "Material /scene/Looks/initialShadingGroup has no surface shader — using default grey OpenPBR" } +lights: 1 +light 0: dome name Some("/scene/Sky") lpe None pmf 1.0 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 5 geometries, PrimitiveBreakdown { triangles: 822, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 2 } top level, PrimitiveBreakdown { triangles: 1582, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 2 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 4.0 motion [] pieces all=10:88b22fc3345d5b05 camera=10:88b22fc3345d5b05 shadow=10:88b22fc3345d5b05 indirect=10:88b22fc3345d5b05 +geom 1: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.2 motion [] pieces all=760:c2b60a75c52c78b9 camera=760:c2b60a75c52c78b9 shadow=760:c2b60a75c52c78b9 indirect=760:c2b60a75c52c78b9 +geom 2: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=12:94a297badef437e1 camera=12:94a297badef437e1 shadow=12:94a297badef437e1 indirect=12:94a297badef437e1 +geom 3: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.25 motion [] pieces all=800:4a8c9f44d777e131 camera=800:4a8c9f44d777e131 shadow=800:4a8c9f44d777e131 indirect=800:4a8c9f44d777e131 +geom 4: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.3585339 motion [] pieces all=760:2344ecf63e12c441 camera=760:2344ecf63e12c441 shadow=760:2344ecf63e12c441 indirect=760:2344ecf63e12c441 +provenance material /scene/Looks/initialShadingGroup: MaterialOrigin { slots: [0, 1, 2, 3, 4], displaced: false } +provenance light /scene/Sky: LightOrigin { index: 0, geoms: 0..0 } +provenance geometry 0..1: /scene/pCube1 +provenance geometry 1..2: /scene/pSphere1 +provenance geometry 2..3: /scene/pCube2 +provenance geometry 3..4: /scene/pTorus1 +provenance geometry 4..5: /scene/pSphere2 +provenance mesh: MeshOrigin { geom_id: 0, slot: 0, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 1, slot: 1, baked: false, moving: false } +provenance mesh: MeshOrigin { geom_id: 2, slot: 2, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 3, slot: 3, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 4, slot: 1, baked: false, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 12343188411137242430, n_points: 8, n_indices: 20, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 1: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 17119738035130870988, n_points: 382, n_indices: 1560, n_uvs: None, smooth: false, material: 0 }), placements: 2, shared: false, displaced: false } +provenance mesh slot 2: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 1739488954094729910, n_points: 8, n_indices: 24, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 3: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 6096447469814747168, n_points: 400, n_indices: 1600, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/scene/camera1"), cameras: ["/scene/camera1"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/scene/camera1"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-97.image b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-97.image new file mode 100644 index 000000000..ba4884437 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-97.image @@ -0,0 +1 @@ +640x360 16spp clamp-off 52a1a46f3a46d230 diff --git a/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-98.digest b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-98.digest new file mode 100644 index 000000000..0e859a952 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-98.digest @@ -0,0 +1,40 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/scene/camera1") +camera: Camera { origin: Vec3A(0.0074343784, 1.9913422, 4.0133057), lower_left_corner: Vec3A(-8.881443, -3.0086517, -0.98669434), horizontal: Vec3A(17.777756, 0.0, 0.0), vertical: Vec3A(0.0, 9.999988, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: Some(Vec4(0.0, 0.0, -1.0, 3.9133058)), far: Some(Vec4(0.0, 0.0, 1.0, 9995.986)), planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: None +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 640, height: 360, region: PixelRect { x0: 0, y0: 0, x1: 640, y1: 360 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 12.700017, aperture: [25.4, 25.4], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 5.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/cornellbox.usda"], invisible_overrides: Some(0) } +layer: $DIR/cornellbox.usda +warning: Warning { code: AssetUnsupportedByHost, kind: Skipped, count: 1, prims: [], message: "No asset loader: environment map $DIR/sky_gradient.exr ignored — the dome falls back to its uniform colour. Use Scene::from_usd_with_assets to supply one." } +warning: Warning { code: MaterialFallbackDefault, kind: Skipped, count: 1, prims: ["/scene/Looks/initialShadingGroup"], message: "Material /scene/Looks/initialShadingGroup has no surface shader — using default grey OpenPBR" } +lights: 1 +light 0: dome name Some("/scene/Sky") lpe None pmf 1.0 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 5 geometries, PrimitiveBreakdown { triangles: 822, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 2 } top level, PrimitiveBreakdown { triangles: 1582, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 2 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 4.0 motion [] pieces all=10:88b22fc3345d5b05 camera=10:88b22fc3345d5b05 shadow=10:88b22fc3345d5b05 indirect=10:88b22fc3345d5b05 +geom 1: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.2 motion [] pieces all=760:c2b60a75c52c78b9 camera=760:c2b60a75c52c78b9 shadow=760:c2b60a75c52c78b9 indirect=760:c2b60a75c52c78b9 +geom 2: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=12:94a297badef437e1 camera=12:94a297badef437e1 shadow=12:94a297badef437e1 indirect=12:94a297badef437e1 +geom 3: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.25 motion [] pieces all=800:4a8c9f44d777e131 camera=800:4a8c9f44d777e131 shadow=800:4a8c9f44d777e131 indirect=800:4a8c9f44d777e131 +geom 4: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.3585339 motion [] pieces all=760:2344ecf63e12c441 camera=760:2344ecf63e12c441 shadow=760:2344ecf63e12c441 indirect=760:2344ecf63e12c441 +provenance material /scene/Looks/initialShadingGroup: MaterialOrigin { slots: [0, 1, 2, 3, 4], displaced: false } +provenance light /scene/Sky: LightOrigin { index: 0, geoms: 0..0 } +provenance geometry 0..1: /scene/pCube1 +provenance geometry 1..2: /scene/pSphere1 +provenance geometry 2..3: /scene/pCube2 +provenance geometry 3..4: /scene/pTorus1 +provenance geometry 4..5: /scene/pSphere2 +provenance mesh: MeshOrigin { geom_id: 0, slot: 0, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 1, slot: 1, baked: false, moving: false } +provenance mesh: MeshOrigin { geom_id: 2, slot: 2, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 3, slot: 3, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 4, slot: 1, baked: false, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 12343188411137242430, n_points: 8, n_indices: 20, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 1: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 17119738035130870988, n_points: 382, n_indices: 1560, n_uvs: None, smooth: false, material: 0 }), placements: 2, shared: false, displaced: false } +provenance mesh slot 2: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 1739488954094729910, n_points: 8, n_indices: 24, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 3: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 6096447469814747168, n_points: 400, n_indices: 1600, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/scene/camera1"), cameras: ["/scene/camera1"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/scene/camera1"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-98.image b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-98.image new file mode 100644 index 000000000..ba4884437 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-98.image @@ -0,0 +1 @@ +640x360 16spp clamp-off 52a1a46f3a46d230 diff --git a/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-99.digest b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-99.digest new file mode 100644 index 000000000..0e859a952 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-99.digest @@ -0,0 +1,40 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/scene/camera1") +camera: Camera { origin: Vec3A(0.0074343784, 1.9913422, 4.0133057), lower_left_corner: Vec3A(-8.881443, -3.0086517, -0.98669434), horizontal: Vec3A(17.777756, 0.0, 0.0), vertical: Vec3A(0.0, 9.999988, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: Some(Vec4(0.0, 0.0, -1.0, 3.9133058)), far: Some(Vec4(0.0, 0.0, 1.0, 9995.986)), planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: None +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 640, height: 360, region: PixelRect { x0: 0, y0: 0, x1: 640, y1: 360 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 12.700017, aperture: [25.4, 25.4], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 5.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/cornellbox.usda"], invisible_overrides: Some(0) } +layer: $DIR/cornellbox.usda +warning: Warning { code: AssetUnsupportedByHost, kind: Skipped, count: 1, prims: [], message: "No asset loader: environment map $DIR/sky_gradient.exr ignored — the dome falls back to its uniform colour. Use Scene::from_usd_with_assets to supply one." } +warning: Warning { code: MaterialFallbackDefault, kind: Skipped, count: 1, prims: ["/scene/Looks/initialShadingGroup"], message: "Material /scene/Looks/initialShadingGroup has no surface shader — using default grey OpenPBR" } +lights: 1 +light 0: dome name Some("/scene/Sky") lpe None pmf 1.0 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 5 geometries, PrimitiveBreakdown { triangles: 822, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 2 } top level, PrimitiveBreakdown { triangles: 1582, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 2 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 4.0 motion [] pieces all=10:88b22fc3345d5b05 camera=10:88b22fc3345d5b05 shadow=10:88b22fc3345d5b05 indirect=10:88b22fc3345d5b05 +geom 1: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.2 motion [] pieces all=760:c2b60a75c52c78b9 camera=760:c2b60a75c52c78b9 shadow=760:c2b60a75c52c78b9 indirect=760:c2b60a75c52c78b9 +geom 2: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=12:94a297badef437e1 camera=12:94a297badef437e1 shadow=12:94a297badef437e1 indirect=12:94a297badef437e1 +geom 3: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.25 motion [] pieces all=800:4a8c9f44d777e131 camera=800:4a8c9f44d777e131 shadow=800:4a8c9f44d777e131 indirect=800:4a8c9f44d777e131 +geom 4: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.3585339 motion [] pieces all=760:2344ecf63e12c441 camera=760:2344ecf63e12c441 shadow=760:2344ecf63e12c441 indirect=760:2344ecf63e12c441 +provenance material /scene/Looks/initialShadingGroup: MaterialOrigin { slots: [0, 1, 2, 3, 4], displaced: false } +provenance light /scene/Sky: LightOrigin { index: 0, geoms: 0..0 } +provenance geometry 0..1: /scene/pCube1 +provenance geometry 1..2: /scene/pSphere1 +provenance geometry 2..3: /scene/pCube2 +provenance geometry 3..4: /scene/pTorus1 +provenance geometry 4..5: /scene/pSphere2 +provenance mesh: MeshOrigin { geom_id: 0, slot: 0, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 1, slot: 1, baked: false, moving: false } +provenance mesh: MeshOrigin { geom_id: 2, slot: 2, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 3, slot: 3, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 4, slot: 1, baked: false, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 12343188411137242430, n_points: 8, n_indices: 20, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 1: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 17119738035130870988, n_points: 382, n_indices: 1560, n_uvs: None, smooth: false, material: 0 }), placements: 2, shared: false, displaced: false } +provenance mesh slot 2: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 1739488954094729910, n_points: 8, n_indices: 24, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 3: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 6096447469814747168, n_points: 400, n_indices: 1600, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/scene/camera1"), cameras: ["/scene/camera1"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/scene/camera1"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-99.image b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-99.image new file mode 100644 index 000000000..ba4884437 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-9c84bf52ec0561b1-99.image @@ -0,0 +1 @@ +640x360 16spp clamp-off 52a1a46f3a46d230 diff --git a/crates/crust-core/tests/data/import_baselines/cornellbox_usda-a06c636245c00028-1.digest b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-a06c636245c00028-1.digest new file mode 100644 index 000000000..1d5ab0cab --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-a06c636245c00028-1.digest @@ -0,0 +1,39 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/scene/camera1") +camera: Camera { origin: Vec3A(0.0074343784, 1.9913422, 4.0133057), lower_left_corner: Vec3A(-8.881443, -3.0086517, -0.98669434), horizontal: Vec3A(17.777756, 0.0, 0.0), vertical: Vec3A(0.0, 9.999988, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: Some(Vec4(0.0, 0.0, -1.0, 3.9133058)), far: Some(Vec4(0.0, 0.0, 1.0, 9995.986)), planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: None +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 640, height: 360, region: PixelRect { x0: 0, y0: 0, x1: 640, y1: 360 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 12.700017, aperture: [25.4, 25.4], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 5.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/cornellbox.usda"], invisible_overrides: Some(0) } +layer: $DIR/cornellbox.usda +warning: Warning { code: MaterialFallbackDefault, kind: Skipped, count: 1, prims: ["/scene/Looks/initialShadingGroup"], message: "Material /scene/Looks/initialShadingGroup has no surface shader — using default grey OpenPBR" } +lights: 1 +light 0: dome name Some("/scene/Sky") lpe None pmf 1.0 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 5 geometries, PrimitiveBreakdown { triangles: 822, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 2 } top level, PrimitiveBreakdown { triangles: 1582, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 2 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 4.0 motion [] pieces all=10:88b22fc3345d5b05 camera=10:88b22fc3345d5b05 shadow=10:88b22fc3345d5b05 indirect=10:88b22fc3345d5b05 +geom 1: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.2 motion [] pieces all=760:c2b60a75c52c78b9 camera=760:c2b60a75c52c78b9 shadow=760:c2b60a75c52c78b9 indirect=760:c2b60a75c52c78b9 +geom 2: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=12:94a297badef437e1 camera=12:94a297badef437e1 shadow=12:94a297badef437e1 indirect=12:94a297badef437e1 +geom 3: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.25 motion [] pieces all=800:4a8c9f44d777e131 camera=800:4a8c9f44d777e131 shadow=800:4a8c9f44d777e131 indirect=800:4a8c9f44d777e131 +geom 4: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.3585339 motion [] pieces all=760:2344ecf63e12c441 camera=760:2344ecf63e12c441 shadow=760:2344ecf63e12c441 indirect=760:2344ecf63e12c441 +provenance material /scene/Looks/initialShadingGroup: MaterialOrigin { slots: [0, 1, 2, 3, 4], displaced: false } +provenance light /scene/Sky: LightOrigin { index: 0, geoms: 0..0 } +provenance geometry 0..1: /scene/pCube1 +provenance geometry 1..2: /scene/pSphere1 +provenance geometry 2..3: /scene/pCube2 +provenance geometry 3..4: /scene/pTorus1 +provenance geometry 4..5: /scene/pSphere2 +provenance mesh: MeshOrigin { geom_id: 0, slot: 0, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 1, slot: 1, baked: false, moving: false } +provenance mesh: MeshOrigin { geom_id: 2, slot: 2, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 3, slot: 3, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 4, slot: 1, baked: false, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 12343188411137242430, n_points: 8, n_indices: 20, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 1: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 17119738035130870988, n_points: 382, n_indices: 1560, n_uvs: None, smooth: false, material: 0 }), placements: 2, shared: false, displaced: false } +provenance mesh slot 2: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 1739488954094729910, n_points: 8, n_indices: 24, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 3: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 6096447469814747168, n_points: 400, n_indices: 1600, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: true, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/scene/camera1"), cameras: ["/scene/camera1"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/scene/camera1"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/cornellbox_usda-a06c636245c00028-1.image b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-a06c636245c00028-1.image new file mode 100644 index 000000000..7172edbfe --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-a06c636245c00028-1.image @@ -0,0 +1 @@ +640x360 16spp clamp-off 64ede904b11bab22 diff --git a/crates/crust-core/tests/data/import_baselines/cornellbox_usda-a18d02fea0ac9ae3-1.digest b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-a18d02fea0ac9ae3-1.digest new file mode 100644 index 000000000..0e859a952 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-a18d02fea0ac9ae3-1.digest @@ -0,0 +1,40 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/scene/camera1") +camera: Camera { origin: Vec3A(0.0074343784, 1.9913422, 4.0133057), lower_left_corner: Vec3A(-8.881443, -3.0086517, -0.98669434), horizontal: Vec3A(17.777756, 0.0, 0.0), vertical: Vec3A(0.0, 9.999988, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: Some(Vec4(0.0, 0.0, -1.0, 3.9133058)), far: Some(Vec4(0.0, 0.0, 1.0, 9995.986)), planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: None +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 640, height: 360, region: PixelRect { x0: 0, y0: 0, x1: 640, y1: 360 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 12.700017, aperture: [25.4, 25.4], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 5.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/cornellbox.usda"], invisible_overrides: Some(0) } +layer: $DIR/cornellbox.usda +warning: Warning { code: AssetUnsupportedByHost, kind: Skipped, count: 1, prims: [], message: "No asset loader: environment map $DIR/sky_gradient.exr ignored — the dome falls back to its uniform colour. Use Scene::from_usd_with_assets to supply one." } +warning: Warning { code: MaterialFallbackDefault, kind: Skipped, count: 1, prims: ["/scene/Looks/initialShadingGroup"], message: "Material /scene/Looks/initialShadingGroup has no surface shader — using default grey OpenPBR" } +lights: 1 +light 0: dome name Some("/scene/Sky") lpe None pmf 1.0 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 5 geometries, PrimitiveBreakdown { triangles: 822, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 2 } top level, PrimitiveBreakdown { triangles: 1582, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 2 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 4.0 motion [] pieces all=10:88b22fc3345d5b05 camera=10:88b22fc3345d5b05 shadow=10:88b22fc3345d5b05 indirect=10:88b22fc3345d5b05 +geom 1: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.2 motion [] pieces all=760:c2b60a75c52c78b9 camera=760:c2b60a75c52c78b9 shadow=760:c2b60a75c52c78b9 indirect=760:c2b60a75c52c78b9 +geom 2: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=12:94a297badef437e1 camera=12:94a297badef437e1 shadow=12:94a297badef437e1 indirect=12:94a297badef437e1 +geom 3: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.25 motion [] pieces all=800:4a8c9f44d777e131 camera=800:4a8c9f44d777e131 shadow=800:4a8c9f44d777e131 indirect=800:4a8c9f44d777e131 +geom 4: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.3585339 motion [] pieces all=760:2344ecf63e12c441 camera=760:2344ecf63e12c441 shadow=760:2344ecf63e12c441 indirect=760:2344ecf63e12c441 +provenance material /scene/Looks/initialShadingGroup: MaterialOrigin { slots: [0, 1, 2, 3, 4], displaced: false } +provenance light /scene/Sky: LightOrigin { index: 0, geoms: 0..0 } +provenance geometry 0..1: /scene/pCube1 +provenance geometry 1..2: /scene/pSphere1 +provenance geometry 2..3: /scene/pCube2 +provenance geometry 3..4: /scene/pTorus1 +provenance geometry 4..5: /scene/pSphere2 +provenance mesh: MeshOrigin { geom_id: 0, slot: 0, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 1, slot: 1, baked: false, moving: false } +provenance mesh: MeshOrigin { geom_id: 2, slot: 2, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 3, slot: 3, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 4, slot: 1, baked: false, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 12343188411137242430, n_points: 8, n_indices: 20, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 1: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 17119738035130870988, n_points: 382, n_indices: 1560, n_uvs: None, smooth: false, material: 0 }), placements: 2, shared: false, displaced: false } +provenance mesh slot 2: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 1739488954094729910, n_points: 8, n_indices: 24, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 3: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 6096447469814747168, n_points: 400, n_indices: 1600, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/scene/camera1"), cameras: ["/scene/camera1"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/scene/camera1"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/cornellbox_usda-a18d02fea0ac9ae3-1.image b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-a18d02fea0ac9ae3-1.image new file mode 100644 index 000000000..ba4884437 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-a18d02fea0ac9ae3-1.image @@ -0,0 +1 @@ +640x360 16spp clamp-off 52a1a46f3a46d230 diff --git a/crates/crust-core/tests/data/import_baselines/cornellbox_usda-a18d02fea0ac9ae3-2.digest b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-a18d02fea0ac9ae3-2.digest new file mode 100644 index 000000000..0e859a952 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-a18d02fea0ac9ae3-2.digest @@ -0,0 +1,40 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/scene/camera1") +camera: Camera { origin: Vec3A(0.0074343784, 1.9913422, 4.0133057), lower_left_corner: Vec3A(-8.881443, -3.0086517, -0.98669434), horizontal: Vec3A(17.777756, 0.0, 0.0), vertical: Vec3A(0.0, 9.999988, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: Some(Vec4(0.0, 0.0, -1.0, 3.9133058)), far: Some(Vec4(0.0, 0.0, 1.0, 9995.986)), planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: None +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 640, height: 360, region: PixelRect { x0: 0, y0: 0, x1: 640, y1: 360 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 12.700017, aperture: [25.4, 25.4], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 5.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/cornellbox.usda"], invisible_overrides: Some(0) } +layer: $DIR/cornellbox.usda +warning: Warning { code: AssetUnsupportedByHost, kind: Skipped, count: 1, prims: [], message: "No asset loader: environment map $DIR/sky_gradient.exr ignored — the dome falls back to its uniform colour. Use Scene::from_usd_with_assets to supply one." } +warning: Warning { code: MaterialFallbackDefault, kind: Skipped, count: 1, prims: ["/scene/Looks/initialShadingGroup"], message: "Material /scene/Looks/initialShadingGroup has no surface shader — using default grey OpenPBR" } +lights: 1 +light 0: dome name Some("/scene/Sky") lpe None pmf 1.0 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 5 geometries, PrimitiveBreakdown { triangles: 822, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 2 } top level, PrimitiveBreakdown { triangles: 1582, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 2 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 4.0 motion [] pieces all=10:88b22fc3345d5b05 camera=10:88b22fc3345d5b05 shadow=10:88b22fc3345d5b05 indirect=10:88b22fc3345d5b05 +geom 1: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.2 motion [] pieces all=760:c2b60a75c52c78b9 camera=760:c2b60a75c52c78b9 shadow=760:c2b60a75c52c78b9 indirect=760:c2b60a75c52c78b9 +geom 2: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=12:94a297badef437e1 camera=12:94a297badef437e1 shadow=12:94a297badef437e1 indirect=12:94a297badef437e1 +geom 3: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.25 motion [] pieces all=800:4a8c9f44d777e131 camera=800:4a8c9f44d777e131 shadow=800:4a8c9f44d777e131 indirect=800:4a8c9f44d777e131 +geom 4: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.3585339 motion [] pieces all=760:2344ecf63e12c441 camera=760:2344ecf63e12c441 shadow=760:2344ecf63e12c441 indirect=760:2344ecf63e12c441 +provenance material /scene/Looks/initialShadingGroup: MaterialOrigin { slots: [0, 1, 2, 3, 4], displaced: false } +provenance light /scene/Sky: LightOrigin { index: 0, geoms: 0..0 } +provenance geometry 0..1: /scene/pCube1 +provenance geometry 1..2: /scene/pSphere1 +provenance geometry 2..3: /scene/pCube2 +provenance geometry 3..4: /scene/pTorus1 +provenance geometry 4..5: /scene/pSphere2 +provenance mesh: MeshOrigin { geom_id: 0, slot: 0, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 1, slot: 1, baked: false, moving: false } +provenance mesh: MeshOrigin { geom_id: 2, slot: 2, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 3, slot: 3, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 4, slot: 1, baked: false, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 12343188411137242430, n_points: 8, n_indices: 20, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 1: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 17119738035130870988, n_points: 382, n_indices: 1560, n_uvs: None, smooth: false, material: 0 }), placements: 2, shared: false, displaced: false } +provenance mesh slot 2: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 1739488954094729910, n_points: 8, n_indices: 24, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 3: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 6096447469814747168, n_points: 400, n_indices: 1600, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/scene/camera1"), cameras: ["/scene/camera1"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/scene/camera1"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/cornellbox_usda-a18d02fea0ac9ae3-2.image b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-a18d02fea0ac9ae3-2.image new file mode 100644 index 000000000..ba4884437 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-a18d02fea0ac9ae3-2.image @@ -0,0 +1 @@ +640x360 16spp clamp-off 52a1a46f3a46d230 diff --git a/crates/crust-core/tests/data/import_baselines/cornellbox_usda-a18d02fea0ac9ae3-3.digest b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-a18d02fea0ac9ae3-3.digest new file mode 100644 index 000000000..0e859a952 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-a18d02fea0ac9ae3-3.digest @@ -0,0 +1,40 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/scene/camera1") +camera: Camera { origin: Vec3A(0.0074343784, 1.9913422, 4.0133057), lower_left_corner: Vec3A(-8.881443, -3.0086517, -0.98669434), horizontal: Vec3A(17.777756, 0.0, 0.0), vertical: Vec3A(0.0, 9.999988, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: Some(Vec4(0.0, 0.0, -1.0, 3.9133058)), far: Some(Vec4(0.0, 0.0, 1.0, 9995.986)), planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: None +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 640, height: 360, region: PixelRect { x0: 0, y0: 0, x1: 640, y1: 360 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 12.700017, aperture: [25.4, 25.4], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 5.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/cornellbox.usda"], invisible_overrides: Some(0) } +layer: $DIR/cornellbox.usda +warning: Warning { code: AssetUnsupportedByHost, kind: Skipped, count: 1, prims: [], message: "No asset loader: environment map $DIR/sky_gradient.exr ignored — the dome falls back to its uniform colour. Use Scene::from_usd_with_assets to supply one." } +warning: Warning { code: MaterialFallbackDefault, kind: Skipped, count: 1, prims: ["/scene/Looks/initialShadingGroup"], message: "Material /scene/Looks/initialShadingGroup has no surface shader — using default grey OpenPBR" } +lights: 1 +light 0: dome name Some("/scene/Sky") lpe None pmf 1.0 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 5 geometries, PrimitiveBreakdown { triangles: 822, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 2 } top level, PrimitiveBreakdown { triangles: 1582, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 2 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 4.0 motion [] pieces all=10:88b22fc3345d5b05 camera=10:88b22fc3345d5b05 shadow=10:88b22fc3345d5b05 indirect=10:88b22fc3345d5b05 +geom 1: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.2 motion [] pieces all=760:c2b60a75c52c78b9 camera=760:c2b60a75c52c78b9 shadow=760:c2b60a75c52c78b9 indirect=760:c2b60a75c52c78b9 +geom 2: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=12:94a297badef437e1 camera=12:94a297badef437e1 shadow=12:94a297badef437e1 indirect=12:94a297badef437e1 +geom 3: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.25 motion [] pieces all=800:4a8c9f44d777e131 camera=800:4a8c9f44d777e131 shadow=800:4a8c9f44d777e131 indirect=800:4a8c9f44d777e131 +geom 4: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.3585339 motion [] pieces all=760:2344ecf63e12c441 camera=760:2344ecf63e12c441 shadow=760:2344ecf63e12c441 indirect=760:2344ecf63e12c441 +provenance material /scene/Looks/initialShadingGroup: MaterialOrigin { slots: [0, 1, 2, 3, 4], displaced: false } +provenance light /scene/Sky: LightOrigin { index: 0, geoms: 0..0 } +provenance geometry 0..1: /scene/pCube1 +provenance geometry 1..2: /scene/pSphere1 +provenance geometry 2..3: /scene/pCube2 +provenance geometry 3..4: /scene/pTorus1 +provenance geometry 4..5: /scene/pSphere2 +provenance mesh: MeshOrigin { geom_id: 0, slot: 0, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 1, slot: 1, baked: false, moving: false } +provenance mesh: MeshOrigin { geom_id: 2, slot: 2, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 3, slot: 3, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 4, slot: 1, baked: false, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 12343188411137242430, n_points: 8, n_indices: 20, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 1: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 17119738035130870988, n_points: 382, n_indices: 1560, n_uvs: None, smooth: false, material: 0 }), placements: 2, shared: false, displaced: false } +provenance mesh slot 2: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 1739488954094729910, n_points: 8, n_indices: 24, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 3: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 6096447469814747168, n_points: 400, n_indices: 1600, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/scene/camera1"), cameras: ["/scene/camera1"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/scene/camera1"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/cornellbox_usda-a18d02fea0ac9ae3-3.image b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-a18d02fea0ac9ae3-3.image new file mode 100644 index 000000000..ba4884437 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-a18d02fea0ac9ae3-3.image @@ -0,0 +1 @@ +640x360 16spp clamp-off 52a1a46f3a46d230 diff --git a/crates/crust-core/tests/data/import_baselines/cornellbox_usda-a18d02fea0ac9ae3-4.digest b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-a18d02fea0ac9ae3-4.digest new file mode 100644 index 000000000..0e859a952 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-a18d02fea0ac9ae3-4.digest @@ -0,0 +1,40 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/scene/camera1") +camera: Camera { origin: Vec3A(0.0074343784, 1.9913422, 4.0133057), lower_left_corner: Vec3A(-8.881443, -3.0086517, -0.98669434), horizontal: Vec3A(17.777756, 0.0, 0.0), vertical: Vec3A(0.0, 9.999988, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: Some(Vec4(0.0, 0.0, -1.0, 3.9133058)), far: Some(Vec4(0.0, 0.0, 1.0, 9995.986)), planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: None +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 640, height: 360, region: PixelRect { x0: 0, y0: 0, x1: 640, y1: 360 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 12.700017, aperture: [25.4, 25.4], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 5.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/cornellbox.usda"], invisible_overrides: Some(0) } +layer: $DIR/cornellbox.usda +warning: Warning { code: AssetUnsupportedByHost, kind: Skipped, count: 1, prims: [], message: "No asset loader: environment map $DIR/sky_gradient.exr ignored — the dome falls back to its uniform colour. Use Scene::from_usd_with_assets to supply one." } +warning: Warning { code: MaterialFallbackDefault, kind: Skipped, count: 1, prims: ["/scene/Looks/initialShadingGroup"], message: "Material /scene/Looks/initialShadingGroup has no surface shader — using default grey OpenPBR" } +lights: 1 +light 0: dome name Some("/scene/Sky") lpe None pmf 1.0 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 5 geometries, PrimitiveBreakdown { triangles: 822, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 2 } top level, PrimitiveBreakdown { triangles: 1582, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 2 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 4.0 motion [] pieces all=10:88b22fc3345d5b05 camera=10:88b22fc3345d5b05 shadow=10:88b22fc3345d5b05 indirect=10:88b22fc3345d5b05 +geom 1: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.2 motion [] pieces all=760:c2b60a75c52c78b9 camera=760:c2b60a75c52c78b9 shadow=760:c2b60a75c52c78b9 indirect=760:c2b60a75c52c78b9 +geom 2: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=12:94a297badef437e1 camera=12:94a297badef437e1 shadow=12:94a297badef437e1 indirect=12:94a297badef437e1 +geom 3: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.25 motion [] pieces all=800:4a8c9f44d777e131 camera=800:4a8c9f44d777e131 shadow=800:4a8c9f44d777e131 indirect=800:4a8c9f44d777e131 +geom 4: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.3585339 motion [] pieces all=760:2344ecf63e12c441 camera=760:2344ecf63e12c441 shadow=760:2344ecf63e12c441 indirect=760:2344ecf63e12c441 +provenance material /scene/Looks/initialShadingGroup: MaterialOrigin { slots: [0, 1, 2, 3, 4], displaced: false } +provenance light /scene/Sky: LightOrigin { index: 0, geoms: 0..0 } +provenance geometry 0..1: /scene/pCube1 +provenance geometry 1..2: /scene/pSphere1 +provenance geometry 2..3: /scene/pCube2 +provenance geometry 3..4: /scene/pTorus1 +provenance geometry 4..5: /scene/pSphere2 +provenance mesh: MeshOrigin { geom_id: 0, slot: 0, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 1, slot: 1, baked: false, moving: false } +provenance mesh: MeshOrigin { geom_id: 2, slot: 2, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 3, slot: 3, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 4, slot: 1, baked: false, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 12343188411137242430, n_points: 8, n_indices: 20, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 1: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 17119738035130870988, n_points: 382, n_indices: 1560, n_uvs: None, smooth: false, material: 0 }), placements: 2, shared: false, displaced: false } +provenance mesh slot 2: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 1739488954094729910, n_points: 8, n_indices: 24, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 3: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 6096447469814747168, n_points: 400, n_indices: 1600, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/scene/camera1"), cameras: ["/scene/camera1"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/scene/camera1"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/cornellbox_usda-a18d02fea0ac9ae3-4.image b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-a18d02fea0ac9ae3-4.image new file mode 100644 index 000000000..ba4884437 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-a18d02fea0ac9ae3-4.image @@ -0,0 +1 @@ +640x360 16spp clamp-off 52a1a46f3a46d230 diff --git a/crates/crust-core/tests/data/import_baselines/cornellbox_usda-a18d02fea0ac9ae3-5.digest b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-a18d02fea0ac9ae3-5.digest new file mode 100644 index 000000000..0e859a952 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-a18d02fea0ac9ae3-5.digest @@ -0,0 +1,40 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/scene/camera1") +camera: Camera { origin: Vec3A(0.0074343784, 1.9913422, 4.0133057), lower_left_corner: Vec3A(-8.881443, -3.0086517, -0.98669434), horizontal: Vec3A(17.777756, 0.0, 0.0), vertical: Vec3A(0.0, 9.999988, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: Some(Vec4(0.0, 0.0, -1.0, 3.9133058)), far: Some(Vec4(0.0, 0.0, 1.0, 9995.986)), planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: None +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 640, height: 360, region: PixelRect { x0: 0, y0: 0, x1: 640, y1: 360 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 12.700017, aperture: [25.4, 25.4], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 5.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/cornellbox.usda"], invisible_overrides: Some(0) } +layer: $DIR/cornellbox.usda +warning: Warning { code: AssetUnsupportedByHost, kind: Skipped, count: 1, prims: [], message: "No asset loader: environment map $DIR/sky_gradient.exr ignored — the dome falls back to its uniform colour. Use Scene::from_usd_with_assets to supply one." } +warning: Warning { code: MaterialFallbackDefault, kind: Skipped, count: 1, prims: ["/scene/Looks/initialShadingGroup"], message: "Material /scene/Looks/initialShadingGroup has no surface shader — using default grey OpenPBR" } +lights: 1 +light 0: dome name Some("/scene/Sky") lpe None pmf 1.0 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 5 geometries, PrimitiveBreakdown { triangles: 822, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 2 } top level, PrimitiveBreakdown { triangles: 1582, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 2 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 4.0 motion [] pieces all=10:88b22fc3345d5b05 camera=10:88b22fc3345d5b05 shadow=10:88b22fc3345d5b05 indirect=10:88b22fc3345d5b05 +geom 1: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.2 motion [] pieces all=760:c2b60a75c52c78b9 camera=760:c2b60a75c52c78b9 shadow=760:c2b60a75c52c78b9 indirect=760:c2b60a75c52c78b9 +geom 2: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=12:94a297badef437e1 camera=12:94a297badef437e1 shadow=12:94a297badef437e1 indirect=12:94a297badef437e1 +geom 3: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.25 motion [] pieces all=800:4a8c9f44d777e131 camera=800:4a8c9f44d777e131 shadow=800:4a8c9f44d777e131 indirect=800:4a8c9f44d777e131 +geom 4: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.3585339 motion [] pieces all=760:2344ecf63e12c441 camera=760:2344ecf63e12c441 shadow=760:2344ecf63e12c441 indirect=760:2344ecf63e12c441 +provenance material /scene/Looks/initialShadingGroup: MaterialOrigin { slots: [0, 1, 2, 3, 4], displaced: false } +provenance light /scene/Sky: LightOrigin { index: 0, geoms: 0..0 } +provenance geometry 0..1: /scene/pCube1 +provenance geometry 1..2: /scene/pSphere1 +provenance geometry 2..3: /scene/pCube2 +provenance geometry 3..4: /scene/pTorus1 +provenance geometry 4..5: /scene/pSphere2 +provenance mesh: MeshOrigin { geom_id: 0, slot: 0, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 1, slot: 1, baked: false, moving: false } +provenance mesh: MeshOrigin { geom_id: 2, slot: 2, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 3, slot: 3, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 4, slot: 1, baked: false, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 12343188411137242430, n_points: 8, n_indices: 20, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 1: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 17119738035130870988, n_points: 382, n_indices: 1560, n_uvs: None, smooth: false, material: 0 }), placements: 2, shared: false, displaced: false } +provenance mesh slot 2: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 1739488954094729910, n_points: 8, n_indices: 24, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 3: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 6096447469814747168, n_points: 400, n_indices: 1600, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/scene/camera1"), cameras: ["/scene/camera1"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/scene/camera1"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/cornellbox_usda-a18d02fea0ac9ae3-5.image b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-a18d02fea0ac9ae3-5.image new file mode 100644 index 000000000..ba4884437 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-a18d02fea0ac9ae3-5.image @@ -0,0 +1 @@ +640x360 16spp clamp-off 52a1a46f3a46d230 diff --git a/crates/crust-core/tests/data/import_baselines/cornellbox_usda-a18d02fea0ac9ae3-6.digest b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-a18d02fea0ac9ae3-6.digest new file mode 100644 index 000000000..0e859a952 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-a18d02fea0ac9ae3-6.digest @@ -0,0 +1,40 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/scene/camera1") +camera: Camera { origin: Vec3A(0.0074343784, 1.9913422, 4.0133057), lower_left_corner: Vec3A(-8.881443, -3.0086517, -0.98669434), horizontal: Vec3A(17.777756, 0.0, 0.0), vertical: Vec3A(0.0, 9.999988, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: Some(Vec4(0.0, 0.0, -1.0, 3.9133058)), far: Some(Vec4(0.0, 0.0, 1.0, 9995.986)), planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: None +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 640, height: 360, region: PixelRect { x0: 0, y0: 0, x1: 640, y1: 360 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 12.700017, aperture: [25.4, 25.4], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 5.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/cornellbox.usda"], invisible_overrides: Some(0) } +layer: $DIR/cornellbox.usda +warning: Warning { code: AssetUnsupportedByHost, kind: Skipped, count: 1, prims: [], message: "No asset loader: environment map $DIR/sky_gradient.exr ignored — the dome falls back to its uniform colour. Use Scene::from_usd_with_assets to supply one." } +warning: Warning { code: MaterialFallbackDefault, kind: Skipped, count: 1, prims: ["/scene/Looks/initialShadingGroup"], message: "Material /scene/Looks/initialShadingGroup has no surface shader — using default grey OpenPBR" } +lights: 1 +light 0: dome name Some("/scene/Sky") lpe None pmf 1.0 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 5 geometries, PrimitiveBreakdown { triangles: 822, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 2 } top level, PrimitiveBreakdown { triangles: 1582, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 2 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 4.0 motion [] pieces all=10:88b22fc3345d5b05 camera=10:88b22fc3345d5b05 shadow=10:88b22fc3345d5b05 indirect=10:88b22fc3345d5b05 +geom 1: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.2 motion [] pieces all=760:c2b60a75c52c78b9 camera=760:c2b60a75c52c78b9 shadow=760:c2b60a75c52c78b9 indirect=760:c2b60a75c52c78b9 +geom 2: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=12:94a297badef437e1 camera=12:94a297badef437e1 shadow=12:94a297badef437e1 indirect=12:94a297badef437e1 +geom 3: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.25 motion [] pieces all=800:4a8c9f44d777e131 camera=800:4a8c9f44d777e131 shadow=800:4a8c9f44d777e131 indirect=800:4a8c9f44d777e131 +geom 4: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.3585339 motion [] pieces all=760:2344ecf63e12c441 camera=760:2344ecf63e12c441 shadow=760:2344ecf63e12c441 indirect=760:2344ecf63e12c441 +provenance material /scene/Looks/initialShadingGroup: MaterialOrigin { slots: [0, 1, 2, 3, 4], displaced: false } +provenance light /scene/Sky: LightOrigin { index: 0, geoms: 0..0 } +provenance geometry 0..1: /scene/pCube1 +provenance geometry 1..2: /scene/pSphere1 +provenance geometry 2..3: /scene/pCube2 +provenance geometry 3..4: /scene/pTorus1 +provenance geometry 4..5: /scene/pSphere2 +provenance mesh: MeshOrigin { geom_id: 0, slot: 0, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 1, slot: 1, baked: false, moving: false } +provenance mesh: MeshOrigin { geom_id: 2, slot: 2, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 3, slot: 3, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 4, slot: 1, baked: false, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 12343188411137242430, n_points: 8, n_indices: 20, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 1: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 17119738035130870988, n_points: 382, n_indices: 1560, n_uvs: None, smooth: false, material: 0 }), placements: 2, shared: false, displaced: false } +provenance mesh slot 2: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 1739488954094729910, n_points: 8, n_indices: 24, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 3: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 6096447469814747168, n_points: 400, n_indices: 1600, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/scene/camera1"), cameras: ["/scene/camera1"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/scene/camera1"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/cornellbox_usda-a18d02fea0ac9ae3-6.image b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-a18d02fea0ac9ae3-6.image new file mode 100644 index 000000000..ba4884437 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-a18d02fea0ac9ae3-6.image @@ -0,0 +1 @@ +640x360 16spp clamp-off 52a1a46f3a46d230 diff --git a/crates/crust-core/tests/data/import_baselines/cornellbox_usda-a1b6b7b33175c629-1.digest b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-a1b6b7b33175c629-1.digest new file mode 100644 index 000000000..0e859a952 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-a1b6b7b33175c629-1.digest @@ -0,0 +1,40 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/scene/camera1") +camera: Camera { origin: Vec3A(0.0074343784, 1.9913422, 4.0133057), lower_left_corner: Vec3A(-8.881443, -3.0086517, -0.98669434), horizontal: Vec3A(17.777756, 0.0, 0.0), vertical: Vec3A(0.0, 9.999988, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: Some(Vec4(0.0, 0.0, -1.0, 3.9133058)), far: Some(Vec4(0.0, 0.0, 1.0, 9995.986)), planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: None +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 640, height: 360, region: PixelRect { x0: 0, y0: 0, x1: 640, y1: 360 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 12.700017, aperture: [25.4, 25.4], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 5.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/cornellbox.usda"], invisible_overrides: Some(0) } +layer: $DIR/cornellbox.usda +warning: Warning { code: AssetUnsupportedByHost, kind: Skipped, count: 1, prims: [], message: "No asset loader: environment map $DIR/sky_gradient.exr ignored — the dome falls back to its uniform colour. Use Scene::from_usd_with_assets to supply one." } +warning: Warning { code: MaterialFallbackDefault, kind: Skipped, count: 1, prims: ["/scene/Looks/initialShadingGroup"], message: "Material /scene/Looks/initialShadingGroup has no surface shader — using default grey OpenPBR" } +lights: 1 +light 0: dome name Some("/scene/Sky") lpe None pmf 1.0 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 5 geometries, PrimitiveBreakdown { triangles: 822, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 2 } top level, PrimitiveBreakdown { triangles: 1582, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 2 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 4.0 motion [] pieces all=10:88b22fc3345d5b05 camera=10:88b22fc3345d5b05 shadow=10:88b22fc3345d5b05 indirect=10:88b22fc3345d5b05 +geom 1: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.2 motion [] pieces all=760:c2b60a75c52c78b9 camera=760:c2b60a75c52c78b9 shadow=760:c2b60a75c52c78b9 indirect=760:c2b60a75c52c78b9 +geom 2: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=12:94a297badef437e1 camera=12:94a297badef437e1 shadow=12:94a297badef437e1 indirect=12:94a297badef437e1 +geom 3: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.25 motion [] pieces all=800:4a8c9f44d777e131 camera=800:4a8c9f44d777e131 shadow=800:4a8c9f44d777e131 indirect=800:4a8c9f44d777e131 +geom 4: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.3585339 motion [] pieces all=760:2344ecf63e12c441 camera=760:2344ecf63e12c441 shadow=760:2344ecf63e12c441 indirect=760:2344ecf63e12c441 +provenance material /scene/Looks/initialShadingGroup: MaterialOrigin { slots: [0, 1, 2, 3, 4], displaced: false } +provenance light /scene/Sky: LightOrigin { index: 0, geoms: 0..0 } +provenance geometry 0..1: /scene/pCube1 +provenance geometry 1..2: /scene/pSphere1 +provenance geometry 2..3: /scene/pCube2 +provenance geometry 3..4: /scene/pTorus1 +provenance geometry 4..5: /scene/pSphere2 +provenance mesh: MeshOrigin { geom_id: 0, slot: 0, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 1, slot: 1, baked: false, moving: false } +provenance mesh: MeshOrigin { geom_id: 2, slot: 2, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 3, slot: 3, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 4, slot: 1, baked: false, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 12343188411137242430, n_points: 8, n_indices: 20, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 1: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 17119738035130870988, n_points: 382, n_indices: 1560, n_uvs: None, smooth: false, material: 0 }), placements: 2, shared: false, displaced: false } +provenance mesh slot 2: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 1739488954094729910, n_points: 8, n_indices: 24, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 3: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 6096447469814747168, n_points: 400, n_indices: 1600, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/scene/camera1"), cameras: ["/scene/camera1"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/scene/camera1"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/cornellbox_usda-a1b6b7b33175c629-1.image b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-a1b6b7b33175c629-1.image new file mode 100644 index 000000000..ba4884437 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-a1b6b7b33175c629-1.image @@ -0,0 +1 @@ +640x360 16spp clamp-off 52a1a46f3a46d230 diff --git a/crates/crust-core/tests/data/import_baselines/cornellbox_usda-a6c99e7589fd5bbe-1.digest b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-a6c99e7589fd5bbe-1.digest new file mode 100644 index 000000000..0e859a952 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-a6c99e7589fd5bbe-1.digest @@ -0,0 +1,40 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/scene/camera1") +camera: Camera { origin: Vec3A(0.0074343784, 1.9913422, 4.0133057), lower_left_corner: Vec3A(-8.881443, -3.0086517, -0.98669434), horizontal: Vec3A(17.777756, 0.0, 0.0), vertical: Vec3A(0.0, 9.999988, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: Some(Vec4(0.0, 0.0, -1.0, 3.9133058)), far: Some(Vec4(0.0, 0.0, 1.0, 9995.986)), planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: None +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 640, height: 360, region: PixelRect { x0: 0, y0: 0, x1: 640, y1: 360 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 12.700017, aperture: [25.4, 25.4], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 5.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/cornellbox.usda"], invisible_overrides: Some(0) } +layer: $DIR/cornellbox.usda +warning: Warning { code: AssetUnsupportedByHost, kind: Skipped, count: 1, prims: [], message: "No asset loader: environment map $DIR/sky_gradient.exr ignored — the dome falls back to its uniform colour. Use Scene::from_usd_with_assets to supply one." } +warning: Warning { code: MaterialFallbackDefault, kind: Skipped, count: 1, prims: ["/scene/Looks/initialShadingGroup"], message: "Material /scene/Looks/initialShadingGroup has no surface shader — using default grey OpenPBR" } +lights: 1 +light 0: dome name Some("/scene/Sky") lpe None pmf 1.0 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 5 geometries, PrimitiveBreakdown { triangles: 822, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 2 } top level, PrimitiveBreakdown { triangles: 1582, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 2 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 4.0 motion [] pieces all=10:88b22fc3345d5b05 camera=10:88b22fc3345d5b05 shadow=10:88b22fc3345d5b05 indirect=10:88b22fc3345d5b05 +geom 1: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.2 motion [] pieces all=760:c2b60a75c52c78b9 camera=760:c2b60a75c52c78b9 shadow=760:c2b60a75c52c78b9 indirect=760:c2b60a75c52c78b9 +geom 2: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=12:94a297badef437e1 camera=12:94a297badef437e1 shadow=12:94a297badef437e1 indirect=12:94a297badef437e1 +geom 3: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.25 motion [] pieces all=800:4a8c9f44d777e131 camera=800:4a8c9f44d777e131 shadow=800:4a8c9f44d777e131 indirect=800:4a8c9f44d777e131 +geom 4: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.3585339 motion [] pieces all=760:2344ecf63e12c441 camera=760:2344ecf63e12c441 shadow=760:2344ecf63e12c441 indirect=760:2344ecf63e12c441 +provenance material /scene/Looks/initialShadingGroup: MaterialOrigin { slots: [0, 1, 2, 3, 4], displaced: false } +provenance light /scene/Sky: LightOrigin { index: 0, geoms: 0..0 } +provenance geometry 0..1: /scene/pCube1 +provenance geometry 1..2: /scene/pSphere1 +provenance geometry 2..3: /scene/pCube2 +provenance geometry 3..4: /scene/pTorus1 +provenance geometry 4..5: /scene/pSphere2 +provenance mesh: MeshOrigin { geom_id: 0, slot: 0, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 1, slot: 1, baked: false, moving: false } +provenance mesh: MeshOrigin { geom_id: 2, slot: 2, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 3, slot: 3, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 4, slot: 1, baked: false, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 12343188411137242430, n_points: 8, n_indices: 20, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 1: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 17119738035130870988, n_points: 382, n_indices: 1560, n_uvs: None, smooth: false, material: 0 }), placements: 2, shared: false, displaced: false } +provenance mesh slot 2: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 1739488954094729910, n_points: 8, n_indices: 24, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 3: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 6096447469814747168, n_points: 400, n_indices: 1600, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/scene/camera1"), cameras: ["/scene/camera1"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/scene/camera1"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/cornellbox_usda-a6c99e7589fd5bbe-1.image b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-a6c99e7589fd5bbe-1.image new file mode 100644 index 000000000..ba4884437 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-a6c99e7589fd5bbe-1.image @@ -0,0 +1 @@ +640x360 16spp clamp-off 52a1a46f3a46d230 diff --git a/crates/crust-core/tests/data/import_baselines/cornellbox_usda-b04eda6325f3cbbf-1.digest b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-b04eda6325f3cbbf-1.digest new file mode 100644 index 000000000..0e859a952 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-b04eda6325f3cbbf-1.digest @@ -0,0 +1,40 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/scene/camera1") +camera: Camera { origin: Vec3A(0.0074343784, 1.9913422, 4.0133057), lower_left_corner: Vec3A(-8.881443, -3.0086517, -0.98669434), horizontal: Vec3A(17.777756, 0.0, 0.0), vertical: Vec3A(0.0, 9.999988, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: Some(Vec4(0.0, 0.0, -1.0, 3.9133058)), far: Some(Vec4(0.0, 0.0, 1.0, 9995.986)), planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: None +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 640, height: 360, region: PixelRect { x0: 0, y0: 0, x1: 640, y1: 360 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 12.700017, aperture: [25.4, 25.4], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 5.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/cornellbox.usda"], invisible_overrides: Some(0) } +layer: $DIR/cornellbox.usda +warning: Warning { code: AssetUnsupportedByHost, kind: Skipped, count: 1, prims: [], message: "No asset loader: environment map $DIR/sky_gradient.exr ignored — the dome falls back to its uniform colour. Use Scene::from_usd_with_assets to supply one." } +warning: Warning { code: MaterialFallbackDefault, kind: Skipped, count: 1, prims: ["/scene/Looks/initialShadingGroup"], message: "Material /scene/Looks/initialShadingGroup has no surface shader — using default grey OpenPBR" } +lights: 1 +light 0: dome name Some("/scene/Sky") lpe None pmf 1.0 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 5 geometries, PrimitiveBreakdown { triangles: 822, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 2 } top level, PrimitiveBreakdown { triangles: 1582, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 2 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 4.0 motion [] pieces all=10:88b22fc3345d5b05 camera=10:88b22fc3345d5b05 shadow=10:88b22fc3345d5b05 indirect=10:88b22fc3345d5b05 +geom 1: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.2 motion [] pieces all=760:c2b60a75c52c78b9 camera=760:c2b60a75c52c78b9 shadow=760:c2b60a75c52c78b9 indirect=760:c2b60a75c52c78b9 +geom 2: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=12:94a297badef437e1 camera=12:94a297badef437e1 shadow=12:94a297badef437e1 indirect=12:94a297badef437e1 +geom 3: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.25 motion [] pieces all=800:4a8c9f44d777e131 camera=800:4a8c9f44d777e131 shadow=800:4a8c9f44d777e131 indirect=800:4a8c9f44d777e131 +geom 4: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.3585339 motion [] pieces all=760:2344ecf63e12c441 camera=760:2344ecf63e12c441 shadow=760:2344ecf63e12c441 indirect=760:2344ecf63e12c441 +provenance material /scene/Looks/initialShadingGroup: MaterialOrigin { slots: [0, 1, 2, 3, 4], displaced: false } +provenance light /scene/Sky: LightOrigin { index: 0, geoms: 0..0 } +provenance geometry 0..1: /scene/pCube1 +provenance geometry 1..2: /scene/pSphere1 +provenance geometry 2..3: /scene/pCube2 +provenance geometry 3..4: /scene/pTorus1 +provenance geometry 4..5: /scene/pSphere2 +provenance mesh: MeshOrigin { geom_id: 0, slot: 0, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 1, slot: 1, baked: false, moving: false } +provenance mesh: MeshOrigin { geom_id: 2, slot: 2, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 3, slot: 3, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 4, slot: 1, baked: false, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 12343188411137242430, n_points: 8, n_indices: 20, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 1: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 17119738035130870988, n_points: 382, n_indices: 1560, n_uvs: None, smooth: false, material: 0 }), placements: 2, shared: false, displaced: false } +provenance mesh slot 2: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 1739488954094729910, n_points: 8, n_indices: 24, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 3: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 6096447469814747168, n_points: 400, n_indices: 1600, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/scene/camera1"), cameras: ["/scene/camera1"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/scene/camera1"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/cornellbox_usda-b04eda6325f3cbbf-1.image b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-b04eda6325f3cbbf-1.image new file mode 100644 index 000000000..ba4884437 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-b04eda6325f3cbbf-1.image @@ -0,0 +1 @@ +640x360 16spp clamp-off 52a1a46f3a46d230 diff --git a/crates/crust-core/tests/data/import_baselines/cornellbox_usda-b04eda6325f3cbbf-2.digest b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-b04eda6325f3cbbf-2.digest new file mode 100644 index 000000000..0e859a952 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-b04eda6325f3cbbf-2.digest @@ -0,0 +1,40 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/scene/camera1") +camera: Camera { origin: Vec3A(0.0074343784, 1.9913422, 4.0133057), lower_left_corner: Vec3A(-8.881443, -3.0086517, -0.98669434), horizontal: Vec3A(17.777756, 0.0, 0.0), vertical: Vec3A(0.0, 9.999988, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: Some(Vec4(0.0, 0.0, -1.0, 3.9133058)), far: Some(Vec4(0.0, 0.0, 1.0, 9995.986)), planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: None +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 640, height: 360, region: PixelRect { x0: 0, y0: 0, x1: 640, y1: 360 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 12.700017, aperture: [25.4, 25.4], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 5.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/cornellbox.usda"], invisible_overrides: Some(0) } +layer: $DIR/cornellbox.usda +warning: Warning { code: AssetUnsupportedByHost, kind: Skipped, count: 1, prims: [], message: "No asset loader: environment map $DIR/sky_gradient.exr ignored — the dome falls back to its uniform colour. Use Scene::from_usd_with_assets to supply one." } +warning: Warning { code: MaterialFallbackDefault, kind: Skipped, count: 1, prims: ["/scene/Looks/initialShadingGroup"], message: "Material /scene/Looks/initialShadingGroup has no surface shader — using default grey OpenPBR" } +lights: 1 +light 0: dome name Some("/scene/Sky") lpe None pmf 1.0 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 5 geometries, PrimitiveBreakdown { triangles: 822, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 2 } top level, PrimitiveBreakdown { triangles: 1582, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 2 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 4.0 motion [] pieces all=10:88b22fc3345d5b05 camera=10:88b22fc3345d5b05 shadow=10:88b22fc3345d5b05 indirect=10:88b22fc3345d5b05 +geom 1: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.2 motion [] pieces all=760:c2b60a75c52c78b9 camera=760:c2b60a75c52c78b9 shadow=760:c2b60a75c52c78b9 indirect=760:c2b60a75c52c78b9 +geom 2: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=12:94a297badef437e1 camera=12:94a297badef437e1 shadow=12:94a297badef437e1 indirect=12:94a297badef437e1 +geom 3: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.25 motion [] pieces all=800:4a8c9f44d777e131 camera=800:4a8c9f44d777e131 shadow=800:4a8c9f44d777e131 indirect=800:4a8c9f44d777e131 +geom 4: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.3585339 motion [] pieces all=760:2344ecf63e12c441 camera=760:2344ecf63e12c441 shadow=760:2344ecf63e12c441 indirect=760:2344ecf63e12c441 +provenance material /scene/Looks/initialShadingGroup: MaterialOrigin { slots: [0, 1, 2, 3, 4], displaced: false } +provenance light /scene/Sky: LightOrigin { index: 0, geoms: 0..0 } +provenance geometry 0..1: /scene/pCube1 +provenance geometry 1..2: /scene/pSphere1 +provenance geometry 2..3: /scene/pCube2 +provenance geometry 3..4: /scene/pTorus1 +provenance geometry 4..5: /scene/pSphere2 +provenance mesh: MeshOrigin { geom_id: 0, slot: 0, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 1, slot: 1, baked: false, moving: false } +provenance mesh: MeshOrigin { geom_id: 2, slot: 2, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 3, slot: 3, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 4, slot: 1, baked: false, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 12343188411137242430, n_points: 8, n_indices: 20, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 1: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 17119738035130870988, n_points: 382, n_indices: 1560, n_uvs: None, smooth: false, material: 0 }), placements: 2, shared: false, displaced: false } +provenance mesh slot 2: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 1739488954094729910, n_points: 8, n_indices: 24, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 3: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 6096447469814747168, n_points: 400, n_indices: 1600, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/scene/camera1"), cameras: ["/scene/camera1"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/scene/camera1"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/cornellbox_usda-b04eda6325f3cbbf-2.image b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-b04eda6325f3cbbf-2.image new file mode 100644 index 000000000..ba4884437 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-b04eda6325f3cbbf-2.image @@ -0,0 +1 @@ +640x360 16spp clamp-off 52a1a46f3a46d230 diff --git a/crates/crust-core/tests/data/import_baselines/cornellbox_usda-b04eda6325f3cbbf-3.digest b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-b04eda6325f3cbbf-3.digest new file mode 100644 index 000000000..0e859a952 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-b04eda6325f3cbbf-3.digest @@ -0,0 +1,40 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/scene/camera1") +camera: Camera { origin: Vec3A(0.0074343784, 1.9913422, 4.0133057), lower_left_corner: Vec3A(-8.881443, -3.0086517, -0.98669434), horizontal: Vec3A(17.777756, 0.0, 0.0), vertical: Vec3A(0.0, 9.999988, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: Some(Vec4(0.0, 0.0, -1.0, 3.9133058)), far: Some(Vec4(0.0, 0.0, 1.0, 9995.986)), planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: None +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 640, height: 360, region: PixelRect { x0: 0, y0: 0, x1: 640, y1: 360 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 12.700017, aperture: [25.4, 25.4], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 5.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/cornellbox.usda"], invisible_overrides: Some(0) } +layer: $DIR/cornellbox.usda +warning: Warning { code: AssetUnsupportedByHost, kind: Skipped, count: 1, prims: [], message: "No asset loader: environment map $DIR/sky_gradient.exr ignored — the dome falls back to its uniform colour. Use Scene::from_usd_with_assets to supply one." } +warning: Warning { code: MaterialFallbackDefault, kind: Skipped, count: 1, prims: ["/scene/Looks/initialShadingGroup"], message: "Material /scene/Looks/initialShadingGroup has no surface shader — using default grey OpenPBR" } +lights: 1 +light 0: dome name Some("/scene/Sky") lpe None pmf 1.0 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 5 geometries, PrimitiveBreakdown { triangles: 822, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 2 } top level, PrimitiveBreakdown { triangles: 1582, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 2 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 4.0 motion [] pieces all=10:88b22fc3345d5b05 camera=10:88b22fc3345d5b05 shadow=10:88b22fc3345d5b05 indirect=10:88b22fc3345d5b05 +geom 1: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.2 motion [] pieces all=760:c2b60a75c52c78b9 camera=760:c2b60a75c52c78b9 shadow=760:c2b60a75c52c78b9 indirect=760:c2b60a75c52c78b9 +geom 2: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=12:94a297badef437e1 camera=12:94a297badef437e1 shadow=12:94a297badef437e1 indirect=12:94a297badef437e1 +geom 3: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.25 motion [] pieces all=800:4a8c9f44d777e131 camera=800:4a8c9f44d777e131 shadow=800:4a8c9f44d777e131 indirect=800:4a8c9f44d777e131 +geom 4: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.3585339 motion [] pieces all=760:2344ecf63e12c441 camera=760:2344ecf63e12c441 shadow=760:2344ecf63e12c441 indirect=760:2344ecf63e12c441 +provenance material /scene/Looks/initialShadingGroup: MaterialOrigin { slots: [0, 1, 2, 3, 4], displaced: false } +provenance light /scene/Sky: LightOrigin { index: 0, geoms: 0..0 } +provenance geometry 0..1: /scene/pCube1 +provenance geometry 1..2: /scene/pSphere1 +provenance geometry 2..3: /scene/pCube2 +provenance geometry 3..4: /scene/pTorus1 +provenance geometry 4..5: /scene/pSphere2 +provenance mesh: MeshOrigin { geom_id: 0, slot: 0, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 1, slot: 1, baked: false, moving: false } +provenance mesh: MeshOrigin { geom_id: 2, slot: 2, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 3, slot: 3, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 4, slot: 1, baked: false, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 12343188411137242430, n_points: 8, n_indices: 20, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 1: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 17119738035130870988, n_points: 382, n_indices: 1560, n_uvs: None, smooth: false, material: 0 }), placements: 2, shared: false, displaced: false } +provenance mesh slot 2: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 1739488954094729910, n_points: 8, n_indices: 24, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 3: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 6096447469814747168, n_points: 400, n_indices: 1600, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/scene/camera1"), cameras: ["/scene/camera1"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/scene/camera1"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/cornellbox_usda-b04eda6325f3cbbf-3.image b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-b04eda6325f3cbbf-3.image new file mode 100644 index 000000000..ba4884437 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-b04eda6325f3cbbf-3.image @@ -0,0 +1 @@ +640x360 16spp clamp-off 52a1a46f3a46d230 diff --git a/crates/crust-core/tests/data/import_baselines/cornellbox_usda-b04eda6325f3cbbf-4.digest b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-b04eda6325f3cbbf-4.digest new file mode 100644 index 000000000..0e859a952 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-b04eda6325f3cbbf-4.digest @@ -0,0 +1,40 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/scene/camera1") +camera: Camera { origin: Vec3A(0.0074343784, 1.9913422, 4.0133057), lower_left_corner: Vec3A(-8.881443, -3.0086517, -0.98669434), horizontal: Vec3A(17.777756, 0.0, 0.0), vertical: Vec3A(0.0, 9.999988, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: Some(Vec4(0.0, 0.0, -1.0, 3.9133058)), far: Some(Vec4(0.0, 0.0, 1.0, 9995.986)), planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: None +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 640, height: 360, region: PixelRect { x0: 0, y0: 0, x1: 640, y1: 360 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 12.700017, aperture: [25.4, 25.4], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 5.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/cornellbox.usda"], invisible_overrides: Some(0) } +layer: $DIR/cornellbox.usda +warning: Warning { code: AssetUnsupportedByHost, kind: Skipped, count: 1, prims: [], message: "No asset loader: environment map $DIR/sky_gradient.exr ignored — the dome falls back to its uniform colour. Use Scene::from_usd_with_assets to supply one." } +warning: Warning { code: MaterialFallbackDefault, kind: Skipped, count: 1, prims: ["/scene/Looks/initialShadingGroup"], message: "Material /scene/Looks/initialShadingGroup has no surface shader — using default grey OpenPBR" } +lights: 1 +light 0: dome name Some("/scene/Sky") lpe None pmf 1.0 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 5 geometries, PrimitiveBreakdown { triangles: 822, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 2 } top level, PrimitiveBreakdown { triangles: 1582, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 2 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 4.0 motion [] pieces all=10:88b22fc3345d5b05 camera=10:88b22fc3345d5b05 shadow=10:88b22fc3345d5b05 indirect=10:88b22fc3345d5b05 +geom 1: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.2 motion [] pieces all=760:c2b60a75c52c78b9 camera=760:c2b60a75c52c78b9 shadow=760:c2b60a75c52c78b9 indirect=760:c2b60a75c52c78b9 +geom 2: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=12:94a297badef437e1 camera=12:94a297badef437e1 shadow=12:94a297badef437e1 indirect=12:94a297badef437e1 +geom 3: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.25 motion [] pieces all=800:4a8c9f44d777e131 camera=800:4a8c9f44d777e131 shadow=800:4a8c9f44d777e131 indirect=800:4a8c9f44d777e131 +geom 4: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.3585339 motion [] pieces all=760:2344ecf63e12c441 camera=760:2344ecf63e12c441 shadow=760:2344ecf63e12c441 indirect=760:2344ecf63e12c441 +provenance material /scene/Looks/initialShadingGroup: MaterialOrigin { slots: [0, 1, 2, 3, 4], displaced: false } +provenance light /scene/Sky: LightOrigin { index: 0, geoms: 0..0 } +provenance geometry 0..1: /scene/pCube1 +provenance geometry 1..2: /scene/pSphere1 +provenance geometry 2..3: /scene/pCube2 +provenance geometry 3..4: /scene/pTorus1 +provenance geometry 4..5: /scene/pSphere2 +provenance mesh: MeshOrigin { geom_id: 0, slot: 0, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 1, slot: 1, baked: false, moving: false } +provenance mesh: MeshOrigin { geom_id: 2, slot: 2, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 3, slot: 3, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 4, slot: 1, baked: false, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 12343188411137242430, n_points: 8, n_indices: 20, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 1: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 17119738035130870988, n_points: 382, n_indices: 1560, n_uvs: None, smooth: false, material: 0 }), placements: 2, shared: false, displaced: false } +provenance mesh slot 2: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 1739488954094729910, n_points: 8, n_indices: 24, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 3: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 6096447469814747168, n_points: 400, n_indices: 1600, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/scene/camera1"), cameras: ["/scene/camera1"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/scene/camera1"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/cornellbox_usda-b04eda6325f3cbbf-4.image b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-b04eda6325f3cbbf-4.image new file mode 100644 index 000000000..ba4884437 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-b04eda6325f3cbbf-4.image @@ -0,0 +1 @@ +640x360 16spp clamp-off 52a1a46f3a46d230 diff --git a/crates/crust-core/tests/data/import_baselines/cornellbox_usda-b194c866668b8c75-1.digest b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-b194c866668b8c75-1.digest new file mode 100644 index 000000000..0e859a952 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-b194c866668b8c75-1.digest @@ -0,0 +1,40 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/scene/camera1") +camera: Camera { origin: Vec3A(0.0074343784, 1.9913422, 4.0133057), lower_left_corner: Vec3A(-8.881443, -3.0086517, -0.98669434), horizontal: Vec3A(17.777756, 0.0, 0.0), vertical: Vec3A(0.0, 9.999988, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: Some(Vec4(0.0, 0.0, -1.0, 3.9133058)), far: Some(Vec4(0.0, 0.0, 1.0, 9995.986)), planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: None +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 640, height: 360, region: PixelRect { x0: 0, y0: 0, x1: 640, y1: 360 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 12.700017, aperture: [25.4, 25.4], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 5.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/cornellbox.usda"], invisible_overrides: Some(0) } +layer: $DIR/cornellbox.usda +warning: Warning { code: AssetUnsupportedByHost, kind: Skipped, count: 1, prims: [], message: "No asset loader: environment map $DIR/sky_gradient.exr ignored — the dome falls back to its uniform colour. Use Scene::from_usd_with_assets to supply one." } +warning: Warning { code: MaterialFallbackDefault, kind: Skipped, count: 1, prims: ["/scene/Looks/initialShadingGroup"], message: "Material /scene/Looks/initialShadingGroup has no surface shader — using default grey OpenPBR" } +lights: 1 +light 0: dome name Some("/scene/Sky") lpe None pmf 1.0 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 5 geometries, PrimitiveBreakdown { triangles: 822, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 2 } top level, PrimitiveBreakdown { triangles: 1582, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 2 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 4.0 motion [] pieces all=10:88b22fc3345d5b05 camera=10:88b22fc3345d5b05 shadow=10:88b22fc3345d5b05 indirect=10:88b22fc3345d5b05 +geom 1: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.2 motion [] pieces all=760:c2b60a75c52c78b9 camera=760:c2b60a75c52c78b9 shadow=760:c2b60a75c52c78b9 indirect=760:c2b60a75c52c78b9 +geom 2: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=12:94a297badef437e1 camera=12:94a297badef437e1 shadow=12:94a297badef437e1 indirect=12:94a297badef437e1 +geom 3: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.25 motion [] pieces all=800:4a8c9f44d777e131 camera=800:4a8c9f44d777e131 shadow=800:4a8c9f44d777e131 indirect=800:4a8c9f44d777e131 +geom 4: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.3585339 motion [] pieces all=760:2344ecf63e12c441 camera=760:2344ecf63e12c441 shadow=760:2344ecf63e12c441 indirect=760:2344ecf63e12c441 +provenance material /scene/Looks/initialShadingGroup: MaterialOrigin { slots: [0, 1, 2, 3, 4], displaced: false } +provenance light /scene/Sky: LightOrigin { index: 0, geoms: 0..0 } +provenance geometry 0..1: /scene/pCube1 +provenance geometry 1..2: /scene/pSphere1 +provenance geometry 2..3: /scene/pCube2 +provenance geometry 3..4: /scene/pTorus1 +provenance geometry 4..5: /scene/pSphere2 +provenance mesh: MeshOrigin { geom_id: 0, slot: 0, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 1, slot: 1, baked: false, moving: false } +provenance mesh: MeshOrigin { geom_id: 2, slot: 2, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 3, slot: 3, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 4, slot: 1, baked: false, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 12343188411137242430, n_points: 8, n_indices: 20, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 1: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 17119738035130870988, n_points: 382, n_indices: 1560, n_uvs: None, smooth: false, material: 0 }), placements: 2, shared: false, displaced: false } +provenance mesh slot 2: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 1739488954094729910, n_points: 8, n_indices: 24, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 3: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 6096447469814747168, n_points: 400, n_indices: 1600, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/scene/camera1"), cameras: ["/scene/camera1"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/scene/camera1"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/cornellbox_usda-b194c866668b8c75-1.image b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-b194c866668b8c75-1.image new file mode 100644 index 000000000..ba4884437 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-b194c866668b8c75-1.image @@ -0,0 +1 @@ +640x360 16spp clamp-off 52a1a46f3a46d230 diff --git a/crates/crust-core/tests/data/import_baselines/cornellbox_usda-b32b870ba5ca59f9-1.digest b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-b32b870ba5ca59f9-1.digest new file mode 100644 index 000000000..1d5ab0cab --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-b32b870ba5ca59f9-1.digest @@ -0,0 +1,39 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/scene/camera1") +camera: Camera { origin: Vec3A(0.0074343784, 1.9913422, 4.0133057), lower_left_corner: Vec3A(-8.881443, -3.0086517, -0.98669434), horizontal: Vec3A(17.777756, 0.0, 0.0), vertical: Vec3A(0.0, 9.999988, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: Some(Vec4(0.0, 0.0, -1.0, 3.9133058)), far: Some(Vec4(0.0, 0.0, 1.0, 9995.986)), planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: None +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 640, height: 360, region: PixelRect { x0: 0, y0: 0, x1: 640, y1: 360 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 12.700017, aperture: [25.4, 25.4], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 5.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/cornellbox.usda"], invisible_overrides: Some(0) } +layer: $DIR/cornellbox.usda +warning: Warning { code: MaterialFallbackDefault, kind: Skipped, count: 1, prims: ["/scene/Looks/initialShadingGroup"], message: "Material /scene/Looks/initialShadingGroup has no surface shader — using default grey OpenPBR" } +lights: 1 +light 0: dome name Some("/scene/Sky") lpe None pmf 1.0 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 5 geometries, PrimitiveBreakdown { triangles: 822, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 2 } top level, PrimitiveBreakdown { triangles: 1582, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 2 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 4.0 motion [] pieces all=10:88b22fc3345d5b05 camera=10:88b22fc3345d5b05 shadow=10:88b22fc3345d5b05 indirect=10:88b22fc3345d5b05 +geom 1: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.2 motion [] pieces all=760:c2b60a75c52c78b9 camera=760:c2b60a75c52c78b9 shadow=760:c2b60a75c52c78b9 indirect=760:c2b60a75c52c78b9 +geom 2: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=12:94a297badef437e1 camera=12:94a297badef437e1 shadow=12:94a297badef437e1 indirect=12:94a297badef437e1 +geom 3: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.25 motion [] pieces all=800:4a8c9f44d777e131 camera=800:4a8c9f44d777e131 shadow=800:4a8c9f44d777e131 indirect=800:4a8c9f44d777e131 +geom 4: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.3585339 motion [] pieces all=760:2344ecf63e12c441 camera=760:2344ecf63e12c441 shadow=760:2344ecf63e12c441 indirect=760:2344ecf63e12c441 +provenance material /scene/Looks/initialShadingGroup: MaterialOrigin { slots: [0, 1, 2, 3, 4], displaced: false } +provenance light /scene/Sky: LightOrigin { index: 0, geoms: 0..0 } +provenance geometry 0..1: /scene/pCube1 +provenance geometry 1..2: /scene/pSphere1 +provenance geometry 2..3: /scene/pCube2 +provenance geometry 3..4: /scene/pTorus1 +provenance geometry 4..5: /scene/pSphere2 +provenance mesh: MeshOrigin { geom_id: 0, slot: 0, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 1, slot: 1, baked: false, moving: false } +provenance mesh: MeshOrigin { geom_id: 2, slot: 2, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 3, slot: 3, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 4, slot: 1, baked: false, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 12343188411137242430, n_points: 8, n_indices: 20, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 1: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 17119738035130870988, n_points: 382, n_indices: 1560, n_uvs: None, smooth: false, material: 0 }), placements: 2, shared: false, displaced: false } +provenance mesh slot 2: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 1739488954094729910, n_points: 8, n_indices: 24, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 3: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 6096447469814747168, n_points: 400, n_indices: 1600, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: true, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/scene/camera1"), cameras: ["/scene/camera1"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/scene/camera1"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/cornellbox_usda-b32b870ba5ca59f9-1.image b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-b32b870ba5ca59f9-1.image new file mode 100644 index 000000000..7172edbfe --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-b32b870ba5ca59f9-1.image @@ -0,0 +1 @@ +640x360 16spp clamp-off 64ede904b11bab22 diff --git a/crates/crust-core/tests/data/import_baselines/cornellbox_usda-b3d2bc2ed9037c82-1.digest b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-b3d2bc2ed9037c82-1.digest new file mode 100644 index 000000000..0e859a952 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-b3d2bc2ed9037c82-1.digest @@ -0,0 +1,40 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/scene/camera1") +camera: Camera { origin: Vec3A(0.0074343784, 1.9913422, 4.0133057), lower_left_corner: Vec3A(-8.881443, -3.0086517, -0.98669434), horizontal: Vec3A(17.777756, 0.0, 0.0), vertical: Vec3A(0.0, 9.999988, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: Some(Vec4(0.0, 0.0, -1.0, 3.9133058)), far: Some(Vec4(0.0, 0.0, 1.0, 9995.986)), planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: None +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 640, height: 360, region: PixelRect { x0: 0, y0: 0, x1: 640, y1: 360 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 12.700017, aperture: [25.4, 25.4], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 5.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/cornellbox.usda"], invisible_overrides: Some(0) } +layer: $DIR/cornellbox.usda +warning: Warning { code: AssetUnsupportedByHost, kind: Skipped, count: 1, prims: [], message: "No asset loader: environment map $DIR/sky_gradient.exr ignored — the dome falls back to its uniform colour. Use Scene::from_usd_with_assets to supply one." } +warning: Warning { code: MaterialFallbackDefault, kind: Skipped, count: 1, prims: ["/scene/Looks/initialShadingGroup"], message: "Material /scene/Looks/initialShadingGroup has no surface shader — using default grey OpenPBR" } +lights: 1 +light 0: dome name Some("/scene/Sky") lpe None pmf 1.0 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 5 geometries, PrimitiveBreakdown { triangles: 822, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 2 } top level, PrimitiveBreakdown { triangles: 1582, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 2 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 4.0 motion [] pieces all=10:88b22fc3345d5b05 camera=10:88b22fc3345d5b05 shadow=10:88b22fc3345d5b05 indirect=10:88b22fc3345d5b05 +geom 1: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.2 motion [] pieces all=760:c2b60a75c52c78b9 camera=760:c2b60a75c52c78b9 shadow=760:c2b60a75c52c78b9 indirect=760:c2b60a75c52c78b9 +geom 2: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=12:94a297badef437e1 camera=12:94a297badef437e1 shadow=12:94a297badef437e1 indirect=12:94a297badef437e1 +geom 3: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.25 motion [] pieces all=800:4a8c9f44d777e131 camera=800:4a8c9f44d777e131 shadow=800:4a8c9f44d777e131 indirect=800:4a8c9f44d777e131 +geom 4: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.3585339 motion [] pieces all=760:2344ecf63e12c441 camera=760:2344ecf63e12c441 shadow=760:2344ecf63e12c441 indirect=760:2344ecf63e12c441 +provenance material /scene/Looks/initialShadingGroup: MaterialOrigin { slots: [0, 1, 2, 3, 4], displaced: false } +provenance light /scene/Sky: LightOrigin { index: 0, geoms: 0..0 } +provenance geometry 0..1: /scene/pCube1 +provenance geometry 1..2: /scene/pSphere1 +provenance geometry 2..3: /scene/pCube2 +provenance geometry 3..4: /scene/pTorus1 +provenance geometry 4..5: /scene/pSphere2 +provenance mesh: MeshOrigin { geom_id: 0, slot: 0, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 1, slot: 1, baked: false, moving: false } +provenance mesh: MeshOrigin { geom_id: 2, slot: 2, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 3, slot: 3, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 4, slot: 1, baked: false, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 12343188411137242430, n_points: 8, n_indices: 20, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 1: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 17119738035130870988, n_points: 382, n_indices: 1560, n_uvs: None, smooth: false, material: 0 }), placements: 2, shared: false, displaced: false } +provenance mesh slot 2: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 1739488954094729910, n_points: 8, n_indices: 24, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 3: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 6096447469814747168, n_points: 400, n_indices: 1600, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/scene/camera1"), cameras: ["/scene/camera1"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/scene/camera1"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/cornellbox_usda-b3d2bc2ed9037c82-1.image b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-b3d2bc2ed9037c82-1.image new file mode 100644 index 000000000..ba4884437 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-b3d2bc2ed9037c82-1.image @@ -0,0 +1 @@ +640x360 16spp clamp-off 52a1a46f3a46d230 diff --git a/crates/crust-core/tests/data/import_baselines/cornellbox_usda-b62de59b31ca0e80-1.digest b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-b62de59b31ca0e80-1.digest new file mode 100644 index 000000000..1d5ab0cab --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-b62de59b31ca0e80-1.digest @@ -0,0 +1,39 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/scene/camera1") +camera: Camera { origin: Vec3A(0.0074343784, 1.9913422, 4.0133057), lower_left_corner: Vec3A(-8.881443, -3.0086517, -0.98669434), horizontal: Vec3A(17.777756, 0.0, 0.0), vertical: Vec3A(0.0, 9.999988, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: Some(Vec4(0.0, 0.0, -1.0, 3.9133058)), far: Some(Vec4(0.0, 0.0, 1.0, 9995.986)), planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: None +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 640, height: 360, region: PixelRect { x0: 0, y0: 0, x1: 640, y1: 360 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 12.700017, aperture: [25.4, 25.4], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 5.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/cornellbox.usda"], invisible_overrides: Some(0) } +layer: $DIR/cornellbox.usda +warning: Warning { code: MaterialFallbackDefault, kind: Skipped, count: 1, prims: ["/scene/Looks/initialShadingGroup"], message: "Material /scene/Looks/initialShadingGroup has no surface shader — using default grey OpenPBR" } +lights: 1 +light 0: dome name Some("/scene/Sky") lpe None pmf 1.0 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 5 geometries, PrimitiveBreakdown { triangles: 822, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 2 } top level, PrimitiveBreakdown { triangles: 1582, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 2 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 4.0 motion [] pieces all=10:88b22fc3345d5b05 camera=10:88b22fc3345d5b05 shadow=10:88b22fc3345d5b05 indirect=10:88b22fc3345d5b05 +geom 1: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.2 motion [] pieces all=760:c2b60a75c52c78b9 camera=760:c2b60a75c52c78b9 shadow=760:c2b60a75c52c78b9 indirect=760:c2b60a75c52c78b9 +geom 2: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=12:94a297badef437e1 camera=12:94a297badef437e1 shadow=12:94a297badef437e1 indirect=12:94a297badef437e1 +geom 3: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.25 motion [] pieces all=800:4a8c9f44d777e131 camera=800:4a8c9f44d777e131 shadow=800:4a8c9f44d777e131 indirect=800:4a8c9f44d777e131 +geom 4: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.3585339 motion [] pieces all=760:2344ecf63e12c441 camera=760:2344ecf63e12c441 shadow=760:2344ecf63e12c441 indirect=760:2344ecf63e12c441 +provenance material /scene/Looks/initialShadingGroup: MaterialOrigin { slots: [0, 1, 2, 3, 4], displaced: false } +provenance light /scene/Sky: LightOrigin { index: 0, geoms: 0..0 } +provenance geometry 0..1: /scene/pCube1 +provenance geometry 1..2: /scene/pSphere1 +provenance geometry 2..3: /scene/pCube2 +provenance geometry 3..4: /scene/pTorus1 +provenance geometry 4..5: /scene/pSphere2 +provenance mesh: MeshOrigin { geom_id: 0, slot: 0, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 1, slot: 1, baked: false, moving: false } +provenance mesh: MeshOrigin { geom_id: 2, slot: 2, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 3, slot: 3, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 4, slot: 1, baked: false, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 12343188411137242430, n_points: 8, n_indices: 20, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 1: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 17119738035130870988, n_points: 382, n_indices: 1560, n_uvs: None, smooth: false, material: 0 }), placements: 2, shared: false, displaced: false } +provenance mesh slot 2: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 1739488954094729910, n_points: 8, n_indices: 24, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 3: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 6096447469814747168, n_points: 400, n_indices: 1600, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: true, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/scene/camera1"), cameras: ["/scene/camera1"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/scene/camera1"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/cornellbox_usda-b62de59b31ca0e80-1.image b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-b62de59b31ca0e80-1.image new file mode 100644 index 000000000..7172edbfe --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-b62de59b31ca0e80-1.image @@ -0,0 +1 @@ +640x360 16spp clamp-off 64ede904b11bab22 diff --git a/crates/crust-core/tests/data/import_baselines/cornellbox_usda-b6c7e44d8560abd5-1.digest b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-b6c7e44d8560abd5-1.digest new file mode 100644 index 000000000..0e859a952 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-b6c7e44d8560abd5-1.digest @@ -0,0 +1,40 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/scene/camera1") +camera: Camera { origin: Vec3A(0.0074343784, 1.9913422, 4.0133057), lower_left_corner: Vec3A(-8.881443, -3.0086517, -0.98669434), horizontal: Vec3A(17.777756, 0.0, 0.0), vertical: Vec3A(0.0, 9.999988, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: Some(Vec4(0.0, 0.0, -1.0, 3.9133058)), far: Some(Vec4(0.0, 0.0, 1.0, 9995.986)), planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: None +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 640, height: 360, region: PixelRect { x0: 0, y0: 0, x1: 640, y1: 360 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 12.700017, aperture: [25.4, 25.4], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 5.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/cornellbox.usda"], invisible_overrides: Some(0) } +layer: $DIR/cornellbox.usda +warning: Warning { code: AssetUnsupportedByHost, kind: Skipped, count: 1, prims: [], message: "No asset loader: environment map $DIR/sky_gradient.exr ignored — the dome falls back to its uniform colour. Use Scene::from_usd_with_assets to supply one." } +warning: Warning { code: MaterialFallbackDefault, kind: Skipped, count: 1, prims: ["/scene/Looks/initialShadingGroup"], message: "Material /scene/Looks/initialShadingGroup has no surface shader — using default grey OpenPBR" } +lights: 1 +light 0: dome name Some("/scene/Sky") lpe None pmf 1.0 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 5 geometries, PrimitiveBreakdown { triangles: 822, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 2 } top level, PrimitiveBreakdown { triangles: 1582, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 2 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 4.0 motion [] pieces all=10:88b22fc3345d5b05 camera=10:88b22fc3345d5b05 shadow=10:88b22fc3345d5b05 indirect=10:88b22fc3345d5b05 +geom 1: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.2 motion [] pieces all=760:c2b60a75c52c78b9 camera=760:c2b60a75c52c78b9 shadow=760:c2b60a75c52c78b9 indirect=760:c2b60a75c52c78b9 +geom 2: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=12:94a297badef437e1 camera=12:94a297badef437e1 shadow=12:94a297badef437e1 indirect=12:94a297badef437e1 +geom 3: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.25 motion [] pieces all=800:4a8c9f44d777e131 camera=800:4a8c9f44d777e131 shadow=800:4a8c9f44d777e131 indirect=800:4a8c9f44d777e131 +geom 4: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.3585339 motion [] pieces all=760:2344ecf63e12c441 camera=760:2344ecf63e12c441 shadow=760:2344ecf63e12c441 indirect=760:2344ecf63e12c441 +provenance material /scene/Looks/initialShadingGroup: MaterialOrigin { slots: [0, 1, 2, 3, 4], displaced: false } +provenance light /scene/Sky: LightOrigin { index: 0, geoms: 0..0 } +provenance geometry 0..1: /scene/pCube1 +provenance geometry 1..2: /scene/pSphere1 +provenance geometry 2..3: /scene/pCube2 +provenance geometry 3..4: /scene/pTorus1 +provenance geometry 4..5: /scene/pSphere2 +provenance mesh: MeshOrigin { geom_id: 0, slot: 0, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 1, slot: 1, baked: false, moving: false } +provenance mesh: MeshOrigin { geom_id: 2, slot: 2, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 3, slot: 3, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 4, slot: 1, baked: false, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 12343188411137242430, n_points: 8, n_indices: 20, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 1: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 17119738035130870988, n_points: 382, n_indices: 1560, n_uvs: None, smooth: false, material: 0 }), placements: 2, shared: false, displaced: false } +provenance mesh slot 2: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 1739488954094729910, n_points: 8, n_indices: 24, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 3: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 6096447469814747168, n_points: 400, n_indices: 1600, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/scene/camera1"), cameras: ["/scene/camera1"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/scene/camera1"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/cornellbox_usda-b6c7e44d8560abd5-1.image b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-b6c7e44d8560abd5-1.image new file mode 100644 index 000000000..ba4884437 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-b6c7e44d8560abd5-1.image @@ -0,0 +1 @@ +640x360 16spp clamp-off 52a1a46f3a46d230 diff --git a/crates/crust-core/tests/data/import_baselines/cornellbox_usda-bb1cc653d4ac376a-1.digest b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-bb1cc653d4ac376a-1.digest new file mode 100644 index 000000000..0e859a952 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-bb1cc653d4ac376a-1.digest @@ -0,0 +1,40 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/scene/camera1") +camera: Camera { origin: Vec3A(0.0074343784, 1.9913422, 4.0133057), lower_left_corner: Vec3A(-8.881443, -3.0086517, -0.98669434), horizontal: Vec3A(17.777756, 0.0, 0.0), vertical: Vec3A(0.0, 9.999988, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: Some(Vec4(0.0, 0.0, -1.0, 3.9133058)), far: Some(Vec4(0.0, 0.0, 1.0, 9995.986)), planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: None +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 640, height: 360, region: PixelRect { x0: 0, y0: 0, x1: 640, y1: 360 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 12.700017, aperture: [25.4, 25.4], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 5.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/cornellbox.usda"], invisible_overrides: Some(0) } +layer: $DIR/cornellbox.usda +warning: Warning { code: AssetUnsupportedByHost, kind: Skipped, count: 1, prims: [], message: "No asset loader: environment map $DIR/sky_gradient.exr ignored — the dome falls back to its uniform colour. Use Scene::from_usd_with_assets to supply one." } +warning: Warning { code: MaterialFallbackDefault, kind: Skipped, count: 1, prims: ["/scene/Looks/initialShadingGroup"], message: "Material /scene/Looks/initialShadingGroup has no surface shader — using default grey OpenPBR" } +lights: 1 +light 0: dome name Some("/scene/Sky") lpe None pmf 1.0 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 5 geometries, PrimitiveBreakdown { triangles: 822, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 2 } top level, PrimitiveBreakdown { triangles: 1582, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 2 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 4.0 motion [] pieces all=10:88b22fc3345d5b05 camera=10:88b22fc3345d5b05 shadow=10:88b22fc3345d5b05 indirect=10:88b22fc3345d5b05 +geom 1: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.2 motion [] pieces all=760:c2b60a75c52c78b9 camera=760:c2b60a75c52c78b9 shadow=760:c2b60a75c52c78b9 indirect=760:c2b60a75c52c78b9 +geom 2: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=12:94a297badef437e1 camera=12:94a297badef437e1 shadow=12:94a297badef437e1 indirect=12:94a297badef437e1 +geom 3: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.25 motion [] pieces all=800:4a8c9f44d777e131 camera=800:4a8c9f44d777e131 shadow=800:4a8c9f44d777e131 indirect=800:4a8c9f44d777e131 +geom 4: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.3585339 motion [] pieces all=760:2344ecf63e12c441 camera=760:2344ecf63e12c441 shadow=760:2344ecf63e12c441 indirect=760:2344ecf63e12c441 +provenance material /scene/Looks/initialShadingGroup: MaterialOrigin { slots: [0, 1, 2, 3, 4], displaced: false } +provenance light /scene/Sky: LightOrigin { index: 0, geoms: 0..0 } +provenance geometry 0..1: /scene/pCube1 +provenance geometry 1..2: /scene/pSphere1 +provenance geometry 2..3: /scene/pCube2 +provenance geometry 3..4: /scene/pTorus1 +provenance geometry 4..5: /scene/pSphere2 +provenance mesh: MeshOrigin { geom_id: 0, slot: 0, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 1, slot: 1, baked: false, moving: false } +provenance mesh: MeshOrigin { geom_id: 2, slot: 2, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 3, slot: 3, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 4, slot: 1, baked: false, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 12343188411137242430, n_points: 8, n_indices: 20, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 1: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 17119738035130870988, n_points: 382, n_indices: 1560, n_uvs: None, smooth: false, material: 0 }), placements: 2, shared: false, displaced: false } +provenance mesh slot 2: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 1739488954094729910, n_points: 8, n_indices: 24, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 3: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 6096447469814747168, n_points: 400, n_indices: 1600, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/scene/camera1"), cameras: ["/scene/camera1"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/scene/camera1"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/cornellbox_usda-bb1cc653d4ac376a-1.image b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-bb1cc653d4ac376a-1.image new file mode 100644 index 000000000..ba4884437 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-bb1cc653d4ac376a-1.image @@ -0,0 +1 @@ +640x360 16spp clamp-off 52a1a46f3a46d230 diff --git a/crates/crust-core/tests/data/import_baselines/cornellbox_usda-bb1cc653d4ac376a-2.digest b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-bb1cc653d4ac376a-2.digest new file mode 100644 index 000000000..0e859a952 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-bb1cc653d4ac376a-2.digest @@ -0,0 +1,40 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/scene/camera1") +camera: Camera { origin: Vec3A(0.0074343784, 1.9913422, 4.0133057), lower_left_corner: Vec3A(-8.881443, -3.0086517, -0.98669434), horizontal: Vec3A(17.777756, 0.0, 0.0), vertical: Vec3A(0.0, 9.999988, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: Some(Vec4(0.0, 0.0, -1.0, 3.9133058)), far: Some(Vec4(0.0, 0.0, 1.0, 9995.986)), planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: None +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 640, height: 360, region: PixelRect { x0: 0, y0: 0, x1: 640, y1: 360 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 12.700017, aperture: [25.4, 25.4], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 5.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/cornellbox.usda"], invisible_overrides: Some(0) } +layer: $DIR/cornellbox.usda +warning: Warning { code: AssetUnsupportedByHost, kind: Skipped, count: 1, prims: [], message: "No asset loader: environment map $DIR/sky_gradient.exr ignored — the dome falls back to its uniform colour. Use Scene::from_usd_with_assets to supply one." } +warning: Warning { code: MaterialFallbackDefault, kind: Skipped, count: 1, prims: ["/scene/Looks/initialShadingGroup"], message: "Material /scene/Looks/initialShadingGroup has no surface shader — using default grey OpenPBR" } +lights: 1 +light 0: dome name Some("/scene/Sky") lpe None pmf 1.0 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 5 geometries, PrimitiveBreakdown { triangles: 822, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 2 } top level, PrimitiveBreakdown { triangles: 1582, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 2 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 4.0 motion [] pieces all=10:88b22fc3345d5b05 camera=10:88b22fc3345d5b05 shadow=10:88b22fc3345d5b05 indirect=10:88b22fc3345d5b05 +geom 1: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.2 motion [] pieces all=760:c2b60a75c52c78b9 camera=760:c2b60a75c52c78b9 shadow=760:c2b60a75c52c78b9 indirect=760:c2b60a75c52c78b9 +geom 2: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=12:94a297badef437e1 camera=12:94a297badef437e1 shadow=12:94a297badef437e1 indirect=12:94a297badef437e1 +geom 3: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.25 motion [] pieces all=800:4a8c9f44d777e131 camera=800:4a8c9f44d777e131 shadow=800:4a8c9f44d777e131 indirect=800:4a8c9f44d777e131 +geom 4: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.3585339 motion [] pieces all=760:2344ecf63e12c441 camera=760:2344ecf63e12c441 shadow=760:2344ecf63e12c441 indirect=760:2344ecf63e12c441 +provenance material /scene/Looks/initialShadingGroup: MaterialOrigin { slots: [0, 1, 2, 3, 4], displaced: false } +provenance light /scene/Sky: LightOrigin { index: 0, geoms: 0..0 } +provenance geometry 0..1: /scene/pCube1 +provenance geometry 1..2: /scene/pSphere1 +provenance geometry 2..3: /scene/pCube2 +provenance geometry 3..4: /scene/pTorus1 +provenance geometry 4..5: /scene/pSphere2 +provenance mesh: MeshOrigin { geom_id: 0, slot: 0, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 1, slot: 1, baked: false, moving: false } +provenance mesh: MeshOrigin { geom_id: 2, slot: 2, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 3, slot: 3, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 4, slot: 1, baked: false, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 12343188411137242430, n_points: 8, n_indices: 20, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 1: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 17119738035130870988, n_points: 382, n_indices: 1560, n_uvs: None, smooth: false, material: 0 }), placements: 2, shared: false, displaced: false } +provenance mesh slot 2: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 1739488954094729910, n_points: 8, n_indices: 24, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 3: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 6096447469814747168, n_points: 400, n_indices: 1600, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/scene/camera1"), cameras: ["/scene/camera1"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/scene/camera1"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/cornellbox_usda-bb1cc653d4ac376a-2.image b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-bb1cc653d4ac376a-2.image new file mode 100644 index 000000000..ba4884437 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-bb1cc653d4ac376a-2.image @@ -0,0 +1 @@ +640x360 16spp clamp-off 52a1a46f3a46d230 diff --git a/crates/crust-core/tests/data/import_baselines/cornellbox_usda-bb1cc653d4ac376a-3.digest b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-bb1cc653d4ac376a-3.digest new file mode 100644 index 000000000..0e859a952 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-bb1cc653d4ac376a-3.digest @@ -0,0 +1,40 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/scene/camera1") +camera: Camera { origin: Vec3A(0.0074343784, 1.9913422, 4.0133057), lower_left_corner: Vec3A(-8.881443, -3.0086517, -0.98669434), horizontal: Vec3A(17.777756, 0.0, 0.0), vertical: Vec3A(0.0, 9.999988, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: Some(Vec4(0.0, 0.0, -1.0, 3.9133058)), far: Some(Vec4(0.0, 0.0, 1.0, 9995.986)), planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: None +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 640, height: 360, region: PixelRect { x0: 0, y0: 0, x1: 640, y1: 360 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 12.700017, aperture: [25.4, 25.4], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 5.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/cornellbox.usda"], invisible_overrides: Some(0) } +layer: $DIR/cornellbox.usda +warning: Warning { code: AssetUnsupportedByHost, kind: Skipped, count: 1, prims: [], message: "No asset loader: environment map $DIR/sky_gradient.exr ignored — the dome falls back to its uniform colour. Use Scene::from_usd_with_assets to supply one." } +warning: Warning { code: MaterialFallbackDefault, kind: Skipped, count: 1, prims: ["/scene/Looks/initialShadingGroup"], message: "Material /scene/Looks/initialShadingGroup has no surface shader — using default grey OpenPBR" } +lights: 1 +light 0: dome name Some("/scene/Sky") lpe None pmf 1.0 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 5 geometries, PrimitiveBreakdown { triangles: 822, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 2 } top level, PrimitiveBreakdown { triangles: 1582, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 2 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 4.0 motion [] pieces all=10:88b22fc3345d5b05 camera=10:88b22fc3345d5b05 shadow=10:88b22fc3345d5b05 indirect=10:88b22fc3345d5b05 +geom 1: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.2 motion [] pieces all=760:c2b60a75c52c78b9 camera=760:c2b60a75c52c78b9 shadow=760:c2b60a75c52c78b9 indirect=760:c2b60a75c52c78b9 +geom 2: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=12:94a297badef437e1 camera=12:94a297badef437e1 shadow=12:94a297badef437e1 indirect=12:94a297badef437e1 +geom 3: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.25 motion [] pieces all=800:4a8c9f44d777e131 camera=800:4a8c9f44d777e131 shadow=800:4a8c9f44d777e131 indirect=800:4a8c9f44d777e131 +geom 4: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.3585339 motion [] pieces all=760:2344ecf63e12c441 camera=760:2344ecf63e12c441 shadow=760:2344ecf63e12c441 indirect=760:2344ecf63e12c441 +provenance material /scene/Looks/initialShadingGroup: MaterialOrigin { slots: [0, 1, 2, 3, 4], displaced: false } +provenance light /scene/Sky: LightOrigin { index: 0, geoms: 0..0 } +provenance geometry 0..1: /scene/pCube1 +provenance geometry 1..2: /scene/pSphere1 +provenance geometry 2..3: /scene/pCube2 +provenance geometry 3..4: /scene/pTorus1 +provenance geometry 4..5: /scene/pSphere2 +provenance mesh: MeshOrigin { geom_id: 0, slot: 0, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 1, slot: 1, baked: false, moving: false } +provenance mesh: MeshOrigin { geom_id: 2, slot: 2, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 3, slot: 3, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 4, slot: 1, baked: false, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 12343188411137242430, n_points: 8, n_indices: 20, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 1: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 17119738035130870988, n_points: 382, n_indices: 1560, n_uvs: None, smooth: false, material: 0 }), placements: 2, shared: false, displaced: false } +provenance mesh slot 2: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 1739488954094729910, n_points: 8, n_indices: 24, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 3: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 6096447469814747168, n_points: 400, n_indices: 1600, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/scene/camera1"), cameras: ["/scene/camera1"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/scene/camera1"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/cornellbox_usda-bb1cc653d4ac376a-3.image b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-bb1cc653d4ac376a-3.image new file mode 100644 index 000000000..ba4884437 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-bb1cc653d4ac376a-3.image @@ -0,0 +1 @@ +640x360 16spp clamp-off 52a1a46f3a46d230 diff --git a/crates/crust-core/tests/data/import_baselines/cornellbox_usda-bb1cc653d4ac376a-4.digest b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-bb1cc653d4ac376a-4.digest new file mode 100644 index 000000000..0e859a952 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-bb1cc653d4ac376a-4.digest @@ -0,0 +1,40 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/scene/camera1") +camera: Camera { origin: Vec3A(0.0074343784, 1.9913422, 4.0133057), lower_left_corner: Vec3A(-8.881443, -3.0086517, -0.98669434), horizontal: Vec3A(17.777756, 0.0, 0.0), vertical: Vec3A(0.0, 9.999988, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: Some(Vec4(0.0, 0.0, -1.0, 3.9133058)), far: Some(Vec4(0.0, 0.0, 1.0, 9995.986)), planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: None +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 640, height: 360, region: PixelRect { x0: 0, y0: 0, x1: 640, y1: 360 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 12.700017, aperture: [25.4, 25.4], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 5.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/cornellbox.usda"], invisible_overrides: Some(0) } +layer: $DIR/cornellbox.usda +warning: Warning { code: AssetUnsupportedByHost, kind: Skipped, count: 1, prims: [], message: "No asset loader: environment map $DIR/sky_gradient.exr ignored — the dome falls back to its uniform colour. Use Scene::from_usd_with_assets to supply one." } +warning: Warning { code: MaterialFallbackDefault, kind: Skipped, count: 1, prims: ["/scene/Looks/initialShadingGroup"], message: "Material /scene/Looks/initialShadingGroup has no surface shader — using default grey OpenPBR" } +lights: 1 +light 0: dome name Some("/scene/Sky") lpe None pmf 1.0 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 5 geometries, PrimitiveBreakdown { triangles: 822, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 2 } top level, PrimitiveBreakdown { triangles: 1582, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 2 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 4.0 motion [] pieces all=10:88b22fc3345d5b05 camera=10:88b22fc3345d5b05 shadow=10:88b22fc3345d5b05 indirect=10:88b22fc3345d5b05 +geom 1: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.2 motion [] pieces all=760:c2b60a75c52c78b9 camera=760:c2b60a75c52c78b9 shadow=760:c2b60a75c52c78b9 indirect=760:c2b60a75c52c78b9 +geom 2: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=12:94a297badef437e1 camera=12:94a297badef437e1 shadow=12:94a297badef437e1 indirect=12:94a297badef437e1 +geom 3: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.25 motion [] pieces all=800:4a8c9f44d777e131 camera=800:4a8c9f44d777e131 shadow=800:4a8c9f44d777e131 indirect=800:4a8c9f44d777e131 +geom 4: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.3585339 motion [] pieces all=760:2344ecf63e12c441 camera=760:2344ecf63e12c441 shadow=760:2344ecf63e12c441 indirect=760:2344ecf63e12c441 +provenance material /scene/Looks/initialShadingGroup: MaterialOrigin { slots: [0, 1, 2, 3, 4], displaced: false } +provenance light /scene/Sky: LightOrigin { index: 0, geoms: 0..0 } +provenance geometry 0..1: /scene/pCube1 +provenance geometry 1..2: /scene/pSphere1 +provenance geometry 2..3: /scene/pCube2 +provenance geometry 3..4: /scene/pTorus1 +provenance geometry 4..5: /scene/pSphere2 +provenance mesh: MeshOrigin { geom_id: 0, slot: 0, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 1, slot: 1, baked: false, moving: false } +provenance mesh: MeshOrigin { geom_id: 2, slot: 2, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 3, slot: 3, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 4, slot: 1, baked: false, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 12343188411137242430, n_points: 8, n_indices: 20, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 1: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 17119738035130870988, n_points: 382, n_indices: 1560, n_uvs: None, smooth: false, material: 0 }), placements: 2, shared: false, displaced: false } +provenance mesh slot 2: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 1739488954094729910, n_points: 8, n_indices: 24, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 3: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 6096447469814747168, n_points: 400, n_indices: 1600, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/scene/camera1"), cameras: ["/scene/camera1"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/scene/camera1"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/cornellbox_usda-bb1cc653d4ac376a-4.image b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-bb1cc653d4ac376a-4.image new file mode 100644 index 000000000..ba4884437 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-bb1cc653d4ac376a-4.image @@ -0,0 +1 @@ +640x360 16spp clamp-off 52a1a46f3a46d230 diff --git a/crates/crust-core/tests/data/import_baselines/cornellbox_usda-bb1cc653d4ac376a-5.digest b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-bb1cc653d4ac376a-5.digest new file mode 100644 index 000000000..0e859a952 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-bb1cc653d4ac376a-5.digest @@ -0,0 +1,40 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/scene/camera1") +camera: Camera { origin: Vec3A(0.0074343784, 1.9913422, 4.0133057), lower_left_corner: Vec3A(-8.881443, -3.0086517, -0.98669434), horizontal: Vec3A(17.777756, 0.0, 0.0), vertical: Vec3A(0.0, 9.999988, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: Some(Vec4(0.0, 0.0, -1.0, 3.9133058)), far: Some(Vec4(0.0, 0.0, 1.0, 9995.986)), planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: None +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 640, height: 360, region: PixelRect { x0: 0, y0: 0, x1: 640, y1: 360 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 12.700017, aperture: [25.4, 25.4], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 5.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/cornellbox.usda"], invisible_overrides: Some(0) } +layer: $DIR/cornellbox.usda +warning: Warning { code: AssetUnsupportedByHost, kind: Skipped, count: 1, prims: [], message: "No asset loader: environment map $DIR/sky_gradient.exr ignored — the dome falls back to its uniform colour. Use Scene::from_usd_with_assets to supply one." } +warning: Warning { code: MaterialFallbackDefault, kind: Skipped, count: 1, prims: ["/scene/Looks/initialShadingGroup"], message: "Material /scene/Looks/initialShadingGroup has no surface shader — using default grey OpenPBR" } +lights: 1 +light 0: dome name Some("/scene/Sky") lpe None pmf 1.0 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 5 geometries, PrimitiveBreakdown { triangles: 822, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 2 } top level, PrimitiveBreakdown { triangles: 1582, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 2 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 4.0 motion [] pieces all=10:88b22fc3345d5b05 camera=10:88b22fc3345d5b05 shadow=10:88b22fc3345d5b05 indirect=10:88b22fc3345d5b05 +geom 1: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.2 motion [] pieces all=760:c2b60a75c52c78b9 camera=760:c2b60a75c52c78b9 shadow=760:c2b60a75c52c78b9 indirect=760:c2b60a75c52c78b9 +geom 2: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=12:94a297badef437e1 camera=12:94a297badef437e1 shadow=12:94a297badef437e1 indirect=12:94a297badef437e1 +geom 3: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.25 motion [] pieces all=800:4a8c9f44d777e131 camera=800:4a8c9f44d777e131 shadow=800:4a8c9f44d777e131 indirect=800:4a8c9f44d777e131 +geom 4: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.3585339 motion [] pieces all=760:2344ecf63e12c441 camera=760:2344ecf63e12c441 shadow=760:2344ecf63e12c441 indirect=760:2344ecf63e12c441 +provenance material /scene/Looks/initialShadingGroup: MaterialOrigin { slots: [0, 1, 2, 3, 4], displaced: false } +provenance light /scene/Sky: LightOrigin { index: 0, geoms: 0..0 } +provenance geometry 0..1: /scene/pCube1 +provenance geometry 1..2: /scene/pSphere1 +provenance geometry 2..3: /scene/pCube2 +provenance geometry 3..4: /scene/pTorus1 +provenance geometry 4..5: /scene/pSphere2 +provenance mesh: MeshOrigin { geom_id: 0, slot: 0, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 1, slot: 1, baked: false, moving: false } +provenance mesh: MeshOrigin { geom_id: 2, slot: 2, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 3, slot: 3, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 4, slot: 1, baked: false, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 12343188411137242430, n_points: 8, n_indices: 20, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 1: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 17119738035130870988, n_points: 382, n_indices: 1560, n_uvs: None, smooth: false, material: 0 }), placements: 2, shared: false, displaced: false } +provenance mesh slot 2: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 1739488954094729910, n_points: 8, n_indices: 24, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 3: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 6096447469814747168, n_points: 400, n_indices: 1600, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/scene/camera1"), cameras: ["/scene/camera1"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/scene/camera1"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/cornellbox_usda-bb1cc653d4ac376a-5.image b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-bb1cc653d4ac376a-5.image new file mode 100644 index 000000000..ba4884437 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-bb1cc653d4ac376a-5.image @@ -0,0 +1 @@ +640x360 16spp clamp-off 52a1a46f3a46d230 diff --git a/crates/crust-core/tests/data/import_baselines/cornellbox_usda-bba4bdda287871cf-1.digest b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-bba4bdda287871cf-1.digest new file mode 100644 index 000000000..0e859a952 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-bba4bdda287871cf-1.digest @@ -0,0 +1,40 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/scene/camera1") +camera: Camera { origin: Vec3A(0.0074343784, 1.9913422, 4.0133057), lower_left_corner: Vec3A(-8.881443, -3.0086517, -0.98669434), horizontal: Vec3A(17.777756, 0.0, 0.0), vertical: Vec3A(0.0, 9.999988, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: Some(Vec4(0.0, 0.0, -1.0, 3.9133058)), far: Some(Vec4(0.0, 0.0, 1.0, 9995.986)), planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: None +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 640, height: 360, region: PixelRect { x0: 0, y0: 0, x1: 640, y1: 360 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 12.700017, aperture: [25.4, 25.4], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 5.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/cornellbox.usda"], invisible_overrides: Some(0) } +layer: $DIR/cornellbox.usda +warning: Warning { code: AssetUnsupportedByHost, kind: Skipped, count: 1, prims: [], message: "No asset loader: environment map $DIR/sky_gradient.exr ignored — the dome falls back to its uniform colour. Use Scene::from_usd_with_assets to supply one." } +warning: Warning { code: MaterialFallbackDefault, kind: Skipped, count: 1, prims: ["/scene/Looks/initialShadingGroup"], message: "Material /scene/Looks/initialShadingGroup has no surface shader — using default grey OpenPBR" } +lights: 1 +light 0: dome name Some("/scene/Sky") lpe None pmf 1.0 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 5 geometries, PrimitiveBreakdown { triangles: 822, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 2 } top level, PrimitiveBreakdown { triangles: 1582, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 2 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 4.0 motion [] pieces all=10:88b22fc3345d5b05 camera=10:88b22fc3345d5b05 shadow=10:88b22fc3345d5b05 indirect=10:88b22fc3345d5b05 +geom 1: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.2 motion [] pieces all=760:c2b60a75c52c78b9 camera=760:c2b60a75c52c78b9 shadow=760:c2b60a75c52c78b9 indirect=760:c2b60a75c52c78b9 +geom 2: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=12:94a297badef437e1 camera=12:94a297badef437e1 shadow=12:94a297badef437e1 indirect=12:94a297badef437e1 +geom 3: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.25 motion [] pieces all=800:4a8c9f44d777e131 camera=800:4a8c9f44d777e131 shadow=800:4a8c9f44d777e131 indirect=800:4a8c9f44d777e131 +geom 4: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.3585339 motion [] pieces all=760:2344ecf63e12c441 camera=760:2344ecf63e12c441 shadow=760:2344ecf63e12c441 indirect=760:2344ecf63e12c441 +provenance material /scene/Looks/initialShadingGroup: MaterialOrigin { slots: [0, 1, 2, 3, 4], displaced: false } +provenance light /scene/Sky: LightOrigin { index: 0, geoms: 0..0 } +provenance geometry 0..1: /scene/pCube1 +provenance geometry 1..2: /scene/pSphere1 +provenance geometry 2..3: /scene/pCube2 +provenance geometry 3..4: /scene/pTorus1 +provenance geometry 4..5: /scene/pSphere2 +provenance mesh: MeshOrigin { geom_id: 0, slot: 0, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 1, slot: 1, baked: false, moving: false } +provenance mesh: MeshOrigin { geom_id: 2, slot: 2, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 3, slot: 3, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 4, slot: 1, baked: false, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 12343188411137242430, n_points: 8, n_indices: 20, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 1: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 17119738035130870988, n_points: 382, n_indices: 1560, n_uvs: None, smooth: false, material: 0 }), placements: 2, shared: false, displaced: false } +provenance mesh slot 2: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 1739488954094729910, n_points: 8, n_indices: 24, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 3: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 6096447469814747168, n_points: 400, n_indices: 1600, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/scene/camera1"), cameras: ["/scene/camera1"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/scene/camera1"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/cornellbox_usda-bba4bdda287871cf-1.image b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-bba4bdda287871cf-1.image new file mode 100644 index 000000000..ba4884437 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-bba4bdda287871cf-1.image @@ -0,0 +1 @@ +640x360 16spp clamp-off 52a1a46f3a46d230 diff --git a/crates/crust-core/tests/data/import_baselines/cornellbox_usda-bba4bdda287871cf-2.digest b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-bba4bdda287871cf-2.digest new file mode 100644 index 000000000..0e859a952 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-bba4bdda287871cf-2.digest @@ -0,0 +1,40 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/scene/camera1") +camera: Camera { origin: Vec3A(0.0074343784, 1.9913422, 4.0133057), lower_left_corner: Vec3A(-8.881443, -3.0086517, -0.98669434), horizontal: Vec3A(17.777756, 0.0, 0.0), vertical: Vec3A(0.0, 9.999988, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: Some(Vec4(0.0, 0.0, -1.0, 3.9133058)), far: Some(Vec4(0.0, 0.0, 1.0, 9995.986)), planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: None +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 640, height: 360, region: PixelRect { x0: 0, y0: 0, x1: 640, y1: 360 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 12.700017, aperture: [25.4, 25.4], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 5.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/cornellbox.usda"], invisible_overrides: Some(0) } +layer: $DIR/cornellbox.usda +warning: Warning { code: AssetUnsupportedByHost, kind: Skipped, count: 1, prims: [], message: "No asset loader: environment map $DIR/sky_gradient.exr ignored — the dome falls back to its uniform colour. Use Scene::from_usd_with_assets to supply one." } +warning: Warning { code: MaterialFallbackDefault, kind: Skipped, count: 1, prims: ["/scene/Looks/initialShadingGroup"], message: "Material /scene/Looks/initialShadingGroup has no surface shader — using default grey OpenPBR" } +lights: 1 +light 0: dome name Some("/scene/Sky") lpe None pmf 1.0 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 5 geometries, PrimitiveBreakdown { triangles: 822, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 2 } top level, PrimitiveBreakdown { triangles: 1582, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 2 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 4.0 motion [] pieces all=10:88b22fc3345d5b05 camera=10:88b22fc3345d5b05 shadow=10:88b22fc3345d5b05 indirect=10:88b22fc3345d5b05 +geom 1: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.2 motion [] pieces all=760:c2b60a75c52c78b9 camera=760:c2b60a75c52c78b9 shadow=760:c2b60a75c52c78b9 indirect=760:c2b60a75c52c78b9 +geom 2: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=12:94a297badef437e1 camera=12:94a297badef437e1 shadow=12:94a297badef437e1 indirect=12:94a297badef437e1 +geom 3: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.25 motion [] pieces all=800:4a8c9f44d777e131 camera=800:4a8c9f44d777e131 shadow=800:4a8c9f44d777e131 indirect=800:4a8c9f44d777e131 +geom 4: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.3585339 motion [] pieces all=760:2344ecf63e12c441 camera=760:2344ecf63e12c441 shadow=760:2344ecf63e12c441 indirect=760:2344ecf63e12c441 +provenance material /scene/Looks/initialShadingGroup: MaterialOrigin { slots: [0, 1, 2, 3, 4], displaced: false } +provenance light /scene/Sky: LightOrigin { index: 0, geoms: 0..0 } +provenance geometry 0..1: /scene/pCube1 +provenance geometry 1..2: /scene/pSphere1 +provenance geometry 2..3: /scene/pCube2 +provenance geometry 3..4: /scene/pTorus1 +provenance geometry 4..5: /scene/pSphere2 +provenance mesh: MeshOrigin { geom_id: 0, slot: 0, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 1, slot: 1, baked: false, moving: false } +provenance mesh: MeshOrigin { geom_id: 2, slot: 2, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 3, slot: 3, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 4, slot: 1, baked: false, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 12343188411137242430, n_points: 8, n_indices: 20, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 1: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 17119738035130870988, n_points: 382, n_indices: 1560, n_uvs: None, smooth: false, material: 0 }), placements: 2, shared: false, displaced: false } +provenance mesh slot 2: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 1739488954094729910, n_points: 8, n_indices: 24, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 3: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 6096447469814747168, n_points: 400, n_indices: 1600, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/scene/camera1"), cameras: ["/scene/camera1"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/scene/camera1"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/cornellbox_usda-bba4bdda287871cf-2.image b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-bba4bdda287871cf-2.image new file mode 100644 index 000000000..ba4884437 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-bba4bdda287871cf-2.image @@ -0,0 +1 @@ +640x360 16spp clamp-off 52a1a46f3a46d230 diff --git a/crates/crust-core/tests/data/import_baselines/cornellbox_usda-be34c0d526943796-1.digest b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-be34c0d526943796-1.digest new file mode 100644 index 000000000..0e859a952 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-be34c0d526943796-1.digest @@ -0,0 +1,40 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/scene/camera1") +camera: Camera { origin: Vec3A(0.0074343784, 1.9913422, 4.0133057), lower_left_corner: Vec3A(-8.881443, -3.0086517, -0.98669434), horizontal: Vec3A(17.777756, 0.0, 0.0), vertical: Vec3A(0.0, 9.999988, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: Some(Vec4(0.0, 0.0, -1.0, 3.9133058)), far: Some(Vec4(0.0, 0.0, 1.0, 9995.986)), planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: None +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 640, height: 360, region: PixelRect { x0: 0, y0: 0, x1: 640, y1: 360 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 12.700017, aperture: [25.4, 25.4], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 5.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/cornellbox.usda"], invisible_overrides: Some(0) } +layer: $DIR/cornellbox.usda +warning: Warning { code: AssetUnsupportedByHost, kind: Skipped, count: 1, prims: [], message: "No asset loader: environment map $DIR/sky_gradient.exr ignored — the dome falls back to its uniform colour. Use Scene::from_usd_with_assets to supply one." } +warning: Warning { code: MaterialFallbackDefault, kind: Skipped, count: 1, prims: ["/scene/Looks/initialShadingGroup"], message: "Material /scene/Looks/initialShadingGroup has no surface shader — using default grey OpenPBR" } +lights: 1 +light 0: dome name Some("/scene/Sky") lpe None pmf 1.0 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 5 geometries, PrimitiveBreakdown { triangles: 822, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 2 } top level, PrimitiveBreakdown { triangles: 1582, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 2 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 4.0 motion [] pieces all=10:88b22fc3345d5b05 camera=10:88b22fc3345d5b05 shadow=10:88b22fc3345d5b05 indirect=10:88b22fc3345d5b05 +geom 1: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.2 motion [] pieces all=760:c2b60a75c52c78b9 camera=760:c2b60a75c52c78b9 shadow=760:c2b60a75c52c78b9 indirect=760:c2b60a75c52c78b9 +geom 2: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=12:94a297badef437e1 camera=12:94a297badef437e1 shadow=12:94a297badef437e1 indirect=12:94a297badef437e1 +geom 3: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.25 motion [] pieces all=800:4a8c9f44d777e131 camera=800:4a8c9f44d777e131 shadow=800:4a8c9f44d777e131 indirect=800:4a8c9f44d777e131 +geom 4: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.3585339 motion [] pieces all=760:2344ecf63e12c441 camera=760:2344ecf63e12c441 shadow=760:2344ecf63e12c441 indirect=760:2344ecf63e12c441 +provenance material /scene/Looks/initialShadingGroup: MaterialOrigin { slots: [0, 1, 2, 3, 4], displaced: false } +provenance light /scene/Sky: LightOrigin { index: 0, geoms: 0..0 } +provenance geometry 0..1: /scene/pCube1 +provenance geometry 1..2: /scene/pSphere1 +provenance geometry 2..3: /scene/pCube2 +provenance geometry 3..4: /scene/pTorus1 +provenance geometry 4..5: /scene/pSphere2 +provenance mesh: MeshOrigin { geom_id: 0, slot: 0, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 1, slot: 1, baked: false, moving: false } +provenance mesh: MeshOrigin { geom_id: 2, slot: 2, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 3, slot: 3, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 4, slot: 1, baked: false, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 12343188411137242430, n_points: 8, n_indices: 20, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 1: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 17119738035130870988, n_points: 382, n_indices: 1560, n_uvs: None, smooth: false, material: 0 }), placements: 2, shared: false, displaced: false } +provenance mesh slot 2: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 1739488954094729910, n_points: 8, n_indices: 24, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 3: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 6096447469814747168, n_points: 400, n_indices: 1600, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/scene/camera1"), cameras: ["/scene/camera1"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/scene/camera1"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/cornellbox_usda-be34c0d526943796-1.image b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-be34c0d526943796-1.image new file mode 100644 index 000000000..ba4884437 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-be34c0d526943796-1.image @@ -0,0 +1 @@ +640x360 16spp clamp-off 52a1a46f3a46d230 diff --git a/crates/crust-core/tests/data/import_baselines/cornellbox_usda-cb7b0dee2139a326-1.digest b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-cb7b0dee2139a326-1.digest new file mode 100644 index 000000000..0e859a952 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-cb7b0dee2139a326-1.digest @@ -0,0 +1,40 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/scene/camera1") +camera: Camera { origin: Vec3A(0.0074343784, 1.9913422, 4.0133057), lower_left_corner: Vec3A(-8.881443, -3.0086517, -0.98669434), horizontal: Vec3A(17.777756, 0.0, 0.0), vertical: Vec3A(0.0, 9.999988, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: Some(Vec4(0.0, 0.0, -1.0, 3.9133058)), far: Some(Vec4(0.0, 0.0, 1.0, 9995.986)), planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: None +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 640, height: 360, region: PixelRect { x0: 0, y0: 0, x1: 640, y1: 360 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 12.700017, aperture: [25.4, 25.4], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 5.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/cornellbox.usda"], invisible_overrides: Some(0) } +layer: $DIR/cornellbox.usda +warning: Warning { code: AssetUnsupportedByHost, kind: Skipped, count: 1, prims: [], message: "No asset loader: environment map $DIR/sky_gradient.exr ignored — the dome falls back to its uniform colour. Use Scene::from_usd_with_assets to supply one." } +warning: Warning { code: MaterialFallbackDefault, kind: Skipped, count: 1, prims: ["/scene/Looks/initialShadingGroup"], message: "Material /scene/Looks/initialShadingGroup has no surface shader — using default grey OpenPBR" } +lights: 1 +light 0: dome name Some("/scene/Sky") lpe None pmf 1.0 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 5 geometries, PrimitiveBreakdown { triangles: 822, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 2 } top level, PrimitiveBreakdown { triangles: 1582, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 2 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 4.0 motion [] pieces all=10:88b22fc3345d5b05 camera=10:88b22fc3345d5b05 shadow=10:88b22fc3345d5b05 indirect=10:88b22fc3345d5b05 +geom 1: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.2 motion [] pieces all=760:c2b60a75c52c78b9 camera=760:c2b60a75c52c78b9 shadow=760:c2b60a75c52c78b9 indirect=760:c2b60a75c52c78b9 +geom 2: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=12:94a297badef437e1 camera=12:94a297badef437e1 shadow=12:94a297badef437e1 indirect=12:94a297badef437e1 +geom 3: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.25 motion [] pieces all=800:4a8c9f44d777e131 camera=800:4a8c9f44d777e131 shadow=800:4a8c9f44d777e131 indirect=800:4a8c9f44d777e131 +geom 4: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.3585339 motion [] pieces all=760:2344ecf63e12c441 camera=760:2344ecf63e12c441 shadow=760:2344ecf63e12c441 indirect=760:2344ecf63e12c441 +provenance material /scene/Looks/initialShadingGroup: MaterialOrigin { slots: [0, 1, 2, 3, 4], displaced: false } +provenance light /scene/Sky: LightOrigin { index: 0, geoms: 0..0 } +provenance geometry 0..1: /scene/pCube1 +provenance geometry 1..2: /scene/pSphere1 +provenance geometry 2..3: /scene/pCube2 +provenance geometry 3..4: /scene/pTorus1 +provenance geometry 4..5: /scene/pSphere2 +provenance mesh: MeshOrigin { geom_id: 0, slot: 0, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 1, slot: 1, baked: false, moving: false } +provenance mesh: MeshOrigin { geom_id: 2, slot: 2, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 3, slot: 3, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 4, slot: 1, baked: false, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 12343188411137242430, n_points: 8, n_indices: 20, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 1: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 17119738035130870988, n_points: 382, n_indices: 1560, n_uvs: None, smooth: false, material: 0 }), placements: 2, shared: false, displaced: false } +provenance mesh slot 2: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 1739488954094729910, n_points: 8, n_indices: 24, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 3: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 6096447469814747168, n_points: 400, n_indices: 1600, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/scene/camera1"), cameras: ["/scene/camera1"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/scene/camera1"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/cornellbox_usda-cb7b0dee2139a326-1.image b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-cb7b0dee2139a326-1.image new file mode 100644 index 000000000..ba4884437 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-cb7b0dee2139a326-1.image @@ -0,0 +1 @@ +640x360 16spp clamp-off 52a1a46f3a46d230 diff --git a/crates/crust-core/tests/data/import_baselines/cornellbox_usda-cdab40c0e9cba23f-1.digest b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-cdab40c0e9cba23f-1.digest new file mode 100644 index 000000000..0e859a952 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-cdab40c0e9cba23f-1.digest @@ -0,0 +1,40 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/scene/camera1") +camera: Camera { origin: Vec3A(0.0074343784, 1.9913422, 4.0133057), lower_left_corner: Vec3A(-8.881443, -3.0086517, -0.98669434), horizontal: Vec3A(17.777756, 0.0, 0.0), vertical: Vec3A(0.0, 9.999988, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: Some(Vec4(0.0, 0.0, -1.0, 3.9133058)), far: Some(Vec4(0.0, 0.0, 1.0, 9995.986)), planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: None +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 640, height: 360, region: PixelRect { x0: 0, y0: 0, x1: 640, y1: 360 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 12.700017, aperture: [25.4, 25.4], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 5.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/cornellbox.usda"], invisible_overrides: Some(0) } +layer: $DIR/cornellbox.usda +warning: Warning { code: AssetUnsupportedByHost, kind: Skipped, count: 1, prims: [], message: "No asset loader: environment map $DIR/sky_gradient.exr ignored — the dome falls back to its uniform colour. Use Scene::from_usd_with_assets to supply one." } +warning: Warning { code: MaterialFallbackDefault, kind: Skipped, count: 1, prims: ["/scene/Looks/initialShadingGroup"], message: "Material /scene/Looks/initialShadingGroup has no surface shader — using default grey OpenPBR" } +lights: 1 +light 0: dome name Some("/scene/Sky") lpe None pmf 1.0 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 5 geometries, PrimitiveBreakdown { triangles: 822, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 2 } top level, PrimitiveBreakdown { triangles: 1582, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 2 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 4.0 motion [] pieces all=10:88b22fc3345d5b05 camera=10:88b22fc3345d5b05 shadow=10:88b22fc3345d5b05 indirect=10:88b22fc3345d5b05 +geom 1: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.2 motion [] pieces all=760:c2b60a75c52c78b9 camera=760:c2b60a75c52c78b9 shadow=760:c2b60a75c52c78b9 indirect=760:c2b60a75c52c78b9 +geom 2: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=12:94a297badef437e1 camera=12:94a297badef437e1 shadow=12:94a297badef437e1 indirect=12:94a297badef437e1 +geom 3: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.25 motion [] pieces all=800:4a8c9f44d777e131 camera=800:4a8c9f44d777e131 shadow=800:4a8c9f44d777e131 indirect=800:4a8c9f44d777e131 +geom 4: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.3585339 motion [] pieces all=760:2344ecf63e12c441 camera=760:2344ecf63e12c441 shadow=760:2344ecf63e12c441 indirect=760:2344ecf63e12c441 +provenance material /scene/Looks/initialShadingGroup: MaterialOrigin { slots: [0, 1, 2, 3, 4], displaced: false } +provenance light /scene/Sky: LightOrigin { index: 0, geoms: 0..0 } +provenance geometry 0..1: /scene/pCube1 +provenance geometry 1..2: /scene/pSphere1 +provenance geometry 2..3: /scene/pCube2 +provenance geometry 3..4: /scene/pTorus1 +provenance geometry 4..5: /scene/pSphere2 +provenance mesh: MeshOrigin { geom_id: 0, slot: 0, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 1, slot: 1, baked: false, moving: false } +provenance mesh: MeshOrigin { geom_id: 2, slot: 2, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 3, slot: 3, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 4, slot: 1, baked: false, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 12343188411137242430, n_points: 8, n_indices: 20, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 1: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 17119738035130870988, n_points: 382, n_indices: 1560, n_uvs: None, smooth: false, material: 0 }), placements: 2, shared: false, displaced: false } +provenance mesh slot 2: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 1739488954094729910, n_points: 8, n_indices: 24, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 3: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 6096447469814747168, n_points: 400, n_indices: 1600, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/scene/camera1"), cameras: ["/scene/camera1"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/scene/camera1"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/cornellbox_usda-cdab40c0e9cba23f-1.image b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-cdab40c0e9cba23f-1.image new file mode 100644 index 000000000..ba4884437 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-cdab40c0e9cba23f-1.image @@ -0,0 +1 @@ +640x360 16spp clamp-off 52a1a46f3a46d230 diff --git a/crates/crust-core/tests/data/import_baselines/cornellbox_usda-cf47b345f0453895-1.digest b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-cf47b345f0453895-1.digest new file mode 100644 index 000000000..0e859a952 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-cf47b345f0453895-1.digest @@ -0,0 +1,40 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/scene/camera1") +camera: Camera { origin: Vec3A(0.0074343784, 1.9913422, 4.0133057), lower_left_corner: Vec3A(-8.881443, -3.0086517, -0.98669434), horizontal: Vec3A(17.777756, 0.0, 0.0), vertical: Vec3A(0.0, 9.999988, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: Some(Vec4(0.0, 0.0, -1.0, 3.9133058)), far: Some(Vec4(0.0, 0.0, 1.0, 9995.986)), planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: None +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 640, height: 360, region: PixelRect { x0: 0, y0: 0, x1: 640, y1: 360 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 12.700017, aperture: [25.4, 25.4], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 5.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/cornellbox.usda"], invisible_overrides: Some(0) } +layer: $DIR/cornellbox.usda +warning: Warning { code: AssetUnsupportedByHost, kind: Skipped, count: 1, prims: [], message: "No asset loader: environment map $DIR/sky_gradient.exr ignored — the dome falls back to its uniform colour. Use Scene::from_usd_with_assets to supply one." } +warning: Warning { code: MaterialFallbackDefault, kind: Skipped, count: 1, prims: ["/scene/Looks/initialShadingGroup"], message: "Material /scene/Looks/initialShadingGroup has no surface shader — using default grey OpenPBR" } +lights: 1 +light 0: dome name Some("/scene/Sky") lpe None pmf 1.0 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 5 geometries, PrimitiveBreakdown { triangles: 822, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 2 } top level, PrimitiveBreakdown { triangles: 1582, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 2 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 4.0 motion [] pieces all=10:88b22fc3345d5b05 camera=10:88b22fc3345d5b05 shadow=10:88b22fc3345d5b05 indirect=10:88b22fc3345d5b05 +geom 1: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.2 motion [] pieces all=760:c2b60a75c52c78b9 camera=760:c2b60a75c52c78b9 shadow=760:c2b60a75c52c78b9 indirect=760:c2b60a75c52c78b9 +geom 2: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=12:94a297badef437e1 camera=12:94a297badef437e1 shadow=12:94a297badef437e1 indirect=12:94a297badef437e1 +geom 3: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.25 motion [] pieces all=800:4a8c9f44d777e131 camera=800:4a8c9f44d777e131 shadow=800:4a8c9f44d777e131 indirect=800:4a8c9f44d777e131 +geom 4: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.3585339 motion [] pieces all=760:2344ecf63e12c441 camera=760:2344ecf63e12c441 shadow=760:2344ecf63e12c441 indirect=760:2344ecf63e12c441 +provenance material /scene/Looks/initialShadingGroup: MaterialOrigin { slots: [0, 1, 2, 3, 4], displaced: false } +provenance light /scene/Sky: LightOrigin { index: 0, geoms: 0..0 } +provenance geometry 0..1: /scene/pCube1 +provenance geometry 1..2: /scene/pSphere1 +provenance geometry 2..3: /scene/pCube2 +provenance geometry 3..4: /scene/pTorus1 +provenance geometry 4..5: /scene/pSphere2 +provenance mesh: MeshOrigin { geom_id: 0, slot: 0, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 1, slot: 1, baked: false, moving: false } +provenance mesh: MeshOrigin { geom_id: 2, slot: 2, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 3, slot: 3, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 4, slot: 1, baked: false, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 12343188411137242430, n_points: 8, n_indices: 20, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 1: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 17119738035130870988, n_points: 382, n_indices: 1560, n_uvs: None, smooth: false, material: 0 }), placements: 2, shared: false, displaced: false } +provenance mesh slot 2: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 1739488954094729910, n_points: 8, n_indices: 24, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 3: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 6096447469814747168, n_points: 400, n_indices: 1600, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/scene/camera1"), cameras: ["/scene/camera1"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/scene/camera1"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/cornellbox_usda-cf47b345f0453895-1.image b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-cf47b345f0453895-1.image new file mode 100644 index 000000000..ba4884437 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-cf47b345f0453895-1.image @@ -0,0 +1 @@ +640x360 16spp clamp-off 52a1a46f3a46d230 diff --git a/crates/crust-core/tests/data/import_baselines/cornellbox_usda-d3d144cf7b8b758b-1.digest b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-d3d144cf7b8b758b-1.digest new file mode 100644 index 000000000..1d5ab0cab --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-d3d144cf7b8b758b-1.digest @@ -0,0 +1,39 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/scene/camera1") +camera: Camera { origin: Vec3A(0.0074343784, 1.9913422, 4.0133057), lower_left_corner: Vec3A(-8.881443, -3.0086517, -0.98669434), horizontal: Vec3A(17.777756, 0.0, 0.0), vertical: Vec3A(0.0, 9.999988, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: Some(Vec4(0.0, 0.0, -1.0, 3.9133058)), far: Some(Vec4(0.0, 0.0, 1.0, 9995.986)), planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: None +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 640, height: 360, region: PixelRect { x0: 0, y0: 0, x1: 640, y1: 360 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 12.700017, aperture: [25.4, 25.4], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 5.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/cornellbox.usda"], invisible_overrides: Some(0) } +layer: $DIR/cornellbox.usda +warning: Warning { code: MaterialFallbackDefault, kind: Skipped, count: 1, prims: ["/scene/Looks/initialShadingGroup"], message: "Material /scene/Looks/initialShadingGroup has no surface shader — using default grey OpenPBR" } +lights: 1 +light 0: dome name Some("/scene/Sky") lpe None pmf 1.0 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 5 geometries, PrimitiveBreakdown { triangles: 822, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 2 } top level, PrimitiveBreakdown { triangles: 1582, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 2 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 4.0 motion [] pieces all=10:88b22fc3345d5b05 camera=10:88b22fc3345d5b05 shadow=10:88b22fc3345d5b05 indirect=10:88b22fc3345d5b05 +geom 1: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.2 motion [] pieces all=760:c2b60a75c52c78b9 camera=760:c2b60a75c52c78b9 shadow=760:c2b60a75c52c78b9 indirect=760:c2b60a75c52c78b9 +geom 2: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=12:94a297badef437e1 camera=12:94a297badef437e1 shadow=12:94a297badef437e1 indirect=12:94a297badef437e1 +geom 3: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.25 motion [] pieces all=800:4a8c9f44d777e131 camera=800:4a8c9f44d777e131 shadow=800:4a8c9f44d777e131 indirect=800:4a8c9f44d777e131 +geom 4: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.3585339 motion [] pieces all=760:2344ecf63e12c441 camera=760:2344ecf63e12c441 shadow=760:2344ecf63e12c441 indirect=760:2344ecf63e12c441 +provenance material /scene/Looks/initialShadingGroup: MaterialOrigin { slots: [0, 1, 2, 3, 4], displaced: false } +provenance light /scene/Sky: LightOrigin { index: 0, geoms: 0..0 } +provenance geometry 0..1: /scene/pCube1 +provenance geometry 1..2: /scene/pSphere1 +provenance geometry 2..3: /scene/pCube2 +provenance geometry 3..4: /scene/pTorus1 +provenance geometry 4..5: /scene/pSphere2 +provenance mesh: MeshOrigin { geom_id: 0, slot: 0, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 1, slot: 1, baked: false, moving: false } +provenance mesh: MeshOrigin { geom_id: 2, slot: 2, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 3, slot: 3, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 4, slot: 1, baked: false, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 12343188411137242430, n_points: 8, n_indices: 20, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 1: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 17119738035130870988, n_points: 382, n_indices: 1560, n_uvs: None, smooth: false, material: 0 }), placements: 2, shared: false, displaced: false } +provenance mesh slot 2: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 1739488954094729910, n_points: 8, n_indices: 24, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 3: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 6096447469814747168, n_points: 400, n_indices: 1600, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: true, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/scene/camera1"), cameras: ["/scene/camera1"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/scene/camera1"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/cornellbox_usda-d3d144cf7b8b758b-1.image b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-d3d144cf7b8b758b-1.image new file mode 100644 index 000000000..7172edbfe --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-d3d144cf7b8b758b-1.image @@ -0,0 +1 @@ +640x360 16spp clamp-off 64ede904b11bab22 diff --git a/crates/crust-core/tests/data/import_baselines/cornellbox_usda-d5734d22b9c37571-1.digest b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-d5734d22b9c37571-1.digest new file mode 100644 index 000000000..0e859a952 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-d5734d22b9c37571-1.digest @@ -0,0 +1,40 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/scene/camera1") +camera: Camera { origin: Vec3A(0.0074343784, 1.9913422, 4.0133057), lower_left_corner: Vec3A(-8.881443, -3.0086517, -0.98669434), horizontal: Vec3A(17.777756, 0.0, 0.0), vertical: Vec3A(0.0, 9.999988, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: Some(Vec4(0.0, 0.0, -1.0, 3.9133058)), far: Some(Vec4(0.0, 0.0, 1.0, 9995.986)), planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: None +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 640, height: 360, region: PixelRect { x0: 0, y0: 0, x1: 640, y1: 360 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 12.700017, aperture: [25.4, 25.4], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 5.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/cornellbox.usda"], invisible_overrides: Some(0) } +layer: $DIR/cornellbox.usda +warning: Warning { code: AssetUnsupportedByHost, kind: Skipped, count: 1, prims: [], message: "No asset loader: environment map $DIR/sky_gradient.exr ignored — the dome falls back to its uniform colour. Use Scene::from_usd_with_assets to supply one." } +warning: Warning { code: MaterialFallbackDefault, kind: Skipped, count: 1, prims: ["/scene/Looks/initialShadingGroup"], message: "Material /scene/Looks/initialShadingGroup has no surface shader — using default grey OpenPBR" } +lights: 1 +light 0: dome name Some("/scene/Sky") lpe None pmf 1.0 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 5 geometries, PrimitiveBreakdown { triangles: 822, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 2 } top level, PrimitiveBreakdown { triangles: 1582, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 2 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 4.0 motion [] pieces all=10:88b22fc3345d5b05 camera=10:88b22fc3345d5b05 shadow=10:88b22fc3345d5b05 indirect=10:88b22fc3345d5b05 +geom 1: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.2 motion [] pieces all=760:c2b60a75c52c78b9 camera=760:c2b60a75c52c78b9 shadow=760:c2b60a75c52c78b9 indirect=760:c2b60a75c52c78b9 +geom 2: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=12:94a297badef437e1 camera=12:94a297badef437e1 shadow=12:94a297badef437e1 indirect=12:94a297badef437e1 +geom 3: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.25 motion [] pieces all=800:4a8c9f44d777e131 camera=800:4a8c9f44d777e131 shadow=800:4a8c9f44d777e131 indirect=800:4a8c9f44d777e131 +geom 4: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.3585339 motion [] pieces all=760:2344ecf63e12c441 camera=760:2344ecf63e12c441 shadow=760:2344ecf63e12c441 indirect=760:2344ecf63e12c441 +provenance material /scene/Looks/initialShadingGroup: MaterialOrigin { slots: [0, 1, 2, 3, 4], displaced: false } +provenance light /scene/Sky: LightOrigin { index: 0, geoms: 0..0 } +provenance geometry 0..1: /scene/pCube1 +provenance geometry 1..2: /scene/pSphere1 +provenance geometry 2..3: /scene/pCube2 +provenance geometry 3..4: /scene/pTorus1 +provenance geometry 4..5: /scene/pSphere2 +provenance mesh: MeshOrigin { geom_id: 0, slot: 0, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 1, slot: 1, baked: false, moving: false } +provenance mesh: MeshOrigin { geom_id: 2, slot: 2, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 3, slot: 3, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 4, slot: 1, baked: false, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 12343188411137242430, n_points: 8, n_indices: 20, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 1: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 17119738035130870988, n_points: 382, n_indices: 1560, n_uvs: None, smooth: false, material: 0 }), placements: 2, shared: false, displaced: false } +provenance mesh slot 2: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 1739488954094729910, n_points: 8, n_indices: 24, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 3: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 6096447469814747168, n_points: 400, n_indices: 1600, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/scene/camera1"), cameras: ["/scene/camera1"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/scene/camera1"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/cornellbox_usda-d5734d22b9c37571-1.image b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-d5734d22b9c37571-1.image new file mode 100644 index 000000000..ba4884437 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-d5734d22b9c37571-1.image @@ -0,0 +1 @@ +640x360 16spp clamp-off 52a1a46f3a46d230 diff --git a/crates/crust-core/tests/data/import_baselines/cornellbox_usda-d5734d22b9c37571-2.digest b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-d5734d22b9c37571-2.digest new file mode 100644 index 000000000..0e859a952 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-d5734d22b9c37571-2.digest @@ -0,0 +1,40 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/scene/camera1") +camera: Camera { origin: Vec3A(0.0074343784, 1.9913422, 4.0133057), lower_left_corner: Vec3A(-8.881443, -3.0086517, -0.98669434), horizontal: Vec3A(17.777756, 0.0, 0.0), vertical: Vec3A(0.0, 9.999988, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: Some(Vec4(0.0, 0.0, -1.0, 3.9133058)), far: Some(Vec4(0.0, 0.0, 1.0, 9995.986)), planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: None +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 640, height: 360, region: PixelRect { x0: 0, y0: 0, x1: 640, y1: 360 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 12.700017, aperture: [25.4, 25.4], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 5.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/cornellbox.usda"], invisible_overrides: Some(0) } +layer: $DIR/cornellbox.usda +warning: Warning { code: AssetUnsupportedByHost, kind: Skipped, count: 1, prims: [], message: "No asset loader: environment map $DIR/sky_gradient.exr ignored — the dome falls back to its uniform colour. Use Scene::from_usd_with_assets to supply one." } +warning: Warning { code: MaterialFallbackDefault, kind: Skipped, count: 1, prims: ["/scene/Looks/initialShadingGroup"], message: "Material /scene/Looks/initialShadingGroup has no surface shader — using default grey OpenPBR" } +lights: 1 +light 0: dome name Some("/scene/Sky") lpe None pmf 1.0 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 5 geometries, PrimitiveBreakdown { triangles: 822, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 2 } top level, PrimitiveBreakdown { triangles: 1582, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 2 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 4.0 motion [] pieces all=10:88b22fc3345d5b05 camera=10:88b22fc3345d5b05 shadow=10:88b22fc3345d5b05 indirect=10:88b22fc3345d5b05 +geom 1: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.2 motion [] pieces all=760:c2b60a75c52c78b9 camera=760:c2b60a75c52c78b9 shadow=760:c2b60a75c52c78b9 indirect=760:c2b60a75c52c78b9 +geom 2: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=12:94a297badef437e1 camera=12:94a297badef437e1 shadow=12:94a297badef437e1 indirect=12:94a297badef437e1 +geom 3: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.25 motion [] pieces all=800:4a8c9f44d777e131 camera=800:4a8c9f44d777e131 shadow=800:4a8c9f44d777e131 indirect=800:4a8c9f44d777e131 +geom 4: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.3585339 motion [] pieces all=760:2344ecf63e12c441 camera=760:2344ecf63e12c441 shadow=760:2344ecf63e12c441 indirect=760:2344ecf63e12c441 +provenance material /scene/Looks/initialShadingGroup: MaterialOrigin { slots: [0, 1, 2, 3, 4], displaced: false } +provenance light /scene/Sky: LightOrigin { index: 0, geoms: 0..0 } +provenance geometry 0..1: /scene/pCube1 +provenance geometry 1..2: /scene/pSphere1 +provenance geometry 2..3: /scene/pCube2 +provenance geometry 3..4: /scene/pTorus1 +provenance geometry 4..5: /scene/pSphere2 +provenance mesh: MeshOrigin { geom_id: 0, slot: 0, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 1, slot: 1, baked: false, moving: false } +provenance mesh: MeshOrigin { geom_id: 2, slot: 2, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 3, slot: 3, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 4, slot: 1, baked: false, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 12343188411137242430, n_points: 8, n_indices: 20, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 1: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 17119738035130870988, n_points: 382, n_indices: 1560, n_uvs: None, smooth: false, material: 0 }), placements: 2, shared: false, displaced: false } +provenance mesh slot 2: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 1739488954094729910, n_points: 8, n_indices: 24, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 3: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 6096447469814747168, n_points: 400, n_indices: 1600, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/scene/camera1"), cameras: ["/scene/camera1"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/scene/camera1"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/cornellbox_usda-d5734d22b9c37571-2.image b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-d5734d22b9c37571-2.image new file mode 100644 index 000000000..ba4884437 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-d5734d22b9c37571-2.image @@ -0,0 +1 @@ +640x360 16spp clamp-off 52a1a46f3a46d230 diff --git a/crates/crust-core/tests/data/import_baselines/cornellbox_usda-da1f2707813489ef-1.digest b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-da1f2707813489ef-1.digest new file mode 100644 index 000000000..1d5ab0cab --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-da1f2707813489ef-1.digest @@ -0,0 +1,39 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/scene/camera1") +camera: Camera { origin: Vec3A(0.0074343784, 1.9913422, 4.0133057), lower_left_corner: Vec3A(-8.881443, -3.0086517, -0.98669434), horizontal: Vec3A(17.777756, 0.0, 0.0), vertical: Vec3A(0.0, 9.999988, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: Some(Vec4(0.0, 0.0, -1.0, 3.9133058)), far: Some(Vec4(0.0, 0.0, 1.0, 9995.986)), planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: None +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 640, height: 360, region: PixelRect { x0: 0, y0: 0, x1: 640, y1: 360 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 12.700017, aperture: [25.4, 25.4], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 5.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/cornellbox.usda"], invisible_overrides: Some(0) } +layer: $DIR/cornellbox.usda +warning: Warning { code: MaterialFallbackDefault, kind: Skipped, count: 1, prims: ["/scene/Looks/initialShadingGroup"], message: "Material /scene/Looks/initialShadingGroup has no surface shader — using default grey OpenPBR" } +lights: 1 +light 0: dome name Some("/scene/Sky") lpe None pmf 1.0 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 5 geometries, PrimitiveBreakdown { triangles: 822, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 2 } top level, PrimitiveBreakdown { triangles: 1582, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 2 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 4.0 motion [] pieces all=10:88b22fc3345d5b05 camera=10:88b22fc3345d5b05 shadow=10:88b22fc3345d5b05 indirect=10:88b22fc3345d5b05 +geom 1: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.2 motion [] pieces all=760:c2b60a75c52c78b9 camera=760:c2b60a75c52c78b9 shadow=760:c2b60a75c52c78b9 indirect=760:c2b60a75c52c78b9 +geom 2: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=12:94a297badef437e1 camera=12:94a297badef437e1 shadow=12:94a297badef437e1 indirect=12:94a297badef437e1 +geom 3: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.25 motion [] pieces all=800:4a8c9f44d777e131 camera=800:4a8c9f44d777e131 shadow=800:4a8c9f44d777e131 indirect=800:4a8c9f44d777e131 +geom 4: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.3585339 motion [] pieces all=760:2344ecf63e12c441 camera=760:2344ecf63e12c441 shadow=760:2344ecf63e12c441 indirect=760:2344ecf63e12c441 +provenance material /scene/Looks/initialShadingGroup: MaterialOrigin { slots: [0, 1, 2, 3, 4], displaced: false } +provenance light /scene/Sky: LightOrigin { index: 0, geoms: 0..0 } +provenance geometry 0..1: /scene/pCube1 +provenance geometry 1..2: /scene/pSphere1 +provenance geometry 2..3: /scene/pCube2 +provenance geometry 3..4: /scene/pTorus1 +provenance geometry 4..5: /scene/pSphere2 +provenance mesh: MeshOrigin { geom_id: 0, slot: 0, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 1, slot: 1, baked: false, moving: false } +provenance mesh: MeshOrigin { geom_id: 2, slot: 2, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 3, slot: 3, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 4, slot: 1, baked: false, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 12343188411137242430, n_points: 8, n_indices: 20, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 1: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 17119738035130870988, n_points: 382, n_indices: 1560, n_uvs: None, smooth: false, material: 0 }), placements: 2, shared: false, displaced: false } +provenance mesh slot 2: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 1739488954094729910, n_points: 8, n_indices: 24, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 3: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 6096447469814747168, n_points: 400, n_indices: 1600, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: true, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/scene/camera1"), cameras: ["/scene/camera1"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/scene/camera1"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/cornellbox_usda-da1f2707813489ef-1.image b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-da1f2707813489ef-1.image new file mode 100644 index 000000000..7172edbfe --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-da1f2707813489ef-1.image @@ -0,0 +1 @@ +640x360 16spp clamp-off 64ede904b11bab22 diff --git a/crates/crust-core/tests/data/import_baselines/cornellbox_usda-df23dfac5ede9611-1.digest b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-df23dfac5ede9611-1.digest new file mode 100644 index 000000000..0e859a952 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-df23dfac5ede9611-1.digest @@ -0,0 +1,40 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/scene/camera1") +camera: Camera { origin: Vec3A(0.0074343784, 1.9913422, 4.0133057), lower_left_corner: Vec3A(-8.881443, -3.0086517, -0.98669434), horizontal: Vec3A(17.777756, 0.0, 0.0), vertical: Vec3A(0.0, 9.999988, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: Some(Vec4(0.0, 0.0, -1.0, 3.9133058)), far: Some(Vec4(0.0, 0.0, 1.0, 9995.986)), planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: None +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 640, height: 360, region: PixelRect { x0: 0, y0: 0, x1: 640, y1: 360 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 12.700017, aperture: [25.4, 25.4], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 5.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/cornellbox.usda"], invisible_overrides: Some(0) } +layer: $DIR/cornellbox.usda +warning: Warning { code: AssetUnsupportedByHost, kind: Skipped, count: 1, prims: [], message: "No asset loader: environment map $DIR/sky_gradient.exr ignored — the dome falls back to its uniform colour. Use Scene::from_usd_with_assets to supply one." } +warning: Warning { code: MaterialFallbackDefault, kind: Skipped, count: 1, prims: ["/scene/Looks/initialShadingGroup"], message: "Material /scene/Looks/initialShadingGroup has no surface shader — using default grey OpenPBR" } +lights: 1 +light 0: dome name Some("/scene/Sky") lpe None pmf 1.0 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 5 geometries, PrimitiveBreakdown { triangles: 822, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 2 } top level, PrimitiveBreakdown { triangles: 1582, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 2 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 4.0 motion [] pieces all=10:88b22fc3345d5b05 camera=10:88b22fc3345d5b05 shadow=10:88b22fc3345d5b05 indirect=10:88b22fc3345d5b05 +geom 1: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.2 motion [] pieces all=760:c2b60a75c52c78b9 camera=760:c2b60a75c52c78b9 shadow=760:c2b60a75c52c78b9 indirect=760:c2b60a75c52c78b9 +geom 2: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=12:94a297badef437e1 camera=12:94a297badef437e1 shadow=12:94a297badef437e1 indirect=12:94a297badef437e1 +geom 3: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.25 motion [] pieces all=800:4a8c9f44d777e131 camera=800:4a8c9f44d777e131 shadow=800:4a8c9f44d777e131 indirect=800:4a8c9f44d777e131 +geom 4: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.3585339 motion [] pieces all=760:2344ecf63e12c441 camera=760:2344ecf63e12c441 shadow=760:2344ecf63e12c441 indirect=760:2344ecf63e12c441 +provenance material /scene/Looks/initialShadingGroup: MaterialOrigin { slots: [0, 1, 2, 3, 4], displaced: false } +provenance light /scene/Sky: LightOrigin { index: 0, geoms: 0..0 } +provenance geometry 0..1: /scene/pCube1 +provenance geometry 1..2: /scene/pSphere1 +provenance geometry 2..3: /scene/pCube2 +provenance geometry 3..4: /scene/pTorus1 +provenance geometry 4..5: /scene/pSphere2 +provenance mesh: MeshOrigin { geom_id: 0, slot: 0, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 1, slot: 1, baked: false, moving: false } +provenance mesh: MeshOrigin { geom_id: 2, slot: 2, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 3, slot: 3, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 4, slot: 1, baked: false, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 12343188411137242430, n_points: 8, n_indices: 20, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 1: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 17119738035130870988, n_points: 382, n_indices: 1560, n_uvs: None, smooth: false, material: 0 }), placements: 2, shared: false, displaced: false } +provenance mesh slot 2: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 1739488954094729910, n_points: 8, n_indices: 24, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 3: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 6096447469814747168, n_points: 400, n_indices: 1600, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/scene/camera1"), cameras: ["/scene/camera1"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/scene/camera1"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/cornellbox_usda-df23dfac5ede9611-1.image b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-df23dfac5ede9611-1.image new file mode 100644 index 000000000..ba4884437 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-df23dfac5ede9611-1.image @@ -0,0 +1 @@ +640x360 16spp clamp-off 52a1a46f3a46d230 diff --git a/crates/crust-core/tests/data/import_baselines/cornellbox_usda-df23dfac5ede9611-2.digest b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-df23dfac5ede9611-2.digest new file mode 100644 index 000000000..0e859a952 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-df23dfac5ede9611-2.digest @@ -0,0 +1,40 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/scene/camera1") +camera: Camera { origin: Vec3A(0.0074343784, 1.9913422, 4.0133057), lower_left_corner: Vec3A(-8.881443, -3.0086517, -0.98669434), horizontal: Vec3A(17.777756, 0.0, 0.0), vertical: Vec3A(0.0, 9.999988, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: Some(Vec4(0.0, 0.0, -1.0, 3.9133058)), far: Some(Vec4(0.0, 0.0, 1.0, 9995.986)), planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: None +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 640, height: 360, region: PixelRect { x0: 0, y0: 0, x1: 640, y1: 360 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 12.700017, aperture: [25.4, 25.4], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 5.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/cornellbox.usda"], invisible_overrides: Some(0) } +layer: $DIR/cornellbox.usda +warning: Warning { code: AssetUnsupportedByHost, kind: Skipped, count: 1, prims: [], message: "No asset loader: environment map $DIR/sky_gradient.exr ignored — the dome falls back to its uniform colour. Use Scene::from_usd_with_assets to supply one." } +warning: Warning { code: MaterialFallbackDefault, kind: Skipped, count: 1, prims: ["/scene/Looks/initialShadingGroup"], message: "Material /scene/Looks/initialShadingGroup has no surface shader — using default grey OpenPBR" } +lights: 1 +light 0: dome name Some("/scene/Sky") lpe None pmf 1.0 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 5 geometries, PrimitiveBreakdown { triangles: 822, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 2 } top level, PrimitiveBreakdown { triangles: 1582, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 2 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 4.0 motion [] pieces all=10:88b22fc3345d5b05 camera=10:88b22fc3345d5b05 shadow=10:88b22fc3345d5b05 indirect=10:88b22fc3345d5b05 +geom 1: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.2 motion [] pieces all=760:c2b60a75c52c78b9 camera=760:c2b60a75c52c78b9 shadow=760:c2b60a75c52c78b9 indirect=760:c2b60a75c52c78b9 +geom 2: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=12:94a297badef437e1 camera=12:94a297badef437e1 shadow=12:94a297badef437e1 indirect=12:94a297badef437e1 +geom 3: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.25 motion [] pieces all=800:4a8c9f44d777e131 camera=800:4a8c9f44d777e131 shadow=800:4a8c9f44d777e131 indirect=800:4a8c9f44d777e131 +geom 4: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.3585339 motion [] pieces all=760:2344ecf63e12c441 camera=760:2344ecf63e12c441 shadow=760:2344ecf63e12c441 indirect=760:2344ecf63e12c441 +provenance material /scene/Looks/initialShadingGroup: MaterialOrigin { slots: [0, 1, 2, 3, 4], displaced: false } +provenance light /scene/Sky: LightOrigin { index: 0, geoms: 0..0 } +provenance geometry 0..1: /scene/pCube1 +provenance geometry 1..2: /scene/pSphere1 +provenance geometry 2..3: /scene/pCube2 +provenance geometry 3..4: /scene/pTorus1 +provenance geometry 4..5: /scene/pSphere2 +provenance mesh: MeshOrigin { geom_id: 0, slot: 0, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 1, slot: 1, baked: false, moving: false } +provenance mesh: MeshOrigin { geom_id: 2, slot: 2, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 3, slot: 3, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 4, slot: 1, baked: false, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 12343188411137242430, n_points: 8, n_indices: 20, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 1: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 17119738035130870988, n_points: 382, n_indices: 1560, n_uvs: None, smooth: false, material: 0 }), placements: 2, shared: false, displaced: false } +provenance mesh slot 2: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 1739488954094729910, n_points: 8, n_indices: 24, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 3: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 6096447469814747168, n_points: 400, n_indices: 1600, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/scene/camera1"), cameras: ["/scene/camera1"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/scene/camera1"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/cornellbox_usda-df23dfac5ede9611-2.image b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-df23dfac5ede9611-2.image new file mode 100644 index 000000000..ba4884437 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-df23dfac5ede9611-2.image @@ -0,0 +1 @@ +640x360 16spp clamp-off 52a1a46f3a46d230 diff --git a/crates/crust-core/tests/data/import_baselines/cornellbox_usda-df23dfac5ede9611-3.digest b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-df23dfac5ede9611-3.digest new file mode 100644 index 000000000..0e859a952 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-df23dfac5ede9611-3.digest @@ -0,0 +1,40 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/scene/camera1") +camera: Camera { origin: Vec3A(0.0074343784, 1.9913422, 4.0133057), lower_left_corner: Vec3A(-8.881443, -3.0086517, -0.98669434), horizontal: Vec3A(17.777756, 0.0, 0.0), vertical: Vec3A(0.0, 9.999988, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: Some(Vec4(0.0, 0.0, -1.0, 3.9133058)), far: Some(Vec4(0.0, 0.0, 1.0, 9995.986)), planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: None +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 640, height: 360, region: PixelRect { x0: 0, y0: 0, x1: 640, y1: 360 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 12.700017, aperture: [25.4, 25.4], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 5.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/cornellbox.usda"], invisible_overrides: Some(0) } +layer: $DIR/cornellbox.usda +warning: Warning { code: AssetUnsupportedByHost, kind: Skipped, count: 1, prims: [], message: "No asset loader: environment map $DIR/sky_gradient.exr ignored — the dome falls back to its uniform colour. Use Scene::from_usd_with_assets to supply one." } +warning: Warning { code: MaterialFallbackDefault, kind: Skipped, count: 1, prims: ["/scene/Looks/initialShadingGroup"], message: "Material /scene/Looks/initialShadingGroup has no surface shader — using default grey OpenPBR" } +lights: 1 +light 0: dome name Some("/scene/Sky") lpe None pmf 1.0 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 5 geometries, PrimitiveBreakdown { triangles: 822, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 2 } top level, PrimitiveBreakdown { triangles: 1582, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 2 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 4.0 motion [] pieces all=10:88b22fc3345d5b05 camera=10:88b22fc3345d5b05 shadow=10:88b22fc3345d5b05 indirect=10:88b22fc3345d5b05 +geom 1: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.2 motion [] pieces all=760:c2b60a75c52c78b9 camera=760:c2b60a75c52c78b9 shadow=760:c2b60a75c52c78b9 indirect=760:c2b60a75c52c78b9 +geom 2: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=12:94a297badef437e1 camera=12:94a297badef437e1 shadow=12:94a297badef437e1 indirect=12:94a297badef437e1 +geom 3: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.25 motion [] pieces all=800:4a8c9f44d777e131 camera=800:4a8c9f44d777e131 shadow=800:4a8c9f44d777e131 indirect=800:4a8c9f44d777e131 +geom 4: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.3585339 motion [] pieces all=760:2344ecf63e12c441 camera=760:2344ecf63e12c441 shadow=760:2344ecf63e12c441 indirect=760:2344ecf63e12c441 +provenance material /scene/Looks/initialShadingGroup: MaterialOrigin { slots: [0, 1, 2, 3, 4], displaced: false } +provenance light /scene/Sky: LightOrigin { index: 0, geoms: 0..0 } +provenance geometry 0..1: /scene/pCube1 +provenance geometry 1..2: /scene/pSphere1 +provenance geometry 2..3: /scene/pCube2 +provenance geometry 3..4: /scene/pTorus1 +provenance geometry 4..5: /scene/pSphere2 +provenance mesh: MeshOrigin { geom_id: 0, slot: 0, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 1, slot: 1, baked: false, moving: false } +provenance mesh: MeshOrigin { geom_id: 2, slot: 2, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 3, slot: 3, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 4, slot: 1, baked: false, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 12343188411137242430, n_points: 8, n_indices: 20, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 1: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 17119738035130870988, n_points: 382, n_indices: 1560, n_uvs: None, smooth: false, material: 0 }), placements: 2, shared: false, displaced: false } +provenance mesh slot 2: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 1739488954094729910, n_points: 8, n_indices: 24, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 3: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 6096447469814747168, n_points: 400, n_indices: 1600, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/scene/camera1"), cameras: ["/scene/camera1"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/scene/camera1"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/cornellbox_usda-df23dfac5ede9611-3.image b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-df23dfac5ede9611-3.image new file mode 100644 index 000000000..ba4884437 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-df23dfac5ede9611-3.image @@ -0,0 +1 @@ +640x360 16spp clamp-off 52a1a46f3a46d230 diff --git a/crates/crust-core/tests/data/import_baselines/cornellbox_usda-e82204be97718dbd-1.digest b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-e82204be97718dbd-1.digest new file mode 100644 index 000000000..0e859a952 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-e82204be97718dbd-1.digest @@ -0,0 +1,40 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/scene/camera1") +camera: Camera { origin: Vec3A(0.0074343784, 1.9913422, 4.0133057), lower_left_corner: Vec3A(-8.881443, -3.0086517, -0.98669434), horizontal: Vec3A(17.777756, 0.0, 0.0), vertical: Vec3A(0.0, 9.999988, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: Some(Vec4(0.0, 0.0, -1.0, 3.9133058)), far: Some(Vec4(0.0, 0.0, 1.0, 9995.986)), planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: None +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 640, height: 360, region: PixelRect { x0: 0, y0: 0, x1: 640, y1: 360 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 12.700017, aperture: [25.4, 25.4], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 5.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/cornellbox.usda"], invisible_overrides: Some(0) } +layer: $DIR/cornellbox.usda +warning: Warning { code: AssetUnsupportedByHost, kind: Skipped, count: 1, prims: [], message: "No asset loader: environment map $DIR/sky_gradient.exr ignored — the dome falls back to its uniform colour. Use Scene::from_usd_with_assets to supply one." } +warning: Warning { code: MaterialFallbackDefault, kind: Skipped, count: 1, prims: ["/scene/Looks/initialShadingGroup"], message: "Material /scene/Looks/initialShadingGroup has no surface shader — using default grey OpenPBR" } +lights: 1 +light 0: dome name Some("/scene/Sky") lpe None pmf 1.0 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 5 geometries, PrimitiveBreakdown { triangles: 822, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 2 } top level, PrimitiveBreakdown { triangles: 1582, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 2 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 4.0 motion [] pieces all=10:88b22fc3345d5b05 camera=10:88b22fc3345d5b05 shadow=10:88b22fc3345d5b05 indirect=10:88b22fc3345d5b05 +geom 1: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.2 motion [] pieces all=760:c2b60a75c52c78b9 camera=760:c2b60a75c52c78b9 shadow=760:c2b60a75c52c78b9 indirect=760:c2b60a75c52c78b9 +geom 2: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=12:94a297badef437e1 camera=12:94a297badef437e1 shadow=12:94a297badef437e1 indirect=12:94a297badef437e1 +geom 3: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.25 motion [] pieces all=800:4a8c9f44d777e131 camera=800:4a8c9f44d777e131 shadow=800:4a8c9f44d777e131 indirect=800:4a8c9f44d777e131 +geom 4: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.3585339 motion [] pieces all=760:2344ecf63e12c441 camera=760:2344ecf63e12c441 shadow=760:2344ecf63e12c441 indirect=760:2344ecf63e12c441 +provenance material /scene/Looks/initialShadingGroup: MaterialOrigin { slots: [0, 1, 2, 3, 4], displaced: false } +provenance light /scene/Sky: LightOrigin { index: 0, geoms: 0..0 } +provenance geometry 0..1: /scene/pCube1 +provenance geometry 1..2: /scene/pSphere1 +provenance geometry 2..3: /scene/pCube2 +provenance geometry 3..4: /scene/pTorus1 +provenance geometry 4..5: /scene/pSphere2 +provenance mesh: MeshOrigin { geom_id: 0, slot: 0, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 1, slot: 1, baked: false, moving: false } +provenance mesh: MeshOrigin { geom_id: 2, slot: 2, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 3, slot: 3, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 4, slot: 1, baked: false, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 12343188411137242430, n_points: 8, n_indices: 20, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 1: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 17119738035130870988, n_points: 382, n_indices: 1560, n_uvs: None, smooth: false, material: 0 }), placements: 2, shared: false, displaced: false } +provenance mesh slot 2: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 1739488954094729910, n_points: 8, n_indices: 24, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 3: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 6096447469814747168, n_points: 400, n_indices: 1600, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/scene/camera1"), cameras: ["/scene/camera1"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/scene/camera1"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/cornellbox_usda-e82204be97718dbd-1.image b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-e82204be97718dbd-1.image new file mode 100644 index 000000000..ba4884437 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-e82204be97718dbd-1.image @@ -0,0 +1 @@ +640x360 16spp clamp-off 52a1a46f3a46d230 diff --git a/crates/crust-core/tests/data/import_baselines/cornellbox_usda-e82204be97718dbd-2.digest b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-e82204be97718dbd-2.digest new file mode 100644 index 000000000..0e859a952 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-e82204be97718dbd-2.digest @@ -0,0 +1,40 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/scene/camera1") +camera: Camera { origin: Vec3A(0.0074343784, 1.9913422, 4.0133057), lower_left_corner: Vec3A(-8.881443, -3.0086517, -0.98669434), horizontal: Vec3A(17.777756, 0.0, 0.0), vertical: Vec3A(0.0, 9.999988, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: Some(Vec4(0.0, 0.0, -1.0, 3.9133058)), far: Some(Vec4(0.0, 0.0, 1.0, 9995.986)), planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: None +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 640, height: 360, region: PixelRect { x0: 0, y0: 0, x1: 640, y1: 360 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 12.700017, aperture: [25.4, 25.4], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 5.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/cornellbox.usda"], invisible_overrides: Some(0) } +layer: $DIR/cornellbox.usda +warning: Warning { code: AssetUnsupportedByHost, kind: Skipped, count: 1, prims: [], message: "No asset loader: environment map $DIR/sky_gradient.exr ignored — the dome falls back to its uniform colour. Use Scene::from_usd_with_assets to supply one." } +warning: Warning { code: MaterialFallbackDefault, kind: Skipped, count: 1, prims: ["/scene/Looks/initialShadingGroup"], message: "Material /scene/Looks/initialShadingGroup has no surface shader — using default grey OpenPBR" } +lights: 1 +light 0: dome name Some("/scene/Sky") lpe None pmf 1.0 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 5 geometries, PrimitiveBreakdown { triangles: 822, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 2 } top level, PrimitiveBreakdown { triangles: 1582, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 2 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 4.0 motion [] pieces all=10:88b22fc3345d5b05 camera=10:88b22fc3345d5b05 shadow=10:88b22fc3345d5b05 indirect=10:88b22fc3345d5b05 +geom 1: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.2 motion [] pieces all=760:c2b60a75c52c78b9 camera=760:c2b60a75c52c78b9 shadow=760:c2b60a75c52c78b9 indirect=760:c2b60a75c52c78b9 +geom 2: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=12:94a297badef437e1 camera=12:94a297badef437e1 shadow=12:94a297badef437e1 indirect=12:94a297badef437e1 +geom 3: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.25 motion [] pieces all=800:4a8c9f44d777e131 camera=800:4a8c9f44d777e131 shadow=800:4a8c9f44d777e131 indirect=800:4a8c9f44d777e131 +geom 4: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.3585339 motion [] pieces all=760:2344ecf63e12c441 camera=760:2344ecf63e12c441 shadow=760:2344ecf63e12c441 indirect=760:2344ecf63e12c441 +provenance material /scene/Looks/initialShadingGroup: MaterialOrigin { slots: [0, 1, 2, 3, 4], displaced: false } +provenance light /scene/Sky: LightOrigin { index: 0, geoms: 0..0 } +provenance geometry 0..1: /scene/pCube1 +provenance geometry 1..2: /scene/pSphere1 +provenance geometry 2..3: /scene/pCube2 +provenance geometry 3..4: /scene/pTorus1 +provenance geometry 4..5: /scene/pSphere2 +provenance mesh: MeshOrigin { geom_id: 0, slot: 0, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 1, slot: 1, baked: false, moving: false } +provenance mesh: MeshOrigin { geom_id: 2, slot: 2, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 3, slot: 3, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 4, slot: 1, baked: false, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 12343188411137242430, n_points: 8, n_indices: 20, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 1: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 17119738035130870988, n_points: 382, n_indices: 1560, n_uvs: None, smooth: false, material: 0 }), placements: 2, shared: false, displaced: false } +provenance mesh slot 2: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 1739488954094729910, n_points: 8, n_indices: 24, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 3: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 6096447469814747168, n_points: 400, n_indices: 1600, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/scene/camera1"), cameras: ["/scene/camera1"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/scene/camera1"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/cornellbox_usda-e82204be97718dbd-2.image b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-e82204be97718dbd-2.image new file mode 100644 index 000000000..ba4884437 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-e82204be97718dbd-2.image @@ -0,0 +1 @@ +640x360 16spp clamp-off 52a1a46f3a46d230 diff --git a/crates/crust-core/tests/data/import_baselines/cornellbox_usda-e82204be97718dbd-3.digest b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-e82204be97718dbd-3.digest new file mode 100644 index 000000000..0e859a952 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-e82204be97718dbd-3.digest @@ -0,0 +1,40 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/scene/camera1") +camera: Camera { origin: Vec3A(0.0074343784, 1.9913422, 4.0133057), lower_left_corner: Vec3A(-8.881443, -3.0086517, -0.98669434), horizontal: Vec3A(17.777756, 0.0, 0.0), vertical: Vec3A(0.0, 9.999988, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: Some(Vec4(0.0, 0.0, -1.0, 3.9133058)), far: Some(Vec4(0.0, 0.0, 1.0, 9995.986)), planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: None +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 640, height: 360, region: PixelRect { x0: 0, y0: 0, x1: 640, y1: 360 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 12.700017, aperture: [25.4, 25.4], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 5.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/cornellbox.usda"], invisible_overrides: Some(0) } +layer: $DIR/cornellbox.usda +warning: Warning { code: AssetUnsupportedByHost, kind: Skipped, count: 1, prims: [], message: "No asset loader: environment map $DIR/sky_gradient.exr ignored — the dome falls back to its uniform colour. Use Scene::from_usd_with_assets to supply one." } +warning: Warning { code: MaterialFallbackDefault, kind: Skipped, count: 1, prims: ["/scene/Looks/initialShadingGroup"], message: "Material /scene/Looks/initialShadingGroup has no surface shader — using default grey OpenPBR" } +lights: 1 +light 0: dome name Some("/scene/Sky") lpe None pmf 1.0 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 5 geometries, PrimitiveBreakdown { triangles: 822, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 2 } top level, PrimitiveBreakdown { triangles: 1582, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 2 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 4.0 motion [] pieces all=10:88b22fc3345d5b05 camera=10:88b22fc3345d5b05 shadow=10:88b22fc3345d5b05 indirect=10:88b22fc3345d5b05 +geom 1: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.2 motion [] pieces all=760:c2b60a75c52c78b9 camera=760:c2b60a75c52c78b9 shadow=760:c2b60a75c52c78b9 indirect=760:c2b60a75c52c78b9 +geom 2: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=12:94a297badef437e1 camera=12:94a297badef437e1 shadow=12:94a297badef437e1 indirect=12:94a297badef437e1 +geom 3: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.25 motion [] pieces all=800:4a8c9f44d777e131 camera=800:4a8c9f44d777e131 shadow=800:4a8c9f44d777e131 indirect=800:4a8c9f44d777e131 +geom 4: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.3585339 motion [] pieces all=760:2344ecf63e12c441 camera=760:2344ecf63e12c441 shadow=760:2344ecf63e12c441 indirect=760:2344ecf63e12c441 +provenance material /scene/Looks/initialShadingGroup: MaterialOrigin { slots: [0, 1, 2, 3, 4], displaced: false } +provenance light /scene/Sky: LightOrigin { index: 0, geoms: 0..0 } +provenance geometry 0..1: /scene/pCube1 +provenance geometry 1..2: /scene/pSphere1 +provenance geometry 2..3: /scene/pCube2 +provenance geometry 3..4: /scene/pTorus1 +provenance geometry 4..5: /scene/pSphere2 +provenance mesh: MeshOrigin { geom_id: 0, slot: 0, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 1, slot: 1, baked: false, moving: false } +provenance mesh: MeshOrigin { geom_id: 2, slot: 2, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 3, slot: 3, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 4, slot: 1, baked: false, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 12343188411137242430, n_points: 8, n_indices: 20, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 1: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 17119738035130870988, n_points: 382, n_indices: 1560, n_uvs: None, smooth: false, material: 0 }), placements: 2, shared: false, displaced: false } +provenance mesh slot 2: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 1739488954094729910, n_points: 8, n_indices: 24, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 3: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 6096447469814747168, n_points: 400, n_indices: 1600, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/scene/camera1"), cameras: ["/scene/camera1"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/scene/camera1"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/cornellbox_usda-e82204be97718dbd-3.image b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-e82204be97718dbd-3.image new file mode 100644 index 000000000..ba4884437 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-e82204be97718dbd-3.image @@ -0,0 +1 @@ +640x360 16spp clamp-off 52a1a46f3a46d230 diff --git a/crates/crust-core/tests/data/import_baselines/cornellbox_usda-e82204be97718dbd-4.digest b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-e82204be97718dbd-4.digest new file mode 100644 index 000000000..0e859a952 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-e82204be97718dbd-4.digest @@ -0,0 +1,40 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/scene/camera1") +camera: Camera { origin: Vec3A(0.0074343784, 1.9913422, 4.0133057), lower_left_corner: Vec3A(-8.881443, -3.0086517, -0.98669434), horizontal: Vec3A(17.777756, 0.0, 0.0), vertical: Vec3A(0.0, 9.999988, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: Some(Vec4(0.0, 0.0, -1.0, 3.9133058)), far: Some(Vec4(0.0, 0.0, 1.0, 9995.986)), planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: None +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 640, height: 360, region: PixelRect { x0: 0, y0: 0, x1: 640, y1: 360 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 12.700017, aperture: [25.4, 25.4], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 5.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/cornellbox.usda"], invisible_overrides: Some(0) } +layer: $DIR/cornellbox.usda +warning: Warning { code: AssetUnsupportedByHost, kind: Skipped, count: 1, prims: [], message: "No asset loader: environment map $DIR/sky_gradient.exr ignored — the dome falls back to its uniform colour. Use Scene::from_usd_with_assets to supply one." } +warning: Warning { code: MaterialFallbackDefault, kind: Skipped, count: 1, prims: ["/scene/Looks/initialShadingGroup"], message: "Material /scene/Looks/initialShadingGroup has no surface shader — using default grey OpenPBR" } +lights: 1 +light 0: dome name Some("/scene/Sky") lpe None pmf 1.0 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 5 geometries, PrimitiveBreakdown { triangles: 822, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 2 } top level, PrimitiveBreakdown { triangles: 1582, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 2 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 4.0 motion [] pieces all=10:88b22fc3345d5b05 camera=10:88b22fc3345d5b05 shadow=10:88b22fc3345d5b05 indirect=10:88b22fc3345d5b05 +geom 1: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.2 motion [] pieces all=760:c2b60a75c52c78b9 camera=760:c2b60a75c52c78b9 shadow=760:c2b60a75c52c78b9 indirect=760:c2b60a75c52c78b9 +geom 2: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=12:94a297badef437e1 camera=12:94a297badef437e1 shadow=12:94a297badef437e1 indirect=12:94a297badef437e1 +geom 3: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.25 motion [] pieces all=800:4a8c9f44d777e131 camera=800:4a8c9f44d777e131 shadow=800:4a8c9f44d777e131 indirect=800:4a8c9f44d777e131 +geom 4: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.3585339 motion [] pieces all=760:2344ecf63e12c441 camera=760:2344ecf63e12c441 shadow=760:2344ecf63e12c441 indirect=760:2344ecf63e12c441 +provenance material /scene/Looks/initialShadingGroup: MaterialOrigin { slots: [0, 1, 2, 3, 4], displaced: false } +provenance light /scene/Sky: LightOrigin { index: 0, geoms: 0..0 } +provenance geometry 0..1: /scene/pCube1 +provenance geometry 1..2: /scene/pSphere1 +provenance geometry 2..3: /scene/pCube2 +provenance geometry 3..4: /scene/pTorus1 +provenance geometry 4..5: /scene/pSphere2 +provenance mesh: MeshOrigin { geom_id: 0, slot: 0, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 1, slot: 1, baked: false, moving: false } +provenance mesh: MeshOrigin { geom_id: 2, slot: 2, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 3, slot: 3, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 4, slot: 1, baked: false, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 12343188411137242430, n_points: 8, n_indices: 20, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 1: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 17119738035130870988, n_points: 382, n_indices: 1560, n_uvs: None, smooth: false, material: 0 }), placements: 2, shared: false, displaced: false } +provenance mesh slot 2: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 1739488954094729910, n_points: 8, n_indices: 24, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 3: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 6096447469814747168, n_points: 400, n_indices: 1600, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/scene/camera1"), cameras: ["/scene/camera1"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/scene/camera1"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/cornellbox_usda-e82204be97718dbd-4.image b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-e82204be97718dbd-4.image new file mode 100644 index 000000000..ba4884437 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-e82204be97718dbd-4.image @@ -0,0 +1 @@ +640x360 16spp clamp-off 52a1a46f3a46d230 diff --git a/crates/crust-core/tests/data/import_baselines/cornellbox_usda-ec6907d7b5edc24c-1.digest b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-ec6907d7b5edc24c-1.digest new file mode 100644 index 000000000..1d5ab0cab --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-ec6907d7b5edc24c-1.digest @@ -0,0 +1,39 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/scene/camera1") +camera: Camera { origin: Vec3A(0.0074343784, 1.9913422, 4.0133057), lower_left_corner: Vec3A(-8.881443, -3.0086517, -0.98669434), horizontal: Vec3A(17.777756, 0.0, 0.0), vertical: Vec3A(0.0, 9.999988, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: Some(Vec4(0.0, 0.0, -1.0, 3.9133058)), far: Some(Vec4(0.0, 0.0, 1.0, 9995.986)), planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: None +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 640, height: 360, region: PixelRect { x0: 0, y0: 0, x1: 640, y1: 360 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 12.700017, aperture: [25.4, 25.4], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 5.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/cornellbox.usda"], invisible_overrides: Some(0) } +layer: $DIR/cornellbox.usda +warning: Warning { code: MaterialFallbackDefault, kind: Skipped, count: 1, prims: ["/scene/Looks/initialShadingGroup"], message: "Material /scene/Looks/initialShadingGroup has no surface shader — using default grey OpenPBR" } +lights: 1 +light 0: dome name Some("/scene/Sky") lpe None pmf 1.0 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 5 geometries, PrimitiveBreakdown { triangles: 822, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 2 } top level, PrimitiveBreakdown { triangles: 1582, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 2 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 4.0 motion [] pieces all=10:88b22fc3345d5b05 camera=10:88b22fc3345d5b05 shadow=10:88b22fc3345d5b05 indirect=10:88b22fc3345d5b05 +geom 1: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.2 motion [] pieces all=760:c2b60a75c52c78b9 camera=760:c2b60a75c52c78b9 shadow=760:c2b60a75c52c78b9 indirect=760:c2b60a75c52c78b9 +geom 2: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=12:94a297badef437e1 camera=12:94a297badef437e1 shadow=12:94a297badef437e1 indirect=12:94a297badef437e1 +geom 3: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.25 motion [] pieces all=800:4a8c9f44d777e131 camera=800:4a8c9f44d777e131 shadow=800:4a8c9f44d777e131 indirect=800:4a8c9f44d777e131 +geom 4: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.3585339 motion [] pieces all=760:2344ecf63e12c441 camera=760:2344ecf63e12c441 shadow=760:2344ecf63e12c441 indirect=760:2344ecf63e12c441 +provenance material /scene/Looks/initialShadingGroup: MaterialOrigin { slots: [0, 1, 2, 3, 4], displaced: false } +provenance light /scene/Sky: LightOrigin { index: 0, geoms: 0..0 } +provenance geometry 0..1: /scene/pCube1 +provenance geometry 1..2: /scene/pSphere1 +provenance geometry 2..3: /scene/pCube2 +provenance geometry 3..4: /scene/pTorus1 +provenance geometry 4..5: /scene/pSphere2 +provenance mesh: MeshOrigin { geom_id: 0, slot: 0, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 1, slot: 1, baked: false, moving: false } +provenance mesh: MeshOrigin { geom_id: 2, slot: 2, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 3, slot: 3, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 4, slot: 1, baked: false, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 12343188411137242430, n_points: 8, n_indices: 20, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 1: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 17119738035130870988, n_points: 382, n_indices: 1560, n_uvs: None, smooth: false, material: 0 }), placements: 2, shared: false, displaced: false } +provenance mesh slot 2: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 1739488954094729910, n_points: 8, n_indices: 24, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 3: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 6096447469814747168, n_points: 400, n_indices: 1600, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: true, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/scene/camera1"), cameras: ["/scene/camera1"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/scene/camera1"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/cornellbox_usda-ec6907d7b5edc24c-1.image b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-ec6907d7b5edc24c-1.image new file mode 100644 index 000000000..7172edbfe --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-ec6907d7b5edc24c-1.image @@ -0,0 +1 @@ +640x360 16spp clamp-off 64ede904b11bab22 diff --git a/crates/crust-core/tests/data/import_baselines/cornellbox_usda-ed05b9821202ec22-1.digest b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-ed05b9821202ec22-1.digest new file mode 100644 index 000000000..0e859a952 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-ed05b9821202ec22-1.digest @@ -0,0 +1,40 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/scene/camera1") +camera: Camera { origin: Vec3A(0.0074343784, 1.9913422, 4.0133057), lower_left_corner: Vec3A(-8.881443, -3.0086517, -0.98669434), horizontal: Vec3A(17.777756, 0.0, 0.0), vertical: Vec3A(0.0, 9.999988, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: Some(Vec4(0.0, 0.0, -1.0, 3.9133058)), far: Some(Vec4(0.0, 0.0, 1.0, 9995.986)), planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: None +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 640, height: 360, region: PixelRect { x0: 0, y0: 0, x1: 640, y1: 360 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 12.700017, aperture: [25.4, 25.4], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 5.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/cornellbox.usda"], invisible_overrides: Some(0) } +layer: $DIR/cornellbox.usda +warning: Warning { code: AssetUnsupportedByHost, kind: Skipped, count: 1, prims: [], message: "No asset loader: environment map $DIR/sky_gradient.exr ignored — the dome falls back to its uniform colour. Use Scene::from_usd_with_assets to supply one." } +warning: Warning { code: MaterialFallbackDefault, kind: Skipped, count: 1, prims: ["/scene/Looks/initialShadingGroup"], message: "Material /scene/Looks/initialShadingGroup has no surface shader — using default grey OpenPBR" } +lights: 1 +light 0: dome name Some("/scene/Sky") lpe None pmf 1.0 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 5 geometries, PrimitiveBreakdown { triangles: 822, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 2 } top level, PrimitiveBreakdown { triangles: 1582, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 2 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 4.0 motion [] pieces all=10:88b22fc3345d5b05 camera=10:88b22fc3345d5b05 shadow=10:88b22fc3345d5b05 indirect=10:88b22fc3345d5b05 +geom 1: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.2 motion [] pieces all=760:c2b60a75c52c78b9 camera=760:c2b60a75c52c78b9 shadow=760:c2b60a75c52c78b9 indirect=760:c2b60a75c52c78b9 +geom 2: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=12:94a297badef437e1 camera=12:94a297badef437e1 shadow=12:94a297badef437e1 indirect=12:94a297badef437e1 +geom 3: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.25 motion [] pieces all=800:4a8c9f44d777e131 camera=800:4a8c9f44d777e131 shadow=800:4a8c9f44d777e131 indirect=800:4a8c9f44d777e131 +geom 4: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.3585339 motion [] pieces all=760:2344ecf63e12c441 camera=760:2344ecf63e12c441 shadow=760:2344ecf63e12c441 indirect=760:2344ecf63e12c441 +provenance material /scene/Looks/initialShadingGroup: MaterialOrigin { slots: [0, 1, 2, 3, 4], displaced: false } +provenance light /scene/Sky: LightOrigin { index: 0, geoms: 0..0 } +provenance geometry 0..1: /scene/pCube1 +provenance geometry 1..2: /scene/pSphere1 +provenance geometry 2..3: /scene/pCube2 +provenance geometry 3..4: /scene/pTorus1 +provenance geometry 4..5: /scene/pSphere2 +provenance mesh: MeshOrigin { geom_id: 0, slot: 0, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 1, slot: 1, baked: false, moving: false } +provenance mesh: MeshOrigin { geom_id: 2, slot: 2, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 3, slot: 3, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 4, slot: 1, baked: false, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 12343188411137242430, n_points: 8, n_indices: 20, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 1: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 17119738035130870988, n_points: 382, n_indices: 1560, n_uvs: None, smooth: false, material: 0 }), placements: 2, shared: false, displaced: false } +provenance mesh slot 2: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 1739488954094729910, n_points: 8, n_indices: 24, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 3: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 6096447469814747168, n_points: 400, n_indices: 1600, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/scene/camera1"), cameras: ["/scene/camera1"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/scene/camera1"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/cornellbox_usda-ed05b9821202ec22-1.image b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-ed05b9821202ec22-1.image new file mode 100644 index 000000000..ba4884437 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-ed05b9821202ec22-1.image @@ -0,0 +1 @@ +640x360 16spp clamp-off 52a1a46f3a46d230 diff --git a/crates/crust-core/tests/data/import_baselines/cornellbox_usda-efc8f2e410ea1edf-1.digest b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-efc8f2e410ea1edf-1.digest new file mode 100644 index 000000000..1d5ab0cab --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-efc8f2e410ea1edf-1.digest @@ -0,0 +1,39 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/scene/camera1") +camera: Camera { origin: Vec3A(0.0074343784, 1.9913422, 4.0133057), lower_left_corner: Vec3A(-8.881443, -3.0086517, -0.98669434), horizontal: Vec3A(17.777756, 0.0, 0.0), vertical: Vec3A(0.0, 9.999988, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: Some(Vec4(0.0, 0.0, -1.0, 3.9133058)), far: Some(Vec4(0.0, 0.0, 1.0, 9995.986)), planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: None +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 640, height: 360, region: PixelRect { x0: 0, y0: 0, x1: 640, y1: 360 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 12.700017, aperture: [25.4, 25.4], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 5.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/cornellbox.usda"], invisible_overrides: Some(0) } +layer: $DIR/cornellbox.usda +warning: Warning { code: MaterialFallbackDefault, kind: Skipped, count: 1, prims: ["/scene/Looks/initialShadingGroup"], message: "Material /scene/Looks/initialShadingGroup has no surface shader — using default grey OpenPBR" } +lights: 1 +light 0: dome name Some("/scene/Sky") lpe None pmf 1.0 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 5 geometries, PrimitiveBreakdown { triangles: 822, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 2 } top level, PrimitiveBreakdown { triangles: 1582, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 2 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 4.0 motion [] pieces all=10:88b22fc3345d5b05 camera=10:88b22fc3345d5b05 shadow=10:88b22fc3345d5b05 indirect=10:88b22fc3345d5b05 +geom 1: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.2 motion [] pieces all=760:c2b60a75c52c78b9 camera=760:c2b60a75c52c78b9 shadow=760:c2b60a75c52c78b9 indirect=760:c2b60a75c52c78b9 +geom 2: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=12:94a297badef437e1 camera=12:94a297badef437e1 shadow=12:94a297badef437e1 indirect=12:94a297badef437e1 +geom 3: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.25 motion [] pieces all=800:4a8c9f44d777e131 camera=800:4a8c9f44d777e131 shadow=800:4a8c9f44d777e131 indirect=800:4a8c9f44d777e131 +geom 4: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.3585339 motion [] pieces all=760:2344ecf63e12c441 camera=760:2344ecf63e12c441 shadow=760:2344ecf63e12c441 indirect=760:2344ecf63e12c441 +provenance material /scene/Looks/initialShadingGroup: MaterialOrigin { slots: [0, 1, 2, 3, 4], displaced: false } +provenance light /scene/Sky: LightOrigin { index: 0, geoms: 0..0 } +provenance geometry 0..1: /scene/pCube1 +provenance geometry 1..2: /scene/pSphere1 +provenance geometry 2..3: /scene/pCube2 +provenance geometry 3..4: /scene/pTorus1 +provenance geometry 4..5: /scene/pSphere2 +provenance mesh: MeshOrigin { geom_id: 0, slot: 0, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 1, slot: 1, baked: false, moving: false } +provenance mesh: MeshOrigin { geom_id: 2, slot: 2, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 3, slot: 3, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 4, slot: 1, baked: false, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 12343188411137242430, n_points: 8, n_indices: 20, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 1: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 17119738035130870988, n_points: 382, n_indices: 1560, n_uvs: None, smooth: false, material: 0 }), placements: 2, shared: false, displaced: false } +provenance mesh slot 2: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 1739488954094729910, n_points: 8, n_indices: 24, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 3: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 6096447469814747168, n_points: 400, n_indices: 1600, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: true, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/scene/camera1"), cameras: ["/scene/camera1"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/scene/camera1"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/cornellbox_usda-efc8f2e410ea1edf-1.image b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-efc8f2e410ea1edf-1.image new file mode 100644 index 000000000..7172edbfe --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-efc8f2e410ea1edf-1.image @@ -0,0 +1 @@ +640x360 16spp clamp-off 64ede904b11bab22 diff --git a/crates/crust-core/tests/data/import_baselines/cornellbox_usda-f0235d211948c8ae-1.digest b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-f0235d211948c8ae-1.digest new file mode 100644 index 000000000..1d5ab0cab --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-f0235d211948c8ae-1.digest @@ -0,0 +1,39 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/scene/camera1") +camera: Camera { origin: Vec3A(0.0074343784, 1.9913422, 4.0133057), lower_left_corner: Vec3A(-8.881443, -3.0086517, -0.98669434), horizontal: Vec3A(17.777756, 0.0, 0.0), vertical: Vec3A(0.0, 9.999988, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: Some(Vec4(0.0, 0.0, -1.0, 3.9133058)), far: Some(Vec4(0.0, 0.0, 1.0, 9995.986)), planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: None +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 640, height: 360, region: PixelRect { x0: 0, y0: 0, x1: 640, y1: 360 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 12.700017, aperture: [25.4, 25.4], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 5.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/cornellbox.usda"], invisible_overrides: Some(0) } +layer: $DIR/cornellbox.usda +warning: Warning { code: MaterialFallbackDefault, kind: Skipped, count: 1, prims: ["/scene/Looks/initialShadingGroup"], message: "Material /scene/Looks/initialShadingGroup has no surface shader — using default grey OpenPBR" } +lights: 1 +light 0: dome name Some("/scene/Sky") lpe None pmf 1.0 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 5 geometries, PrimitiveBreakdown { triangles: 822, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 2 } top level, PrimitiveBreakdown { triangles: 1582, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 2 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 4.0 motion [] pieces all=10:88b22fc3345d5b05 camera=10:88b22fc3345d5b05 shadow=10:88b22fc3345d5b05 indirect=10:88b22fc3345d5b05 +geom 1: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.2 motion [] pieces all=760:c2b60a75c52c78b9 camera=760:c2b60a75c52c78b9 shadow=760:c2b60a75c52c78b9 indirect=760:c2b60a75c52c78b9 +geom 2: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=12:94a297badef437e1 camera=12:94a297badef437e1 shadow=12:94a297badef437e1 indirect=12:94a297badef437e1 +geom 3: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.25 motion [] pieces all=800:4a8c9f44d777e131 camera=800:4a8c9f44d777e131 shadow=800:4a8c9f44d777e131 indirect=800:4a8c9f44d777e131 +geom 4: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.3585339 motion [] pieces all=760:2344ecf63e12c441 camera=760:2344ecf63e12c441 shadow=760:2344ecf63e12c441 indirect=760:2344ecf63e12c441 +provenance material /scene/Looks/initialShadingGroup: MaterialOrigin { slots: [0, 1, 2, 3, 4], displaced: false } +provenance light /scene/Sky: LightOrigin { index: 0, geoms: 0..0 } +provenance geometry 0..1: /scene/pCube1 +provenance geometry 1..2: /scene/pSphere1 +provenance geometry 2..3: /scene/pCube2 +provenance geometry 3..4: /scene/pTorus1 +provenance geometry 4..5: /scene/pSphere2 +provenance mesh: MeshOrigin { geom_id: 0, slot: 0, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 1, slot: 1, baked: false, moving: false } +provenance mesh: MeshOrigin { geom_id: 2, slot: 2, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 3, slot: 3, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 4, slot: 1, baked: false, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 12343188411137242430, n_points: 8, n_indices: 20, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 1: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 17119738035130870988, n_points: 382, n_indices: 1560, n_uvs: None, smooth: false, material: 0 }), placements: 2, shared: false, displaced: false } +provenance mesh slot 2: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 1739488954094729910, n_points: 8, n_indices: 24, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 3: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 6096447469814747168, n_points: 400, n_indices: 1600, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: true, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/scene/camera1"), cameras: ["/scene/camera1"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/scene/camera1"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/cornellbox_usda-f0235d211948c8ae-1.image b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-f0235d211948c8ae-1.image new file mode 100644 index 000000000..7172edbfe --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-f0235d211948c8ae-1.image @@ -0,0 +1 @@ +640x360 16spp clamp-off 64ede904b11bab22 diff --git a/crates/crust-core/tests/data/import_baselines/cornellbox_usda-f0d9751b5af0e124-1.digest b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-f0d9751b5af0e124-1.digest new file mode 100644 index 000000000..1d5ab0cab --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-f0d9751b5af0e124-1.digest @@ -0,0 +1,39 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/scene/camera1") +camera: Camera { origin: Vec3A(0.0074343784, 1.9913422, 4.0133057), lower_left_corner: Vec3A(-8.881443, -3.0086517, -0.98669434), horizontal: Vec3A(17.777756, 0.0, 0.0), vertical: Vec3A(0.0, 9.999988, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: Some(Vec4(0.0, 0.0, -1.0, 3.9133058)), far: Some(Vec4(0.0, 0.0, 1.0, 9995.986)), planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: None +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 640, height: 360, region: PixelRect { x0: 0, y0: 0, x1: 640, y1: 360 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 12.700017, aperture: [25.4, 25.4], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 5.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/cornellbox.usda"], invisible_overrides: Some(0) } +layer: $DIR/cornellbox.usda +warning: Warning { code: MaterialFallbackDefault, kind: Skipped, count: 1, prims: ["/scene/Looks/initialShadingGroup"], message: "Material /scene/Looks/initialShadingGroup has no surface shader — using default grey OpenPBR" } +lights: 1 +light 0: dome name Some("/scene/Sky") lpe None pmf 1.0 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 5 geometries, PrimitiveBreakdown { triangles: 822, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 2 } top level, PrimitiveBreakdown { triangles: 1582, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 2 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 4.0 motion [] pieces all=10:88b22fc3345d5b05 camera=10:88b22fc3345d5b05 shadow=10:88b22fc3345d5b05 indirect=10:88b22fc3345d5b05 +geom 1: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.2 motion [] pieces all=760:c2b60a75c52c78b9 camera=760:c2b60a75c52c78b9 shadow=760:c2b60a75c52c78b9 indirect=760:c2b60a75c52c78b9 +geom 2: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=12:94a297badef437e1 camera=12:94a297badef437e1 shadow=12:94a297badef437e1 indirect=12:94a297badef437e1 +geom 3: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.25 motion [] pieces all=800:4a8c9f44d777e131 camera=800:4a8c9f44d777e131 shadow=800:4a8c9f44d777e131 indirect=800:4a8c9f44d777e131 +geom 4: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.3585339 motion [] pieces all=760:2344ecf63e12c441 camera=760:2344ecf63e12c441 shadow=760:2344ecf63e12c441 indirect=760:2344ecf63e12c441 +provenance material /scene/Looks/initialShadingGroup: MaterialOrigin { slots: [0, 1, 2, 3, 4], displaced: false } +provenance light /scene/Sky: LightOrigin { index: 0, geoms: 0..0 } +provenance geometry 0..1: /scene/pCube1 +provenance geometry 1..2: /scene/pSphere1 +provenance geometry 2..3: /scene/pCube2 +provenance geometry 3..4: /scene/pTorus1 +provenance geometry 4..5: /scene/pSphere2 +provenance mesh: MeshOrigin { geom_id: 0, slot: 0, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 1, slot: 1, baked: false, moving: false } +provenance mesh: MeshOrigin { geom_id: 2, slot: 2, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 3, slot: 3, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 4, slot: 1, baked: false, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 12343188411137242430, n_points: 8, n_indices: 20, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 1: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 17119738035130870988, n_points: 382, n_indices: 1560, n_uvs: None, smooth: false, material: 0 }), placements: 2, shared: false, displaced: false } +provenance mesh slot 2: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 1739488954094729910, n_points: 8, n_indices: 24, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 3: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 6096447469814747168, n_points: 400, n_indices: 1600, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: true, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/scene/camera1"), cameras: ["/scene/camera1"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/scene/camera1"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/cornellbox_usda-f0d9751b5af0e124-1.image b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-f0d9751b5af0e124-1.image new file mode 100644 index 000000000..7172edbfe --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-f0d9751b5af0e124-1.image @@ -0,0 +1 @@ +640x360 16spp clamp-off 64ede904b11bab22 diff --git a/crates/crust-core/tests/data/import_baselines/cornellbox_usda-f3f2b534bfcc0db6-1.digest b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-f3f2b534bfcc0db6-1.digest new file mode 100644 index 000000000..0e859a952 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-f3f2b534bfcc0db6-1.digest @@ -0,0 +1,40 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/scene/camera1") +camera: Camera { origin: Vec3A(0.0074343784, 1.9913422, 4.0133057), lower_left_corner: Vec3A(-8.881443, -3.0086517, -0.98669434), horizontal: Vec3A(17.777756, 0.0, 0.0), vertical: Vec3A(0.0, 9.999988, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: Some(Vec4(0.0, 0.0, -1.0, 3.9133058)), far: Some(Vec4(0.0, 0.0, 1.0, 9995.986)), planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: None +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 640, height: 360, region: PixelRect { x0: 0, y0: 0, x1: 640, y1: 360 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 12.700017, aperture: [25.4, 25.4], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 5.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/cornellbox.usda"], invisible_overrides: Some(0) } +layer: $DIR/cornellbox.usda +warning: Warning { code: AssetUnsupportedByHost, kind: Skipped, count: 1, prims: [], message: "No asset loader: environment map $DIR/sky_gradient.exr ignored — the dome falls back to its uniform colour. Use Scene::from_usd_with_assets to supply one." } +warning: Warning { code: MaterialFallbackDefault, kind: Skipped, count: 1, prims: ["/scene/Looks/initialShadingGroup"], message: "Material /scene/Looks/initialShadingGroup has no surface shader — using default grey OpenPBR" } +lights: 1 +light 0: dome name Some("/scene/Sky") lpe None pmf 1.0 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 5 geometries, PrimitiveBreakdown { triangles: 822, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 2 } top level, PrimitiveBreakdown { triangles: 1582, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 2 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 4.0 motion [] pieces all=10:88b22fc3345d5b05 camera=10:88b22fc3345d5b05 shadow=10:88b22fc3345d5b05 indirect=10:88b22fc3345d5b05 +geom 1: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.2 motion [] pieces all=760:c2b60a75c52c78b9 camera=760:c2b60a75c52c78b9 shadow=760:c2b60a75c52c78b9 indirect=760:c2b60a75c52c78b9 +geom 2: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=12:94a297badef437e1 camera=12:94a297badef437e1 shadow=12:94a297badef437e1 indirect=12:94a297badef437e1 +geom 3: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.25 motion [] pieces all=800:4a8c9f44d777e131 camera=800:4a8c9f44d777e131 shadow=800:4a8c9f44d777e131 indirect=800:4a8c9f44d777e131 +geom 4: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.3585339 motion [] pieces all=760:2344ecf63e12c441 camera=760:2344ecf63e12c441 shadow=760:2344ecf63e12c441 indirect=760:2344ecf63e12c441 +provenance material /scene/Looks/initialShadingGroup: MaterialOrigin { slots: [0, 1, 2, 3, 4], displaced: false } +provenance light /scene/Sky: LightOrigin { index: 0, geoms: 0..0 } +provenance geometry 0..1: /scene/pCube1 +provenance geometry 1..2: /scene/pSphere1 +provenance geometry 2..3: /scene/pCube2 +provenance geometry 3..4: /scene/pTorus1 +provenance geometry 4..5: /scene/pSphere2 +provenance mesh: MeshOrigin { geom_id: 0, slot: 0, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 1, slot: 1, baked: false, moving: false } +provenance mesh: MeshOrigin { geom_id: 2, slot: 2, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 3, slot: 3, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 4, slot: 1, baked: false, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 12343188411137242430, n_points: 8, n_indices: 20, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 1: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 17119738035130870988, n_points: 382, n_indices: 1560, n_uvs: None, smooth: false, material: 0 }), placements: 2, shared: false, displaced: false } +provenance mesh slot 2: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 1739488954094729910, n_points: 8, n_indices: 24, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 3: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 6096447469814747168, n_points: 400, n_indices: 1600, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/scene/camera1"), cameras: ["/scene/camera1"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/scene/camera1"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/cornellbox_usda-f3f2b534bfcc0db6-1.image b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-f3f2b534bfcc0db6-1.image new file mode 100644 index 000000000..ba4884437 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-f3f2b534bfcc0db6-1.image @@ -0,0 +1 @@ +640x360 16spp clamp-off 52a1a46f3a46d230 diff --git a/crates/crust-core/tests/data/import_baselines/cornellbox_usda-f3f2b534bfcc0db6-2.digest b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-f3f2b534bfcc0db6-2.digest new file mode 100644 index 000000000..0e859a952 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-f3f2b534bfcc0db6-2.digest @@ -0,0 +1,40 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/scene/camera1") +camera: Camera { origin: Vec3A(0.0074343784, 1.9913422, 4.0133057), lower_left_corner: Vec3A(-8.881443, -3.0086517, -0.98669434), horizontal: Vec3A(17.777756, 0.0, 0.0), vertical: Vec3A(0.0, 9.999988, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: Some(Vec4(0.0, 0.0, -1.0, 3.9133058)), far: Some(Vec4(0.0, 0.0, 1.0, 9995.986)), planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: None +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 640, height: 360, region: PixelRect { x0: 0, y0: 0, x1: 640, y1: 360 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 12.700017, aperture: [25.4, 25.4], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 5.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/cornellbox.usda"], invisible_overrides: Some(0) } +layer: $DIR/cornellbox.usda +warning: Warning { code: AssetUnsupportedByHost, kind: Skipped, count: 1, prims: [], message: "No asset loader: environment map $DIR/sky_gradient.exr ignored — the dome falls back to its uniform colour. Use Scene::from_usd_with_assets to supply one." } +warning: Warning { code: MaterialFallbackDefault, kind: Skipped, count: 1, prims: ["/scene/Looks/initialShadingGroup"], message: "Material /scene/Looks/initialShadingGroup has no surface shader — using default grey OpenPBR" } +lights: 1 +light 0: dome name Some("/scene/Sky") lpe None pmf 1.0 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 5 geometries, PrimitiveBreakdown { triangles: 822, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 2 } top level, PrimitiveBreakdown { triangles: 1582, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 2 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 4.0 motion [] pieces all=10:88b22fc3345d5b05 camera=10:88b22fc3345d5b05 shadow=10:88b22fc3345d5b05 indirect=10:88b22fc3345d5b05 +geom 1: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.2 motion [] pieces all=760:c2b60a75c52c78b9 camera=760:c2b60a75c52c78b9 shadow=760:c2b60a75c52c78b9 indirect=760:c2b60a75c52c78b9 +geom 2: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=12:94a297badef437e1 camera=12:94a297badef437e1 shadow=12:94a297badef437e1 indirect=12:94a297badef437e1 +geom 3: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.25 motion [] pieces all=800:4a8c9f44d777e131 camera=800:4a8c9f44d777e131 shadow=800:4a8c9f44d777e131 indirect=800:4a8c9f44d777e131 +geom 4: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.3585339 motion [] pieces all=760:2344ecf63e12c441 camera=760:2344ecf63e12c441 shadow=760:2344ecf63e12c441 indirect=760:2344ecf63e12c441 +provenance material /scene/Looks/initialShadingGroup: MaterialOrigin { slots: [0, 1, 2, 3, 4], displaced: false } +provenance light /scene/Sky: LightOrigin { index: 0, geoms: 0..0 } +provenance geometry 0..1: /scene/pCube1 +provenance geometry 1..2: /scene/pSphere1 +provenance geometry 2..3: /scene/pCube2 +provenance geometry 3..4: /scene/pTorus1 +provenance geometry 4..5: /scene/pSphere2 +provenance mesh: MeshOrigin { geom_id: 0, slot: 0, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 1, slot: 1, baked: false, moving: false } +provenance mesh: MeshOrigin { geom_id: 2, slot: 2, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 3, slot: 3, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 4, slot: 1, baked: false, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 12343188411137242430, n_points: 8, n_indices: 20, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 1: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 17119738035130870988, n_points: 382, n_indices: 1560, n_uvs: None, smooth: false, material: 0 }), placements: 2, shared: false, displaced: false } +provenance mesh slot 2: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 1739488954094729910, n_points: 8, n_indices: 24, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 3: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 6096447469814747168, n_points: 400, n_indices: 1600, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/scene/camera1"), cameras: ["/scene/camera1"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/scene/camera1"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/cornellbox_usda-f3f2b534bfcc0db6-2.image b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-f3f2b534bfcc0db6-2.image new file mode 100644 index 000000000..ba4884437 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-f3f2b534bfcc0db6-2.image @@ -0,0 +1 @@ +640x360 16spp clamp-off 52a1a46f3a46d230 diff --git a/crates/crust-core/tests/data/import_baselines/cornellbox_usda-f3f2b534bfcc0db6-3.digest b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-f3f2b534bfcc0db6-3.digest new file mode 100644 index 000000000..0e859a952 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-f3f2b534bfcc0db6-3.digest @@ -0,0 +1,40 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/scene/camera1") +camera: Camera { origin: Vec3A(0.0074343784, 1.9913422, 4.0133057), lower_left_corner: Vec3A(-8.881443, -3.0086517, -0.98669434), horizontal: Vec3A(17.777756, 0.0, 0.0), vertical: Vec3A(0.0, 9.999988, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: Some(Vec4(0.0, 0.0, -1.0, 3.9133058)), far: Some(Vec4(0.0, 0.0, 1.0, 9995.986)), planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: None +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 640, height: 360, region: PixelRect { x0: 0, y0: 0, x1: 640, y1: 360 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 12.700017, aperture: [25.4, 25.4], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 5.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/cornellbox.usda"], invisible_overrides: Some(0) } +layer: $DIR/cornellbox.usda +warning: Warning { code: AssetUnsupportedByHost, kind: Skipped, count: 1, prims: [], message: "No asset loader: environment map $DIR/sky_gradient.exr ignored — the dome falls back to its uniform colour. Use Scene::from_usd_with_assets to supply one." } +warning: Warning { code: MaterialFallbackDefault, kind: Skipped, count: 1, prims: ["/scene/Looks/initialShadingGroup"], message: "Material /scene/Looks/initialShadingGroup has no surface shader — using default grey OpenPBR" } +lights: 1 +light 0: dome name Some("/scene/Sky") lpe None pmf 1.0 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 5 geometries, PrimitiveBreakdown { triangles: 822, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 2 } top level, PrimitiveBreakdown { triangles: 1582, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 2 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 4.0 motion [] pieces all=10:88b22fc3345d5b05 camera=10:88b22fc3345d5b05 shadow=10:88b22fc3345d5b05 indirect=10:88b22fc3345d5b05 +geom 1: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.2 motion [] pieces all=760:c2b60a75c52c78b9 camera=760:c2b60a75c52c78b9 shadow=760:c2b60a75c52c78b9 indirect=760:c2b60a75c52c78b9 +geom 2: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=12:94a297badef437e1 camera=12:94a297badef437e1 shadow=12:94a297badef437e1 indirect=12:94a297badef437e1 +geom 3: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.25 motion [] pieces all=800:4a8c9f44d777e131 camera=800:4a8c9f44d777e131 shadow=800:4a8c9f44d777e131 indirect=800:4a8c9f44d777e131 +geom 4: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.3585339 motion [] pieces all=760:2344ecf63e12c441 camera=760:2344ecf63e12c441 shadow=760:2344ecf63e12c441 indirect=760:2344ecf63e12c441 +provenance material /scene/Looks/initialShadingGroup: MaterialOrigin { slots: [0, 1, 2, 3, 4], displaced: false } +provenance light /scene/Sky: LightOrigin { index: 0, geoms: 0..0 } +provenance geometry 0..1: /scene/pCube1 +provenance geometry 1..2: /scene/pSphere1 +provenance geometry 2..3: /scene/pCube2 +provenance geometry 3..4: /scene/pTorus1 +provenance geometry 4..5: /scene/pSphere2 +provenance mesh: MeshOrigin { geom_id: 0, slot: 0, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 1, slot: 1, baked: false, moving: false } +provenance mesh: MeshOrigin { geom_id: 2, slot: 2, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 3, slot: 3, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 4, slot: 1, baked: false, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 12343188411137242430, n_points: 8, n_indices: 20, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 1: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 17119738035130870988, n_points: 382, n_indices: 1560, n_uvs: None, smooth: false, material: 0 }), placements: 2, shared: false, displaced: false } +provenance mesh slot 2: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 1739488954094729910, n_points: 8, n_indices: 24, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 3: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 6096447469814747168, n_points: 400, n_indices: 1600, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/scene/camera1"), cameras: ["/scene/camera1"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/scene/camera1"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/cornellbox_usda-f3f2b534bfcc0db6-3.image b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-f3f2b534bfcc0db6-3.image new file mode 100644 index 000000000..ba4884437 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-f3f2b534bfcc0db6-3.image @@ -0,0 +1 @@ +640x360 16spp clamp-off 52a1a46f3a46d230 diff --git a/crates/crust-core/tests/data/import_baselines/cornellbox_usda-f3f2b534bfcc0db6-4.digest b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-f3f2b534bfcc0db6-4.digest new file mode 100644 index 000000000..0e859a952 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-f3f2b534bfcc0db6-4.digest @@ -0,0 +1,40 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/scene/camera1") +camera: Camera { origin: Vec3A(0.0074343784, 1.9913422, 4.0133057), lower_left_corner: Vec3A(-8.881443, -3.0086517, -0.98669434), horizontal: Vec3A(17.777756, 0.0, 0.0), vertical: Vec3A(0.0, 9.999988, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: Some(Vec4(0.0, 0.0, -1.0, 3.9133058)), far: Some(Vec4(0.0, 0.0, 1.0, 9995.986)), planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: None +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 640, height: 360, region: PixelRect { x0: 0, y0: 0, x1: 640, y1: 360 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 12.700017, aperture: [25.4, 25.4], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 5.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/cornellbox.usda"], invisible_overrides: Some(0) } +layer: $DIR/cornellbox.usda +warning: Warning { code: AssetUnsupportedByHost, kind: Skipped, count: 1, prims: [], message: "No asset loader: environment map $DIR/sky_gradient.exr ignored — the dome falls back to its uniform colour. Use Scene::from_usd_with_assets to supply one." } +warning: Warning { code: MaterialFallbackDefault, kind: Skipped, count: 1, prims: ["/scene/Looks/initialShadingGroup"], message: "Material /scene/Looks/initialShadingGroup has no surface shader — using default grey OpenPBR" } +lights: 1 +light 0: dome name Some("/scene/Sky") lpe None pmf 1.0 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 5 geometries, PrimitiveBreakdown { triangles: 822, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 2 } top level, PrimitiveBreakdown { triangles: 1582, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 2 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 4.0 motion [] pieces all=10:88b22fc3345d5b05 camera=10:88b22fc3345d5b05 shadow=10:88b22fc3345d5b05 indirect=10:88b22fc3345d5b05 +geom 1: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.2 motion [] pieces all=760:c2b60a75c52c78b9 camera=760:c2b60a75c52c78b9 shadow=760:c2b60a75c52c78b9 indirect=760:c2b60a75c52c78b9 +geom 2: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=12:94a297badef437e1 camera=12:94a297badef437e1 shadow=12:94a297badef437e1 indirect=12:94a297badef437e1 +geom 3: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.25 motion [] pieces all=800:4a8c9f44d777e131 camera=800:4a8c9f44d777e131 shadow=800:4a8c9f44d777e131 indirect=800:4a8c9f44d777e131 +geom 4: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.3585339 motion [] pieces all=760:2344ecf63e12c441 camera=760:2344ecf63e12c441 shadow=760:2344ecf63e12c441 indirect=760:2344ecf63e12c441 +provenance material /scene/Looks/initialShadingGroup: MaterialOrigin { slots: [0, 1, 2, 3, 4], displaced: false } +provenance light /scene/Sky: LightOrigin { index: 0, geoms: 0..0 } +provenance geometry 0..1: /scene/pCube1 +provenance geometry 1..2: /scene/pSphere1 +provenance geometry 2..3: /scene/pCube2 +provenance geometry 3..4: /scene/pTorus1 +provenance geometry 4..5: /scene/pSphere2 +provenance mesh: MeshOrigin { geom_id: 0, slot: 0, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 1, slot: 1, baked: false, moving: false } +provenance mesh: MeshOrigin { geom_id: 2, slot: 2, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 3, slot: 3, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 4, slot: 1, baked: false, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 12343188411137242430, n_points: 8, n_indices: 20, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 1: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 17119738035130870988, n_points: 382, n_indices: 1560, n_uvs: None, smooth: false, material: 0 }), placements: 2, shared: false, displaced: false } +provenance mesh slot 2: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 1739488954094729910, n_points: 8, n_indices: 24, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 3: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 6096447469814747168, n_points: 400, n_indices: 1600, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/scene/camera1"), cameras: ["/scene/camera1"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/scene/camera1"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/cornellbox_usda-f3f2b534bfcc0db6-4.image b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-f3f2b534bfcc0db6-4.image new file mode 100644 index 000000000..ba4884437 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-f3f2b534bfcc0db6-4.image @@ -0,0 +1 @@ +640x360 16spp clamp-off 52a1a46f3a46d230 diff --git a/crates/crust-core/tests/data/import_baselines/cornellbox_usda-f52f4933a61a7b17-1.digest b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-f52f4933a61a7b17-1.digest new file mode 100644 index 000000000..1d5ab0cab --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-f52f4933a61a7b17-1.digest @@ -0,0 +1,39 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/scene/camera1") +camera: Camera { origin: Vec3A(0.0074343784, 1.9913422, 4.0133057), lower_left_corner: Vec3A(-8.881443, -3.0086517, -0.98669434), horizontal: Vec3A(17.777756, 0.0, 0.0), vertical: Vec3A(0.0, 9.999988, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: Some(Vec4(0.0, 0.0, -1.0, 3.9133058)), far: Some(Vec4(0.0, 0.0, 1.0, 9995.986)), planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: None +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 640, height: 360, region: PixelRect { x0: 0, y0: 0, x1: 640, y1: 360 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 12.700017, aperture: [25.4, 25.4], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 5.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/cornellbox.usda"], invisible_overrides: Some(0) } +layer: $DIR/cornellbox.usda +warning: Warning { code: MaterialFallbackDefault, kind: Skipped, count: 1, prims: ["/scene/Looks/initialShadingGroup"], message: "Material /scene/Looks/initialShadingGroup has no surface shader — using default grey OpenPBR" } +lights: 1 +light 0: dome name Some("/scene/Sky") lpe None pmf 1.0 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 5 geometries, PrimitiveBreakdown { triangles: 822, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 2 } top level, PrimitiveBreakdown { triangles: 1582, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 2 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 4.0 motion [] pieces all=10:88b22fc3345d5b05 camera=10:88b22fc3345d5b05 shadow=10:88b22fc3345d5b05 indirect=10:88b22fc3345d5b05 +geom 1: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.2 motion [] pieces all=760:c2b60a75c52c78b9 camera=760:c2b60a75c52c78b9 shadow=760:c2b60a75c52c78b9 indirect=760:c2b60a75c52c78b9 +geom 2: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=12:94a297badef437e1 camera=12:94a297badef437e1 shadow=12:94a297badef437e1 indirect=12:94a297badef437e1 +geom 3: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.25 motion [] pieces all=800:4a8c9f44d777e131 camera=800:4a8c9f44d777e131 shadow=800:4a8c9f44d777e131 indirect=800:4a8c9f44d777e131 +geom 4: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.3585339 motion [] pieces all=760:2344ecf63e12c441 camera=760:2344ecf63e12c441 shadow=760:2344ecf63e12c441 indirect=760:2344ecf63e12c441 +provenance material /scene/Looks/initialShadingGroup: MaterialOrigin { slots: [0, 1, 2, 3, 4], displaced: false } +provenance light /scene/Sky: LightOrigin { index: 0, geoms: 0..0 } +provenance geometry 0..1: /scene/pCube1 +provenance geometry 1..2: /scene/pSphere1 +provenance geometry 2..3: /scene/pCube2 +provenance geometry 3..4: /scene/pTorus1 +provenance geometry 4..5: /scene/pSphere2 +provenance mesh: MeshOrigin { geom_id: 0, slot: 0, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 1, slot: 1, baked: false, moving: false } +provenance mesh: MeshOrigin { geom_id: 2, slot: 2, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 3, slot: 3, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 4, slot: 1, baked: false, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 12343188411137242430, n_points: 8, n_indices: 20, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 1: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 17119738035130870988, n_points: 382, n_indices: 1560, n_uvs: None, smooth: false, material: 0 }), placements: 2, shared: false, displaced: false } +provenance mesh slot 2: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 1739488954094729910, n_points: 8, n_indices: 24, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 3: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 6096447469814747168, n_points: 400, n_indices: 1600, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: true, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/scene/camera1"), cameras: ["/scene/camera1"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/scene/camera1"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/cornellbox_usda-f52f4933a61a7b17-1.image b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-f52f4933a61a7b17-1.image new file mode 100644 index 000000000..7172edbfe --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-f52f4933a61a7b17-1.image @@ -0,0 +1 @@ +640x360 16spp clamp-off 64ede904b11bab22 diff --git a/crates/crust-core/tests/data/import_baselines/cornellbox_usda-f72ab0ee474423bf-1.digest b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-f72ab0ee474423bf-1.digest new file mode 100644 index 000000000..1d5ab0cab --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-f72ab0ee474423bf-1.digest @@ -0,0 +1,39 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/scene/camera1") +camera: Camera { origin: Vec3A(0.0074343784, 1.9913422, 4.0133057), lower_left_corner: Vec3A(-8.881443, -3.0086517, -0.98669434), horizontal: Vec3A(17.777756, 0.0, 0.0), vertical: Vec3A(0.0, 9.999988, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: Some(Vec4(0.0, 0.0, -1.0, 3.9133058)), far: Some(Vec4(0.0, 0.0, 1.0, 9995.986)), planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: None +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 640, height: 360, region: PixelRect { x0: 0, y0: 0, x1: 640, y1: 360 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 12.700017, aperture: [25.4, 25.4], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 5.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/cornellbox.usda"], invisible_overrides: Some(0) } +layer: $DIR/cornellbox.usda +warning: Warning { code: MaterialFallbackDefault, kind: Skipped, count: 1, prims: ["/scene/Looks/initialShadingGroup"], message: "Material /scene/Looks/initialShadingGroup has no surface shader — using default grey OpenPBR" } +lights: 1 +light 0: dome name Some("/scene/Sky") lpe None pmf 1.0 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 5 geometries, PrimitiveBreakdown { triangles: 822, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 2 } top level, PrimitiveBreakdown { triangles: 1582, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 2 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 4.0 motion [] pieces all=10:88b22fc3345d5b05 camera=10:88b22fc3345d5b05 shadow=10:88b22fc3345d5b05 indirect=10:88b22fc3345d5b05 +geom 1: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.2 motion [] pieces all=760:c2b60a75c52c78b9 camera=760:c2b60a75c52c78b9 shadow=760:c2b60a75c52c78b9 indirect=760:c2b60a75c52c78b9 +geom 2: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=12:94a297badef437e1 camera=12:94a297badef437e1 shadow=12:94a297badef437e1 indirect=12:94a297badef437e1 +geom 3: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.25 motion [] pieces all=800:4a8c9f44d777e131 camera=800:4a8c9f44d777e131 shadow=800:4a8c9f44d777e131 indirect=800:4a8c9f44d777e131 +geom 4: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.3585339 motion [] pieces all=760:2344ecf63e12c441 camera=760:2344ecf63e12c441 shadow=760:2344ecf63e12c441 indirect=760:2344ecf63e12c441 +provenance material /scene/Looks/initialShadingGroup: MaterialOrigin { slots: [0, 1, 2, 3, 4], displaced: false } +provenance light /scene/Sky: LightOrigin { index: 0, geoms: 0..0 } +provenance geometry 0..1: /scene/pCube1 +provenance geometry 1..2: /scene/pSphere1 +provenance geometry 2..3: /scene/pCube2 +provenance geometry 3..4: /scene/pTorus1 +provenance geometry 4..5: /scene/pSphere2 +provenance mesh: MeshOrigin { geom_id: 0, slot: 0, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 1, slot: 1, baked: false, moving: false } +provenance mesh: MeshOrigin { geom_id: 2, slot: 2, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 3, slot: 3, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 4, slot: 1, baked: false, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 12343188411137242430, n_points: 8, n_indices: 20, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 1: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 17119738035130870988, n_points: 382, n_indices: 1560, n_uvs: None, smooth: false, material: 0 }), placements: 2, shared: false, displaced: false } +provenance mesh slot 2: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 1739488954094729910, n_points: 8, n_indices: 24, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 3: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 6096447469814747168, n_points: 400, n_indices: 1600, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: true, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/scene/camera1"), cameras: ["/scene/camera1"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/scene/camera1"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/cornellbox_usda-f72ab0ee474423bf-1.image b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-f72ab0ee474423bf-1.image new file mode 100644 index 000000000..7172edbfe --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-f72ab0ee474423bf-1.image @@ -0,0 +1 @@ +640x360 16spp clamp-off 64ede904b11bab22 diff --git a/crates/crust-core/tests/data/import_baselines/cornellbox_usda-f74efd8c1a39793d-1.digest b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-f74efd8c1a39793d-1.digest new file mode 100644 index 000000000..0e859a952 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-f74efd8c1a39793d-1.digest @@ -0,0 +1,40 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/scene/camera1") +camera: Camera { origin: Vec3A(0.0074343784, 1.9913422, 4.0133057), lower_left_corner: Vec3A(-8.881443, -3.0086517, -0.98669434), horizontal: Vec3A(17.777756, 0.0, 0.0), vertical: Vec3A(0.0, 9.999988, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: Some(Vec4(0.0, 0.0, -1.0, 3.9133058)), far: Some(Vec4(0.0, 0.0, 1.0, 9995.986)), planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: None +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 640, height: 360, region: PixelRect { x0: 0, y0: 0, x1: 640, y1: 360 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 12.700017, aperture: [25.4, 25.4], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 5.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/cornellbox.usda"], invisible_overrides: Some(0) } +layer: $DIR/cornellbox.usda +warning: Warning { code: AssetUnsupportedByHost, kind: Skipped, count: 1, prims: [], message: "No asset loader: environment map $DIR/sky_gradient.exr ignored — the dome falls back to its uniform colour. Use Scene::from_usd_with_assets to supply one." } +warning: Warning { code: MaterialFallbackDefault, kind: Skipped, count: 1, prims: ["/scene/Looks/initialShadingGroup"], message: "Material /scene/Looks/initialShadingGroup has no surface shader — using default grey OpenPBR" } +lights: 1 +light 0: dome name Some("/scene/Sky") lpe None pmf 1.0 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 5 geometries, PrimitiveBreakdown { triangles: 822, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 2 } top level, PrimitiveBreakdown { triangles: 1582, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 2 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 4.0 motion [] pieces all=10:88b22fc3345d5b05 camera=10:88b22fc3345d5b05 shadow=10:88b22fc3345d5b05 indirect=10:88b22fc3345d5b05 +geom 1: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.2 motion [] pieces all=760:c2b60a75c52c78b9 camera=760:c2b60a75c52c78b9 shadow=760:c2b60a75c52c78b9 indirect=760:c2b60a75c52c78b9 +geom 2: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=12:94a297badef437e1 camera=12:94a297badef437e1 shadow=12:94a297badef437e1 indirect=12:94a297badef437e1 +geom 3: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.25 motion [] pieces all=800:4a8c9f44d777e131 camera=800:4a8c9f44d777e131 shadow=800:4a8c9f44d777e131 indirect=800:4a8c9f44d777e131 +geom 4: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.3585339 motion [] pieces all=760:2344ecf63e12c441 camera=760:2344ecf63e12c441 shadow=760:2344ecf63e12c441 indirect=760:2344ecf63e12c441 +provenance material /scene/Looks/initialShadingGroup: MaterialOrigin { slots: [0, 1, 2, 3, 4], displaced: false } +provenance light /scene/Sky: LightOrigin { index: 0, geoms: 0..0 } +provenance geometry 0..1: /scene/pCube1 +provenance geometry 1..2: /scene/pSphere1 +provenance geometry 2..3: /scene/pCube2 +provenance geometry 3..4: /scene/pTorus1 +provenance geometry 4..5: /scene/pSphere2 +provenance mesh: MeshOrigin { geom_id: 0, slot: 0, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 1, slot: 1, baked: false, moving: false } +provenance mesh: MeshOrigin { geom_id: 2, slot: 2, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 3, slot: 3, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 4, slot: 1, baked: false, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 12343188411137242430, n_points: 8, n_indices: 20, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 1: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 17119738035130870988, n_points: 382, n_indices: 1560, n_uvs: None, smooth: false, material: 0 }), placements: 2, shared: false, displaced: false } +provenance mesh slot 2: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 1739488954094729910, n_points: 8, n_indices: 24, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 3: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 6096447469814747168, n_points: 400, n_indices: 1600, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/scene/camera1"), cameras: ["/scene/camera1"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/scene/camera1"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/cornellbox_usda-f74efd8c1a39793d-1.image b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-f74efd8c1a39793d-1.image new file mode 100644 index 000000000..ba4884437 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-f74efd8c1a39793d-1.image @@ -0,0 +1 @@ +640x360 16spp clamp-off 52a1a46f3a46d230 diff --git a/crates/crust-core/tests/data/import_baselines/cornellbox_usda-f74efd8c1a39793d-2.digest b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-f74efd8c1a39793d-2.digest new file mode 100644 index 000000000..0e859a952 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-f74efd8c1a39793d-2.digest @@ -0,0 +1,40 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/scene/camera1") +camera: Camera { origin: Vec3A(0.0074343784, 1.9913422, 4.0133057), lower_left_corner: Vec3A(-8.881443, -3.0086517, -0.98669434), horizontal: Vec3A(17.777756, 0.0, 0.0), vertical: Vec3A(0.0, 9.999988, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: Some(Vec4(0.0, 0.0, -1.0, 3.9133058)), far: Some(Vec4(0.0, 0.0, 1.0, 9995.986)), planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: None +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 640, height: 360, region: PixelRect { x0: 0, y0: 0, x1: 640, y1: 360 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 12.700017, aperture: [25.4, 25.4], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 5.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/cornellbox.usda"], invisible_overrides: Some(0) } +layer: $DIR/cornellbox.usda +warning: Warning { code: AssetUnsupportedByHost, kind: Skipped, count: 1, prims: [], message: "No asset loader: environment map $DIR/sky_gradient.exr ignored — the dome falls back to its uniform colour. Use Scene::from_usd_with_assets to supply one." } +warning: Warning { code: MaterialFallbackDefault, kind: Skipped, count: 1, prims: ["/scene/Looks/initialShadingGroup"], message: "Material /scene/Looks/initialShadingGroup has no surface shader — using default grey OpenPBR" } +lights: 1 +light 0: dome name Some("/scene/Sky") lpe None pmf 1.0 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 5 geometries, PrimitiveBreakdown { triangles: 822, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 2 } top level, PrimitiveBreakdown { triangles: 1582, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 2 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 4.0 motion [] pieces all=10:88b22fc3345d5b05 camera=10:88b22fc3345d5b05 shadow=10:88b22fc3345d5b05 indirect=10:88b22fc3345d5b05 +geom 1: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.2 motion [] pieces all=760:c2b60a75c52c78b9 camera=760:c2b60a75c52c78b9 shadow=760:c2b60a75c52c78b9 indirect=760:c2b60a75c52c78b9 +geom 2: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=12:94a297badef437e1 camera=12:94a297badef437e1 shadow=12:94a297badef437e1 indirect=12:94a297badef437e1 +geom 3: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.25 motion [] pieces all=800:4a8c9f44d777e131 camera=800:4a8c9f44d777e131 shadow=800:4a8c9f44d777e131 indirect=800:4a8c9f44d777e131 +geom 4: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.3585339 motion [] pieces all=760:2344ecf63e12c441 camera=760:2344ecf63e12c441 shadow=760:2344ecf63e12c441 indirect=760:2344ecf63e12c441 +provenance material /scene/Looks/initialShadingGroup: MaterialOrigin { slots: [0, 1, 2, 3, 4], displaced: false } +provenance light /scene/Sky: LightOrigin { index: 0, geoms: 0..0 } +provenance geometry 0..1: /scene/pCube1 +provenance geometry 1..2: /scene/pSphere1 +provenance geometry 2..3: /scene/pCube2 +provenance geometry 3..4: /scene/pTorus1 +provenance geometry 4..5: /scene/pSphere2 +provenance mesh: MeshOrigin { geom_id: 0, slot: 0, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 1, slot: 1, baked: false, moving: false } +provenance mesh: MeshOrigin { geom_id: 2, slot: 2, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 3, slot: 3, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 4, slot: 1, baked: false, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 12343188411137242430, n_points: 8, n_indices: 20, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 1: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 17119738035130870988, n_points: 382, n_indices: 1560, n_uvs: None, smooth: false, material: 0 }), placements: 2, shared: false, displaced: false } +provenance mesh slot 2: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 1739488954094729910, n_points: 8, n_indices: 24, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 3: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 6096447469814747168, n_points: 400, n_indices: 1600, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/scene/camera1"), cameras: ["/scene/camera1"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/scene/camera1"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/cornellbox_usda-f74efd8c1a39793d-2.image b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-f74efd8c1a39793d-2.image new file mode 100644 index 000000000..ba4884437 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-f74efd8c1a39793d-2.image @@ -0,0 +1 @@ +640x360 16spp clamp-off 52a1a46f3a46d230 diff --git a/crates/crust-core/tests/data/import_baselines/cornellbox_usda-f74efd8c1a39793d-3.digest b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-f74efd8c1a39793d-3.digest new file mode 100644 index 000000000..0e859a952 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-f74efd8c1a39793d-3.digest @@ -0,0 +1,40 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/scene/camera1") +camera: Camera { origin: Vec3A(0.0074343784, 1.9913422, 4.0133057), lower_left_corner: Vec3A(-8.881443, -3.0086517, -0.98669434), horizontal: Vec3A(17.777756, 0.0, 0.0), vertical: Vec3A(0.0, 9.999988, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: Some(Vec4(0.0, 0.0, -1.0, 3.9133058)), far: Some(Vec4(0.0, 0.0, 1.0, 9995.986)), planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: None +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 640, height: 360, region: PixelRect { x0: 0, y0: 0, x1: 640, y1: 360 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 12.700017, aperture: [25.4, 25.4], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 5.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/cornellbox.usda"], invisible_overrides: Some(0) } +layer: $DIR/cornellbox.usda +warning: Warning { code: AssetUnsupportedByHost, kind: Skipped, count: 1, prims: [], message: "No asset loader: environment map $DIR/sky_gradient.exr ignored — the dome falls back to its uniform colour. Use Scene::from_usd_with_assets to supply one." } +warning: Warning { code: MaterialFallbackDefault, kind: Skipped, count: 1, prims: ["/scene/Looks/initialShadingGroup"], message: "Material /scene/Looks/initialShadingGroup has no surface shader — using default grey OpenPBR" } +lights: 1 +light 0: dome name Some("/scene/Sky") lpe None pmf 1.0 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 5 geometries, PrimitiveBreakdown { triangles: 822, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 2 } top level, PrimitiveBreakdown { triangles: 1582, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 2 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 4.0 motion [] pieces all=10:88b22fc3345d5b05 camera=10:88b22fc3345d5b05 shadow=10:88b22fc3345d5b05 indirect=10:88b22fc3345d5b05 +geom 1: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.2 motion [] pieces all=760:c2b60a75c52c78b9 camera=760:c2b60a75c52c78b9 shadow=760:c2b60a75c52c78b9 indirect=760:c2b60a75c52c78b9 +geom 2: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=12:94a297badef437e1 camera=12:94a297badef437e1 shadow=12:94a297badef437e1 indirect=12:94a297badef437e1 +geom 3: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.25 motion [] pieces all=800:4a8c9f44d777e131 camera=800:4a8c9f44d777e131 shadow=800:4a8c9f44d777e131 indirect=800:4a8c9f44d777e131 +geom 4: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.3585339 motion [] pieces all=760:2344ecf63e12c441 camera=760:2344ecf63e12c441 shadow=760:2344ecf63e12c441 indirect=760:2344ecf63e12c441 +provenance material /scene/Looks/initialShadingGroup: MaterialOrigin { slots: [0, 1, 2, 3, 4], displaced: false } +provenance light /scene/Sky: LightOrigin { index: 0, geoms: 0..0 } +provenance geometry 0..1: /scene/pCube1 +provenance geometry 1..2: /scene/pSphere1 +provenance geometry 2..3: /scene/pCube2 +provenance geometry 3..4: /scene/pTorus1 +provenance geometry 4..5: /scene/pSphere2 +provenance mesh: MeshOrigin { geom_id: 0, slot: 0, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 1, slot: 1, baked: false, moving: false } +provenance mesh: MeshOrigin { geom_id: 2, slot: 2, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 3, slot: 3, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 4, slot: 1, baked: false, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 12343188411137242430, n_points: 8, n_indices: 20, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 1: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 17119738035130870988, n_points: 382, n_indices: 1560, n_uvs: None, smooth: false, material: 0 }), placements: 2, shared: false, displaced: false } +provenance mesh slot 2: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 1739488954094729910, n_points: 8, n_indices: 24, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 3: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 6096447469814747168, n_points: 400, n_indices: 1600, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/scene/camera1"), cameras: ["/scene/camera1"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/scene/camera1"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/cornellbox_usda-f74efd8c1a39793d-3.image b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-f74efd8c1a39793d-3.image new file mode 100644 index 000000000..ba4884437 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-f74efd8c1a39793d-3.image @@ -0,0 +1 @@ +640x360 16spp clamp-off 52a1a46f3a46d230 diff --git a/crates/crust-core/tests/data/import_baselines/cornellbox_usda-f91ae1b4cc3a5130-1.digest b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-f91ae1b4cc3a5130-1.digest new file mode 100644 index 000000000..0e859a952 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-f91ae1b4cc3a5130-1.digest @@ -0,0 +1,40 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/scene/camera1") +camera: Camera { origin: Vec3A(0.0074343784, 1.9913422, 4.0133057), lower_left_corner: Vec3A(-8.881443, -3.0086517, -0.98669434), horizontal: Vec3A(17.777756, 0.0, 0.0), vertical: Vec3A(0.0, 9.999988, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: Some(Vec4(0.0, 0.0, -1.0, 3.9133058)), far: Some(Vec4(0.0, 0.0, 1.0, 9995.986)), planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: None +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 640, height: 360, region: PixelRect { x0: 0, y0: 0, x1: 640, y1: 360 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 12.700017, aperture: [25.4, 25.4], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 5.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/cornellbox.usda"], invisible_overrides: Some(0) } +layer: $DIR/cornellbox.usda +warning: Warning { code: AssetUnsupportedByHost, kind: Skipped, count: 1, prims: [], message: "No asset loader: environment map $DIR/sky_gradient.exr ignored — the dome falls back to its uniform colour. Use Scene::from_usd_with_assets to supply one." } +warning: Warning { code: MaterialFallbackDefault, kind: Skipped, count: 1, prims: ["/scene/Looks/initialShadingGroup"], message: "Material /scene/Looks/initialShadingGroup has no surface shader — using default grey OpenPBR" } +lights: 1 +light 0: dome name Some("/scene/Sky") lpe None pmf 1.0 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 5 geometries, PrimitiveBreakdown { triangles: 822, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 2 } top level, PrimitiveBreakdown { triangles: 1582, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 2 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 4.0 motion [] pieces all=10:88b22fc3345d5b05 camera=10:88b22fc3345d5b05 shadow=10:88b22fc3345d5b05 indirect=10:88b22fc3345d5b05 +geom 1: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.2 motion [] pieces all=760:c2b60a75c52c78b9 camera=760:c2b60a75c52c78b9 shadow=760:c2b60a75c52c78b9 indirect=760:c2b60a75c52c78b9 +geom 2: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=12:94a297badef437e1 camera=12:94a297badef437e1 shadow=12:94a297badef437e1 indirect=12:94a297badef437e1 +geom 3: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.25 motion [] pieces all=800:4a8c9f44d777e131 camera=800:4a8c9f44d777e131 shadow=800:4a8c9f44d777e131 indirect=800:4a8c9f44d777e131 +geom 4: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.3585339 motion [] pieces all=760:2344ecf63e12c441 camera=760:2344ecf63e12c441 shadow=760:2344ecf63e12c441 indirect=760:2344ecf63e12c441 +provenance material /scene/Looks/initialShadingGroup: MaterialOrigin { slots: [0, 1, 2, 3, 4], displaced: false } +provenance light /scene/Sky: LightOrigin { index: 0, geoms: 0..0 } +provenance geometry 0..1: /scene/pCube1 +provenance geometry 1..2: /scene/pSphere1 +provenance geometry 2..3: /scene/pCube2 +provenance geometry 3..4: /scene/pTorus1 +provenance geometry 4..5: /scene/pSphere2 +provenance mesh: MeshOrigin { geom_id: 0, slot: 0, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 1, slot: 1, baked: false, moving: false } +provenance mesh: MeshOrigin { geom_id: 2, slot: 2, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 3, slot: 3, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 4, slot: 1, baked: false, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 12343188411137242430, n_points: 8, n_indices: 20, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 1: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 17119738035130870988, n_points: 382, n_indices: 1560, n_uvs: None, smooth: false, material: 0 }), placements: 2, shared: false, displaced: false } +provenance mesh slot 2: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 1739488954094729910, n_points: 8, n_indices: 24, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 3: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 6096447469814747168, n_points: 400, n_indices: 1600, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/scene/camera1"), cameras: ["/scene/camera1"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/scene/camera1"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/cornellbox_usda-f91ae1b4cc3a5130-1.image b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-f91ae1b4cc3a5130-1.image new file mode 100644 index 000000000..ba4884437 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-f91ae1b4cc3a5130-1.image @@ -0,0 +1 @@ +640x360 16spp clamp-off 52a1a46f3a46d230 diff --git a/crates/crust-core/tests/data/import_baselines/cornellbox_usda-f91ae1b4cc3a5130-2.digest b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-f91ae1b4cc3a5130-2.digest new file mode 100644 index 000000000..0e859a952 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-f91ae1b4cc3a5130-2.digest @@ -0,0 +1,40 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/scene/camera1") +camera: Camera { origin: Vec3A(0.0074343784, 1.9913422, 4.0133057), lower_left_corner: Vec3A(-8.881443, -3.0086517, -0.98669434), horizontal: Vec3A(17.777756, 0.0, 0.0), vertical: Vec3A(0.0, 9.999988, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: Some(Vec4(0.0, 0.0, -1.0, 3.9133058)), far: Some(Vec4(0.0, 0.0, 1.0, 9995.986)), planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: None +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 640, height: 360, region: PixelRect { x0: 0, y0: 0, x1: 640, y1: 360 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 12.700017, aperture: [25.4, 25.4], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 5.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/cornellbox.usda"], invisible_overrides: Some(0) } +layer: $DIR/cornellbox.usda +warning: Warning { code: AssetUnsupportedByHost, kind: Skipped, count: 1, prims: [], message: "No asset loader: environment map $DIR/sky_gradient.exr ignored — the dome falls back to its uniform colour. Use Scene::from_usd_with_assets to supply one." } +warning: Warning { code: MaterialFallbackDefault, kind: Skipped, count: 1, prims: ["/scene/Looks/initialShadingGroup"], message: "Material /scene/Looks/initialShadingGroup has no surface shader — using default grey OpenPBR" } +lights: 1 +light 0: dome name Some("/scene/Sky") lpe None pmf 1.0 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 5 geometries, PrimitiveBreakdown { triangles: 822, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 2 } top level, PrimitiveBreakdown { triangles: 1582, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 2 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 4.0 motion [] pieces all=10:88b22fc3345d5b05 camera=10:88b22fc3345d5b05 shadow=10:88b22fc3345d5b05 indirect=10:88b22fc3345d5b05 +geom 1: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.2 motion [] pieces all=760:c2b60a75c52c78b9 camera=760:c2b60a75c52c78b9 shadow=760:c2b60a75c52c78b9 indirect=760:c2b60a75c52c78b9 +geom 2: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=12:94a297badef437e1 camera=12:94a297badef437e1 shadow=12:94a297badef437e1 indirect=12:94a297badef437e1 +geom 3: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.25 motion [] pieces all=800:4a8c9f44d777e131 camera=800:4a8c9f44d777e131 shadow=800:4a8c9f44d777e131 indirect=800:4a8c9f44d777e131 +geom 4: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.3585339 motion [] pieces all=760:2344ecf63e12c441 camera=760:2344ecf63e12c441 shadow=760:2344ecf63e12c441 indirect=760:2344ecf63e12c441 +provenance material /scene/Looks/initialShadingGroup: MaterialOrigin { slots: [0, 1, 2, 3, 4], displaced: false } +provenance light /scene/Sky: LightOrigin { index: 0, geoms: 0..0 } +provenance geometry 0..1: /scene/pCube1 +provenance geometry 1..2: /scene/pSphere1 +provenance geometry 2..3: /scene/pCube2 +provenance geometry 3..4: /scene/pTorus1 +provenance geometry 4..5: /scene/pSphere2 +provenance mesh: MeshOrigin { geom_id: 0, slot: 0, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 1, slot: 1, baked: false, moving: false } +provenance mesh: MeshOrigin { geom_id: 2, slot: 2, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 3, slot: 3, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 4, slot: 1, baked: false, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 12343188411137242430, n_points: 8, n_indices: 20, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 1: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 17119738035130870988, n_points: 382, n_indices: 1560, n_uvs: None, smooth: false, material: 0 }), placements: 2, shared: false, displaced: false } +provenance mesh slot 2: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 1739488954094729910, n_points: 8, n_indices: 24, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 3: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 6096447469814747168, n_points: 400, n_indices: 1600, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/scene/camera1"), cameras: ["/scene/camera1"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/scene/camera1"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/cornellbox_usda-f91ae1b4cc3a5130-2.image b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-f91ae1b4cc3a5130-2.image new file mode 100644 index 000000000..ba4884437 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-f91ae1b4cc3a5130-2.image @@ -0,0 +1 @@ +640x360 16spp clamp-off 52a1a46f3a46d230 diff --git a/crates/crust-core/tests/data/import_baselines/cornellbox_usda-f91ae1b4cc3a5130-3.digest b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-f91ae1b4cc3a5130-3.digest new file mode 100644 index 000000000..0e859a952 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-f91ae1b4cc3a5130-3.digest @@ -0,0 +1,40 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/scene/camera1") +camera: Camera { origin: Vec3A(0.0074343784, 1.9913422, 4.0133057), lower_left_corner: Vec3A(-8.881443, -3.0086517, -0.98669434), horizontal: Vec3A(17.777756, 0.0, 0.0), vertical: Vec3A(0.0, 9.999988, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: Some(Vec4(0.0, 0.0, -1.0, 3.9133058)), far: Some(Vec4(0.0, 0.0, 1.0, 9995.986)), planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: None +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 640, height: 360, region: PixelRect { x0: 0, y0: 0, x1: 640, y1: 360 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 12.700017, aperture: [25.4, 25.4], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 5.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/cornellbox.usda"], invisible_overrides: Some(0) } +layer: $DIR/cornellbox.usda +warning: Warning { code: AssetUnsupportedByHost, kind: Skipped, count: 1, prims: [], message: "No asset loader: environment map $DIR/sky_gradient.exr ignored — the dome falls back to its uniform colour. Use Scene::from_usd_with_assets to supply one." } +warning: Warning { code: MaterialFallbackDefault, kind: Skipped, count: 1, prims: ["/scene/Looks/initialShadingGroup"], message: "Material /scene/Looks/initialShadingGroup has no surface shader — using default grey OpenPBR" } +lights: 1 +light 0: dome name Some("/scene/Sky") lpe None pmf 1.0 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 5 geometries, PrimitiveBreakdown { triangles: 822, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 2 } top level, PrimitiveBreakdown { triangles: 1582, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 2 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 4.0 motion [] pieces all=10:88b22fc3345d5b05 camera=10:88b22fc3345d5b05 shadow=10:88b22fc3345d5b05 indirect=10:88b22fc3345d5b05 +geom 1: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.2 motion [] pieces all=760:c2b60a75c52c78b9 camera=760:c2b60a75c52c78b9 shadow=760:c2b60a75c52c78b9 indirect=760:c2b60a75c52c78b9 +geom 2: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=12:94a297badef437e1 camera=12:94a297badef437e1 shadow=12:94a297badef437e1 indirect=12:94a297badef437e1 +geom 3: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.25 motion [] pieces all=800:4a8c9f44d777e131 camera=800:4a8c9f44d777e131 shadow=800:4a8c9f44d777e131 indirect=800:4a8c9f44d777e131 +geom 4: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.3585339 motion [] pieces all=760:2344ecf63e12c441 camera=760:2344ecf63e12c441 shadow=760:2344ecf63e12c441 indirect=760:2344ecf63e12c441 +provenance material /scene/Looks/initialShadingGroup: MaterialOrigin { slots: [0, 1, 2, 3, 4], displaced: false } +provenance light /scene/Sky: LightOrigin { index: 0, geoms: 0..0 } +provenance geometry 0..1: /scene/pCube1 +provenance geometry 1..2: /scene/pSphere1 +provenance geometry 2..3: /scene/pCube2 +provenance geometry 3..4: /scene/pTorus1 +provenance geometry 4..5: /scene/pSphere2 +provenance mesh: MeshOrigin { geom_id: 0, slot: 0, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 1, slot: 1, baked: false, moving: false } +provenance mesh: MeshOrigin { geom_id: 2, slot: 2, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 3, slot: 3, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 4, slot: 1, baked: false, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 12343188411137242430, n_points: 8, n_indices: 20, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 1: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 17119738035130870988, n_points: 382, n_indices: 1560, n_uvs: None, smooth: false, material: 0 }), placements: 2, shared: false, displaced: false } +provenance mesh slot 2: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 1739488954094729910, n_points: 8, n_indices: 24, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 3: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 6096447469814747168, n_points: 400, n_indices: 1600, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/scene/camera1"), cameras: ["/scene/camera1"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/scene/camera1"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/cornellbox_usda-f91ae1b4cc3a5130-3.image b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-f91ae1b4cc3a5130-3.image new file mode 100644 index 000000000..ba4884437 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-f91ae1b4cc3a5130-3.image @@ -0,0 +1 @@ +640x360 16spp clamp-off 52a1a46f3a46d230 diff --git a/crates/crust-core/tests/data/import_baselines/cornellbox_usda-f91ae1b4cc3a5130-4.digest b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-f91ae1b4cc3a5130-4.digest new file mode 100644 index 000000000..0e859a952 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-f91ae1b4cc3a5130-4.digest @@ -0,0 +1,40 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/scene/camera1") +camera: Camera { origin: Vec3A(0.0074343784, 1.9913422, 4.0133057), lower_left_corner: Vec3A(-8.881443, -3.0086517, -0.98669434), horizontal: Vec3A(17.777756, 0.0, 0.0), vertical: Vec3A(0.0, 9.999988, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: Some(Vec4(0.0, 0.0, -1.0, 3.9133058)), far: Some(Vec4(0.0, 0.0, 1.0, 9995.986)), planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: None +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 640, height: 360, region: PixelRect { x0: 0, y0: 0, x1: 640, y1: 360 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 12.700017, aperture: [25.4, 25.4], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 5.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/cornellbox.usda"], invisible_overrides: Some(0) } +layer: $DIR/cornellbox.usda +warning: Warning { code: AssetUnsupportedByHost, kind: Skipped, count: 1, prims: [], message: "No asset loader: environment map $DIR/sky_gradient.exr ignored — the dome falls back to its uniform colour. Use Scene::from_usd_with_assets to supply one." } +warning: Warning { code: MaterialFallbackDefault, kind: Skipped, count: 1, prims: ["/scene/Looks/initialShadingGroup"], message: "Material /scene/Looks/initialShadingGroup has no surface shader — using default grey OpenPBR" } +lights: 1 +light 0: dome name Some("/scene/Sky") lpe None pmf 1.0 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 5 geometries, PrimitiveBreakdown { triangles: 822, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 2 } top level, PrimitiveBreakdown { triangles: 1582, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 2 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 4.0 motion [] pieces all=10:88b22fc3345d5b05 camera=10:88b22fc3345d5b05 shadow=10:88b22fc3345d5b05 indirect=10:88b22fc3345d5b05 +geom 1: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.2 motion [] pieces all=760:c2b60a75c52c78b9 camera=760:c2b60a75c52c78b9 shadow=760:c2b60a75c52c78b9 indirect=760:c2b60a75c52c78b9 +geom 2: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=12:94a297badef437e1 camera=12:94a297badef437e1 shadow=12:94a297badef437e1 indirect=12:94a297badef437e1 +geom 3: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.25 motion [] pieces all=800:4a8c9f44d777e131 camera=800:4a8c9f44d777e131 shadow=800:4a8c9f44d777e131 indirect=800:4a8c9f44d777e131 +geom 4: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.3585339 motion [] pieces all=760:2344ecf63e12c441 camera=760:2344ecf63e12c441 shadow=760:2344ecf63e12c441 indirect=760:2344ecf63e12c441 +provenance material /scene/Looks/initialShadingGroup: MaterialOrigin { slots: [0, 1, 2, 3, 4], displaced: false } +provenance light /scene/Sky: LightOrigin { index: 0, geoms: 0..0 } +provenance geometry 0..1: /scene/pCube1 +provenance geometry 1..2: /scene/pSphere1 +provenance geometry 2..3: /scene/pCube2 +provenance geometry 3..4: /scene/pTorus1 +provenance geometry 4..5: /scene/pSphere2 +provenance mesh: MeshOrigin { geom_id: 0, slot: 0, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 1, slot: 1, baked: false, moving: false } +provenance mesh: MeshOrigin { geom_id: 2, slot: 2, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 3, slot: 3, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 4, slot: 1, baked: false, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 12343188411137242430, n_points: 8, n_indices: 20, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 1: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 17119738035130870988, n_points: 382, n_indices: 1560, n_uvs: None, smooth: false, material: 0 }), placements: 2, shared: false, displaced: false } +provenance mesh slot 2: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 1739488954094729910, n_points: 8, n_indices: 24, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 3: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 6096447469814747168, n_points: 400, n_indices: 1600, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/scene/camera1"), cameras: ["/scene/camera1"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/scene/camera1"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/cornellbox_usda-f91ae1b4cc3a5130-4.image b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-f91ae1b4cc3a5130-4.image new file mode 100644 index 000000000..ba4884437 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-f91ae1b4cc3a5130-4.image @@ -0,0 +1 @@ +640x360 16spp clamp-off 52a1a46f3a46d230 diff --git a/crates/crust-core/tests/data/import_baselines/cornellbox_usda-fc498f82a9cb979f-1.digest b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-fc498f82a9cb979f-1.digest new file mode 100644 index 000000000..0e859a952 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-fc498f82a9cb979f-1.digest @@ -0,0 +1,40 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/scene/camera1") +camera: Camera { origin: Vec3A(0.0074343784, 1.9913422, 4.0133057), lower_left_corner: Vec3A(-8.881443, -3.0086517, -0.98669434), horizontal: Vec3A(17.777756, 0.0, 0.0), vertical: Vec3A(0.0, 9.999988, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: Some(Vec4(0.0, 0.0, -1.0, 3.9133058)), far: Some(Vec4(0.0, 0.0, 1.0, 9995.986)), planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: None +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 640, height: 360, region: PixelRect { x0: 0, y0: 0, x1: 640, y1: 360 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 12.700017, aperture: [25.4, 25.4], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 5.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/cornellbox.usda"], invisible_overrides: Some(0) } +layer: $DIR/cornellbox.usda +warning: Warning { code: AssetUnsupportedByHost, kind: Skipped, count: 1, prims: [], message: "No asset loader: environment map $DIR/sky_gradient.exr ignored — the dome falls back to its uniform colour. Use Scene::from_usd_with_assets to supply one." } +warning: Warning { code: MaterialFallbackDefault, kind: Skipped, count: 1, prims: ["/scene/Looks/initialShadingGroup"], message: "Material /scene/Looks/initialShadingGroup has no surface shader — using default grey OpenPBR" } +lights: 1 +light 0: dome name Some("/scene/Sky") lpe None pmf 1.0 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 5 geometries, PrimitiveBreakdown { triangles: 822, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 2 } top level, PrimitiveBreakdown { triangles: 1582, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 2 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 4.0 motion [] pieces all=10:88b22fc3345d5b05 camera=10:88b22fc3345d5b05 shadow=10:88b22fc3345d5b05 indirect=10:88b22fc3345d5b05 +geom 1: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.2 motion [] pieces all=760:c2b60a75c52c78b9 camera=760:c2b60a75c52c78b9 shadow=760:c2b60a75c52c78b9 indirect=760:c2b60a75c52c78b9 +geom 2: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=12:94a297badef437e1 camera=12:94a297badef437e1 shadow=12:94a297badef437e1 indirect=12:94a297badef437e1 +geom 3: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.25 motion [] pieces all=800:4a8c9f44d777e131 camera=800:4a8c9f44d777e131 shadow=800:4a8c9f44d777e131 indirect=800:4a8c9f44d777e131 +geom 4: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.3585339 motion [] pieces all=760:2344ecf63e12c441 camera=760:2344ecf63e12c441 shadow=760:2344ecf63e12c441 indirect=760:2344ecf63e12c441 +provenance material /scene/Looks/initialShadingGroup: MaterialOrigin { slots: [0, 1, 2, 3, 4], displaced: false } +provenance light /scene/Sky: LightOrigin { index: 0, geoms: 0..0 } +provenance geometry 0..1: /scene/pCube1 +provenance geometry 1..2: /scene/pSphere1 +provenance geometry 2..3: /scene/pCube2 +provenance geometry 3..4: /scene/pTorus1 +provenance geometry 4..5: /scene/pSphere2 +provenance mesh: MeshOrigin { geom_id: 0, slot: 0, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 1, slot: 1, baked: false, moving: false } +provenance mesh: MeshOrigin { geom_id: 2, slot: 2, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 3, slot: 3, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 4, slot: 1, baked: false, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 12343188411137242430, n_points: 8, n_indices: 20, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 1: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 17119738035130870988, n_points: 382, n_indices: 1560, n_uvs: None, smooth: false, material: 0 }), placements: 2, shared: false, displaced: false } +provenance mesh slot 2: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 1739488954094729910, n_points: 8, n_indices: 24, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 3: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 6096447469814747168, n_points: 400, n_indices: 1600, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/scene/camera1"), cameras: ["/scene/camera1"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/scene/camera1"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/cornellbox_usda-fc498f82a9cb979f-1.image b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-fc498f82a9cb979f-1.image new file mode 100644 index 000000000..ba4884437 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/cornellbox_usda-fc498f82a9cb979f-1.image @@ -0,0 +1 @@ +640x360 16spp clamp-off 52a1a46f3a46d230 diff --git a/crates/crust-core/tests/data/import_baselines/counters_usda-4398822590228cb6-1.digest b/crates/crust-core/tests/data/import_baselines/counters_usda-4398822590228cb6-1.digest new file mode 100644 index 000000000..57e7ef23e --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/counters_usda-4398822590228cb6-1.digest @@ -0,0 +1,17 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: None +camera: Camera { origin: Vec3A(15.0, 3.0, 3.0), lower_left_corner: Vec3A(4.8863316, -0.044797063, 4.174048), horizontal: Vec3A(1.2295314, 0.0, -6.147657), vertical: Vec3A(-0.44830504, 3.4967792, -0.08966101), u: Vec3A(0.19611613, 0.0, -0.9805807), v: Vec3A(-0.1271232, 0.991561, -0.02542464), lens_radius: 0.05, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: Some("/Render/settings") +settings: RenderSettings { samples_per_pixel: 7, max_depth: 3, width: 32, height: 16, region: PixelRect { x0: 0, y0: 0, x1: 32, y1: 16 }, min_samples_per_pixel: 2, variance_threshold: 0.1, adaptive_neighbour_tolerance: 1.0, frame: 4, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: BalanceMis, pixel_filter: Gaussian { radius: 2.5 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 4, light_samples_indirect: 2, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: None, depth_of_field: true, motion_blur: false, layer_stack: ["$DIR/counters.usda"], invisible_overrides: Some(0) } +layer: $DIR/counters.usda +warning: Warning { code: CameraMissing, kind: Skipped, count: 1, prims: [], message: "USD stage has no UsdGeomCamera — falling back to world::get_settings camera" } +lights: 0 +volumes: 0 +world: 0 geometries, PrimitiveBreakdown { triangles: 0, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 0, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: None, cameras: [], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: None, offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/counters_usda-4398822590228cb6-1.image b/crates/crust-core/tests/data/import_baselines/counters_usda-4398822590228cb6-1.image new file mode 100644 index 000000000..f0b9b5b6b --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/counters_usda-4398822590228cb6-1.image @@ -0,0 +1 @@ +32x16 16spp clamp-off 6df0de0551480325 diff --git a/crates/crust-core/tests/data/import_baselines/curves_usda-49b1041fa43b5df8-1.digest b/crates/crust-core/tests/data/import_baselines/curves_usda-49b1041fa43b5df8-1.digest new file mode 100644 index 000000000..87c0dbdd8 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/curves_usda-49b1041fa43b5df8-1.digest @@ -0,0 +1,20 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/World/cam") +camera: Camera { origin: Vec3A(0.0, 0.0, 10.0), lower_left_corner: Vec3A(-2.0955, -1.5716249, 0.0), horizontal: Vec3A(4.191, 0.0, 0.0), vertical: Vec3A(0.0, 3.1432498, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: Some("/Render/settings") +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 48, height: 36, region: PixelRect { x0: 0, y0: 0, x1: 48, y1: 36 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [AovProduct { prim_path: "/Render/p", name: "p.exr", vars: [AovVar { prim_path: "/Render/P", name: "P", channel_prefix: None, source: P, components: 3, precision: Float, accumulation: Closest, clear: 0.0, expression: None, raw: false, variance: false }, AovVar { prim_path: "/Render/Cd", name: "Cd", channel_prefix: None, source: Primvar(PrimvarSource { index: 0, components: 3, role: Color }), components: 3, precision: Float, accumulation: Closest, clear: 0.0, expression: None, raw: false, variance: false }], attributes: [] }], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 50.0, aperture: [20.955, 15.2908], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 10.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/curves.usda"], invisible_overrides: Some(0) } +layer: $DIR/curves.usda +lights: 1 +light 0: dome name Some("/World/dome") lpe None pmf 1.0 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 1 geometries, PrimitiveBreakdown { triangles: 0, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 1 } top level, PrimitiveBreakdown { triangles: 0, spheres: 0, disks: 0, cylinders: 0, curve_segments: 2, cubic_curve_spans: 0, instances: 1 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: Some((false, false, [])), primvars: None } class 65535 holdout false transparent false map None uv None shading None strands Some(0) aov None swapped false curves true scale 1.0 motion [] pieces all=2:44e8865770fd46d9 camera=2:44e8865770fd46d9 shadow=2:44e8865770fd46d9 indirect=2:44e8865770fd46d9 +provenance light /World/dome: LightOrigin { index: 0, geoms: 1..1 } +provenance geometry 0..1: /World/hair +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/World/cam"), cameras: ["/World/cam"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [("displayColor", 3)], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/World/cam"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/curves_usda-49b1041fa43b5df8-1.image b/crates/crust-core/tests/data/import_baselines/curves_usda-49b1041fa43b5df8-1.image new file mode 100644 index 000000000..e916a0cc0 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/curves_usda-49b1041fa43b5df8-1.image @@ -0,0 +1 @@ +48x36 16spp clamp-off 4221afc206dfeafa diff --git a/crates/crust-core/tests/data/import_baselines/curves_usda-68ff2953cfbdeb73-1.digest b/crates/crust-core/tests/data/import_baselines/curves_usda-68ff2953cfbdeb73-1.digest new file mode 100644 index 000000000..6bc3c9d8e --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/curves_usda-68ff2953cfbdeb73-1.digest @@ -0,0 +1,31 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/World/Cam") +camera: Camera { origin: Vec3A(0.0, 1.2, 5.0), lower_left_corner: Vec3A(-4.365625, -3.1656249, -5.0), horizontal: Vec3A(8.73125, 0.0, 0.0), vertical: Vec3A(0.0, 8.73125, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: Some("/Render/settings") +settings: RenderSettings { samples_per_pixel: 8, max_depth: 4, width: 64, height: 64, region: PixelRect { x0: 0, y0: 0, x1: 64, y1: 64 }, min_samples_per_pixel: 4, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 24.0, aperture: [20.955, 15.2908], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 10.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/curves.usda"], invisible_overrides: Some(0) } +layer: $DIR/curves.usda +warning: Warning { code: AssetUnsupportedByHost, kind: Skipped, count: 1, prims: [], message: "No asset loader: environment map $DIR/sky_gradient.exr ignored — the dome falls back to its uniform colour. Use Scene::from_usd_with_assets to supply one." } +lights: 2 +light 0: area name Some("/World/KeyLight") lpe None pmf 0.5 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 1: dome name Some("/World/Sky") lpe None pmf 0.5 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 4 geometries, PrimitiveBreakdown { triangles: 4, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 2 } top level, PrimitiveBreakdown { triangles: 4, spheres: 0, disks: 0, cylinders: 0, curve_segments: 3, cubic_curve_spans: 3, instances: 2 } unique, motion false +geom 0: material #0 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:e8a5ea9ee1d32838 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=2:e8a5ea9ee1d32838 +geom 1: material #1 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:be0b97004c4d3e85 camera=2:be0b97004c4d3e85 shadow=2:be0b97004c4d3e85 indirect=2:be0b97004c4d3e85 +geom 2: material #1 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: Some((false, false, [])), primvars: None } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves true scale 1.0 motion [] pieces all=3:5349774d74e4fa10 camera=3:5349774d74e4fa10 shadow=3:5349774d74e4fa10 indirect=3:5349774d74e4fa10 +geom 3: material #1 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: Some((false, false, [])), primvars: None } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves true scale 1.0 motion [] pieces all=3:e84a09b0d8770e4b camera=3:e84a09b0d8770e4b shadow=3:e84a09b0d8770e4b indirect=3:e84a09b0d8770e4b +provenance light /World/KeyLight: LightOrigin { index: 0, geoms: 0..1 } +provenance light /World/Sky: LightOrigin { index: 1, geoms: 4..4 } +provenance geometry 0..1: /World/KeyLight +provenance geometry 1..2: /World/Floor +provenance geometry 2..3: /World/Tripod +provenance geometry 3..4: /World/Tuft +provenance mesh: MeshOrigin { geom_id: 1, slot: 0, baked: true, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 8416296582947184296, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/World/Cam"), cameras: ["/World/Cam"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/World/Cam"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/curves_usda-68ff2953cfbdeb73-1.image b/crates/crust-core/tests/data/import_baselines/curves_usda-68ff2953cfbdeb73-1.image new file mode 100644 index 000000000..e3c34ea16 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/curves_usda-68ff2953cfbdeb73-1.image @@ -0,0 +1 @@ +64x64 16spp clamp-off a9aeeb6ec2045102 diff --git a/crates/crust-core/tests/data/import_baselines/curves_usda-68ff2953cfbdeb73-2.digest b/crates/crust-core/tests/data/import_baselines/curves_usda-68ff2953cfbdeb73-2.digest new file mode 100644 index 000000000..6bc3c9d8e --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/curves_usda-68ff2953cfbdeb73-2.digest @@ -0,0 +1,31 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/World/Cam") +camera: Camera { origin: Vec3A(0.0, 1.2, 5.0), lower_left_corner: Vec3A(-4.365625, -3.1656249, -5.0), horizontal: Vec3A(8.73125, 0.0, 0.0), vertical: Vec3A(0.0, 8.73125, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: Some("/Render/settings") +settings: RenderSettings { samples_per_pixel: 8, max_depth: 4, width: 64, height: 64, region: PixelRect { x0: 0, y0: 0, x1: 64, y1: 64 }, min_samples_per_pixel: 4, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 24.0, aperture: [20.955, 15.2908], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 10.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/curves.usda"], invisible_overrides: Some(0) } +layer: $DIR/curves.usda +warning: Warning { code: AssetUnsupportedByHost, kind: Skipped, count: 1, prims: [], message: "No asset loader: environment map $DIR/sky_gradient.exr ignored — the dome falls back to its uniform colour. Use Scene::from_usd_with_assets to supply one." } +lights: 2 +light 0: area name Some("/World/KeyLight") lpe None pmf 0.5 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 1: dome name Some("/World/Sky") lpe None pmf 0.5 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 4 geometries, PrimitiveBreakdown { triangles: 4, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 2 } top level, PrimitiveBreakdown { triangles: 4, spheres: 0, disks: 0, cylinders: 0, curve_segments: 3, cubic_curve_spans: 3, instances: 2 } unique, motion false +geom 0: material #0 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:e8a5ea9ee1d32838 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=2:e8a5ea9ee1d32838 +geom 1: material #1 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:be0b97004c4d3e85 camera=2:be0b97004c4d3e85 shadow=2:be0b97004c4d3e85 indirect=2:be0b97004c4d3e85 +geom 2: material #1 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: Some((false, false, [])), primvars: None } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves true scale 1.0 motion [] pieces all=3:5349774d74e4fa10 camera=3:5349774d74e4fa10 shadow=3:5349774d74e4fa10 indirect=3:5349774d74e4fa10 +geom 3: material #1 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: Some((false, false, [])), primvars: None } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves true scale 1.0 motion [] pieces all=3:e84a09b0d8770e4b camera=3:e84a09b0d8770e4b shadow=3:e84a09b0d8770e4b indirect=3:e84a09b0d8770e4b +provenance light /World/KeyLight: LightOrigin { index: 0, geoms: 0..1 } +provenance light /World/Sky: LightOrigin { index: 1, geoms: 4..4 } +provenance geometry 0..1: /World/KeyLight +provenance geometry 1..2: /World/Floor +provenance geometry 2..3: /World/Tripod +provenance geometry 3..4: /World/Tuft +provenance mesh: MeshOrigin { geom_id: 1, slot: 0, baked: true, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 8416296582947184296, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/World/Cam"), cameras: ["/World/Cam"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/World/Cam"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/curves_usda-68ff2953cfbdeb73-2.image b/crates/crust-core/tests/data/import_baselines/curves_usda-68ff2953cfbdeb73-2.image new file mode 100644 index 000000000..e3c34ea16 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/curves_usda-68ff2953cfbdeb73-2.image @@ -0,0 +1 @@ +64x64 16spp clamp-off a9aeeb6ec2045102 diff --git a/crates/crust-core/tests/data/import_baselines/curves_usda-6c82e9cb233e7c1e-1.digest b/crates/crust-core/tests/data/import_baselines/curves_usda-6c82e9cb233e7c1e-1.digest new file mode 100644 index 000000000..6bc3c9d8e --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/curves_usda-6c82e9cb233e7c1e-1.digest @@ -0,0 +1,31 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/World/Cam") +camera: Camera { origin: Vec3A(0.0, 1.2, 5.0), lower_left_corner: Vec3A(-4.365625, -3.1656249, -5.0), horizontal: Vec3A(8.73125, 0.0, 0.0), vertical: Vec3A(0.0, 8.73125, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: Some("/Render/settings") +settings: RenderSettings { samples_per_pixel: 8, max_depth: 4, width: 64, height: 64, region: PixelRect { x0: 0, y0: 0, x1: 64, y1: 64 }, min_samples_per_pixel: 4, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 24.0, aperture: [20.955, 15.2908], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 10.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/curves.usda"], invisible_overrides: Some(0) } +layer: $DIR/curves.usda +warning: Warning { code: AssetUnsupportedByHost, kind: Skipped, count: 1, prims: [], message: "No asset loader: environment map $DIR/sky_gradient.exr ignored — the dome falls back to its uniform colour. Use Scene::from_usd_with_assets to supply one." } +lights: 2 +light 0: area name Some("/World/KeyLight") lpe None pmf 0.5 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 1: dome name Some("/World/Sky") lpe None pmf 0.5 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 4 geometries, PrimitiveBreakdown { triangles: 4, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 2 } top level, PrimitiveBreakdown { triangles: 4, spheres: 0, disks: 0, cylinders: 0, curve_segments: 3, cubic_curve_spans: 3, instances: 2 } unique, motion false +geom 0: material #0 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:e8a5ea9ee1d32838 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=2:e8a5ea9ee1d32838 +geom 1: material #1 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:be0b97004c4d3e85 camera=2:be0b97004c4d3e85 shadow=2:be0b97004c4d3e85 indirect=2:be0b97004c4d3e85 +geom 2: material #1 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: Some((false, false, [])), primvars: None } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves true scale 1.0 motion [] pieces all=3:5349774d74e4fa10 camera=3:5349774d74e4fa10 shadow=3:5349774d74e4fa10 indirect=3:5349774d74e4fa10 +geom 3: material #1 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: Some((false, false, [])), primvars: None } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves true scale 1.0 motion [] pieces all=3:e84a09b0d8770e4b camera=3:e84a09b0d8770e4b shadow=3:e84a09b0d8770e4b indirect=3:e84a09b0d8770e4b +provenance light /World/KeyLight: LightOrigin { index: 0, geoms: 0..1 } +provenance light /World/Sky: LightOrigin { index: 1, geoms: 4..4 } +provenance geometry 0..1: /World/KeyLight +provenance geometry 1..2: /World/Floor +provenance geometry 2..3: /World/Tripod +provenance geometry 3..4: /World/Tuft +provenance mesh: MeshOrigin { geom_id: 1, slot: 0, baked: true, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 8416296582947184296, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/World/Cam"), cameras: ["/World/Cam"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/World/Cam"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/curves_usda-6c82e9cb233e7c1e-1.image b/crates/crust-core/tests/data/import_baselines/curves_usda-6c82e9cb233e7c1e-1.image new file mode 100644 index 000000000..e3c34ea16 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/curves_usda-6c82e9cb233e7c1e-1.image @@ -0,0 +1 @@ +64x64 16spp clamp-off a9aeeb6ec2045102 diff --git a/crates/crust-core/tests/data/import_baselines/curves_usda-bf538717464b4055-1.digest b/crates/crust-core/tests/data/import_baselines/curves_usda-bf538717464b4055-1.digest new file mode 100644 index 000000000..6bc3c9d8e --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/curves_usda-bf538717464b4055-1.digest @@ -0,0 +1,31 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/World/Cam") +camera: Camera { origin: Vec3A(0.0, 1.2, 5.0), lower_left_corner: Vec3A(-4.365625, -3.1656249, -5.0), horizontal: Vec3A(8.73125, 0.0, 0.0), vertical: Vec3A(0.0, 8.73125, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: Some("/Render/settings") +settings: RenderSettings { samples_per_pixel: 8, max_depth: 4, width: 64, height: 64, region: PixelRect { x0: 0, y0: 0, x1: 64, y1: 64 }, min_samples_per_pixel: 4, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 24.0, aperture: [20.955, 15.2908], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 10.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/curves.usda"], invisible_overrides: Some(0) } +layer: $DIR/curves.usda +warning: Warning { code: AssetUnsupportedByHost, kind: Skipped, count: 1, prims: [], message: "No asset loader: environment map $DIR/sky_gradient.exr ignored — the dome falls back to its uniform colour. Use Scene::from_usd_with_assets to supply one." } +lights: 2 +light 0: area name Some("/World/KeyLight") lpe None pmf 0.5 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 1: dome name Some("/World/Sky") lpe None pmf 0.5 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 4 geometries, PrimitiveBreakdown { triangles: 4, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 2 } top level, PrimitiveBreakdown { triangles: 4, spheres: 0, disks: 0, cylinders: 0, curve_segments: 3, cubic_curve_spans: 3, instances: 2 } unique, motion false +geom 0: material #0 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:e8a5ea9ee1d32838 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=2:e8a5ea9ee1d32838 +geom 1: material #1 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:be0b97004c4d3e85 camera=2:be0b97004c4d3e85 shadow=2:be0b97004c4d3e85 indirect=2:be0b97004c4d3e85 +geom 2: material #1 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: Some((false, false, [])), primvars: None } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves true scale 1.0 motion [] pieces all=3:5349774d74e4fa10 camera=3:5349774d74e4fa10 shadow=3:5349774d74e4fa10 indirect=3:5349774d74e4fa10 +geom 3: material #1 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: Some((false, false, [])), primvars: None } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves true scale 1.0 motion [] pieces all=3:e84a09b0d8770e4b camera=3:e84a09b0d8770e4b shadow=3:e84a09b0d8770e4b indirect=3:e84a09b0d8770e4b +provenance light /World/KeyLight: LightOrigin { index: 0, geoms: 0..1 } +provenance light /World/Sky: LightOrigin { index: 1, geoms: 4..4 } +provenance geometry 0..1: /World/KeyLight +provenance geometry 1..2: /World/Floor +provenance geometry 2..3: /World/Tripod +provenance geometry 3..4: /World/Tuft +provenance mesh: MeshOrigin { geom_id: 1, slot: 0, baked: true, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 8416296582947184296, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/World/Cam"), cameras: ["/World/Cam"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/World/Cam"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/curves_usda-bf538717464b4055-1.image b/crates/crust-core/tests/data/import_baselines/curves_usda-bf538717464b4055-1.image new file mode 100644 index 000000000..e3c34ea16 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/curves_usda-bf538717464b4055-1.image @@ -0,0 +1 @@ +64x64 16spp clamp-off a9aeeb6ec2045102 diff --git a/crates/crust-core/tests/data/import_baselines/curves_usda-e59f2a157a03b823-1.digest b/crates/crust-core/tests/data/import_baselines/curves_usda-e59f2a157a03b823-1.digest new file mode 100644 index 000000000..3532a6e9a --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/curves_usda-e59f2a157a03b823-1.digest @@ -0,0 +1,30 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/World/Cam") +camera: Camera { origin: Vec3A(0.0, 1.2, 5.0), lower_left_corner: Vec3A(-4.365625, -3.1656249, -5.0), horizontal: Vec3A(8.73125, 0.0, 0.0), vertical: Vec3A(0.0, 8.73125, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: Some("/Render/settings") +settings: RenderSettings { samples_per_pixel: 8, max_depth: 4, width: 64, height: 64, region: PixelRect { x0: 0, y0: 0, x1: 64, y1: 64 }, min_samples_per_pixel: 4, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 24.0, aperture: [20.955, 15.2908], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 10.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/curves.usda"], invisible_overrides: Some(0) } +layer: $DIR/curves.usda +lights: 2 +light 0: area name Some("/World/KeyLight") lpe None pmf 0.5 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 1: dome name Some("/World/Sky") lpe None pmf 0.5 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 4 geometries, PrimitiveBreakdown { triangles: 4, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 2 } top level, PrimitiveBreakdown { triangles: 4, spheres: 0, disks: 0, cylinders: 0, curve_segments: 3, cubic_curve_spans: 3, instances: 2 } unique, motion false +geom 0: material #0 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:e8a5ea9ee1d32838 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=2:e8a5ea9ee1d32838 +geom 1: material #1 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:be0b97004c4d3e85 camera=2:be0b97004c4d3e85 shadow=2:be0b97004c4d3e85 indirect=2:be0b97004c4d3e85 +geom 2: material #1 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: Some((false, false, [])), primvars: None } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves true scale 1.0 motion [] pieces all=3:5349774d74e4fa10 camera=3:5349774d74e4fa10 shadow=3:5349774d74e4fa10 indirect=3:5349774d74e4fa10 +geom 3: material #1 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: Some((false, false, [])), primvars: None } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves true scale 1.0 motion [] pieces all=3:e84a09b0d8770e4b camera=3:e84a09b0d8770e4b shadow=3:e84a09b0d8770e4b indirect=3:e84a09b0d8770e4b +provenance light /World/KeyLight: LightOrigin { index: 0, geoms: 0..1 } +provenance light /World/Sky: LightOrigin { index: 1, geoms: 4..4 } +provenance geometry 0..1: /World/KeyLight +provenance geometry 1..2: /World/Floor +provenance geometry 2..3: /World/Tripod +provenance geometry 3..4: /World/Tuft +provenance mesh: MeshOrigin { geom_id: 1, slot: 0, baked: true, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 8416296582947184296, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: true, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/World/Cam"), cameras: ["/World/Cam"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/World/Cam"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/curves_usda-e59f2a157a03b823-1.image b/crates/crust-core/tests/data/import_baselines/curves_usda-e59f2a157a03b823-1.image new file mode 100644 index 000000000..1cb54f20e --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/curves_usda-e59f2a157a03b823-1.image @@ -0,0 +1 @@ +64x64 16spp clamp-off 2f1ab4ebb46ccf71 diff --git a/crates/crust-core/tests/data/import_baselines/cycle_usda-6c5127dceb205457-1.digest b/crates/crust-core/tests/data/import_baselines/cycle_usda-6c5127dceb205457-1.digest new file mode 100644 index 000000000..02b4f6b47 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/cycle_usda-6c5127dceb205457-1.digest @@ -0,0 +1,27 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/World/cam") +camera: Camera { origin: Vec3A(0.0, 0.0, 0.0), lower_left_corner: Vec3A(-5.0, -3.75, -10.0), horizontal: Vec3A(10.0, 0.0, 0.0), vertical: Vec3A(0.0, 7.5, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: Some("/Render/settings") +settings: RenderSettings { samples_per_pixel: 16, max_depth: 2, width: 32, height: 24, region: PixelRect { x0: 0, y0: 0, x1: 32, y1: 24 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [AovProduct { prim_path: "/Render/p", name: "p.exr", vars: [AovVar { prim_path: "/Render/C", name: "C", channel_prefix: None, source: Color, components: 3, precision: Float, accumulation: Filtered, clear: 0.0, expression: None, raw: false, variance: false }, AovVar { prim_path: "/Render/matte", name: "matte", channel_prefix: None, source: Primvar(PrimvarSource { index: 0, components: 1, role: Float }), components: 1, precision: Float, accumulation: Filtered, clear: 0.0, expression: None, raw: false, variance: false }, AovVar { prim_path: "/Render/depth", name: "depth", channel_prefix: None, source: Depth, components: 1, precision: Float, accumulation: Closest, clear: inf, expression: None, raw: false, variance: false }, AovVar { prim_path: "/Render/depth_filtered", name: "depth_filtered", channel_prefix: None, source: Depth, components: 1, precision: Float, accumulation: Filtered, clear: inf, expression: None, raw: false, variance: false }, AovVar { prim_path: "/Render/variance", name: "variance", channel_prefix: None, source: Variance, components: 1, precision: Float, accumulation: Filtered, clear: 0.0, expression: None, raw: false, variance: false }], attributes: [] }], precomp: Some(Precomp { sample_filters: [], display_filters: ["/Render/first", "/Render/second"], display: "beauty" }) } +pass: None +source: Source { lens: Some(Lens { focal_length: 24.0, aperture: [24.0, 18.0], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 10.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/cycle.usda"], invisible_overrides: Some(0) } +layer: $DIR/cycle.usda +warning: Warning { code: PrecompCycle, kind: Refused, count: 1, prims: ["/Render/first"], message: "/Render/first: input \"in\" = \"second\" reads a display filter that runs at or after this one; it reads its clear value" } +lights: 1 +light 0: dome name Some("/World/sky") lpe None pmf 1.0 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 2 geometries, PrimitiveBreakdown { triangles: 4, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 4, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov Some((Some(0), false)) swapped false curves false scale 1.0 motion [] pieces all=2:2a13523c8e09c13d camera=2:2a13523c8e09c13d shadow=2:2a13523c8e09c13d indirect=2:2a13523c8e09c13d +geom 1: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:31db52e4afd4a225 camera=2:31db52e4afd4a225 shadow=2:31db52e4afd4a225 indirect=2:31db52e4afd4a225 +provenance light /World/sky: LightOrigin { index: 0, geoms: 0..0 } +provenance geometry 0..1: /World/Card +provenance geometry 1..2: /World/Wall +provenance mesh: MeshOrigin { geom_id: 0, slot: 0, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 1, slot: 1, baked: true, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 3430351340666728903, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 1: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 13118596165941616386, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: true, working: None, camera: Some("/World/cam"), cameras: ["/World/cam"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [("matte", 1)], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/World/cam"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/cycle_usda-6c5127dceb205457-1.image b/crates/crust-core/tests/data/import_baselines/cycle_usda-6c5127dceb205457-1.image new file mode 100644 index 000000000..f08c49d36 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/cycle_usda-6c5127dceb205457-1.image @@ -0,0 +1 @@ +32x24 16spp clamp-off e72b7b7cff87e77d diff --git a/crates/crust-core/tests/data/import_baselines/cyl_far_usda-14bf93b40e3110ed-1.digest b/crates/crust-core/tests/data/import_baselines/cyl_far_usda-14bf93b40e3110ed-1.digest new file mode 100644 index 000000000..808770534 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/cyl_far_usda-14bf93b40e3110ed-1.digest @@ -0,0 +1,20 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/W/Cam") +camera: Camera { origin: Vec3A(0.0, 0.0, 0.0), lower_left_corner: Vec3A(-2.0955, -1.1787187, -10.0), horizontal: Vec3A(4.191, 0.0, 0.0), vertical: Vec3A(0.0, 2.3574374, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: Some("/Render/settings") +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 640, height: 360, region: PixelRect { x0: 0, y0: 0, x1: 640, y1: 360 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 50.0, aperture: [20.955, 11.787188], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 10.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/cyl_far.usda"], invisible_overrides: Some(0) } +layer: $DIR/cyl_far.usda +lights: 0 +volumes: 0 +world: 1 geometries, PrimitiveBreakdown { triangles: 64, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 64, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=64:10101a617316464d camera=64:10101a617316464d shadow=64:10101a617316464d indirect=64:10101a617316464d +provenance geometry 0..1: /W/C +provenance mesh: MeshOrigin { geom_id: 0, slot: 0, baked: true, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 13212365895451826409, n_points: 66, n_indices: 160, n_uvs: None, smooth: true, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/W/Cam"), cameras: ["/W/Cam"], dicing: None, on_screen_shapes: Some(ScreenKey([0, 0, 0, 1153360542, 0, 0, 0, 3212836864, 0, 3193345094, 1065353216, 0, 3193345094, 0, 3212836864, 3186714319, 0, 1065353216, 3186714319, 0, 0, 3212836864])), unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/W/Cam"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/cyl_far_usda-14bf93b40e3110ed-1.image b/crates/crust-core/tests/data/import_baselines/cyl_far_usda-14bf93b40e3110ed-1.image new file mode 100644 index 000000000..c734c5b1d --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/cyl_far_usda-14bf93b40e3110ed-1.image @@ -0,0 +1 @@ +640x360 16spp clamp-off a04a09c0d4b5e325 diff --git a/crates/crust-core/tests/data/import_baselines/cyl_near_usda-8880b5f4401667ce-1.digest b/crates/crust-core/tests/data/import_baselines/cyl_near_usda-8880b5f4401667ce-1.digest new file mode 100644 index 000000000..6c56f4986 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/cyl_near_usda-8880b5f4401667ce-1.digest @@ -0,0 +1,20 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/W/Cam") +camera: Camera { origin: Vec3A(0.0, 0.0, 0.0), lower_left_corner: Vec3A(-2.0955, -1.1787187, -10.0), horizontal: Vec3A(4.191, 0.0, 0.0), vertical: Vec3A(0.0, 2.3574374, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: Some("/Render/settings") +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 640, height: 360, region: PixelRect { x0: 0, y0: 0, x1: 640, y1: 360 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 50.0, aperture: [20.955, 11.787188], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 10.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/cyl_near.usda"], invisible_overrides: Some(0) } +layer: $DIR/cyl_near.usda +lights: 0 +volumes: 0 +world: 1 geometries, PrimitiveBreakdown { triangles: 164, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 164, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=164:ab38c1554f88762d camera=164:ab38c1554f88762d shadow=164:ab38c1554f88762d indirect=164:ab38c1554f88762d +provenance geometry 0..1: /W/C +provenance mesh: MeshOrigin { geom_id: 0, slot: 0, baked: true, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 14166617919414075720, n_points: 166, n_indices: 410, n_uvs: None, smooth: true, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/W/Cam"), cameras: ["/W/Cam"], dicing: None, on_screen_shapes: Some(ScreenKey([0, 0, 0, 1153360542, 0, 0, 0, 3212836864, 0, 3193345094, 1065353216, 0, 3193345094, 0, 3212836864, 3186714319, 0, 1065353216, 3186714319, 0, 0, 3212836864])), unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/W/Cam"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/cyl_near_usda-8880b5f4401667ce-1.image b/crates/crust-core/tests/data/import_baselines/cyl_near_usda-8880b5f4401667ce-1.image new file mode 100644 index 000000000..c734c5b1d --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/cyl_near_usda-8880b5f4401667ce-1.image @@ -0,0 +1 @@ +640x360 16spp clamp-off a04a09c0d4b5e325 diff --git a/crates/crust-core/tests/data/import_baselines/cyl_proto_nested_usda-337785a80bd25b4b-1.digest b/crates/crust-core/tests/data/import_baselines/cyl_proto_nested_usda-337785a80bd25b4b-1.digest new file mode 100644 index 000000000..172221ebf --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/cyl_proto_nested_usda-337785a80bd25b4b-1.digest @@ -0,0 +1,21 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/W/Cam") +camera: Camera { origin: Vec3A(0.0, 0.0, 0.0), lower_left_corner: Vec3A(-2.0955, -1.1787187, -10.0), horizontal: Vec3A(4.191, 0.0, 0.0), vertical: Vec3A(0.0, 2.3574374, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: Some("/Render/settings") +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 640, height: 360, region: PixelRect { x0: 0, y0: 0, x1: 640, y1: 360 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 50.0, aperture: [20.955, 11.787188], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 10.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/cyl_proto_nested.usda"], invisible_overrides: Some(0) } +layer: $DIR/cyl_proto_nested.usda +lights: 0 +volumes: 0 +world: 2 geometries, PrimitiveBreakdown { triangles: 0, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 2 } top level, PrimitiveBreakdown { triangles: 356, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 2 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=192:8f6c0c7270fd3449 camera=192:8f6c0c7270fd3449 shadow=192:8f6c0c7270fd3449 indirect=192:8f6c0c7270fd3449 +geom 1: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=164:ab38c1554f88762d camera=164:ab38c1554f88762d shadow=164:ab38c1554f88762d indirect=164:ab38c1554f88762d +provenance geometry 0..2: /W/A +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 6877125351767401758, n_points: 194, n_indices: 480, n_uvs: None, smooth: true, material: 0 }), placements: 0, shared: true, displaced: false } +provenance mesh slot 1: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 14166617919414075720, n_points: 166, n_indices: 410, n_uvs: None, smooth: true, material: 0 }), placements: 0, shared: true, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: Some(ScreenKey([0, 0, 0, 1153360542, 0, 0, 0, 3212836864, 0, 3193345094, 1065353216, 0, 3193345094, 0, 3212836864, 3186714319, 0, 1065353216, 3186714319, 0, 0, 3212836864, 1073741824, 3])), domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/W/Cam"), cameras: ["/W/Cam"], dicing: None, on_screen_shapes: Some(ScreenKey([0, 0, 0, 1153360542, 0, 0, 0, 3212836864, 0, 3193345094, 1065353216, 0, 3193345094, 0, 3212836864, 3186714319, 0, 1065353216, 3186714319, 0, 0, 3212836864])), unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/W/Cam"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/cyl_proto_nested_usda-337785a80bd25b4b-1.image b/crates/crust-core/tests/data/import_baselines/cyl_proto_nested_usda-337785a80bd25b4b-1.image new file mode 100644 index 000000000..c734c5b1d --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/cyl_proto_nested_usda-337785a80bd25b4b-1.image @@ -0,0 +1 @@ +640x360 16spp clamp-off a04a09c0d4b5e325 diff --git a/crates/crust-core/tests/data/import_baselines/cyl_proto_once_usda-5861fac834a9592e-1.digest b/crates/crust-core/tests/data/import_baselines/cyl_proto_once_usda-5861fac834a9592e-1.digest new file mode 100644 index 000000000..9888192cd --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/cyl_proto_once_usda-5861fac834a9592e-1.digest @@ -0,0 +1,19 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/W/Cam") +camera: Camera { origin: Vec3A(0.0, 0.0, 0.0), lower_left_corner: Vec3A(-2.0955, -1.1787187, -10.0), horizontal: Vec3A(4.191, 0.0, 0.0), vertical: Vec3A(0.0, 2.3574374, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: Some("/Render/settings") +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 640, height: 360, region: PixelRect { x0: 0, y0: 0, x1: 640, y1: 360 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 50.0, aperture: [20.955, 11.787188], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 10.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/cyl_proto_once.usda"], invisible_overrides: Some(0) } +layer: $DIR/cyl_proto_once.usda +lights: 0 +volumes: 0 +world: 1 geometries, PrimitiveBreakdown { triangles: 0, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 1 } top level, PrimitiveBreakdown { triangles: 164, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 1 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=164:ab38c1554f88762d camera=164:ab38c1554f88762d shadow=164:ab38c1554f88762d indirect=164:ab38c1554f88762d +provenance geometry 0..1: /W/A +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 14166617919414075720, n_points: 166, n_indices: 410, n_uvs: None, smooth: true, material: 0 }), placements: 0, shared: true, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: Some(ScreenKey([0, 0, 0, 1153360542, 0, 0, 0, 3212836864, 0, 3193345094, 1065353216, 0, 3193345094, 0, 3212836864, 3186714319, 0, 1065353216, 3186714319, 0, 0, 3212836864, 1073741824, 3])), domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/W/Cam"), cameras: ["/W/Cam"], dicing: None, on_screen_shapes: Some(ScreenKey([0, 0, 0, 1153360542, 0, 0, 0, 3212836864, 0, 3193345094, 1065353216, 0, 3193345094, 0, 3212836864, 3186714319, 0, 1065353216, 3186714319, 0, 0, 3212836864])), unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/W/Cam"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/cyl_proto_once_usda-5861fac834a9592e-1.image b/crates/crust-core/tests/data/import_baselines/cyl_proto_once_usda-5861fac834a9592e-1.image new file mode 100644 index 000000000..c734c5b1d --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/cyl_proto_once_usda-5861fac834a9592e-1.image @@ -0,0 +1 @@ +640x360 16spp clamp-off a04a09c0d4b5e325 diff --git a/crates/crust-core/tests/data/import_baselines/cyl_proto_twice_usda-9d0b4387b8ae21e9-1.digest b/crates/crust-core/tests/data/import_baselines/cyl_proto_twice_usda-9d0b4387b8ae21e9-1.digest new file mode 100644 index 000000000..b22eab114 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/cyl_proto_twice_usda-9d0b4387b8ae21e9-1.digest @@ -0,0 +1,21 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/W/Cam") +camera: Camera { origin: Vec3A(0.0, 0.0, 0.0), lower_left_corner: Vec3A(-2.0955, -1.1787187, -10.0), horizontal: Vec3A(4.191, 0.0, 0.0), vertical: Vec3A(0.0, 2.3574374, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: Some("/Render/settings") +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 640, height: 360, region: PixelRect { x0: 0, y0: 0, x1: 640, y1: 360 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 50.0, aperture: [20.955, 11.787188], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 10.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/cyl_proto_twice.usda"], invisible_overrides: Some(0) } +layer: $DIR/cyl_proto_twice.usda +lights: 0 +volumes: 0 +world: 2 geometries, PrimitiveBreakdown { triangles: 0, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 2 } top level, PrimitiveBreakdown { triangles: 192, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 2 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=192:ecff048c981791c9 camera=192:ecff048c981791c9 shadow=192:ecff048c981791c9 indirect=192:ecff048c981791c9 +geom 1: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=192:8f6c0c7270fd3449 camera=192:8f6c0c7270fd3449 shadow=192:8f6c0c7270fd3449 indirect=192:8f6c0c7270fd3449 +provenance geometry 0..1: /W/B +provenance geometry 1..2: /W/A +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 6877125351767401758, n_points: 194, n_indices: 480, n_uvs: None, smooth: true, material: 0 }), placements: 0, shared: true, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: Some(ScreenKey([0, 0, 0, 1153360542, 0, 0, 0, 3212836864, 0, 3193345094, 1065353216, 0, 3193345094, 0, 3212836864, 3186714319, 0, 1065353216, 3186714319, 0, 0, 3212836864, 1073741824, 3])), domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/W/Cam"), cameras: ["/W/Cam"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/W/Cam"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/cyl_proto_twice_usda-9d0b4387b8ae21e9-1.image b/crates/crust-core/tests/data/import_baselines/cyl_proto_twice_usda-9d0b4387b8ae21e9-1.image new file mode 100644 index 000000000..c734c5b1d --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/cyl_proto_twice_usda-9d0b4387b8ae21e9-1.image @@ -0,0 +1 @@ +640x360 16spp clamp-off a04a09c0d4b5e325 diff --git a/crates/crust-core/tests/data/import_baselines/cyl_unnamed_usda-6b8943ce79ec798b-1.digest b/crates/crust-core/tests/data/import_baselines/cyl_unnamed_usda-6b8943ce79ec798b-1.digest new file mode 100644 index 000000000..29d7230d1 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/cyl_unnamed_usda-6b8943ce79ec798b-1.digest @@ -0,0 +1,20 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/W/Cam") +camera: Camera { origin: Vec3A(0.0, 0.0, 0.0), lower_left_corner: Vec3A(-2.0955, -1.1787187, -10.0), horizontal: Vec3A(4.191, 0.0, 0.0), vertical: Vec3A(0.0, 2.3574374, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: None +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 640, height: 360, region: PixelRect { x0: 0, y0: 0, x1: 640, y1: 360 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 50.0, aperture: [20.955, 11.787188], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 10.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/cyl_unnamed.usda"], invisible_overrides: Some(0) } +layer: $DIR/cyl_unnamed.usda +lights: 0 +volumes: 0 +world: 1 geometries, PrimitiveBreakdown { triangles: 192, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 192, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=192:8f6c0c7270fd3449 camera=192:8f6c0c7270fd3449 shadow=192:8f6c0c7270fd3449 indirect=192:8f6c0c7270fd3449 +provenance geometry 0..1: /W/C +provenance mesh: MeshOrigin { geom_id: 0, slot: 0, baked: true, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 6877125351767401758, n_points: 194, n_indices: 480, n_uvs: None, smooth: true, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/W/Cam"), cameras: ["/W/Cam"], dicing: None, on_screen_shapes: None, unsized_shapes: true, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/W/Cam"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/cyl_unnamed_usda-6b8943ce79ec798b-1.image b/crates/crust-core/tests/data/import_baselines/cyl_unnamed_usda-6b8943ce79ec798b-1.image new file mode 100644 index 000000000..c734c5b1d --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/cyl_unnamed_usda-6b8943ce79ec798b-1.image @@ -0,0 +1 @@ +640x360 16spp clamp-off a04a09c0d4b5e325 diff --git a/crates/crust-core/tests/data/import_baselines/cylinder_light_usda-a8869b560165f646-1.digest b/crates/crust-core/tests/data/import_baselines/cylinder_light_usda-a8869b560165f646-1.digest new file mode 100644 index 000000000..2962d84b5 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/cylinder_light_usda-a8869b560165f646-1.digest @@ -0,0 +1,21 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: None +camera: Camera { origin: Vec3A(15.0, 3.0, 3.0), lower_left_corner: Vec3A(4.8863316, -0.044797063, 4.174048), horizontal: Vec3A(1.2295314, 0.0, -6.147657), vertical: Vec3A(-0.44830504, 3.4967792, -0.08966101), u: Vec3A(0.19611613, 0.0, -0.9805807), v: Vec3A(-0.1271232, 0.991561, -0.02542464), lens_radius: 0.05, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: None +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 640, height: 360, region: PixelRect { x0: 0, y0: 0, x1: 640, y1: 360 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: None, depth_of_field: true, motion_blur: false, layer_stack: ["$DIR/cylinder_light.usda"], invisible_overrides: Some(0) } +layer: $DIR/cylinder_light.usda +warning: Warning { code: CameraMissing, kind: Skipped, count: 1, prims: [], message: "USD stage has no UsdGeomCamera — falling back to world::get_settings camera" } +lights: 1 +light 0: area name Some("/World/C") lpe None pmf 1.0 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 1 geometries, PrimitiveBreakdown { triangles: 0, spheres: 0, disks: 0, cylinders: 1, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 0, spheres: 0, disks: 0, cylinders: 1, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +geom 0: material #0 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:9912a39cdf05f485 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=1:9912a39cdf05f485 +provenance light /World/C: LightOrigin { index: 0, geoms: 0..1 } +provenance geometry 0..1: /World/C +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: None, cameras: [], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: None, offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/cylinder_light_usda-a8869b560165f646-1.image b/crates/crust-core/tests/data/import_baselines/cylinder_light_usda-a8869b560165f646-1.image new file mode 100644 index 000000000..c734c5b1d --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/cylinder_light_usda-a8869b560165f646-1.image @@ -0,0 +1 @@ +640x360 16spp clamp-off a04a09c0d4b5e325 diff --git a/crates/crust-core/tests/data/import_baselines/dangling_usda-33cdcee1c03a3f62-1.digest b/crates/crust-core/tests/data/import_baselines/dangling_usda-33cdcee1c03a3f62-1.digest new file mode 100644 index 000000000..e761806d5 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/dangling_usda-33cdcee1c03a3f62-1.digest @@ -0,0 +1,21 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: None +camera: Camera { origin: Vec3A(15.0, 3.0, 3.0), lower_left_corner: Vec3A(4.8863316, -0.044797063, 4.174048), horizontal: Vec3A(1.2295314, 0.0, -6.147657), vertical: Vec3A(-0.44830504, 3.4967792, -0.08966101), u: Vec3A(0.19611613, 0.0, -0.9805807), v: Vec3A(-0.1271232, 0.991561, -0.02542464), lens_radius: 0.05, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: None +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 640, height: 360, region: PixelRect { x0: 0, y0: 0, x1: 640, y1: 360 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: None, depth_of_field: true, motion_blur: false, layer_stack: ["$DIR/dangling.usda"], invisible_overrides: Some(0) } +layer: $DIR/dangling.usda +warning: Warning { code: MaterialFallbackDefault, kind: Skipped, count: 1, prims: ["/World/Nope"], message: "Material at /World/Nope not resolvable — using default grey OpenPBR" } +warning: Warning { code: CameraMissing, kind: Skipped, count: 1, prims: [], message: "USD stage has no UsdGeomCamera — falling back to world::get_settings camera" } +lights: 0 +volumes: 0 +world: 1 geometries, PrimitiveBreakdown { triangles: 0, spheres: 1, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 0, spheres: 1, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:fb1e7d48790aec95 camera=1:fb1e7d48790aec95 shadow=1:fb1e7d48790aec95 indirect=1:fb1e7d48790aec95 +provenance material /World/Nope: MaterialOrigin { slots: [0], displaced: false } +provenance geometry 0..1: /World/Ball +provenance spheres: [0] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: None, cameras: [], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: None, offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/dangling_usda-33cdcee1c03a3f62-1.image b/crates/crust-core/tests/data/import_baselines/dangling_usda-33cdcee1c03a3f62-1.image new file mode 100644 index 000000000..c734c5b1d --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/dangling_usda-33cdcee1c03a3f62-1.image @@ -0,0 +1 @@ +640x360 16spp clamp-off a04a09c0d4b5e325 diff --git a/crates/crust-core/tests/data/import_baselines/default_links_usda-fa4bfc17658672ca-1.digest b/crates/crust-core/tests/data/import_baselines/default_links_usda-fa4bfc17658672ca-1.digest new file mode 100644 index 000000000..1717f562a --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/default_links_usda-fa4bfc17658672ca-1.digest @@ -0,0 +1,23 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: None +camera: Camera { origin: Vec3A(15.0, 3.0, 3.0), lower_left_corner: Vec3A(4.8863316, -0.044797063, 4.174048), horizontal: Vec3A(1.2295314, 0.0, -6.147657), vertical: Vec3A(-0.44830504, 3.4967792, -0.08966101), u: Vec3A(0.19611613, 0.0, -0.9805807), v: Vec3A(-0.1271232, 0.991561, -0.02542464), lens_radius: 0.05, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: None +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 640, height: 360, region: PixelRect { x0: 0, y0: 0, x1: 640, y1: 360 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: None, depth_of_field: true, motion_blur: false, layer_stack: ["$DIR/default_links.usda"], invisible_overrides: Some(0) } +layer: $DIR/default_links.usda +warning: Warning { code: CameraMissing, kind: Skipped, count: 1, prims: [], message: "USD stage has no UsdGeomCamera — falling back to world::get_settings camera" } +lights: 1 +light 0: area name Some("/World/L") lpe None pmf 1.0 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 2 geometries, PrimitiveBreakdown { triangles: 0, spheres: 2, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 0, spheres: 2, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +geom 0: material #0 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:7fd943913c47476d camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=1:7fd943913c47476d +geom 1: material #1 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:984632b55acb5495 camera=1:984632b55acb5495 shadow=1:984632b55acb5495 indirect=1:984632b55acb5495 +provenance light /World/L: LightOrigin { index: 0, geoms: 0..1 } +provenance geometry 0..1: /World/L +provenance geometry 1..2: /World/Ball +provenance spheres: [1] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: None, cameras: [], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: None, offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/default_links_usda-fa4bfc17658672ca-1.image b/crates/crust-core/tests/data/import_baselines/default_links_usda-fa4bfc17658672ca-1.image new file mode 100644 index 000000000..6a65b36f8 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/default_links_usda-fa4bfc17658672ca-1.image @@ -0,0 +1 @@ +640x360 16spp clamp-off 97e363ac34854a58 diff --git a/crates/crust-core/tests/data/import_baselines/degenerate_lights_usda-c119df2817a52e22-1.digest b/crates/crust-core/tests/data/import_baselines/degenerate_lights_usda-c119df2817a52e22-1.digest new file mode 100644 index 000000000..5de87a653 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/degenerate_lights_usda-c119df2817a52e22-1.digest @@ -0,0 +1,17 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/World/cam") +camera: Camera { origin: Vec3A(0.0, 0.0, 0.0), lower_left_corner: Vec3A(-2.7183647, -1.5290802, -10.0), horizontal: Vec3A(5.4367294, 0.0, 0.0), vertical: Vec3A(0.0, 3.0581603, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: None +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 640, height: 360, region: PixelRect { x0: 0, y0: 0, x1: 640, y1: 360 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 50.0, aperture: [20.955, 15.2908], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 10.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/degenerate_lights.usda"], invisible_overrides: Some(0) } +layer: $DIR/degenerate_lights.usda +warning: Warning { code: LightDegenerateShape, kind: Skipped, count: 2, prims: ["/World/b", "/World/a"], message: "RectLight at /World/b: width 0 × height 1 must be finite and positive — skipped" } +lights: 0 +volumes: 0 +world: 0 geometries, PrimitiveBreakdown { triangles: 0, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 0, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/World/cam"), cameras: ["/World/cam"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/World/cam"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/degenerate_lights_usda-c119df2817a52e22-1.image b/crates/crust-core/tests/data/import_baselines/degenerate_lights_usda-c119df2817a52e22-1.image new file mode 100644 index 000000000..c734c5b1d --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/degenerate_lights_usda-c119df2817a52e22-1.image @@ -0,0 +1 @@ +640x360 16spp clamp-off a04a09c0d4b5e325 diff --git a/crates/crust-core/tests/data/import_baselines/dicing_alone_ref_usda-ad2f6d6f9f5a6b34-1.digest b/crates/crust-core/tests/data/import_baselines/dicing_alone_ref_usda-ad2f6d6f9f5a6b34-1.digest new file mode 100644 index 000000000..21ebb66d4 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/dicing_alone_ref_usda-ad2f6d6f9f5a6b34-1.digest @@ -0,0 +1,20 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/W/Near") +camera: Camera { origin: Vec3A(0.0, 0.0, -300.0), lower_left_corner: Vec3A(-2.7183647, -1.5290802, -310.0), horizontal: Vec3A(5.4367294, 0.0, 0.0), vertical: Vec3A(0.0, 3.0581603, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: Some("/Render/settings") +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 640, height: 360, region: PixelRect { x0: 0, y0: 0, x1: 640, y1: 360 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 50.0, aperture: [20.955, 15.2908], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 10.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/dicing_alone_ref.usda"], invisible_overrides: Some(0) } +layer: $DIR/dicing_alone_ref.usda +lights: 0 +volumes: 0 +world: 1 geometries, PrimitiveBreakdown { triangles: 192, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 192, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=192:1194b7104219a451 camera=192:1194b7104219a451 shadow=192:1194b7104219a451 indirect=192:1194b7104219a451 +provenance geometry 0..1: /W/Cube +provenance mesh: MeshOrigin { geom_id: 0, slot: 0, baked: true, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 5078605137533740532, n_points: 98, n_indices: 576, n_uvs: None, smooth: true, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: Some(ScreenKey([0, 0, 3281387520, 1150494134, 0, 0, 3281387520, 3212836864, 0, 3196792357, 1065353216, 0, 3196792357, 0, 3212836864, 3189543914, 0, 1065353216, 3189543914, 0, 0, 3212836864, 1073741824, 3])), domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/W/Near"), cameras: ["/W/Near", "/W/Cam"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/W/Near"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/dicing_alone_ref_usda-ad2f6d6f9f5a6b34-1.image b/crates/crust-core/tests/data/import_baselines/dicing_alone_ref_usda-ad2f6d6f9f5a6b34-1.image new file mode 100644 index 000000000..c734c5b1d --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/dicing_alone_ref_usda-ad2f6d6f9f5a6b34-1.image @@ -0,0 +1 @@ +640x360 16spp clamp-off a04a09c0d4b5e325 diff --git a/crates/crust-core/tests/data/import_baselines/dicing_alone_usda-d2a904287b895157-1.digest b/crates/crust-core/tests/data/import_baselines/dicing_alone_usda-d2a904287b895157-1.digest new file mode 100644 index 000000000..1915243f3 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/dicing_alone_usda-d2a904287b895157-1.digest @@ -0,0 +1,20 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/W/Near") +camera: Camera { origin: Vec3A(0.0, 0.0, -300.0), lower_left_corner: Vec3A(-2.7183647, -1.5290802, -310.0), horizontal: Vec3A(5.4367294, 0.0, 0.0), vertical: Vec3A(0.0, 3.0581603, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: Some("/Render/settings") +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 640, height: 360, region: PixelRect { x0: 0, y0: 0, x1: 640, y1: 360 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 50.0, aperture: [20.955, 15.2908], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 10.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/dicing_alone.usda"], invisible_overrides: Some(0) } +layer: $DIR/dicing_alone.usda +lights: 0 +volumes: 0 +world: 1 geometries, PrimitiveBreakdown { triangles: 192, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 192, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=192:1194b7104219a451 camera=192:1194b7104219a451 shadow=192:1194b7104219a451 indirect=192:1194b7104219a451 +provenance geometry 0..1: /W/Cube +provenance mesh: MeshOrigin { geom_id: 0, slot: 0, baked: true, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 5078605137533740532, n_points: 98, n_indices: 576, n_uvs: None, smooth: true, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: Some(ScreenKey([0, 0, 3281387520, 1150494134, 0, 0, 3281387520, 3212836864, 0, 3196792357, 1065353216, 0, 3196792357, 0, 3212836864, 3189543914, 0, 1065353216, 3189543914, 0, 0, 3212836864, 1073741824, 3])), domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/W/Near"), cameras: ["/W/Near", "/W/Cam"], dicing: Some("/W/Near"), on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/W/Near"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/dicing_alone_usda-d2a904287b895157-1.image b/crates/crust-core/tests/data/import_baselines/dicing_alone_usda-d2a904287b895157-1.image new file mode 100644 index 000000000..c734c5b1d --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/dicing_alone_usda-d2a904287b895157-1.image @@ -0,0 +1 @@ +640x360 16spp clamp-off a04a09c0d4b5e325 diff --git a/crates/crust-core/tests/data/import_baselines/dicing_near_usda-2b8cc53942e05573-1.digest b/crates/crust-core/tests/data/import_baselines/dicing_near_usda-2b8cc53942e05573-1.digest new file mode 100644 index 000000000..7dbd7eb96 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/dicing_near_usda-2b8cc53942e05573-1.digest @@ -0,0 +1,20 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/W/Cam") +camera: Camera { origin: Vec3A(0.0, 0.0, 0.0), lower_left_corner: Vec3A(-2.0955, -1.1787187, -10.0), horizontal: Vec3A(4.191, 0.0, 0.0), vertical: Vec3A(0.0, 2.3574374, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: Some("/Render/settings") +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 640, height: 360, region: PixelRect { x0: 0, y0: 0, x1: 640, y1: 360 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 50.0, aperture: [20.955, 11.787188], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 10.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/dicing_near.usda"], invisible_overrides: Some(0) } +layer: $DIR/dicing_near.usda +lights: 0 +volumes: 0 +world: 1 geometries, PrimitiveBreakdown { triangles: 192, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 192, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=192:1194b7104219a451 camera=192:1194b7104219a451 shadow=192:1194b7104219a451 indirect=192:1194b7104219a451 +provenance geometry 0..1: /W/Cube +provenance mesh: MeshOrigin { geom_id: 0, slot: 0, baked: true, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 5078605137533740532, n_points: 98, n_indices: 576, n_uvs: None, smooth: true, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: Some(ScreenKey([0, 0, 3281387520, 1150494134, 0, 0, 3281387520, 3212836864, 0, 3196792357, 1065353216, 0, 3196792357, 0, 3212836864, 3189543914, 0, 1065353216, 3189543914, 0, 0, 3212836864, 1073741824, 3])), domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/W/Cam"), cameras: ["/W/Near", "/W/Cam"], dicing: Some("/W/Near"), on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/W/Cam"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/dicing_near_usda-2b8cc53942e05573-1.image b/crates/crust-core/tests/data/import_baselines/dicing_near_usda-2b8cc53942e05573-1.image new file mode 100644 index 000000000..c734c5b1d --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/dicing_near_usda-2b8cc53942e05573-1.image @@ -0,0 +1 @@ +640x360 16spp clamp-off a04a09c0d4b5e325 diff --git a/crates/crust-core/tests/data/import_baselines/dicing_nothing_usda-02863a7cb9ea2edb-1.digest b/crates/crust-core/tests/data/import_baselines/dicing_nothing_usda-02863a7cb9ea2edb-1.digest new file mode 100644 index 000000000..3449a9f41 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/dicing_nothing_usda-02863a7cb9ea2edb-1.digest @@ -0,0 +1,21 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/W/Cam") +camera: Camera { origin: Vec3A(0.0, 0.0, 0.0), lower_left_corner: Vec3A(-2.0955, -1.1787187, -10.0), horizontal: Vec3A(4.191, 0.0, 0.0), vertical: Vec3A(0.0, 2.3574374, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: Some("/Render/settings") +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 640, height: 360, region: PixelRect { x0: 0, y0: 0, x1: 640, y1: 360 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 50.0, aperture: [20.955, 11.787188], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 10.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/dicing_nothing.usda"], invisible_overrides: Some(0) } +layer: $DIR/dicing_nothing.usda +warning: Warning { code: CameraDicingNotCamera, kind: Approximated, count: 1, prims: ["/W/Nope"], message: "crust:dicingCamera targets /W/Nope, which is not a camera on this stage — tessellation reads the render camera" } +lights: 0 +volumes: 0 +world: 1 geometries, PrimitiveBreakdown { triangles: 108, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 108, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=108:41f7acd20ed8a21b camera=108:41f7acd20ed8a21b shadow=108:41f7acd20ed8a21b indirect=108:41f7acd20ed8a21b +provenance geometry 0..1: /W/Cube +provenance mesh: MeshOrigin { geom_id: 0, slot: 0, baked: true, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 11641728572909156760, n_points: 56, n_indices: 324, n_uvs: None, smooth: true, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: Some(ScreenKey([0, 0, 0, 1153360542, 0, 0, 0, 3212836864, 0, 3193345094, 1065353216, 0, 3193345094, 0, 3212836864, 3186714319, 0, 1065353216, 3186714319, 0, 0, 3212836864, 1073741824, 3])), domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/W/Cam"), cameras: ["/W/Near", "/W/Cam"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/W/Cam"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/dicing_nothing_usda-02863a7cb9ea2edb-1.image b/crates/crust-core/tests/data/import_baselines/dicing_nothing_usda-02863a7cb9ea2edb-1.image new file mode 100644 index 000000000..c734c5b1d --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/dicing_nothing_usda-02863a7cb9ea2edb-1.image @@ -0,0 +1 @@ +640x360 16spp clamp-off a04a09c0d4b5e325 diff --git a/crates/crust-core/tests/data/import_baselines/dicing_product_diced_usda-bde5502fcf67625f-1.digest b/crates/crust-core/tests/data/import_baselines/dicing_product_diced_usda-bde5502fcf67625f-1.digest new file mode 100644 index 000000000..0dbca6a10 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/dicing_product_diced_usda-bde5502fcf67625f-1.digest @@ -0,0 +1,20 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/W/Near") +camera: Camera { origin: Vec3A(0.0, 0.0, -300.0), lower_left_corner: Vec3A(-2.7183647, -1.5290802, -310.0), horizontal: Vec3A(5.4367294, 0.0, 0.0), vertical: Vec3A(0.0, 3.0581603, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: Some("/Render/settings") +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 640, height: 360, region: PixelRect { x0: 0, y0: 0, x1: 640, y1: 360 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [AovProduct { prim_path: "/Render/p", name: "", vars: [], attributes: [] }], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 50.0, aperture: [20.955, 15.2908], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 10.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/dicing_product_diced.usda"], invisible_overrides: Some(0) } +layer: $DIR/dicing_product_diced.usda +lights: 0 +volumes: 0 +world: 1 geometries, PrimitiveBreakdown { triangles: 108, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 108, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=108:41f7acd20ed8a21b camera=108:41f7acd20ed8a21b shadow=108:41f7acd20ed8a21b indirect=108:41f7acd20ed8a21b +provenance geometry 0..1: /W/Cube +provenance mesh: MeshOrigin { geom_id: 0, slot: 0, baked: true, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 11641728572909156760, n_points: 56, n_indices: 324, n_uvs: None, smooth: true, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: Some(ScreenKey([0, 0, 0, 1153360542, 0, 0, 0, 3212836864, 0, 3193345094, 1065353216, 0, 3193345094, 0, 3212836864, 3186714319, 0, 1065353216, 3186714319, 0, 0, 3212836864, 1073741824, 3])), domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/W/Near"), cameras: ["/W/Near", "/W/Cam"], dicing: Some("/W/Cam"), on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/W/Near"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/dicing_product_diced_usda-bde5502fcf67625f-1.image b/crates/crust-core/tests/data/import_baselines/dicing_product_diced_usda-bde5502fcf67625f-1.image new file mode 100644 index 000000000..c734c5b1d --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/dicing_product_diced_usda-bde5502fcf67625f-1.image @@ -0,0 +1 @@ +640x360 16spp clamp-off a04a09c0d4b5e325 diff --git a/crates/crust-core/tests/data/import_baselines/dicing_product_ref_cam_usda-206ed631706e669f-1.digest b/crates/crust-core/tests/data/import_baselines/dicing_product_ref_cam_usda-206ed631706e669f-1.digest new file mode 100644 index 000000000..175e3540f --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/dicing_product_ref_cam_usda-206ed631706e669f-1.digest @@ -0,0 +1,20 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/W/Cam") +camera: Camera { origin: Vec3A(0.0, 0.0, 0.0), lower_left_corner: Vec3A(-2.0955, -1.1787187, -10.0), horizontal: Vec3A(4.191, 0.0, 0.0), vertical: Vec3A(0.0, 2.3574374, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: Some("/Render/settings") +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 640, height: 360, region: PixelRect { x0: 0, y0: 0, x1: 640, y1: 360 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 50.0, aperture: [20.955, 11.787188], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 10.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/dicing_product_ref_cam.usda"], invisible_overrides: Some(0) } +layer: $DIR/dicing_product_ref_cam.usda +lights: 0 +volumes: 0 +world: 1 geometries, PrimitiveBreakdown { triangles: 108, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 108, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=108:41f7acd20ed8a21b camera=108:41f7acd20ed8a21b shadow=108:41f7acd20ed8a21b indirect=108:41f7acd20ed8a21b +provenance geometry 0..1: /W/Cube +provenance mesh: MeshOrigin { geom_id: 0, slot: 0, baked: true, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 11641728572909156760, n_points: 56, n_indices: 324, n_uvs: None, smooth: true, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: Some(ScreenKey([0, 0, 0, 1153360542, 0, 0, 0, 3212836864, 0, 3193345094, 1065353216, 0, 3193345094, 0, 3212836864, 3186714319, 0, 1065353216, 3186714319, 0, 0, 3212836864, 1073741824, 3])), domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/W/Cam"), cameras: ["/W/Near", "/W/Cam"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/W/Cam"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/dicing_product_ref_cam_usda-206ed631706e669f-1.image b/crates/crust-core/tests/data/import_baselines/dicing_product_ref_cam_usda-206ed631706e669f-1.image new file mode 100644 index 000000000..c734c5b1d --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/dicing_product_ref_cam_usda-206ed631706e669f-1.image @@ -0,0 +1 @@ +640x360 16spp clamp-off a04a09c0d4b5e325 diff --git a/crates/crust-core/tests/data/import_baselines/dicing_product_ref_near_usda-a7f21d55b08b22eb-1.digest b/crates/crust-core/tests/data/import_baselines/dicing_product_ref_near_usda-a7f21d55b08b22eb-1.digest new file mode 100644 index 000000000..cc03c0006 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/dicing_product_ref_near_usda-a7f21d55b08b22eb-1.digest @@ -0,0 +1,20 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/W/Near") +camera: Camera { origin: Vec3A(0.0, 0.0, -300.0), lower_left_corner: Vec3A(-2.7183647, -1.5290802, -310.0), horizontal: Vec3A(5.4367294, 0.0, 0.0), vertical: Vec3A(0.0, 3.0581603, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: Some("/Render/settings") +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 640, height: 360, region: PixelRect { x0: 0, y0: 0, x1: 640, y1: 360 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 50.0, aperture: [20.955, 15.2908], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 10.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/dicing_product_ref_near.usda"], invisible_overrides: Some(0) } +layer: $DIR/dicing_product_ref_near.usda +lights: 0 +volumes: 0 +world: 1 geometries, PrimitiveBreakdown { triangles: 192, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 192, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=192:1194b7104219a451 camera=192:1194b7104219a451 shadow=192:1194b7104219a451 indirect=192:1194b7104219a451 +provenance geometry 0..1: /W/Cube +provenance mesh: MeshOrigin { geom_id: 0, slot: 0, baked: true, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 5078605137533740532, n_points: 98, n_indices: 576, n_uvs: None, smooth: true, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: Some(ScreenKey([0, 0, 3281387520, 1150494134, 0, 0, 3281387520, 3212836864, 0, 3196792357, 1065353216, 0, 3196792357, 0, 3212836864, 3189543914, 0, 1065353216, 3189543914, 0, 0, 3212836864, 1073741824, 3])), domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/W/Near"), cameras: ["/W/Near", "/W/Cam"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/W/Near"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/dicing_product_ref_near_usda-a7f21d55b08b22eb-1.image b/crates/crust-core/tests/data/import_baselines/dicing_product_ref_near_usda-a7f21d55b08b22eb-1.image new file mode 100644 index 000000000..c734c5b1d --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/dicing_product_ref_near_usda-a7f21d55b08b22eb-1.image @@ -0,0 +1 @@ +640x360 16spp clamp-off a04a09c0d4b5e325 diff --git a/crates/crust-core/tests/data/import_baselines/dicing_product_usda-0fe0e77ccc289c1f-1.digest b/crates/crust-core/tests/data/import_baselines/dicing_product_usda-0fe0e77ccc289c1f-1.digest new file mode 100644 index 000000000..d26df9e3e --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/dicing_product_usda-0fe0e77ccc289c1f-1.digest @@ -0,0 +1,20 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/W/Near") +camera: Camera { origin: Vec3A(0.0, 0.0, -300.0), lower_left_corner: Vec3A(-2.7183647, -1.5290802, -310.0), horizontal: Vec3A(5.4367294, 0.0, 0.0), vertical: Vec3A(0.0, 3.0581603, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: Some("/Render/settings") +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 640, height: 360, region: PixelRect { x0: 0, y0: 0, x1: 640, y1: 360 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [AovProduct { prim_path: "/Render/p", name: "", vars: [], attributes: [] }], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 50.0, aperture: [20.955, 15.2908], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 10.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/dicing_product.usda"], invisible_overrides: Some(0) } +layer: $DIR/dicing_product.usda +lights: 0 +volumes: 0 +world: 1 geometries, PrimitiveBreakdown { triangles: 192, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 192, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=192:1194b7104219a451 camera=192:1194b7104219a451 shadow=192:1194b7104219a451 indirect=192:1194b7104219a451 +provenance geometry 0..1: /W/Cube +provenance mesh: MeshOrigin { geom_id: 0, slot: 0, baked: true, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 5078605137533740532, n_points: 98, n_indices: 576, n_uvs: None, smooth: true, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: Some(ScreenKey([0, 0, 3281387520, 1150494134, 0, 0, 3281387520, 3212836864, 0, 3196792357, 1065353216, 0, 3196792357, 0, 3212836864, 3189543914, 0, 1065353216, 3189543914, 0, 0, 3212836864, 1073741824, 3])), domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/W/Near"), cameras: ["/W/Near", "/W/Cam"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/W/Near"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/dicing_product_usda-0fe0e77ccc289c1f-1.image b/crates/crust-core/tests/data/import_baselines/dicing_product_usda-0fe0e77ccc289c1f-1.image new file mode 100644 index 000000000..c734c5b1d --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/dicing_product_usda-0fe0e77ccc289c1f-1.image @@ -0,0 +1 @@ +640x360 16spp clamp-off a04a09c0d4b5e325 diff --git a/crates/crust-core/tests/data/import_baselines/dicing_property_usda-541c1a7591a9b5c0-1.digest b/crates/crust-core/tests/data/import_baselines/dicing_property_usda-541c1a7591a9b5c0-1.digest new file mode 100644 index 000000000..c41fc55dd --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/dicing_property_usda-541c1a7591a9b5c0-1.digest @@ -0,0 +1,21 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/W/Cam") +camera: Camera { origin: Vec3A(0.0, 0.0, 0.0), lower_left_corner: Vec3A(-2.0955, -1.1787187, -10.0), horizontal: Vec3A(4.191, 0.0, 0.0), vertical: Vec3A(0.0, 2.3574374, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: Some("/Render/settings") +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 640, height: 360, region: PixelRect { x0: 0, y0: 0, x1: 640, y1: 360 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 50.0, aperture: [20.955, 11.787188], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 10.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/dicing_property.usda"], invisible_overrides: Some(0) } +layer: $DIR/dicing_property.usda +warning: Warning { code: CameraDicingNotCamera, kind: Approximated, count: 1, prims: ["/W/Near.focalLength"], message: "crust:dicingCamera targets /W/Near.focalLength, which is not a camera on this stage — tessellation reads the render camera" } +lights: 0 +volumes: 0 +world: 1 geometries, PrimitiveBreakdown { triangles: 108, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 108, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=108:41f7acd20ed8a21b camera=108:41f7acd20ed8a21b shadow=108:41f7acd20ed8a21b indirect=108:41f7acd20ed8a21b +provenance geometry 0..1: /W/Cube +provenance mesh: MeshOrigin { geom_id: 0, slot: 0, baked: true, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 11641728572909156760, n_points: 56, n_indices: 324, n_uvs: None, smooth: true, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: Some(ScreenKey([0, 0, 0, 1153360542, 0, 0, 0, 3212836864, 0, 3193345094, 1065353216, 0, 3193345094, 0, 3212836864, 3186714319, 0, 1065353216, 3186714319, 0, 0, 3212836864, 1073741824, 3])), domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/W/Cam"), cameras: ["/W/Near", "/W/Cam"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/W/Cam"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/dicing_property_usda-541c1a7591a9b5c0-1.image b/crates/crust-core/tests/data/import_baselines/dicing_property_usda-541c1a7591a9b5c0-1.image new file mode 100644 index 000000000..c734c5b1d --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/dicing_property_usda-541c1a7591a9b5c0-1.image @@ -0,0 +1 @@ +640x360 16spp clamp-off a04a09c0d4b5e325 diff --git a/crates/crust-core/tests/data/import_baselines/dicing_ref_usda-450597df8121a96c-1.digest b/crates/crust-core/tests/data/import_baselines/dicing_ref_usda-450597df8121a96c-1.digest new file mode 100644 index 000000000..afa104d52 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/dicing_ref_usda-450597df8121a96c-1.digest @@ -0,0 +1,20 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/W/Cam") +camera: Camera { origin: Vec3A(0.0, 0.0, 0.0), lower_left_corner: Vec3A(-2.0955, -1.1787187, -10.0), horizontal: Vec3A(4.191, 0.0, 0.0), vertical: Vec3A(0.0, 2.3574374, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: Some("/Render/settings") +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 640, height: 360, region: PixelRect { x0: 0, y0: 0, x1: 640, y1: 360 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 50.0, aperture: [20.955, 11.787188], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 10.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/dicing_ref.usda"], invisible_overrides: Some(0) } +layer: $DIR/dicing_ref.usda +lights: 0 +volumes: 0 +world: 1 geometries, PrimitiveBreakdown { triangles: 108, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 108, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=108:41f7acd20ed8a21b camera=108:41f7acd20ed8a21b shadow=108:41f7acd20ed8a21b indirect=108:41f7acd20ed8a21b +provenance geometry 0..1: /W/Cube +provenance mesh: MeshOrigin { geom_id: 0, slot: 0, baked: true, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 11641728572909156760, n_points: 56, n_indices: 324, n_uvs: None, smooth: true, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: Some(ScreenKey([0, 0, 0, 1153360542, 0, 0, 0, 3212836864, 0, 3193345094, 1065353216, 0, 3193345094, 0, 3212836864, 3186714319, 0, 1065353216, 3186714319, 0, 0, 3212836864, 1073741824, 3])), domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/W/Cam"), cameras: ["/W/Near", "/W/Cam"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/W/Cam"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/dicing_ref_usda-450597df8121a96c-1.image b/crates/crust-core/tests/data/import_baselines/dicing_ref_usda-450597df8121a96c-1.image new file mode 100644 index 000000000..c734c5b1d --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/dicing_ref_usda-450597df8121a96c-1.image @@ -0,0 +1 @@ +640x360 16spp clamp-off a04a09c0d4b5e325 diff --git a/crates/crust-core/tests/data/import_baselines/dicing_self_usda-9d54e5a1b138ff5e-1.digest b/crates/crust-core/tests/data/import_baselines/dicing_self_usda-9d54e5a1b138ff5e-1.digest new file mode 100644 index 000000000..ff6d9f3d5 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/dicing_self_usda-9d54e5a1b138ff5e-1.digest @@ -0,0 +1,20 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/W/Cam") +camera: Camera { origin: Vec3A(0.0, 0.0, 0.0), lower_left_corner: Vec3A(-2.0955, -1.1787187, -10.0), horizontal: Vec3A(4.191, 0.0, 0.0), vertical: Vec3A(0.0, 2.3574374, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: Some("/Render/settings") +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 640, height: 360, region: PixelRect { x0: 0, y0: 0, x1: 640, y1: 360 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 50.0, aperture: [20.955, 11.787188], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 10.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/dicing_self.usda"], invisible_overrides: Some(0) } +layer: $DIR/dicing_self.usda +lights: 0 +volumes: 0 +world: 1 geometries, PrimitiveBreakdown { triangles: 108, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 108, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=108:41f7acd20ed8a21b camera=108:41f7acd20ed8a21b shadow=108:41f7acd20ed8a21b indirect=108:41f7acd20ed8a21b +provenance geometry 0..1: /W/Cube +provenance mesh: MeshOrigin { geom_id: 0, slot: 0, baked: true, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 11641728572909156760, n_points: 56, n_indices: 324, n_uvs: None, smooth: true, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: Some(ScreenKey([0, 0, 0, 1153360542, 0, 0, 0, 3212836864, 0, 3193345094, 1065353216, 0, 3193345094, 0, 3212836864, 3186714319, 0, 1065353216, 3186714319, 0, 0, 3212836864, 1073741824, 3])), domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/W/Cam"), cameras: ["/W/Near", "/W/Cam"], dicing: Some("/W/Cam"), on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/W/Cam"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/dicing_self_usda-9d54e5a1b138ff5e-1.image b/crates/crust-core/tests/data/import_baselines/dicing_self_usda-9d54e5a1b138ff5e-1.image new file mode 100644 index 000000000..c734c5b1d --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/dicing_self_usda-9d54e5a1b138ff5e-1.image @@ -0,0 +1 @@ +640x360 16spp clamp-off a04a09c0d4b5e325 diff --git a/crates/crust-core/tests/data/import_baselines/dicing_through_near_usda-43e145636209967d-1.digest b/crates/crust-core/tests/data/import_baselines/dicing_through_near_usda-43e145636209967d-1.digest new file mode 100644 index 000000000..3db10d1dc --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/dicing_through_near_usda-43e145636209967d-1.digest @@ -0,0 +1,20 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/W/Near") +camera: Camera { origin: Vec3A(0.0, 0.0, -300.0), lower_left_corner: Vec3A(-2.7183647, -1.5290802, -310.0), horizontal: Vec3A(5.4367294, 0.0, 0.0), vertical: Vec3A(0.0, 3.0581603, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: Some("/Render/settings") +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 640, height: 360, region: PixelRect { x0: 0, y0: 0, x1: 640, y1: 360 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 50.0, aperture: [20.955, 15.2908], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 10.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/dicing_through_near.usda"], invisible_overrides: Some(0) } +layer: $DIR/dicing_through_near.usda +lights: 0 +volumes: 0 +world: 1 geometries, PrimitiveBreakdown { triangles: 192, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 192, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=192:1194b7104219a451 camera=192:1194b7104219a451 shadow=192:1194b7104219a451 indirect=192:1194b7104219a451 +provenance geometry 0..1: /W/Cube +provenance mesh: MeshOrigin { geom_id: 0, slot: 0, baked: true, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 5078605137533740532, n_points: 98, n_indices: 576, n_uvs: None, smooth: true, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: Some(ScreenKey([0, 0, 3281387520, 1150494134, 0, 0, 3281387520, 3212836864, 0, 3196792357, 1065353216, 0, 3196792357, 0, 3212836864, 3189543914, 0, 1065353216, 3189543914, 0, 0, 3212836864, 1073741824, 3])), domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/W/Near"), cameras: ["/W/Near", "/W/Cam"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/W/Near"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/dicing_through_near_usda-43e145636209967d-1.image b/crates/crust-core/tests/data/import_baselines/dicing_through_near_usda-43e145636209967d-1.image new file mode 100644 index 000000000..c734c5b1d --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/dicing_through_near_usda-43e145636209967d-1.image @@ -0,0 +1 @@ +640x360 16spp clamp-off a04a09c0d4b5e325 diff --git a/crates/crust-core/tests/data/import_baselines/dicing_unauthored_usda-d941af55d3f95425-1.digest b/crates/crust-core/tests/data/import_baselines/dicing_unauthored_usda-d941af55d3f95425-1.digest new file mode 100644 index 000000000..3d245b101 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/dicing_unauthored_usda-d941af55d3f95425-1.digest @@ -0,0 +1,20 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/W/Cam") +camera: Camera { origin: Vec3A(0.0, 0.0, 0.0), lower_left_corner: Vec3A(-2.0955, -1.1787187, -10.0), horizontal: Vec3A(4.191, 0.0, 0.0), vertical: Vec3A(0.0, 2.3574374, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: Some("/Render/settings") +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 640, height: 360, region: PixelRect { x0: 0, y0: 0, x1: 640, y1: 360 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 50.0, aperture: [20.955, 11.787188], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 10.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/dicing_unauthored.usda"], invisible_overrides: Some(0) } +layer: $DIR/dicing_unauthored.usda +lights: 0 +volumes: 0 +world: 1 geometries, PrimitiveBreakdown { triangles: 108, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 108, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=108:41f7acd20ed8a21b camera=108:41f7acd20ed8a21b shadow=108:41f7acd20ed8a21b indirect=108:41f7acd20ed8a21b +provenance geometry 0..1: /W/Cube +provenance mesh: MeshOrigin { geom_id: 0, slot: 0, baked: true, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 11641728572909156760, n_points: 56, n_indices: 324, n_uvs: None, smooth: true, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: Some(ScreenKey([0, 0, 0, 1153360542, 0, 0, 0, 3212836864, 0, 3193345094, 1065353216, 0, 3193345094, 0, 3212836864, 3186714319, 0, 1065353216, 3186714319, 0, 0, 3212836864, 1073741824, 3])), domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/W/Cam"), cameras: ["/W/Near", "/W/Cam"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/W/Cam"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/dicing_unauthored_usda-d941af55d3f95425-1.image b/crates/crust-core/tests/data/import_baselines/dicing_unauthored_usda-d941af55d3f95425-1.image new file mode 100644 index 000000000..c734c5b1d --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/dicing_unauthored_usda-d941af55d3f95425-1.image @@ -0,0 +1 @@ +640x360 16spp clamp-off a04a09c0d4b5e325 diff --git a/crates/crust-core/tests/data/import_baselines/dicing_unnamed_usda-1911d7362c693947-1.digest b/crates/crust-core/tests/data/import_baselines/dicing_unnamed_usda-1911d7362c693947-1.digest new file mode 100644 index 000000000..736239a92 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/dicing_unnamed_usda-1911d7362c693947-1.digest @@ -0,0 +1,21 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/W/Near") +camera: Camera { origin: Vec3A(0.0, 0.0, -300.0), lower_left_corner: Vec3A(-2.7183647, -1.5290802, -310.0), horizontal: Vec3A(5.4367294, 0.0, 0.0), vertical: Vec3A(0.0, 3.0581603, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: Some("/Render/settings") +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 640, height: 360, region: PixelRect { x0: 0, y0: 0, x1: 640, y1: 360 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 50.0, aperture: [20.955, 15.2908], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 10.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/dicing_unnamed.usda"], invisible_overrides: Some(0) } +layer: $DIR/dicing_unnamed.usda +warning: Warning { code: SubdivAdaptiveNeedsCamera, kind: Approximated, count: 1, prims: [], message: "Adaptive subdivision (2 px) needs the render camera before the stage is read — name it with --camera or RenderSettings.camera, or a dicing camera with crust:dicingCamera. Using the uniform level 0" } +lights: 0 +volumes: 0 +world: 1 geometries, PrimitiveBreakdown { triangles: 12, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 12, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=12:6c5a731a407aa3fd camera=12:6c5a731a407aa3fd shadow=12:6c5a731a407aa3fd indirect=12:6c5a731a407aa3fd +provenance geometry 0..1: /W/Cube +provenance mesh: MeshOrigin { geom_id: 0, slot: 0, baked: true, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 14289806633734265804, n_points: 8, n_indices: 24, n_uvs: None, smooth: true, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/W/Near"), cameras: ["/W/Near", "/W/Cam"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/W/Near"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/dicing_unnamed_usda-1911d7362c693947-1.image b/crates/crust-core/tests/data/import_baselines/dicing_unnamed_usda-1911d7362c693947-1.image new file mode 100644 index 000000000..c734c5b1d --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/dicing_unnamed_usda-1911d7362c693947-1.image @@ -0,0 +1 @@ +640x360 16spp clamp-off a04a09c0d4b5e325 diff --git a/crates/crust-core/tests/data/import_baselines/dicing_xform_usda-fdb39a50b9314e69-1.digest b/crates/crust-core/tests/data/import_baselines/dicing_xform_usda-fdb39a50b9314e69-1.digest new file mode 100644 index 000000000..a2227193c --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/dicing_xform_usda-fdb39a50b9314e69-1.digest @@ -0,0 +1,21 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/W/Cam") +camera: Camera { origin: Vec3A(0.0, 0.0, 0.0), lower_left_corner: Vec3A(-2.0955, -1.1787187, -10.0), horizontal: Vec3A(4.191, 0.0, 0.0), vertical: Vec3A(0.0, 2.3574374, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: Some("/Render/settings") +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 640, height: 360, region: PixelRect { x0: 0, y0: 0, x1: 640, y1: 360 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 50.0, aperture: [20.955, 11.787188], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 10.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/dicing_xform.usda"], invisible_overrides: Some(0) } +layer: $DIR/dicing_xform.usda +warning: Warning { code: CameraDicingNotCamera, kind: Approximated, count: 1, prims: ["/W/NotACamera"], message: "crust:dicingCamera targets /W/NotACamera, which is not a camera on this stage — tessellation reads the render camera" } +lights: 0 +volumes: 0 +world: 1 geometries, PrimitiveBreakdown { triangles: 108, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 108, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=108:41f7acd20ed8a21b camera=108:41f7acd20ed8a21b shadow=108:41f7acd20ed8a21b indirect=108:41f7acd20ed8a21b +provenance geometry 0..1: /W/Cube +provenance mesh: MeshOrigin { geom_id: 0, slot: 0, baked: true, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 11641728572909156760, n_points: 56, n_indices: 324, n_uvs: None, smooth: true, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: Some(ScreenKey([0, 0, 0, 1153360542, 0, 0, 0, 3212836864, 0, 3193345094, 1065353216, 0, 3193345094, 0, 3212836864, 3186714319, 0, 1065353216, 3186714319, 0, 0, 3212836864, 1073741824, 3])), domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/W/Cam"), cameras: ["/W/Near", "/W/Cam"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/W/Cam"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/dicing_xform_usda-fdb39a50b9314e69-1.image b/crates/crust-core/tests/data/import_baselines/dicing_xform_usda-fdb39a50b9314e69-1.image new file mode 100644 index 000000000..c734c5b1d --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/dicing_xform_usda-fdb39a50b9314e69-1.image @@ -0,0 +1 @@ +640x360 16spp clamp-off a04a09c0d4b5e325 diff --git a/crates/crust-core/tests/data/import_baselines/disabled_broken_usda-3e31009d90ef26ec-1.digest b/crates/crust-core/tests/data/import_baselines/disabled_broken_usda-3e31009d90ef26ec-1.digest new file mode 100644 index 000000000..887fecd54 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/disabled_broken_usda-3e31009d90ef26ec-1.digest @@ -0,0 +1,16 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/cam") +camera: Camera { origin: Vec3A(0.0, 0.0, 0.0), lower_left_corner: Vec3A(-2.7183647, -1.5290802, -10.0), horizontal: Vec3A(5.4367294, 0.0, 0.0), vertical: Vec3A(0.0, 3.0581603, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: Some("/Render/settings") +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 640, height: 360, region: PixelRect { x0: 0, y0: 0, x1: 640, y1: 360 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 50.0, aperture: [20.955, 15.2908], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 10.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/disabled_broken.usda"], invisible_overrides: Some(0) } +layer: $DIR/disabled_broken.usda +lights: 0 +volumes: 0 +world: 0 geometries, PrimitiveBreakdown { triangles: 0, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 0, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/cam"), cameras: ["/cam"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/cam"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/disabled_broken_usda-3e31009d90ef26ec-1.image b/crates/crust-core/tests/data/import_baselines/disabled_broken_usda-3e31009d90ef26ec-1.image new file mode 100644 index 000000000..c734c5b1d --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/disabled_broken_usda-3e31009d90ef26ec-1.image @@ -0,0 +1 @@ +640x360 16spp clamp-off a04a09c0d4b5e325 diff --git a/crates/crust-core/tests/data/import_baselines/disk_light_usda-720389dc27e2a4c4-1.digest b/crates/crust-core/tests/data/import_baselines/disk_light_usda-720389dc27e2a4c4-1.digest new file mode 100644 index 000000000..d9df96fad --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/disk_light_usda-720389dc27e2a4c4-1.digest @@ -0,0 +1,21 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: None +camera: Camera { origin: Vec3A(15.0, 3.0, 3.0), lower_left_corner: Vec3A(4.8863316, -0.044797063, 4.174048), horizontal: Vec3A(1.2295314, 0.0, -6.147657), vertical: Vec3A(-0.44830504, 3.4967792, -0.08966101), u: Vec3A(0.19611613, 0.0, -0.9805807), v: Vec3A(-0.1271232, 0.991561, -0.02542464), lens_radius: 0.05, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: None +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 640, height: 360, region: PixelRect { x0: 0, y0: 0, x1: 640, y1: 360 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: None, depth_of_field: true, motion_blur: false, layer_stack: ["$DIR/disk_light.usda"], invisible_overrides: Some(0) } +layer: $DIR/disk_light.usda +warning: Warning { code: CameraMissing, kind: Skipped, count: 1, prims: [], message: "USD stage has no UsdGeomCamera — falling back to world::get_settings camera" } +lights: 1 +light 0: area name Some("/World/D") lpe None pmf 1.0 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 1 geometries, PrimitiveBreakdown { triangles: 0, spheres: 0, disks: 1, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 0, spheres: 0, disks: 1, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +geom 0: material #0 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:33b018316f459432 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=1:33b018316f459432 +provenance light /World/D: LightOrigin { index: 0, geoms: 0..1 } +provenance geometry 0..1: /World/D +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: None, cameras: [], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: None, offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/disk_light_usda-720389dc27e2a4c4-1.image b/crates/crust-core/tests/data/import_baselines/disk_light_usda-720389dc27e2a4c4-1.image new file mode 100644 index 000000000..c734c5b1d --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/disk_light_usda-720389dc27e2a4c4-1.image @@ -0,0 +1 @@ +640x360 16spp clamp-off a04a09c0d4b5e325 diff --git a/crates/crust-core/tests/data/import_baselines/displaced_rest_usda-d70fe6fb257dd183-1.digest b/crates/crust-core/tests/data/import_baselines/displaced_rest_usda-d70fe6fb257dd183-1.digest new file mode 100644 index 000000000..fb70dea79 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/displaced_rest_usda-d70fe6fb257dd183-1.digest @@ -0,0 +1,23 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/World/cam") +camera: Camera { origin: Vec3A(0.0, 0.0, 10.0), lower_left_corner: Vec3A(-2.0955, -1.5716249, 0.0), horizontal: Vec3A(4.191, 0.0, 0.0), vertical: Vec3A(0.0, 3.1432498, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: Some("/Render/settings") +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 48, height: 36, region: PixelRect { x0: 0, y0: 0, x1: 48, y1: 36 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [AovProduct { prim_path: "/Render/p", name: "p.exr", vars: [AovVar { prim_path: "/Render/P", name: "P", channel_prefix: None, source: P, components: 3, precision: Float, accumulation: Closest, clear: 0.0, expression: None, raw: false, variance: false }, AovVar { prim_path: "/Render/Pref", name: "Pref", channel_prefix: None, source: Primvar(PrimvarSource { index: 0, components: 3, role: Vector }), components: 3, precision: Float, accumulation: Closest, clear: 0.0, expression: None, raw: false, variance: false }], attributes: [] }], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 50.0, aperture: [20.955, 15.2908], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 10.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/displaced_rest.usda"], invisible_overrides: Some(0) } +layer: $DIR/displaced_rest.usda +lights: 1 +light 0: dome name Some("/World/dome") lpe None pmf 1.0 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 1 geometries, PrimitiveBreakdown { triangles: 768, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 768, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov Some((Some(0), false)) swapped false curves false scale 1.0 motion [] pieces all=768:7c1fe5ab3fe37ef1 camera=768:7c1fe5ab3fe37ef1 shadow=768:7c1fe5ab3fe37ef1 indirect=768:7c1fe5ab3fe37ef1 +provenance material /World/Puffed: MaterialOrigin { slots: [0], displaced: true } +provenance light /World/dome: LightOrigin { index: 0, geoms: 1..1 } +provenance geometry 0..1: /World/cube +provenance mesh: MeshOrigin { geom_id: 0, slot: 0, baked: true, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 890298128050539104, n_points: 386, n_indices: 1536, n_uvs: None, smooth: true, material: 0 }), placements: 1, shared: false, displaced: true } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 3, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/World/cam"), cameras: ["/World/cam"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [("rest", 3)], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/World/cam"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/displaced_rest_usda-d70fe6fb257dd183-1.image b/crates/crust-core/tests/data/import_baselines/displaced_rest_usda-d70fe6fb257dd183-1.image new file mode 100644 index 000000000..cca888b82 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/displaced_rest_usda-d70fe6fb257dd183-1.image @@ -0,0 +1 @@ +48x36 16spp clamp-off f4dbd2e055480e73 diff --git a/crates/crust-core/tests/data/import_baselines/displacement_usda-03e54e80075ba30c-1.digest b/crates/crust-core/tests/data/import_baselines/displacement_usda-03e54e80075ba30c-1.digest new file mode 100644 index 000000000..f05b4a6c0 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/displacement_usda-03e54e80075ba30c-1.digest @@ -0,0 +1,36 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/World/Cam") +camera: Camera { origin: Vec3A(0.0, 3.0, 5.4), lower_left_corner: Vec3A(-7.551013, -5.6783953, -1.1365309), horizontal: Vec3A(15.102026, -0.0, 0.0), vertical: Vec3A(0.0, 7.35679, -4.247445), u: Vec3A(1.0, -0.0, 0.0), v: Vec3A(0.0, 0.8660253, -0.5), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: Some("/Render/settings") +settings: RenderSettings { samples_per_pixel: 64, max_depth: 4, width: 320, height: 180, region: PixelRect { x0: 0, y0: 0, x1: 320, y1: 180 }, min_samples_per_pixel: 16, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 18.0, aperture: [20.955, 15.2908], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 10.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/displacement.usda"], invisible_overrides: Some(0) } +layer: $DIR/displacement.usda +warning: Warning { code: AssetUnsupportedByHost, kind: Skipped, count: 2, prims: [], message: "Asset loader does not decode UV textures: $DIR/textures/displacement_height.png ignored — the input falls back to its constant value." } +lights: 2 +light 0: distant name Some("/World/Sun") lpe None pmf 0.5 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 1: dome name Some("/World/Sky") lpe None pmf 0.5 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 3 geometries, PrimitiveBreakdown { triangles: 57346, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 57346, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=49152:588ea63489626d95 camera=49152:588ea63489626d95 shadow=49152:588ea63489626d95 indirect=49152:588ea63489626d95 +geom 1: material #1 Signature { kind: "MaterialX", cutout: false, straight: false, boundary: false, emits: false, uv: true, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv Some(0) shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=8192:09a07fd1d7c1e185 camera=8192:09a07fd1d7c1e185 shadow=8192:09a07fd1d7c1e185 indirect=8192:09a07fd1d7c1e185 +geom 2: material #2 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:7e019eeecf5cbbd6 camera=2:7e019eeecf5cbbd6 shadow=2:7e019eeecf5cbbd6 indirect=2:7e019eeecf5cbbd6 +provenance material /World/Materials/Height: MaterialOrigin { slots: [2], displaced: false } +provenance material /World/Materials/HeightMtlx: MaterialOrigin { slots: [1], displaced: true } +provenance material /World/Materials/Puffed: MaterialOrigin { slots: [0], displaced: true } +provenance light /World/Sky: LightOrigin { index: 1, geoms: 3..3 } +provenance light /World/Sun: LightOrigin { index: 0, geoms: 3..3 } +provenance geometry 0..1: /World/Cube +provenance geometry 1..2: /World/GroundMtlx +provenance geometry 2..3: /World/Ground +provenance mesh: MeshOrigin { geom_id: 0, slot: 0, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 1, slot: 1, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 2, slot: 2, baked: true, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 1464050912281562449, n_points: 24578, n_indices: 98304, n_uvs: None, smooth: true, material: 0 }), placements: 1, shared: false, displaced: true } +provenance mesh slot 1: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 3365857826316044740, n_points: 4225, n_indices: 16384, n_uvs: Some(4225), smooth: true, material: 1 }), placements: 1, shared: false, displaced: true } +provenance mesh slot 2: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 14095911038168715313, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 2 }), placements: 1, shared: false, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 6, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/World/Cam"), cameras: ["/World/Cam"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/World/Cam"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/displacement_usda-03e54e80075ba30c-1.image b/crates/crust-core/tests/data/import_baselines/displacement_usda-03e54e80075ba30c-1.image new file mode 100644 index 000000000..59b96f9ae --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/displacement_usda-03e54e80075ba30c-1.image @@ -0,0 +1 @@ +320x180 16spp clamp-off 88b3f84e2b23bbb8 diff --git a/crates/crust-core/tests/data/import_baselines/displacement_usda-180936ed9cbacb0b-1.digest b/crates/crust-core/tests/data/import_baselines/displacement_usda-180936ed9cbacb0b-1.digest new file mode 100644 index 000000000..2ec73a63f --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/displacement_usda-180936ed9cbacb0b-1.digest @@ -0,0 +1,35 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/World/Cam") +camera: Camera { origin: Vec3A(0.0, 3.0, 5.4), lower_left_corner: Vec3A(-7.551013, -5.6783953, -1.1365309), horizontal: Vec3A(15.102026, -0.0, 0.0), vertical: Vec3A(0.0, 7.35679, -4.247445), u: Vec3A(1.0, -0.0, 0.0), v: Vec3A(0.0, 0.8660253, -0.5), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: Some("/Render/settings") +settings: RenderSettings { samples_per_pixel: 64, max_depth: 4, width: 320, height: 180, region: PixelRect { x0: 0, y0: 0, x1: 320, y1: 180 }, min_samples_per_pixel: 16, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 18.0, aperture: [20.955, 15.2908], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 10.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/displacement.usda"], invisible_overrides: Some(0) } +layer: $DIR/displacement.usda +lights: 2 +light 0: distant name Some("/World/Sun") lpe None pmf 0.5 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 1: dome name Some("/World/Sky") lpe None pmf 0.5 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 3 geometries, PrimitiveBreakdown { triangles: 65536, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 65536, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=49152:588ea63489626d95 camera=49152:588ea63489626d95 shadow=49152:588ea63489626d95 indirect=49152:588ea63489626d95 +geom 1: material #1 Signature { kind: "MaterialX", cutout: false, straight: false, boundary: false, emits: false, uv: true, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv Some(0) shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=8192:71bc9112dcaebc8d camera=8192:71bc9112dcaebc8d shadow=8192:71bc9112dcaebc8d indirect=8192:71bc9112dcaebc8d +geom 2: material #2 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=8192:d4e6a20fb07b1349 camera=8192:d4e6a20fb07b1349 shadow=8192:d4e6a20fb07b1349 indirect=8192:d4e6a20fb07b1349 +provenance material /World/Materials/Height: MaterialOrigin { slots: [2], displaced: true } +provenance material /World/Materials/HeightMtlx: MaterialOrigin { slots: [1], displaced: true } +provenance material /World/Materials/Puffed: MaterialOrigin { slots: [0], displaced: true } +provenance light /World/Sky: LightOrigin { index: 1, geoms: 3..3 } +provenance light /World/Sun: LightOrigin { index: 0, geoms: 3..3 } +provenance geometry 0..1: /World/Cube +provenance geometry 1..2: /World/GroundMtlx +provenance geometry 2..3: /World/Ground +provenance mesh: MeshOrigin { geom_id: 0, slot: 0, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 1, slot: 1, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 2, slot: 2, baked: true, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 1464050912281562449, n_points: 24578, n_indices: 98304, n_uvs: None, smooth: true, material: 0 }), placements: 1, shared: false, displaced: true } +provenance mesh slot 1: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 3365857826316044740, n_points: 4225, n_indices: 16384, n_uvs: Some(4225), smooth: true, material: 1 }), placements: 1, shared: false, displaced: true } +provenance mesh slot 2: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 3365857826316044740, n_points: 4225, n_indices: 16384, n_uvs: Some(4225), smooth: true, material: 2 }), placements: 1, shared: false, displaced: true } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 6, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/World/Cam"), cameras: ["/World/Cam"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/World/Cam"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/displacement_usda-180936ed9cbacb0b-1.image b/crates/crust-core/tests/data/import_baselines/displacement_usda-180936ed9cbacb0b-1.image new file mode 100644 index 000000000..340f20ea5 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/displacement_usda-180936ed9cbacb0b-1.image @@ -0,0 +1 @@ +320x180 16spp clamp-off f6b0646028628054 diff --git a/crates/crust-core/tests/data/import_baselines/displacement_usda-4db664e792f21a27-1.digest b/crates/crust-core/tests/data/import_baselines/displacement_usda-4db664e792f21a27-1.digest new file mode 100644 index 000000000..2ec73a63f --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/displacement_usda-4db664e792f21a27-1.digest @@ -0,0 +1,35 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/World/Cam") +camera: Camera { origin: Vec3A(0.0, 3.0, 5.4), lower_left_corner: Vec3A(-7.551013, -5.6783953, -1.1365309), horizontal: Vec3A(15.102026, -0.0, 0.0), vertical: Vec3A(0.0, 7.35679, -4.247445), u: Vec3A(1.0, -0.0, 0.0), v: Vec3A(0.0, 0.8660253, -0.5), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: Some("/Render/settings") +settings: RenderSettings { samples_per_pixel: 64, max_depth: 4, width: 320, height: 180, region: PixelRect { x0: 0, y0: 0, x1: 320, y1: 180 }, min_samples_per_pixel: 16, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 18.0, aperture: [20.955, 15.2908], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 10.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/displacement.usda"], invisible_overrides: Some(0) } +layer: $DIR/displacement.usda +lights: 2 +light 0: distant name Some("/World/Sun") lpe None pmf 0.5 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 1: dome name Some("/World/Sky") lpe None pmf 0.5 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 3 geometries, PrimitiveBreakdown { triangles: 65536, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 65536, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=49152:588ea63489626d95 camera=49152:588ea63489626d95 shadow=49152:588ea63489626d95 indirect=49152:588ea63489626d95 +geom 1: material #1 Signature { kind: "MaterialX", cutout: false, straight: false, boundary: false, emits: false, uv: true, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv Some(0) shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=8192:71bc9112dcaebc8d camera=8192:71bc9112dcaebc8d shadow=8192:71bc9112dcaebc8d indirect=8192:71bc9112dcaebc8d +geom 2: material #2 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=8192:d4e6a20fb07b1349 camera=8192:d4e6a20fb07b1349 shadow=8192:d4e6a20fb07b1349 indirect=8192:d4e6a20fb07b1349 +provenance material /World/Materials/Height: MaterialOrigin { slots: [2], displaced: true } +provenance material /World/Materials/HeightMtlx: MaterialOrigin { slots: [1], displaced: true } +provenance material /World/Materials/Puffed: MaterialOrigin { slots: [0], displaced: true } +provenance light /World/Sky: LightOrigin { index: 1, geoms: 3..3 } +provenance light /World/Sun: LightOrigin { index: 0, geoms: 3..3 } +provenance geometry 0..1: /World/Cube +provenance geometry 1..2: /World/GroundMtlx +provenance geometry 2..3: /World/Ground +provenance mesh: MeshOrigin { geom_id: 0, slot: 0, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 1, slot: 1, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 2, slot: 2, baked: true, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 1464050912281562449, n_points: 24578, n_indices: 98304, n_uvs: None, smooth: true, material: 0 }), placements: 1, shared: false, displaced: true } +provenance mesh slot 1: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 3365857826316044740, n_points: 4225, n_indices: 16384, n_uvs: Some(4225), smooth: true, material: 1 }), placements: 1, shared: false, displaced: true } +provenance mesh slot 2: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 3365857826316044740, n_points: 4225, n_indices: 16384, n_uvs: Some(4225), smooth: true, material: 2 }), placements: 1, shared: false, displaced: true } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 6, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/World/Cam"), cameras: ["/World/Cam"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/World/Cam"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/displacement_usda-4db664e792f21a27-1.image b/crates/crust-core/tests/data/import_baselines/displacement_usda-4db664e792f21a27-1.image new file mode 100644 index 000000000..340f20ea5 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/displacement_usda-4db664e792f21a27-1.image @@ -0,0 +1 @@ +320x180 16spp clamp-off f6b0646028628054 diff --git a/crates/crust-core/tests/data/import_baselines/displacement_usda-5e2aa9f4f1dfd37e-1.digest b/crates/crust-core/tests/data/import_baselines/displacement_usda-5e2aa9f4f1dfd37e-1.digest new file mode 100644 index 000000000..f6a02c518 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/displacement_usda-5e2aa9f4f1dfd37e-1.digest @@ -0,0 +1,35 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/World/Cam") +camera: Camera { origin: Vec3A(0.0, 3.0, 5.4), lower_left_corner: Vec3A(-7.551013, -5.6783953, -1.1365309), horizontal: Vec3A(15.102026, -0.0, 0.0), vertical: Vec3A(0.0, 7.35679, -4.247445), u: Vec3A(1.0, -0.0, 0.0), v: Vec3A(0.0, 0.8660253, -0.5), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: Some("/Render/settings") +settings: RenderSettings { samples_per_pixel: 64, max_depth: 4, width: 320, height: 180, region: PixelRect { x0: 0, y0: 0, x1: 320, y1: 180 }, min_samples_per_pixel: 16, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 18.0, aperture: [20.955, 15.2908], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 10.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/displacement.usda"], invisible_overrides: Some(0) } +layer: $DIR/displacement.usda +lights: 2 +light 0: distant name Some("/World/Sun") lpe None pmf 0.5 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 1: dome name Some("/World/Sky") lpe None pmf 0.5 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 3 geometries, PrimitiveBreakdown { triangles: 65536, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 65536, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=49152:588ea63489626d95 camera=49152:588ea63489626d95 shadow=49152:588ea63489626d95 indirect=49152:588ea63489626d95 +geom 1: material #1 Signature { kind: "MaterialX", cutout: false, straight: false, boundary: false, emits: false, uv: true, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv Some(0) shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=8192:71bc9112dcaebc8d camera=8192:71bc9112dcaebc8d shadow=8192:71bc9112dcaebc8d indirect=8192:71bc9112dcaebc8d +geom 2: material #2 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=8192:d4e6a20fb07b1349 camera=8192:d4e6a20fb07b1349 shadow=8192:d4e6a20fb07b1349 indirect=8192:d4e6a20fb07b1349 +provenance material /World/Materials/Height: MaterialOrigin { slots: [2], displaced: true } +provenance material /World/Materials/HeightMtlx: MaterialOrigin { slots: [1], displaced: true } +provenance material /World/Materials/Puffed: MaterialOrigin { slots: [0], displaced: true } +provenance light /World/Sky: LightOrigin { index: 1, geoms: 3..3 } +provenance light /World/Sun: LightOrigin { index: 0, geoms: 3..3 } +provenance geometry 0..1: /World/Cube +provenance geometry 1..2: /World/GroundMtlx +provenance geometry 2..3: /World/Ground +provenance mesh: MeshOrigin { geom_id: 0, slot: 0, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 1, slot: 1, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 2, slot: 2, baked: true, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 1464050912281562449, n_points: 24578, n_indices: 98304, n_uvs: None, smooth: true, material: 0 }), placements: 1, shared: false, displaced: true } +provenance mesh slot 1: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 3365857826316044740, n_points: 4225, n_indices: 16384, n_uvs: Some(4225), smooth: true, material: 1 }), placements: 1, shared: false, displaced: true } +provenance mesh slot 2: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 3365857826316044740, n_points: 4225, n_indices: 16384, n_uvs: Some(4225), smooth: true, material: 2 }), placements: 1, shared: false, displaced: true } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: true, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 6, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/World/Cam"), cameras: ["/World/Cam"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/World/Cam"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/displacement_usda-5e2aa9f4f1dfd37e-1.image b/crates/crust-core/tests/data/import_baselines/displacement_usda-5e2aa9f4f1dfd37e-1.image new file mode 100644 index 000000000..340f20ea5 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/displacement_usda-5e2aa9f4f1dfd37e-1.image @@ -0,0 +1 @@ +320x180 16spp clamp-off f6b0646028628054 diff --git a/crates/crust-core/tests/data/import_baselines/displacement_usda-f5f1d4dfaa9feea3-1.digest b/crates/crust-core/tests/data/import_baselines/displacement_usda-f5f1d4dfaa9feea3-1.digest new file mode 100644 index 000000000..f05b4a6c0 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/displacement_usda-f5f1d4dfaa9feea3-1.digest @@ -0,0 +1,36 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/World/Cam") +camera: Camera { origin: Vec3A(0.0, 3.0, 5.4), lower_left_corner: Vec3A(-7.551013, -5.6783953, -1.1365309), horizontal: Vec3A(15.102026, -0.0, 0.0), vertical: Vec3A(0.0, 7.35679, -4.247445), u: Vec3A(1.0, -0.0, 0.0), v: Vec3A(0.0, 0.8660253, -0.5), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: Some("/Render/settings") +settings: RenderSettings { samples_per_pixel: 64, max_depth: 4, width: 320, height: 180, region: PixelRect { x0: 0, y0: 0, x1: 320, y1: 180 }, min_samples_per_pixel: 16, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 18.0, aperture: [20.955, 15.2908], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 10.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/displacement.usda"], invisible_overrides: Some(0) } +layer: $DIR/displacement.usda +warning: Warning { code: AssetUnsupportedByHost, kind: Skipped, count: 2, prims: [], message: "Asset loader does not decode UV textures: $DIR/textures/displacement_height.png ignored — the input falls back to its constant value." } +lights: 2 +light 0: distant name Some("/World/Sun") lpe None pmf 0.5 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 1: dome name Some("/World/Sky") lpe None pmf 0.5 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 3 geometries, PrimitiveBreakdown { triangles: 57346, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 57346, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=49152:588ea63489626d95 camera=49152:588ea63489626d95 shadow=49152:588ea63489626d95 indirect=49152:588ea63489626d95 +geom 1: material #1 Signature { kind: "MaterialX", cutout: false, straight: false, boundary: false, emits: false, uv: true, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv Some(0) shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=8192:09a07fd1d7c1e185 camera=8192:09a07fd1d7c1e185 shadow=8192:09a07fd1d7c1e185 indirect=8192:09a07fd1d7c1e185 +geom 2: material #2 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:7e019eeecf5cbbd6 camera=2:7e019eeecf5cbbd6 shadow=2:7e019eeecf5cbbd6 indirect=2:7e019eeecf5cbbd6 +provenance material /World/Materials/Height: MaterialOrigin { slots: [2], displaced: false } +provenance material /World/Materials/HeightMtlx: MaterialOrigin { slots: [1], displaced: true } +provenance material /World/Materials/Puffed: MaterialOrigin { slots: [0], displaced: true } +provenance light /World/Sky: LightOrigin { index: 1, geoms: 3..3 } +provenance light /World/Sun: LightOrigin { index: 0, geoms: 3..3 } +provenance geometry 0..1: /World/Cube +provenance geometry 1..2: /World/GroundMtlx +provenance geometry 2..3: /World/Ground +provenance mesh: MeshOrigin { geom_id: 0, slot: 0, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 1, slot: 1, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 2, slot: 2, baked: true, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 1464050912281562449, n_points: 24578, n_indices: 98304, n_uvs: None, smooth: true, material: 0 }), placements: 1, shared: false, displaced: true } +provenance mesh slot 1: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 3365857826316044740, n_points: 4225, n_indices: 16384, n_uvs: Some(4225), smooth: true, material: 1 }), placements: 1, shared: false, displaced: true } +provenance mesh slot 2: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 14095911038168715313, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 2 }), placements: 1, shared: false, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 6, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/World/Cam"), cameras: ["/World/Cam"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/World/Cam"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/displacement_usda-f5f1d4dfaa9feea3-1.image b/crates/crust-core/tests/data/import_baselines/displacement_usda-f5f1d4dfaa9feea3-1.image new file mode 100644 index 000000000..59b96f9ae --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/displacement_usda-f5f1d4dfaa9feea3-1.image @@ -0,0 +1 @@ +320x180 16spp clamp-off 88b3f84e2b23bbb8 diff --git a/crates/crust-core/tests/data/import_baselines/displacement_usda-f5f1d4dfaa9feea3-2.digest b/crates/crust-core/tests/data/import_baselines/displacement_usda-f5f1d4dfaa9feea3-2.digest new file mode 100644 index 000000000..f05b4a6c0 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/displacement_usda-f5f1d4dfaa9feea3-2.digest @@ -0,0 +1,36 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/World/Cam") +camera: Camera { origin: Vec3A(0.0, 3.0, 5.4), lower_left_corner: Vec3A(-7.551013, -5.6783953, -1.1365309), horizontal: Vec3A(15.102026, -0.0, 0.0), vertical: Vec3A(0.0, 7.35679, -4.247445), u: Vec3A(1.0, -0.0, 0.0), v: Vec3A(0.0, 0.8660253, -0.5), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: Some("/Render/settings") +settings: RenderSettings { samples_per_pixel: 64, max_depth: 4, width: 320, height: 180, region: PixelRect { x0: 0, y0: 0, x1: 320, y1: 180 }, min_samples_per_pixel: 16, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 18.0, aperture: [20.955, 15.2908], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 10.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/displacement.usda"], invisible_overrides: Some(0) } +layer: $DIR/displacement.usda +warning: Warning { code: AssetUnsupportedByHost, kind: Skipped, count: 2, prims: [], message: "Asset loader does not decode UV textures: $DIR/textures/displacement_height.png ignored — the input falls back to its constant value." } +lights: 2 +light 0: distant name Some("/World/Sun") lpe None pmf 0.5 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 1: dome name Some("/World/Sky") lpe None pmf 0.5 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 3 geometries, PrimitiveBreakdown { triangles: 57346, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 57346, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=49152:588ea63489626d95 camera=49152:588ea63489626d95 shadow=49152:588ea63489626d95 indirect=49152:588ea63489626d95 +geom 1: material #1 Signature { kind: "MaterialX", cutout: false, straight: false, boundary: false, emits: false, uv: true, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv Some(0) shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=8192:09a07fd1d7c1e185 camera=8192:09a07fd1d7c1e185 shadow=8192:09a07fd1d7c1e185 indirect=8192:09a07fd1d7c1e185 +geom 2: material #2 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:7e019eeecf5cbbd6 camera=2:7e019eeecf5cbbd6 shadow=2:7e019eeecf5cbbd6 indirect=2:7e019eeecf5cbbd6 +provenance material /World/Materials/Height: MaterialOrigin { slots: [2], displaced: false } +provenance material /World/Materials/HeightMtlx: MaterialOrigin { slots: [1], displaced: true } +provenance material /World/Materials/Puffed: MaterialOrigin { slots: [0], displaced: true } +provenance light /World/Sky: LightOrigin { index: 1, geoms: 3..3 } +provenance light /World/Sun: LightOrigin { index: 0, geoms: 3..3 } +provenance geometry 0..1: /World/Cube +provenance geometry 1..2: /World/GroundMtlx +provenance geometry 2..3: /World/Ground +provenance mesh: MeshOrigin { geom_id: 0, slot: 0, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 1, slot: 1, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 2, slot: 2, baked: true, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 1464050912281562449, n_points: 24578, n_indices: 98304, n_uvs: None, smooth: true, material: 0 }), placements: 1, shared: false, displaced: true } +provenance mesh slot 1: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 3365857826316044740, n_points: 4225, n_indices: 16384, n_uvs: Some(4225), smooth: true, material: 1 }), placements: 1, shared: false, displaced: true } +provenance mesh slot 2: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 14095911038168715313, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 2 }), placements: 1, shared: false, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 6, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/World/Cam"), cameras: ["/World/Cam"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/World/Cam"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/displacement_usda-f5f1d4dfaa9feea3-2.image b/crates/crust-core/tests/data/import_baselines/displacement_usda-f5f1d4dfaa9feea3-2.image new file mode 100644 index 000000000..59b96f9ae --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/displacement_usda-f5f1d4dfaa9feea3-2.image @@ -0,0 +1 @@ +320x180 16spp clamp-off 88b3f84e2b23bbb8 diff --git a/crates/crust-core/tests/data/import_baselines/dof_default_lens_usda-c199c396bb781cc0-1.digest b/crates/crust-core/tests/data/import_baselines/dof_default_lens_usda-c199c396bb781cc0-1.digest new file mode 100644 index 000000000..a431e868d --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/dof_default_lens_usda-c199c396bb781cc0-1.digest @@ -0,0 +1,16 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/World/Cam") +camera: Camera { origin: Vec3A(0.0, 0.0, 0.0), lower_left_corner: Vec3A(-1.3591824, -0.7645401, -5.0), horizontal: Vec3A(2.7183647, 0.0, 0.0), vertical: Vec3A(0.0, 1.5290802, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 1.25, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: None +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 640, height: 360, region: PixelRect { x0: 0, y0: 0, x1: 640, y1: 360 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 50.0, aperture: [20.955, 15.2908], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 2.0, focus_distance: 5.0 }), depth_of_field: true, motion_blur: false, layer_stack: ["$DIR/dof_default_lens.usda"], invisible_overrides: Some(0) } +layer: $DIR/dof_default_lens.usda +lights: 0 +volumes: 0 +world: 0 geometries, PrimitiveBreakdown { triangles: 0, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 0, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/World/Cam"), cameras: ["/World/Cam"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/World/Cam"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/dof_default_lens_usda-c199c396bb781cc0-1.image b/crates/crust-core/tests/data/import_baselines/dof_default_lens_usda-c199c396bb781cc0-1.image new file mode 100644 index 000000000..c734c5b1d --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/dof_default_lens_usda-c199c396bb781cc0-1.image @@ -0,0 +1 @@ +640x360 16spp clamp-off a04a09c0d4b5e325 diff --git a/crates/crust-core/tests/data/import_baselines/dof_default_usda-57e78e0586982b2f-1.digest b/crates/crust-core/tests/data/import_baselines/dof_default_usda-57e78e0586982b2f-1.digest new file mode 100644 index 000000000..c1e7bd7a0 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/dof_default_usda-57e78e0586982b2f-1.digest @@ -0,0 +1,18 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/World/other") +camera: Camera { origin: Vec3A(0.0, 0.0, 0.0), lower_left_corner: Vec3A(-2.7183647, -1.5290802, -10.0), horizontal: Vec3A(5.4367294, 0.0, 0.0), vertical: Vec3A(0.0, 3.0581603, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: Some("/Render/settings") +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 64, height: 36, region: PixelRect { x0: 0, y0: 0, x1: 64, y1: 36 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 50.0, aperture: [20.955, 15.2908], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 10.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/dof_default.usda"], invisible_overrides: Some(0) } +layer: $DIR/dof_default.usda +lights: 0 +volumes: 0 +world: 1 geometries, PrimitiveBreakdown { triangles: 0, spheres: 1, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 0, spheres: 1, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:fb1e7d48790aec95 camera=1:fb1e7d48790aec95 shadow=1:fb1e7d48790aec95 indirect=1:fb1e7d48790aec95 +provenance geometry 0..1: /World/ball +provenance spheres: [0] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/World/other"), cameras: ["/World/other", "/World/cam"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/World/other"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/dof_default_usda-57e78e0586982b2f-1.image b/crates/crust-core/tests/data/import_baselines/dof_default_usda-57e78e0586982b2f-1.image new file mode 100644 index 000000000..f4ebc1648 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/dof_default_usda-57e78e0586982b2f-1.image @@ -0,0 +1 @@ +64x36 16spp clamp-off 1028d44458cc9325 diff --git a/crates/crust-core/tests/data/import_baselines/dof_disabled_bad_unit_usda-b76c543fc6398eaa-1.digest b/crates/crust-core/tests/data/import_baselines/dof_disabled_bad_unit_usda-b76c543fc6398eaa-1.digest new file mode 100644 index 000000000..c296e7543 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/dof_disabled_bad_unit_usda-b76c543fc6398eaa-1.digest @@ -0,0 +1,16 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/World/Cam") +camera: Camera { origin: Vec3A(0.0, 0.0, 0.0), lower_left_corner: Vec3A(-1.3591824, -0.7645401, -5.0), horizontal: Vec3A(2.7183647, 0.0, 0.0), vertical: Vec3A(0.0, 1.5290802, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: Some("/Render/settings") +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 640, height: 360, region: PixelRect { x0: 0, y0: 0, x1: 640, y1: 360 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: false, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 50.0, aperture: [20.955, 15.2908], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 2.0, focus_distance: 5.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/dof_disabled_bad_unit.usda"], invisible_overrides: Some(0) } +layer: $DIR/dof_disabled_bad_unit.usda +lights: 0 +volumes: 0 +world: 0 geometries, PrimitiveBreakdown { triangles: 0, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 0, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/World/Cam"), cameras: ["/World/Cam"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/World/Cam"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/dof_disabled_bad_unit_usda-b76c543fc6398eaa-1.image b/crates/crust-core/tests/data/import_baselines/dof_disabled_bad_unit_usda-b76c543fc6398eaa-1.image new file mode 100644 index 000000000..c734c5b1d --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/dof_disabled_bad_unit_usda-b76c543fc6398eaa-1.image @@ -0,0 +1 @@ +640x360 16spp clamp-off a04a09c0d4b5e325 diff --git a/crates/crust-core/tests/data/import_baselines/dof_disabled_usda-420b407ea5317d3e-1.digest b/crates/crust-core/tests/data/import_baselines/dof_disabled_usda-420b407ea5317d3e-1.digest new file mode 100644 index 000000000..c6a02a34b --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/dof_disabled_usda-420b407ea5317d3e-1.digest @@ -0,0 +1,16 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/World/Cam") +camera: Camera { origin: Vec3A(0.0, 0.0, 0.0), lower_left_corner: Vec3A(-1.3591824, -0.7645401, -5.0), horizontal: Vec3A(2.7183647, 0.0, 0.0), vertical: Vec3A(0.0, 1.5290802, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: Some("/Render/settings") +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 640, height: 360, region: PixelRect { x0: 0, y0: 0, x1: 640, y1: 360 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: false, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 50.0, aperture: [20.955, 15.2908], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 2.0, focus_distance: 5.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/dof_disabled.usda"], invisible_overrides: Some(0) } +layer: $DIR/dof_disabled.usda +lights: 0 +volumes: 0 +world: 0 geometries, PrimitiveBreakdown { triangles: 0, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 0, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/World/Cam"), cameras: ["/World/Cam"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/World/Cam"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/dof_disabled_usda-420b407ea5317d3e-1.image b/crates/crust-core/tests/data/import_baselines/dof_disabled_usda-420b407ea5317d3e-1.image new file mode 100644 index 000000000..c734c5b1d --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/dof_disabled_usda-420b407ea5317d3e-1.image @@ -0,0 +1 @@ +640x360 16spp clamp-off a04a09c0d4b5e325 diff --git a/crates/crust-core/tests/data/import_baselines/dof_fallback_lens_usda-bff40e44436746b1-1.digest b/crates/crust-core/tests/data/import_baselines/dof_fallback_lens_usda-bff40e44436746b1-1.digest new file mode 100644 index 000000000..2276aa891 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/dof_fallback_lens_usda-bff40e44436746b1-1.digest @@ -0,0 +1,17 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: None +camera: Camera { origin: Vec3A(15.0, 3.0, 3.0), lower_left_corner: Vec3A(4.8863316, -0.044797063, 4.174048), horizontal: Vec3A(1.2295314, 0.0, -6.147657), vertical: Vec3A(-0.44830504, 3.4967792, -0.08966101), u: Vec3A(0.19611613, 0.0, -0.9805807), v: Vec3A(-0.1271232, 0.991561, -0.02542464), lens_radius: 0.05, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: None +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 640, height: 360, region: PixelRect { x0: 0, y0: 0, x1: 640, y1: 360 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: None, depth_of_field: true, motion_blur: false, layer_stack: ["$DIR/dof_fallback_lens.usda"], invisible_overrides: Some(0) } +layer: $DIR/dof_fallback_lens.usda +warning: Warning { code: CameraMissing, kind: Skipped, count: 1, prims: [], message: "USD stage has no UsdGeomCamera — falling back to world::get_settings camera" } +lights: 0 +volumes: 0 +world: 0 geometries, PrimitiveBreakdown { triangles: 0, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 0, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: None, cameras: [], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: None, offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/dof_fallback_lens_usda-bff40e44436746b1-1.image b/crates/crust-core/tests/data/import_baselines/dof_fallback_lens_usda-bff40e44436746b1-1.image new file mode 100644 index 000000000..c734c5b1d --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/dof_fallback_lens_usda-bff40e44436746b1-1.image @@ -0,0 +1 @@ +640x360 16spp clamp-off a04a09c0d4b5e325 diff --git a/crates/crust-core/tests/data/import_baselines/dof_fallback_pinhole_usda-c69160a93b244f8f-1.digest b/crates/crust-core/tests/data/import_baselines/dof_fallback_pinhole_usda-c69160a93b244f8f-1.digest new file mode 100644 index 000000000..b76376859 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/dof_fallback_pinhole_usda-c69160a93b244f8f-1.digest @@ -0,0 +1,17 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: None +camera: Camera { origin: Vec3A(15.0, 3.0, 3.0), lower_left_corner: Vec3A(4.8863316, -0.044797063, 4.174048), horizontal: Vec3A(1.2295314, 0.0, -6.147657), vertical: Vec3A(-0.44830504, 3.4967792, -0.08966101), u: Vec3A(0.19611613, 0.0, -0.9805807), v: Vec3A(-0.1271232, 0.991561, -0.02542464), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: Some("/Render/settings") +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 640, height: 360, region: PixelRect { x0: 0, y0: 0, x1: 640, y1: 360 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: false, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: None, depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/dof_fallback_pinhole.usda"], invisible_overrides: Some(0) } +layer: $DIR/dof_fallback_pinhole.usda +warning: Warning { code: CameraMissing, kind: Skipped, count: 1, prims: [], message: "USD stage has no UsdGeomCamera — falling back to world::get_settings camera" } +lights: 0 +volumes: 0 +world: 0 geometries, PrimitiveBreakdown { triangles: 0, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 0, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: None, cameras: [], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: None, offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/dof_fallback_pinhole_usda-c69160a93b244f8f-1.image b/crates/crust-core/tests/data/import_baselines/dof_fallback_pinhole_usda-c69160a93b244f8f-1.image new file mode 100644 index 000000000..c734c5b1d --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/dof_fallback_pinhole_usda-c69160a93b244f8f-1.image @@ -0,0 +1 @@ +640x360 16spp clamp-off a04a09c0d4b5e325 diff --git a/crates/crust-core/tests/data/import_baselines/dof_product_off_usda-ec7655fdc64080b7-1.digest b/crates/crust-core/tests/data/import_baselines/dof_product_off_usda-ec7655fdc64080b7-1.digest new file mode 100644 index 000000000..75a90a322 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/dof_product_off_usda-ec7655fdc64080b7-1.digest @@ -0,0 +1,18 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/World/other") +camera: Camera { origin: Vec3A(0.0, 0.0, 0.0), lower_left_corner: Vec3A(-2.7183647, -1.5290802, -10.0), horizontal: Vec3A(5.4367294, 0.0, 0.0), vertical: Vec3A(0.0, 3.0581603, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: Some("/Render/settings") +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 640, height: 360, region: PixelRect { x0: 0, y0: 0, x1: 640, y1: 360 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: false, exposure_scale: 1.0 } +aovs: AovRequest { products: [AovProduct { prim_path: "/Render/p", name: "p.exr", vars: [AovVar { prim_path: "/Render/beauty", name: "beauty", channel_prefix: None, source: Color, components: 4, precision: Float, accumulation: Filtered, clear: 0.0, expression: None, raw: false, variance: false }], attributes: [] }], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 50.0, aperture: [20.955, 15.2908], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 10.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/dof_product_off.usda"], invisible_overrides: Some(0) } +layer: $DIR/dof_product_off.usda +lights: 0 +volumes: 0 +world: 1 geometries, PrimitiveBreakdown { triangles: 0, spheres: 1, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 0, spheres: 1, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:fb1e7d48790aec95 camera=1:fb1e7d48790aec95 shadow=1:fb1e7d48790aec95 indirect=1:fb1e7d48790aec95 +provenance geometry 0..1: /World/ball +provenance spheres: [0] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/World/other"), cameras: ["/World/other", "/World/cam"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/World/other"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/dof_product_off_usda-ec7655fdc64080b7-1.image b/crates/crust-core/tests/data/import_baselines/dof_product_off_usda-ec7655fdc64080b7-1.image new file mode 100644 index 000000000..c734c5b1d --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/dof_product_off_usda-ec7655fdc64080b7-1.image @@ -0,0 +1 @@ +640x360 16spp clamp-off a04a09c0d4b5e325 diff --git a/crates/crust-core/tests/data/import_baselines/dof_product_on_usda-642bf95d97820f23-1.digest b/crates/crust-core/tests/data/import_baselines/dof_product_on_usda-642bf95d97820f23-1.digest new file mode 100644 index 000000000..03b31a02e --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/dof_product_on_usda-642bf95d97820f23-1.digest @@ -0,0 +1,16 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/World/Cam") +camera: Camera { origin: Vec3A(0.0, 0.0, 0.0), lower_left_corner: Vec3A(-1.3591824, -0.7645401, -5.0), horizontal: Vec3A(2.7183647, 0.0, 0.0), vertical: Vec3A(0.0, 1.5290802, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 1.25, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: Some("/Render/settings") +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 640, height: 360, region: PixelRect { x0: 0, y0: 0, x1: 640, y1: 360 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [AovProduct { prim_path: "/Render/p", name: "p.exr", vars: [AovVar { prim_path: "/Render/beauty", name: "beauty", channel_prefix: None, source: Color, components: 4, precision: Float, accumulation: Filtered, clear: 0.0, expression: None, raw: false, variance: false }], attributes: [] }], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 50.0, aperture: [20.955, 15.2908], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 2.0, focus_distance: 5.0 }), depth_of_field: true, motion_blur: false, layer_stack: ["$DIR/dof_product_on.usda"], invisible_overrides: Some(0) } +layer: $DIR/dof_product_on.usda +lights: 0 +volumes: 0 +world: 0 geometries, PrimitiveBreakdown { triangles: 0, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 0, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/World/Cam"), cameras: ["/World/Cam"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/World/Cam"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/dof_product_on_usda-642bf95d97820f23-1.image b/crates/crust-core/tests/data/import_baselines/dof_product_on_usda-642bf95d97820f23-1.image new file mode 100644 index 000000000..c734c5b1d --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/dof_product_on_usda-642bf95d97820f23-1.image @@ -0,0 +1 @@ +640x360 16spp clamp-off a04a09c0d4b5e325 diff --git a/crates/crust-core/tests/data/import_baselines/dof_product_on_usda-9b87c5f936703494-1.digest b/crates/crust-core/tests/data/import_baselines/dof_product_on_usda-9b87c5f936703494-1.digest new file mode 100644 index 000000000..eb2340070 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/dof_product_on_usda-9b87c5f936703494-1.digest @@ -0,0 +1,18 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/World/other") +camera: Camera { origin: Vec3A(0.0, 0.0, 0.0), lower_left_corner: Vec3A(-2.7183647, -1.5290802, -10.0), horizontal: Vec3A(5.4367294, 0.0, 0.0), vertical: Vec3A(0.0, 3.0581603, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: Some("/Render/settings") +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 640, height: 360, region: PixelRect { x0: 0, y0: 0, x1: 640, y1: 360 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [AovProduct { prim_path: "/Render/p", name: "p.exr", vars: [AovVar { prim_path: "/Render/beauty", name: "beauty", channel_prefix: None, source: Color, components: 4, precision: Float, accumulation: Filtered, clear: 0.0, expression: None, raw: false, variance: false }], attributes: [] }], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 50.0, aperture: [20.955, 15.2908], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 10.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/dof_product_on.usda"], invisible_overrides: Some(0) } +layer: $DIR/dof_product_on.usda +lights: 0 +volumes: 0 +world: 1 geometries, PrimitiveBreakdown { triangles: 0, spheres: 1, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 0, spheres: 1, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:fb1e7d48790aec95 camera=1:fb1e7d48790aec95 shadow=1:fb1e7d48790aec95 indirect=1:fb1e7d48790aec95 +provenance geometry 0..1: /World/ball +provenance spheres: [0] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/World/other"), cameras: ["/World/other", "/World/cam"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/World/other"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/dof_product_on_usda-9b87c5f936703494-1.image b/crates/crust-core/tests/data/import_baselines/dof_product_on_usda-9b87c5f936703494-1.image new file mode 100644 index 000000000..c734c5b1d --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/dof_product_on_usda-9b87c5f936703494-1.image @@ -0,0 +1 @@ +640x360 16spp clamp-off a04a09c0d4b5e325 diff --git a/crates/crust-core/tests/data/import_baselines/dof_products_agree_usda-1f54c058d539370a-1.digest b/crates/crust-core/tests/data/import_baselines/dof_products_agree_usda-1f54c058d539370a-1.digest new file mode 100644 index 000000000..8daef5239 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/dof_products_agree_usda-1f54c058d539370a-1.digest @@ -0,0 +1,18 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/World/other") +camera: Camera { origin: Vec3A(0.0, 0.0, 0.0), lower_left_corner: Vec3A(-2.7183647, -1.5290802, -10.0), horizontal: Vec3A(5.4367294, 0.0, 0.0), vertical: Vec3A(0.0, 3.0581603, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: Some("/Render/settings") +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 640, height: 360, region: PixelRect { x0: 0, y0: 0, x1: 640, y1: 360 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: false, exposure_scale: 1.0 } +aovs: AovRequest { products: [AovProduct { prim_path: "/Render/a", name: "a.exr", vars: [AovVar { prim_path: "/Render/beauty", name: "beauty", channel_prefix: None, source: Color, components: 4, precision: Float, accumulation: Filtered, clear: 0.0, expression: None, raw: false, variance: false }], attributes: [] }, AovProduct { prim_path: "/Render/b", name: "b.exr", vars: [AovVar { prim_path: "/Render/beauty", name: "beauty", channel_prefix: None, source: Color, components: 4, precision: Float, accumulation: Filtered, clear: 0.0, expression: None, raw: false, variance: false }], attributes: [] }], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 50.0, aperture: [20.955, 15.2908], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 10.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/dof_products_agree.usda"], invisible_overrides: Some(0) } +layer: $DIR/dof_products_agree.usda +lights: 0 +volumes: 0 +world: 1 geometries, PrimitiveBreakdown { triangles: 0, spheres: 1, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 0, spheres: 1, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:fb1e7d48790aec95 camera=1:fb1e7d48790aec95 shadow=1:fb1e7d48790aec95 indirect=1:fb1e7d48790aec95 +provenance geometry 0..1: /World/ball +provenance spheres: [0] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/World/other"), cameras: ["/World/other", "/World/cam"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/World/other"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/dof_products_differ_usda-a379642f2edc4361-1.digest b/crates/crust-core/tests/data/import_baselines/dof_products_differ_usda-a379642f2edc4361-1.digest new file mode 100644 index 000000000..57d3195ae --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/dof_products_differ_usda-a379642f2edc4361-1.digest @@ -0,0 +1,19 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/World/other") +camera: Camera { origin: Vec3A(0.0, 0.0, 0.0), lower_left_corner: Vec3A(-2.7183647, -1.5290802, -10.0), horizontal: Vec3A(5.4367294, 0.0, 0.0), vertical: Vec3A(0.0, 3.0581603, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: Some("/Render/settings") +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 640, height: 360, region: PixelRect { x0: 0, y0: 0, x1: 640, y1: 360 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: false, exposure_scale: 1.0 } +aovs: AovRequest { products: [AovProduct { prim_path: "/Render/a", name: "a.exr", vars: [AovVar { prim_path: "/Render/beauty", name: "beauty", channel_prefix: None, source: Color, components: 4, precision: Float, accumulation: Filtered, clear: 0.0, expression: None, raw: false, variance: false }], attributes: [] }, AovProduct { prim_path: "/Render/b", name: "b.exr", vars: [AovVar { prim_path: "/Render/beauty", name: "beauty", channel_prefix: None, source: Color, components: 4, precision: Float, accumulation: Filtered, clear: 0.0, expression: None, raw: false, variance: false }], attributes: [] }], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 50.0, aperture: [20.955, 15.2908], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 10.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/dof_products_differ.usda"], invisible_overrides: Some(0) } +layer: $DIR/dof_products_differ.usda +warning: Warning { code: ProductDepthOfFieldMismatch, kind: Approximated, count: 1, prims: ["/Render/b"], message: "/Render/b: asks for depth of field on, but the render has it off (the first product's); its file is written with that" } +lights: 0 +volumes: 0 +world: 1 geometries, PrimitiveBreakdown { triangles: 0, spheres: 1, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 0, spheres: 1, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:fb1e7d48790aec95 camera=1:fb1e7d48790aec95 shadow=1:fb1e7d48790aec95 indirect=1:fb1e7d48790aec95 +provenance geometry 0..1: /World/ball +provenance spheres: [0] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/World/other"), cameras: ["/World/other", "/World/cam"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/World/other"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/dof_products_differ_usda-a379642f2edc4361-1.image b/crates/crust-core/tests/data/import_baselines/dof_products_differ_usda-a379642f2edc4361-1.image new file mode 100644 index 000000000..c734c5b1d --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/dof_products_differ_usda-a379642f2edc4361-1.image @@ -0,0 +1 @@ +640x360 16spp clamp-off a04a09c0d4b5e325 diff --git a/crates/crust-core/tests/data/import_baselines/dof_products_disagree_usda-8e35ec3ea864f596-1.digest b/crates/crust-core/tests/data/import_baselines/dof_products_disagree_usda-8e35ec3ea864f596-1.digest new file mode 100644 index 000000000..3c34085ef --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/dof_products_disagree_usda-8e35ec3ea864f596-1.digest @@ -0,0 +1,17 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/World/Cam") +camera: Camera { origin: Vec3A(0.0, 0.0, 0.0), lower_left_corner: Vec3A(-1.3591824, -0.7645401, -5.0), horizontal: Vec3A(2.7183647, 0.0, 0.0), vertical: Vec3A(0.0, 1.5290802, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: Some("/Render/settings") +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 640, height: 360, region: PixelRect { x0: 0, y0: 0, x1: 640, y1: 360 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: false, exposure_scale: 1.0 } +aovs: AovRequest { products: [AovProduct { prim_path: "/Render/p", name: "p.exr", vars: [AovVar { prim_path: "/Render/beauty", name: "beauty", channel_prefix: None, source: Color, components: 4, precision: Float, accumulation: Filtered, clear: 0.0, expression: None, raw: false, variance: false }], attributes: [] }, AovProduct { prim_path: "/Render/q", name: "q.exr", vars: [AovVar { prim_path: "/Render/beauty", name: "beauty", channel_prefix: None, source: Color, components: 4, precision: Float, accumulation: Filtered, clear: 0.0, expression: None, raw: false, variance: false }], attributes: [] }], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 50.0, aperture: [20.955, 15.2908], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 2.0, focus_distance: 5.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/dof_products_disagree.usda"], invisible_overrides: Some(0) } +layer: $DIR/dof_products_disagree.usda +warning: Warning { code: ProductDepthOfFieldMismatch, kind: Approximated, count: 1, prims: ["/Render/q"], message: "/Render/q: asks for depth of field on, but the render has it off (the first product's); its file is written with that" } +lights: 0 +volumes: 0 +world: 0 geometries, PrimitiveBreakdown { triangles: 0, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 0, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/World/Cam"), cameras: ["/World/Cam"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/World/Cam"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/dof_products_disagree_usda-8e35ec3ea864f596-1.image b/crates/crust-core/tests/data/import_baselines/dof_products_disagree_usda-8e35ec3ea864f596-1.image new file mode 100644 index 000000000..c734c5b1d --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/dof_products_disagree_usda-8e35ec3ea864f596-1.image @@ -0,0 +1 @@ +640x360 16spp clamp-off a04a09c0d4b5e325 diff --git a/crates/crust-core/tests/data/import_baselines/dof_settings_only_usda-dc3a7d2e89c34444-1.digest b/crates/crust-core/tests/data/import_baselines/dof_settings_only_usda-dc3a7d2e89c34444-1.digest new file mode 100644 index 000000000..1a14abb6b --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/dof_settings_only_usda-dc3a7d2e89c34444-1.digest @@ -0,0 +1,18 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/World/other") +camera: Camera { origin: Vec3A(0.0, 0.0, 0.0), lower_left_corner: Vec3A(-2.7183647, -1.5290802, -10.0), horizontal: Vec3A(5.4367294, 0.0, 0.0), vertical: Vec3A(0.0, 3.0581603, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: Some("/Render/settings") +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 640, height: 360, region: PixelRect { x0: 0, y0: 0, x1: 640, y1: 360 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: false, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 50.0, aperture: [20.955, 15.2908], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 10.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/dof_settings_only.usda"], invisible_overrides: Some(0) } +layer: $DIR/dof_settings_only.usda +lights: 0 +volumes: 0 +world: 1 geometries, PrimitiveBreakdown { triangles: 0, spheres: 1, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 0, spheres: 1, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:fb1e7d48790aec95 camera=1:fb1e7d48790aec95 shadow=1:fb1e7d48790aec95 indirect=1:fb1e7d48790aec95 +provenance geometry 0..1: /World/ball +provenance spheres: [0] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/World/other"), cameras: ["/World/other", "/World/cam"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/World/other"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/dof_settings_only_usda-dc3a7d2e89c34444-1.image b/crates/crust-core/tests/data/import_baselines/dof_settings_only_usda-dc3a7d2e89c34444-1.image new file mode 100644 index 000000000..c734c5b1d --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/dof_settings_only_usda-dc3a7d2e89c34444-1.image @@ -0,0 +1 @@ +640x360 16spp clamp-off a04a09c0d4b5e325 diff --git a/crates/crust-core/tests/data/import_baselines/dome_backdrop_usda-06f3801d332f35bd-1.digest b/crates/crust-core/tests/data/import_baselines/dome_backdrop_usda-06f3801d332f35bd-1.digest new file mode 100644 index 000000000..af517a334 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/dome_backdrop_usda-06f3801d332f35bd-1.digest @@ -0,0 +1,29 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/World/Cam") +camera: Camera { origin: Vec3A(0.0, 2.3, 8.5), lower_left_corner: Vec3A(-4.8185296, -1.7956586, -1.0226688), horizontal: Vec3A(9.637059, -0.0, 0.0), vertical: Vec3A(0.0, 5.4078546, -0.7600245), u: Vec3A(1.0, -0.0, 0.0), v: Vec3A(0.0, 0.9902681, -0.13917312), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: Some("/Render/settings") +settings: RenderSettings { samples_per_pixel: 32, max_depth: 8, width: 240, height: 136, region: PixelRect { x0: 0, y0: 0, x1: 240, y1: 136 }, min_samples_per_pixel: 16, variance_threshold: 0.02, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 28.0, aperture: [20.955, 15.2908], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 10.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/dome_backdrop.usda"], invisible_overrides: Some(0) } +layer: $DIR/dome_backdrop.usda +lights: 1 +light 0: dome name Some("/World/Hdri") lpe None pmf 1.0 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 3 geometries, PrimitiveBreakdown { triangles: 2, spheres: 2, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 2, spheres: 2, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:f6fecef7f865e305 camera=2:f6fecef7f865e305 shadow=2:f6fecef7f865e305 indirect=2:f6fecef7f865e305 +geom 1: material #1 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:571f57a6ae5dd002 camera=1:571f57a6ae5dd002 shadow=1:571f57a6ae5dd002 indirect=1:571f57a6ae5dd002 +geom 2: material #2 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:bb4ca329e9417ce2 camera=1:bb4ca329e9417ce2 shadow=1:bb4ca329e9417ce2 indirect=1:bb4ca329e9417ce2 +provenance material /World/Looks/Clay: MaterialOrigin { slots: [1], displaced: false } +provenance material /World/Looks/Ground: MaterialOrigin { slots: [0], displaced: false } +provenance material /World/Looks/Mirror: MaterialOrigin { slots: [2], displaced: false } +provenance light /World/Hdri: LightOrigin { index: 0, geoms: 3..3 } +provenance geometry 0..1: /World/Floor +provenance geometry 1..2: /World/Matte +provenance geometry 2..3: /World/Mirror +provenance mesh: MeshOrigin { geom_id: 0, slot: 0, baked: true, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 10492340787237780741, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [1, 2] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: true, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/World/Cam"), cameras: ["/World/Cam"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/World/Cam"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/dome_backdrop_usda-06f3801d332f35bd-1.image b/crates/crust-core/tests/data/import_baselines/dome_backdrop_usda-06f3801d332f35bd-1.image new file mode 100644 index 000000000..52834a60b --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/dome_backdrop_usda-06f3801d332f35bd-1.image @@ -0,0 +1 @@ +240x136 16spp clamp-off 9fe71171392c329e diff --git a/crates/crust-core/tests/data/import_baselines/dome_backdrop_usda-1bbad8f86d8900fb-1.digest b/crates/crust-core/tests/data/import_baselines/dome_backdrop_usda-1bbad8f86d8900fb-1.digest new file mode 100644 index 000000000..0e1bd65b7 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/dome_backdrop_usda-1bbad8f86d8900fb-1.digest @@ -0,0 +1,29 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/World/Cam") +camera: Camera { origin: Vec3A(0.0, 2.3, 8.5), lower_left_corner: Vec3A(-4.8185296, -1.7956586, -1.0226688), horizontal: Vec3A(9.637059, -0.0, 0.0), vertical: Vec3A(0.0, 5.4078546, -0.7600245), u: Vec3A(1.0, -0.0, 0.0), v: Vec3A(0.0, 0.9902681, -0.13917312), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: Some("/Render/settings") +settings: RenderSettings { samples_per_pixel: 32, max_depth: 8, width: 240, height: 136, region: PixelRect { x0: 0, y0: 0, x1: 240, y1: 136 }, min_samples_per_pixel: 16, variance_threshold: 0.02, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 28.0, aperture: [20.955, 15.2908], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 10.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/dome_backdrop.usda"], invisible_overrides: Some(0) } +layer: $DIR/dome_backdrop.usda +lights: 1 +light 0: dome name Some("/World/Hdri") lpe None pmf 1.0 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 3 geometries, PrimitiveBreakdown { triangles: 2, spheres: 2, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 2, spheres: 2, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:f6fecef7f865e305 camera=2:f6fecef7f865e305 shadow=2:f6fecef7f865e305 indirect=2:f6fecef7f865e305 +geom 1: material #1 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:571f57a6ae5dd002 camera=1:571f57a6ae5dd002 shadow=1:571f57a6ae5dd002 indirect=1:571f57a6ae5dd002 +geom 2: material #2 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:bb4ca329e9417ce2 camera=1:bb4ca329e9417ce2 shadow=1:bb4ca329e9417ce2 indirect=1:bb4ca329e9417ce2 +provenance material /World/Looks/Clay: MaterialOrigin { slots: [1], displaced: false } +provenance material /World/Looks/Ground: MaterialOrigin { slots: [0], displaced: false } +provenance material /World/Looks/Mirror: MaterialOrigin { slots: [2], displaced: false } +provenance light /World/Hdri: LightOrigin { index: 0, geoms: 3..3 } +provenance geometry 0..1: /World/Floor +provenance geometry 1..2: /World/Matte +provenance geometry 2..3: /World/Mirror +provenance mesh: MeshOrigin { geom_id: 0, slot: 0, baked: true, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 10492340787237780741, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [1, 2] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/World/Cam"), cameras: ["/World/Cam"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/World/Cam"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/dome_backdrop_usda-1bbad8f86d8900fb-1.image b/crates/crust-core/tests/data/import_baselines/dome_backdrop_usda-1bbad8f86d8900fb-1.image new file mode 100644 index 000000000..52834a60b --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/dome_backdrop_usda-1bbad8f86d8900fb-1.image @@ -0,0 +1 @@ +240x136 16spp clamp-off 9fe71171392c329e diff --git a/crates/crust-core/tests/data/import_baselines/dome_backdrop_usda-1bbad8f86d8900fb-2.digest b/crates/crust-core/tests/data/import_baselines/dome_backdrop_usda-1bbad8f86d8900fb-2.digest new file mode 100644 index 000000000..0e1bd65b7 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/dome_backdrop_usda-1bbad8f86d8900fb-2.digest @@ -0,0 +1,29 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/World/Cam") +camera: Camera { origin: Vec3A(0.0, 2.3, 8.5), lower_left_corner: Vec3A(-4.8185296, -1.7956586, -1.0226688), horizontal: Vec3A(9.637059, -0.0, 0.0), vertical: Vec3A(0.0, 5.4078546, -0.7600245), u: Vec3A(1.0, -0.0, 0.0), v: Vec3A(0.0, 0.9902681, -0.13917312), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: Some("/Render/settings") +settings: RenderSettings { samples_per_pixel: 32, max_depth: 8, width: 240, height: 136, region: PixelRect { x0: 0, y0: 0, x1: 240, y1: 136 }, min_samples_per_pixel: 16, variance_threshold: 0.02, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 28.0, aperture: [20.955, 15.2908], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 10.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/dome_backdrop.usda"], invisible_overrides: Some(0) } +layer: $DIR/dome_backdrop.usda +lights: 1 +light 0: dome name Some("/World/Hdri") lpe None pmf 1.0 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 3 geometries, PrimitiveBreakdown { triangles: 2, spheres: 2, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 2, spheres: 2, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:f6fecef7f865e305 camera=2:f6fecef7f865e305 shadow=2:f6fecef7f865e305 indirect=2:f6fecef7f865e305 +geom 1: material #1 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:571f57a6ae5dd002 camera=1:571f57a6ae5dd002 shadow=1:571f57a6ae5dd002 indirect=1:571f57a6ae5dd002 +geom 2: material #2 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:bb4ca329e9417ce2 camera=1:bb4ca329e9417ce2 shadow=1:bb4ca329e9417ce2 indirect=1:bb4ca329e9417ce2 +provenance material /World/Looks/Clay: MaterialOrigin { slots: [1], displaced: false } +provenance material /World/Looks/Ground: MaterialOrigin { slots: [0], displaced: false } +provenance material /World/Looks/Mirror: MaterialOrigin { slots: [2], displaced: false } +provenance light /World/Hdri: LightOrigin { index: 0, geoms: 3..3 } +provenance geometry 0..1: /World/Floor +provenance geometry 1..2: /World/Matte +provenance geometry 2..3: /World/Mirror +provenance mesh: MeshOrigin { geom_id: 0, slot: 0, baked: true, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 10492340787237780741, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [1, 2] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/World/Cam"), cameras: ["/World/Cam"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/World/Cam"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/dome_backdrop_usda-1bbad8f86d8900fb-2.image b/crates/crust-core/tests/data/import_baselines/dome_backdrop_usda-1bbad8f86d8900fb-2.image new file mode 100644 index 000000000..52834a60b --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/dome_backdrop_usda-1bbad8f86d8900fb-2.image @@ -0,0 +1 @@ +240x136 16spp clamp-off 9fe71171392c329e diff --git a/crates/crust-core/tests/data/import_baselines/dome_backdrop_usda-2d5a500fad6dcfad-1.digest b/crates/crust-core/tests/data/import_baselines/dome_backdrop_usda-2d5a500fad6dcfad-1.digest new file mode 100644 index 000000000..0e1bd65b7 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/dome_backdrop_usda-2d5a500fad6dcfad-1.digest @@ -0,0 +1,29 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/World/Cam") +camera: Camera { origin: Vec3A(0.0, 2.3, 8.5), lower_left_corner: Vec3A(-4.8185296, -1.7956586, -1.0226688), horizontal: Vec3A(9.637059, -0.0, 0.0), vertical: Vec3A(0.0, 5.4078546, -0.7600245), u: Vec3A(1.0, -0.0, 0.0), v: Vec3A(0.0, 0.9902681, -0.13917312), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: Some("/Render/settings") +settings: RenderSettings { samples_per_pixel: 32, max_depth: 8, width: 240, height: 136, region: PixelRect { x0: 0, y0: 0, x1: 240, y1: 136 }, min_samples_per_pixel: 16, variance_threshold: 0.02, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 28.0, aperture: [20.955, 15.2908], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 10.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/dome_backdrop.usda"], invisible_overrides: Some(0) } +layer: $DIR/dome_backdrop.usda +lights: 1 +light 0: dome name Some("/World/Hdri") lpe None pmf 1.0 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 3 geometries, PrimitiveBreakdown { triangles: 2, spheres: 2, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 2, spheres: 2, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:f6fecef7f865e305 camera=2:f6fecef7f865e305 shadow=2:f6fecef7f865e305 indirect=2:f6fecef7f865e305 +geom 1: material #1 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:571f57a6ae5dd002 camera=1:571f57a6ae5dd002 shadow=1:571f57a6ae5dd002 indirect=1:571f57a6ae5dd002 +geom 2: material #2 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:bb4ca329e9417ce2 camera=1:bb4ca329e9417ce2 shadow=1:bb4ca329e9417ce2 indirect=1:bb4ca329e9417ce2 +provenance material /World/Looks/Clay: MaterialOrigin { slots: [1], displaced: false } +provenance material /World/Looks/Ground: MaterialOrigin { slots: [0], displaced: false } +provenance material /World/Looks/Mirror: MaterialOrigin { slots: [2], displaced: false } +provenance light /World/Hdri: LightOrigin { index: 0, geoms: 3..3 } +provenance geometry 0..1: /World/Floor +provenance geometry 1..2: /World/Matte +provenance geometry 2..3: /World/Mirror +provenance mesh: MeshOrigin { geom_id: 0, slot: 0, baked: true, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 10492340787237780741, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [1, 2] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/World/Cam"), cameras: ["/World/Cam"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/World/Cam"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/dome_backdrop_usda-2d5a500fad6dcfad-1.image b/crates/crust-core/tests/data/import_baselines/dome_backdrop_usda-2d5a500fad6dcfad-1.image new file mode 100644 index 000000000..52834a60b --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/dome_backdrop_usda-2d5a500fad6dcfad-1.image @@ -0,0 +1 @@ +240x136 16spp clamp-off 9fe71171392c329e diff --git a/crates/crust-core/tests/data/import_baselines/dome_backdrop_usda-4222ab94f00b4ba4-1.digest b/crates/crust-core/tests/data/import_baselines/dome_backdrop_usda-4222ab94f00b4ba4-1.digest new file mode 100644 index 000000000..af517a334 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/dome_backdrop_usda-4222ab94f00b4ba4-1.digest @@ -0,0 +1,29 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/World/Cam") +camera: Camera { origin: Vec3A(0.0, 2.3, 8.5), lower_left_corner: Vec3A(-4.8185296, -1.7956586, -1.0226688), horizontal: Vec3A(9.637059, -0.0, 0.0), vertical: Vec3A(0.0, 5.4078546, -0.7600245), u: Vec3A(1.0, -0.0, 0.0), v: Vec3A(0.0, 0.9902681, -0.13917312), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: Some("/Render/settings") +settings: RenderSettings { samples_per_pixel: 32, max_depth: 8, width: 240, height: 136, region: PixelRect { x0: 0, y0: 0, x1: 240, y1: 136 }, min_samples_per_pixel: 16, variance_threshold: 0.02, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 28.0, aperture: [20.955, 15.2908], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 10.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/dome_backdrop.usda"], invisible_overrides: Some(0) } +layer: $DIR/dome_backdrop.usda +lights: 1 +light 0: dome name Some("/World/Hdri") lpe None pmf 1.0 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 3 geometries, PrimitiveBreakdown { triangles: 2, spheres: 2, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 2, spheres: 2, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:f6fecef7f865e305 camera=2:f6fecef7f865e305 shadow=2:f6fecef7f865e305 indirect=2:f6fecef7f865e305 +geom 1: material #1 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:571f57a6ae5dd002 camera=1:571f57a6ae5dd002 shadow=1:571f57a6ae5dd002 indirect=1:571f57a6ae5dd002 +geom 2: material #2 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:bb4ca329e9417ce2 camera=1:bb4ca329e9417ce2 shadow=1:bb4ca329e9417ce2 indirect=1:bb4ca329e9417ce2 +provenance material /World/Looks/Clay: MaterialOrigin { slots: [1], displaced: false } +provenance material /World/Looks/Ground: MaterialOrigin { slots: [0], displaced: false } +provenance material /World/Looks/Mirror: MaterialOrigin { slots: [2], displaced: false } +provenance light /World/Hdri: LightOrigin { index: 0, geoms: 3..3 } +provenance geometry 0..1: /World/Floor +provenance geometry 1..2: /World/Matte +provenance geometry 2..3: /World/Mirror +provenance mesh: MeshOrigin { geom_id: 0, slot: 0, baked: true, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 10492340787237780741, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [1, 2] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: true, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/World/Cam"), cameras: ["/World/Cam"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/World/Cam"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/dome_backdrop_usda-4222ab94f00b4ba4-1.image b/crates/crust-core/tests/data/import_baselines/dome_backdrop_usda-4222ab94f00b4ba4-1.image new file mode 100644 index 000000000..52834a60b --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/dome_backdrop_usda-4222ab94f00b4ba4-1.image @@ -0,0 +1 @@ +240x136 16spp clamp-off 9fe71171392c329e diff --git a/crates/crust-core/tests/data/import_baselines/dome_backdrop_usda-43c08f98bb3b74e6-1.digest b/crates/crust-core/tests/data/import_baselines/dome_backdrop_usda-43c08f98bb3b74e6-1.digest new file mode 100644 index 000000000..2e942df65 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/dome_backdrop_usda-43c08f98bb3b74e6-1.digest @@ -0,0 +1,29 @@ +time: Some(12.0) +working space: Linear Rec.709 (sRGB) +camera path: Some("/World/Cam") +camera: Camera { origin: Vec3A(0.0, 2.3, 8.5), lower_left_corner: Vec3A(-4.8185296, -1.7956586, -1.0226688), horizontal: Vec3A(9.637059, -0.0, 0.0), vertical: Vec3A(0.0, 5.4078546, -0.7600245), u: Vec3A(1.0, -0.0, 0.0), v: Vec3A(0.0, 0.9902681, -0.13917312), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: Some("/Render/settings") +settings: RenderSettings { samples_per_pixel: 32, max_depth: 8, width: 240, height: 136, region: PixelRect { x0: 0, y0: 0, x1: 240, y1: 136 }, min_samples_per_pixel: 16, variance_threshold: 0.02, adaptive_neighbour_tolerance: 1.0, frame: 12, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 28.0, aperture: [20.955, 15.2908], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 10.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/dome_backdrop.usda"], invisible_overrides: Some(0) } +layer: $DIR/dome_backdrop.usda +lights: 1 +light 0: dome name Some("/World/Hdri") lpe None pmf 1.0 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 3 geometries, PrimitiveBreakdown { triangles: 2, spheres: 2, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 2, spheres: 2, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:f6fecef7f865e305 camera=2:f6fecef7f865e305 shadow=2:f6fecef7f865e305 indirect=2:f6fecef7f865e305 +geom 1: material #1 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:571f57a6ae5dd002 camera=1:571f57a6ae5dd002 shadow=1:571f57a6ae5dd002 indirect=1:571f57a6ae5dd002 +geom 2: material #2 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:bb4ca329e9417ce2 camera=1:bb4ca329e9417ce2 shadow=1:bb4ca329e9417ce2 indirect=1:bb4ca329e9417ce2 +provenance material /World/Looks/Clay: MaterialOrigin { slots: [1], displaced: false } +provenance material /World/Looks/Ground: MaterialOrigin { slots: [0], displaced: false } +provenance material /World/Looks/Mirror: MaterialOrigin { slots: [2], displaced: false } +provenance light /World/Hdri: LightOrigin { index: 0, geoms: 3..3 } +provenance geometry 0..1: /World/Floor +provenance geometry 1..2: /World/Matte +provenance geometry 2..3: /World/Mirror +provenance mesh: MeshOrigin { geom_id: 0, slot: 0, baked: true, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 10492340787237780741, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [1, 2] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: Some(12.0), camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: true, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/World/Cam"), cameras: ["/World/Cam"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/World/Cam"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/dome_backdrop_usda-43c08f98bb3b74e6-1.image b/crates/crust-core/tests/data/import_baselines/dome_backdrop_usda-43c08f98bb3b74e6-1.image new file mode 100644 index 000000000..e8e2259fa --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/dome_backdrop_usda-43c08f98bb3b74e6-1.image @@ -0,0 +1 @@ +240x136 16spp clamp-off 1b57b2888ce8eb35 diff --git a/crates/crust-core/tests/data/import_baselines/dome_backdrop_usda-7b71c02186033a9a-1.digest b/crates/crust-core/tests/data/import_baselines/dome_backdrop_usda-7b71c02186033a9a-1.digest new file mode 100644 index 000000000..af517a334 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/dome_backdrop_usda-7b71c02186033a9a-1.digest @@ -0,0 +1,29 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/World/Cam") +camera: Camera { origin: Vec3A(0.0, 2.3, 8.5), lower_left_corner: Vec3A(-4.8185296, -1.7956586, -1.0226688), horizontal: Vec3A(9.637059, -0.0, 0.0), vertical: Vec3A(0.0, 5.4078546, -0.7600245), u: Vec3A(1.0, -0.0, 0.0), v: Vec3A(0.0, 0.9902681, -0.13917312), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: Some("/Render/settings") +settings: RenderSettings { samples_per_pixel: 32, max_depth: 8, width: 240, height: 136, region: PixelRect { x0: 0, y0: 0, x1: 240, y1: 136 }, min_samples_per_pixel: 16, variance_threshold: 0.02, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 28.0, aperture: [20.955, 15.2908], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 10.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/dome_backdrop.usda"], invisible_overrides: Some(0) } +layer: $DIR/dome_backdrop.usda +lights: 1 +light 0: dome name Some("/World/Hdri") lpe None pmf 1.0 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 3 geometries, PrimitiveBreakdown { triangles: 2, spheres: 2, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 2, spheres: 2, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:f6fecef7f865e305 camera=2:f6fecef7f865e305 shadow=2:f6fecef7f865e305 indirect=2:f6fecef7f865e305 +geom 1: material #1 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:571f57a6ae5dd002 camera=1:571f57a6ae5dd002 shadow=1:571f57a6ae5dd002 indirect=1:571f57a6ae5dd002 +geom 2: material #2 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:bb4ca329e9417ce2 camera=1:bb4ca329e9417ce2 shadow=1:bb4ca329e9417ce2 indirect=1:bb4ca329e9417ce2 +provenance material /World/Looks/Clay: MaterialOrigin { slots: [1], displaced: false } +provenance material /World/Looks/Ground: MaterialOrigin { slots: [0], displaced: false } +provenance material /World/Looks/Mirror: MaterialOrigin { slots: [2], displaced: false } +provenance light /World/Hdri: LightOrigin { index: 0, geoms: 3..3 } +provenance geometry 0..1: /World/Floor +provenance geometry 1..2: /World/Matte +provenance geometry 2..3: /World/Mirror +provenance mesh: MeshOrigin { geom_id: 0, slot: 0, baked: true, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 10492340787237780741, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [1, 2] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: true, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/World/Cam"), cameras: ["/World/Cam"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/World/Cam"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/dome_backdrop_usda-7b71c02186033a9a-1.image b/crates/crust-core/tests/data/import_baselines/dome_backdrop_usda-7b71c02186033a9a-1.image new file mode 100644 index 000000000..52834a60b --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/dome_backdrop_usda-7b71c02186033a9a-1.image @@ -0,0 +1 @@ +240x136 16spp clamp-off 9fe71171392c329e diff --git a/crates/crust-core/tests/data/import_baselines/dome_backdrop_usda-88f2729f3b3188bb-1.digest b/crates/crust-core/tests/data/import_baselines/dome_backdrop_usda-88f2729f3b3188bb-1.digest new file mode 100644 index 000000000..af517a334 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/dome_backdrop_usda-88f2729f3b3188bb-1.digest @@ -0,0 +1,29 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/World/Cam") +camera: Camera { origin: Vec3A(0.0, 2.3, 8.5), lower_left_corner: Vec3A(-4.8185296, -1.7956586, -1.0226688), horizontal: Vec3A(9.637059, -0.0, 0.0), vertical: Vec3A(0.0, 5.4078546, -0.7600245), u: Vec3A(1.0, -0.0, 0.0), v: Vec3A(0.0, 0.9902681, -0.13917312), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: Some("/Render/settings") +settings: RenderSettings { samples_per_pixel: 32, max_depth: 8, width: 240, height: 136, region: PixelRect { x0: 0, y0: 0, x1: 240, y1: 136 }, min_samples_per_pixel: 16, variance_threshold: 0.02, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 28.0, aperture: [20.955, 15.2908], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 10.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/dome_backdrop.usda"], invisible_overrides: Some(0) } +layer: $DIR/dome_backdrop.usda +lights: 1 +light 0: dome name Some("/World/Hdri") lpe None pmf 1.0 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 3 geometries, PrimitiveBreakdown { triangles: 2, spheres: 2, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 2, spheres: 2, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:f6fecef7f865e305 camera=2:f6fecef7f865e305 shadow=2:f6fecef7f865e305 indirect=2:f6fecef7f865e305 +geom 1: material #1 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:571f57a6ae5dd002 camera=1:571f57a6ae5dd002 shadow=1:571f57a6ae5dd002 indirect=1:571f57a6ae5dd002 +geom 2: material #2 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:bb4ca329e9417ce2 camera=1:bb4ca329e9417ce2 shadow=1:bb4ca329e9417ce2 indirect=1:bb4ca329e9417ce2 +provenance material /World/Looks/Clay: MaterialOrigin { slots: [1], displaced: false } +provenance material /World/Looks/Ground: MaterialOrigin { slots: [0], displaced: false } +provenance material /World/Looks/Mirror: MaterialOrigin { slots: [2], displaced: false } +provenance light /World/Hdri: LightOrigin { index: 0, geoms: 3..3 } +provenance geometry 0..1: /World/Floor +provenance geometry 1..2: /World/Matte +provenance geometry 2..3: /World/Mirror +provenance mesh: MeshOrigin { geom_id: 0, slot: 0, baked: true, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 10492340787237780741, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [1, 2] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: true, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/World/Cam"), cameras: ["/World/Cam"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/World/Cam"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/dome_backdrop_usda-88f2729f3b3188bb-1.image b/crates/crust-core/tests/data/import_baselines/dome_backdrop_usda-88f2729f3b3188bb-1.image new file mode 100644 index 000000000..52834a60b --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/dome_backdrop_usda-88f2729f3b3188bb-1.image @@ -0,0 +1 @@ +240x136 16spp clamp-off 9fe71171392c329e diff --git a/crates/crust-core/tests/data/import_baselines/dome_backdrop_usda-9d834df56ca3b1ac-1.digest b/crates/crust-core/tests/data/import_baselines/dome_backdrop_usda-9d834df56ca3b1ac-1.digest new file mode 100644 index 000000000..af517a334 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/dome_backdrop_usda-9d834df56ca3b1ac-1.digest @@ -0,0 +1,29 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/World/Cam") +camera: Camera { origin: Vec3A(0.0, 2.3, 8.5), lower_left_corner: Vec3A(-4.8185296, -1.7956586, -1.0226688), horizontal: Vec3A(9.637059, -0.0, 0.0), vertical: Vec3A(0.0, 5.4078546, -0.7600245), u: Vec3A(1.0, -0.0, 0.0), v: Vec3A(0.0, 0.9902681, -0.13917312), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: Some("/Render/settings") +settings: RenderSettings { samples_per_pixel: 32, max_depth: 8, width: 240, height: 136, region: PixelRect { x0: 0, y0: 0, x1: 240, y1: 136 }, min_samples_per_pixel: 16, variance_threshold: 0.02, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 28.0, aperture: [20.955, 15.2908], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 10.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/dome_backdrop.usda"], invisible_overrides: Some(0) } +layer: $DIR/dome_backdrop.usda +lights: 1 +light 0: dome name Some("/World/Hdri") lpe None pmf 1.0 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 3 geometries, PrimitiveBreakdown { triangles: 2, spheres: 2, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 2, spheres: 2, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:f6fecef7f865e305 camera=2:f6fecef7f865e305 shadow=2:f6fecef7f865e305 indirect=2:f6fecef7f865e305 +geom 1: material #1 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:571f57a6ae5dd002 camera=1:571f57a6ae5dd002 shadow=1:571f57a6ae5dd002 indirect=1:571f57a6ae5dd002 +geom 2: material #2 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:bb4ca329e9417ce2 camera=1:bb4ca329e9417ce2 shadow=1:bb4ca329e9417ce2 indirect=1:bb4ca329e9417ce2 +provenance material /World/Looks/Clay: MaterialOrigin { slots: [1], displaced: false } +provenance material /World/Looks/Ground: MaterialOrigin { slots: [0], displaced: false } +provenance material /World/Looks/Mirror: MaterialOrigin { slots: [2], displaced: false } +provenance light /World/Hdri: LightOrigin { index: 0, geoms: 3..3 } +provenance geometry 0..1: /World/Floor +provenance geometry 1..2: /World/Matte +provenance geometry 2..3: /World/Mirror +provenance mesh: MeshOrigin { geom_id: 0, slot: 0, baked: true, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 10492340787237780741, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [1, 2] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: true, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/World/Cam"), cameras: ["/World/Cam"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/World/Cam"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/dome_backdrop_usda-9d834df56ca3b1ac-1.image b/crates/crust-core/tests/data/import_baselines/dome_backdrop_usda-9d834df56ca3b1ac-1.image new file mode 100644 index 000000000..52834a60b --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/dome_backdrop_usda-9d834df56ca3b1ac-1.image @@ -0,0 +1 @@ +240x136 16spp clamp-off 9fe71171392c329e diff --git a/crates/crust-core/tests/data/import_baselines/dome_backdrop_usda-af5d67f7909dc65a-1.digest b/crates/crust-core/tests/data/import_baselines/dome_backdrop_usda-af5d67f7909dc65a-1.digest new file mode 100644 index 000000000..865be4d90 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/dome_backdrop_usda-af5d67f7909dc65a-1.digest @@ -0,0 +1,29 @@ +time: Some(12.5) +working space: Linear Rec.709 (sRGB) +camera path: Some("/World/Cam") +camera: Camera { origin: Vec3A(0.0, 2.3, 8.5), lower_left_corner: Vec3A(-4.8185296, -1.7956586, -1.0226688), horizontal: Vec3A(9.637059, -0.0, 0.0), vertical: Vec3A(0.0, 5.4078546, -0.7600245), u: Vec3A(1.0, -0.0, 0.0), v: Vec3A(0.0, 0.9902681, -0.13917312), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: Some("/Render/settings") +settings: RenderSettings { samples_per_pixel: 32, max_depth: 8, width: 240, height: 136, region: PixelRect { x0: 0, y0: 0, x1: 240, y1: 136 }, min_samples_per_pixel: 16, variance_threshold: 0.02, adaptive_neighbour_tolerance: 1.0, frame: 12, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 28.0, aperture: [20.955, 15.2908], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 10.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/dome_backdrop.usda"], invisible_overrides: Some(0) } +layer: $DIR/dome_backdrop.usda +lights: 1 +light 0: dome name Some("/World/Hdri") lpe None pmf 1.0 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 3 geometries, PrimitiveBreakdown { triangles: 2, spheres: 2, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 2, spheres: 2, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:f6fecef7f865e305 camera=2:f6fecef7f865e305 shadow=2:f6fecef7f865e305 indirect=2:f6fecef7f865e305 +geom 1: material #1 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:571f57a6ae5dd002 camera=1:571f57a6ae5dd002 shadow=1:571f57a6ae5dd002 indirect=1:571f57a6ae5dd002 +geom 2: material #2 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:bb4ca329e9417ce2 camera=1:bb4ca329e9417ce2 shadow=1:bb4ca329e9417ce2 indirect=1:bb4ca329e9417ce2 +provenance material /World/Looks/Clay: MaterialOrigin { slots: [1], displaced: false } +provenance material /World/Looks/Ground: MaterialOrigin { slots: [0], displaced: false } +provenance material /World/Looks/Mirror: MaterialOrigin { slots: [2], displaced: false } +provenance light /World/Hdri: LightOrigin { index: 0, geoms: 3..3 } +provenance geometry 0..1: /World/Floor +provenance geometry 1..2: /World/Matte +provenance geometry 2..3: /World/Mirror +provenance mesh: MeshOrigin { geom_id: 0, slot: 0, baked: true, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 10492340787237780741, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [1, 2] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: Some(12.5), camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: true, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/World/Cam"), cameras: ["/World/Cam"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/World/Cam"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/dome_backdrop_usda-af5d67f7909dc65a-1.image b/crates/crust-core/tests/data/import_baselines/dome_backdrop_usda-af5d67f7909dc65a-1.image new file mode 100644 index 000000000..e8e2259fa --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/dome_backdrop_usda-af5d67f7909dc65a-1.image @@ -0,0 +1 @@ +240x136 16spp clamp-off 1b57b2888ce8eb35 diff --git a/crates/crust-core/tests/data/import_baselines/dome_backdrop_usda-b592bc76e2706492-1.digest b/crates/crust-core/tests/data/import_baselines/dome_backdrop_usda-b592bc76e2706492-1.digest new file mode 100644 index 000000000..af517a334 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/dome_backdrop_usda-b592bc76e2706492-1.digest @@ -0,0 +1,29 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/World/Cam") +camera: Camera { origin: Vec3A(0.0, 2.3, 8.5), lower_left_corner: Vec3A(-4.8185296, -1.7956586, -1.0226688), horizontal: Vec3A(9.637059, -0.0, 0.0), vertical: Vec3A(0.0, 5.4078546, -0.7600245), u: Vec3A(1.0, -0.0, 0.0), v: Vec3A(0.0, 0.9902681, -0.13917312), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: Some("/Render/settings") +settings: RenderSettings { samples_per_pixel: 32, max_depth: 8, width: 240, height: 136, region: PixelRect { x0: 0, y0: 0, x1: 240, y1: 136 }, min_samples_per_pixel: 16, variance_threshold: 0.02, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 28.0, aperture: [20.955, 15.2908], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 10.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/dome_backdrop.usda"], invisible_overrides: Some(0) } +layer: $DIR/dome_backdrop.usda +lights: 1 +light 0: dome name Some("/World/Hdri") lpe None pmf 1.0 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 3 geometries, PrimitiveBreakdown { triangles: 2, spheres: 2, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 2, spheres: 2, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:f6fecef7f865e305 camera=2:f6fecef7f865e305 shadow=2:f6fecef7f865e305 indirect=2:f6fecef7f865e305 +geom 1: material #1 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:571f57a6ae5dd002 camera=1:571f57a6ae5dd002 shadow=1:571f57a6ae5dd002 indirect=1:571f57a6ae5dd002 +geom 2: material #2 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:bb4ca329e9417ce2 camera=1:bb4ca329e9417ce2 shadow=1:bb4ca329e9417ce2 indirect=1:bb4ca329e9417ce2 +provenance material /World/Looks/Clay: MaterialOrigin { slots: [1], displaced: false } +provenance material /World/Looks/Ground: MaterialOrigin { slots: [0], displaced: false } +provenance material /World/Looks/Mirror: MaterialOrigin { slots: [2], displaced: false } +provenance light /World/Hdri: LightOrigin { index: 0, geoms: 3..3 } +provenance geometry 0..1: /World/Floor +provenance geometry 1..2: /World/Matte +provenance geometry 2..3: /World/Mirror +provenance mesh: MeshOrigin { geom_id: 0, slot: 0, baked: true, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 10492340787237780741, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [1, 2] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: true, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/World/Cam"), cameras: ["/World/Cam"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/World/Cam"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/dome_backdrop_usda-b592bc76e2706492-1.image b/crates/crust-core/tests/data/import_baselines/dome_backdrop_usda-b592bc76e2706492-1.image new file mode 100644 index 000000000..52834a60b --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/dome_backdrop_usda-b592bc76e2706492-1.image @@ -0,0 +1 @@ +240x136 16spp clamp-off 9fe71171392c329e diff --git a/crates/crust-core/tests/data/import_baselines/dome_backdrop_usda-b9dc71e44c528187-1.digest b/crates/crust-core/tests/data/import_baselines/dome_backdrop_usda-b9dc71e44c528187-1.digest new file mode 100644 index 000000000..af517a334 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/dome_backdrop_usda-b9dc71e44c528187-1.digest @@ -0,0 +1,29 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/World/Cam") +camera: Camera { origin: Vec3A(0.0, 2.3, 8.5), lower_left_corner: Vec3A(-4.8185296, -1.7956586, -1.0226688), horizontal: Vec3A(9.637059, -0.0, 0.0), vertical: Vec3A(0.0, 5.4078546, -0.7600245), u: Vec3A(1.0, -0.0, 0.0), v: Vec3A(0.0, 0.9902681, -0.13917312), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: Some("/Render/settings") +settings: RenderSettings { samples_per_pixel: 32, max_depth: 8, width: 240, height: 136, region: PixelRect { x0: 0, y0: 0, x1: 240, y1: 136 }, min_samples_per_pixel: 16, variance_threshold: 0.02, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 28.0, aperture: [20.955, 15.2908], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 10.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/dome_backdrop.usda"], invisible_overrides: Some(0) } +layer: $DIR/dome_backdrop.usda +lights: 1 +light 0: dome name Some("/World/Hdri") lpe None pmf 1.0 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 3 geometries, PrimitiveBreakdown { triangles: 2, spheres: 2, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 2, spheres: 2, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:f6fecef7f865e305 camera=2:f6fecef7f865e305 shadow=2:f6fecef7f865e305 indirect=2:f6fecef7f865e305 +geom 1: material #1 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:571f57a6ae5dd002 camera=1:571f57a6ae5dd002 shadow=1:571f57a6ae5dd002 indirect=1:571f57a6ae5dd002 +geom 2: material #2 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:bb4ca329e9417ce2 camera=1:bb4ca329e9417ce2 shadow=1:bb4ca329e9417ce2 indirect=1:bb4ca329e9417ce2 +provenance material /World/Looks/Clay: MaterialOrigin { slots: [1], displaced: false } +provenance material /World/Looks/Ground: MaterialOrigin { slots: [0], displaced: false } +provenance material /World/Looks/Mirror: MaterialOrigin { slots: [2], displaced: false } +provenance light /World/Hdri: LightOrigin { index: 0, geoms: 3..3 } +provenance geometry 0..1: /World/Floor +provenance geometry 1..2: /World/Matte +provenance geometry 2..3: /World/Mirror +provenance mesh: MeshOrigin { geom_id: 0, slot: 0, baked: true, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 10492340787237780741, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [1, 2] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: true, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/World/Cam"), cameras: ["/World/Cam"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/World/Cam"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/dome_backdrop_usda-b9dc71e44c528187-1.image b/crates/crust-core/tests/data/import_baselines/dome_backdrop_usda-b9dc71e44c528187-1.image new file mode 100644 index 000000000..52834a60b --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/dome_backdrop_usda-b9dc71e44c528187-1.image @@ -0,0 +1 @@ +240x136 16spp clamp-off 9fe71171392c329e diff --git a/crates/crust-core/tests/data/import_baselines/dome_camera_off_usda-b5a9eac417c3bdbb-1.digest b/crates/crust-core/tests/data/import_baselines/dome_camera_off_usda-b5a9eac417c3bdbb-1.digest new file mode 100644 index 000000000..d1f76e73d --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/dome_camera_off_usda-b5a9eac417c3bdbb-1.digest @@ -0,0 +1,21 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: None +camera: Camera { origin: Vec3A(15.0, 3.0, 3.0), lower_left_corner: Vec3A(4.8863316, -0.044797063, 4.174048), horizontal: Vec3A(1.2295314, 0.0, -6.147657), vertical: Vec3A(-0.44830504, 3.4967792, -0.08966101), u: Vec3A(0.19611613, 0.0, -0.9805807), v: Vec3A(-0.1271232, 0.991561, -0.02542464), lens_radius: 0.05, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: Some("/Render/settings") +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 640, height: 360, region: PixelRect { x0: 0, y0: 0, x1: 640, y1: 360 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: None, depth_of_field: true, motion_blur: false, layer_stack: ["$DIR/dome_camera_off.usda"], invisible_overrides: Some(0) } +layer: $DIR/dome_camera_off.usda +warning: Warning { code: CameraMissing, kind: Skipped, count: 1, prims: [], message: "USD stage has no UsdGeomCamera — falling back to world::get_settings camera" } +lights: 1 +light 0: dome name Some("/World/Hdri") lpe None pmf 1.0 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 1 geometries, PrimitiveBreakdown { triangles: 0, spheres: 1, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 0, spheres: 1, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:fb1e7d48790aec95 camera=1:fb1e7d48790aec95 shadow=1:fb1e7d48790aec95 indirect=1:fb1e7d48790aec95 +provenance light /World/Hdri: LightOrigin { index: 0, geoms: 1..1 } +provenance geometry 0..1: /World/Ball +provenance spheres: [0] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: false, precomp: false, working: None, camera: None, cameras: [], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: None, offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/dome_camera_off_usda-b5a9eac417c3bdbb-1.image b/crates/crust-core/tests/data/import_baselines/dome_camera_off_usda-b5a9eac417c3bdbb-1.image new file mode 100644 index 000000000..d40488b39 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/dome_camera_off_usda-b5a9eac417c3bdbb-1.image @@ -0,0 +1 @@ +640x360 16spp clamp-off e0c982d4061fc1d3 diff --git a/crates/crust-core/tests/data/import_baselines/dome_crust_wins_usda-0bfe2eb5bc4f83c5-1.digest b/crates/crust-core/tests/data/import_baselines/dome_crust_wins_usda-0bfe2eb5bc4f83c5-1.digest new file mode 100644 index 000000000..7e1210abd --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/dome_crust_wins_usda-0bfe2eb5bc4f83c5-1.digest @@ -0,0 +1,19 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: None +camera: Camera { origin: Vec3A(15.0, 3.0, 3.0), lower_left_corner: Vec3A(4.8863316, -0.044797063, 4.174048), horizontal: Vec3A(1.2295314, 0.0, -6.147657), vertical: Vec3A(-0.44830504, 3.4967792, -0.08966101), u: Vec3A(0.19611613, 0.0, -0.9805807), v: Vec3A(-0.1271232, 0.991561, -0.02542464), lens_radius: 0.05, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: None +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 640, height: 360, region: PixelRect { x0: 0, y0: 0, x1: 640, y1: 360 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: None, depth_of_field: true, motion_blur: false, layer_stack: ["$DIR/dome_crust_wins.usda"], invisible_overrides: Some(0) } +layer: $DIR/dome_crust_wins.usda +warning: Warning { code: CameraMissing, kind: Skipped, count: 1, prims: [], message: "USD stage has no UsdGeomCamera — falling back to world::get_settings camera" } +lights: 1 +light 0: dome name Some("/World/Sky") lpe None pmf 1.0 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 0 geometries, PrimitiveBreakdown { triangles: 0, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 0, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +provenance light /World/Sky: LightOrigin { index: 0, geoms: 0..0 } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: None, cameras: [], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: None, offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/dome_crust_wins_usda-0bfe2eb5bc4f83c5-1.image b/crates/crust-core/tests/data/import_baselines/dome_crust_wins_usda-0bfe2eb5bc4f83c5-1.image new file mode 100644 index 000000000..b1fb14759 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/dome_crust_wins_usda-0bfe2eb5bc4f83c5-1.image @@ -0,0 +1 @@ +640x360 16spp clamp-off 1e3a61612e840325 diff --git a/crates/crust-core/tests/data/import_baselines/dome_default_usda-7c13b46b00b734f8-1.digest b/crates/crust-core/tests/data/import_baselines/dome_default_usda-7c13b46b00b734f8-1.digest new file mode 100644 index 000000000..4b0007ceb --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/dome_default_usda-7c13b46b00b734f8-1.digest @@ -0,0 +1,19 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: None +camera: Camera { origin: Vec3A(15.0, 3.0, 3.0), lower_left_corner: Vec3A(4.8863316, -0.044797063, 4.174048), horizontal: Vec3A(1.2295314, 0.0, -6.147657), vertical: Vec3A(-0.44830504, 3.4967792, -0.08966101), u: Vec3A(0.19611613, 0.0, -0.9805807), v: Vec3A(-0.1271232, 0.991561, -0.02542464), lens_radius: 0.05, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: None +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 640, height: 360, region: PixelRect { x0: 0, y0: 0, x1: 640, y1: 360 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: None, depth_of_field: true, motion_blur: false, layer_stack: ["$DIR/dome_default.usda"], invisible_overrides: Some(0) } +layer: $DIR/dome_default.usda +warning: Warning { code: CameraMissing, kind: Skipped, count: 1, prims: [], message: "USD stage has no UsdGeomCamera — falling back to world::get_settings camera" } +lights: 1 +light 0: dome name Some("/World/Sky") lpe None pmf 1.0 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 0 geometries, PrimitiveBreakdown { triangles: 0, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 0, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +provenance light /World/Sky: LightOrigin { index: 0, geoms: 0..0 } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: None, cameras: [], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: None, offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/dome_default_usda-7c13b46b00b734f8-1.image b/crates/crust-core/tests/data/import_baselines/dome_default_usda-7c13b46b00b734f8-1.image new file mode 100644 index 000000000..b1fb14759 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/dome_default_usda-7c13b46b00b734f8-1.image @@ -0,0 +1 @@ +640x360 16spp clamp-off 1e3a61612e840325 diff --git a/crates/crust-core/tests/data/import_baselines/dome_exclude_bsdf_usda-fb9c2dcc2b05783e-1.digest b/crates/crust-core/tests/data/import_baselines/dome_exclude_bsdf_usda-fb9c2dcc2b05783e-1.digest new file mode 100644 index 000000000..afb82c116 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/dome_exclude_bsdf_usda-fb9c2dcc2b05783e-1.digest @@ -0,0 +1,22 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/World/Cam") +camera: Camera { origin: Vec3A(0.0, 0.0, 8.0), lower_left_corner: Vec3A(-5.142858, -5.142858, -2.0), horizontal: Vec3A(10.285716, 0.0, 0.0), vertical: Vec3A(0.0, 10.285716, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: Some("/Render/settings") +settings: RenderSettings { samples_per_pixel: 16, max_depth: 2, width: 32, height: 32, region: PixelRect { x0: 0, y0: 0, x1: 32, y1: 32 }, min_samples_per_pixel: 16, variance_threshold: 0.0, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: BsdfOnly, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: None, light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 35.0, aperture: [36.0, 36.0], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 10.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/dome_exclude_bsdf.usda"], invisible_overrides: Some(0) } +layer: $DIR/dome_exclude_bsdf.usda +lights: 1 +light 0: dome name Some("/World/Sky") lpe None pmf 1.0 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 2 geometries, PrimitiveBreakdown { triangles: 0, spheres: 2, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 0, spheres: 2, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 0 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:b4f96552509cf2d8 camera=1:b4f96552509cf2d8 shadow=1:b4f96552509cf2d8 indirect=1:b4f96552509cf2d8 +geom 1: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 1 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:fd1d447404c6ef08 camera=1:fd1d447404c6ef08 shadow=1:fd1d447404c6ef08 indirect=1:fd1d447404c6ef08 +provenance light /World/Sky: LightOrigin { index: 0, geoms: 2..2 } +provenance geometry 0..1: /World/Prop +provenance geometry 1..2: /World/Set +provenance spheres: [0, 1] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/World/Cam"), cameras: ["/World/Cam"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/World/Cam"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/dome_exclude_bsdf_usda-fb9c2dcc2b05783e-1.image b/crates/crust-core/tests/data/import_baselines/dome_exclude_bsdf_usda-fb9c2dcc2b05783e-1.image new file mode 100644 index 000000000..dc6d20b19 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/dome_exclude_bsdf_usda-fb9c2dcc2b05783e-1.image @@ -0,0 +1 @@ +32x32 16spp clamp-off dc1bff10f92a7a6f diff --git a/crates/crust-core/tests/data/import_baselines/dome_exclude_power_usda-a488dc90e33bf33b-1.digest b/crates/crust-core/tests/data/import_baselines/dome_exclude_power_usda-a488dc90e33bf33b-1.digest new file mode 100644 index 000000000..45a41ce7f --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/dome_exclude_power_usda-a488dc90e33bf33b-1.digest @@ -0,0 +1,22 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/World/Cam") +camera: Camera { origin: Vec3A(0.0, 0.0, 8.0), lower_left_corner: Vec3A(-5.142858, -5.142858, -2.0), horizontal: Vec3A(10.285716, 0.0, 0.0), vertical: Vec3A(0.0, 10.285716, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: Some("/Render/settings") +settings: RenderSettings { samples_per_pixel: 16, max_depth: 1, width: 32, height: 32, region: PixelRect { x0: 0, y0: 0, x1: 32, y1: 32 }, min_samples_per_pixel: 16, variance_threshold: 0.0, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: None, light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 35.0, aperture: [36.0, 36.0], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 10.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/dome_exclude_power.usda"], invisible_overrides: Some(0) } +layer: $DIR/dome_exclude_power.usda +lights: 1 +light 0: dome name Some("/World/Sky") lpe None pmf 1.0 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 2 geometries, PrimitiveBreakdown { triangles: 0, spheres: 2, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 0, spheres: 2, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 0 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:b4f96552509cf2d8 camera=1:b4f96552509cf2d8 shadow=1:b4f96552509cf2d8 indirect=1:b4f96552509cf2d8 +geom 1: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 1 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:fd1d447404c6ef08 camera=1:fd1d447404c6ef08 shadow=1:fd1d447404c6ef08 indirect=1:fd1d447404c6ef08 +provenance light /World/Sky: LightOrigin { index: 0, geoms: 2..2 } +provenance geometry 0..1: /World/Prop +provenance geometry 1..2: /World/Set +provenance spheres: [0, 1] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/World/Cam"), cameras: ["/World/Cam"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/World/Cam"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/dome_exclude_power_usda-a488dc90e33bf33b-1.image b/crates/crust-core/tests/data/import_baselines/dome_exclude_power_usda-a488dc90e33bf33b-1.image new file mode 100644 index 000000000..fe922edee --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/dome_exclude_power_usda-a488dc90e33bf33b-1.image @@ -0,0 +1 @@ +32x32 16spp clamp-off a717d1a2f800657d diff --git a/crates/crust-core/tests/data/import_baselines/dome_light_0_pole_scene_z_up_usda-4a3a839d045f42ae-1.digest b/crates/crust-core/tests/data/import_baselines/dome_light_0_pole_scene_z_up_usda-4a3a839d045f42ae-1.digest new file mode 100644 index 000000000..5fc171df7 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/dome_light_0_pole_scene_z_up_usda-4a3a839d045f42ae-1.digest @@ -0,0 +1,19 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: None +camera: Camera { origin: Vec3A(15.0, 3.0, 3.0), lower_left_corner: Vec3A(4.8863316, -0.044797063, 4.174048), horizontal: Vec3A(1.2295314, 0.0, -6.147657), vertical: Vec3A(-0.44830504, 3.4967792, -0.08966101), u: Vec3A(0.19611613, 0.0, -0.9805807), v: Vec3A(-0.1271232, 0.991561, -0.02542464), lens_radius: 0.05, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: None +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 640, height: 360, region: PixelRect { x0: 0, y0: 0, x1: 640, y1: 360 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: None, depth_of_field: true, motion_blur: false, layer_stack: ["$DIR/dome_light_0_pole_scene_z_up.usda"], invisible_overrides: Some(0) } +layer: $DIR/dome_light_0_pole_scene_z_up.usda +warning: Warning { code: CameraMissing, kind: Skipped, count: 1, prims: [], message: "USD stage has no UsdGeomCamera — falling back to world::get_settings camera" } +lights: 1 +light 0: dome name Some("/World/Sky") lpe None pmf 1.0 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 0 geometries, PrimitiveBreakdown { triangles: 0, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 0, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +provenance light /World/Sky: LightOrigin { index: 0, geoms: 0..0 } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: None, cameras: [], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: None, offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/dome_light_0_pole_scene_z_up_usda-4a3a839d045f42ae-1.image b/crates/crust-core/tests/data/import_baselines/dome_light_0_pole_scene_z_up_usda-4a3a839d045f42ae-1.image new file mode 100644 index 000000000..b58239ea0 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/dome_light_0_pole_scene_z_up_usda-4a3a839d045f42ae-1.image @@ -0,0 +1 @@ +640x360 16spp clamp-off 4f3e257129109575 diff --git a/crates/crust-core/tests/data/import_baselines/dome_light_0_reference_usda-e3c0f10234d60e6f-1.digest b/crates/crust-core/tests/data/import_baselines/dome_light_0_reference_usda-e3c0f10234d60e6f-1.digest new file mode 100644 index 000000000..0098cd728 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/dome_light_0_reference_usda-e3c0f10234d60e6f-1.digest @@ -0,0 +1,19 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: None +camera: Camera { origin: Vec3A(15.0, 3.0, 3.0), lower_left_corner: Vec3A(4.8863316, -0.044797063, 4.174048), horizontal: Vec3A(1.2295314, 0.0, -6.147657), vertical: Vec3A(-0.44830504, 3.4967792, -0.08966101), u: Vec3A(0.19611613, 0.0, -0.9805807), v: Vec3A(-0.1271232, 0.991561, -0.02542464), lens_radius: 0.05, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: None +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 640, height: 360, region: PixelRect { x0: 0, y0: 0, x1: 640, y1: 360 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: None, depth_of_field: true, motion_blur: false, layer_stack: ["$DIR/dome_light_0_reference.usda"], invisible_overrides: Some(0) } +layer: $DIR/dome_light_0_reference.usda +warning: Warning { code: CameraMissing, kind: Skipped, count: 1, prims: [], message: "USD stage has no UsdGeomCamera — falling back to world::get_settings camera" } +lights: 1 +light 0: dome name Some("/World/Sky") lpe None pmf 1.0 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 0 geometries, PrimitiveBreakdown { triangles: 0, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 0, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +provenance light /World/Sky: LightOrigin { index: 0, geoms: 0..0 } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: None, cameras: [], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: None, offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/dome_light_0_reference_usda-e3c0f10234d60e6f-1.image b/crates/crust-core/tests/data/import_baselines/dome_light_0_reference_usda-e3c0f10234d60e6f-1.image new file mode 100644 index 000000000..b58239ea0 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/dome_light_0_reference_usda-e3c0f10234d60e6f-1.image @@ -0,0 +1 @@ +640x360 16spp clamp-off 4f3e257129109575 diff --git a/crates/crust-core/tests/data/import_baselines/dome_light_1_pole_y_usda-b39274d8389c93ec-1.digest b/crates/crust-core/tests/data/import_baselines/dome_light_1_pole_y_usda-b39274d8389c93ec-1.digest new file mode 100644 index 000000000..d4c92c1c2 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/dome_light_1_pole_y_usda-b39274d8389c93ec-1.digest @@ -0,0 +1,19 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: None +camera: Camera { origin: Vec3A(15.0, 3.0, 3.0), lower_left_corner: Vec3A(4.8863316, -0.044797063, 4.174048), horizontal: Vec3A(1.2295314, 0.0, -6.147657), vertical: Vec3A(-0.44830504, 3.4967792, -0.08966101), u: Vec3A(0.19611613, 0.0, -0.9805807), v: Vec3A(-0.1271232, 0.991561, -0.02542464), lens_radius: 0.05, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: None +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 640, height: 360, region: PixelRect { x0: 0, y0: 0, x1: 640, y1: 360 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: None, depth_of_field: true, motion_blur: false, layer_stack: ["$DIR/dome_light_1_pole_y.usda"], invisible_overrides: Some(0) } +layer: $DIR/dome_light_1_pole_y.usda +warning: Warning { code: CameraMissing, kind: Skipped, count: 1, prims: [], message: "USD stage has no UsdGeomCamera — falling back to world::get_settings camera" } +lights: 1 +light 0: dome name Some("/World/Sky") lpe None pmf 1.0 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 0 geometries, PrimitiveBreakdown { triangles: 0, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 0, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +provenance light /World/Sky: LightOrigin { index: 0, geoms: 0..0 } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: None, cameras: [], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: None, offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/dome_light_1_pole_y_usda-b39274d8389c93ec-1.image b/crates/crust-core/tests/data/import_baselines/dome_light_1_pole_y_usda-b39274d8389c93ec-1.image new file mode 100644 index 000000000..b58239ea0 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/dome_light_1_pole_y_usda-b39274d8389c93ec-1.image @@ -0,0 +1 @@ +640x360 16spp clamp-off 4f3e257129109575 diff --git a/crates/crust-core/tests/data/import_baselines/dome_light_1_pole_z_usda-3ab2d43568c3a9ca-1.digest b/crates/crust-core/tests/data/import_baselines/dome_light_1_pole_z_usda-3ab2d43568c3a9ca-1.digest new file mode 100644 index 000000000..535e7be72 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/dome_light_1_pole_z_usda-3ab2d43568c3a9ca-1.digest @@ -0,0 +1,19 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: None +camera: Camera { origin: Vec3A(15.0, 3.0, 3.0), lower_left_corner: Vec3A(4.8863316, -0.044797063, 4.174048), horizontal: Vec3A(1.2295314, 0.0, -6.147657), vertical: Vec3A(-0.44830504, 3.4967792, -0.08966101), u: Vec3A(0.19611613, 0.0, -0.9805807), v: Vec3A(-0.1271232, 0.991561, -0.02542464), lens_radius: 0.05, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: None +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 640, height: 360, region: PixelRect { x0: 0, y0: 0, x1: 640, y1: 360 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: None, depth_of_field: true, motion_blur: false, layer_stack: ["$DIR/dome_light_1_pole_z.usda"], invisible_overrides: Some(0) } +layer: $DIR/dome_light_1_pole_z.usda +warning: Warning { code: CameraMissing, kind: Skipped, count: 1, prims: [], message: "USD stage has no UsdGeomCamera — falling back to world::get_settings camera" } +lights: 1 +light 0: dome name Some("/World/Sky") lpe None pmf 1.0 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 0 geometries, PrimitiveBreakdown { triangles: 0, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 0, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +provenance light /World/Sky: LightOrigin { index: 0, geoms: 0..0 } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: None, cameras: [], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: None, offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/dome_light_1_pole_z_usda-3ab2d43568c3a9ca-1.image b/crates/crust-core/tests/data/import_baselines/dome_light_1_pole_z_usda-3ab2d43568c3a9ca-1.image new file mode 100644 index 000000000..271ed6f77 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/dome_light_1_pole_z_usda-3ab2d43568c3a9ca-1.image @@ -0,0 +1 @@ +640x360 16spp clamp-off 1d3504db8673b1f5 diff --git a/crates/crust-core/tests/data/import_baselines/dome_light_1_rotated_usda-96a7a52ba96f792f-1.digest b/crates/crust-core/tests/data/import_baselines/dome_light_1_rotated_usda-96a7a52ba96f792f-1.digest new file mode 100644 index 000000000..bf12355cc --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/dome_light_1_rotated_usda-96a7a52ba96f792f-1.digest @@ -0,0 +1,19 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: None +camera: Camera { origin: Vec3A(15.0, 3.0, 3.0), lower_left_corner: Vec3A(4.8863316, -0.044797063, 4.174048), horizontal: Vec3A(1.2295314, 0.0, -6.147657), vertical: Vec3A(-0.44830504, 3.4967792, -0.08966101), u: Vec3A(0.19611613, 0.0, -0.9805807), v: Vec3A(-0.1271232, 0.991561, -0.02542464), lens_radius: 0.05, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: None +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 640, height: 360, region: PixelRect { x0: 0, y0: 0, x1: 640, y1: 360 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: None, depth_of_field: true, motion_blur: false, layer_stack: ["$DIR/dome_light_1_rotated.usda"], invisible_overrides: Some(0) } +layer: $DIR/dome_light_1_rotated.usda +warning: Warning { code: CameraMissing, kind: Skipped, count: 1, prims: [], message: "USD stage has no UsdGeomCamera — falling back to world::get_settings camera" } +lights: 1 +light 0: dome name Some("/World/Sky") lpe None pmf 1.0 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 0 geometries, PrimitiveBreakdown { triangles: 0, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 0, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +provenance light /World/Sky: LightOrigin { index: 0, geoms: 0..0 } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: None, cameras: [], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: None, offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/dome_light_1_rotated_usda-96a7a52ba96f792f-1.image b/crates/crust-core/tests/data/import_baselines/dome_light_1_rotated_usda-96a7a52ba96f792f-1.image new file mode 100644 index 000000000..3e2f8e3be --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/dome_light_1_rotated_usda-96a7a52ba96f792f-1.image @@ -0,0 +1 @@ +640x360 16spp clamp-off 320719aea0a218c5 diff --git a/crates/crust-core/tests/data/import_baselines/dome_light_1_scene_no_up_usda-db7f3549433e3ca1-1.digest b/crates/crust-core/tests/data/import_baselines/dome_light_1_scene_no_up_usda-db7f3549433e3ca1-1.digest new file mode 100644 index 000000000..9b9d99f01 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/dome_light_1_scene_no_up_usda-db7f3549433e3ca1-1.digest @@ -0,0 +1,19 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: None +camera: Camera { origin: Vec3A(15.0, 3.0, 3.0), lower_left_corner: Vec3A(4.8863316, -0.044797063, 4.174048), horizontal: Vec3A(1.2295314, 0.0, -6.147657), vertical: Vec3A(-0.44830504, 3.4967792, -0.08966101), u: Vec3A(0.19611613, 0.0, -0.9805807), v: Vec3A(-0.1271232, 0.991561, -0.02542464), lens_radius: 0.05, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: None +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 640, height: 360, region: PixelRect { x0: 0, y0: 0, x1: 640, y1: 360 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: None, depth_of_field: true, motion_blur: false, layer_stack: ["$DIR/dome_light_1_scene_no_up.usda"], invisible_overrides: Some(0) } +layer: $DIR/dome_light_1_scene_no_up.usda +warning: Warning { code: CameraMissing, kind: Skipped, count: 1, prims: [], message: "USD stage has no UsdGeomCamera — falling back to world::get_settings camera" } +lights: 1 +light 0: dome name Some("/World/Sky") lpe None pmf 1.0 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 0 geometries, PrimitiveBreakdown { triangles: 0, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 0, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +provenance light /World/Sky: LightOrigin { index: 0, geoms: 0..0 } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: None, cameras: [], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: None, offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/dome_light_1_scene_no_up_usda-db7f3549433e3ca1-1.image b/crates/crust-core/tests/data/import_baselines/dome_light_1_scene_no_up_usda-db7f3549433e3ca1-1.image new file mode 100644 index 000000000..b58239ea0 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/dome_light_1_scene_no_up_usda-db7f3549433e3ca1-1.image @@ -0,0 +1 @@ +640x360 16spp clamp-off 4f3e257129109575 diff --git a/crates/crust-core/tests/data/import_baselines/dome_light_1_scene_y_up_usda-cef3793797de068b-1.digest b/crates/crust-core/tests/data/import_baselines/dome_light_1_scene_y_up_usda-cef3793797de068b-1.digest new file mode 100644 index 000000000..221c34b18 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/dome_light_1_scene_y_up_usda-cef3793797de068b-1.digest @@ -0,0 +1,19 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: None +camera: Camera { origin: Vec3A(15.0, 3.0, 3.0), lower_left_corner: Vec3A(4.8863316, -0.044797063, 4.174048), horizontal: Vec3A(1.2295314, 0.0, -6.147657), vertical: Vec3A(-0.44830504, 3.4967792, -0.08966101), u: Vec3A(0.19611613, 0.0, -0.9805807), v: Vec3A(-0.1271232, 0.991561, -0.02542464), lens_radius: 0.05, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: None +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 640, height: 360, region: PixelRect { x0: 0, y0: 0, x1: 640, y1: 360 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: None, depth_of_field: true, motion_blur: false, layer_stack: ["$DIR/dome_light_1_scene_y_up.usda"], invisible_overrides: Some(0) } +layer: $DIR/dome_light_1_scene_y_up.usda +warning: Warning { code: CameraMissing, kind: Skipped, count: 1, prims: [], message: "USD stage has no UsdGeomCamera — falling back to world::get_settings camera" } +lights: 1 +light 0: dome name Some("/World/Sky") lpe None pmf 1.0 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 0 geometries, PrimitiveBreakdown { triangles: 0, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 0, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +provenance light /World/Sky: LightOrigin { index: 0, geoms: 0..0 } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: None, cameras: [], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: None, offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/dome_light_1_scene_y_up_usda-cef3793797de068b-1.image b/crates/crust-core/tests/data/import_baselines/dome_light_1_scene_y_up_usda-cef3793797de068b-1.image new file mode 100644 index 000000000..b58239ea0 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/dome_light_1_scene_y_up_usda-cef3793797de068b-1.image @@ -0,0 +1 @@ +640x360 16spp clamp-off 4f3e257129109575 diff --git a/crates/crust-core/tests/data/import_baselines/dome_light_1_usda-771e6d7e193401ac-1.digest b/crates/crust-core/tests/data/import_baselines/dome_light_1_usda-771e6d7e193401ac-1.digest new file mode 100644 index 000000000..5ef186158 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/dome_light_1_usda-771e6d7e193401ac-1.digest @@ -0,0 +1,19 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: None +camera: Camera { origin: Vec3A(15.0, 3.0, 3.0), lower_left_corner: Vec3A(4.8863316, -0.044797063, 4.174048), horizontal: Vec3A(1.2295314, 0.0, -6.147657), vertical: Vec3A(-0.44830504, 3.4967792, -0.08966101), u: Vec3A(0.19611613, 0.0, -0.9805807), v: Vec3A(-0.1271232, 0.991561, -0.02542464), lens_radius: 0.05, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: None +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 640, height: 360, region: PixelRect { x0: 0, y0: 0, x1: 640, y1: 360 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: None, depth_of_field: true, motion_blur: false, layer_stack: ["$DIR/dome_light_1.usda"], invisible_overrides: Some(0) } +layer: $DIR/dome_light_1.usda +warning: Warning { code: CameraMissing, kind: Skipped, count: 1, prims: [], message: "USD stage has no UsdGeomCamera — falling back to world::get_settings camera" } +lights: 1 +light 0: dome name Some("/World/Sky") lpe None pmf 1.0 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 0 geometries, PrimitiveBreakdown { triangles: 0, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 0, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +provenance light /World/Sky: LightOrigin { index: 0, geoms: 0..0 } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: None, cameras: [], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: None, offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/dome_light_1_usda-771e6d7e193401ac-1.image b/crates/crust-core/tests/data/import_baselines/dome_light_1_usda-771e6d7e193401ac-1.image new file mode 100644 index 000000000..e764f739a --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/dome_light_1_usda-771e6d7e193401ac-1.image @@ -0,0 +1 @@ +640x360 16spp clamp-off 143f59da8403ab25 diff --git a/crates/crust-core/tests/data/import_baselines/dome_light_1_z_up_usda-d2385f77c8ec6eb4-1.digest b/crates/crust-core/tests/data/import_baselines/dome_light_1_z_up_usda-d2385f77c8ec6eb4-1.digest new file mode 100644 index 000000000..d55243435 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/dome_light_1_z_up_usda-d2385f77c8ec6eb4-1.digest @@ -0,0 +1,19 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: None +camera: Camera { origin: Vec3A(15.0, 3.0, 3.0), lower_left_corner: Vec3A(4.8863316, -0.044797063, 4.174048), horizontal: Vec3A(1.2295314, 0.0, -6.147657), vertical: Vec3A(-0.44830504, 3.4967792, -0.08966101), u: Vec3A(0.19611613, 0.0, -0.9805807), v: Vec3A(-0.1271232, 0.991561, -0.02542464), lens_radius: 0.05, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: None +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 640, height: 360, region: PixelRect { x0: 0, y0: 0, x1: 640, y1: 360 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: None, depth_of_field: true, motion_blur: false, layer_stack: ["$DIR/dome_light_1_z_up.usda"], invisible_overrides: Some(0) } +layer: $DIR/dome_light_1_z_up.usda +warning: Warning { code: CameraMissing, kind: Skipped, count: 1, prims: [], message: "USD stage has no UsdGeomCamera — falling back to world::get_settings camera" } +lights: 1 +light 0: dome name Some("/World/Sky") lpe None pmf 1.0 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 0 geometries, PrimitiveBreakdown { triangles: 0, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 0, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +provenance light /World/Sky: LightOrigin { index: 0, geoms: 0..0 } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: None, cameras: [], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: None, offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/dome_light_1_z_up_usda-d2385f77c8ec6eb4-1.image b/crates/crust-core/tests/data/import_baselines/dome_light_1_z_up_usda-d2385f77c8ec6eb4-1.image new file mode 100644 index 000000000..271ed6f77 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/dome_light_1_z_up_usda-d2385f77c8ec6eb4-1.image @@ -0,0 +1 @@ +640x360 16spp clamp-off 1d3504db8673b1f5 diff --git a/crates/crust-core/tests/data/import_baselines/dome_light_usda-f46a39c15abcc98f-1.digest b/crates/crust-core/tests/data/import_baselines/dome_light_usda-f46a39c15abcc98f-1.digest new file mode 100644 index 000000000..41de9251f --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/dome_light_usda-f46a39c15abcc98f-1.digest @@ -0,0 +1,25 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/World/Cam") +camera: Camera { origin: Vec3A(0.0, 5.0, 6.0), lower_left_corner: Vec3A(-2.0000002, -2.9376645, -0.40261602), horizontal: Vec3A(4.0000005, -0.0, 0.0), vertical: Vec3A(0.0, 3.0731347, -2.560439), u: Vec3A(1.0, -0.0, 0.0), v: Vec3A(0.0, 0.76828355, -0.6401097), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: Some("/Render/settings") +settings: RenderSettings { samples_per_pixel: 16, max_depth: 2, width: 16, height: 16, region: PixelRect { x0: 0, y0: 0, x1: 16, y1: 16 }, min_samples_per_pixel: 16, variance_threshold: 0.0, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: LightOnly, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: None, light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 50.0, aperture: [20.0, 20.0], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 10.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/dome_light.usda"], invisible_overrides: Some(0) } +layer: $DIR/dome_light.usda +lights: 1 +light 0: dome name Some("/World/Key") lpe None pmf 1.0 shadow RayMask(2) restricted true nee-only true twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 2 geometries, PrimitiveBreakdown { triangles: 2, spheres: 1, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 2, spheres: 1, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:e6e23411748a6d98 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=1:e6e23411748a6d98 +geom 1: material #1 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:fce6de5b675a55c5 camera=2:fce6de5b675a55c5 shadow=2:fce6de5b675a55c5 indirect=2:fce6de5b675a55c5 +provenance material /World/Metal: MaterialOrigin { slots: [1], displaced: false } +provenance light /World/Key: LightOrigin { index: 0, geoms: 1..1 } +provenance geometry 0..1: /World/Blocker +provenance geometry 1..2: /World/Floor +provenance mesh: MeshOrigin { geom_id: 1, slot: 0, baked: true, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 14903623499644419787, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [0] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/World/Cam"), cameras: ["/World/Cam"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/World/Cam"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/dome_light_usda-f46a39c15abcc98f-1.image b/crates/crust-core/tests/data/import_baselines/dome_light_usda-f46a39c15abcc98f-1.image new file mode 100644 index 000000000..bdd1eaa08 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/dome_light_usda-f46a39c15abcc98f-1.image @@ -0,0 +1 @@ +16x16 16spp clamp-off de1bef126e989fb7 diff --git a/crates/crust-core/tests/data/import_baselines/dome_no_assets_usda-b8800e7204db6d4a-1.digest b/crates/crust-core/tests/data/import_baselines/dome_no_assets_usda-b8800e7204db6d4a-1.digest new file mode 100644 index 000000000..2332511eb --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/dome_no_assets_usda-b8800e7204db6d4a-1.digest @@ -0,0 +1,19 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/World/cam") +camera: Camera { origin: Vec3A(0.0, 0.0, 0.0), lower_left_corner: Vec3A(-2.7183647, -1.5290802, -10.0), horizontal: Vec3A(5.4367294, 0.0, 0.0), vertical: Vec3A(0.0, 3.0581603, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: None +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 640, height: 360, region: PixelRect { x0: 0, y0: 0, x1: 640, y1: 360 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 50.0, aperture: [20.955, 15.2908], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 10.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/dome_no_assets.usda"], invisible_overrides: Some(0) } +layer: $DIR/dome_no_assets.usda +warning: Warning { code: AssetUnsupportedByHost, kind: Skipped, count: 1, prims: [], message: "No asset loader: environment map $DIR/sky.exr ignored — the dome falls back to its uniform colour. Use Scene::from_usd_with_assets to supply one." } +lights: 1 +light 0: dome name Some("/World/sky") lpe None pmf 1.0 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 0 geometries, PrimitiveBreakdown { triangles: 0, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 0, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +provenance light /World/sky: LightOrigin { index: 0, geoms: 0..0 } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/World/cam"), cameras: ["/World/cam"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/World/cam"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/dome_no_assets_usda-b8800e7204db6d4a-1.image b/crates/crust-core/tests/data/import_baselines/dome_no_assets_usda-b8800e7204db6d4a-1.image new file mode 100644 index 000000000..b1fb14759 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/dome_no_assets_usda-b8800e7204db6d4a-1.image @@ -0,0 +1 @@ +640x360 16spp clamp-off 1e3a61612e840325 diff --git a/crates/crust-core/tests/data/import_baselines/dome_power_usda-abfbd64e964dc44d-1.digest b/crates/crust-core/tests/data/import_baselines/dome_power_usda-abfbd64e964dc44d-1.digest new file mode 100644 index 000000000..6d2981eb4 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/dome_power_usda-abfbd64e964dc44d-1.digest @@ -0,0 +1,25 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/World/Cam") +camera: Camera { origin: Vec3A(0.0, 5.0, 6.0), lower_left_corner: Vec3A(-2.0000002, -2.9376645, -0.40261602), horizontal: Vec3A(4.0000005, -0.0, 0.0), vertical: Vec3A(0.0, 3.0731347, -2.560439), u: Vec3A(1.0, -0.0, 0.0), v: Vec3A(0.0, 0.76828355, -0.6401097), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: Some("/Render/settings") +settings: RenderSettings { samples_per_pixel: 16, max_depth: 2, width: 16, height: 16, region: PixelRect { x0: 0, y0: 0, x1: 16, y1: 16 }, min_samples_per_pixel: 16, variance_threshold: 0.0, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: None, light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 50.0, aperture: [20.0, 20.0], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 10.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/dome_power.usda"], invisible_overrides: Some(0) } +layer: $DIR/dome_power.usda +lights: 1 +light 0: dome name Some("/World/Key") lpe None pmf 1.0 shadow RayMask(2) restricted true nee-only true twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 2 geometries, PrimitiveBreakdown { triangles: 2, spheres: 1, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 2, spheres: 1, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:e6e23411748a6d98 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=1:e6e23411748a6d98 +geom 1: material #1 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:fce6de5b675a55c5 camera=2:fce6de5b675a55c5 shadow=2:fce6de5b675a55c5 indirect=2:fce6de5b675a55c5 +provenance material /World/Metal: MaterialOrigin { slots: [1], displaced: false } +provenance light /World/Key: LightOrigin { index: 0, geoms: 1..1 } +provenance geometry 0..1: /World/Blocker +provenance geometry 1..2: /World/Floor +provenance mesh: MeshOrigin { geom_id: 1, slot: 0, baked: true, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 14903623499644419787, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [0] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/World/Cam"), cameras: ["/World/Cam"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/World/Cam"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/dome_power_usda-abfbd64e964dc44d-1.image b/crates/crust-core/tests/data/import_baselines/dome_power_usda-abfbd64e964dc44d-1.image new file mode 100644 index 000000000..bdd1eaa08 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/dome_power_usda-abfbd64e964dc44d-1.image @@ -0,0 +1 @@ +16x16 16spp clamp-off de1bef126e989fb7 diff --git a/crates/crust-core/tests/data/import_baselines/dome_ri_camera_usda-acf95ad397fe1930-1.digest b/crates/crust-core/tests/data/import_baselines/dome_ri_camera_usda-acf95ad397fe1930-1.digest new file mode 100644 index 000000000..57b9cc7f2 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/dome_ri_camera_usda-acf95ad397fe1930-1.digest @@ -0,0 +1,19 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: None +camera: Camera { origin: Vec3A(15.0, 3.0, 3.0), lower_left_corner: Vec3A(4.8863316, -0.044797063, 4.174048), horizontal: Vec3A(1.2295314, 0.0, -6.147657), vertical: Vec3A(-0.44830504, 3.4967792, -0.08966101), u: Vec3A(0.19611613, 0.0, -0.9805807), v: Vec3A(-0.1271232, 0.991561, -0.02542464), lens_radius: 0.05, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: None +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 640, height: 360, region: PixelRect { x0: 0, y0: 0, x1: 640, y1: 360 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: None, depth_of_field: true, motion_blur: false, layer_stack: ["$DIR/dome_ri_camera.usda"], invisible_overrides: Some(0) } +layer: $DIR/dome_ri_camera.usda +warning: Warning { code: CameraMissing, kind: Skipped, count: 1, prims: [], message: "USD stage has no UsdGeomCamera — falling back to world::get_settings camera" } +lights: 1 +light 0: dome name Some("/World/Sky") lpe None pmf 1.0 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 0 geometries, PrimitiveBreakdown { triangles: 0, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 0, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +provenance light /World/Sky: LightOrigin { index: 0, geoms: 0..0 } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: None, cameras: [], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: None, offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/dome_ri_camera_usda-acf95ad397fe1930-1.image b/crates/crust-core/tests/data/import_baselines/dome_ri_camera_usda-acf95ad397fe1930-1.image new file mode 100644 index 000000000..c734c5b1d --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/dome_ri_camera_usda-acf95ad397fe1930-1.image @@ -0,0 +1 @@ +640x360 16spp clamp-off a04a09c0d4b5e325 diff --git a/crates/crust-core/tests/data/import_baselines/domelight_usda-22dcdc7630c52071-1.digest b/crates/crust-core/tests/data/import_baselines/domelight_usda-22dcdc7630c52071-1.digest new file mode 100644 index 000000000..73e383a14 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/domelight_usda-22dcdc7630c52071-1.digest @@ -0,0 +1,31 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/World/Cam") +camera: Camera { origin: Vec3A(0.0, 2.3, 8.5), lower_left_corner: Vec3A(-4.8542223, -1.7956586, -1.0226688), horizontal: Vec3A(9.708445, -0.0, 0.0), vertical: Vec3A(0.0, 5.4078546, -0.7600245), u: Vec3A(1.0, -0.0, 0.0), v: Vec3A(0.0, 0.9902681, -0.13917312), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: Some("/Render/settings") +settings: RenderSettings { samples_per_pixel: 96, max_depth: 8, width: 480, height: 270, region: PixelRect { x0: 0, y0: 0, x1: 480, y1: 270 }, min_samples_per_pixel: 32, variance_threshold: 0.02, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 28.0, aperture: [20.955, 15.2908], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 10.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/domelight.usda"], invisible_overrides: Some(0) } +layer: $DIR/domelight.usda +lights: 2 +light 0: distant name Some("/World/Sun") lpe None pmf 0.5 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 1: dome name Some("/World/Sky") lpe None pmf 0.5 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 3 geometries, PrimitiveBreakdown { triangles: 2, spheres: 2, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 2, spheres: 2, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:f6fecef7f865e305 camera=2:f6fecef7f865e305 shadow=2:f6fecef7f865e305 indirect=2:f6fecef7f865e305 +geom 1: material #1 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:571f57a6ae5dd002 camera=1:571f57a6ae5dd002 shadow=1:571f57a6ae5dd002 indirect=1:571f57a6ae5dd002 +geom 2: material #2 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:bb4ca329e9417ce2 camera=1:bb4ca329e9417ce2 shadow=1:bb4ca329e9417ce2 indirect=1:bb4ca329e9417ce2 +provenance material /World/Looks/Clay: MaterialOrigin { slots: [1], displaced: false } +provenance material /World/Looks/Ground: MaterialOrigin { slots: [0], displaced: false } +provenance material /World/Looks/Metal: MaterialOrigin { slots: [2], displaced: false } +provenance light /World/Sky: LightOrigin { index: 1, geoms: 3..3 } +provenance light /World/Sun: LightOrigin { index: 0, geoms: 3..3 } +provenance geometry 0..1: /World/Floor +provenance geometry 1..2: /World/Matte +provenance geometry 2..3: /World/Chrome +provenance mesh: MeshOrigin { geom_id: 0, slot: 0, baked: true, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 10492340787237780741, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [1, 2] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: true, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/World/Cam"), cameras: ["/World/Cam"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/World/Cam"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/domelight_usda-22dcdc7630c52071-1.image b/crates/crust-core/tests/data/import_baselines/domelight_usda-22dcdc7630c52071-1.image new file mode 100644 index 000000000..b1f697624 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/domelight_usda-22dcdc7630c52071-1.image @@ -0,0 +1 @@ +480x270 16spp clamp-off 024d1057546527f7 diff --git a/crates/crust-core/tests/data/import_baselines/domelight_usda-23290848cbd88d05-1.digest b/crates/crust-core/tests/data/import_baselines/domelight_usda-23290848cbd88d05-1.digest new file mode 100644 index 000000000..f9f1a5e16 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/domelight_usda-23290848cbd88d05-1.digest @@ -0,0 +1,32 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/World/Cam") +camera: Camera { origin: Vec3A(0.0, 2.3, 8.5), lower_left_corner: Vec3A(-4.8542223, -1.7956586, -1.0226688), horizontal: Vec3A(9.708445, -0.0, 0.0), vertical: Vec3A(0.0, 5.4078546, -0.7600245), u: Vec3A(1.0, -0.0, 0.0), v: Vec3A(0.0, 0.9902681, -0.13917312), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: Some("/Render/settings") +settings: RenderSettings { samples_per_pixel: 96, max_depth: 8, width: 480, height: 270, region: PixelRect { x0: 0, y0: 0, x1: 480, y1: 270 }, min_samples_per_pixel: 32, variance_threshold: 0.02, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 28.0, aperture: [20.955, 15.2908], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 10.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/domelight.usda"], invisible_overrides: Some(0) } +layer: $DIR/domelight.usda +warning: Warning { code: AssetUnsupportedByHost, kind: Skipped, count: 1, prims: [], message: "No asset loader: environment map $DIR/sky_env.exr ignored — the dome falls back to its uniform colour. Use Scene::from_usd_with_assets to supply one." } +lights: 2 +light 0: distant name Some("/World/Sun") lpe None pmf 0.5 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 1: dome name Some("/World/Sky") lpe None pmf 0.5 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 3 geometries, PrimitiveBreakdown { triangles: 2, spheres: 2, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 2, spheres: 2, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:f6fecef7f865e305 camera=2:f6fecef7f865e305 shadow=2:f6fecef7f865e305 indirect=2:f6fecef7f865e305 +geom 1: material #1 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:571f57a6ae5dd002 camera=1:571f57a6ae5dd002 shadow=1:571f57a6ae5dd002 indirect=1:571f57a6ae5dd002 +geom 2: material #2 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:bb4ca329e9417ce2 camera=1:bb4ca329e9417ce2 shadow=1:bb4ca329e9417ce2 indirect=1:bb4ca329e9417ce2 +provenance material /World/Looks/Clay: MaterialOrigin { slots: [1], displaced: false } +provenance material /World/Looks/Ground: MaterialOrigin { slots: [0], displaced: false } +provenance material /World/Looks/Metal: MaterialOrigin { slots: [2], displaced: false } +provenance light /World/Sky: LightOrigin { index: 1, geoms: 3..3 } +provenance light /World/Sun: LightOrigin { index: 0, geoms: 3..3 } +provenance geometry 0..1: /World/Floor +provenance geometry 1..2: /World/Matte +provenance geometry 2..3: /World/Chrome +provenance mesh: MeshOrigin { geom_id: 0, slot: 0, baked: true, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 10492340787237780741, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [1, 2] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/World/Cam"), cameras: ["/World/Cam"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/World/Cam"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/domelight_usda-23290848cbd88d05-1.image b/crates/crust-core/tests/data/import_baselines/domelight_usda-23290848cbd88d05-1.image new file mode 100644 index 000000000..35dcfa764 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/domelight_usda-23290848cbd88d05-1.image @@ -0,0 +1 @@ +480x270 16spp clamp-off 64391f5099bf45b3 diff --git a/crates/crust-core/tests/data/import_baselines/domelight_usda-23290848cbd88d05-2.digest b/crates/crust-core/tests/data/import_baselines/domelight_usda-23290848cbd88d05-2.digest new file mode 100644 index 000000000..f9f1a5e16 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/domelight_usda-23290848cbd88d05-2.digest @@ -0,0 +1,32 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/World/Cam") +camera: Camera { origin: Vec3A(0.0, 2.3, 8.5), lower_left_corner: Vec3A(-4.8542223, -1.7956586, -1.0226688), horizontal: Vec3A(9.708445, -0.0, 0.0), vertical: Vec3A(0.0, 5.4078546, -0.7600245), u: Vec3A(1.0, -0.0, 0.0), v: Vec3A(0.0, 0.9902681, -0.13917312), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: Some("/Render/settings") +settings: RenderSettings { samples_per_pixel: 96, max_depth: 8, width: 480, height: 270, region: PixelRect { x0: 0, y0: 0, x1: 480, y1: 270 }, min_samples_per_pixel: 32, variance_threshold: 0.02, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 28.0, aperture: [20.955, 15.2908], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 10.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/domelight.usda"], invisible_overrides: Some(0) } +layer: $DIR/domelight.usda +warning: Warning { code: AssetUnsupportedByHost, kind: Skipped, count: 1, prims: [], message: "No asset loader: environment map $DIR/sky_env.exr ignored — the dome falls back to its uniform colour. Use Scene::from_usd_with_assets to supply one." } +lights: 2 +light 0: distant name Some("/World/Sun") lpe None pmf 0.5 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 1: dome name Some("/World/Sky") lpe None pmf 0.5 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 3 geometries, PrimitiveBreakdown { triangles: 2, spheres: 2, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 2, spheres: 2, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:f6fecef7f865e305 camera=2:f6fecef7f865e305 shadow=2:f6fecef7f865e305 indirect=2:f6fecef7f865e305 +geom 1: material #1 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:571f57a6ae5dd002 camera=1:571f57a6ae5dd002 shadow=1:571f57a6ae5dd002 indirect=1:571f57a6ae5dd002 +geom 2: material #2 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:bb4ca329e9417ce2 camera=1:bb4ca329e9417ce2 shadow=1:bb4ca329e9417ce2 indirect=1:bb4ca329e9417ce2 +provenance material /World/Looks/Clay: MaterialOrigin { slots: [1], displaced: false } +provenance material /World/Looks/Ground: MaterialOrigin { slots: [0], displaced: false } +provenance material /World/Looks/Metal: MaterialOrigin { slots: [2], displaced: false } +provenance light /World/Sky: LightOrigin { index: 1, geoms: 3..3 } +provenance light /World/Sun: LightOrigin { index: 0, geoms: 3..3 } +provenance geometry 0..1: /World/Floor +provenance geometry 1..2: /World/Matte +provenance geometry 2..3: /World/Chrome +provenance mesh: MeshOrigin { geom_id: 0, slot: 0, baked: true, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 10492340787237780741, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [1, 2] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/World/Cam"), cameras: ["/World/Cam"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/World/Cam"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/domelight_usda-23290848cbd88d05-2.image b/crates/crust-core/tests/data/import_baselines/domelight_usda-23290848cbd88d05-2.image new file mode 100644 index 000000000..35dcfa764 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/domelight_usda-23290848cbd88d05-2.image @@ -0,0 +1 @@ +480x270 16spp clamp-off 64391f5099bf45b3 diff --git a/crates/crust-core/tests/data/import_baselines/domelight_usda-5a2a25c11957ed70-1.digest b/crates/crust-core/tests/data/import_baselines/domelight_usda-5a2a25c11957ed70-1.digest new file mode 100644 index 000000000..f9f1a5e16 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/domelight_usda-5a2a25c11957ed70-1.digest @@ -0,0 +1,32 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/World/Cam") +camera: Camera { origin: Vec3A(0.0, 2.3, 8.5), lower_left_corner: Vec3A(-4.8542223, -1.7956586, -1.0226688), horizontal: Vec3A(9.708445, -0.0, 0.0), vertical: Vec3A(0.0, 5.4078546, -0.7600245), u: Vec3A(1.0, -0.0, 0.0), v: Vec3A(0.0, 0.9902681, -0.13917312), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: Some("/Render/settings") +settings: RenderSettings { samples_per_pixel: 96, max_depth: 8, width: 480, height: 270, region: PixelRect { x0: 0, y0: 0, x1: 480, y1: 270 }, min_samples_per_pixel: 32, variance_threshold: 0.02, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 28.0, aperture: [20.955, 15.2908], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 10.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/domelight.usda"], invisible_overrides: Some(0) } +layer: $DIR/domelight.usda +warning: Warning { code: AssetUnsupportedByHost, kind: Skipped, count: 1, prims: [], message: "No asset loader: environment map $DIR/sky_env.exr ignored — the dome falls back to its uniform colour. Use Scene::from_usd_with_assets to supply one." } +lights: 2 +light 0: distant name Some("/World/Sun") lpe None pmf 0.5 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 1: dome name Some("/World/Sky") lpe None pmf 0.5 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 3 geometries, PrimitiveBreakdown { triangles: 2, spheres: 2, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 2, spheres: 2, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:f6fecef7f865e305 camera=2:f6fecef7f865e305 shadow=2:f6fecef7f865e305 indirect=2:f6fecef7f865e305 +geom 1: material #1 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:571f57a6ae5dd002 camera=1:571f57a6ae5dd002 shadow=1:571f57a6ae5dd002 indirect=1:571f57a6ae5dd002 +geom 2: material #2 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:bb4ca329e9417ce2 camera=1:bb4ca329e9417ce2 shadow=1:bb4ca329e9417ce2 indirect=1:bb4ca329e9417ce2 +provenance material /World/Looks/Clay: MaterialOrigin { slots: [1], displaced: false } +provenance material /World/Looks/Ground: MaterialOrigin { slots: [0], displaced: false } +provenance material /World/Looks/Metal: MaterialOrigin { slots: [2], displaced: false } +provenance light /World/Sky: LightOrigin { index: 1, geoms: 3..3 } +provenance light /World/Sun: LightOrigin { index: 0, geoms: 3..3 } +provenance geometry 0..1: /World/Floor +provenance geometry 1..2: /World/Matte +provenance geometry 2..3: /World/Chrome +provenance mesh: MeshOrigin { geom_id: 0, slot: 0, baked: true, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 10492340787237780741, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [1, 2] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/World/Cam"), cameras: ["/World/Cam"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/World/Cam"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/domelight_usda-5a2a25c11957ed70-1.image b/crates/crust-core/tests/data/import_baselines/domelight_usda-5a2a25c11957ed70-1.image new file mode 100644 index 000000000..35dcfa764 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/domelight_usda-5a2a25c11957ed70-1.image @@ -0,0 +1 @@ +480x270 16spp clamp-off 64391f5099bf45b3 diff --git a/crates/crust-core/tests/data/import_baselines/domelight_usda-5d8f200125b9fd09-1.digest b/crates/crust-core/tests/data/import_baselines/domelight_usda-5d8f200125b9fd09-1.digest new file mode 100644 index 000000000..2b8ebaa7d --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/domelight_usda-5d8f200125b9fd09-1.digest @@ -0,0 +1,31 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/World/Cam") +camera: Camera { origin: Vec3A(0.0, 2.3, 8.5), lower_left_corner: Vec3A(-4.8542223, -1.7956586, -1.0226688), horizontal: Vec3A(9.708445, -0.0, 0.0), vertical: Vec3A(0.0, 5.4078546, -0.7600245), u: Vec3A(1.0, -0.0, 0.0), v: Vec3A(0.0, 0.9902681, -0.13917312), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: Some("/Render/settings") +settings: RenderSettings { samples_per_pixel: 96, max_depth: 8, width: 480, height: 270, region: PixelRect { x0: 0, y0: 0, x1: 480, y1: 270 }, min_samples_per_pixel: 32, variance_threshold: 0.02, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 28.0, aperture: [20.955, 15.2908], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 10.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/domelight.usda"], invisible_overrides: Some(0) } +layer: $DIR/domelight.usda +lights: 2 +light 0: distant name Some("/World/Sun") lpe None pmf 0.5 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 1: dome name Some("/World/Sky") lpe None pmf 0.5 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 3 geometries, PrimitiveBreakdown { triangles: 2, spheres: 2, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 2, spheres: 2, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:f6fecef7f865e305 camera=2:f6fecef7f865e305 shadow=2:f6fecef7f865e305 indirect=2:f6fecef7f865e305 +geom 1: material #1 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:571f57a6ae5dd002 camera=1:571f57a6ae5dd002 shadow=1:571f57a6ae5dd002 indirect=1:571f57a6ae5dd002 +geom 2: material #2 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:bb4ca329e9417ce2 camera=1:bb4ca329e9417ce2 shadow=1:bb4ca329e9417ce2 indirect=1:bb4ca329e9417ce2 +provenance material /World/Looks/Clay: MaterialOrigin { slots: [1], displaced: false } +provenance material /World/Looks/Ground: MaterialOrigin { slots: [0], displaced: false } +provenance material /World/Looks/Metal: MaterialOrigin { slots: [2], displaced: false } +provenance light /World/Sky: LightOrigin { index: 1, geoms: 3..3 } +provenance light /World/Sun: LightOrigin { index: 0, geoms: 3..3 } +provenance geometry 0..1: /World/Floor +provenance geometry 1..2: /World/Matte +provenance geometry 2..3: /World/Chrome +provenance mesh: MeshOrigin { geom_id: 0, slot: 0, baked: true, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 10492340787237780741, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [1, 2] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/World/Cam"), cameras: ["/World/Cam"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/World/Cam"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/domelight_usda-5d8f200125b9fd09-1.image b/crates/crust-core/tests/data/import_baselines/domelight_usda-5d8f200125b9fd09-1.image new file mode 100644 index 000000000..d13036c6c --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/domelight_usda-5d8f200125b9fd09-1.image @@ -0,0 +1 @@ +480x270 16spp clamp-off 489aedbe254cf3db diff --git a/crates/crust-core/tests/data/import_baselines/domelight_usda-7f00a6c7fd4959fa-1.digest b/crates/crust-core/tests/data/import_baselines/domelight_usda-7f00a6c7fd4959fa-1.digest new file mode 100644 index 000000000..f9f1a5e16 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/domelight_usda-7f00a6c7fd4959fa-1.digest @@ -0,0 +1,32 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/World/Cam") +camera: Camera { origin: Vec3A(0.0, 2.3, 8.5), lower_left_corner: Vec3A(-4.8542223, -1.7956586, -1.0226688), horizontal: Vec3A(9.708445, -0.0, 0.0), vertical: Vec3A(0.0, 5.4078546, -0.7600245), u: Vec3A(1.0, -0.0, 0.0), v: Vec3A(0.0, 0.9902681, -0.13917312), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: Some("/Render/settings") +settings: RenderSettings { samples_per_pixel: 96, max_depth: 8, width: 480, height: 270, region: PixelRect { x0: 0, y0: 0, x1: 480, y1: 270 }, min_samples_per_pixel: 32, variance_threshold: 0.02, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 28.0, aperture: [20.955, 15.2908], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 10.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/domelight.usda"], invisible_overrides: Some(0) } +layer: $DIR/domelight.usda +warning: Warning { code: AssetUnsupportedByHost, kind: Skipped, count: 1, prims: [], message: "No asset loader: environment map $DIR/sky_env.exr ignored — the dome falls back to its uniform colour. Use Scene::from_usd_with_assets to supply one." } +lights: 2 +light 0: distant name Some("/World/Sun") lpe None pmf 0.5 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 1: dome name Some("/World/Sky") lpe None pmf 0.5 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 3 geometries, PrimitiveBreakdown { triangles: 2, spheres: 2, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 2, spheres: 2, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:f6fecef7f865e305 camera=2:f6fecef7f865e305 shadow=2:f6fecef7f865e305 indirect=2:f6fecef7f865e305 +geom 1: material #1 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:571f57a6ae5dd002 camera=1:571f57a6ae5dd002 shadow=1:571f57a6ae5dd002 indirect=1:571f57a6ae5dd002 +geom 2: material #2 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:bb4ca329e9417ce2 camera=1:bb4ca329e9417ce2 shadow=1:bb4ca329e9417ce2 indirect=1:bb4ca329e9417ce2 +provenance material /World/Looks/Clay: MaterialOrigin { slots: [1], displaced: false } +provenance material /World/Looks/Ground: MaterialOrigin { slots: [0], displaced: false } +provenance material /World/Looks/Metal: MaterialOrigin { slots: [2], displaced: false } +provenance light /World/Sky: LightOrigin { index: 1, geoms: 3..3 } +provenance light /World/Sun: LightOrigin { index: 0, geoms: 3..3 } +provenance geometry 0..1: /World/Floor +provenance geometry 1..2: /World/Matte +provenance geometry 2..3: /World/Chrome +provenance mesh: MeshOrigin { geom_id: 0, slot: 0, baked: true, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 10492340787237780741, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [1, 2] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/World/Cam"), cameras: ["/World/Cam"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/World/Cam"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/domelight_usda-7f00a6c7fd4959fa-1.image b/crates/crust-core/tests/data/import_baselines/domelight_usda-7f00a6c7fd4959fa-1.image new file mode 100644 index 000000000..35dcfa764 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/domelight_usda-7f00a6c7fd4959fa-1.image @@ -0,0 +1 @@ +480x270 16spp clamp-off 64391f5099bf45b3 diff --git a/crates/crust-core/tests/data/import_baselines/drop_usda-214f7b543bee6df1-1.digest b/crates/crust-core/tests/data/import_baselines/drop_usda-214f7b543bee6df1-1.digest new file mode 100644 index 000000000..5c76bb370 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/drop_usda-214f7b543bee6df1-1.digest @@ -0,0 +1,60 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: None +camera: Camera { origin: Vec3A(15.0, 3.0, 3.0), lower_left_corner: Vec3A(4.8863316, -0.044797063, 4.174048), horizontal: Vec3A(1.2295314, 0.0, -6.147657), vertical: Vec3A(-0.44830504, 3.4967792, -0.08966101), u: Vec3A(0.19611613, 0.0, -0.9805807), v: Vec3A(-0.1271232, 0.991561, -0.02542464), lens_radius: 0.05, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: None +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 640, height: 360, region: PixelRect { x0: 0, y0: 0, x1: 640, y1: 360 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: None, depth_of_field: true, motion_blur: false, layer_stack: ["$DIR/drop.usda"], invisible_overrides: Some(0) } +layer: $DIR/drop.usda +warning: Warning { code: CameraMissing, kind: Skipped, count: 1, prims: [], message: "USD stage has no UsdGeomCamera — falling back to world::get_settings camera" } +lights: 0 +volumes: 0 +world: 12 geometries, PrimitiveBreakdown { triangles: 320, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 5 } top level, PrimitiveBreakdown { triangles: 332, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 5 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=12:65eff1dac76e16e5 camera=12:65eff1dac76e16e5 shadow=12:65eff1dac76e16e5 indirect=12:65eff1dac76e16e5 +geom 1: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=12:108ece7556e2045d camera=12:108ece7556e2045d shadow=12:108ece7556e2045d indirect=12:108ece7556e2045d +geom 2: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=12:b6f2f6b932607ce5 camera=12:b6f2f6b932607ce5 shadow=12:b6f2f6b932607ce5 indirect=12:b6f2f6b932607ce5 +geom 3: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=12:95835634df888e55 camera=12:95835634df888e55 shadow=12:95835634df888e55 indirect=12:95835634df888e55 +geom 4: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=12:26e126fb8d08607d camera=12:26e126fb8d08607d shadow=12:26e126fb8d08607d indirect=12:26e126fb8d08607d +geom 5: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=12:18f7f442a8f08005 camera=12:18f7f442a8f08005 shadow=12:18f7f442a8f08005 indirect=12:18f7f442a8f08005 +geom 6: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=12:81beed4da02f2f05 camera=12:81beed4da02f2f05 shadow=12:81beed4da02f2f05 indirect=12:81beed4da02f2f05 +geom 7: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:d420bef838b31092 camera=2:d420bef838b31092 shadow=2:d420bef838b31092 indirect=2:d420bef838b31092 +geom 8: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=288:e054eb6a38940439 camera=288:e054eb6a38940439 shadow=288:e054eb6a38940439 indirect=288:e054eb6a38940439 +geom 9: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:5fd3af8a8974e005 camera=2:5fd3af8a8974e005 shadow=2:5fd3af8a8974e005 indirect=2:5fd3af8a8974e005 +geom 10: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:77f8032df1a5e1f5 camera=2:77f8032df1a5e1f5 shadow=2:77f8032df1a5e1f5 indirect=2:77f8032df1a5e1f5 +geom 11: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:9626b0f2f3e041c5 camera=2:9626b0f2f3e041c5 shadow=2:9626b0f2f3e041c5 indirect=2:9626b0f2f3e041c5 +provenance geometry 0..1: /World/inst +provenance geometry 1..2: /World/away/geo +provenance geometry 2..3: /World/box/geo +provenance geometry 3..4: /World/rock/geo +provenance geometry 4..5: /World/cup/geo +provenance geometry 5..6: /World/sunk/geo +provenance geometry 6..7: /World/onFloor/geo +provenance geometry 7..8: /World/slope/geo +provenance geometry 8..9: /World/terrain/geo +provenance geometry 9..10: /World/shelf/geo +provenance geometry 10..11: /World/table/geo +provenance geometry 11..12: /World/floor/geo +provenance mesh: MeshOrigin { geom_id: 1, slot: 0, baked: false, moving: false } +provenance mesh: MeshOrigin { geom_id: 2, slot: 0, baked: false, moving: false } +provenance mesh: MeshOrigin { geom_id: 3, slot: 1, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 4, slot: 2, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 5, slot: 0, baked: false, moving: false } +provenance mesh: MeshOrigin { geom_id: 6, slot: 0, baked: false, moving: false } +provenance mesh: MeshOrigin { geom_id: 7, slot: 3, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 8, slot: 4, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 9, slot: 5, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 10, slot: 6, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 11, slot: 7, baked: true, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 2634041098053373584, n_points: 8, n_indices: 24, n_uvs: None, smooth: true, material: 0 }), placements: 4, shared: true, displaced: false } +provenance mesh slot 1: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 14470132405950877311, n_points: 8, n_indices: 24, n_uvs: None, smooth: true, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 2: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 1206830347127950734, n_points: 8, n_indices: 24, n_uvs: None, smooth: true, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 3: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 1313731086437247865, n_points: 4, n_indices: 4, n_uvs: None, smooth: true, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 4: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 13511858414310182354, n_points: 169, n_indices: 576, n_uvs: None, smooth: true, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 5: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 1050066994217133652, n_points: 4, n_indices: 4, n_uvs: None, smooth: true, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 6: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 14095911038168715313, n_points: 4, n_indices: 4, n_uvs: None, smooth: true, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 7: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 14002714535549629103, n_points: 4, n_indices: 4, n_uvs: None, smooth: true, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: None, cameras: [], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: None, offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/drop_usda-214f7b543bee6df1-1.image b/crates/crust-core/tests/data/import_baselines/drop_usda-214f7b543bee6df1-1.image new file mode 100644 index 000000000..c734c5b1d --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/drop_usda-214f7b543bee6df1-1.image @@ -0,0 +1 @@ +640x360 16spp clamp-off a04a09c0d4b5e325 diff --git a/crates/crust-core/tests/data/import_baselines/drop_usda-4c62c449da4ae2d3-1.digest b/crates/crust-core/tests/data/import_baselines/drop_usda-4c62c449da4ae2d3-1.digest new file mode 100644 index 000000000..5c76bb370 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/drop_usda-4c62c449da4ae2d3-1.digest @@ -0,0 +1,60 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: None +camera: Camera { origin: Vec3A(15.0, 3.0, 3.0), lower_left_corner: Vec3A(4.8863316, -0.044797063, 4.174048), horizontal: Vec3A(1.2295314, 0.0, -6.147657), vertical: Vec3A(-0.44830504, 3.4967792, -0.08966101), u: Vec3A(0.19611613, 0.0, -0.9805807), v: Vec3A(-0.1271232, 0.991561, -0.02542464), lens_radius: 0.05, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: None +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 640, height: 360, region: PixelRect { x0: 0, y0: 0, x1: 640, y1: 360 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: None, depth_of_field: true, motion_blur: false, layer_stack: ["$DIR/drop.usda"], invisible_overrides: Some(0) } +layer: $DIR/drop.usda +warning: Warning { code: CameraMissing, kind: Skipped, count: 1, prims: [], message: "USD stage has no UsdGeomCamera — falling back to world::get_settings camera" } +lights: 0 +volumes: 0 +world: 12 geometries, PrimitiveBreakdown { triangles: 320, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 5 } top level, PrimitiveBreakdown { triangles: 332, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 5 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=12:65eff1dac76e16e5 camera=12:65eff1dac76e16e5 shadow=12:65eff1dac76e16e5 indirect=12:65eff1dac76e16e5 +geom 1: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=12:108ece7556e2045d camera=12:108ece7556e2045d shadow=12:108ece7556e2045d indirect=12:108ece7556e2045d +geom 2: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=12:b6f2f6b932607ce5 camera=12:b6f2f6b932607ce5 shadow=12:b6f2f6b932607ce5 indirect=12:b6f2f6b932607ce5 +geom 3: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=12:95835634df888e55 camera=12:95835634df888e55 shadow=12:95835634df888e55 indirect=12:95835634df888e55 +geom 4: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=12:26e126fb8d08607d camera=12:26e126fb8d08607d shadow=12:26e126fb8d08607d indirect=12:26e126fb8d08607d +geom 5: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=12:18f7f442a8f08005 camera=12:18f7f442a8f08005 shadow=12:18f7f442a8f08005 indirect=12:18f7f442a8f08005 +geom 6: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=12:81beed4da02f2f05 camera=12:81beed4da02f2f05 shadow=12:81beed4da02f2f05 indirect=12:81beed4da02f2f05 +geom 7: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:d420bef838b31092 camera=2:d420bef838b31092 shadow=2:d420bef838b31092 indirect=2:d420bef838b31092 +geom 8: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=288:e054eb6a38940439 camera=288:e054eb6a38940439 shadow=288:e054eb6a38940439 indirect=288:e054eb6a38940439 +geom 9: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:5fd3af8a8974e005 camera=2:5fd3af8a8974e005 shadow=2:5fd3af8a8974e005 indirect=2:5fd3af8a8974e005 +geom 10: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:77f8032df1a5e1f5 camera=2:77f8032df1a5e1f5 shadow=2:77f8032df1a5e1f5 indirect=2:77f8032df1a5e1f5 +geom 11: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:9626b0f2f3e041c5 camera=2:9626b0f2f3e041c5 shadow=2:9626b0f2f3e041c5 indirect=2:9626b0f2f3e041c5 +provenance geometry 0..1: /World/inst +provenance geometry 1..2: /World/away/geo +provenance geometry 2..3: /World/box/geo +provenance geometry 3..4: /World/rock/geo +provenance geometry 4..5: /World/cup/geo +provenance geometry 5..6: /World/sunk/geo +provenance geometry 6..7: /World/onFloor/geo +provenance geometry 7..8: /World/slope/geo +provenance geometry 8..9: /World/terrain/geo +provenance geometry 9..10: /World/shelf/geo +provenance geometry 10..11: /World/table/geo +provenance geometry 11..12: /World/floor/geo +provenance mesh: MeshOrigin { geom_id: 1, slot: 0, baked: false, moving: false } +provenance mesh: MeshOrigin { geom_id: 2, slot: 0, baked: false, moving: false } +provenance mesh: MeshOrigin { geom_id: 3, slot: 1, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 4, slot: 2, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 5, slot: 0, baked: false, moving: false } +provenance mesh: MeshOrigin { geom_id: 6, slot: 0, baked: false, moving: false } +provenance mesh: MeshOrigin { geom_id: 7, slot: 3, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 8, slot: 4, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 9, slot: 5, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 10, slot: 6, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 11, slot: 7, baked: true, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 2634041098053373584, n_points: 8, n_indices: 24, n_uvs: None, smooth: true, material: 0 }), placements: 4, shared: true, displaced: false } +provenance mesh slot 1: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 14470132405950877311, n_points: 8, n_indices: 24, n_uvs: None, smooth: true, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 2: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 1206830347127950734, n_points: 8, n_indices: 24, n_uvs: None, smooth: true, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 3: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 1313731086437247865, n_points: 4, n_indices: 4, n_uvs: None, smooth: true, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 4: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 13511858414310182354, n_points: 169, n_indices: 576, n_uvs: None, smooth: true, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 5: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 1050066994217133652, n_points: 4, n_indices: 4, n_uvs: None, smooth: true, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 6: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 14095911038168715313, n_points: 4, n_indices: 4, n_uvs: None, smooth: true, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 7: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 14002714535549629103, n_points: 4, n_indices: 4, n_uvs: None, smooth: true, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: None, cameras: [], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: None, offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/drop_usda-4c62c449da4ae2d3-1.image b/crates/crust-core/tests/data/import_baselines/drop_usda-4c62c449da4ae2d3-1.image new file mode 100644 index 000000000..c734c5b1d --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/drop_usda-4c62c449da4ae2d3-1.image @@ -0,0 +1 @@ +640x360 16spp clamp-off a04a09c0d4b5e325 diff --git a/crates/crust-core/tests/data/import_baselines/edge_false_usda-dfb19c6c90615a56-1.digest b/crates/crust-core/tests/data/import_baselines/edge_false_usda-dfb19c6c90615a56-1.digest new file mode 100644 index 000000000..a00b4d25d --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/edge_false_usda-dfb19c6c90615a56-1.digest @@ -0,0 +1,26 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/World/cam") +camera: Camera { origin: Vec3A(0.0, 0.0, 0.0), lower_left_corner: Vec3A(-5.0, -3.75, -10.0), horizontal: Vec3A(10.0, 0.0, 0.0), vertical: Vec3A(0.0, 7.5, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: Some("/Render/settings") +settings: RenderSettings { samples_per_pixel: 16, max_depth: 2, width: 32, height: 24, region: PixelRect { x0: 0, y0: 0, x1: 32, y1: 24 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 1, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [AovProduct { prim_path: "/Render/p", name: "p.exr", vars: [AovVar { prim_path: "/Render/C", name: "C", channel_prefix: None, source: Color, components: 3, precision: Float, accumulation: Filtered, clear: 0.0, expression: None, raw: false, variance: false }, AovVar { prim_path: "/Render/matte", name: "matte", channel_prefix: None, source: Primvar(PrimvarSource { index: 0, components: 1, role: Float }), components: 1, precision: Float, accumulation: Filtered, clear: 0.0, expression: None, raw: false, variance: false }, AovVar { prim_path: "/Render/depth", name: "depth", channel_prefix: None, source: Depth, components: 1, precision: Float, accumulation: Closest, clear: inf, expression: None, raw: false, variance: false }, AovVar { prim_path: "/Render/depth_filtered", name: "depth_filtered", channel_prefix: None, source: Depth, components: 1, precision: Float, accumulation: Filtered, clear: inf, expression: None, raw: false, variance: false }, AovVar { prim_path: "/Render/variance", name: "variance", channel_prefix: None, source: Variance, components: 1, precision: Float, accumulation: Filtered, clear: 0.0, expression: None, raw: false, variance: false }, AovVar { prim_path: "/Render/look_out", name: "look_out", channel_prefix: None, source: Filter(FilterSource { display: false, filter: 0, output: 0, components: 3, radiance: true }), components: 3, precision: Float, accumulation: Filtered, clear: 0.0, expression: None, raw: false, variance: false }], attributes: [] }], precomp: Some(Precomp { sample_filters: ["/Render/look"], display_filters: [], display: "beauty" }) } +pass: None +source: Source { lens: Some(Lens { focal_length: 24.0, aperture: [24.0, 18.0], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 10.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/edge_false.usda"], invisible_overrides: Some(0) } +layer: $DIR/edge_false.usda +lights: 1 +light 0: dome name Some("/World/sky") lpe None pmf 1.0 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 2 geometries, PrimitiveBreakdown { triangles: 4, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 4, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov Some((Some(0), false)) swapped false curves false scale 1.0 motion [] pieces all=2:2a13523c8e09c13d camera=2:2a13523c8e09c13d shadow=2:2a13523c8e09c13d indirect=2:2a13523c8e09c13d +geom 1: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:31db52e4afd4a225 camera=2:31db52e4afd4a225 shadow=2:31db52e4afd4a225 indirect=2:31db52e4afd4a225 +provenance light /World/sky: LightOrigin { index: 0, geoms: 0..0 } +provenance geometry 0..1: /World/Card +provenance geometry 1..2: /World/Wall +provenance mesh: MeshOrigin { geom_id: 0, slot: 0, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 1, slot: 1, baked: true, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 3430351340666728903, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 1: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 13118596165941616386, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: true, working: None, camera: Some("/World/cam"), cameras: ["/World/cam"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [("matte", 1)], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/World/cam"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/edge_false_usda-dfb19c6c90615a56-1.image b/crates/crust-core/tests/data/import_baselines/edge_false_usda-dfb19c6c90615a56-1.image new file mode 100644 index 000000000..f08c49d36 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/edge_false_usda-dfb19c6c90615a56-1.image @@ -0,0 +1 @@ +32x24 16spp clamp-off e72b7b7cff87e77d diff --git a/crates/crust-core/tests/data/import_baselines/edge_true_usda-bddf6fe338522a86-1.digest b/crates/crust-core/tests/data/import_baselines/edge_true_usda-bddf6fe338522a86-1.digest new file mode 100644 index 000000000..bb55ff6c7 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/edge_true_usda-bddf6fe338522a86-1.digest @@ -0,0 +1,26 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/World/cam") +camera: Camera { origin: Vec3A(0.0, 0.0, 0.0), lower_left_corner: Vec3A(-5.0, -3.75, -10.0), horizontal: Vec3A(10.0, 0.0, 0.0), vertical: Vec3A(0.0, 7.5, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: Some("/Render/settings") +settings: RenderSettings { samples_per_pixel: 16, max_depth: 2, width: 32, height: 24, region: PixelRect { x0: 0, y0: 0, x1: 32, y1: 24 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: true, guiding_train_iterations: 1, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [AovProduct { prim_path: "/Render/p", name: "p.exr", vars: [AovVar { prim_path: "/Render/C", name: "C", channel_prefix: None, source: Color, components: 3, precision: Float, accumulation: Filtered, clear: 0.0, expression: None, raw: false, variance: false }, AovVar { prim_path: "/Render/matte", name: "matte", channel_prefix: None, source: Primvar(PrimvarSource { index: 0, components: 1, role: Float }), components: 1, precision: Float, accumulation: Filtered, clear: 0.0, expression: None, raw: false, variance: false }, AovVar { prim_path: "/Render/depth", name: "depth", channel_prefix: None, source: Depth, components: 1, precision: Float, accumulation: Closest, clear: inf, expression: None, raw: false, variance: false }, AovVar { prim_path: "/Render/depth_filtered", name: "depth_filtered", channel_prefix: None, source: Depth, components: 1, precision: Float, accumulation: Filtered, clear: inf, expression: None, raw: false, variance: false }, AovVar { prim_path: "/Render/variance", name: "variance", channel_prefix: None, source: Variance, components: 1, precision: Float, accumulation: Filtered, clear: 0.0, expression: None, raw: false, variance: false }, AovVar { prim_path: "/Render/look_out", name: "look_out", channel_prefix: None, source: Filter(FilterSource { display: false, filter: 0, output: 0, components: 3, radiance: true }), components: 3, precision: Float, accumulation: Filtered, clear: 0.0, expression: None, raw: false, variance: false }], attributes: [] }], precomp: Some(Precomp { sample_filters: ["/Render/look"], display_filters: [], display: "beauty" }) } +pass: None +source: Source { lens: Some(Lens { focal_length: 24.0, aperture: [24.0, 18.0], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 10.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/edge_true.usda"], invisible_overrides: Some(0) } +layer: $DIR/edge_true.usda +lights: 1 +light 0: dome name Some("/World/sky") lpe None pmf 1.0 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 2 geometries, PrimitiveBreakdown { triangles: 4, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 4, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov Some((Some(0), false)) swapped false curves false scale 1.0 motion [] pieces all=2:2a13523c8e09c13d camera=2:2a13523c8e09c13d shadow=2:2a13523c8e09c13d indirect=2:2a13523c8e09c13d +geom 1: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:31db52e4afd4a225 camera=2:31db52e4afd4a225 shadow=2:31db52e4afd4a225 indirect=2:31db52e4afd4a225 +provenance light /World/sky: LightOrigin { index: 0, geoms: 0..0 } +provenance geometry 0..1: /World/Card +provenance geometry 1..2: /World/Wall +provenance mesh: MeshOrigin { geom_id: 0, slot: 0, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 1, slot: 1, baked: true, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 3430351340666728903, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 1: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 13118596165941616386, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: true, working: None, camera: Some("/World/cam"), cameras: ["/World/cam"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [("matte", 1)], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/World/cam"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/edge_true_usda-bddf6fe338522a86-1.image b/crates/crust-core/tests/data/import_baselines/edge_true_usda-bddf6fe338522a86-1.image new file mode 100644 index 000000000..2f5da29dd --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/edge_true_usda-bddf6fe338522a86-1.image @@ -0,0 +1 @@ +32x24 16spp clamp-off 99ad996344236215 diff --git a/crates/crust-core/tests/data/import_baselines/edges_usda-9743a0d0ff86dafe-1.digest b/crates/crust-core/tests/data/import_baselines/edges_usda-9743a0d0ff86dafe-1.digest new file mode 100644 index 000000000..800e6eeeb --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/edges_usda-9743a0d0ff86dafe-1.digest @@ -0,0 +1,26 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/World/cam") +camera: Camera { origin: Vec3A(0.0, 0.0, 10.0), lower_left_corner: Vec3A(-2.0955, -1.5716249, 0.0), horizontal: Vec3A(4.191, 0.0, 0.0), vertical: Vec3A(0.0, 3.1432498, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: Some("/Render/settings") +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 48, height: 36, region: PixelRect { x0: 0, y0: 0, x1: 48, y1: 36 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [AovProduct { prim_path: "/Render/p", name: "p.exr", vars: [AovVar { prim_path: "/Render/P", name: "P", channel_prefix: None, source: P, components: 3, precision: Float, accumulation: Closest, clear: 0.0, expression: None, raw: false, variance: false }, AovVar { prim_path: "/Render/Pref", name: "Pref", channel_prefix: None, source: Primvar(PrimvarSource { index: 0, components: 3, role: Vector }), components: 3, precision: Float, accumulation: Closest, clear: 0.0, expression: None, raw: false, variance: false }, AovVar { prim_path: "/Render/Cd", name: "Cd", channel_prefix: None, source: Primvar(PrimvarSource { index: 1, components: 3, role: Color }), components: 3, precision: Float, accumulation: Filtered, clear: 0.0, expression: None, raw: false, variance: false }], attributes: [] }], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 50.0, aperture: [20.955, 15.2908], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 10.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/edges.usda"], invisible_overrides: Some(0) } +layer: $DIR/edges.usda +lights: 1 +light 0: dome name Some("/World/dome") lpe None pmf 1.0 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 2 geometries, PrimitiveBreakdown { triangles: 4, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 4, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov Some((Some(0), false)) swapped false curves false scale 1.0 motion [] pieces all=2:25db25008e735125 camera=2:25db25008e735125 shadow=2:25db25008e735125 indirect=2:25db25008e735125 +geom 1: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov Some((Some(1), false)) swapped false curves false scale 1.0 motion [] pieces all=2:20ce8af92139f69f camera=2:20ce8af92139f69f shadow=2:20ce8af92139f69f indirect=2:20ce8af92139f69f +provenance light /World/dome: LightOrigin { index: 0, geoms: 2..2 } +provenance geometry 0..1: /World/back +provenance geometry 1..2: /World/front +provenance mesh: MeshOrigin { geom_id: 0, slot: 0, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 1, slot: 1, baked: true, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 7627698346972322759, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 1: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 15030511554815353325, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/World/cam"), cameras: ["/World/cam"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [("rest", 3), ("displayColor", 3)], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/World/cam"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/edges_usda-9743a0d0ff86dafe-1.image b/crates/crust-core/tests/data/import_baselines/edges_usda-9743a0d0ff86dafe-1.image new file mode 100644 index 000000000..4a30c4d68 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/edges_usda-9743a0d0ff86dafe-1.image @@ -0,0 +1 @@ +48x36 16spp clamp-off 04cf6161c383092a diff --git a/crates/crust-core/tests/data/import_baselines/edits_usda-077b57f7b0804f19-1.digest b/crates/crust-core/tests/data/import_baselines/edits_usda-077b57f7b0804f19-1.digest new file mode 100644 index 000000000..adf8344c0 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/edits_usda-077b57f7b0804f19-1.digest @@ -0,0 +1,40 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/scene/camera1") +camera: Camera { origin: Vec3A(0.0074343784, 1.9913422, 4.0133057), lower_left_corner: Vec3A(-4.9925594, -3.0086517, -0.98669434), horizontal: Vec3A(9.999988, 0.0, 0.0), vertical: Vec3A(0.0, 9.999988, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: Some(Vec4(0.0, 0.0, -1.0, 3.9133058)), far: Some(Vec4(0.0, 0.0, 1.0, 9995.986)), planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: Some("/Render/settings") +settings: RenderSettings { samples_per_pixel: 16, max_depth: 32, width: 32, height: 32, region: PixelRect { x0: 0, y0: 0, x1: 32, y1: 32 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 12.700017, aperture: [25.4, 25.4], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 5.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/edits.usda", "$ROOT/samples/cornellbox.usda"], invisible_overrides: Some(0) } +layer: $ROOT/samples/cornellbox.usda +layer: $DIR/edits.usda +warning: Warning { code: MaterialFallbackDefault, kind: Skipped, count: 1, prims: ["/scene/Looks/initialShadingGroup"], message: "Material /scene/Looks/initialShadingGroup has no surface shader — using default grey OpenPBR" } +lights: 1 +light 0: dome name Some("/scene/Sky") lpe None pmf 1.0 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 5 geometries, PrimitiveBreakdown { triangles: 822, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 2 } top level, PrimitiveBreakdown { triangles: 1582, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 2 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.3585339 motion [] pieces all=760:2344ecf63e12c441 camera=760:2344ecf63e12c441 shadow=760:2344ecf63e12c441 indirect=760:2344ecf63e12c441 +geom 1: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.25 motion [] pieces all=800:4a8c9f44d777e131 camera=800:4a8c9f44d777e131 shadow=800:4a8c9f44d777e131 indirect=800:4a8c9f44d777e131 +geom 2: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=12:94a297badef437e1 camera=12:94a297badef437e1 shadow=12:94a297badef437e1 indirect=12:94a297badef437e1 +geom 3: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.2 motion [] pieces all=760:c2b60a75c52c78b9 camera=760:c2b60a75c52c78b9 shadow=760:c2b60a75c52c78b9 indirect=760:c2b60a75c52c78b9 +geom 4: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 4.0 motion [] pieces all=10:88b22fc3345d5b05 camera=10:88b22fc3345d5b05 shadow=10:88b22fc3345d5b05 indirect=10:88b22fc3345d5b05 +provenance material /scene/Looks/initialShadingGroup: MaterialOrigin { slots: [0, 1, 2, 3, 4], displaced: false } +provenance light /scene/Sky: LightOrigin { index: 0, geoms: 5..5 } +provenance geometry 0..1: /scene/pSphere2 +provenance geometry 1..2: /scene/pTorus1 +provenance geometry 2..3: /scene/pCube2 +provenance geometry 3..4: /scene/pSphere1 +provenance geometry 4..5: /scene/pCube1 +provenance mesh: MeshOrigin { geom_id: 0, slot: 0, baked: false, moving: false } +provenance mesh: MeshOrigin { geom_id: 1, slot: 1, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 2, slot: 2, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 3, slot: 0, baked: false, moving: false } +provenance mesh: MeshOrigin { geom_id: 4, slot: 3, baked: true, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 17119738035130870988, n_points: 382, n_indices: 1560, n_uvs: None, smooth: false, material: 0 }), placements: 2, shared: false, displaced: false } +provenance mesh slot 1: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 6096447469814747168, n_points: 400, n_indices: 1600, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 2: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 1739488954094729910, n_points: 8, n_indices: 24, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 3: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 12343188411137242430, n_points: 8, n_indices: 20, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: true }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/scene/camera1"), cameras: ["/scene/camera1"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/scene/camera1"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/edits_usda-077b57f7b0804f19-1.image b/crates/crust-core/tests/data/import_baselines/edits_usda-077b57f7b0804f19-1.image new file mode 100644 index 000000000..1ac592459 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/edits_usda-077b57f7b0804f19-1.image @@ -0,0 +1 @@ +32x32 16spp clamp-off e9cfe8ea4fd880fc diff --git a/crates/crust-core/tests/data/import_baselines/edits_usda-085dfd17ac95282d-1.digest b/crates/crust-core/tests/data/import_baselines/edits_usda-085dfd17ac95282d-1.digest new file mode 100644 index 000000000..8889914b1 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/edits_usda-085dfd17ac95282d-1.digest @@ -0,0 +1,29 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/World/Cam") +camera: Camera { origin: Vec3A(0.0, 0.5, 6.0), lower_left_corner: Vec3A(-4.7783756, -2.6855836, -4.0), horizontal: Vec3A(9.556751, 0.0, 0.0), vertical: Vec3A(0.0, 6.371167, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: Some("/Render/settings") +settings: RenderSettings { samples_per_pixel: 128, max_depth: 2, width: 48, height: 32, region: PixelRect { x0: 0, y0: 0, x1: 48, y1: 32 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [AovProduct { prim_path: "/Render/beauty", name: "beauty.exr", vars: [AovVar { prim_path: "/Render/C", name: "C", channel_prefix: None, source: Color, components: 3, precision: Float, accumulation: Filtered, clear: 0.0, expression: None, raw: false, variance: false }], attributes: [] }], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 24.0, aperture: [20.955, 15.2908], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 10.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/edits.usda", "$DIR/input.usda"], invisible_overrides: Some(0) } +layer: $DIR/edits.usda +layer: $DIR/input.usda +lights: 2 +light 0: distant name Some("/World/Sun") lpe None pmf 0.5 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 1: dome name Some("/World/Sky") lpe None pmf 0.5 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 2 geometries, PrimitiveBreakdown { triangles: 4, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 4, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:0e0a4667da70ad35 camera=2:0e0a4667da70ad35 shadow=2:0e0a4667da70ad35 indirect=2:0e0a4667da70ad35 +geom 1: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:6787da8eacebee45 camera=2:6787da8eacebee45 shadow=2:6787da8eacebee45 indirect=2:6787da8eacebee45 +provenance light /World/Sky: LightOrigin { index: 1, geoms: 2..2 } +provenance light /World/Sun: LightOrigin { index: 0, geoms: 2..2 } +provenance geometry 0..1: /World/Card +provenance geometry 1..2: /World/Floor +provenance mesh: MeshOrigin { geom_id: 0, slot: 0, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 1, slot: 1, baked: true, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 18358658470076285213, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 1: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 800109031887815527, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: true }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/World/Cam"), cameras: ["/World/Cam2", "/World/Cam"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/World/Cam"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/edits_usda-085dfd17ac95282d-1.image b/crates/crust-core/tests/data/import_baselines/edits_usda-085dfd17ac95282d-1.image new file mode 100644 index 000000000..aa809d36e --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/edits_usda-085dfd17ac95282d-1.image @@ -0,0 +1 @@ +48x32 16spp clamp-off 8505746c918f1879 diff --git a/crates/crust-core/tests/data/import_baselines/edits_usda-188f318a9146ce97-1.digest b/crates/crust-core/tests/data/import_baselines/edits_usda-188f318a9146ce97-1.digest new file mode 100644 index 000000000..96531cef6 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/edits_usda-188f318a9146ce97-1.digest @@ -0,0 +1,22 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/World/Cam") +camera: Camera { origin: Vec3A(0.0, 0.0, 6.0), lower_left_corner: Vec3A(-4.247444, -2.5484667, -4.0), horizontal: Vec3A(8.494888, 0.0, 0.0), vertical: Vec3A(0.0, 5.0969334, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: Some("/Render/settings") +settings: RenderSettings { samples_per_pixel: 128, max_depth: 3, width: 40, height: 24, region: PixelRect { x0: 0, y0: 0, x1: 40, y1: 24 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 30.0, aperture: [20.955, 15.2908], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 10.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/edits.usda", "$DIR/input.usda"], invisible_overrides: Some(0) } +layer: $DIR/edits.usda +layer: $DIR/input.usda +lights: 1 +light 0: dome name Some("/World/Sky") lpe None pmf 1.0 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 1 geometries, PrimitiveBreakdown { triangles: 0, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 1 } top level, PrimitiveBreakdown { triangles: 0, spheres: 0, disks: 0, cylinders: 0, curve_segments: 3, cubic_curve_spans: 0, instances: 1 } unique, motion false +geom 0: material #0 Signature { kind: "MaterialX", cutout: false, straight: false, boundary: false, emits: false, uv: true, uv_primvar: None, face_texture: None, curve: Some((false, false, [])), primvars: None } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves true scale 1.0 motion [] pieces all=3:a4253f27618d90a9 camera=3:a4253f27618d90a9 shadow=3:a4253f27618d90a9 indirect=3:a4253f27618d90a9 +provenance material /World/Looks/Hair: MaterialOrigin { slots: [0], displaced: false } +provenance light /World/Sky: LightOrigin { index: 0, geoms: 1..1 } +provenance geometry 0..1: /World/Groom +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: true }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/World/Cam"), cameras: ["/World/Cam"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/World/Cam"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/edits_usda-188f318a9146ce97-1.image b/crates/crust-core/tests/data/import_baselines/edits_usda-188f318a9146ce97-1.image new file mode 100644 index 000000000..8200e2f81 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/edits_usda-188f318a9146ce97-1.image @@ -0,0 +1 @@ +40x24 16spp clamp-off 1966b9063f1b648f diff --git a/crates/crust-core/tests/data/import_baselines/edits_usda-1966e17597c3de42-1.digest b/crates/crust-core/tests/data/import_baselines/edits_usda-1966e17597c3de42-1.digest new file mode 100644 index 000000000..303f35cc5 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/edits_usda-1966e17597c3de42-1.digest @@ -0,0 +1,22 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/World/Cam") +camera: Camera { origin: Vec3A(0.0, 0.0, 6.0), lower_left_corner: Vec3A(-4.7783756, -3.1855836, -4.0), horizontal: Vec3A(9.556751, 0.0, 0.0), vertical: Vec3A(0.0, 6.371167, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: Some("/Render/settings") +settings: RenderSettings { samples_per_pixel: 128, max_depth: 2, width: 48, height: 32, region: PixelRect { x0: 0, y0: 0, x1: 48, y1: 32 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: false, depth_of_field: true, exposure_scale: 2.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 24.0, aperture: [20.955, 15.2908], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 10.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/edits.usda", "$DIR/input.usda"], invisible_overrides: Some(0) } +layer: $DIR/edits.usda +layer: $DIR/input.usda +warning: Warning { code: TimeMotionNeedsFrame, kind: Skipped, count: 1, prims: ["/World/Mover"], message: "/World/Cam opens its shutter (-0.25 .. 0.25), but no frame was given: 1 drawn prim's time-sampled transforms are not evaluated over it and render sharp (the first at /World/Mover). Render a frame with -f" } +lights: 1 +light 0: distant name Some("/World/Sun") lpe None pmf 1.0 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 1 geometries, PrimitiveBreakdown { triangles: 0, spheres: 1, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 0, spheres: 1, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:984632b55acb5495 camera=1:984632b55acb5495 shadow=1:984632b55acb5495 indirect=1:984632b55acb5495 +provenance light /World/Sun: LightOrigin { index: 0, geoms: 1..1 } +provenance geometry 0..1: /World/Mover +provenance spheres: [0] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: true }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/World/Cam"), cameras: ["/World/Cam"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/World/Cam"), offsets: [13821547256400052224, 4598175219545276416], interval: None, query: true, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/edits_usda-1966e17597c3de42-1.image b/crates/crust-core/tests/data/import_baselines/edits_usda-1966e17597c3de42-1.image new file mode 100644 index 000000000..79bc428f3 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/edits_usda-1966e17597c3de42-1.image @@ -0,0 +1 @@ +48x32 16spp clamp-off 0956f9aa6aa6e7f9 diff --git a/crates/crust-core/tests/data/import_baselines/edits_usda-19a787b3bcc74617-1.digest b/crates/crust-core/tests/data/import_baselines/edits_usda-19a787b3bcc74617-1.digest new file mode 100644 index 000000000..dfaf03a7a --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/edits_usda-19a787b3bcc74617-1.digest @@ -0,0 +1,26 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: None +camera: Camera { origin: Vec3A(15.0, 3.0, 3.0), lower_left_corner: Vec3A(4.8863316, -0.044797063, 4.174048), horizontal: Vec3A(1.2295314, 0.0, -6.147657), vertical: Vec3A(-0.44830504, 3.4967792, -0.08966101), u: Vec3A(0.19611613, 0.0, -0.9805807), v: Vec3A(-0.1271232, 0.991561, -0.02542464), lens_radius: 0.05, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: None +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 640, height: 360, region: PixelRect { x0: 0, y0: 0, x1: 640, y1: 360 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: None, depth_of_field: true, motion_blur: false, layer_stack: ["$DIR/edits.usda", "$DIR/input.usda"], invisible_overrides: Some(0) } +layer: $DIR/edits.usda +layer: $DIR/input.usda +warning: Warning { code: CameraMissing, kind: Skipped, count: 1, prims: [], message: "USD stage has no UsdGeomCamera — falling back to world::get_settings camera" } +lights: 0 +volumes: 0 +world: 2 geometries, PrimitiveBreakdown { triangles: 14, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 14, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=12:d789c596bbc3ac95 camera=12:d789c596bbc3ac95 shadow=12:d789c596bbc3ac95 indirect=12:d789c596bbc3ac95 +geom 1: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:3b674ae68fc6ea85 camera=2:3b674ae68fc6ea85 shadow=2:3b674ae68fc6ea85 indirect=2:3b674ae68fc6ea85 +provenance geometry 0..1: /World/cube/geo +provenance geometry 1..2: /World/floor/geo +provenance mesh: MeshOrigin { geom_id: 0, slot: 0, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 1, slot: 1, baked: true, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 2634041098053373584, n_points: 8, n_indices: 24, n_uvs: None, smooth: true, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 1: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 8873273216732545453, n_points: 4, n_indices: 4, n_uvs: None, smooth: true, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: true }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: None, cameras: [], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: None, offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/edits_usda-19a787b3bcc74617-1.image b/crates/crust-core/tests/data/import_baselines/edits_usda-19a787b3bcc74617-1.image new file mode 100644 index 000000000..c734c5b1d --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/edits_usda-19a787b3bcc74617-1.image @@ -0,0 +1 @@ +640x360 16spp clamp-off a04a09c0d4b5e325 diff --git a/crates/crust-core/tests/data/import_baselines/edits_usda-23003ea81a2d2024-1.digest b/crates/crust-core/tests/data/import_baselines/edits_usda-23003ea81a2d2024-1.digest new file mode 100644 index 000000000..eb0356809 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/edits_usda-23003ea81a2d2024-1.digest @@ -0,0 +1,45 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/World/Cam") +camera: Camera { origin: Vec3A(0.0, 0.5, 0.0), lower_left_corner: Vec3A(-2.9935715, -1.1838839, -10.0), horizontal: Vec3A(5.987143, 0.0, 0.0), vertical: Vec3A(0.0, 3.3677678, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: Some("/Render/settings") +settings: RenderSettings { samples_per_pixel: 64, max_depth: 4, width: 48, height: 27, region: PixelRect { x0: 0, y0: 0, x1: 48, y1: 27 }, min_samples_per_pixel: 16, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 35.0, aperture: [20.955, 11.787188], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 10.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/edits.usda", "$DIR/input.usda", "$ROOT/samples/subdivision_adaptive.usda"], invisible_overrides: Some(0) } +layer: $ROOT/samples/subdivision_adaptive.usda +layer: $DIR/edits.usda +layer: $DIR/input.usda +lights: 2 +light 0: distant name Some("/World/Sun") lpe None pmf 0.5 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 1: dome name Some("/World/Sky") lpe None pmf 0.5 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 6 geometries, PrimitiveBreakdown { triangles: 110, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 4 } top level, PrimitiveBreakdown { triangles: 122, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 4 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:4d8d0a8634ac849c camera=2:4d8d0a8634ac849c shadow=2:4d8d0a8634ac849c indirect=2:4d8d0a8634ac849c +geom 1: material #1 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=12:9b9b8ee224ae5549 camera=12:9b9b8ee224ae5549 shadow=12:9b9b8ee224ae5549 indirect=12:9b9b8ee224ae5549 +geom 2: material #1 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=12:56e3227c4c4f5a8d camera=12:56e3227c4c4f5a8d shadow=12:56e3227c4c4f5a8d indirect=12:56e3227c4c4f5a8d +geom 3: material #1 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=12:14e930a5d0b26e15 camera=12:14e930a5d0b26e15 shadow=12:14e930a5d0b26e15 indirect=12:14e930a5d0b26e15 +geom 4: material #1 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=12:1d38133bdf0eede5 camera=12:1d38133bdf0eede5 shadow=12:1d38133bdf0eede5 indirect=12:1d38133bdf0eede5 +geom 5: material #1 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=108:1052671392e3c4b2 camera=108:1052671392e3c4b2 shadow=108:1052671392e3c4b2 indirect=108:1052671392e3c4b2 +provenance material /World/Materials/clay: MaterialOrigin { slots: [1, 2, 3, 4, 5], displaced: false } +provenance arc source: /World/Cage +provenance light /World/Sky: LightOrigin { index: 1, geoms: 6..6 } +provenance light /World/Sun: LightOrigin { index: 0, geoms: 0..0 } +provenance geometry 0..1: /World/Floor +provenance geometry 1..2: /World/Cube5 +provenance geometry 2..3: /World/Cube4 +provenance geometry 3..4: /World/Cube3 +provenance geometry 4..5: /World/Cube2 +provenance geometry 5..6: /World/Cube1 +provenance mesh: MeshOrigin { geom_id: 0, slot: 0, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 1, slot: 1, baked: false, moving: false } +provenance mesh: MeshOrigin { geom_id: 2, slot: 1, baked: false, moving: false } +provenance mesh: MeshOrigin { geom_id: 3, slot: 1, baked: false, moving: false } +provenance mesh: MeshOrigin { geom_id: 4, slot: 1, baked: false, moving: false } +provenance mesh: MeshOrigin { geom_id: 5, slot: 2, baked: true, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 2079923942787246473, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 1: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 16825702510234920227, n_points: 8, n_indices: 36, n_uvs: None, smooth: true, material: 1 }), placements: 4, shared: false, displaced: false } +provenance mesh slot 2: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 8434524658645368605, n_points: 56, n_indices: 324, n_uvs: None, smooth: true, material: 1 }), placements: 1, shared: false, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: true }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: Some(ScreenKey([0, 1056964608, 0, 1117804534, 0, 1056964608, 0, 3212836864, 0, 3197715800, 1065353216, 0, 3197715800, 0, 3212836864, 3190582786, 0, 1065353216, 3190582786, 0, 0, 3212836864, 1090519040, 3])), domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/World/Cam"), cameras: ["/World/Cam"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/World/Cam"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/edits_usda-23003ea81a2d2024-1.image b/crates/crust-core/tests/data/import_baselines/edits_usda-23003ea81a2d2024-1.image new file mode 100644 index 000000000..b0e6d1897 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/edits_usda-23003ea81a2d2024-1.image @@ -0,0 +1 @@ +48x27 16spp clamp-off 284489ddb79b7eed diff --git a/crates/crust-core/tests/data/import_baselines/edits_usda-23fb1cff1e547a51-1.digest b/crates/crust-core/tests/data/import_baselines/edits_usda-23fb1cff1e547a51-1.digest new file mode 100644 index 000000000..03691cd00 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/edits_usda-23fb1cff1e547a51-1.digest @@ -0,0 +1,23 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/World/Cam") +camera: Camera { origin: Vec3A(0.0, 0.0, 6.0), lower_left_corner: Vec3A(-1.3761721, -0.91744804, 0.0), horizontal: Vec3A(2.7523441, 0.0, 0.0), vertical: Vec3A(0.0, 1.8348961, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0125, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: Some("/Render/settings") +settings: RenderSettings { samples_per_pixel: 16, max_depth: 2, width: 48, height: 32, region: PixelRect { x0: 0, y0: 0, x1: 48, y1: 32 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 50.0, aperture: [20.955, 15.2908], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 2.0, focus_distance: 6.0 }), depth_of_field: true, motion_blur: false, layer_stack: ["$DIR/edits.usda", "$DIR/input.usda"], invisible_overrides: Some(0) } +layer: $DIR/edits.usda +layer: $DIR/input.usda +lights: 1 +light 0: distant name Some("/World/Sun") lpe None pmf 1.0 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 2 geometries, PrimitiveBreakdown { triangles: 0, spheres: 2, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 0, spheres: 2, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:1cd1488d041dfcdb camera=1:1cd1488d041dfcdb shadow=1:1cd1488d041dfcdb indirect=1:1cd1488d041dfcdb +geom 1: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:2d90e22d27992fa5 camera=1:2d90e22d27992fa5 shadow=1:2d90e22d27992fa5 indirect=1:2d90e22d27992fa5 +provenance light /World/Sun: LightOrigin { index: 0, geoms: 2..2 } +provenance geometry 0..1: /World/Far +provenance geometry 1..2: /World/Near +provenance spheres: [0, 1] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: true }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/World/Cam"), cameras: ["/World/Cam"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/World/Cam"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/edits_usda-23fb1cff1e547a51-1.image b/crates/crust-core/tests/data/import_baselines/edits_usda-23fb1cff1e547a51-1.image new file mode 100644 index 000000000..51107fcdd --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/edits_usda-23fb1cff1e547a51-1.image @@ -0,0 +1 @@ +48x32 16spp clamp-off fbca99e6d6c9aaa1 diff --git a/crates/crust-core/tests/data/import_baselines/edits_usda-24cc8ef3649b336a-1.digest b/crates/crust-core/tests/data/import_baselines/edits_usda-24cc8ef3649b336a-1.digest new file mode 100644 index 000000000..247bef0aa --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/edits_usda-24cc8ef3649b336a-1.digest @@ -0,0 +1,40 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/scene/camera1") +camera: Camera { origin: Vec3A(0.0074343784, 1.9913422, 4.0133057), lower_left_corner: Vec3A(-4.9925594, -3.0086517, -0.98669434), horizontal: Vec3A(9.999988, 0.0, 0.0), vertical: Vec3A(0.0, 9.999988, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: Some(Vec4(0.0, 0.0, -1.0, 3.9133058)), far: Some(Vec4(0.0, 0.0, 1.0, 9995.986)), planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: Some("/Render/settings") +settings: RenderSettings { samples_per_pixel: 4, max_depth: 32, width: 32, height: 32, region: PixelRect { x0: 0, y0: 0, x1: 32, y1: 32 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 12.700017, aperture: [25.4, 25.4], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 5.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/edits.usda", "$ROOT/samples/cornellbox.usda"], invisible_overrides: Some(0) } +layer: $ROOT/samples/cornellbox.usda +layer: $DIR/edits.usda +warning: Warning { code: MaterialFallbackDefault, kind: Skipped, count: 1, prims: ["/scene/Looks/initialShadingGroup"], message: "Material /scene/Looks/initialShadingGroup has no surface shader — using default grey OpenPBR" } +lights: 1 +light 0: dome name Some("/scene/Sky") lpe None pmf 1.0 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 5 geometries, PrimitiveBreakdown { triangles: 822, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 2 } top level, PrimitiveBreakdown { triangles: 1582, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 2 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.3585339 motion [] pieces all=760:2344ecf63e12c441 camera=760:2344ecf63e12c441 shadow=760:2344ecf63e12c441 indirect=760:2344ecf63e12c441 +geom 1: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.25 motion [] pieces all=800:4a8c9f44d777e131 camera=800:4a8c9f44d777e131 shadow=800:4a8c9f44d777e131 indirect=800:4a8c9f44d777e131 +geom 2: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=12:94a297badef437e1 camera=12:94a297badef437e1 shadow=12:94a297badef437e1 indirect=12:94a297badef437e1 +geom 3: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.2 motion [] pieces all=760:c2b60a75c52c78b9 camera=760:c2b60a75c52c78b9 shadow=760:c2b60a75c52c78b9 indirect=760:c2b60a75c52c78b9 +geom 4: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 4.0 motion [] pieces all=10:88b22fc3345d5b05 camera=10:88b22fc3345d5b05 shadow=10:88b22fc3345d5b05 indirect=10:88b22fc3345d5b05 +provenance material /scene/Looks/initialShadingGroup: MaterialOrigin { slots: [0, 1, 2, 3, 4], displaced: false } +provenance light /scene/Sky: LightOrigin { index: 0, geoms: 5..5 } +provenance geometry 0..1: /scene/pSphere2 +provenance geometry 1..2: /scene/pTorus1 +provenance geometry 2..3: /scene/pCube2 +provenance geometry 3..4: /scene/pSphere1 +provenance geometry 4..5: /scene/pCube1 +provenance mesh: MeshOrigin { geom_id: 0, slot: 0, baked: false, moving: false } +provenance mesh: MeshOrigin { geom_id: 1, slot: 1, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 2, slot: 2, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 3, slot: 0, baked: false, moving: false } +provenance mesh: MeshOrigin { geom_id: 4, slot: 3, baked: true, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 17119738035130870988, n_points: 382, n_indices: 1560, n_uvs: None, smooth: false, material: 0 }), placements: 2, shared: false, displaced: false } +provenance mesh slot 1: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 6096447469814747168, n_points: 400, n_indices: 1600, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 2: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 1739488954094729910, n_points: 8, n_indices: 24, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 3: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 12343188411137242430, n_points: 8, n_indices: 20, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: true }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/scene/camera1"), cameras: ["/scene/camera1"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/scene/camera1"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/edits_usda-24cc8ef3649b336a-1.image b/crates/crust-core/tests/data/import_baselines/edits_usda-24cc8ef3649b336a-1.image new file mode 100644 index 000000000..1ac592459 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/edits_usda-24cc8ef3649b336a-1.image @@ -0,0 +1 @@ +32x32 16spp clamp-off e9cfe8ea4fd880fc diff --git a/crates/crust-core/tests/data/import_baselines/edits_usda-30c8f1f2b1117913-1.digest b/crates/crust-core/tests/data/import_baselines/edits_usda-30c8f1f2b1117913-1.digest new file mode 100644 index 000000000..d75b9961a --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/edits_usda-30c8f1f2b1117913-1.digest @@ -0,0 +1,46 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/World/Cam") +camera: Camera { origin: Vec3A(0.0, 0.5, 0.0), lower_left_corner: Vec3A(-2.0955, -0.6787187, -10.0), horizontal: Vec3A(4.191, 0.0, 0.0), vertical: Vec3A(0.0, 2.3574374, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: Some("/Render/settings") +settings: RenderSettings { samples_per_pixel: 64, max_depth: 4, width: 48, height: 27, region: PixelRect { x0: 0, y0: 0, x1: 48, y1: 27 }, min_samples_per_pixel: 16, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 50.0, aperture: [20.955, 11.787188], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 10.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/edits.usda", "$DIR/input.usda", "$ROOT/samples/subdivision_adaptive.usda"], invisible_overrides: Some(0) } +layer: $ROOT/samples/subdivision_adaptive.usda +layer: $DIR/edits.usda +layer: $DIR/input.usda +lights: 2 +light 0: distant name Some("/World/Sun") lpe None pmf 0.5 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 1: dome name Some("/World/Sky") lpe None pmf 0.5 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 6 geometries, PrimitiveBreakdown { triangles: 290, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 3 } top level, PrimitiveBreakdown { triangles: 302, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 3 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:4d8d0a8634ac849c camera=2:4d8d0a8634ac849c shadow=2:4d8d0a8634ac849c indirect=2:4d8d0a8634ac849c +geom 1: material #1 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=12:9b9b8ee224ae5549 camera=12:9b9b8ee224ae5549 shadow=12:9b9b8ee224ae5549 indirect=12:9b9b8ee224ae5549 +geom 2: material #1 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=12:56e3227c4c4f5a8d camera=12:56e3227c4c4f5a8d shadow=12:56e3227c4c4f5a8d indirect=12:56e3227c4c4f5a8d +geom 3: material #1 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=12:14e930a5d0b26e15 camera=12:14e930a5d0b26e15 shadow=12:14e930a5d0b26e15 indirect=12:14e930a5d0b26e15 +geom 4: material #1 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=48:85fd1a1e8638f8d5 camera=48:85fd1a1e8638f8d5 shadow=48:85fd1a1e8638f8d5 indirect=48:85fd1a1e8638f8d5 +geom 5: material #1 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=240:ceb54a03c39454ff camera=240:ceb54a03c39454ff shadow=240:ceb54a03c39454ff indirect=240:ceb54a03c39454ff +provenance material /World/Materials/clay: MaterialOrigin { slots: [1, 2, 3, 4, 5], displaced: false } +provenance arc source: /World/Cage +provenance light /World/Sky: LightOrigin { index: 1, geoms: 6..6 } +provenance light /World/Sun: LightOrigin { index: 0, geoms: 0..0 } +provenance geometry 0..1: /World/Floor +provenance geometry 1..2: /World/Cube5 +provenance geometry 2..3: /World/Cube4 +provenance geometry 3..4: /World/Cube3 +provenance geometry 4..5: /World/Cube2 +provenance geometry 5..6: /World/Cube1 +provenance mesh: MeshOrigin { geom_id: 0, slot: 0, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 1, slot: 1, baked: false, moving: false } +provenance mesh: MeshOrigin { geom_id: 2, slot: 1, baked: false, moving: false } +provenance mesh: MeshOrigin { geom_id: 3, slot: 1, baked: false, moving: false } +provenance mesh: MeshOrigin { geom_id: 4, slot: 2, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 5, slot: 3, baked: true, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 2079923942787246473, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 1: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 16825702510234920227, n_points: 8, n_indices: 36, n_uvs: None, smooth: true, material: 1 }), placements: 3, shared: false, displaced: false } +provenance mesh slot 2: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 9125125757038733368, n_points: 26, n_indices: 144, n_uvs: None, smooth: true, material: 1 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 3: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 13090063996844779502, n_points: 122, n_indices: 720, n_uvs: None, smooth: true, material: 1 }), placements: 1, shared: false, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: true }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: Some(ScreenKey([0, 1056964608, 0, 1122308081, 0, 1056964608, 0, 3212836864, 0, 3193345094, 1065353216, 0, 3193345094, 0, 3212836864, 3186714319, 0, 1065353216, 3186714319, 0, 0, 3212836864, 1090519040, 3])), domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/World/Cam"), cameras: ["/World/Cam"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/World/Cam"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/edits_usda-30c8f1f2b1117913-1.image b/crates/crust-core/tests/data/import_baselines/edits_usda-30c8f1f2b1117913-1.image new file mode 100644 index 000000000..35947da35 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/edits_usda-30c8f1f2b1117913-1.image @@ -0,0 +1 @@ +48x27 16spp clamp-off cc1ed1cd405cee06 diff --git a/crates/crust-core/tests/data/import_baselines/edits_usda-339a76e50715bbe3-1.digest b/crates/crust-core/tests/data/import_baselines/edits_usda-339a76e50715bbe3-1.digest new file mode 100644 index 000000000..f7e3773a8 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/edits_usda-339a76e50715bbe3-1.digest @@ -0,0 +1,23 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/World/Cam") +camera: Camera { origin: Vec3A(0.0, 0.0, 6.0), lower_left_corner: Vec3A(-1.3761721, -0.91744804, 0.0), horizontal: Vec3A(2.7523441, 0.0, 0.0), vertical: Vec3A(0.0, 1.8348961, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 1.25, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: Some("/Render/settings") +settings: RenderSettings { samples_per_pixel: 128, max_depth: 2, width: 48, height: 32, region: PixelRect { x0: 0, y0: 0, x1: 48, y1: 32 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 50.0, aperture: [20.955, 15.2908], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 2.0, focus_distance: 6.0 }), depth_of_field: true, motion_blur: false, layer_stack: ["$DIR/edits.usda", "$DIR/input.usda"], invisible_overrides: Some(0) } +layer: $DIR/edits.usda +layer: $DIR/input.usda +lights: 1 +light 0: distant name Some("/World/Sun") lpe None pmf 1.0 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 2 geometries, PrimitiveBreakdown { triangles: 0, spheres: 2, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 0, spheres: 2, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:1cd1488d041dfcdb camera=1:1cd1488d041dfcdb shadow=1:1cd1488d041dfcdb indirect=1:1cd1488d041dfcdb +geom 1: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:2d90e22d27992fa5 camera=1:2d90e22d27992fa5 shadow=1:2d90e22d27992fa5 indirect=1:2d90e22d27992fa5 +provenance light /World/Sun: LightOrigin { index: 0, geoms: 2..2 } +provenance geometry 0..1: /World/Far +provenance geometry 1..2: /World/Near +provenance spheres: [0, 1] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: true }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/World/Cam"), cameras: ["/World/Cam"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/World/Cam"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/edits_usda-339a76e50715bbe3-1.image b/crates/crust-core/tests/data/import_baselines/edits_usda-339a76e50715bbe3-1.image new file mode 100644 index 000000000..95603ce7c --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/edits_usda-339a76e50715bbe3-1.image @@ -0,0 +1 @@ +48x32 16spp clamp-off 6403d1e8ae317b59 diff --git a/crates/crust-core/tests/data/import_baselines/edits_usda-3450a9d6105e89a6-1.digest b/crates/crust-core/tests/data/import_baselines/edits_usda-3450a9d6105e89a6-1.digest new file mode 100644 index 000000000..b40dd0e4a --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/edits_usda-3450a9d6105e89a6-1.digest @@ -0,0 +1,45 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/World/Cam2") +camera: Camera { origin: Vec3A(1.5, 1.0, 5.0), lower_left_corner: Vec3A(-4.6187525, -2.2177181, -3.4887795), horizontal: Vec3A(7.5360494, -1.4466709e-8, -1.8789482), vertical: Vec3A(-0.11047701, 4.344867, -0.4430991), u: Vec3A(0.9702957, -1.8626451e-9, -0.2419219), v: Vec3A(-0.025287723, 0.99452186, -0.101423524), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: Some("/Render/settings") +settings: RenderSettings { samples_per_pixel: 64, max_depth: 4, width: 48, height: 27, region: PixelRect { x0: 0, y0: 0, x1: 48, y1: 27 }, min_samples_per_pixel: 16, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 35.0, aperture: [20.955, 15.2908], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 10.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/edits.usda", "$DIR/input.usda", "$ROOT/samples/subdivision_adaptive.usda"], invisible_overrides: Some(0) } +layer: $ROOT/samples/subdivision_adaptive.usda +layer: $DIR/edits.usda +layer: $DIR/input.usda +lights: 2 +light 0: distant name Some("/World/Sun") lpe None pmf 0.5 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 1: dome name Some("/World/Sky") lpe None pmf 0.5 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 6 geometries, PrimitiveBreakdown { triangles: 50, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 4 } top level, PrimitiveBreakdown { triangles: 62, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 4 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:4d8d0a8634ac849c camera=2:4d8d0a8634ac849c shadow=2:4d8d0a8634ac849c indirect=2:4d8d0a8634ac849c +geom 1: material #1 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=12:9b9b8ee224ae5549 camera=12:9b9b8ee224ae5549 shadow=12:9b9b8ee224ae5549 indirect=12:9b9b8ee224ae5549 +geom 2: material #1 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=12:56e3227c4c4f5a8d camera=12:56e3227c4c4f5a8d shadow=12:56e3227c4c4f5a8d indirect=12:56e3227c4c4f5a8d +geom 3: material #1 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=12:14e930a5d0b26e15 camera=12:14e930a5d0b26e15 shadow=12:14e930a5d0b26e15 indirect=12:14e930a5d0b26e15 +geom 4: material #1 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=12:1d38133bdf0eede5 camera=12:1d38133bdf0eede5 shadow=12:1d38133bdf0eede5 indirect=12:1d38133bdf0eede5 +geom 5: material #1 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=48:6e192a0e7059d151 camera=48:6e192a0e7059d151 shadow=48:6e192a0e7059d151 indirect=48:6e192a0e7059d151 +provenance material /World/Materials/clay: MaterialOrigin { slots: [1, 2, 3, 4, 5], displaced: false } +provenance arc source: /World/Cage +provenance light /World/Sky: LightOrigin { index: 1, geoms: 6..6 } +provenance light /World/Sun: LightOrigin { index: 0, geoms: 0..0 } +provenance geometry 0..1: /World/Floor +provenance geometry 1..2: /World/Cube5 +provenance geometry 2..3: /World/Cube4 +provenance geometry 3..4: /World/Cube3 +provenance geometry 4..5: /World/Cube2 +provenance geometry 5..6: /World/Cube1 +provenance mesh: MeshOrigin { geom_id: 0, slot: 0, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 1, slot: 1, baked: false, moving: false } +provenance mesh: MeshOrigin { geom_id: 2, slot: 1, baked: false, moving: false } +provenance mesh: MeshOrigin { geom_id: 3, slot: 1, baked: false, moving: false } +provenance mesh: MeshOrigin { geom_id: 4, slot: 1, baked: false, moving: false } +provenance mesh: MeshOrigin { geom_id: 5, slot: 2, baked: true, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 2079923942787246473, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 1: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 16825702510234920227, n_points: 8, n_indices: 36, n_uvs: None, smooth: true, material: 1 }), placements: 4, shared: false, displaced: false } +provenance mesh slot 2: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 9125125757038733368, n_points: 26, n_indices: 144, n_uvs: None, smooth: true, material: 1 }), placements: 1, shared: false, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: true }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: Some(ScreenKey([1069547520, 1065353216, 1084227584, 1115108637, 1069547520, 1065353216, 1084227584, 3213371458, 3173401642, 3188195590, 1063287320, 3173401642, 3206405490, 3168756112, 3212982450, 3185572784, 3181341822, 1064878233, 3198147198, 3195428598, 3184923397, 3212249332, 1090519040, 3])), domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/World/Cam2"), cameras: ["/World/Cam2", "/World/Cam"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/World/Cam2"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/edits_usda-3450a9d6105e89a6-1.image b/crates/crust-core/tests/data/import_baselines/edits_usda-3450a9d6105e89a6-1.image new file mode 100644 index 000000000..a84e5dad3 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/edits_usda-3450a9d6105e89a6-1.image @@ -0,0 +1 @@ +48x27 16spp clamp-off 8afb97f1fcc0a4b0 diff --git a/crates/crust-core/tests/data/import_baselines/edits_usda-411d0a61690b9e71-1.digest b/crates/crust-core/tests/data/import_baselines/edits_usda-411d0a61690b9e71-1.digest new file mode 100644 index 000000000..e706b3ed9 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/edits_usda-411d0a61690b9e71-1.digest @@ -0,0 +1,22 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/World/Cam") +camera: Camera { origin: Vec3A(0.0, 0.0, 6.0), lower_left_corner: Vec3A(-4.247444, -2.5484667, -4.0), horizontal: Vec3A(8.494888, 0.0, 0.0), vertical: Vec3A(0.0, 5.0969334, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: Some("/Render/settings") +settings: RenderSettings { samples_per_pixel: 128, max_depth: 3, width: 40, height: 24, region: PixelRect { x0: 0, y0: 0, x1: 40, y1: 24 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 30.0, aperture: [20.955, 15.2908], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 10.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/edits.usda", "$DIR/input.usda"], invisible_overrides: Some(0) } +layer: $DIR/edits.usda +layer: $DIR/input.usda +lights: 1 +light 0: dome name Some("/World/Sky") lpe None pmf 1.0 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 1 geometries, PrimitiveBreakdown { triangles: 0, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 1 } top level, PrimitiveBreakdown { triangles: 0, spheres: 0, disks: 0, cylinders: 0, curve_segments: 3, cubic_curve_spans: 0, instances: 1 } unique, motion false +geom 0: material #0 Signature { kind: "MaterialX", cutout: false, straight: false, boundary: false, emits: false, uv: true, uv_primvar: None, face_texture: None, curve: Some((false, true, ["hairColor"])), primvars: None } class 65535 holdout false transparent false map None uv None shading None strands Some(0) aov None swapped false curves true scale 1.0 motion [] pieces all=3:a4253f27618d90a9 camera=3:a4253f27618d90a9 shadow=3:a4253f27618d90a9 indirect=3:a4253f27618d90a9 +provenance material /World/Looks/Hair: MaterialOrigin { slots: [0], displaced: false } +provenance light /World/Sky: LightOrigin { index: 0, geoms: 1..1 } +provenance geometry 0..1: /World/Groom +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: true }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/World/Cam"), cameras: ["/World/Cam"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/World/Cam"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/edits_usda-411d0a61690b9e71-1.image b/crates/crust-core/tests/data/import_baselines/edits_usda-411d0a61690b9e71-1.image new file mode 100644 index 000000000..cbda222ce --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/edits_usda-411d0a61690b9e71-1.image @@ -0,0 +1 @@ +40x24 16spp clamp-off c2a9124ddf153b95 diff --git a/crates/crust-core/tests/data/import_baselines/edits_usda-43a14b5e78154dda-1.digest b/crates/crust-core/tests/data/import_baselines/edits_usda-43a14b5e78154dda-1.digest new file mode 100644 index 000000000..50396a919 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/edits_usda-43a14b5e78154dda-1.digest @@ -0,0 +1,44 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/World/Cam") +camera: Camera { origin: Vec3A(0.0, 0.5, 0.0), lower_left_corner: Vec3A(-2.0955, -0.6787187, -10.0), horizontal: Vec3A(4.191, 0.0, 0.0), vertical: Vec3A(0.0, 2.3574374, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: Some("/Render/settings") +settings: RenderSettings { samples_per_pixel: 64, max_depth: 4, width: 48, height: 27, region: PixelRect { x0: 0, y0: 0, x1: 48, y1: 27 }, min_samples_per_pixel: 16, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 50.0, aperture: [20.955, 11.787188], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 10.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/edits.usda", "$DIR/input.usda", "$ROOT/samples/subdivision_adaptive.usda"], invisible_overrides: Some(0) } +layer: $ROOT/samples/subdivision_adaptive.usda +layer: $DIR/edits.usda +layer: $DIR/input.usda +lights: 2 +light 0: distant name Some("/World/Sun") lpe None pmf 0.5 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 1: dome name Some("/World/Sky") lpe None pmf 0.5 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 6 geometries, PrimitiveBreakdown { triangles: 2, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 5 } top level, PrimitiveBreakdown { triangles: 14, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 5 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:4d8d0a8634ac849c camera=2:4d8d0a8634ac849c shadow=2:4d8d0a8634ac849c indirect=2:4d8d0a8634ac849c +geom 1: material #1 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=12:9b9b8ee224ae5549 camera=12:9b9b8ee224ae5549 shadow=12:9b9b8ee224ae5549 indirect=12:9b9b8ee224ae5549 +geom 2: material #1 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=12:56e3227c4c4f5a8d camera=12:56e3227c4c4f5a8d shadow=12:56e3227c4c4f5a8d indirect=12:56e3227c4c4f5a8d +geom 3: material #1 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=12:14e930a5d0b26e15 camera=12:14e930a5d0b26e15 shadow=12:14e930a5d0b26e15 indirect=12:14e930a5d0b26e15 +geom 4: material #1 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=12:1d38133bdf0eede5 camera=12:1d38133bdf0eede5 shadow=12:1d38133bdf0eede5 indirect=12:1d38133bdf0eede5 +geom 5: material #1 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=12:96155934aeac1ed5 camera=12:96155934aeac1ed5 shadow=12:96155934aeac1ed5 indirect=12:96155934aeac1ed5 +provenance material /World/Materials/clay: MaterialOrigin { slots: [1, 2, 3, 4, 5], displaced: false } +provenance arc source: /World/Cage +provenance light /World/Sky: LightOrigin { index: 1, geoms: 6..6 } +provenance light /World/Sun: LightOrigin { index: 0, geoms: 0..0 } +provenance geometry 0..1: /World/Floor +provenance geometry 1..2: /World/Cube5 +provenance geometry 2..3: /World/Cube4 +provenance geometry 3..4: /World/Cube3 +provenance geometry 4..5: /World/Cube2 +provenance geometry 5..6: /World/Cube1 +provenance mesh: MeshOrigin { geom_id: 0, slot: 0, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 1, slot: 1, baked: false, moving: false } +provenance mesh: MeshOrigin { geom_id: 2, slot: 1, baked: false, moving: false } +provenance mesh: MeshOrigin { geom_id: 3, slot: 1, baked: false, moving: false } +provenance mesh: MeshOrigin { geom_id: 4, slot: 1, baked: false, moving: false } +provenance mesh: MeshOrigin { geom_id: 5, slot: 1, baked: false, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 2079923942787246473, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 1: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 16825702510234920227, n_points: 8, n_indices: 36, n_uvs: None, smooth: true, material: 1 }), placements: 5, shared: false, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: true }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: Some(ScreenKey([0, 1056964608, 1086324736, 1110016897, 0, 1056964608, 1086324736, 3212836864, 0, 3205561020, 1065353216, 0, 3205561020, 0, 3212836864, 3198360084, 0, 1065353216, 3198360084, 0, 0, 3212836864, 1090519040, 3])), domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/World/Cam"), cameras: ["/World/Dicer", "/World/Cam"], dicing: Some("/World/Dicer"), on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/World/Cam"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/edits_usda-43a14b5e78154dda-1.image b/crates/crust-core/tests/data/import_baselines/edits_usda-43a14b5e78154dda-1.image new file mode 100644 index 000000000..9378fb72b --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/edits_usda-43a14b5e78154dda-1.image @@ -0,0 +1 @@ +48x27 16spp clamp-off c163d232d4decad1 diff --git a/crates/crust-core/tests/data/import_baselines/edits_usda-483e16501c86632a-1.digest b/crates/crust-core/tests/data/import_baselines/edits_usda-483e16501c86632a-1.digest new file mode 100644 index 000000000..311357ef4 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/edits_usda-483e16501c86632a-1.digest @@ -0,0 +1,44 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/World/Cam") +camera: Camera { origin: Vec3A(0.3, 0.6, 5.5), lower_left_corner: Vec3A(-2.8181643, -1.2734121, -4.1201806), horizontal: Vec3A(4.168041, 0.0, -0.4380788), vertical: Vec3A(-0.01718934, 2.3516948, -0.16354565), u: Vec3A(0.9945219, 0.0, -0.104528464), v: Vec3A(-0.007291537, 0.9975641, -0.06937434), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: Some("/Render/settings") +settings: RenderSettings { samples_per_pixel: 64, max_depth: 4, width: 48, height: 27, region: PixelRect { x0: 0, y0: 0, x1: 48, y1: 27 }, min_samples_per_pixel: 16, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 50.0, aperture: [20.955, 11.787188], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 10.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/edits.usda", "$DIR/input.usda", "$ROOT/samples/subdivision_adaptive.usda"], invisible_overrides: Some(0) } +layer: $ROOT/samples/subdivision_adaptive.usda +layer: $DIR/edits.usda +layer: $DIR/input.usda +lights: 2 +light 0: distant name Some("/World/Sun") lpe None pmf 0.5 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 1: dome name Some("/World/Sky") lpe None pmf 0.5 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 6 geometries, PrimitiveBreakdown { triangles: 2, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 5 } top level, PrimitiveBreakdown { triangles: 14, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 5 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:4d8d0a8634ac849c camera=2:4d8d0a8634ac849c shadow=2:4d8d0a8634ac849c indirect=2:4d8d0a8634ac849c +geom 1: material #1 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=12:9b9b8ee224ae5549 camera=12:9b9b8ee224ae5549 shadow=12:9b9b8ee224ae5549 indirect=12:9b9b8ee224ae5549 +geom 2: material #1 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=12:56e3227c4c4f5a8d camera=12:56e3227c4c4f5a8d shadow=12:56e3227c4c4f5a8d indirect=12:56e3227c4c4f5a8d +geom 3: material #1 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=12:14e930a5d0b26e15 camera=12:14e930a5d0b26e15 shadow=12:14e930a5d0b26e15 indirect=12:14e930a5d0b26e15 +geom 4: material #1 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=12:1d38133bdf0eede5 camera=12:1d38133bdf0eede5 shadow=12:1d38133bdf0eede5 indirect=12:1d38133bdf0eede5 +geom 5: material #1 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=12:96155934aeac1ed5 camera=12:96155934aeac1ed5 shadow=12:96155934aeac1ed5 indirect=12:96155934aeac1ed5 +provenance material /World/Materials/clay: MaterialOrigin { slots: [1, 2, 3, 4, 5], displaced: false } +provenance arc source: /World/Cage +provenance light /World/Sky: LightOrigin { index: 1, geoms: 6..6 } +provenance light /World/Sun: LightOrigin { index: 0, geoms: 0..0 } +provenance geometry 0..1: /World/Floor +provenance geometry 1..2: /World/Cube5 +provenance geometry 2..3: /World/Cube4 +provenance geometry 3..4: /World/Cube3 +provenance geometry 4..5: /World/Cube2 +provenance geometry 5..6: /World/Cube1 +provenance mesh: MeshOrigin { geom_id: 0, slot: 0, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 1, slot: 1, baked: false, moving: false } +provenance mesh: MeshOrigin { geom_id: 2, slot: 1, baked: false, moving: false } +provenance mesh: MeshOrigin { geom_id: 3, slot: 1, baked: false, moving: false } +provenance mesh: MeshOrigin { geom_id: 4, slot: 1, baked: false, moving: false } +provenance mesh: MeshOrigin { geom_id: 5, slot: 1, baked: false, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 2079923942787246473, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 1: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 16825702510234920227, n_points: 8, n_indices: 36, n_uvs: None, smooth: true, material: 1 }), placements: 5, shared: false, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: true }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: Some(ScreenKey([0, 1056964608, 1082130432, 1110016897, 0, 1056964608, 1082130432, 3212836864, 0, 3205561020, 1065353216, 0, 3205561020, 0, 3212836864, 3198360084, 0, 1065353216, 3198360084, 0, 0, 3212836864, 1090519040, 3])), domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/World/Cam"), cameras: ["/World/Dicer", "/World/Cam"], dicing: Some("/World/Dicer"), on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/World/Cam"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/edits_usda-483e16501c86632a-1.image b/crates/crust-core/tests/data/import_baselines/edits_usda-483e16501c86632a-1.image new file mode 100644 index 000000000..fcaffe734 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/edits_usda-483e16501c86632a-1.image @@ -0,0 +1 @@ +48x27 16spp clamp-off 0d773aac90551cea diff --git a/crates/crust-core/tests/data/import_baselines/edits_usda-4966b50c696e8080-1.digest b/crates/crust-core/tests/data/import_baselines/edits_usda-4966b50c696e8080-1.digest new file mode 100644 index 000000000..6031b7771 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/edits_usda-4966b50c696e8080-1.digest @@ -0,0 +1,30 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/World/Cam") +camera: Camera { origin: Vec3A(0.0, 0.5, 6.0), lower_left_corner: Vec3A(-4.7783756, -2.6855836, -4.0), horizontal: Vec3A(9.556751, 0.0, 0.0), vertical: Vec3A(0.0, 6.371167, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: Some("/Render/settings") +settings: RenderSettings { samples_per_pixel: 128, max_depth: 2, width: 48, height: 32, region: PixelRect { x0: 0, y0: 0, x1: 48, y1: 32 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 24.0, aperture: [20.955, 15.2908], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 10.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/edits.usda", "$DIR/input.usda"], invisible_overrides: Some(0) } +layer: $DIR/edits.usda +layer: $DIR/input.usda +lights: 2 +light 0: distant name Some("/World/Sun") lpe None pmf 0.5 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 1: dome name Some("/World/Sky") lpe None pmf 0.5 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 1 +volume 0: sigma_s Vec3A(0.4, 0.4, 0.4) sigma_a Vec3A(0.05, 0.05, 0.05) g 0.0 emission Vec3A(0.0, 0.0, 0.0) mask RayMask(4294967295) class 65535 homogeneous true +world: 2 geometries, PrimitiveBreakdown { triangles: 4, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 4, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:0e0a4667da70ad35 camera=2:0e0a4667da70ad35 shadow=2:0e0a4667da70ad35 indirect=2:0e0a4667da70ad35 +geom 1: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:6787da8eacebee45 camera=2:6787da8eacebee45 shadow=2:6787da8eacebee45 indirect=2:6787da8eacebee45 +provenance light /World/Sky: LightOrigin { index: 1, geoms: 2..2 } +provenance light /World/Sun: LightOrigin { index: 0, geoms: 2..2 } +provenance geometry 0..1: /World/Card +provenance geometry 1..2: /World/Floor +provenance mesh: MeshOrigin { geom_id: 0, slot: 0, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 1, slot: 1, baked: true, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 18358658470076285213, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 1: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 800109031887815527, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [] +provenance volumes: ["/World/Cam/Fog"] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: true }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/World/Cam"), cameras: ["/World/Cam"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/World/Cam"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/edits_usda-4966b50c696e8080-1.image b/crates/crust-core/tests/data/import_baselines/edits_usda-4966b50c696e8080-1.image new file mode 100644 index 000000000..360e9305d --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/edits_usda-4966b50c696e8080-1.image @@ -0,0 +1 @@ +48x32 16spp clamp-off 24452f50ab457022 diff --git a/crates/crust-core/tests/data/import_baselines/edits_usda-4cf921963a4325e9-1.digest b/crates/crust-core/tests/data/import_baselines/edits_usda-4cf921963a4325e9-1.digest new file mode 100644 index 000000000..5c9908515 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/edits_usda-4cf921963a4325e9-1.digest @@ -0,0 +1,46 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/World/Cam") +camera: Camera { origin: Vec3A(0.0, 0.5, 0.0), lower_left_corner: Vec3A(-2.0955, -0.6787187, -10.0), horizontal: Vec3A(4.191, 0.0, 0.0), vertical: Vec3A(0.0, 2.3574374, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: Some("/Render/settings") +settings: RenderSettings { samples_per_pixel: 64, max_depth: 4, width: 48, height: 27, region: PixelRect { x0: 0, y0: 0, x1: 48, y1: 27 }, min_samples_per_pixel: 16, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 50.0, aperture: [20.955, 11.787188], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 10.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/edits.usda", "$DIR/input.usda", "$ROOT/samples/subdivision_adaptive.usda"], invisible_overrides: Some(0) } +layer: $ROOT/samples/subdivision_adaptive.usda +layer: $DIR/edits.usda +layer: $DIR/input.usda +lights: 2 +light 0: distant name Some("/World/Sun") lpe None pmf 0.5 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 1: dome name Some("/World/Sky") lpe None pmf 0.5 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 6 geometries, PrimitiveBreakdown { triangles: 290, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 3 } top level, PrimitiveBreakdown { triangles: 302, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 3 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:4d8d0a8634ac849c camera=2:4d8d0a8634ac849c shadow=2:4d8d0a8634ac849c indirect=2:4d8d0a8634ac849c +geom 1: material #1 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=12:9b9b8ee224ae5549 camera=12:9b9b8ee224ae5549 shadow=12:9b9b8ee224ae5549 indirect=12:9b9b8ee224ae5549 +geom 2: material #1 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=12:56e3227c4c4f5a8d camera=12:56e3227c4c4f5a8d shadow=12:56e3227c4c4f5a8d indirect=12:56e3227c4c4f5a8d +geom 3: material #1 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=12:14e930a5d0b26e15 camera=12:14e930a5d0b26e15 shadow=12:14e930a5d0b26e15 indirect=12:14e930a5d0b26e15 +geom 4: material #1 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=48:85fd1a1e8638f8d5 camera=48:85fd1a1e8638f8d5 shadow=48:85fd1a1e8638f8d5 indirect=48:85fd1a1e8638f8d5 +geom 5: material #1 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=240:ceb54a03c39454ff camera=240:ceb54a03c39454ff shadow=240:ceb54a03c39454ff indirect=240:ceb54a03c39454ff +provenance material /World/Materials/clay: MaterialOrigin { slots: [1, 2, 3, 4, 5], displaced: false } +provenance arc source: /World/Cage +provenance light /World/Sky: LightOrigin { index: 1, geoms: 6..6 } +provenance light /World/Sun: LightOrigin { index: 0, geoms: 0..0 } +provenance geometry 0..1: /World/Floor +provenance geometry 1..2: /World/Cube5 +provenance geometry 2..3: /World/Cube4 +provenance geometry 3..4: /World/Cube3 +provenance geometry 4..5: /World/Cube2 +provenance geometry 5..6: /World/Cube1 +provenance mesh: MeshOrigin { geom_id: 0, slot: 0, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 1, slot: 1, baked: false, moving: false } +provenance mesh: MeshOrigin { geom_id: 2, slot: 1, baked: false, moving: false } +provenance mesh: MeshOrigin { geom_id: 3, slot: 1, baked: false, moving: false } +provenance mesh: MeshOrigin { geom_id: 4, slot: 2, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 5, slot: 3, baked: true, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 2079923942787246473, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 1: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 16825702510234920227, n_points: 8, n_indices: 36, n_uvs: None, smooth: true, material: 1 }), placements: 3, shared: false, displaced: false } +provenance mesh slot 2: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 9125125757038733368, n_points: 26, n_indices: 144, n_uvs: None, smooth: true, material: 1 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 3: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 13090063996844779502, n_points: 122, n_indices: 720, n_uvs: None, smooth: true, material: 1 }), placements: 1, shared: false, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: true }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: Some(ScreenKey([0, 1056964608, 0, 1122308081, 0, 1056964608, 0, 3212836864, 0, 3193345094, 1065353216, 0, 3193345094, 0, 3212836864, 3186714319, 0, 1065353216, 3186714319, 0, 0, 3212836864, 1090519040, 3])), domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/World/Cam"), cameras: ["/World/Cam2", "/World/Cam"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/World/Cam"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/edits_usda-4cf921963a4325e9-1.image b/crates/crust-core/tests/data/import_baselines/edits_usda-4cf921963a4325e9-1.image new file mode 100644 index 000000000..35947da35 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/edits_usda-4cf921963a4325e9-1.image @@ -0,0 +1 @@ +48x27 16spp clamp-off cc1ed1cd405cee06 diff --git a/crates/crust-core/tests/data/import_baselines/edits_usda-4d3c65f04d4eaea9-1.digest b/crates/crust-core/tests/data/import_baselines/edits_usda-4d3c65f04d4eaea9-1.digest new file mode 100644 index 000000000..d7766433d --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/edits_usda-4d3c65f04d4eaea9-1.digest @@ -0,0 +1,23 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/World/Cam") +camera: Camera { origin: Vec3A(0.0, 0.0, 6.0), lower_left_corner: Vec3A(-3.2766, -2.1844, -4.0), horizontal: Vec3A(6.5532, 0.0, 0.0), vertical: Vec3A(0.0, 4.3688, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: Some("/Render/settings") +settings: RenderSettings { samples_per_pixel: 128, max_depth: 2, width: 48, height: 32, region: PixelRect { x0: 0, y0: 0, x1: 48, y1: 32 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 35.0, aperture: [20.955, 15.2908], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 10.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/edits.usda", "$DIR/input.usda"], invisible_overrides: Some(0) } +layer: $DIR/edits.usda +layer: $DIR/input.usda +lights: 1 +light 0: distant name Some("/World/Sun") lpe None pmf 1.0 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 1 geometries, PrimitiveBreakdown { triangles: 64, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 64, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=64:5f84dcb3c52b7405 camera=64:5f84dcb3c52b7405 shadow=64:5f84dcb3c52b7405 indirect=64:5f84dcb3c52b7405 +provenance light /World/Sun: LightOrigin { index: 0, geoms: 1..1 } +provenance geometry 0..1: /World/Post +provenance mesh: MeshOrigin { geom_id: 0, slot: 0, baked: true, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 13212365895451826409, n_points: 66, n_indices: 160, n_uvs: None, smooth: true, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: true }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/World/Cam"), cameras: ["/World/Cam"], dicing: None, on_screen_shapes: Some(ScreenKey([0, 0, 1086324736, 1116896842, 0, 0, 1086324736, 3212836864, 0, 3198665485, 1065353216, 0, 3198665485, 0, 3212836864, 3193941692, 0, 1065353216, 3193941692, 0, 0, 3212836864])), unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/World/Cam"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/edits_usda-4d3c65f04d4eaea9-1.image b/crates/crust-core/tests/data/import_baselines/edits_usda-4d3c65f04d4eaea9-1.image new file mode 100644 index 000000000..5688433a3 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/edits_usda-4d3c65f04d4eaea9-1.image @@ -0,0 +1 @@ +48x32 16spp clamp-off 7c5b1caced942179 diff --git a/crates/crust-core/tests/data/import_baselines/edits_usda-4dd694c9b20daa77-1.digest b/crates/crust-core/tests/data/import_baselines/edits_usda-4dd694c9b20daa77-1.digest new file mode 100644 index 000000000..46d302ff4 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/edits_usda-4dd694c9b20daa77-1.digest @@ -0,0 +1,30 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/World/Cam") +camera: Camera { origin: Vec3A(0.0, 1.2, 6.0), lower_left_corner: Vec3A(-5.6632595, -1.9855835, -4.0), horizontal: Vec3A(11.326519, 0.0, 0.0), vertical: Vec3A(0.0, 6.371167, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: Some("/Render/settings") +settings: RenderSettings { samples_per_pixel: 16, max_depth: 4, width: 32, height: 18, region: PixelRect { x0: 0, y0: 0, x1: 32, y1: 18 }, min_samples_per_pixel: 8, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [AovProduct { prim_path: "/Render/Products/beauty", name: "renders/aovs_beauty.exr", vars: [AovVar { prim_path: "/Render/Products/Vars/C", name: "C", channel_prefix: None, source: Color, components: 4, precision: Float, accumulation: Filtered, clear: 0.0, expression: None, raw: false, variance: false }, AovVar { prim_path: "/Render/Products/Vars/sampleCount", name: "sampleCount", channel_prefix: None, source: SampleCount, components: 1, precision: Float, accumulation: Filtered, clear: 0.0, expression: None, raw: false, variance: false }, AovVar { prim_path: "/Render/Products/Vars/variance", name: "variance", channel_prefix: None, source: Variance, components: 1, precision: Float, accumulation: Filtered, clear: 0.0, expression: None, raw: false, variance: false }], attributes: [("artist", "crust samples")] }, AovProduct { prim_path: "/Render/Products/data", name: "renders/aovs_data.exr", vars: [AovVar { prim_path: "/Render/Products/Vars/Z", name: "Z", channel_prefix: None, source: Depth, components: 1, precision: Float, accumulation: Closest, clear: inf, expression: None, raw: false, variance: false }, AovVar { prim_path: "/Render/Products/Vars/distance", name: "distance", channel_prefix: None, source: Distance, components: 1, precision: Float, accumulation: Closest, clear: inf, expression: None, raw: false, variance: false }, AovVar { prim_path: "/Render/Products/Vars/P", name: "P", channel_prefix: None, source: P, components: 3, precision: Float, accumulation: Closest, clear: 0.0, expression: None, raw: false, variance: false }, AovVar { prim_path: "/Render/Products/Vars/Peye", name: "Peye", channel_prefix: None, source: Peye, components: 3, precision: Float, accumulation: Closest, clear: 0.0, expression: None, raw: false, variance: false }, AovVar { prim_path: "/Render/Products/Vars/N", name: "N", channel_prefix: None, source: Normal, components: 3, precision: Half, accumulation: Filtered, clear: 0.0, expression: None, raw: false, variance: false }, AovVar { prim_path: "/Render/Products/Vars/Neye", name: "Neye", channel_prefix: None, source: Neye, components: 3, precision: Float, accumulation: Filtered, clear: 0.0, expression: None, raw: false, variance: false }, AovVar { prim_path: "/Render/Products/Vars/st", name: "st", channel_prefix: None, source: St, components: 2, precision: Float, accumulation: Filtered, clear: 0.0, expression: None, raw: false, variance: false }, AovVar { prim_path: "/Render/Products/Vars/alpha", name: "alpha", channel_prefix: None, source: Alpha, components: 1, precision: Float, accumulation: Filtered, clear: 0.0, expression: None, raw: false, variance: false }], attributes: [] }], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 24.0, aperture: [20.955, 15.2908], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 10.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/edits.usda", "$ROOT/samples/aovs.usda"], invisible_overrides: Some(0) } +layer: $ROOT/samples/aovs.usda +layer: $DIR/edits.usda +warning: Warning { code: AovUnknownSource, kind: Skipped, count: 1, prims: ["/Render/Products/Vars/diffuse_direct"], message: "/Render/Products/Vars/diffuse_direct: unknown raw source \"diffuse_direct\"; no channel written (crust's AOV names are listed in the user documentation, usd/aovs)" } +lights: 2 +light 0: dome name Some("/World/Sky") lpe None pmf 0.5 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 1: area name Some("/World/KeyLight") lpe None pmf 0.5 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 3 geometries, PrimitiveBreakdown { triangles: 4, spheres: 1, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 4, spheres: 1, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +geom 0: material #0 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:e8a5ea9ee1d32838 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=2:e8a5ea9ee1d32838 +geom 1: material #1 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:cadf82024fa5b745 camera=2:cadf82024fa5b745 shadow=2:cadf82024fa5b745 indirect=2:cadf82024fa5b745 +geom 2: material #1 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:ee76fd7ed45c4a85 camera=1:ee76fd7ed45c4a85 shadow=1:ee76fd7ed45c4a85 indirect=1:ee76fd7ed45c4a85 +provenance light /World/KeyLight: LightOrigin { index: 1, geoms: 0..1 } +provenance light /World/Sky: LightOrigin { index: 0, geoms: 0..0 } +provenance geometry 0..1: /World/KeyLight +provenance geometry 1..2: /World/Floor +provenance geometry 2..3: /World/Ball +provenance mesh: MeshOrigin { geom_id: 1, slot: 0, baked: true, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 12300483381263303556, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [2] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: true }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/World/Cam"), cameras: ["/World/Cam"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/World/Cam"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/edits_usda-4dd694c9b20daa77-1.image b/crates/crust-core/tests/data/import_baselines/edits_usda-4dd694c9b20daa77-1.image new file mode 100644 index 000000000..e5718bb57 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/edits_usda-4dd694c9b20daa77-1.image @@ -0,0 +1 @@ +32x18 16spp clamp-off ddf40d7a272e6781 diff --git a/crates/crust-core/tests/data/import_baselines/edits_usda-516372ff4968411b-1.digest b/crates/crust-core/tests/data/import_baselines/edits_usda-516372ff4968411b-1.digest new file mode 100644 index 000000000..0478e28d9 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/edits_usda-516372ff4968411b-1.digest @@ -0,0 +1,30 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/World/Cam") +camera: Camera { origin: Vec3A(0.0, 1.0, 6.0), lower_left_corner: Vec3A(-4.7783756, -2.1855836, -4.0), horizontal: Vec3A(9.556751, 0.0, 0.0), vertical: Vec3A(0.0, 6.371167, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: Some("/Render/settings") +settings: RenderSettings { samples_per_pixel: 128, max_depth: 2, width: 48, height: 32, region: PixelRect { x0: 0, y0: 0, x1: 48, y1: 32 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 24.0, aperture: [20.955, 15.2908], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 10.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/edits.usda", "$DIR/input.usda"], invisible_overrides: Some(0) } +layer: $DIR/edits.usda +layer: $DIR/input.usda +layer: $DIR/looks.usda +lights: 1 +light 0: distant name Some("/World/Sun") lpe None pmf 1.0 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 1 geometries, PrimitiveBreakdown { triangles: 0, spheres: 1, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 0, spheres: 1, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:ee76fd7ed45c4a85 camera=1:ee76fd7ed45c4a85 shadow=1:ee76fd7ed45c4a85 indirect=1:ee76fd7ed45c4a85 +provenance material /World/Looks/Clay: MaterialOrigin { slots: [0], displaced: false } +provenance material read: ("/Looks/Clay", "/World/Looks/Clay") +provenance material read: ("/Looks/Clay/Graph", "/World/Looks/Clay") +provenance material read: ("/Looks/Clay/Surface", "/World/Looks/Clay") +provenance arc source: /Looks +provenance arc source: /Looks/Clay +provenance arc source: /Looks/Clay/Graph +provenance arc source: /Looks/Clay/Surface +provenance light /World/Sun: LightOrigin { index: 0, geoms: 1..1 } +provenance geometry 0..1: /World/Ball +provenance spheres: [0] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: true }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/World/Cam"), cameras: ["/World/Cam"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/World/Cam"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/edits_usda-516372ff4968411b-1.image b/crates/crust-core/tests/data/import_baselines/edits_usda-516372ff4968411b-1.image new file mode 100644 index 000000000..fc580b73d --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/edits_usda-516372ff4968411b-1.image @@ -0,0 +1 @@ +48x32 16spp clamp-off 366d57a699b8e531 diff --git a/crates/crust-core/tests/data/import_baselines/edits_usda-53a62fecc28e0de7-1.digest b/crates/crust-core/tests/data/import_baselines/edits_usda-53a62fecc28e0de7-1.digest new file mode 100644 index 000000000..0478e28d9 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/edits_usda-53a62fecc28e0de7-1.digest @@ -0,0 +1,30 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/World/Cam") +camera: Camera { origin: Vec3A(0.0, 1.0, 6.0), lower_left_corner: Vec3A(-4.7783756, -2.1855836, -4.0), horizontal: Vec3A(9.556751, 0.0, 0.0), vertical: Vec3A(0.0, 6.371167, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: Some("/Render/settings") +settings: RenderSettings { samples_per_pixel: 128, max_depth: 2, width: 48, height: 32, region: PixelRect { x0: 0, y0: 0, x1: 48, y1: 32 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 24.0, aperture: [20.955, 15.2908], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 10.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/edits.usda", "$DIR/input.usda"], invisible_overrides: Some(0) } +layer: $DIR/edits.usda +layer: $DIR/input.usda +layer: $DIR/looks.usda +lights: 1 +light 0: distant name Some("/World/Sun") lpe None pmf 1.0 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 1 geometries, PrimitiveBreakdown { triangles: 0, spheres: 1, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 0, spheres: 1, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:ee76fd7ed45c4a85 camera=1:ee76fd7ed45c4a85 shadow=1:ee76fd7ed45c4a85 indirect=1:ee76fd7ed45c4a85 +provenance material /World/Looks/Clay: MaterialOrigin { slots: [0], displaced: false } +provenance material read: ("/Looks/Clay", "/World/Looks/Clay") +provenance material read: ("/Looks/Clay/Graph", "/World/Looks/Clay") +provenance material read: ("/Looks/Clay/Surface", "/World/Looks/Clay") +provenance arc source: /Looks +provenance arc source: /Looks/Clay +provenance arc source: /Looks/Clay/Graph +provenance arc source: /Looks/Clay/Surface +provenance light /World/Sun: LightOrigin { index: 0, geoms: 1..1 } +provenance geometry 0..1: /World/Ball +provenance spheres: [0] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: true }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/World/Cam"), cameras: ["/World/Cam"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/World/Cam"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/edits_usda-53a62fecc28e0de7-1.image b/crates/crust-core/tests/data/import_baselines/edits_usda-53a62fecc28e0de7-1.image new file mode 100644 index 000000000..fc580b73d --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/edits_usda-53a62fecc28e0de7-1.image @@ -0,0 +1 @@ +48x32 16spp clamp-off 366d57a699b8e531 diff --git a/crates/crust-core/tests/data/import_baselines/edits_usda-5521dd197a77f33e-1.digest b/crates/crust-core/tests/data/import_baselines/edits_usda-5521dd197a77f33e-1.digest new file mode 100644 index 000000000..55c5de5ea --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/edits_usda-5521dd197a77f33e-1.digest @@ -0,0 +1,39 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/World/Cam") +camera: Camera { origin: Vec3A(0.0, 1.5, 8.0), lower_left_corner: Vec3A(-4.7783756, -1.6855836, -2.0), horizontal: Vec3A(9.556751, 0.0, 0.0), vertical: Vec3A(0.0, 6.371167, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: Some("/Render/settings") +settings: RenderSettings { samples_per_pixel: 128, max_depth: 2, width: 48, height: 32, region: PixelRect { x0: 0, y0: 0, x1: 48, y1: 32 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 24.0, aperture: [20.955, 15.2908], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 10.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/edits.usda", "$DIR/input.usda"], invisible_overrides: Some(0) } +layer: $DIR/edits.usda +layer: $DIR/input.usda +lights: 4 +light 0: area name Some("/World/K4") lpe None pmf 0.25 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 1: area name Some("/World/K3") lpe None pmf 0.25 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 2: area name Some("/World/K2") lpe None pmf 0.25 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 3: area name Some("/World/K1") lpe None pmf 0.25 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 6 geometries, PrimitiveBreakdown { triangles: 2, spheres: 5, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 2, spheres: 5, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:6787da8eacebee45 camera=2:6787da8eacebee45 shadow=2:6787da8eacebee45 indirect=2:6787da8eacebee45 +geom 1: material #1 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:18dc8de5ad9d8317 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=1:18dc8de5ad9d8317 +geom 2: material #2 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:a357e5efbc0c08cc camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=1:a357e5efbc0c08cc +geom 3: material #3 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=0:cbf29ce484222325 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=0:cbf29ce484222325 +geom 4: material #4 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:15501014f6ccffa4 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=1:15501014f6ccffa4 +geom 5: material #5 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:ee57dfea4661cce3 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=1:ee57dfea4661cce3 +provenance light /World/K1: LightOrigin { index: 3, geoms: 5..6 } +provenance light /World/K2: LightOrigin { index: 2, geoms: 4..5 } +provenance light /World/K3: LightOrigin { index: 1, geoms: 2..3 } +provenance light /World/K4: LightOrigin { index: 0, geoms: 1..2 } +provenance geometry 0..1: /World/Floor +provenance geometry 1..2: /World/K4 +provenance geometry 2..3: /World/K3 +provenance geometry 3..4: /World/Dead +provenance geometry 4..5: /World/K2 +provenance geometry 5..6: /World/K1 +provenance mesh: MeshOrigin { geom_id: 0, slot: 0, baked: true, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 800109031887815527, n_points: 4, n_indices: 4, n_uvs: None, smooth: true, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: true }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/World/Cam"), cameras: ["/World/Cam"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/World/Cam"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/edits_usda-5521dd197a77f33e-1.image b/crates/crust-core/tests/data/import_baselines/edits_usda-5521dd197a77f33e-1.image new file mode 100644 index 000000000..6484a8a34 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/edits_usda-5521dd197a77f33e-1.image @@ -0,0 +1 @@ +48x32 16spp clamp-off 62de9b49d7ab19be diff --git a/crates/crust-core/tests/data/import_baselines/edits_usda-57fa1e33af4efac6-1.digest b/crates/crust-core/tests/data/import_baselines/edits_usda-57fa1e33af4efac6-1.digest new file mode 100644 index 000000000..01fe77a4d --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/edits_usda-57fa1e33af4efac6-1.digest @@ -0,0 +1,29 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/World/Cam") +camera: Camera { origin: Vec3A(0.0, 0.5, 6.0), lower_left_corner: Vec3A(-4.7783756, -2.6855836, -4.0), horizontal: Vec3A(9.556751, 0.0, 0.0), vertical: Vec3A(0.0, 6.371167, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: Some("/Render/settings") +settings: RenderSettings { samples_per_pixel: 128, max_depth: 2, width: 48, height: 32, region: PixelRect { x0: 0, y0: 0, x1: 48, y1: 32 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 24.0, aperture: [20.955, 15.2908], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 10.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/edits.usda", "$DIR/input.usda"], invisible_overrides: Some(0) } +layer: $DIR/edits.usda +layer: $DIR/input.usda +lights: 2 +light 0: distant name Some("/World/Sun") lpe None pmf 0.5 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 1: dome name Some("/World/Sky") lpe None pmf 0.5 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 2 geometries, PrimitiveBreakdown { triangles: 4, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 4, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:0e0a4667da70ad35 camera=2:0e0a4667da70ad35 shadow=2:0e0a4667da70ad35 indirect=2:0e0a4667da70ad35 +geom 1: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:6787da8eacebee45 camera=2:6787da8eacebee45 shadow=2:6787da8eacebee45 indirect=2:6787da8eacebee45 +provenance light /World/Sky: LightOrigin { index: 1, geoms: 2..2 } +provenance light /World/Sun: LightOrigin { index: 0, geoms: 2..2 } +provenance geometry 0..1: /World/Card +provenance geometry 1..2: /World/Floor +provenance mesh: MeshOrigin { geom_id: 0, slot: 0, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 1, slot: 1, baked: true, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 18358658470076285213, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 1: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 800109031887815527, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: true }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: false, precomp: false, working: None, camera: Some("/World/Cam"), cameras: ["/World/Cam"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/World/Cam"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/edits_usda-57fa1e33af4efac6-1.image b/crates/crust-core/tests/data/import_baselines/edits_usda-57fa1e33af4efac6-1.image new file mode 100644 index 000000000..66eab852f --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/edits_usda-57fa1e33af4efac6-1.image @@ -0,0 +1 @@ +48x32 16spp clamp-off 585e4cf6144cf63e diff --git a/crates/crust-core/tests/data/import_baselines/edits_usda-5b418d865896d977-1.digest b/crates/crust-core/tests/data/import_baselines/edits_usda-5b418d865896d977-1.digest new file mode 100644 index 000000000..62dd37c3d --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/edits_usda-5b418d865896d977-1.digest @@ -0,0 +1,24 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/World/Cam") +camera: Camera { origin: Vec3A(0.0, 0.0, 6.0), lower_left_corner: Vec3A(-1.3761721, -0.91744804, 0.0), horizontal: Vec3A(2.7523441, 0.0, 0.0), vertical: Vec3A(0.0, 1.8348961, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 1.25, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: Some("/Render/settings") +settings: RenderSettings { samples_per_pixel: 128, max_depth: 2, width: 48, height: 32, region: PixelRect { x0: 0, y0: 0, x1: 48, y1: 32 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 50.0, aperture: [20.955, 15.2908], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 2.0, focus_distance: 6.0 }), depth_of_field: true, motion_blur: false, layer_stack: ["$DIR/edits.usda", "$DIR/input.usda"], invisible_overrides: Some(0) } +layer: $DIR/edits.usda +layer: $DIR/input.usda +warning: Warning { code: CameraInvalidMetersPerUnit, kind: Refused, count: 1, prims: [], message: "/World/Cam: the stage's metersPerUnit = 0 is not a length the lens can use; it reads it as 0.01 (a centimetre)" } +lights: 1 +light 0: distant name Some("/World/Sun") lpe None pmf 1.0 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 2 geometries, PrimitiveBreakdown { triangles: 0, spheres: 2, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 0, spheres: 2, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:1cd1488d041dfcdb camera=1:1cd1488d041dfcdb shadow=1:1cd1488d041dfcdb indirect=1:1cd1488d041dfcdb +geom 1: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:2d90e22d27992fa5 camera=1:2d90e22d27992fa5 shadow=1:2d90e22d27992fa5 indirect=1:2d90e22d27992fa5 +provenance light /World/Sun: LightOrigin { index: 0, geoms: 2..2 } +provenance geometry 0..1: /World/Far +provenance geometry 1..2: /World/Near +provenance spheres: [0, 1] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: true }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/World/Cam"), cameras: ["/World/Cam"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/World/Cam"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/edits_usda-5b418d865896d977-1.image b/crates/crust-core/tests/data/import_baselines/edits_usda-5b418d865896d977-1.image new file mode 100644 index 000000000..95603ce7c --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/edits_usda-5b418d865896d977-1.image @@ -0,0 +1 @@ +48x32 16spp clamp-off 6403d1e8ae317b59 diff --git a/crates/crust-core/tests/data/import_baselines/edits_usda-5b418d865896d977-2.digest b/crates/crust-core/tests/data/import_baselines/edits_usda-5b418d865896d977-2.digest new file mode 100644 index 000000000..62dd37c3d --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/edits_usda-5b418d865896d977-2.digest @@ -0,0 +1,24 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/World/Cam") +camera: Camera { origin: Vec3A(0.0, 0.0, 6.0), lower_left_corner: Vec3A(-1.3761721, -0.91744804, 0.0), horizontal: Vec3A(2.7523441, 0.0, 0.0), vertical: Vec3A(0.0, 1.8348961, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 1.25, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: Some("/Render/settings") +settings: RenderSettings { samples_per_pixel: 128, max_depth: 2, width: 48, height: 32, region: PixelRect { x0: 0, y0: 0, x1: 48, y1: 32 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 50.0, aperture: [20.955, 15.2908], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 2.0, focus_distance: 6.0 }), depth_of_field: true, motion_blur: false, layer_stack: ["$DIR/edits.usda", "$DIR/input.usda"], invisible_overrides: Some(0) } +layer: $DIR/edits.usda +layer: $DIR/input.usda +warning: Warning { code: CameraInvalidMetersPerUnit, kind: Refused, count: 1, prims: [], message: "/World/Cam: the stage's metersPerUnit = 0 is not a length the lens can use; it reads it as 0.01 (a centimetre)" } +lights: 1 +light 0: distant name Some("/World/Sun") lpe None pmf 1.0 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 2 geometries, PrimitiveBreakdown { triangles: 0, spheres: 2, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 0, spheres: 2, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:1cd1488d041dfcdb camera=1:1cd1488d041dfcdb shadow=1:1cd1488d041dfcdb indirect=1:1cd1488d041dfcdb +geom 1: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:2d90e22d27992fa5 camera=1:2d90e22d27992fa5 shadow=1:2d90e22d27992fa5 indirect=1:2d90e22d27992fa5 +provenance light /World/Sun: LightOrigin { index: 0, geoms: 2..2 } +provenance geometry 0..1: /World/Far +provenance geometry 1..2: /World/Near +provenance spheres: [0, 1] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: true }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/World/Cam"), cameras: ["/World/Cam"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/World/Cam"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/edits_usda-5b418d865896d977-2.image b/crates/crust-core/tests/data/import_baselines/edits_usda-5b418d865896d977-2.image new file mode 100644 index 000000000..95603ce7c --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/edits_usda-5b418d865896d977-2.image @@ -0,0 +1 @@ +48x32 16spp clamp-off 6403d1e8ae317b59 diff --git a/crates/crust-core/tests/data/import_baselines/edits_usda-5f2834619e774ab4-1.digest b/crates/crust-core/tests/data/import_baselines/edits_usda-5f2834619e774ab4-1.digest new file mode 100644 index 000000000..c986b6298 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/edits_usda-5f2834619e774ab4-1.digest @@ -0,0 +1,30 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/World/Cam2") +camera: Camera { origin: Vec3A(1.5, 1.0, 5.0), lower_left_corner: Vec3A(-4.029999, -2.2177181, -3.6355724), horizontal: Vec3A(6.358542, -1.2206286e-8, -1.5853626), vertical: Vec3A(-0.11047701, 4.344867, -0.4430991), u: Vec3A(0.9702957, -1.8626451e-9, -0.2419219), v: Vec3A(-0.025287723, 0.99452186, -0.101423524), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: Some("/Render/settings") +settings: RenderSettings { samples_per_pixel: 128, max_depth: 2, width: 48, height: 32, region: PixelRect { x0: 0, y0: 0, x1: 48, y1: 32 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [AovProduct { prim_path: "/Render/beauty", name: "beauty.exr", vars: [AovVar { prim_path: "/Render/C", name: "C", channel_prefix: None, source: Color, components: 3, precision: Float, accumulation: Filtered, clear: 0.0, expression: None, raw: false, variance: false }], attributes: [] }], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 35.0, aperture: [20.955, 15.2908], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 10.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/edits.usda", "$DIR/input.usda"], invisible_overrides: Some(0) } +layer: $DIR/edits.usda +layer: $DIR/input.usda +warning: Warning { code: CameraNotACamera, kind: Refused, count: 1, prims: ["/World/Card"], message: "RenderSettings.camera targets /World/Card, which is not a camera on this stage — rendering through /World/Cam2 instead" } +lights: 2 +light 0: distant name Some("/World/Sun") lpe None pmf 0.5 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 1: dome name Some("/World/Sky") lpe None pmf 0.5 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 2 geometries, PrimitiveBreakdown { triangles: 4, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 4, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:0e0a4667da70ad35 camera=2:0e0a4667da70ad35 shadow=2:0e0a4667da70ad35 indirect=2:0e0a4667da70ad35 +geom 1: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:6787da8eacebee45 camera=2:6787da8eacebee45 shadow=2:6787da8eacebee45 indirect=2:6787da8eacebee45 +provenance light /World/Sky: LightOrigin { index: 1, geoms: 2..2 } +provenance light /World/Sun: LightOrigin { index: 0, geoms: 2..2 } +provenance geometry 0..1: /World/Card +provenance geometry 1..2: /World/Floor +provenance mesh: MeshOrigin { geom_id: 0, slot: 0, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 1, slot: 1, baked: true, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 18358658470076285213, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 1: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 800109031887815527, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: true }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/World/Cam2"), cameras: ["/World/Cam2", "/World/Cam"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/World/Cam2"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/edits_usda-5f2834619e774ab4-1.image b/crates/crust-core/tests/data/import_baselines/edits_usda-5f2834619e774ab4-1.image new file mode 100644 index 000000000..61ffa56d4 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/edits_usda-5f2834619e774ab4-1.image @@ -0,0 +1 @@ +48x32 16spp clamp-off 3072ee50a874d8ba diff --git a/crates/crust-core/tests/data/import_baselines/edits_usda-6019827f6d635824-1.digest b/crates/crust-core/tests/data/import_baselines/edits_usda-6019827f6d635824-1.digest new file mode 100644 index 000000000..9d44e21b0 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/edits_usda-6019827f6d635824-1.digest @@ -0,0 +1,33 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/World/Cam") +camera: Camera { origin: Vec3A(0.3, 0.6, 5.5), lower_left_corner: Vec3A(-4.4783754, -2.5855837, -4.5), horizontal: Vec3A(9.556751, 0.0, 0.0), vertical: Vec3A(0.0, 6.371167, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: Some("/Render/settings") +settings: RenderSettings { samples_per_pixel: 128, max_depth: 2, width: 48, height: 32, region: PixelRect { x0: 0, y0: 0, x1: 48, y1: 32 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 24.0, aperture: [20.955, 15.2908], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 10.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/edits.usda", "$DIR/input.usda"], invisible_overrides: Some(0) } +layer: $DIR/edits.usda +layer: $DIR/input.usda +lights: 2 +light 0: distant name Some("/World/Sun") lpe None pmf 0.5 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 1: dome name Some("/World/Sky") lpe None pmf 0.5 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 3 geometries, PrimitiveBreakdown { triangles: 5, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 5, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:0e0a4667da70ad35 camera=2:0e0a4667da70ad35 shadow=2:0e0a4667da70ad35 indirect=2:0e0a4667da70ad35 +geom 1: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:6787da8eacebee45 camera=2:6787da8eacebee45 shadow=2:6787da8eacebee45 indirect=2:6787da8eacebee45 +geom 2: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:57d0213124acc7b8 camera=1:57d0213124acc7b8 shadow=1:57d0213124acc7b8 indirect=1:57d0213124acc7b8 +provenance light /World/Sky: LightOrigin { index: 1, geoms: 2..2 } +provenance light /World/Sun: LightOrigin { index: 0, geoms: 2..2 } +provenance geometry 0..1: /World/Card +provenance geometry 1..2: /World/Floor +provenance geometry 2..3: /World/Cam/Badge +provenance mesh: MeshOrigin { geom_id: 0, slot: 0, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 1, slot: 1, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 2, slot: 2, baked: true, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 18358658470076285213, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 1: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 800109031887815527, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 2: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 7930610974440722833, n_points: 3, n_indices: 3, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: true }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/World/Cam"), cameras: ["/World/Cam"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/World/Cam"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/edits_usda-6019827f6d635824-1.image b/crates/crust-core/tests/data/import_baselines/edits_usda-6019827f6d635824-1.image new file mode 100644 index 000000000..afbe2bf68 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/edits_usda-6019827f6d635824-1.image @@ -0,0 +1 @@ +48x32 16spp clamp-off da848a57e8cc8f21 diff --git a/crates/crust-core/tests/data/import_baselines/edits_usda-65b79e09c14be76d-1.digest b/crates/crust-core/tests/data/import_baselines/edits_usda-65b79e09c14be76d-1.digest new file mode 100644 index 000000000..23feb8bdd --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/edits_usda-65b79e09c14be76d-1.digest @@ -0,0 +1,30 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/World/Cam") +camera: Camera { origin: Vec3A(0.3, 0.6, 5.5), lower_left_corner: Vec3A(-5.4717097, -3.2753882, -3.7005186), horizontal: Vec3A(9.504398, 0.0, -0.9989525), vertical: Vec3A(-0.0464556, 6.3556476, -0.4419955), u: Vec3A(0.9945219, 0.0, -0.104528464), v: Vec3A(-0.007291537, 0.9975641, -0.06937434), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: Some("/Render/settings") +settings: RenderSettings { samples_per_pixel: 128, max_depth: 2, width: 48, height: 32, region: PixelRect { x0: 0, y0: 0, x1: 48, y1: 32 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 24.0, aperture: [20.955, 15.2908], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 10.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/edits.usda", "$DIR/input.usda"], invisible_overrides: Some(0) } +layer: $DIR/edits.usda +layer: $DIR/input.usda +lights: 2 +light 0: distant name Some("/World/Sun") lpe None pmf 0.5 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 1: dome name Some("/World/Sky") lpe None pmf 0.5 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 1 +volume 0: sigma_s Vec3A(0.4, 0.4, 0.4) sigma_a Vec3A(0.05, 0.05, 0.05) g 0.0 emission Vec3A(0.0, 0.0, 0.0) mask RayMask(4294967295) class 65535 homogeneous true +world: 2 geometries, PrimitiveBreakdown { triangles: 4, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 4, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:0e0a4667da70ad35 camera=2:0e0a4667da70ad35 shadow=2:0e0a4667da70ad35 indirect=2:0e0a4667da70ad35 +geom 1: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:6787da8eacebee45 camera=2:6787da8eacebee45 shadow=2:6787da8eacebee45 indirect=2:6787da8eacebee45 +provenance light /World/Sky: LightOrigin { index: 1, geoms: 2..2 } +provenance light /World/Sun: LightOrigin { index: 0, geoms: 2..2 } +provenance geometry 0..1: /World/Card +provenance geometry 1..2: /World/Floor +provenance mesh: MeshOrigin { geom_id: 0, slot: 0, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 1, slot: 1, baked: true, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 18358658470076285213, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 1: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 800109031887815527, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [] +provenance volumes: ["/World/Cam/Fog"] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: true }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/World/Cam"), cameras: ["/World/Cam"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/World/Cam"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/edits_usda-65b79e09c14be76d-1.image b/crates/crust-core/tests/data/import_baselines/edits_usda-65b79e09c14be76d-1.image new file mode 100644 index 000000000..bbf584960 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/edits_usda-65b79e09c14be76d-1.image @@ -0,0 +1 @@ +48x32 16spp clamp-off 9e4982191bc1cf10 diff --git a/crates/crust-core/tests/data/import_baselines/edits_usda-662e56b1a93d2d66-1.digest b/crates/crust-core/tests/data/import_baselines/edits_usda-662e56b1a93d2d66-1.digest new file mode 100644 index 000000000..0df7e35e1 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/edits_usda-662e56b1a93d2d66-1.digest @@ -0,0 +1,44 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/World/Cam") +camera: Camera { origin: Vec3A(0.0, 3.0, 9.0), lower_left_corner: Vec3A(-5.6632595, -2.195088, -0.119155884), horizontal: Vec3A(11.326519, -0.0, 0.0), vertical: Vec3A(0.0, 6.231942, -1.3246402), u: Vec3A(1.0, -0.0, 0.0), v: Vec3A(0.0, 0.9781476, -0.20791169), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: Some("/Render/settings") +settings: RenderSettings { samples_per_pixel: 64, max_depth: 4, width: 48, height: 27, region: PixelRect { x0: 0, y0: 0, x1: 48, y1: 27 }, min_samples_per_pixel: 16, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 24.0, aperture: [20.955, 15.2908], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 10.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/edits.usda", "$DIR/input.usda", "$ROOT/samples/light_linking.usda"], invisible_overrides: Some(0) } +layer: $ROOT/samples/light_linking.usda +layer: $DIR/edits.usda +layer: $DIR/input.usda +lights: 3 +light 0: area name Some("/World/Rim") lpe None pmf 0.33333334 shadow RayMask(4294967290) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 1: area name Some("/World/Fill") lpe None pmf 0.33333334 shadow RayMask(4294967290) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 2: area name Some("/World/Key") lpe None pmf 0.33333334 shadow RayMask(2) restricted true nee-only false twinned true gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 8 geometries, PrimitiveBreakdown { triangles: 14, spheres: 6, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 14, spheres: 6, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +geom 0: material #0 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 0 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:147e304cdaa43315 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=1:147e304cdaa43315 +geom 1: material #1 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 0 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:3bb65d4d618d300f camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=1:3bb65d4d618d300f +geom 2: material #2 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 0 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:414b9060aeb9fa5b camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=1:414b9060aeb9fa5b +geom 3: material #3 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 0 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=12:66555abe449aad95 camera=12:66555abe449aad95 shadow=0:cbf29ce484222325 indirect=12:66555abe449aad95 +geom 4: material #3 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 0 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:d864e332b6f2885f camera=1:d864e332b6f2885f shadow=1:d864e332b6f2885f indirect=1:d864e332b6f2885f +geom 5: material #3 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 1 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:b3ac5caa5601a5fa camera=1:b3ac5caa5601a5fa shadow=1:b3ac5caa5601a5fa indirect=1:b3ac5caa5601a5fa +geom 6: material #3 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 0 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:3fd5e7ad4a18db8b camera=1:3fd5e7ad4a18db8b shadow=1:3fd5e7ad4a18db8b indirect=1:3fd5e7ad4a18db8b +geom 7: material #3 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 2 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:be0b97004c4d3e85 camera=2:be0b97004c4d3e85 shadow=2:be0b97004c4d3e85 indirect=2:be0b97004c4d3e85 +provenance light /World/Fill: LightOrigin { index: 1, geoms: 1..2 } +provenance light /World/Key: LightOrigin { index: 2, geoms: 2..3 } +provenance light /World/Rim: LightOrigin { index: 0, geoms: 0..1 } +provenance geometry 0..1: /World/Rim +provenance geometry 1..2: /World/Fill +provenance geometry 2..3: /World/Key +provenance geometry 3..4: /World/Pillar +provenance geometry 4..5: /World/Right +provenance geometry 5..6: /World/Hero +provenance geometry 6..7: /World/Left +provenance geometry 7..8: /World/Floor +provenance mesh: MeshOrigin { geom_id: 3, slot: 0, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 7, slot: 1, baked: true, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 8639962265279651952, n_points: 8, n_indices: 24, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 1: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 8416296582947184296, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [4, 5, 6] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: true }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/World/Cam"), cameras: ["/World/Cam"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/World/Cam"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/edits_usda-662e56b1a93d2d66-1.image b/crates/crust-core/tests/data/import_baselines/edits_usda-662e56b1a93d2d66-1.image new file mode 100644 index 000000000..e60074db9 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/edits_usda-662e56b1a93d2d66-1.image @@ -0,0 +1 @@ +48x27 16spp clamp-off 7efb7ee2a8cd5748 diff --git a/crates/crust-core/tests/data/import_baselines/edits_usda-6deff31ef60f6033-1.digest b/crates/crust-core/tests/data/import_baselines/edits_usda-6deff31ef60f6033-1.digest new file mode 100644 index 000000000..63d82da21 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/edits_usda-6deff31ef60f6033-1.digest @@ -0,0 +1,23 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/World/Cam") +camera: Camera { origin: Vec3A(0.0, 0.0, 6.0), lower_left_corner: Vec3A(-1.3761721, -0.91744804, 0.0), horizontal: Vec3A(2.7523441, 0.0, 0.0), vertical: Vec3A(0.0, 1.8348961, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0125, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: Some("/Render/settings") +settings: RenderSettings { samples_per_pixel: 16, max_depth: 2, width: 48, height: 32, region: PixelRect { x0: 0, y0: 0, x1: 48, y1: 32 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 50.0, aperture: [20.955, 15.2908], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 2.0, focus_distance: 6.0 }), depth_of_field: true, motion_blur: false, layer_stack: ["$DIR/edits.usda", "$DIR/input.usda"], invisible_overrides: Some(0) } +layer: $DIR/edits.usda +layer: $DIR/input.usda +lights: 1 +light 0: distant name Some("/World/Sun") lpe None pmf 1.0 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 2 geometries, PrimitiveBreakdown { triangles: 0, spheres: 2, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 0, spheres: 2, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:1cd1488d041dfcdb camera=1:1cd1488d041dfcdb shadow=1:1cd1488d041dfcdb indirect=1:1cd1488d041dfcdb +geom 1: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:2d90e22d27992fa5 camera=1:2d90e22d27992fa5 shadow=1:2d90e22d27992fa5 indirect=1:2d90e22d27992fa5 +provenance light /World/Sun: LightOrigin { index: 0, geoms: 2..2 } +provenance geometry 0..1: /World/Far +provenance geometry 1..2: /World/Near +provenance spheres: [0, 1] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: true, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/World/Cam"), cameras: ["/World/Cam"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/World/Cam"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/edits_usda-6deff31ef60f6033-1.image b/crates/crust-core/tests/data/import_baselines/edits_usda-6deff31ef60f6033-1.image new file mode 100644 index 000000000..51107fcdd --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/edits_usda-6deff31ef60f6033-1.image @@ -0,0 +1 @@ +48x32 16spp clamp-off fbca99e6d6c9aaa1 diff --git a/crates/crust-core/tests/data/import_baselines/edits_usda-7239cb83230ea59e-1.digest b/crates/crust-core/tests/data/import_baselines/edits_usda-7239cb83230ea59e-1.digest new file mode 100644 index 000000000..8aff24b20 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/edits_usda-7239cb83230ea59e-1.digest @@ -0,0 +1,23 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/World/Cam") +camera: Camera { origin: Vec3A(0.0, 0.0, 8.0), lower_left_corner: Vec3A(-2.0955, -1.5716249, -2.0), horizontal: Vec3A(4.191, 0.0, 0.0), vertical: Vec3A(0.0, 3.1432498, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: Some("/Render/settings") +settings: RenderSettings { samples_per_pixel: 128, max_depth: 2, width: 32, height: 24, region: PixelRect { x0: 0, y0: 0, x1: 32, y1: 24 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [AovProduct { prim_path: "/Render/withRest", name: "rest.exr", vars: [AovVar { prim_path: "/Render/C", name: "C", channel_prefix: None, source: Color, components: 3, precision: Float, accumulation: Filtered, clear: 0.0, expression: None, raw: false, variance: false }, AovVar { prim_path: "/Render/Pref", name: "Pref", channel_prefix: None, source: Primvar(PrimvarSource { index: 0, components: 3, role: Vector }), components: 3, precision: Float, accumulation: Closest, clear: 0.0, expression: None, raw: false, variance: false }], attributes: [] }], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 50.0, aperture: [20.955, 15.2908], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 10.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/edits.usda", "$DIR/input.usda"], invisible_overrides: Some(0) } +layer: $DIR/edits.usda +layer: $DIR/input.usda +lights: 1 +light 0: distant name Some("/World/Sun") lpe None pmf 1.0 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 1 geometries, PrimitiveBreakdown { triangles: 2, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 2, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov Some((Some(0), false)) swapped false curves false scale 1.0 motion [] pieces all=2:32f1a52c797bfee5 camera=2:32f1a52c797bfee5 shadow=2:32f1a52c797bfee5 indirect=2:32f1a52c797bfee5 +provenance light /World/Sun: LightOrigin { index: 0, geoms: 1..1 } +provenance geometry 0..1: /World/M +provenance mesh: MeshOrigin { geom_id: 0, slot: 0, baked: true, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 11801363609627443368, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: true }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/World/Cam"), cameras: ["/World/Cam"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [("rest", 3)], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/World/Cam"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/edits_usda-7239cb83230ea59e-1.image b/crates/crust-core/tests/data/import_baselines/edits_usda-7239cb83230ea59e-1.image new file mode 100644 index 000000000..6dce74c13 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/edits_usda-7239cb83230ea59e-1.image @@ -0,0 +1 @@ +32x24 16spp clamp-off e648a58ccb35ae3b diff --git a/crates/crust-core/tests/data/import_baselines/edits_usda-786eedaaaa2108bd-1.digest b/crates/crust-core/tests/data/import_baselines/edits_usda-786eedaaaa2108bd-1.digest new file mode 100644 index 000000000..d2e4d6a80 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/edits_usda-786eedaaaa2108bd-1.digest @@ -0,0 +1,22 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/World/Cam") +camera: Camera { origin: Vec3A(0.0, 0.0, 6.0), lower_left_corner: Vec3A(-4.7783756, -3.1855836, -4.0), horizontal: Vec3A(9.556751, 0.0, 0.0), vertical: Vec3A(0.0, 6.371167, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: Some("/Render/settings") +settings: RenderSettings { samples_per_pixel: 128, max_depth: 2, width: 48, height: 32, region: PixelRect { x0: 0, y0: 0, x1: 48, y1: 32 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 2.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 24.0, aperture: [20.955, 15.2908], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 10.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/edits.usda", "$DIR/input.usda"], invisible_overrides: Some(0) } +layer: $DIR/edits.usda +layer: $DIR/input.usda +warning: Warning { code: TimeMotionNeedsFrame, kind: Skipped, count: 1, prims: ["/World/Mover"], message: "/World/Cam opens its shutter (-0.25 .. 0.25), but no frame was given: 1 drawn prim's time-sampled transforms are not evaluated over it and render sharp (the first at /World/Mover). Render a frame with -f" } +lights: 1 +light 0: distant name Some("/World/Sun") lpe None pmf 1.0 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 1 geometries, PrimitiveBreakdown { triangles: 0, spheres: 1, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 0, spheres: 1, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:984632b55acb5495 camera=1:984632b55acb5495 shadow=1:984632b55acb5495 indirect=1:984632b55acb5495 +provenance light /World/Sun: LightOrigin { index: 0, geoms: 1..1 } +provenance geometry 0..1: /World/Mover +provenance spheres: [0] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: true }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/World/Cam"), cameras: ["/World/Cam"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/World/Cam"), offsets: [13821547256400052224, 4598175219545276416], interval: None, query: true, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/edits_usda-786eedaaaa2108bd-1.image b/crates/crust-core/tests/data/import_baselines/edits_usda-786eedaaaa2108bd-1.image new file mode 100644 index 000000000..79bc428f3 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/edits_usda-786eedaaaa2108bd-1.image @@ -0,0 +1 @@ +48x32 16spp clamp-off 0956f9aa6aa6e7f9 diff --git a/crates/crust-core/tests/data/import_baselines/edits_usda-8f9cca718b125c47-1.digest b/crates/crust-core/tests/data/import_baselines/edits_usda-8f9cca718b125c47-1.digest new file mode 100644 index 000000000..f38737448 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/edits_usda-8f9cca718b125c47-1.digest @@ -0,0 +1,23 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/World/Cam") +camera: Camera { origin: Vec3A(0.0, 0.0, 8.0), lower_left_corner: Vec3A(-2.0955, -1.5716249, -2.0), horizontal: Vec3A(4.191, 0.0, 0.0), vertical: Vec3A(0.0, 3.1432498, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: Some("/Render/settings") +settings: RenderSettings { samples_per_pixel: 128, max_depth: 2, width: 32, height: 24, region: PixelRect { x0: 0, y0: 0, x1: 32, y1: 24 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [AovProduct { prim_path: "/Render/plain", name: "plain.exr", vars: [AovVar { prim_path: "/Render/C", name: "C", channel_prefix: None, source: Color, components: 3, precision: Float, accumulation: Filtered, clear: 0.0, expression: None, raw: false, variance: false }], attributes: [] }], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 50.0, aperture: [20.955, 15.2908], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 10.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/edits.usda", "$DIR/input.usda"], invisible_overrides: Some(0) } +layer: $DIR/edits.usda +layer: $DIR/input.usda +lights: 1 +light 0: distant name Some("/World/Sun") lpe None pmf 1.0 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 1 geometries, PrimitiveBreakdown { triangles: 2, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 2, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:32f1a52c797bfee5 camera=2:32f1a52c797bfee5 shadow=2:32f1a52c797bfee5 indirect=2:32f1a52c797bfee5 +provenance light /World/Sun: LightOrigin { index: 0, geoms: 1..1 } +provenance geometry 0..1: /World/M +provenance mesh: MeshOrigin { geom_id: 0, slot: 0, baked: true, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 14414187199170096052, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: true }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/World/Cam"), cameras: ["/World/Cam"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/World/Cam"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/edits_usda-8f9cca718b125c47-1.image b/crates/crust-core/tests/data/import_baselines/edits_usda-8f9cca718b125c47-1.image new file mode 100644 index 000000000..6dce74c13 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/edits_usda-8f9cca718b125c47-1.image @@ -0,0 +1 @@ +32x24 16spp clamp-off e648a58ccb35ae3b diff --git a/crates/crust-core/tests/data/import_baselines/edits_usda-8f9cca718b125c47-2.digest b/crates/crust-core/tests/data/import_baselines/edits_usda-8f9cca718b125c47-2.digest new file mode 100644 index 000000000..f38737448 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/edits_usda-8f9cca718b125c47-2.digest @@ -0,0 +1,23 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/World/Cam") +camera: Camera { origin: Vec3A(0.0, 0.0, 8.0), lower_left_corner: Vec3A(-2.0955, -1.5716249, -2.0), horizontal: Vec3A(4.191, 0.0, 0.0), vertical: Vec3A(0.0, 3.1432498, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: Some("/Render/settings") +settings: RenderSettings { samples_per_pixel: 128, max_depth: 2, width: 32, height: 24, region: PixelRect { x0: 0, y0: 0, x1: 32, y1: 24 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [AovProduct { prim_path: "/Render/plain", name: "plain.exr", vars: [AovVar { prim_path: "/Render/C", name: "C", channel_prefix: None, source: Color, components: 3, precision: Float, accumulation: Filtered, clear: 0.0, expression: None, raw: false, variance: false }], attributes: [] }], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 50.0, aperture: [20.955, 15.2908], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 10.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/edits.usda", "$DIR/input.usda"], invisible_overrides: Some(0) } +layer: $DIR/edits.usda +layer: $DIR/input.usda +lights: 1 +light 0: distant name Some("/World/Sun") lpe None pmf 1.0 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 1 geometries, PrimitiveBreakdown { triangles: 2, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 2, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:32f1a52c797bfee5 camera=2:32f1a52c797bfee5 shadow=2:32f1a52c797bfee5 indirect=2:32f1a52c797bfee5 +provenance light /World/Sun: LightOrigin { index: 0, geoms: 1..1 } +provenance geometry 0..1: /World/M +provenance mesh: MeshOrigin { geom_id: 0, slot: 0, baked: true, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 14414187199170096052, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: true }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/World/Cam"), cameras: ["/World/Cam"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/World/Cam"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/edits_usda-8f9cca718b125c47-2.image b/crates/crust-core/tests/data/import_baselines/edits_usda-8f9cca718b125c47-2.image new file mode 100644 index 000000000..6dce74c13 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/edits_usda-8f9cca718b125c47-2.image @@ -0,0 +1 @@ +32x24 16spp clamp-off e648a58ccb35ae3b diff --git a/crates/crust-core/tests/data/import_baselines/edits_usda-939ae62aa1013f1f-1.digest b/crates/crust-core/tests/data/import_baselines/edits_usda-939ae62aa1013f1f-1.digest new file mode 100644 index 000000000..8889914b1 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/edits_usda-939ae62aa1013f1f-1.digest @@ -0,0 +1,29 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/World/Cam") +camera: Camera { origin: Vec3A(0.0, 0.5, 6.0), lower_left_corner: Vec3A(-4.7783756, -2.6855836, -4.0), horizontal: Vec3A(9.556751, 0.0, 0.0), vertical: Vec3A(0.0, 6.371167, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: Some("/Render/settings") +settings: RenderSettings { samples_per_pixel: 128, max_depth: 2, width: 48, height: 32, region: PixelRect { x0: 0, y0: 0, x1: 48, y1: 32 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [AovProduct { prim_path: "/Render/beauty", name: "beauty.exr", vars: [AovVar { prim_path: "/Render/C", name: "C", channel_prefix: None, source: Color, components: 3, precision: Float, accumulation: Filtered, clear: 0.0, expression: None, raw: false, variance: false }], attributes: [] }], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 24.0, aperture: [20.955, 15.2908], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 10.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/edits.usda", "$DIR/input.usda"], invisible_overrides: Some(0) } +layer: $DIR/edits.usda +layer: $DIR/input.usda +lights: 2 +light 0: distant name Some("/World/Sun") lpe None pmf 0.5 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 1: dome name Some("/World/Sky") lpe None pmf 0.5 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 2 geometries, PrimitiveBreakdown { triangles: 4, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 4, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:0e0a4667da70ad35 camera=2:0e0a4667da70ad35 shadow=2:0e0a4667da70ad35 indirect=2:0e0a4667da70ad35 +geom 1: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:6787da8eacebee45 camera=2:6787da8eacebee45 shadow=2:6787da8eacebee45 indirect=2:6787da8eacebee45 +provenance light /World/Sky: LightOrigin { index: 1, geoms: 2..2 } +provenance light /World/Sun: LightOrigin { index: 0, geoms: 2..2 } +provenance geometry 0..1: /World/Card +provenance geometry 1..2: /World/Floor +provenance mesh: MeshOrigin { geom_id: 0, slot: 0, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 1, slot: 1, baked: true, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 18358658470076285213, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 1: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 800109031887815527, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: true }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/World/Cam"), cameras: ["/World/Cam2", "/World/Cam"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/World/Cam"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/edits_usda-939ae62aa1013f1f-1.image b/crates/crust-core/tests/data/import_baselines/edits_usda-939ae62aa1013f1f-1.image new file mode 100644 index 000000000..aa809d36e --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/edits_usda-939ae62aa1013f1f-1.image @@ -0,0 +1 @@ +48x32 16spp clamp-off 8505746c918f1879 diff --git a/crates/crust-core/tests/data/import_baselines/edits_usda-9785472850c84b20-1.digest b/crates/crust-core/tests/data/import_baselines/edits_usda-9785472850c84b20-1.digest new file mode 100644 index 000000000..52b464e0a --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/edits_usda-9785472850c84b20-1.digest @@ -0,0 +1,30 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/World/Cam") +camera: Camera { origin: Vec3A(0.0, 1.2, 6.0), lower_left_corner: Vec3A(-5.6632595, -1.9855835, -4.0), horizontal: Vec3A(11.326519, 0.0, 0.0), vertical: Vec3A(0.0, 6.371167, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: Some("/Render/settings") +settings: RenderSettings { samples_per_pixel: 4, max_depth: 4, width: 32, height: 18, region: PixelRect { x0: 0, y0: 0, x1: 32, y1: 18 }, min_samples_per_pixel: 8, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [AovProduct { prim_path: "/Render/Products/beauty", name: "renders/aovs_beauty.exr", vars: [AovVar { prim_path: "/Render/Products/Vars/C", name: "C", channel_prefix: None, source: Color, components: 4, precision: Float, accumulation: Filtered, clear: 0.0, expression: None, raw: false, variance: false }, AovVar { prim_path: "/Render/Products/Vars/sampleCount", name: "sampleCount", channel_prefix: None, source: SampleCount, components: 1, precision: Float, accumulation: Filtered, clear: 0.0, expression: None, raw: false, variance: false }, AovVar { prim_path: "/Render/Products/Vars/variance", name: "variance", channel_prefix: None, source: Variance, components: 1, precision: Float, accumulation: Filtered, clear: 0.0, expression: None, raw: false, variance: false }], attributes: [("artist", "crust samples")] }, AovProduct { prim_path: "/Render/Products/data", name: "renders/aovs_data.exr", vars: [AovVar { prim_path: "/Render/Products/Vars/Z", name: "Z", channel_prefix: None, source: Depth, components: 1, precision: Float, accumulation: Closest, clear: inf, expression: None, raw: false, variance: false }, AovVar { prim_path: "/Render/Products/Vars/distance", name: "distance", channel_prefix: None, source: Distance, components: 1, precision: Float, accumulation: Closest, clear: inf, expression: None, raw: false, variance: false }, AovVar { prim_path: "/Render/Products/Vars/P", name: "P", channel_prefix: None, source: P, components: 3, precision: Float, accumulation: Closest, clear: 0.0, expression: None, raw: false, variance: false }, AovVar { prim_path: "/Render/Products/Vars/Peye", name: "Peye", channel_prefix: None, source: Peye, components: 3, precision: Float, accumulation: Closest, clear: 0.0, expression: None, raw: false, variance: false }, AovVar { prim_path: "/Render/Products/Vars/N", name: "N", channel_prefix: None, source: Normal, components: 3, precision: Half, accumulation: Filtered, clear: 0.0, expression: None, raw: false, variance: false }, AovVar { prim_path: "/Render/Products/Vars/Neye", name: "Neye", channel_prefix: None, source: Neye, components: 3, precision: Float, accumulation: Filtered, clear: 0.0, expression: None, raw: false, variance: false }, AovVar { prim_path: "/Render/Products/Vars/st", name: "st", channel_prefix: None, source: St, components: 2, precision: Float, accumulation: Filtered, clear: 0.0, expression: None, raw: false, variance: false }, AovVar { prim_path: "/Render/Products/Vars/alpha", name: "alpha", channel_prefix: None, source: Alpha, components: 1, precision: Float, accumulation: Filtered, clear: 0.0, expression: None, raw: false, variance: false }], attributes: [] }], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 24.0, aperture: [20.955, 15.2908], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 10.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/edits.usda", "$ROOT/samples/aovs.usda"], invisible_overrides: Some(0) } +layer: $ROOT/samples/aovs.usda +layer: $DIR/edits.usda +warning: Warning { code: AovUnknownSource, kind: Skipped, count: 1, prims: ["/Render/Products/Vars/diffuse_direct"], message: "/Render/Products/Vars/diffuse_direct: unknown raw source \"diffuse_direct\"; no channel written (crust's AOV names are listed in the user documentation, usd/aovs)" } +lights: 2 +light 0: dome name Some("/World/Sky") lpe None pmf 0.5 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 1: area name Some("/World/KeyLight") lpe None pmf 0.5 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 3 geometries, PrimitiveBreakdown { triangles: 4, spheres: 1, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 4, spheres: 1, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +geom 0: material #0 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:e8a5ea9ee1d32838 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=2:e8a5ea9ee1d32838 +geom 1: material #1 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:cadf82024fa5b745 camera=2:cadf82024fa5b745 shadow=2:cadf82024fa5b745 indirect=2:cadf82024fa5b745 +geom 2: material #1 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:ee76fd7ed45c4a85 camera=1:ee76fd7ed45c4a85 shadow=1:ee76fd7ed45c4a85 indirect=1:ee76fd7ed45c4a85 +provenance light /World/KeyLight: LightOrigin { index: 1, geoms: 0..1 } +provenance light /World/Sky: LightOrigin { index: 0, geoms: 0..0 } +provenance geometry 0..1: /World/KeyLight +provenance geometry 1..2: /World/Floor +provenance geometry 2..3: /World/Ball +provenance mesh: MeshOrigin { geom_id: 1, slot: 0, baked: true, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 12300483381263303556, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [2] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: true }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/World/Cam"), cameras: ["/World/Cam"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/World/Cam"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/edits_usda-9785472850c84b20-1.image b/crates/crust-core/tests/data/import_baselines/edits_usda-9785472850c84b20-1.image new file mode 100644 index 000000000..e5718bb57 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/edits_usda-9785472850c84b20-1.image @@ -0,0 +1 @@ +32x18 16spp clamp-off ddf40d7a272e6781 diff --git a/crates/crust-core/tests/data/import_baselines/edits_usda-9829e1b01f60d251-1.digest b/crates/crust-core/tests/data/import_baselines/edits_usda-9829e1b01f60d251-1.digest new file mode 100644 index 000000000..9c5e60cf2 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/edits_usda-9829e1b01f60d251-1.digest @@ -0,0 +1,43 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/World/ShotCam") +camera: Camera { origin: Vec3A(0.0, -0.1, 7.0), lower_left_corner: Vec3A(-2.5200005, -2.6200004, 0.0), horizontal: Vec3A(5.040001, 0.0, 0.0), vertical: Vec3A(0.0, 5.040001, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: Some("/Render/settings") +settings: RenderSettings { samples_per_pixel: 4, max_depth: 8, width: 32, height: 32, region: PixelRect { x0: 0, y0: 0, x1: 32, y1: 32 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 50.0, aperture: [36.0, 15.2908], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 7.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/edits.usda", "$ROOT/samples/usdpreview_textured.usda"], invisible_overrides: Some(0) } +layer: $ROOT/samples/usdpreview_textured.usda +layer: $DIR/edits.usda +lights: 2 +light 0: area name Some("/World/Key") lpe None pmf 0.5 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 1: dome name Some("/World/Sky") lpe None pmf 0.5 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 5 geometries, PrimitiveBreakdown { triangles: 10, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 10, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +geom 0: material #0 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:d922ac2ec48f4f97 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=2:d922ac2ec48f4f97 +geom 1: material #1 Signature { kind: "UsdPreviewSurface (textured)", cutout: false, straight: false, boundary: false, emits: false, uv: true, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv Some(0) shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:23063c3980664227 camera=2:23063c3980664227 shadow=2:23063c3980664227 indirect=2:23063c3980664227 +geom 2: material #2 Signature { kind: "UsdPreviewSurface (textured)", cutout: false, straight: false, boundary: false, emits: false, uv: true, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv Some(1) shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:380b2e0280de83db camera=2:380b2e0280de83db shadow=2:380b2e0280de83db indirect=2:380b2e0280de83db +geom 3: material #3 Signature { kind: "UsdPreviewSurface (textured)", cutout: false, straight: false, boundary: false, emits: false, uv: true, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv Some(2) shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:14161eeed09e7034 camera=2:14161eeed09e7034 shadow=2:14161eeed09e7034 indirect=2:14161eeed09e7034 +geom 4: material #4 Signature { kind: "UsdPreviewSurface (textured)", cutout: false, straight: false, boundary: false, emits: false, uv: true, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv Some(3) shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:08414313d8d6e290 camera=2:08414313d8d6e290 shadow=2:08414313d8d6e290 indirect=2:08414313d8d6e290 +provenance material /World/Looks/ExrAuto: MaterialOrigin { slots: [3], displaced: false } +provenance material /World/Looks/MaskedMetal: MaterialOrigin { slots: [2], displaced: false } +provenance material /World/Looks/NormalMapped: MaterialOrigin { slots: [1], displaced: false } +provenance material /World/Looks/UdimSrgb: MaterialOrigin { slots: [4], displaced: false } +provenance light /World/Key: LightOrigin { index: 0, geoms: 0..1 } +provenance light /World/Sky: LightOrigin { index: 1, geoms: 1..1 } +provenance geometry 0..1: /World/Key +provenance geometry 1..2: /World/NormalQuad +provenance geometry 2..3: /World/MetalQuad +provenance geometry 3..4: /World/ExrQuad +provenance geometry 4..5: /World/UdimQuad +provenance mesh: MeshOrigin { geom_id: 1, slot: 0, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 2, slot: 1, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 3, slot: 2, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 4, slot: 3, baked: true, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 9086379455125602793, n_points: 4, n_indices: 4, n_uvs: Some(4), smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 1: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 10115957615497089662, n_points: 4, n_indices: 4, n_uvs: Some(4), smooth: false, material: 1 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 2: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 10519275802662681676, n_points: 4, n_indices: 4, n_uvs: Some(4), smooth: false, material: 2 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 3: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 11939811521305294379, n_points: 4, n_indices: 4, n_uvs: Some(4), smooth: false, material: 3 }), placements: 1, shared: false, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: true }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/World/ShotCam"), cameras: ["/World/ShotCam"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/World/ShotCam"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/edits_usda-9829e1b01f60d251-2.digest b/crates/crust-core/tests/data/import_baselines/edits_usda-9829e1b01f60d251-2.digest new file mode 100644 index 000000000..9c5e60cf2 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/edits_usda-9829e1b01f60d251-2.digest @@ -0,0 +1,43 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/World/ShotCam") +camera: Camera { origin: Vec3A(0.0, -0.1, 7.0), lower_left_corner: Vec3A(-2.5200005, -2.6200004, 0.0), horizontal: Vec3A(5.040001, 0.0, 0.0), vertical: Vec3A(0.0, 5.040001, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: Some("/Render/settings") +settings: RenderSettings { samples_per_pixel: 4, max_depth: 8, width: 32, height: 32, region: PixelRect { x0: 0, y0: 0, x1: 32, y1: 32 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 50.0, aperture: [36.0, 15.2908], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 7.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/edits.usda", "$ROOT/samples/usdpreview_textured.usda"], invisible_overrides: Some(0) } +layer: $ROOT/samples/usdpreview_textured.usda +layer: $DIR/edits.usda +lights: 2 +light 0: area name Some("/World/Key") lpe None pmf 0.5 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 1: dome name Some("/World/Sky") lpe None pmf 0.5 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 5 geometries, PrimitiveBreakdown { triangles: 10, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 10, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +geom 0: material #0 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:d922ac2ec48f4f97 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=2:d922ac2ec48f4f97 +geom 1: material #1 Signature { kind: "UsdPreviewSurface (textured)", cutout: false, straight: false, boundary: false, emits: false, uv: true, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv Some(0) shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:23063c3980664227 camera=2:23063c3980664227 shadow=2:23063c3980664227 indirect=2:23063c3980664227 +geom 2: material #2 Signature { kind: "UsdPreviewSurface (textured)", cutout: false, straight: false, boundary: false, emits: false, uv: true, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv Some(1) shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:380b2e0280de83db camera=2:380b2e0280de83db shadow=2:380b2e0280de83db indirect=2:380b2e0280de83db +geom 3: material #3 Signature { kind: "UsdPreviewSurface (textured)", cutout: false, straight: false, boundary: false, emits: false, uv: true, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv Some(2) shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:14161eeed09e7034 camera=2:14161eeed09e7034 shadow=2:14161eeed09e7034 indirect=2:14161eeed09e7034 +geom 4: material #4 Signature { kind: "UsdPreviewSurface (textured)", cutout: false, straight: false, boundary: false, emits: false, uv: true, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv Some(3) shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:08414313d8d6e290 camera=2:08414313d8d6e290 shadow=2:08414313d8d6e290 indirect=2:08414313d8d6e290 +provenance material /World/Looks/ExrAuto: MaterialOrigin { slots: [3], displaced: false } +provenance material /World/Looks/MaskedMetal: MaterialOrigin { slots: [2], displaced: false } +provenance material /World/Looks/NormalMapped: MaterialOrigin { slots: [1], displaced: false } +provenance material /World/Looks/UdimSrgb: MaterialOrigin { slots: [4], displaced: false } +provenance light /World/Key: LightOrigin { index: 0, geoms: 0..1 } +provenance light /World/Sky: LightOrigin { index: 1, geoms: 1..1 } +provenance geometry 0..1: /World/Key +provenance geometry 1..2: /World/NormalQuad +provenance geometry 2..3: /World/MetalQuad +provenance geometry 3..4: /World/ExrQuad +provenance geometry 4..5: /World/UdimQuad +provenance mesh: MeshOrigin { geom_id: 1, slot: 0, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 2, slot: 1, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 3, slot: 2, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 4, slot: 3, baked: true, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 9086379455125602793, n_points: 4, n_indices: 4, n_uvs: Some(4), smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 1: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 10115957615497089662, n_points: 4, n_indices: 4, n_uvs: Some(4), smooth: false, material: 1 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 2: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 10519275802662681676, n_points: 4, n_indices: 4, n_uvs: Some(4), smooth: false, material: 2 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 3: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 11939811521305294379, n_points: 4, n_indices: 4, n_uvs: Some(4), smooth: false, material: 3 }), placements: 1, shared: false, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: true }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/World/ShotCam"), cameras: ["/World/ShotCam"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/World/ShotCam"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/edits_usda-9f3ec2b0f2000d47-1.digest b/crates/crust-core/tests/data/import_baselines/edits_usda-9f3ec2b0f2000d47-1.digest new file mode 100644 index 000000000..2d6e3ec2f --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/edits_usda-9f3ec2b0f2000d47-1.digest @@ -0,0 +1,23 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/World/Cam") +camera: Camera { origin: Vec3A(0.0, 0.0, 6.0), lower_left_corner: Vec3A(-1.3761721, -0.91744804, 0.0), horizontal: Vec3A(2.7523441, 0.0, 0.0), vertical: Vec3A(0.0, 1.8348961, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0125, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: Some("/Render/settings") +settings: RenderSettings { samples_per_pixel: 128, max_depth: 2, width: 48, height: 32, region: PixelRect { x0: 0, y0: 0, x1: 48, y1: 32 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 2.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 50.0, aperture: [20.955, 15.2908], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 2.0, focus_distance: 6.0 }), depth_of_field: true, motion_blur: false, layer_stack: ["$DIR/edits.usda", "$DIR/input.usda"], invisible_overrides: Some(0) } +layer: $DIR/edits.usda +layer: $DIR/input.usda +lights: 1 +light 0: distant name Some("/World/Sun") lpe None pmf 1.0 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 2 geometries, PrimitiveBreakdown { triangles: 0, spheres: 2, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 0, spheres: 2, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:1cd1488d041dfcdb camera=1:1cd1488d041dfcdb shadow=1:1cd1488d041dfcdb indirect=1:1cd1488d041dfcdb +geom 1: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:2d90e22d27992fa5 camera=1:2d90e22d27992fa5 shadow=1:2d90e22d27992fa5 indirect=1:2d90e22d27992fa5 +provenance light /World/Sun: LightOrigin { index: 0, geoms: 2..2 } +provenance geometry 0..1: /World/Far +provenance geometry 1..2: /World/Near +provenance spheres: [0, 1] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: true }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/World/Cam"), cameras: ["/World/Cam"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/World/Cam"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/edits_usda-9f3ec2b0f2000d47-1.image b/crates/crust-core/tests/data/import_baselines/edits_usda-9f3ec2b0f2000d47-1.image new file mode 100644 index 000000000..31ddc1abc --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/edits_usda-9f3ec2b0f2000d47-1.image @@ -0,0 +1 @@ +48x32 16spp clamp-off ae7f64651dca213b diff --git a/crates/crust-core/tests/data/import_baselines/edits_usda-a15a160797d16740-1.digest b/crates/crust-core/tests/data/import_baselines/edits_usda-a15a160797d16740-1.digest new file mode 100644 index 000000000..fdd13644b --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/edits_usda-a15a160797d16740-1.digest @@ -0,0 +1,30 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/World/Cam") +camera: Camera { origin: Vec3A(0.0, 1.2, 6.0), lower_left_corner: Vec3A(-5.6632595, -1.9855835, -4.0), horizontal: Vec3A(11.326519, 0.0, 0.0), vertical: Vec3A(0.0, 6.371167, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: Some("/Render/settings") +settings: RenderSettings { samples_per_pixel: 16, max_depth: 4, width: 32, height: 18, region: PixelRect { x0: 0, y0: 0, x1: 32, y1: 18 }, min_samples_per_pixel: 8, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [AovProduct { prim_path: "/Render/Products/beauty", name: "renders/aovs_beauty.exr", vars: [AovVar { prim_path: "/Render/Products/Vars/C", name: "C", channel_prefix: None, source: Color, components: 4, precision: Float, accumulation: Filtered, clear: 0.0, expression: None, raw: false, variance: false }, AovVar { prim_path: "/Render/Products/Vars/sampleCount", name: "sampleCount", channel_prefix: None, source: SampleCount, components: 1, precision: Float, accumulation: Filtered, clear: 0.0, expression: None, raw: false, variance: false }, AovVar { prim_path: "/Render/Products/Vars/variance", name: "variance", channel_prefix: None, source: Variance, components: 1, precision: Float, accumulation: Filtered, clear: 0.0, expression: None, raw: false, variance: false }], attributes: [("artist", "crust samples")] }, AovProduct { prim_path: "/Render/Products/data", name: "renders/aovs_data.exr", vars: [AovVar { prim_path: "/Render/Products/Vars/Z", name: "Z", channel_prefix: None, source: Depth, components: 1, precision: Float, accumulation: Closest, clear: inf, expression: None, raw: false, variance: false }, AovVar { prim_path: "/Render/Products/Vars/distance", name: "distance", channel_prefix: None, source: Distance, components: 1, precision: Float, accumulation: Closest, clear: inf, expression: None, raw: false, variance: false }, AovVar { prim_path: "/Render/Products/Vars/P", name: "P", channel_prefix: None, source: P, components: 3, precision: Float, accumulation: Closest, clear: 0.0, expression: None, raw: false, variance: false }, AovVar { prim_path: "/Render/Products/Vars/Peye", name: "Peye", channel_prefix: None, source: Peye, components: 3, precision: Float, accumulation: Closest, clear: 0.0, expression: None, raw: false, variance: false }, AovVar { prim_path: "/Render/Products/Vars/N", name: "N", channel_prefix: None, source: Normal, components: 3, precision: Half, accumulation: Filtered, clear: 0.0, expression: None, raw: false, variance: false }, AovVar { prim_path: "/Render/Products/Vars/Neye", name: "Neye", channel_prefix: None, source: Neye, components: 3, precision: Float, accumulation: Filtered, clear: 0.0, expression: None, raw: false, variance: false }, AovVar { prim_path: "/Render/Products/Vars/st", name: "st", channel_prefix: None, source: St, components: 2, precision: Float, accumulation: Filtered, clear: 0.0, expression: None, raw: false, variance: false }, AovVar { prim_path: "/Render/Products/Vars/alpha", name: "alpha", channel_prefix: None, source: Alpha, components: 1, precision: Float, accumulation: Filtered, clear: 0.0, expression: None, raw: false, variance: false }], attributes: [] }], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 24.0, aperture: [20.955, 15.2908], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 10.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/edits.usda", "$ROOT/samples/aovs.usda"], invisible_overrides: Some(0) } +layer: $ROOT/samples/aovs.usda +layer: $DIR/edits.usda +warning: Warning { code: AovUnknownSource, kind: Skipped, count: 1, prims: ["/Render/Products/Vars/diffuse_direct"], message: "/Render/Products/Vars/diffuse_direct: unknown raw source \"diffuse_direct\"; no channel written (crust's AOV names are listed in the user documentation, usd/aovs)" } +lights: 2 +light 0: dome name Some("/World/Sky") lpe None pmf 0.5 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 1: area name Some("/World/KeyLight") lpe None pmf 0.5 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 3 geometries, PrimitiveBreakdown { triangles: 4, spheres: 1, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 4, spheres: 1, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +geom 0: material #0 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:e8a5ea9ee1d32838 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=2:e8a5ea9ee1d32838 +geom 1: material #1 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:cadf82024fa5b745 camera=2:cadf82024fa5b745 shadow=2:cadf82024fa5b745 indirect=2:cadf82024fa5b745 +geom 2: material #1 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:ee76fd7ed45c4a85 camera=1:ee76fd7ed45c4a85 shadow=1:ee76fd7ed45c4a85 indirect=1:ee76fd7ed45c4a85 +provenance light /World/KeyLight: LightOrigin { index: 1, geoms: 0..1 } +provenance light /World/Sky: LightOrigin { index: 0, geoms: 0..0 } +provenance geometry 0..1: /World/KeyLight +provenance geometry 1..2: /World/Floor +provenance geometry 2..3: /World/Ball +provenance mesh: MeshOrigin { geom_id: 1, slot: 0, baked: true, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 12300483381263303556, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [2] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: true, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/World/Cam"), cameras: ["/World/Cam"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/World/Cam"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/edits_usda-a15a160797d16740-1.image b/crates/crust-core/tests/data/import_baselines/edits_usda-a15a160797d16740-1.image new file mode 100644 index 000000000..e5718bb57 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/edits_usda-a15a160797d16740-1.image @@ -0,0 +1 @@ +32x18 16spp clamp-off ddf40d7a272e6781 diff --git a/crates/crust-core/tests/data/import_baselines/edits_usda-a15f50a6d270c4d6-1.digest b/crates/crust-core/tests/data/import_baselines/edits_usda-a15f50a6d270c4d6-1.digest new file mode 100644 index 000000000..5c6ed5bf9 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/edits_usda-a15f50a6d270c4d6-1.digest @@ -0,0 +1,33 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/World/Cam2") +camera: Camera { origin: Vec3A(1.5, 1.0, 5.0), lower_left_corner: Vec3A(-4.029999, -2.2177181, -3.6355724), horizontal: Vec3A(6.358542, -1.2206286e-8, -1.5853626), vertical: Vec3A(-0.11047701, 4.344867, -0.4430991), u: Vec3A(0.9702957, -1.8626451e-9, -0.2419219), v: Vec3A(-0.025287723, 0.99452186, -0.101423524), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: Some("/Render/settings") +settings: RenderSettings { samples_per_pixel: 128, max_depth: 2, width: 48, height: 32, region: PixelRect { x0: 0, y0: 0, x1: 48, y1: 32 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [AovProduct { prim_path: "/Render/beauty", name: "beauty.exr", vars: [AovVar { prim_path: "/Render/C", name: "C", channel_prefix: None, source: Color, components: 3, precision: Float, accumulation: Filtered, clear: 0.0, expression: None, raw: false, variance: false }], attributes: [] }], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 35.0, aperture: [20.955, 15.2908], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 10.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/edits.usda", "$DIR/input.usda"], invisible_overrides: Some(0) } +layer: $DIR/edits.usda +layer: $DIR/input.usda +lights: 2 +light 0: distant name Some("/World/Sun") lpe None pmf 0.5 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 1: dome name Some("/World/Sky") lpe None pmf 0.5 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 3 geometries, PrimitiveBreakdown { triangles: 5, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 5, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:0e0a4667da70ad35 camera=2:0e0a4667da70ad35 shadow=2:0e0a4667da70ad35 indirect=2:0e0a4667da70ad35 +geom 1: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:6787da8eacebee45 camera=2:6787da8eacebee45 shadow=2:6787da8eacebee45 indirect=2:6787da8eacebee45 +geom 2: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:8644ef657b9e2de5 camera=1:8644ef657b9e2de5 shadow=1:8644ef657b9e2de5 indirect=1:8644ef657b9e2de5 +provenance light /World/Sky: LightOrigin { index: 1, geoms: 2..2 } +provenance light /World/Sun: LightOrigin { index: 0, geoms: 2..2 } +provenance geometry 0..1: /World/Card +provenance geometry 1..2: /World/Floor +provenance geometry 2..3: /World/Cam2/Badge +provenance mesh: MeshOrigin { geom_id: 0, slot: 0, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 1, slot: 1, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 2, slot: 2, baked: true, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 18358658470076285213, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 1: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 800109031887815527, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 2: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 7930610974440722833, n_points: 3, n_indices: 3, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: true }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/World/Cam2"), cameras: ["/World/Cam2", "/World/Cam"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/World/Cam2"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/edits_usda-a15f50a6d270c4d6-1.image b/crates/crust-core/tests/data/import_baselines/edits_usda-a15f50a6d270c4d6-1.image new file mode 100644 index 000000000..d1a3a8119 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/edits_usda-a15f50a6d270c4d6-1.image @@ -0,0 +1 @@ +48x32 16spp clamp-off 5ee39cdf8a8edcc5 diff --git a/crates/crust-core/tests/data/import_baselines/edits_usda-a2d6c26d716466c1-1.digest b/crates/crust-core/tests/data/import_baselines/edits_usda-a2d6c26d716466c1-1.digest new file mode 100644 index 000000000..f86e51ae7 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/edits_usda-a2d6c26d716466c1-1.digest @@ -0,0 +1,29 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/World/Cam") +camera: Camera { origin: Vec3A(0.0, 0.5, 6.0), lower_left_corner: Vec3A(-4.7783756, -2.6855836, -4.0), horizontal: Vec3A(9.556751, 0.0, 0.0), vertical: Vec3A(0.0, 6.371167, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: Some("/Render/settings") +settings: RenderSettings { samples_per_pixel: 128, max_depth: 2, width: 48, height: 32, region: PixelRect { x0: 0, y0: 0, x1: 48, y1: 32 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 24.0, aperture: [20.955, 15.2908], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 10.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/edits.usda", "$DIR/input.usda"], invisible_overrides: Some(0) } +layer: $DIR/edits.usda +layer: $DIR/input.usda +lights: 2 +light 0: distant name Some("/World/Sun") lpe None pmf 0.5 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 1: dome name Some("/World/Sky") lpe None pmf 0.5 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 2 geometries, PrimitiveBreakdown { triangles: 4, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 4, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:0e0a4667da70ad35 camera=2:0e0a4667da70ad35 shadow=2:0e0a4667da70ad35 indirect=2:0e0a4667da70ad35 +geom 1: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:6787da8eacebee45 camera=2:6787da8eacebee45 shadow=2:6787da8eacebee45 indirect=2:6787da8eacebee45 +provenance light /World/Sky: LightOrigin { index: 1, geoms: 2..2 } +provenance light /World/Sun: LightOrigin { index: 0, geoms: 2..2 } +provenance geometry 0..1: /World/Card +provenance geometry 1..2: /World/Floor +provenance mesh: MeshOrigin { geom_id: 0, slot: 0, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 1, slot: 1, baked: true, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 18358658470076285213, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 1: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 800109031887815527, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: true }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/World/Cam"), cameras: ["/World/Cam"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/World/Cam"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/edits_usda-a2d6c26d716466c1-1.image b/crates/crust-core/tests/data/import_baselines/edits_usda-a2d6c26d716466c1-1.image new file mode 100644 index 000000000..aa809d36e --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/edits_usda-a2d6c26d716466c1-1.image @@ -0,0 +1 @@ +48x32 16spp clamp-off 8505746c918f1879 diff --git a/crates/crust-core/tests/data/import_baselines/edits_usda-a693bfb772c311e2-1.digest b/crates/crust-core/tests/data/import_baselines/edits_usda-a693bfb772c311e2-1.digest new file mode 100644 index 000000000..fa09a9079 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/edits_usda-a693bfb772c311e2-1.digest @@ -0,0 +1,21 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/World/Cam") +camera: Camera { origin: Vec3A(0.0, 0.0, 6.0), lower_left_corner: Vec3A(-4.7783756, -3.1855836, -4.0), horizontal: Vec3A(9.556751, 0.0, 0.0), vertical: Vec3A(0.0, 6.371167, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: Some("/Render/settings") +settings: RenderSettings { samples_per_pixel: 128, max_depth: 2, width: 48, height: 32, region: PixelRect { x0: 0, y0: 0, x1: 48, y1: 32 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 2.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 24.0, aperture: [20.955, 15.2908], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 10.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/edits.usda", "$DIR/input.usda"], invisible_overrides: Some(0) } +layer: $DIR/edits.usda +layer: $DIR/input.usda +lights: 1 +light 0: distant name Some("/World/Sun") lpe None pmf 1.0 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 1 geometries, PrimitiveBreakdown { triangles: 0, spheres: 1, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 0, spheres: 1, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:984632b55acb5495 camera=1:984632b55acb5495 shadow=1:984632b55acb5495 indirect=1:984632b55acb5495 +provenance light /World/Sun: LightOrigin { index: 0, geoms: 1..1 } +provenance geometry 0..1: /World/Mover +provenance spheres: [0] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: true }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/World/Cam"), cameras: ["/World/Cam"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/World/Cam"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/edits_usda-a693bfb772c311e2-1.image b/crates/crust-core/tests/data/import_baselines/edits_usda-a693bfb772c311e2-1.image new file mode 100644 index 000000000..79bc428f3 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/edits_usda-a693bfb772c311e2-1.image @@ -0,0 +1 @@ +48x32 16spp clamp-off 0956f9aa6aa6e7f9 diff --git a/crates/crust-core/tests/data/import_baselines/edits_usda-a9ea182c81eccd64-1.digest b/crates/crust-core/tests/data/import_baselines/edits_usda-a9ea182c81eccd64-1.digest new file mode 100644 index 000000000..bb5fe7b38 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/edits_usda-a9ea182c81eccd64-1.digest @@ -0,0 +1,45 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/World/Cam") +camera: Camera { origin: Vec3A(0.3, 0.6, 5.5), lower_left_corner: Vec3A(-2.8181643, -1.2734121, -4.1201806), horizontal: Vec3A(4.168041, 0.0, -0.4380788), vertical: Vec3A(-0.01718934, 2.3516948, -0.16354565), u: Vec3A(0.9945219, 0.0, -0.104528464), v: Vec3A(-0.007291537, 0.9975641, -0.06937434), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: Some("/Render/settings") +settings: RenderSettings { samples_per_pixel: 64, max_depth: 4, width: 48, height: 27, region: PixelRect { x0: 0, y0: 0, x1: 48, y1: 27 }, min_samples_per_pixel: 16, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 50.0, aperture: [20.955, 11.787188], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 10.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/edits.usda", "$DIR/input.usda", "$ROOT/samples/subdivision_adaptive.usda"], invisible_overrides: Some(0) } +layer: $ROOT/samples/subdivision_adaptive.usda +layer: $DIR/edits.usda +layer: $DIR/input.usda +lights: 2 +light 0: distant name Some("/World/Sun") lpe None pmf 0.5 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 1: dome name Some("/World/Sky") lpe None pmf 0.5 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 6 geometries, PrimitiveBreakdown { triangles: 96, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 4 } top level, PrimitiveBreakdown { triangles: 108, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 4 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:4d8d0a8634ac849c camera=2:4d8d0a8634ac849c shadow=2:4d8d0a8634ac849c indirect=2:4d8d0a8634ac849c +geom 1: material #1 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=12:9b9b8ee224ae5549 camera=12:9b9b8ee224ae5549 shadow=12:9b9b8ee224ae5549 indirect=12:9b9b8ee224ae5549 +geom 2: material #1 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=12:56e3227c4c4f5a8d camera=12:56e3227c4c4f5a8d shadow=12:56e3227c4c4f5a8d indirect=12:56e3227c4c4f5a8d +geom 3: material #1 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=12:14e930a5d0b26e15 camera=12:14e930a5d0b26e15 shadow=12:14e930a5d0b26e15 indirect=12:14e930a5d0b26e15 +geom 4: material #1 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=12:1d38133bdf0eede5 camera=12:1d38133bdf0eede5 shadow=12:1d38133bdf0eede5 indirect=12:1d38133bdf0eede5 +geom 5: material #1 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=94:49cde4140ed25082 camera=94:49cde4140ed25082 shadow=94:49cde4140ed25082 indirect=94:49cde4140ed25082 +provenance material /World/Materials/clay: MaterialOrigin { slots: [1, 2, 3, 4, 5], displaced: false } +provenance arc source: /World/Cage +provenance light /World/Sky: LightOrigin { index: 1, geoms: 6..6 } +provenance light /World/Sun: LightOrigin { index: 0, geoms: 0..0 } +provenance geometry 0..1: /World/Floor +provenance geometry 1..2: /World/Cube5 +provenance geometry 2..3: /World/Cube4 +provenance geometry 3..4: /World/Cube3 +provenance geometry 4..5: /World/Cube2 +provenance geometry 5..6: /World/Cube1 +provenance mesh: MeshOrigin { geom_id: 0, slot: 0, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 1, slot: 1, baked: false, moving: false } +provenance mesh: MeshOrigin { geom_id: 2, slot: 1, baked: false, moving: false } +provenance mesh: MeshOrigin { geom_id: 3, slot: 1, baked: false, moving: false } +provenance mesh: MeshOrigin { geom_id: 4, slot: 1, baked: false, moving: false } +provenance mesh: MeshOrigin { geom_id: 5, slot: 2, baked: true, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 2079923942787246473, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 1: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 16825702510234920227, n_points: 8, n_indices: 36, n_uvs: None, smooth: true, material: 1 }), placements: 4, shared: false, displaced: false } +provenance mesh slot 2: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 1096032668800489466, n_points: 49, n_indices: 282, n_uvs: None, smooth: true, material: 1 }), placements: 1, shared: false, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: true }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: Some(ScreenKey([1050253722, 1058642330, 1085276160, 1122308081, 1050253722, 1058642330, 1085276160, 3212974206, 3161423387, 3184767365, 1064894717, 3161423387, 3198154212, 3148075556, 3212885404, 3175273688, 3164629877, 1065174400, 3191785816, 3184889222, 3180256379, 3212704312, 1090519040, 3])), domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/World/Cam"), cameras: ["/World/Dicer", "/World/Cam"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/World/Cam"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/edits_usda-a9ea182c81eccd64-1.image b/crates/crust-core/tests/data/import_baselines/edits_usda-a9ea182c81eccd64-1.image new file mode 100644 index 000000000..b7e0e18ed --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/edits_usda-a9ea182c81eccd64-1.image @@ -0,0 +1 @@ +48x27 16spp clamp-off 4ecd351dabb22c67 diff --git a/crates/crust-core/tests/data/import_baselines/edits_usda-aafb5513a53fa62e-1.digest b/crates/crust-core/tests/data/import_baselines/edits_usda-aafb5513a53fa62e-1.digest new file mode 100644 index 000000000..0775026cc --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/edits_usda-aafb5513a53fa62e-1.digest @@ -0,0 +1,46 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/World/Cam") +camera: Camera { origin: Vec3A(0.0, 0.5, 0.0), lower_left_corner: Vec3A(-2.0955, -0.6787187, -10.0), horizontal: Vec3A(4.191, 0.0, 0.0), vertical: Vec3A(0.0, 2.3574374, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: Some("/Render/settings") +settings: RenderSettings { samples_per_pixel: 64, max_depth: 4, width: 48, height: 27, region: PixelRect { x0: 0, y0: 0, x1: 48, y1: 27 }, min_samples_per_pixel: 16, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 50.0, aperture: [20.955, 11.787188], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 10.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/edits.usda", "$DIR/input.usda", "$ROOT/samples/subdivision_adaptive.usda"], invisible_overrides: Some(0) } +layer: $ROOT/samples/subdivision_adaptive.usda +layer: $DIR/edits.usda +layer: $DIR/input.usda +lights: 2 +light 0: distant name Some("/World/Sun") lpe None pmf 0.5 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 1: dome name Some("/World/Sky") lpe None pmf 0.5 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 6 geometries, PrimitiveBreakdown { triangles: 290, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 3 } top level, PrimitiveBreakdown { triangles: 302, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 3 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:4d8d0a8634ac849c camera=2:4d8d0a8634ac849c shadow=2:4d8d0a8634ac849c indirect=2:4d8d0a8634ac849c +geom 1: material #1 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=12:9b9b8ee224ae5549 camera=12:9b9b8ee224ae5549 shadow=12:9b9b8ee224ae5549 indirect=12:9b9b8ee224ae5549 +geom 2: material #1 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=12:56e3227c4c4f5a8d camera=12:56e3227c4c4f5a8d shadow=12:56e3227c4c4f5a8d indirect=12:56e3227c4c4f5a8d +geom 3: material #1 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=12:14e930a5d0b26e15 camera=12:14e930a5d0b26e15 shadow=12:14e930a5d0b26e15 indirect=12:14e930a5d0b26e15 +geom 4: material #1 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=48:85fd1a1e8638f8d5 camera=48:85fd1a1e8638f8d5 shadow=48:85fd1a1e8638f8d5 indirect=48:85fd1a1e8638f8d5 +geom 5: material #1 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=240:ceb54a03c39454ff camera=240:ceb54a03c39454ff shadow=240:ceb54a03c39454ff indirect=240:ceb54a03c39454ff +provenance material /World/Materials/clay: MaterialOrigin { slots: [1, 2, 3, 4, 5], displaced: false } +provenance arc source: /World/Cage +provenance light /World/Sky: LightOrigin { index: 1, geoms: 6..6 } +provenance light /World/Sun: LightOrigin { index: 0, geoms: 0..0 } +provenance geometry 0..1: /World/Floor +provenance geometry 1..2: /World/Cube5 +provenance geometry 2..3: /World/Cube4 +provenance geometry 3..4: /World/Cube3 +provenance geometry 4..5: /World/Cube2 +provenance geometry 5..6: /World/Cube1 +provenance mesh: MeshOrigin { geom_id: 0, slot: 0, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 1, slot: 1, baked: false, moving: false } +provenance mesh: MeshOrigin { geom_id: 2, slot: 1, baked: false, moving: false } +provenance mesh: MeshOrigin { geom_id: 3, slot: 1, baked: false, moving: false } +provenance mesh: MeshOrigin { geom_id: 4, slot: 2, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 5, slot: 3, baked: true, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 2079923942787246473, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 1: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 16825702510234920227, n_points: 8, n_indices: 36, n_uvs: None, smooth: true, material: 1 }), placements: 3, shared: false, displaced: false } +provenance mesh slot 2: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 9125125757038733368, n_points: 26, n_indices: 144, n_uvs: None, smooth: true, material: 1 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 3: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 13090063996844779502, n_points: 122, n_indices: 720, n_uvs: None, smooth: true, material: 1 }), placements: 1, shared: false, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: true }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: Some(ScreenKey([0, 1056964608, 0, 1122308081, 0, 1056964608, 0, 3212836864, 0, 3193345094, 1065353216, 0, 3193345094, 0, 3212836864, 3186714319, 0, 1065353216, 3186714319, 0, 0, 3212836864, 1090519040, 3])), domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/World/Cam"), cameras: ["/World/Cam2", "/World/Cam"], dicing: Some("/World/Cam"), on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/World/Cam"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/edits_usda-aafb5513a53fa62e-1.image b/crates/crust-core/tests/data/import_baselines/edits_usda-aafb5513a53fa62e-1.image new file mode 100644 index 000000000..35947da35 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/edits_usda-aafb5513a53fa62e-1.image @@ -0,0 +1 @@ +48x27 16spp clamp-off cc1ed1cd405cee06 diff --git a/crates/crust-core/tests/data/import_baselines/edits_usda-b0da370b544b77b5-1.digest b/crates/crust-core/tests/data/import_baselines/edits_usda-b0da370b544b77b5-1.digest new file mode 100644 index 000000000..937b6e9ed --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/edits_usda-b0da370b544b77b5-1.digest @@ -0,0 +1,46 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/World/Cam") +camera: Camera { origin: Vec3A(0.0, 0.5, 0.0), lower_left_corner: Vec3A(-2.0955, -0.6787187, -10.0), horizontal: Vec3A(4.191, 0.0, 0.0), vertical: Vec3A(0.0, 2.3574374, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: Some("/Render/settings") +settings: RenderSettings { samples_per_pixel: 64, max_depth: 4, width: 48, height: 27, region: PixelRect { x0: 0, y0: 0, x1: 48, y1: 27 }, min_samples_per_pixel: 16, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 50.0, aperture: [20.955, 11.787188], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 10.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/edits.usda", "$DIR/input.usda", "$ROOT/samples/subdivision_adaptive.usda"], invisible_overrides: Some(0) } +layer: $ROOT/samples/subdivision_adaptive.usda +layer: $DIR/edits.usda +layer: $DIR/input.usda +lights: 2 +light 0: distant name Some("/World/Sun") lpe None pmf 0.5 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 1: dome name Some("/World/Sky") lpe None pmf 0.5 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 6 geometries, PrimitiveBreakdown { triangles: 290, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 3 } top level, PrimitiveBreakdown { triangles: 302, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 3 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:4d8d0a8634ac849c camera=2:4d8d0a8634ac849c shadow=2:4d8d0a8634ac849c indirect=2:4d8d0a8634ac849c +geom 1: material #1 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=12:9b9b8ee224ae5549 camera=12:9b9b8ee224ae5549 shadow=12:9b9b8ee224ae5549 indirect=12:9b9b8ee224ae5549 +geom 2: material #1 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=12:56e3227c4c4f5a8d camera=12:56e3227c4c4f5a8d shadow=12:56e3227c4c4f5a8d indirect=12:56e3227c4c4f5a8d +geom 3: material #1 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=12:14e930a5d0b26e15 camera=12:14e930a5d0b26e15 shadow=12:14e930a5d0b26e15 indirect=12:14e930a5d0b26e15 +geom 4: material #1 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=48:85fd1a1e8638f8d5 camera=48:85fd1a1e8638f8d5 shadow=48:85fd1a1e8638f8d5 indirect=48:85fd1a1e8638f8d5 +geom 5: material #1 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=240:ceb54a03c39454ff camera=240:ceb54a03c39454ff shadow=240:ceb54a03c39454ff indirect=240:ceb54a03c39454ff +provenance material /World/Materials/clay: MaterialOrigin { slots: [1, 2, 3, 4, 5], displaced: false } +provenance arc source: /World/Cage +provenance light /World/Sky: LightOrigin { index: 1, geoms: 6..6 } +provenance light /World/Sun: LightOrigin { index: 0, geoms: 0..0 } +provenance geometry 0..1: /World/Floor +provenance geometry 1..2: /World/Cube5 +provenance geometry 2..3: /World/Cube4 +provenance geometry 3..4: /World/Cube3 +provenance geometry 4..5: /World/Cube2 +provenance geometry 5..6: /World/Cube1 +provenance mesh: MeshOrigin { geom_id: 0, slot: 0, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 1, slot: 1, baked: false, moving: false } +provenance mesh: MeshOrigin { geom_id: 2, slot: 1, baked: false, moving: false } +provenance mesh: MeshOrigin { geom_id: 3, slot: 1, baked: false, moving: false } +provenance mesh: MeshOrigin { geom_id: 4, slot: 2, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 5, slot: 3, baked: true, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 2079923942787246473, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 1: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 16825702510234920227, n_points: 8, n_indices: 36, n_uvs: None, smooth: true, material: 1 }), placements: 3, shared: false, displaced: false } +provenance mesh slot 2: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 9125125757038733368, n_points: 26, n_indices: 144, n_uvs: None, smooth: true, material: 1 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 3: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 13090063996844779502, n_points: 122, n_indices: 720, n_uvs: None, smooth: true, material: 1 }), placements: 1, shared: false, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: true }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: Some(ScreenKey([0, 1056964608, 0, 1122308081, 0, 1056964608, 0, 3212836864, 0, 3193345094, 1065353216, 0, 3193345094, 0, 3212836864, 3186714319, 0, 1065353216, 3186714319, 0, 0, 3212836864, 1090519040, 3])), domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/World/Cam"), cameras: ["/World/Dicer", "/World/Cam"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/World/Cam"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/edits_usda-b0da370b544b77b5-1.image b/crates/crust-core/tests/data/import_baselines/edits_usda-b0da370b544b77b5-1.image new file mode 100644 index 000000000..35947da35 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/edits_usda-b0da370b544b77b5-1.image @@ -0,0 +1 @@ +48x27 16spp clamp-off cc1ed1cd405cee06 diff --git a/crates/crust-core/tests/data/import_baselines/edits_usda-b14405d5563d3059-1.digest b/crates/crust-core/tests/data/import_baselines/edits_usda-b14405d5563d3059-1.digest new file mode 100644 index 000000000..b0541ef1b --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/edits_usda-b14405d5563d3059-1.digest @@ -0,0 +1,30 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/World/Cam") +camera: Camera { origin: Vec3A(0.3, 0.6, 5.5), lower_left_corner: Vec3A(-4.4783754, -2.5855837, -4.5), horizontal: Vec3A(9.556751, 0.0, 0.0), vertical: Vec3A(0.0, 6.371167, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: Some("/Render/settings") +settings: RenderSettings { samples_per_pixel: 128, max_depth: 2, width: 48, height: 32, region: PixelRect { x0: 0, y0: 0, x1: 48, y1: 32 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 24.0, aperture: [20.955, 15.2908], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 10.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/edits.usda", "$DIR/input.usda"], invisible_overrides: Some(0) } +layer: $DIR/edits.usda +layer: $DIR/input.usda +lights: 2 +light 0: distant name Some("/World/Sun") lpe None pmf 0.5 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 1: dome name Some("/World/Sky") lpe None pmf 0.5 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 1 +volume 0: sigma_s Vec3A(0.4, 0.4, 0.4) sigma_a Vec3A(0.05, 0.05, 0.05) g 0.0 emission Vec3A(0.0, 0.0, 0.0) mask RayMask(4294967295) class 65535 homogeneous true +world: 2 geometries, PrimitiveBreakdown { triangles: 4, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 4, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:0e0a4667da70ad35 camera=2:0e0a4667da70ad35 shadow=2:0e0a4667da70ad35 indirect=2:0e0a4667da70ad35 +geom 1: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:6787da8eacebee45 camera=2:6787da8eacebee45 shadow=2:6787da8eacebee45 indirect=2:6787da8eacebee45 +provenance light /World/Sky: LightOrigin { index: 1, geoms: 2..2 } +provenance light /World/Sun: LightOrigin { index: 0, geoms: 2..2 } +provenance geometry 0..1: /World/Card +provenance geometry 1..2: /World/Floor +provenance mesh: MeshOrigin { geom_id: 0, slot: 0, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 1, slot: 1, baked: true, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 18358658470076285213, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 1: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 800109031887815527, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [] +provenance volumes: ["/World/Cam/Fog"] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: true }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/World/Cam"), cameras: ["/World/Cam"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/World/Cam"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/edits_usda-b14405d5563d3059-1.image b/crates/crust-core/tests/data/import_baselines/edits_usda-b14405d5563d3059-1.image new file mode 100644 index 000000000..535b69736 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/edits_usda-b14405d5563d3059-1.image @@ -0,0 +1 @@ +48x32 16spp clamp-off 620af06ddc2a7be3 diff --git a/crates/crust-core/tests/data/import_baselines/edits_usda-b271371e2517722b-1.digest b/crates/crust-core/tests/data/import_baselines/edits_usda-b271371e2517722b-1.digest new file mode 100644 index 000000000..045d2222a --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/edits_usda-b271371e2517722b-1.digest @@ -0,0 +1,30 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/World/Cam") +camera: Camera { origin: Vec3A(0.0, 1.2, 6.0), lower_left_corner: Vec3A(-5.6632595, -1.9855835, -4.0), horizontal: Vec3A(11.326519, 0.0, 0.0), vertical: Vec3A(0.0, 6.371167, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: Some("/Render/settings") +settings: RenderSettings { samples_per_pixel: 65536, max_depth: 4, width: 32, height: 18, region: PixelRect { x0: 0, y0: 0, x1: 32, y1: 18 }, min_samples_per_pixel: 8, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [AovProduct { prim_path: "/Render/Products/beauty", name: "renders/aovs_beauty.exr", vars: [AovVar { prim_path: "/Render/Products/Vars/C", name: "C", channel_prefix: None, source: Color, components: 4, precision: Float, accumulation: Filtered, clear: 0.0, expression: None, raw: false, variance: false }, AovVar { prim_path: "/Render/Products/Vars/sampleCount", name: "sampleCount", channel_prefix: None, source: SampleCount, components: 1, precision: Float, accumulation: Filtered, clear: 0.0, expression: None, raw: false, variance: false }, AovVar { prim_path: "/Render/Products/Vars/variance", name: "variance", channel_prefix: None, source: Variance, components: 1, precision: Float, accumulation: Filtered, clear: 0.0, expression: None, raw: false, variance: false }], attributes: [("artist", "crust samples")] }, AovProduct { prim_path: "/Render/Products/data", name: "renders/aovs_data.exr", vars: [AovVar { prim_path: "/Render/Products/Vars/Z", name: "Z", channel_prefix: None, source: Depth, components: 1, precision: Float, accumulation: Closest, clear: inf, expression: None, raw: false, variance: false }, AovVar { prim_path: "/Render/Products/Vars/distance", name: "distance", channel_prefix: None, source: Distance, components: 1, precision: Float, accumulation: Closest, clear: inf, expression: None, raw: false, variance: false }, AovVar { prim_path: "/Render/Products/Vars/P", name: "P", channel_prefix: None, source: P, components: 3, precision: Float, accumulation: Closest, clear: 0.0, expression: None, raw: false, variance: false }, AovVar { prim_path: "/Render/Products/Vars/Peye", name: "Peye", channel_prefix: None, source: Peye, components: 3, precision: Float, accumulation: Closest, clear: 0.0, expression: None, raw: false, variance: false }, AovVar { prim_path: "/Render/Products/Vars/N", name: "N", channel_prefix: None, source: Normal, components: 3, precision: Half, accumulation: Filtered, clear: 0.0, expression: None, raw: false, variance: false }, AovVar { prim_path: "/Render/Products/Vars/Neye", name: "Neye", channel_prefix: None, source: Neye, components: 3, precision: Float, accumulation: Filtered, clear: 0.0, expression: None, raw: false, variance: false }, AovVar { prim_path: "/Render/Products/Vars/st", name: "st", channel_prefix: None, source: St, components: 2, precision: Float, accumulation: Filtered, clear: 0.0, expression: None, raw: false, variance: false }, AovVar { prim_path: "/Render/Products/Vars/alpha", name: "alpha", channel_prefix: None, source: Alpha, components: 1, precision: Float, accumulation: Filtered, clear: 0.0, expression: None, raw: false, variance: false }], attributes: [] }], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 24.0, aperture: [20.955, 15.2908], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 10.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/edits.usda", "$ROOT/samples/aovs.usda"], invisible_overrides: Some(0) } +layer: $ROOT/samples/aovs.usda +layer: $DIR/edits.usda +warning: Warning { code: AovUnknownSource, kind: Skipped, count: 1, prims: ["/Render/Products/Vars/diffuse_direct"], message: "/Render/Products/Vars/diffuse_direct: unknown raw source \"diffuse_direct\"; no channel written (crust's AOV names are listed in the user documentation, usd/aovs)" } +lights: 2 +light 0: dome name Some("/World/Sky") lpe None pmf 0.5 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 1: area name Some("/World/KeyLight") lpe None pmf 0.5 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 3 geometries, PrimitiveBreakdown { triangles: 4, spheres: 1, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 4, spheres: 1, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +geom 0: material #0 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:e8a5ea9ee1d32838 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=2:e8a5ea9ee1d32838 +geom 1: material #1 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:cadf82024fa5b745 camera=2:cadf82024fa5b745 shadow=2:cadf82024fa5b745 indirect=2:cadf82024fa5b745 +geom 2: material #1 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:ee76fd7ed45c4a85 camera=1:ee76fd7ed45c4a85 shadow=1:ee76fd7ed45c4a85 indirect=1:ee76fd7ed45c4a85 +provenance light /World/KeyLight: LightOrigin { index: 1, geoms: 0..1 } +provenance light /World/Sky: LightOrigin { index: 0, geoms: 0..0 } +provenance geometry 0..1: /World/KeyLight +provenance geometry 1..2: /World/Floor +provenance geometry 2..3: /World/Ball +provenance mesh: MeshOrigin { geom_id: 1, slot: 0, baked: true, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 12300483381263303556, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [2] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: true }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/World/Cam"), cameras: ["/World/Cam"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/World/Cam"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/edits_usda-b271371e2517722b-1.image b/crates/crust-core/tests/data/import_baselines/edits_usda-b271371e2517722b-1.image new file mode 100644 index 000000000..e5718bb57 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/edits_usda-b271371e2517722b-1.image @@ -0,0 +1 @@ +32x18 16spp clamp-off ddf40d7a272e6781 diff --git a/crates/crust-core/tests/data/import_baselines/edits_usda-b80eb10c2ba34178-1.digest b/crates/crust-core/tests/data/import_baselines/edits_usda-b80eb10c2ba34178-1.digest new file mode 100644 index 000000000..979d67211 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/edits_usda-b80eb10c2ba34178-1.digest @@ -0,0 +1,33 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/World/Cam") +camera: Camera { origin: Vec3A(0.3, 0.6, 5.5), lower_left_corner: Vec3A(-5.4717097, -3.2753882, -3.7005186), horizontal: Vec3A(9.504398, 0.0, -0.9989525), vertical: Vec3A(-0.0464556, 6.3556476, -0.4419955), u: Vec3A(0.9945219, 0.0, -0.104528464), v: Vec3A(-0.007291537, 0.9975641, -0.06937434), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: Some("/Render/settings") +settings: RenderSettings { samples_per_pixel: 128, max_depth: 2, width: 48, height: 32, region: PixelRect { x0: 0, y0: 0, x1: 48, y1: 32 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 24.0, aperture: [20.955, 15.2908], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 10.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/edits.usda", "$DIR/input.usda"], invisible_overrides: Some(0) } +layer: $DIR/edits.usda +layer: $DIR/input.usda +lights: 2 +light 0: distant name Some("/World/Sun") lpe None pmf 0.5 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 1: dome name Some("/World/Sky") lpe None pmf 0.5 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 3 geometries, PrimitiveBreakdown { triangles: 5, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 5, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:0e0a4667da70ad35 camera=2:0e0a4667da70ad35 shadow=2:0e0a4667da70ad35 indirect=2:0e0a4667da70ad35 +geom 1: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:6787da8eacebee45 camera=2:6787da8eacebee45 shadow=2:6787da8eacebee45 indirect=2:6787da8eacebee45 +geom 2: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:c1d70d7332d9c611 camera=1:c1d70d7332d9c611 shadow=1:c1d70d7332d9c611 indirect=1:c1d70d7332d9c611 +provenance light /World/Sky: LightOrigin { index: 1, geoms: 2..2 } +provenance light /World/Sun: LightOrigin { index: 0, geoms: 2..2 } +provenance geometry 0..1: /World/Card +provenance geometry 1..2: /World/Floor +provenance geometry 2..3: /World/Cam/Badge +provenance mesh: MeshOrigin { geom_id: 0, slot: 0, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 1, slot: 1, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 2, slot: 2, baked: true, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 18358658470076285213, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 1: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 800109031887815527, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 2: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 7930610974440722833, n_points: 3, n_indices: 3, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: true }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/World/Cam"), cameras: ["/World/Cam"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/World/Cam"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/edits_usda-b80eb10c2ba34178-1.image b/crates/crust-core/tests/data/import_baselines/edits_usda-b80eb10c2ba34178-1.image new file mode 100644 index 000000000..735722fce --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/edits_usda-b80eb10c2ba34178-1.image @@ -0,0 +1 @@ +48x32 16spp clamp-off 0e015610d3eeef0a diff --git a/crates/crust-core/tests/data/import_baselines/edits_usda-b8d0f20bfaa82329-1.digest b/crates/crust-core/tests/data/import_baselines/edits_usda-b8d0f20bfaa82329-1.digest new file mode 100644 index 000000000..73979f397 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/edits_usda-b8d0f20bfaa82329-1.digest @@ -0,0 +1,23 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/World/Cam") +camera: Camera { origin: Vec3A(0.0, 0.0, 6.0), lower_left_corner: Vec3A(-4.7783756, -3.1855836, -4.0), horizontal: Vec3A(9.556751, 0.0, 0.0), vertical: Vec3A(0.0, 6.371167, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: Some("/Render/settings") +settings: RenderSettings { samples_per_pixel: 128, max_depth: 2, width: 48, height: 32, region: PixelRect { x0: 0, y0: 0, x1: 48, y1: 32 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 24.0, aperture: [20.955, 15.2908], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 10.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/edits.usda", "$DIR/input.usda"], invisible_overrides: Some(0) } +layer: $DIR/edits.usda +layer: $DIR/input.usda +lights: 1 +light 0: distant name Some("/World/Sun") lpe None pmf 1.0 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 1 geometries, PrimitiveBreakdown { triangles: 64, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 64, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=64:5f84dcb3c52b7405 camera=64:5f84dcb3c52b7405 shadow=64:5f84dcb3c52b7405 indirect=64:5f84dcb3c52b7405 +provenance light /World/Sun: LightOrigin { index: 0, geoms: 1..1 } +provenance geometry 0..1: /World/Post +provenance mesh: MeshOrigin { geom_id: 0, slot: 0, baked: true, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 13212365895451826409, n_points: 66, n_indices: 160, n_uvs: None, smooth: true, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: true }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/World/Cam"), cameras: ["/World/Dicer", "/World/Cam"], dicing: Some("/World/Dicer"), on_screen_shapes: Some(ScreenKey([0, 1056964608, 1086324736, 1112074166, 0, 1056964608, 1086324736, 3212836864, 0, 3203704606, 1065353216, 0, 3203704606, 0, 3212836864, 3198360084, 0, 1065353216, 3198360084, 0, 0, 3212836864])), unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/World/Cam"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/edits_usda-b8d0f20bfaa82329-1.image b/crates/crust-core/tests/data/import_baselines/edits_usda-b8d0f20bfaa82329-1.image new file mode 100644 index 000000000..6b6b0c40a --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/edits_usda-b8d0f20bfaa82329-1.image @@ -0,0 +1 @@ +48x32 16spp clamp-off 5e901867aef8c50b diff --git a/crates/crust-core/tests/data/import_baselines/edits_usda-c0b43128dd170a60-1.digest b/crates/crust-core/tests/data/import_baselines/edits_usda-c0b43128dd170a60-1.digest new file mode 100644 index 000000000..96531cef6 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/edits_usda-c0b43128dd170a60-1.digest @@ -0,0 +1,22 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/World/Cam") +camera: Camera { origin: Vec3A(0.0, 0.0, 6.0), lower_left_corner: Vec3A(-4.247444, -2.5484667, -4.0), horizontal: Vec3A(8.494888, 0.0, 0.0), vertical: Vec3A(0.0, 5.0969334, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: Some("/Render/settings") +settings: RenderSettings { samples_per_pixel: 128, max_depth: 3, width: 40, height: 24, region: PixelRect { x0: 0, y0: 0, x1: 40, y1: 24 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 30.0, aperture: [20.955, 15.2908], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 10.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/edits.usda", "$DIR/input.usda"], invisible_overrides: Some(0) } +layer: $DIR/edits.usda +layer: $DIR/input.usda +lights: 1 +light 0: dome name Some("/World/Sky") lpe None pmf 1.0 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 1 geometries, PrimitiveBreakdown { triangles: 0, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 1 } top level, PrimitiveBreakdown { triangles: 0, spheres: 0, disks: 0, cylinders: 0, curve_segments: 3, cubic_curve_spans: 0, instances: 1 } unique, motion false +geom 0: material #0 Signature { kind: "MaterialX", cutout: false, straight: false, boundary: false, emits: false, uv: true, uv_primvar: None, face_texture: None, curve: Some((false, false, [])), primvars: None } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves true scale 1.0 motion [] pieces all=3:a4253f27618d90a9 camera=3:a4253f27618d90a9 shadow=3:a4253f27618d90a9 indirect=3:a4253f27618d90a9 +provenance material /World/Looks/Hair: MaterialOrigin { slots: [0], displaced: false } +provenance light /World/Sky: LightOrigin { index: 0, geoms: 1..1 } +provenance geometry 0..1: /World/Groom +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: true }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/World/Cam"), cameras: ["/World/Cam"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/World/Cam"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/edits_usda-c0b43128dd170a60-1.image b/crates/crust-core/tests/data/import_baselines/edits_usda-c0b43128dd170a60-1.image new file mode 100644 index 000000000..40e1e94d3 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/edits_usda-c0b43128dd170a60-1.image @@ -0,0 +1 @@ +40x24 16spp clamp-off 554d014c55de3865 diff --git a/crates/crust-core/tests/data/import_baselines/edits_usda-c1012e35073052d4-1.digest b/crates/crust-core/tests/data/import_baselines/edits_usda-c1012e35073052d4-1.digest new file mode 100644 index 000000000..3d2d26e5f --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/edits_usda-c1012e35073052d4-1.digest @@ -0,0 +1,23 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/World/Cam") +camera: Camera { origin: Vec3A(0.0, 0.0, 6.0), lower_left_corner: Vec3A(-4.7783756, -3.1855836, -4.0), horizontal: Vec3A(9.556751, 0.0, 0.0), vertical: Vec3A(0.0, 6.371167, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: Some("/Render/settings") +settings: RenderSettings { samples_per_pixel: 128, max_depth: 2, width: 48, height: 32, region: PixelRect { x0: 0, y0: 0, x1: 48, y1: 32 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 24.0, aperture: [20.955, 15.2908], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 10.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/edits.usda", "$DIR/input.usda"], invisible_overrides: Some(0) } +layer: $DIR/edits.usda +layer: $DIR/input.usda +lights: 1 +light 0: distant name Some("/World/Sun") lpe None pmf 1.0 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 1 geometries, PrimitiveBreakdown { triangles: 64, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 64, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=64:5f84dcb3c52b7405 camera=64:5f84dcb3c52b7405 shadow=64:5f84dcb3c52b7405 indirect=64:5f84dcb3c52b7405 +provenance light /World/Sun: LightOrigin { index: 0, geoms: 1..1 } +provenance geometry 0..1: /World/Post +provenance mesh: MeshOrigin { geom_id: 0, slot: 0, baked: true, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 13212365895451826409, n_points: 66, n_indices: 160, n_uvs: None, smooth: true, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: true }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/World/Cam"), cameras: ["/World/Cam"], dicing: None, on_screen_shapes: Some(ScreenKey([0, 0, 1086324736, 1112074166, 0, 0, 1086324736, 3212836864, 0, 3203704606, 1065353216, 0, 3203704606, 0, 3212836864, 3198360084, 0, 1065353216, 3198360084, 0, 0, 3212836864])), unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/World/Cam"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/edits_usda-c1012e35073052d4-1.image b/crates/crust-core/tests/data/import_baselines/edits_usda-c1012e35073052d4-1.image new file mode 100644 index 000000000..6b6b0c40a --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/edits_usda-c1012e35073052d4-1.image @@ -0,0 +1 @@ +48x32 16spp clamp-off 5e901867aef8c50b diff --git a/crates/crust-core/tests/data/import_baselines/edits_usda-c5e06d108f13878a-1.digest b/crates/crust-core/tests/data/import_baselines/edits_usda-c5e06d108f13878a-1.digest new file mode 100644 index 000000000..8889914b1 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/edits_usda-c5e06d108f13878a-1.digest @@ -0,0 +1,29 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/World/Cam") +camera: Camera { origin: Vec3A(0.0, 0.5, 6.0), lower_left_corner: Vec3A(-4.7783756, -2.6855836, -4.0), horizontal: Vec3A(9.556751, 0.0, 0.0), vertical: Vec3A(0.0, 6.371167, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: Some("/Render/settings") +settings: RenderSettings { samples_per_pixel: 128, max_depth: 2, width: 48, height: 32, region: PixelRect { x0: 0, y0: 0, x1: 48, y1: 32 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [AovProduct { prim_path: "/Render/beauty", name: "beauty.exr", vars: [AovVar { prim_path: "/Render/C", name: "C", channel_prefix: None, source: Color, components: 3, precision: Float, accumulation: Filtered, clear: 0.0, expression: None, raw: false, variance: false }], attributes: [] }], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 24.0, aperture: [20.955, 15.2908], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 10.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/edits.usda", "$DIR/input.usda"], invisible_overrides: Some(0) } +layer: $DIR/edits.usda +layer: $DIR/input.usda +lights: 2 +light 0: distant name Some("/World/Sun") lpe None pmf 0.5 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 1: dome name Some("/World/Sky") lpe None pmf 0.5 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 2 geometries, PrimitiveBreakdown { triangles: 4, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 4, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:0e0a4667da70ad35 camera=2:0e0a4667da70ad35 shadow=2:0e0a4667da70ad35 indirect=2:0e0a4667da70ad35 +geom 1: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:6787da8eacebee45 camera=2:6787da8eacebee45 shadow=2:6787da8eacebee45 indirect=2:6787da8eacebee45 +provenance light /World/Sky: LightOrigin { index: 1, geoms: 2..2 } +provenance light /World/Sun: LightOrigin { index: 0, geoms: 2..2 } +provenance geometry 0..1: /World/Card +provenance geometry 1..2: /World/Floor +provenance mesh: MeshOrigin { geom_id: 0, slot: 0, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 1, slot: 1, baked: true, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 18358658470076285213, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 1: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 800109031887815527, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: true }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/World/Cam"), cameras: ["/World/Cam2", "/World/Cam"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/World/Cam"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/edits_usda-c5e06d108f13878a-1.image b/crates/crust-core/tests/data/import_baselines/edits_usda-c5e06d108f13878a-1.image new file mode 100644 index 000000000..aa809d36e --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/edits_usda-c5e06d108f13878a-1.image @@ -0,0 +1 @@ +48x32 16spp clamp-off 8505746c918f1879 diff --git a/crates/crust-core/tests/data/import_baselines/edits_usda-c6a1743cb004bfc8-1.digest b/crates/crust-core/tests/data/import_baselines/edits_usda-c6a1743cb004bfc8-1.digest new file mode 100644 index 000000000..45e59524e --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/edits_usda-c6a1743cb004bfc8-1.digest @@ -0,0 +1,29 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/World/Cam") +camera: Camera { origin: Vec3A(0.5, 0.9, 6.0), lower_left_corner: Vec3A(-4.2783756, -2.2855835, -4.0), horizontal: Vec3A(9.556751, 0.0, 0.0), vertical: Vec3A(0.0, 6.371167, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: Some("/Render/settings") +settings: RenderSettings { samples_per_pixel: 128, max_depth: 2, width: 48, height: 32, region: PixelRect { x0: 0, y0: 0, x1: 48, y1: 32 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 24.0, aperture: [20.955, 15.2908], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 10.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/edits.usda", "$DIR/input.usda"], invisible_overrides: Some(0) } +layer: $DIR/edits.usda +layer: $DIR/input.usda +lights: 2 +light 0: distant name Some("/World/Sun") lpe None pmf 0.5 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 1: dome name Some("/World/Sky") lpe None pmf 0.5 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 2 geometries, PrimitiveBreakdown { triangles: 4, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 4, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:e7e3ae7da8a1689e camera=2:e7e3ae7da8a1689e shadow=2:e7e3ae7da8a1689e indirect=2:e7e3ae7da8a1689e +geom 1: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:50023872345aeae9 camera=2:50023872345aeae9 shadow=2:50023872345aeae9 indirect=2:50023872345aeae9 +provenance light /World/Sky: LightOrigin { index: 1, geoms: 2..2 } +provenance light /World/Sun: LightOrigin { index: 0, geoms: 2..2 } +provenance geometry 0..1: /World/Card +provenance geometry 1..2: /World/Floor +provenance mesh: MeshOrigin { geom_id: 0, slot: 0, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 1, slot: 1, baked: true, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 18358658470076285213, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 1: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 800109031887815527, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: true }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/World/Cam"), cameras: ["/World/Cam"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/World/Cam"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/edits_usda-c6a1743cb004bfc8-1.image b/crates/crust-core/tests/data/import_baselines/edits_usda-c6a1743cb004bfc8-1.image new file mode 100644 index 000000000..aa809d36e --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/edits_usda-c6a1743cb004bfc8-1.image @@ -0,0 +1 @@ +48x32 16spp clamp-off 8505746c918f1879 diff --git a/crates/crust-core/tests/data/import_baselines/edits_usda-cfa1cdf26c62d04e-1.digest b/crates/crust-core/tests/data/import_baselines/edits_usda-cfa1cdf26c62d04e-1.digest new file mode 100644 index 000000000..2e2c37ef2 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/edits_usda-cfa1cdf26c62d04e-1.digest @@ -0,0 +1,40 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/scene/camera1") +camera: Camera { origin: Vec3A(0.0074343784, 1.9913422, 4.0133057), lower_left_corner: Vec3A(-4.9925594, -3.0086517, -0.98669434), horizontal: Vec3A(9.999988, 0.0, 0.0), vertical: Vec3A(0.0, 9.999988, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: Some(Vec4(0.0, 0.0, -1.0, 3.9133058)), far: Some(Vec4(0.0, 0.0, 1.0, 9995.986)), planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: Some("/Render/settings") +settings: RenderSettings { samples_per_pixel: 16, max_depth: 32, width: 32, height: 32, region: PixelRect { x0: 0, y0: 0, x1: 32, y1: 32 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 12.700017, aperture: [25.4, 25.4], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 5.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/edits.usda", "$ROOT/samples/cornellbox.usda"], invisible_overrides: Some(0) } +layer: $ROOT/samples/cornellbox.usda +layer: $DIR/edits.usda +warning: Warning { code: MaterialFallbackDefault, kind: Skipped, count: 1, prims: ["/scene/Looks/initialShadingGroup"], message: "Material /scene/Looks/initialShadingGroup has no surface shader — using default grey OpenPBR" } +lights: 1 +light 0: dome name Some("/scene/Sky") lpe None pmf 1.0 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 5 geometries, PrimitiveBreakdown { triangles: 822, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 2 } top level, PrimitiveBreakdown { triangles: 1582, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 2 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.3585339 motion [] pieces all=760:2344ecf63e12c441 camera=760:2344ecf63e12c441 shadow=760:2344ecf63e12c441 indirect=760:2344ecf63e12c441 +geom 1: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.25 motion [] pieces all=800:4a8c9f44d777e131 camera=800:4a8c9f44d777e131 shadow=800:4a8c9f44d777e131 indirect=800:4a8c9f44d777e131 +geom 2: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=12:94a297badef437e1 camera=12:94a297badef437e1 shadow=12:94a297badef437e1 indirect=12:94a297badef437e1 +geom 3: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.2 motion [] pieces all=760:c2b60a75c52c78b9 camera=760:c2b60a75c52c78b9 shadow=760:c2b60a75c52c78b9 indirect=760:c2b60a75c52c78b9 +geom 4: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 4.0 motion [] pieces all=10:88b22fc3345d5b05 camera=10:88b22fc3345d5b05 shadow=10:88b22fc3345d5b05 indirect=10:88b22fc3345d5b05 +provenance material /scene/Looks/initialShadingGroup: MaterialOrigin { slots: [0, 1, 2, 3, 4], displaced: false } +provenance light /scene/Sky: LightOrigin { index: 0, geoms: 5..5 } +provenance geometry 0..1: /scene/pSphere2 +provenance geometry 1..2: /scene/pTorus1 +provenance geometry 2..3: /scene/pCube2 +provenance geometry 3..4: /scene/pSphere1 +provenance geometry 4..5: /scene/pCube1 +provenance mesh: MeshOrigin { geom_id: 0, slot: 0, baked: false, moving: false } +provenance mesh: MeshOrigin { geom_id: 1, slot: 1, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 2, slot: 2, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 3, slot: 0, baked: false, moving: false } +provenance mesh: MeshOrigin { geom_id: 4, slot: 3, baked: true, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 17119738035130870988, n_points: 382, n_indices: 1560, n_uvs: None, smooth: false, material: 0 }), placements: 2, shared: false, displaced: false } +provenance mesh slot 1: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 6096447469814747168, n_points: 400, n_indices: 1600, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 2: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 1739488954094729910, n_points: 8, n_indices: 24, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 3: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 12343188411137242430, n_points: 8, n_indices: 20, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: true, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/scene/camera1"), cameras: ["/scene/camera1"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/scene/camera1"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/edits_usda-cfa1cdf26c62d04e-1.image b/crates/crust-core/tests/data/import_baselines/edits_usda-cfa1cdf26c62d04e-1.image new file mode 100644 index 000000000..1ac592459 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/edits_usda-cfa1cdf26c62d04e-1.image @@ -0,0 +1 @@ +32x32 16spp clamp-off e9cfe8ea4fd880fc diff --git a/crates/crust-core/tests/data/import_baselines/edits_usda-d51c63f9aa3e9706-1.digest b/crates/crust-core/tests/data/import_baselines/edits_usda-d51c63f9aa3e9706-1.digest new file mode 100644 index 000000000..55c5de5ea --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/edits_usda-d51c63f9aa3e9706-1.digest @@ -0,0 +1,39 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/World/Cam") +camera: Camera { origin: Vec3A(0.0, 1.5, 8.0), lower_left_corner: Vec3A(-4.7783756, -1.6855836, -2.0), horizontal: Vec3A(9.556751, 0.0, 0.0), vertical: Vec3A(0.0, 6.371167, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: Some("/Render/settings") +settings: RenderSettings { samples_per_pixel: 128, max_depth: 2, width: 48, height: 32, region: PixelRect { x0: 0, y0: 0, x1: 48, y1: 32 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 24.0, aperture: [20.955, 15.2908], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 10.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/edits.usda", "$DIR/input.usda"], invisible_overrides: Some(0) } +layer: $DIR/edits.usda +layer: $DIR/input.usda +lights: 4 +light 0: area name Some("/World/K4") lpe None pmf 0.25 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 1: area name Some("/World/K3") lpe None pmf 0.25 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 2: area name Some("/World/K2") lpe None pmf 0.25 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 3: area name Some("/World/K1") lpe None pmf 0.25 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 6 geometries, PrimitiveBreakdown { triangles: 2, spheres: 5, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 2, spheres: 5, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:6787da8eacebee45 camera=2:6787da8eacebee45 shadow=2:6787da8eacebee45 indirect=2:6787da8eacebee45 +geom 1: material #1 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:18dc8de5ad9d8317 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=1:18dc8de5ad9d8317 +geom 2: material #2 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:a357e5efbc0c08cc camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=1:a357e5efbc0c08cc +geom 3: material #3 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=0:cbf29ce484222325 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=0:cbf29ce484222325 +geom 4: material #4 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:15501014f6ccffa4 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=1:15501014f6ccffa4 +geom 5: material #5 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:ee57dfea4661cce3 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=1:ee57dfea4661cce3 +provenance light /World/K1: LightOrigin { index: 3, geoms: 5..6 } +provenance light /World/K2: LightOrigin { index: 2, geoms: 4..5 } +provenance light /World/K3: LightOrigin { index: 1, geoms: 2..3 } +provenance light /World/K4: LightOrigin { index: 0, geoms: 1..2 } +provenance geometry 0..1: /World/Floor +provenance geometry 1..2: /World/K4 +provenance geometry 2..3: /World/K3 +provenance geometry 3..4: /World/Dead +provenance geometry 4..5: /World/K2 +provenance geometry 5..6: /World/K1 +provenance mesh: MeshOrigin { geom_id: 0, slot: 0, baked: true, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 800109031887815527, n_points: 4, n_indices: 4, n_uvs: None, smooth: true, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: true }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/World/Cam"), cameras: ["/World/Cam"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/World/Cam"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/edits_usda-d51c63f9aa3e9706-1.image b/crates/crust-core/tests/data/import_baselines/edits_usda-d51c63f9aa3e9706-1.image new file mode 100644 index 000000000..6484a8a34 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/edits_usda-d51c63f9aa3e9706-1.image @@ -0,0 +1 @@ +48x32 16spp clamp-off 62de9b49d7ab19be diff --git a/crates/crust-core/tests/data/import_baselines/edits_usda-d6c1dd24567db6e1-1.digest b/crates/crust-core/tests/data/import_baselines/edits_usda-d6c1dd24567db6e1-1.digest new file mode 100644 index 000000000..222da59df --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/edits_usda-d6c1dd24567db6e1-1.digest @@ -0,0 +1,23 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/World/Cam") +camera: Camera { origin: Vec3A(0.0, 0.0, 6.0), lower_left_corner: Vec3A(-1.3761721, -0.91744804, 0.0), horizontal: Vec3A(2.7523441, 0.0, 0.0), vertical: Vec3A(0.0, 1.8348961, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: Some("/Render/settings") +settings: RenderSettings { samples_per_pixel: 128, max_depth: 2, width: 48, height: 32, region: PixelRect { x0: 0, y0: 0, x1: 48, y1: 32 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: false, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 50.0, aperture: [20.955, 15.2908], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 2.0, focus_distance: 6.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/edits.usda", "$DIR/input.usda"], invisible_overrides: Some(0) } +layer: $DIR/edits.usda +layer: $DIR/input.usda +lights: 1 +light 0: distant name Some("/World/Sun") lpe None pmf 1.0 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 2 geometries, PrimitiveBreakdown { triangles: 0, spheres: 2, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 0, spheres: 2, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:1cd1488d041dfcdb camera=1:1cd1488d041dfcdb shadow=1:1cd1488d041dfcdb indirect=1:1cd1488d041dfcdb +geom 1: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:2d90e22d27992fa5 camera=1:2d90e22d27992fa5 shadow=1:2d90e22d27992fa5 indirect=1:2d90e22d27992fa5 +provenance light /World/Sun: LightOrigin { index: 0, geoms: 2..2 } +provenance geometry 0..1: /World/Far +provenance geometry 1..2: /World/Near +provenance spheres: [0, 1] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: true }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/World/Cam"), cameras: ["/World/Cam"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/World/Cam"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/edits_usda-d6c1dd24567db6e1-1.image b/crates/crust-core/tests/data/import_baselines/edits_usda-d6c1dd24567db6e1-1.image new file mode 100644 index 000000000..3f9e769f9 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/edits_usda-d6c1dd24567db6e1-1.image @@ -0,0 +1 @@ +48x32 16spp clamp-off d844fdc43565b494 diff --git a/crates/crust-core/tests/data/import_baselines/edits_usda-dcd2a1d09ecabfda-1.digest b/crates/crust-core/tests/data/import_baselines/edits_usda-dcd2a1d09ecabfda-1.digest new file mode 100644 index 000000000..962db375c --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/edits_usda-dcd2a1d09ecabfda-1.digest @@ -0,0 +1,45 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/World/Cam") +camera: Camera { origin: Vec3A(0.3, 0.6, 5.5), lower_left_corner: Vec3A(-2.8181643, -1.2734121, -4.1201806), horizontal: Vec3A(4.168041, 0.0, -0.4380788), vertical: Vec3A(-0.01718934, 2.3516948, -0.16354565), u: Vec3A(0.9945219, 0.0, -0.104528464), v: Vec3A(-0.007291537, 0.9975641, -0.06937434), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: Some("/Render/settings") +settings: RenderSettings { samples_per_pixel: 64, max_depth: 4, width: 48, height: 27, region: PixelRect { x0: 0, y0: 0, x1: 48, y1: 27 }, min_samples_per_pixel: 16, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 50.0, aperture: [20.955, 11.787188], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 10.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/edits.usda", "$DIR/input.usda", "$ROOT/samples/subdivision_adaptive.usda"], invisible_overrides: Some(0) } +layer: $ROOT/samples/subdivision_adaptive.usda +layer: $DIR/edits.usda +layer: $DIR/input.usda +lights: 2 +light 0: distant name Some("/World/Sun") lpe None pmf 0.5 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 1: dome name Some("/World/Sky") lpe None pmf 0.5 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 6 geometries, PrimitiveBreakdown { triangles: 96, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 4 } top level, PrimitiveBreakdown { triangles: 108, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 4 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:4d8d0a8634ac849c camera=2:4d8d0a8634ac849c shadow=2:4d8d0a8634ac849c indirect=2:4d8d0a8634ac849c +geom 1: material #1 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=12:9b9b8ee224ae5549 camera=12:9b9b8ee224ae5549 shadow=12:9b9b8ee224ae5549 indirect=12:9b9b8ee224ae5549 +geom 2: material #1 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=12:56e3227c4c4f5a8d camera=12:56e3227c4c4f5a8d shadow=12:56e3227c4c4f5a8d indirect=12:56e3227c4c4f5a8d +geom 3: material #1 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=12:14e930a5d0b26e15 camera=12:14e930a5d0b26e15 shadow=12:14e930a5d0b26e15 indirect=12:14e930a5d0b26e15 +geom 4: material #1 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=12:1d38133bdf0eede5 camera=12:1d38133bdf0eede5 shadow=12:1d38133bdf0eede5 indirect=12:1d38133bdf0eede5 +geom 5: material #1 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=94:49cde4140ed25082 camera=94:49cde4140ed25082 shadow=94:49cde4140ed25082 indirect=94:49cde4140ed25082 +provenance material /World/Materials/clay: MaterialOrigin { slots: [1, 2, 3, 4, 5], displaced: false } +provenance arc source: /World/Cage +provenance light /World/Sky: LightOrigin { index: 1, geoms: 6..6 } +provenance light /World/Sun: LightOrigin { index: 0, geoms: 0..0 } +provenance geometry 0..1: /World/Floor +provenance geometry 1..2: /World/Cube5 +provenance geometry 2..3: /World/Cube4 +provenance geometry 3..4: /World/Cube3 +provenance geometry 4..5: /World/Cube2 +provenance geometry 5..6: /World/Cube1 +provenance mesh: MeshOrigin { geom_id: 0, slot: 0, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 1, slot: 1, baked: false, moving: false } +provenance mesh: MeshOrigin { geom_id: 2, slot: 1, baked: false, moving: false } +provenance mesh: MeshOrigin { geom_id: 3, slot: 1, baked: false, moving: false } +provenance mesh: MeshOrigin { geom_id: 4, slot: 1, baked: false, moving: false } +provenance mesh: MeshOrigin { geom_id: 5, slot: 2, baked: true, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 2079923942787246473, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 1: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 16825702510234920227, n_points: 8, n_indices: 36, n_uvs: None, smooth: true, material: 1 }), placements: 4, shared: false, displaced: false } +provenance mesh slot 2: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 1096032668800489466, n_points: 49, n_indices: 282, n_uvs: None, smooth: true, material: 1 }), placements: 1, shared: false, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: true }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: Some(ScreenKey([1050253722, 1058642330, 1085276160, 1122308081, 1050253722, 1058642330, 1085276160, 3212974206, 3161423387, 3184767365, 1064894717, 3161423387, 3198154212, 3148075556, 3212885404, 3175273688, 3164629877, 1065174400, 3191785816, 3184889222, 3180256379, 3212704312, 1090519040, 3])), domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/World/Cam"), cameras: ["/World/Dicer", "/World/Cam"], dicing: Some("/World/Cam"), on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/World/Cam"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/edits_usda-dcd2a1d09ecabfda-1.image b/crates/crust-core/tests/data/import_baselines/edits_usda-dcd2a1d09ecabfda-1.image new file mode 100644 index 000000000..b7e0e18ed --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/edits_usda-dcd2a1d09ecabfda-1.image @@ -0,0 +1 @@ +48x27 16spp clamp-off 4ecd351dabb22c67 diff --git a/crates/crust-core/tests/data/import_baselines/edits_usda-e3a820d4d01acabc-1.digest b/crates/crust-core/tests/data/import_baselines/edits_usda-e3a820d4d01acabc-1.digest new file mode 100644 index 000000000..1527caa23 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/edits_usda-e3a820d4d01acabc-1.digest @@ -0,0 +1,45 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/World/Cam") +camera: Camera { origin: Vec3A(0.3, 0.6, 5.5), lower_left_corner: Vec3A(-1.7955, -0.57871866, -4.5), horizontal: Vec3A(4.191, 0.0, 0.0), vertical: Vec3A(0.0, 2.3574374, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: Some("/Render/settings") +settings: RenderSettings { samples_per_pixel: 64, max_depth: 4, width: 48, height: 27, region: PixelRect { x0: 0, y0: 0, x1: 48, y1: 27 }, min_samples_per_pixel: 16, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 50.0, aperture: [20.955, 11.787188], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 10.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/edits.usda", "$DIR/input.usda", "$ROOT/samples/subdivision_adaptive.usda"], invisible_overrides: Some(0) } +layer: $ROOT/samples/subdivision_adaptive.usda +layer: $DIR/edits.usda +layer: $DIR/input.usda +lights: 2 +light 0: distant name Some("/World/Sun") lpe None pmf 0.5 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 1: dome name Some("/World/Sky") lpe None pmf 0.5 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 6 geometries, PrimitiveBreakdown { triangles: 96, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 4 } top level, PrimitiveBreakdown { triangles: 108, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 4 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:4d8d0a8634ac849c camera=2:4d8d0a8634ac849c shadow=2:4d8d0a8634ac849c indirect=2:4d8d0a8634ac849c +geom 1: material #1 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=12:9b9b8ee224ae5549 camera=12:9b9b8ee224ae5549 shadow=12:9b9b8ee224ae5549 indirect=12:9b9b8ee224ae5549 +geom 2: material #1 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=12:56e3227c4c4f5a8d camera=12:56e3227c4c4f5a8d shadow=12:56e3227c4c4f5a8d indirect=12:56e3227c4c4f5a8d +geom 3: material #1 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=12:14e930a5d0b26e15 camera=12:14e930a5d0b26e15 shadow=12:14e930a5d0b26e15 indirect=12:14e930a5d0b26e15 +geom 4: material #1 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=12:1d38133bdf0eede5 camera=12:1d38133bdf0eede5 shadow=12:1d38133bdf0eede5 indirect=12:1d38133bdf0eede5 +geom 5: material #1 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=94:49cde4140ed25082 camera=94:49cde4140ed25082 shadow=94:49cde4140ed25082 indirect=94:49cde4140ed25082 +provenance material /World/Materials/clay: MaterialOrigin { slots: [1, 2, 3, 4, 5], displaced: false } +provenance arc source: /World/Cage +provenance light /World/Sky: LightOrigin { index: 1, geoms: 6..6 } +provenance light /World/Sun: LightOrigin { index: 0, geoms: 0..0 } +provenance geometry 0..1: /World/Floor +provenance geometry 1..2: /World/Cube5 +provenance geometry 2..3: /World/Cube4 +provenance geometry 3..4: /World/Cube3 +provenance geometry 4..5: /World/Cube2 +provenance geometry 5..6: /World/Cube1 +provenance mesh: MeshOrigin { geom_id: 0, slot: 0, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 1, slot: 1, baked: false, moving: false } +provenance mesh: MeshOrigin { geom_id: 2, slot: 1, baked: false, moving: false } +provenance mesh: MeshOrigin { geom_id: 3, slot: 1, baked: false, moving: false } +provenance mesh: MeshOrigin { geom_id: 4, slot: 1, baked: false, moving: false } +provenance mesh: MeshOrigin { geom_id: 5, slot: 2, baked: true, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 2079923942787246473, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 1: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 16825702510234920227, n_points: 8, n_indices: 36, n_uvs: None, smooth: true, material: 1 }), placements: 4, shared: false, displaced: false } +provenance mesh slot 2: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 1096032668800489466, n_points: 49, n_indices: 282, n_uvs: None, smooth: true, material: 1 }), placements: 1, shared: false, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: true }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: Some(ScreenKey([1050253722, 1058642330, 1085276160, 1122308081, 1050253722, 1058642330, 1085276160, 3212836864, 0, 3193345094, 1065353216, 0, 3193345094, 0, 3212836864, 3186714319, 0, 1065353216, 3186714319, 0, 0, 3212836864, 1090519040, 3])), domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/World/Cam"), cameras: ["/World/Dicer", "/World/Cam"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/World/Cam"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/edits_usda-e3a820d4d01acabc-1.image b/crates/crust-core/tests/data/import_baselines/edits_usda-e3a820d4d01acabc-1.image new file mode 100644 index 000000000..ac0b74dfc --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/edits_usda-e3a820d4d01acabc-1.image @@ -0,0 +1 @@ +48x27 16spp clamp-off dbb5b514419e84e6 diff --git a/crates/crust-core/tests/data/import_baselines/edits_usda-ea33d0579957ea29-1.digest b/crates/crust-core/tests/data/import_baselines/edits_usda-ea33d0579957ea29-1.digest new file mode 100644 index 000000000..8105afd6d --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/edits_usda-ea33d0579957ea29-1.digest @@ -0,0 +1,41 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/scene/camera1") +camera: Camera { origin: Vec3A(0.0074343784, 1.9913422, 4.0133057), lower_left_corner: Vec3A(-7.492556, -3.0086517, -0.98669434), horizontal: Vec3A(14.999981, 0.0, 0.0), vertical: Vec3A(0.0, 9.999988, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: Some(Vec4(0.0, 0.0, -1.0, 3.9133058)), far: Some(Vec4(0.0, 0.0, 1.0, 9995.986)), planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: Some("/Render/settings") +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 48, height: 32, region: PixelRect { x0: 0, y0: 0, x1: 48, y1: 32 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 12.700017, aperture: [25.4, 25.4], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 5.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/edits.usda", "$DIR/input.usda", "$ROOT/samples/cornellbox.usda"], invisible_overrides: Some(0) } +layer: $ROOT/samples/cornellbox.usda +layer: $DIR/edits.usda +layer: $DIR/input.usda +warning: Warning { code: MaterialFallbackDefault, kind: Skipped, count: 1, prims: ["/scene/Looks/initialShadingGroup"], message: "Material /scene/Looks/initialShadingGroup has no surface shader — using default grey OpenPBR" } +lights: 1 +light 0: dome name Some("/scene/Sky") lpe None pmf 1.0 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 5 geometries, PrimitiveBreakdown { triangles: 822, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 2 } top level, PrimitiveBreakdown { triangles: 1582, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 2 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.3585339 motion [] pieces all=760:2344ecf63e12c441 camera=760:2344ecf63e12c441 shadow=760:2344ecf63e12c441 indirect=760:2344ecf63e12c441 +geom 1: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.25 motion [] pieces all=800:4a8c9f44d777e131 camera=800:4a8c9f44d777e131 shadow=800:4a8c9f44d777e131 indirect=800:4a8c9f44d777e131 +geom 2: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=12:94a297badef437e1 camera=12:94a297badef437e1 shadow=12:94a297badef437e1 indirect=12:94a297badef437e1 +geom 3: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.2 motion [] pieces all=760:c2b60a75c52c78b9 camera=760:c2b60a75c52c78b9 shadow=760:c2b60a75c52c78b9 indirect=760:c2b60a75c52c78b9 +geom 4: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 4.0 motion [] pieces all=10:88b22fc3345d5b05 camera=10:88b22fc3345d5b05 shadow=10:88b22fc3345d5b05 indirect=10:88b22fc3345d5b05 +provenance material /scene/Looks/initialShadingGroup: MaterialOrigin { slots: [0, 1, 2, 3, 4], displaced: false } +provenance light /scene/Sky: LightOrigin { index: 0, geoms: 5..5 } +provenance geometry 0..1: /scene/pSphere2 +provenance geometry 1..2: /scene/pTorus1 +provenance geometry 2..3: /scene/pCube2 +provenance geometry 3..4: /scene/pSphere1 +provenance geometry 4..5: /scene/pCube1 +provenance mesh: MeshOrigin { geom_id: 0, slot: 0, baked: false, moving: false } +provenance mesh: MeshOrigin { geom_id: 1, slot: 1, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 2, slot: 2, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 3, slot: 0, baked: false, moving: false } +provenance mesh: MeshOrigin { geom_id: 4, slot: 3, baked: true, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 17119738035130870988, n_points: 382, n_indices: 1560, n_uvs: None, smooth: false, material: 0 }), placements: 2, shared: false, displaced: false } +provenance mesh slot 1: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 6096447469814747168, n_points: 400, n_indices: 1600, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 2: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 1739488954094729910, n_points: 8, n_indices: 24, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 3: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 12343188411137242430, n_points: 8, n_indices: 20, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: true }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/scene/camera1"), cameras: ["/scene/camera1"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/scene/camera1"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/edits_usda-ea33d0579957ea29-1.image b/crates/crust-core/tests/data/import_baselines/edits_usda-ea33d0579957ea29-1.image new file mode 100644 index 000000000..41d4f00f9 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/edits_usda-ea33d0579957ea29-1.image @@ -0,0 +1 @@ +48x32 16spp clamp-off faa99b7bb6e23d99 diff --git a/crates/crust-core/tests/data/import_baselines/edits_usda-ec4aae2ab8a0f13f-1.digest b/crates/crust-core/tests/data/import_baselines/edits_usda-ec4aae2ab8a0f13f-1.digest new file mode 100644 index 000000000..0b27394fa --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/edits_usda-ec4aae2ab8a0f13f-1.digest @@ -0,0 +1,33 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/World/Cam") +camera: Camera { origin: Vec3A(0.0, 0.5, 6.0), lower_left_corner: Vec3A(-4.7783756, -2.6855836, -4.0), horizontal: Vec3A(9.556751, 0.0, 0.0), vertical: Vec3A(0.0, 6.371167, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: Some("/Render/settings") +settings: RenderSettings { samples_per_pixel: 128, max_depth: 2, width: 48, height: 32, region: PixelRect { x0: 0, y0: 0, x1: 48, y1: 32 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 24.0, aperture: [20.955, 15.2908], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 10.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/edits.usda", "$DIR/input.usda"], invisible_overrides: Some(0) } +layer: $DIR/edits.usda +layer: $DIR/input.usda +lights: 2 +light 0: distant name Some("/World/Sun") lpe None pmf 0.5 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 1: dome name Some("/World/Sky") lpe None pmf 0.5 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 3 geometries, PrimitiveBreakdown { triangles: 5, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 5, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:0e0a4667da70ad35 camera=2:0e0a4667da70ad35 shadow=2:0e0a4667da70ad35 indirect=2:0e0a4667da70ad35 +geom 1: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:6787da8eacebee45 camera=2:6787da8eacebee45 shadow=2:6787da8eacebee45 indirect=2:6787da8eacebee45 +geom 2: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:7717a51d7d9da1aa camera=1:7717a51d7d9da1aa shadow=1:7717a51d7d9da1aa indirect=1:7717a51d7d9da1aa +provenance light /World/Sky: LightOrigin { index: 1, geoms: 2..2 } +provenance light /World/Sun: LightOrigin { index: 0, geoms: 2..2 } +provenance geometry 0..1: /World/Card +provenance geometry 1..2: /World/Floor +provenance geometry 2..3: /World/Cam/Badge +provenance mesh: MeshOrigin { geom_id: 0, slot: 0, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 1, slot: 1, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 2, slot: 2, baked: true, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 18358658470076285213, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 1: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 800109031887815527, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 2: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 7930610974440722833, n_points: 3, n_indices: 3, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: true }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/World/Cam"), cameras: ["/World/Cam"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/World/Cam"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/edits_usda-ec4aae2ab8a0f13f-1.image b/crates/crust-core/tests/data/import_baselines/edits_usda-ec4aae2ab8a0f13f-1.image new file mode 100644 index 000000000..92640d30e --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/edits_usda-ec4aae2ab8a0f13f-1.image @@ -0,0 +1 @@ +48x32 16spp clamp-off 50e1e2729df388d4 diff --git a/crates/crust-core/tests/data/import_baselines/edits_usda-efadd5d5ae9b33c8-1.digest b/crates/crust-core/tests/data/import_baselines/edits_usda-efadd5d5ae9b33c8-1.digest new file mode 100644 index 000000000..a4deec7b1 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/edits_usda-efadd5d5ae9b33c8-1.digest @@ -0,0 +1,22 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/World/Cam") +camera: Camera { origin: Vec3A(0.0, 0.0, 6.0), lower_left_corner: Vec3A(-4.7783756, -3.1855836, -4.0), horizontal: Vec3A(9.556751, 0.0, 0.0), vertical: Vec3A(0.0, 6.371167, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: Some("/Render/settings") +settings: RenderSettings { samples_per_pixel: 128, max_depth: 2, width: 48, height: 32, region: PixelRect { x0: 0, y0: 0, x1: 48, y1: 32 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 2.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 24.0, aperture: [20.955, 15.2908], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 10.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/edits.usda", "$DIR/input.usda"], invisible_overrides: Some(0) } +layer: $DIR/edits.usda +layer: $DIR/input.usda +warning: Warning { code: TimeMotionNeedsFrame, kind: Skipped, count: 1, prims: ["/World/Mover"], message: "/World/Cam opens its shutter (0 .. 0.5), but no frame was given: 1 drawn prim's time-sampled transforms are not evaluated over it and render sharp (the first at /World/Mover). Render a frame with -f" } +lights: 1 +light 0: distant name Some("/World/Sun") lpe None pmf 1.0 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 1 geometries, PrimitiveBreakdown { triangles: 0, spheres: 1, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 0, spheres: 1, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:984632b55acb5495 camera=1:984632b55acb5495 shadow=1:984632b55acb5495 indirect=1:984632b55acb5495 +provenance light /World/Sun: LightOrigin { index: 0, geoms: 1..1 } +provenance geometry 0..1: /World/Mover +provenance spheres: [0] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: true }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/World/Cam"), cameras: ["/World/Cam"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/World/Cam"), offsets: [0, 4602678819172646912], interval: None, query: true, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/edits_usda-efadd5d5ae9b33c8-1.image b/crates/crust-core/tests/data/import_baselines/edits_usda-efadd5d5ae9b33c8-1.image new file mode 100644 index 000000000..79bc428f3 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/edits_usda-efadd5d5ae9b33c8-1.image @@ -0,0 +1 @@ +48x32 16spp clamp-off 0956f9aa6aa6e7f9 diff --git a/crates/crust-core/tests/data/import_baselines/edits_usda-f437292a1baf4562-1.digest b/crates/crust-core/tests/data/import_baselines/edits_usda-f437292a1baf4562-1.digest new file mode 100644 index 000000000..770ad5d69 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/edits_usda-f437292a1baf4562-1.digest @@ -0,0 +1,33 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/World/Cam") +camera: Camera { origin: Vec3A(0.0, 0.5, 6.0), lower_left_corner: Vec3A(-4.7783756, -2.6855836, -4.0), horizontal: Vec3A(9.556751, 0.0, 0.0), vertical: Vec3A(0.0, 6.371167, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: Some("/Render/settings") +settings: RenderSettings { samples_per_pixel: 128, max_depth: 2, width: 48, height: 32, region: PixelRect { x0: 0, y0: 0, x1: 48, y1: 32 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [AovProduct { prim_path: "/Render/beauty", name: "beauty.exr", vars: [AovVar { prim_path: "/Render/C", name: "C", channel_prefix: None, source: Color, components: 3, precision: Float, accumulation: Filtered, clear: 0.0, expression: None, raw: false, variance: false }], attributes: [] }], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 24.0, aperture: [20.955, 15.2908], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 10.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/edits.usda", "$DIR/input.usda"], invisible_overrides: Some(0) } +layer: $DIR/edits.usda +layer: $DIR/input.usda +lights: 2 +light 0: distant name Some("/World/Sun") lpe None pmf 0.5 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 1: dome name Some("/World/Sky") lpe None pmf 0.5 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 3 geometries, PrimitiveBreakdown { triangles: 5, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 5, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:0e0a4667da70ad35 camera=2:0e0a4667da70ad35 shadow=2:0e0a4667da70ad35 indirect=2:0e0a4667da70ad35 +geom 1: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:6787da8eacebee45 camera=2:6787da8eacebee45 shadow=2:6787da8eacebee45 indirect=2:6787da8eacebee45 +geom 2: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:8644ef657b9e2de5 camera=1:8644ef657b9e2de5 shadow=1:8644ef657b9e2de5 indirect=1:8644ef657b9e2de5 +provenance light /World/Sky: LightOrigin { index: 1, geoms: 2..2 } +provenance light /World/Sun: LightOrigin { index: 0, geoms: 2..2 } +provenance geometry 0..1: /World/Card +provenance geometry 1..2: /World/Floor +provenance geometry 2..3: /World/Cam2/Badge +provenance mesh: MeshOrigin { geom_id: 0, slot: 0, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 1, slot: 1, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 2, slot: 2, baked: true, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 18358658470076285213, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 1: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 800109031887815527, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 2: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 7930610974440722833, n_points: 3, n_indices: 3, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: true }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/World/Cam"), cameras: ["/World/Cam2", "/World/Cam"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/World/Cam"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/edits_usda-f437292a1baf4562-1.image b/crates/crust-core/tests/data/import_baselines/edits_usda-f437292a1baf4562-1.image new file mode 100644 index 000000000..7a48acf75 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/edits_usda-f437292a1baf4562-1.image @@ -0,0 +1 @@ +48x32 16spp clamp-off a54b59df3f81253b diff --git a/crates/crust-core/tests/data/import_baselines/edits_usda-f7edbb7e619c3f5d-1.digest b/crates/crust-core/tests/data/import_baselines/edits_usda-f7edbb7e619c3f5d-1.digest new file mode 100644 index 000000000..f7e3773a8 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/edits_usda-f7edbb7e619c3f5d-1.digest @@ -0,0 +1,23 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/World/Cam") +camera: Camera { origin: Vec3A(0.0, 0.0, 6.0), lower_left_corner: Vec3A(-1.3761721, -0.91744804, 0.0), horizontal: Vec3A(2.7523441, 0.0, 0.0), vertical: Vec3A(0.0, 1.8348961, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 1.25, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: Some("/Render/settings") +settings: RenderSettings { samples_per_pixel: 128, max_depth: 2, width: 48, height: 32, region: PixelRect { x0: 0, y0: 0, x1: 48, y1: 32 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 50.0, aperture: [20.955, 15.2908], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 2.0, focus_distance: 6.0 }), depth_of_field: true, motion_blur: false, layer_stack: ["$DIR/edits.usda", "$DIR/input.usda"], invisible_overrides: Some(0) } +layer: $DIR/edits.usda +layer: $DIR/input.usda +lights: 1 +light 0: distant name Some("/World/Sun") lpe None pmf 1.0 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 2 geometries, PrimitiveBreakdown { triangles: 0, spheres: 2, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 0, spheres: 2, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:1cd1488d041dfcdb camera=1:1cd1488d041dfcdb shadow=1:1cd1488d041dfcdb indirect=1:1cd1488d041dfcdb +geom 1: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:2d90e22d27992fa5 camera=1:2d90e22d27992fa5 shadow=1:2d90e22d27992fa5 indirect=1:2d90e22d27992fa5 +provenance light /World/Sun: LightOrigin { index: 0, geoms: 2..2 } +provenance geometry 0..1: /World/Far +provenance geometry 1..2: /World/Near +provenance spheres: [0, 1] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: true }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/World/Cam"), cameras: ["/World/Cam"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/World/Cam"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/edits_usda-f7edbb7e619c3f5d-1.image b/crates/crust-core/tests/data/import_baselines/edits_usda-f7edbb7e619c3f5d-1.image new file mode 100644 index 000000000..95603ce7c --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/edits_usda-f7edbb7e619c3f5d-1.image @@ -0,0 +1 @@ +48x32 16spp clamp-off 6403d1e8ae317b59 diff --git a/crates/crust-core/tests/data/import_baselines/edits_usda-fdfde88486c6dc74-1.digest b/crates/crust-core/tests/data/import_baselines/edits_usda-fdfde88486c6dc74-1.digest new file mode 100644 index 000000000..89a09ab3e --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/edits_usda-fdfde88486c6dc74-1.digest @@ -0,0 +1,21 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/World/Cam") +camera: Camera { origin: Vec3A(0.0, 0.0, 6.0), lower_left_corner: Vec3A(-4.7783756, -3.1855836, -4.0), horizontal: Vec3A(9.556751, 0.0, 0.0), vertical: Vec3A(0.0, 6.371167, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: Some("/Render/settings") +settings: RenderSettings { samples_per_pixel: 128, max_depth: 2, width: 48, height: 32, region: PixelRect { x0: 0, y0: 0, x1: 48, y1: 32 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 24.0, aperture: [20.955, 15.2908], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 10.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/edits.usda", "$DIR/input.usda"], invisible_overrides: Some(0) } +layer: $DIR/edits.usda +layer: $DIR/input.usda +lights: 1 +light 0: distant name Some("/World/Sun") lpe None pmf 1.0 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 1 geometries, PrimitiveBreakdown { triangles: 0, spheres: 1, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 0, spheres: 1, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:984632b55acb5495 camera=1:984632b55acb5495 shadow=1:984632b55acb5495 indirect=1:984632b55acb5495 +provenance light /World/Sun: LightOrigin { index: 0, geoms: 1..1 } +provenance geometry 0..1: /World/Mover +provenance spheres: [0] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: true }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/World/Cam"), cameras: ["/World/Cam"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/World/Cam"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/edits_usda-fdfde88486c6dc74-1.image b/crates/crust-core/tests/data/import_baselines/edits_usda-fdfde88486c6dc74-1.image new file mode 100644 index 000000000..1f56f38e9 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/edits_usda-fdfde88486c6dc74-1.image @@ -0,0 +1 @@ +48x32 16spp clamp-off 27a149a4b6dbf0ec diff --git a/crates/crust-core/tests/data/import_baselines/empty_source_name_usda-acd517e82c0f53e1-1.digest b/crates/crust-core/tests/data/import_baselines/empty_source_name_usda-acd517e82c0f53e1-1.digest new file mode 100644 index 000000000..0deb57243 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/empty_source_name_usda-acd517e82c0f53e1-1.digest @@ -0,0 +1,18 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/World/other") +camera: Camera { origin: Vec3A(0.0, 0.0, 0.0), lower_left_corner: Vec3A(-2.7183647, -1.5290802, -10.0), horizontal: Vec3A(5.4367294, 0.0, 0.0), vertical: Vec3A(0.0, 3.0581603, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: Some("/Render/settings") +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 640, height: 360, region: PixelRect { x0: 0, y0: 0, x1: 640, y1: 360 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [AovProduct { prim_path: "/Render/p", name: "p.exr", vars: [AovVar { prim_path: "/Render/Pworld", name: "Pworld", channel_prefix: None, source: P, components: 3, precision: Float, accumulation: Closest, clear: 0.0, expression: None, raw: false, variance: false }], attributes: [] }], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 50.0, aperture: [20.955, 15.2908], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 10.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/empty_source_name.usda"], invisible_overrides: Some(0) } +layer: $DIR/empty_source_name.usda +lights: 0 +volumes: 0 +world: 1 geometries, PrimitiveBreakdown { triangles: 0, spheres: 1, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 0, spheres: 1, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:fb1e7d48790aec95 camera=1:fb1e7d48790aec95 shadow=1:fb1e7d48790aec95 indirect=1:fb1e7d48790aec95 +provenance geometry 0..1: /World/ball +provenance spheres: [0] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/World/other"), cameras: ["/World/other", "/World/cam"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/World/other"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/empty_source_name_usda-acd517e82c0f53e1-1.image b/crates/crust-core/tests/data/import_baselines/empty_source_name_usda-acd517e82c0f53e1-1.image new file mode 100644 index 000000000..c734c5b1d --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/empty_source_name_usda-acd517e82c0f53e1-1.image @@ -0,0 +1 @@ +640x360 16spp clamp-off a04a09c0d4b5e325 diff --git a/crates/crust-core/tests/data/import_baselines/empty_usda-c1bba32cb87c83e9-1.digest b/crates/crust-core/tests/data/import_baselines/empty_usda-c1bba32cb87c83e9-1.digest new file mode 100644 index 000000000..5d67798a9 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/empty_usda-c1bba32cb87c83e9-1.digest @@ -0,0 +1,17 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: None +camera: Camera { origin: Vec3A(15.0, 3.0, 3.0), lower_left_corner: Vec3A(4.8863316, -0.044797063, 4.174048), horizontal: Vec3A(1.2295314, 0.0, -6.147657), vertical: Vec3A(-0.44830504, 3.4967792, -0.08966101), u: Vec3A(0.19611613, 0.0, -0.9805807), v: Vec3A(-0.1271232, 0.991561, -0.02542464), lens_radius: 0.05, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: None +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 640, height: 360, region: PixelRect { x0: 0, y0: 0, x1: 640, y1: 360 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: None, depth_of_field: true, motion_blur: false, layer_stack: ["$DIR/empty.usda"], invisible_overrides: Some(0) } +layer: $DIR/empty.usda +warning: Warning { code: CameraMissing, kind: Skipped, count: 1, prims: [], message: "USD stage has no UsdGeomCamera — falling back to world::get_settings camera" } +lights: 0 +volumes: 0 +world: 0 geometries, PrimitiveBreakdown { triangles: 0, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 0, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: None, cameras: [], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: None, offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/empty_usda-c1bba32cb87c83e9-1.image b/crates/crust-core/tests/data/import_baselines/empty_usda-c1bba32cb87c83e9-1.image new file mode 100644 index 000000000..c734c5b1d --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/empty_usda-c1bba32cb87c83e9-1.image @@ -0,0 +1 @@ +640x360 16spp clamp-off a04a09c0d4b5e325 diff --git a/crates/crust-core/tests/data/import_baselines/exposure_0_usda-c142af23c7dc6585-1.digest b/crates/crust-core/tests/data/import_baselines/exposure_0_usda-c142af23c7dc6585-1.digest new file mode 100644 index 000000000..1feb821ea --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/exposure_0_usda-c142af23c7dc6585-1.digest @@ -0,0 +1,26 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/World/cam") +camera: Camera { origin: Vec3A(0.0, 0.0, 0.0), lower_left_corner: Vec3A(-5.0, -3.75, -10.0), horizontal: Vec3A(10.0, 0.0, 0.0), vertical: Vec3A(0.0, 7.5, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: Some("/Render/settings") +settings: RenderSettings { samples_per_pixel: 16, max_depth: 2, width: 32, height: 24, region: PixelRect { x0: 0, y0: 0, x1: 32, y1: 24 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [AovProduct { prim_path: "/Render/p", name: "p.exr", vars: [AovVar { prim_path: "/Render/C", name: "C", channel_prefix: None, source: Color, components: 3, precision: Float, accumulation: Filtered, clear: 0.0, expression: None, raw: false, variance: false }, AovVar { prim_path: "/Render/matte", name: "matte", channel_prefix: None, source: Primvar(PrimvarSource { index: 0, components: 1, role: Float }), components: 1, precision: Float, accumulation: Filtered, clear: 0.0, expression: None, raw: false, variance: false }, AovVar { prim_path: "/Render/depth", name: "depth", channel_prefix: None, source: Depth, components: 1, precision: Float, accumulation: Closest, clear: inf, expression: None, raw: false, variance: false }, AovVar { prim_path: "/Render/depth_filtered", name: "depth_filtered", channel_prefix: None, source: Depth, components: 1, precision: Float, accumulation: Filtered, clear: inf, expression: None, raw: false, variance: false }, AovVar { prim_path: "/Render/variance", name: "variance", channel_prefix: None, source: Variance, components: 1, precision: Float, accumulation: Filtered, clear: 0.0, expression: None, raw: false, variance: false }, AovVar { prim_path: "/Render/look_out", name: "look_out", channel_prefix: None, source: Filter(FilterSource { display: false, filter: 0, output: 0, components: 3, radiance: true }), components: 3, precision: Float, accumulation: Filtered, clear: 0.0, expression: None, raw: false, variance: false }, AovVar { prim_path: "/Render/look_data", name: "look_data", channel_prefix: None, source: Filter(FilterSource { display: false, filter: 0, output: 0, components: 3, radiance: false }), components: 3, precision: Float, accumulation: Filtered, clear: 0.0, expression: None, raw: false, variance: false }], attributes: [] }], precomp: Some(Precomp { sample_filters: ["/Render/look"], display_filters: [], display: "beauty" }) } +pass: None +source: Source { lens: Some(Lens { focal_length: 24.0, aperture: [24.0, 18.0], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 10.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/exposure_0.usda"], invisible_overrides: Some(0) } +layer: $DIR/exposure_0.usda +lights: 1 +light 0: dome name Some("/World/sky") lpe None pmf 1.0 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 2 geometries, PrimitiveBreakdown { triangles: 4, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 4, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov Some((Some(0), false)) swapped false curves false scale 1.0 motion [] pieces all=2:2a13523c8e09c13d camera=2:2a13523c8e09c13d shadow=2:2a13523c8e09c13d indirect=2:2a13523c8e09c13d +geom 1: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:31db52e4afd4a225 camera=2:31db52e4afd4a225 shadow=2:31db52e4afd4a225 indirect=2:31db52e4afd4a225 +provenance light /World/sky: LightOrigin { index: 0, geoms: 0..0 } +provenance geometry 0..1: /World/Card +provenance geometry 1..2: /World/Wall +provenance mesh: MeshOrigin { geom_id: 0, slot: 0, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 1, slot: 1, baked: true, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 3430351340666728903, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 1: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 13118596165941616386, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: true, working: None, camera: Some("/World/cam"), cameras: ["/World/cam"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [("matte", 1)], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/World/cam"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/exposure_0_usda-c142af23c7dc6585-1.image b/crates/crust-core/tests/data/import_baselines/exposure_0_usda-c142af23c7dc6585-1.image new file mode 100644 index 000000000..f08c49d36 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/exposure_0_usda-c142af23c7dc6585-1.image @@ -0,0 +1 @@ +32x24 16spp clamp-off e72b7b7cff87e77d diff --git a/crates/crust-core/tests/data/import_baselines/exposure_2_usda-1ae682494eb4e641-1.digest b/crates/crust-core/tests/data/import_baselines/exposure_2_usda-1ae682494eb4e641-1.digest new file mode 100644 index 000000000..54b643148 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/exposure_2_usda-1ae682494eb4e641-1.digest @@ -0,0 +1,26 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/World/cam") +camera: Camera { origin: Vec3A(0.0, 0.0, 0.0), lower_left_corner: Vec3A(-5.0, -3.75, -10.0), horizontal: Vec3A(10.0, 0.0, 0.0), vertical: Vec3A(0.0, 7.5, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: Some("/Render/settings") +settings: RenderSettings { samples_per_pixel: 16, max_depth: 2, width: 32, height: 24, region: PixelRect { x0: 0, y0: 0, x1: 32, y1: 24 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 4.0 } +aovs: AovRequest { products: [AovProduct { prim_path: "/Render/p", name: "p.exr", vars: [AovVar { prim_path: "/Render/C", name: "C", channel_prefix: None, source: Color, components: 3, precision: Float, accumulation: Filtered, clear: 0.0, expression: None, raw: false, variance: false }, AovVar { prim_path: "/Render/matte", name: "matte", channel_prefix: None, source: Primvar(PrimvarSource { index: 0, components: 1, role: Float }), components: 1, precision: Float, accumulation: Filtered, clear: 0.0, expression: None, raw: false, variance: false }, AovVar { prim_path: "/Render/depth", name: "depth", channel_prefix: None, source: Depth, components: 1, precision: Float, accumulation: Closest, clear: inf, expression: None, raw: false, variance: false }, AovVar { prim_path: "/Render/depth_filtered", name: "depth_filtered", channel_prefix: None, source: Depth, components: 1, precision: Float, accumulation: Filtered, clear: inf, expression: None, raw: false, variance: false }, AovVar { prim_path: "/Render/variance", name: "variance", channel_prefix: None, source: Variance, components: 1, precision: Float, accumulation: Filtered, clear: 0.0, expression: None, raw: false, variance: false }, AovVar { prim_path: "/Render/look_out", name: "look_out", channel_prefix: None, source: Filter(FilterSource { display: false, filter: 0, output: 0, components: 3, radiance: true }), components: 3, precision: Float, accumulation: Filtered, clear: 0.0, expression: None, raw: false, variance: false }, AovVar { prim_path: "/Render/look_data", name: "look_data", channel_prefix: None, source: Filter(FilterSource { display: false, filter: 0, output: 0, components: 3, radiance: false }), components: 3, precision: Float, accumulation: Filtered, clear: 0.0, expression: None, raw: false, variance: false }], attributes: [] }], precomp: Some(Precomp { sample_filters: ["/Render/look"], display_filters: [], display: "beauty" }) } +pass: None +source: Source { lens: Some(Lens { focal_length: 24.0, aperture: [24.0, 18.0], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 10.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/exposure_2.usda"], invisible_overrides: Some(0) } +layer: $DIR/exposure_2.usda +lights: 1 +light 0: dome name Some("/World/sky") lpe None pmf 1.0 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 2 geometries, PrimitiveBreakdown { triangles: 4, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 4, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov Some((Some(0), false)) swapped false curves false scale 1.0 motion [] pieces all=2:2a13523c8e09c13d camera=2:2a13523c8e09c13d shadow=2:2a13523c8e09c13d indirect=2:2a13523c8e09c13d +geom 1: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:31db52e4afd4a225 camera=2:31db52e4afd4a225 shadow=2:31db52e4afd4a225 indirect=2:31db52e4afd4a225 +provenance light /World/sky: LightOrigin { index: 0, geoms: 0..0 } +provenance geometry 0..1: /World/Card +provenance geometry 1..2: /World/Wall +provenance mesh: MeshOrigin { geom_id: 0, slot: 0, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 1, slot: 1, baked: true, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 3430351340666728903, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 1: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 13118596165941616386, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: true, working: None, camera: Some("/World/cam"), cameras: ["/World/cam"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [("matte", 1)], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/World/cam"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/exposure_2_usda-1ae682494eb4e641-1.image b/crates/crust-core/tests/data/import_baselines/exposure_2_usda-1ae682494eb4e641-1.image new file mode 100644 index 000000000..dfe2df4cf --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/exposure_2_usda-1ae682494eb4e641-1.image @@ -0,0 +1 @@ +32x24 16spp clamp-off 988b6c8a0d57defd diff --git a/crates/crust-core/tests/data/import_baselines/exposure_usda-0139c7326dc66b4b-1.digest b/crates/crust-core/tests/data/import_baselines/exposure_usda-0139c7326dc66b4b-1.digest new file mode 100644 index 000000000..303ab6b25 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/exposure_usda-0139c7326dc66b4b-1.digest @@ -0,0 +1,21 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: None +camera: Camera { origin: Vec3A(15.0, 3.0, 3.0), lower_left_corner: Vec3A(4.8863316, -0.044797063, 4.174048), horizontal: Vec3A(1.2295314, 0.0, -6.147657), vertical: Vec3A(-0.44830504, 3.4967792, -0.08966101), u: Vec3A(0.19611613, 0.0, -0.9805807), v: Vec3A(-0.1271232, 0.991561, -0.02542464), lens_radius: 0.05, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: None +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 640, height: 360, region: PixelRect { x0: 0, y0: 0, x1: 640, y1: 360 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: None, depth_of_field: true, motion_blur: false, layer_stack: ["$DIR/exposure.usda"], invisible_overrides: Some(0) } +layer: $DIR/exposure.usda +warning: Warning { code: CameraMissing, kind: Skipped, count: 1, prims: [], message: "USD stage has no UsdGeomCamera — falling back to world::get_settings camera" } +lights: 1 +light 0: area name Some("/World/L") lpe None pmf 1.0 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 1 geometries, PrimitiveBreakdown { triangles: 0, spheres: 1, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 0, spheres: 1, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +geom 0: material #0 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:984632b55acb5495 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=1:984632b55acb5495 +provenance light /World/L: LightOrigin { index: 0, geoms: 0..1 } +provenance geometry 0..1: /World/L +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: None, cameras: [], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: None, offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/exposure_usda-0139c7326dc66b4b-1.image b/crates/crust-core/tests/data/import_baselines/exposure_usda-0139c7326dc66b4b-1.image new file mode 100644 index 000000000..c734c5b1d --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/exposure_usda-0139c7326dc66b4b-1.image @@ -0,0 +1 @@ +640x360 16spp clamp-off a04a09c0d4b5e325 diff --git a/crates/crust-core/tests/data/import_baselines/expression_usda-843ebd908965795b-1.digest b/crates/crust-core/tests/data/import_baselines/expression_usda-843ebd908965795b-1.digest new file mode 100644 index 000000000..1b055536a --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/expression_usda-843ebd908965795b-1.digest @@ -0,0 +1,32 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: None +camera: Camera { origin: Vec3A(15.0, 3.0, 3.0), lower_left_corner: Vec3A(4.8863316, -0.044797063, 4.174048), horizontal: Vec3A(1.2295314, 0.0, -6.147657), vertical: Vec3A(-0.44830504, 3.4967792, -0.08966101), u: Vec3A(0.19611613, 0.0, -0.9805807), v: Vec3A(-0.1271232, 0.991561, -0.02542464), lens_radius: 0.05, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: Some("/Render/settings") +settings: RenderSettings { samples_per_pixel: 3, max_depth: 32, width: 8, height: 8, region: PixelRect { x0: 0, y0: 0, x1: 8, y1: 8 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: Some(PassSummary { path: "/Render/Passes/meshes", holdouts: 1, camera_hidden: 0 }) +source: Source { lens: None, depth_of_field: true, motion_blur: false, layer_stack: ["$DIR/expression.usda"], invisible_overrides: Some(0) } +layer: $DIR/expression.usda +layer: $DIR/expression_payload.usda +warning: Warning { code: CameraMissing, kind: Skipped, count: 1, prims: [], message: "USD stage has no UsdGeomCamera — falling back to world::get_settings camera" } +lights: 0 +volumes: 0 +world: 6 geometries, PrimitiveBreakdown { triangles: 2, spheres: 5, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 2, spheres: 5, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:f6c33096abc28e3a camera=1:f6c33096abc28e3a shadow=1:f6c33096abc28e3a indirect=1:f6c33096abc28e3a +geom 1: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:35cdd9a0d6e50805 camera=1:35cdd9a0d6e50805 shadow=1:35cdd9a0d6e50805 indirect=1:35cdd9a0d6e50805 +geom 2: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:d51ecb642f0c8e15 camera=1:d51ecb642f0c8e15 shadow=1:d51ecb642f0c8e15 indirect=1:d51ecb642f0c8e15 +geom 3: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:468da3d80ce34d98 camera=1:468da3d80ce34d98 shadow=1:468da3d80ce34d98 indirect=1:468da3d80ce34d98 +geom 4: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:984632b55acb5495 camera=1:984632b55acb5495 shadow=1:984632b55acb5495 indirect=1:984632b55acb5495 +geom 5: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout true transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:e82ca95ac2d366b8 camera=2:e82ca95ac2d366b8 shadow=2:e82ca95ac2d366b8 indirect=2:e82ca95ac2d366b8 +provenance geometry 0..1: /World/Prop3 +provenance geometry 1..2: /World/Prop2 +provenance geometry 2..3: /World/Prop1 +provenance geometry 3..4: /World/Prop0 +provenance geometry 4..5: /World/Chars/Ball +provenance geometry 5..6: /World/Chars/Hero/Skin +provenance mesh: MeshOrigin { geom_id: 5, slot: 0, baked: true, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 7377966807836294734, n_points: 4, n_indices: 4, n_uvs: None, smooth: true, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [0, 1, 2, 3, 4] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: Some("/Render/Passes/meshes"), keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: None, cameras: [], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: None, offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/expression_usda-843ebd908965795b-1.image b/crates/crust-core/tests/data/import_baselines/expression_usda-843ebd908965795b-1.image new file mode 100644 index 000000000..8aad9360c --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/expression_usda-843ebd908965795b-1.image @@ -0,0 +1 @@ +8x8 16spp clamp-off 9fa9e040e0eedf25 diff --git a/crates/crust-core/tests/data/import_baselines/expression_usda-a73e300d098781d5-1.digest b/crates/crust-core/tests/data/import_baselines/expression_usda-a73e300d098781d5-1.digest new file mode 100644 index 000000000..ef2ee146d --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/expression_usda-a73e300d098781d5-1.digest @@ -0,0 +1,32 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: None +camera: Camera { origin: Vec3A(15.0, 3.0, 3.0), lower_left_corner: Vec3A(4.8863316, -0.044797063, 4.174048), horizontal: Vec3A(1.2295314, 0.0, -6.147657), vertical: Vec3A(-0.44830504, 3.4967792, -0.08966101), u: Vec3A(0.19611613, 0.0, -0.9805807), v: Vec3A(-0.1271232, 0.991561, -0.02542464), lens_radius: 0.05, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: Some("/Render/settings") +settings: RenderSettings { samples_per_pixel: 3, max_depth: 32, width: 8, height: 8, region: PixelRect { x0: 0, y0: 0, x1: 8, y1: 8 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: Some(PassSummary { path: "/Render/Passes/chars", holdouts: 2, camera_hidden: 0 }) +source: Source { lens: None, depth_of_field: true, motion_blur: false, layer_stack: ["$DIR/expression.usda"], invisible_overrides: Some(0) } +layer: $DIR/expression.usda +layer: $DIR/expression_payload.usda +warning: Warning { code: CameraMissing, kind: Skipped, count: 1, prims: [], message: "USD stage has no UsdGeomCamera — falling back to world::get_settings camera" } +lights: 0 +volumes: 0 +world: 6 geometries, PrimitiveBreakdown { triangles: 2, spheres: 5, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 2, spheres: 5, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:f6c33096abc28e3a camera=1:f6c33096abc28e3a shadow=1:f6c33096abc28e3a indirect=1:f6c33096abc28e3a +geom 1: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:35cdd9a0d6e50805 camera=1:35cdd9a0d6e50805 shadow=1:35cdd9a0d6e50805 indirect=1:35cdd9a0d6e50805 +geom 2: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:d51ecb642f0c8e15 camera=1:d51ecb642f0c8e15 shadow=1:d51ecb642f0c8e15 indirect=1:d51ecb642f0c8e15 +geom 3: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:468da3d80ce34d98 camera=1:468da3d80ce34d98 shadow=1:468da3d80ce34d98 indirect=1:468da3d80ce34d98 +geom 4: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout true transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:984632b55acb5495 camera=1:984632b55acb5495 shadow=1:984632b55acb5495 indirect=1:984632b55acb5495 +geom 5: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout true transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:e82ca95ac2d366b8 camera=2:e82ca95ac2d366b8 shadow=2:e82ca95ac2d366b8 indirect=2:e82ca95ac2d366b8 +provenance geometry 0..1: /World/Prop3 +provenance geometry 1..2: /World/Prop2 +provenance geometry 2..3: /World/Prop1 +provenance geometry 3..4: /World/Prop0 +provenance geometry 4..5: /World/Chars/Ball +provenance geometry 5..6: /World/Chars/Hero/Skin +provenance mesh: MeshOrigin { geom_id: 5, slot: 0, baked: true, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 7377966807836294734, n_points: 4, n_indices: 4, n_uvs: None, smooth: true, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [0, 1, 2, 3, 4] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: Some("/Render/Passes/chars"), keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: None, cameras: [], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: None, offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/expression_usda-a73e300d098781d5-1.image b/crates/crust-core/tests/data/import_baselines/expression_usda-a73e300d098781d5-1.image new file mode 100644 index 000000000..8aad9360c --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/expression_usda-a73e300d098781d5-1.image @@ -0,0 +1 @@ +8x8 16spp clamp-off 9fa9e040e0eedf25 diff --git a/crates/crust-core/tests/data/import_baselines/expression_usda-e90ffc3af7a5e58d-1.digest b/crates/crust-core/tests/data/import_baselines/expression_usda-e90ffc3af7a5e58d-1.digest new file mode 100644 index 000000000..ef2ee146d --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/expression_usda-e90ffc3af7a5e58d-1.digest @@ -0,0 +1,32 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: None +camera: Camera { origin: Vec3A(15.0, 3.0, 3.0), lower_left_corner: Vec3A(4.8863316, -0.044797063, 4.174048), horizontal: Vec3A(1.2295314, 0.0, -6.147657), vertical: Vec3A(-0.44830504, 3.4967792, -0.08966101), u: Vec3A(0.19611613, 0.0, -0.9805807), v: Vec3A(-0.1271232, 0.991561, -0.02542464), lens_radius: 0.05, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: Some("/Render/settings") +settings: RenderSettings { samples_per_pixel: 3, max_depth: 32, width: 8, height: 8, region: PixelRect { x0: 0, y0: 0, x1: 8, y1: 8 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: Some(PassSummary { path: "/Render/Passes/chars", holdouts: 2, camera_hidden: 0 }) +source: Source { lens: None, depth_of_field: true, motion_blur: false, layer_stack: ["$DIR/expression.usda"], invisible_overrides: Some(0) } +layer: $DIR/expression.usda +layer: $DIR/expression_payload.usda +warning: Warning { code: CameraMissing, kind: Skipped, count: 1, prims: [], message: "USD stage has no UsdGeomCamera — falling back to world::get_settings camera" } +lights: 0 +volumes: 0 +world: 6 geometries, PrimitiveBreakdown { triangles: 2, spheres: 5, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 2, spheres: 5, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:f6c33096abc28e3a camera=1:f6c33096abc28e3a shadow=1:f6c33096abc28e3a indirect=1:f6c33096abc28e3a +geom 1: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:35cdd9a0d6e50805 camera=1:35cdd9a0d6e50805 shadow=1:35cdd9a0d6e50805 indirect=1:35cdd9a0d6e50805 +geom 2: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:d51ecb642f0c8e15 camera=1:d51ecb642f0c8e15 shadow=1:d51ecb642f0c8e15 indirect=1:d51ecb642f0c8e15 +geom 3: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:468da3d80ce34d98 camera=1:468da3d80ce34d98 shadow=1:468da3d80ce34d98 indirect=1:468da3d80ce34d98 +geom 4: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout true transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:984632b55acb5495 camera=1:984632b55acb5495 shadow=1:984632b55acb5495 indirect=1:984632b55acb5495 +geom 5: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout true transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:e82ca95ac2d366b8 camera=2:e82ca95ac2d366b8 shadow=2:e82ca95ac2d366b8 indirect=2:e82ca95ac2d366b8 +provenance geometry 0..1: /World/Prop3 +provenance geometry 1..2: /World/Prop2 +provenance geometry 2..3: /World/Prop1 +provenance geometry 3..4: /World/Prop0 +provenance geometry 4..5: /World/Chars/Ball +provenance geometry 5..6: /World/Chars/Hero/Skin +provenance mesh: MeshOrigin { geom_id: 5, slot: 0, baked: true, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 7377966807836294734, n_points: 4, n_indices: 4, n_uvs: None, smooth: true, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [0, 1, 2, 3, 4] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: Some("/Render/Passes/chars"), keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: None, cameras: [], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: None, offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/expression_usda-e90ffc3af7a5e58d-1.image b/crates/crust-core/tests/data/import_baselines/expression_usda-e90ffc3af7a5e58d-1.image new file mode 100644 index 000000000..8aad9360c --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/expression_usda-e90ffc3af7a5e58d-1.image @@ -0,0 +1 @@ +8x8 16spp clamp-off 9fa9e040e0eedf25 diff --git a/crates/crust-core/tests/data/import_baselines/expression_usda-f9c5b6a77f39c5a3-1.digest b/crates/crust-core/tests/data/import_baselines/expression_usda-f9c5b6a77f39c5a3-1.digest new file mode 100644 index 000000000..1b055536a --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/expression_usda-f9c5b6a77f39c5a3-1.digest @@ -0,0 +1,32 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: None +camera: Camera { origin: Vec3A(15.0, 3.0, 3.0), lower_left_corner: Vec3A(4.8863316, -0.044797063, 4.174048), horizontal: Vec3A(1.2295314, 0.0, -6.147657), vertical: Vec3A(-0.44830504, 3.4967792, -0.08966101), u: Vec3A(0.19611613, 0.0, -0.9805807), v: Vec3A(-0.1271232, 0.991561, -0.02542464), lens_radius: 0.05, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: Some("/Render/settings") +settings: RenderSettings { samples_per_pixel: 3, max_depth: 32, width: 8, height: 8, region: PixelRect { x0: 0, y0: 0, x1: 8, y1: 8 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: Some(PassSummary { path: "/Render/Passes/meshes", holdouts: 1, camera_hidden: 0 }) +source: Source { lens: None, depth_of_field: true, motion_blur: false, layer_stack: ["$DIR/expression.usda"], invisible_overrides: Some(0) } +layer: $DIR/expression.usda +layer: $DIR/expression_payload.usda +warning: Warning { code: CameraMissing, kind: Skipped, count: 1, prims: [], message: "USD stage has no UsdGeomCamera — falling back to world::get_settings camera" } +lights: 0 +volumes: 0 +world: 6 geometries, PrimitiveBreakdown { triangles: 2, spheres: 5, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 2, spheres: 5, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:f6c33096abc28e3a camera=1:f6c33096abc28e3a shadow=1:f6c33096abc28e3a indirect=1:f6c33096abc28e3a +geom 1: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:35cdd9a0d6e50805 camera=1:35cdd9a0d6e50805 shadow=1:35cdd9a0d6e50805 indirect=1:35cdd9a0d6e50805 +geom 2: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:d51ecb642f0c8e15 camera=1:d51ecb642f0c8e15 shadow=1:d51ecb642f0c8e15 indirect=1:d51ecb642f0c8e15 +geom 3: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:468da3d80ce34d98 camera=1:468da3d80ce34d98 shadow=1:468da3d80ce34d98 indirect=1:468da3d80ce34d98 +geom 4: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:984632b55acb5495 camera=1:984632b55acb5495 shadow=1:984632b55acb5495 indirect=1:984632b55acb5495 +geom 5: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout true transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:e82ca95ac2d366b8 camera=2:e82ca95ac2d366b8 shadow=2:e82ca95ac2d366b8 indirect=2:e82ca95ac2d366b8 +provenance geometry 0..1: /World/Prop3 +provenance geometry 1..2: /World/Prop2 +provenance geometry 2..3: /World/Prop1 +provenance geometry 3..4: /World/Prop0 +provenance geometry 4..5: /World/Chars/Ball +provenance geometry 5..6: /World/Chars/Hero/Skin +provenance mesh: MeshOrigin { geom_id: 5, slot: 0, baked: true, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 7377966807836294734, n_points: 4, n_indices: 4, n_uvs: None, smooth: true, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [0, 1, 2, 3, 4] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: Some("/Render/Passes/meshes"), keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: None, cameras: [], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: None, offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/expression_usda-f9c5b6a77f39c5a3-1.image b/crates/crust-core/tests/data/import_baselines/expression_usda-f9c5b6a77f39c5a3-1.image new file mode 100644 index 000000000..8aad9360c --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/expression_usda-f9c5b6a77f39c5a3-1.image @@ -0,0 +1 @@ +8x8 16spp clamp-off 9fa9e040e0eedf25 diff --git a/crates/crust-core/tests/data/import_baselines/fallback_usda-0dcbe995ba9d33f5-1.digest b/crates/crust-core/tests/data/import_baselines/fallback_usda-0dcbe995ba9d33f5-1.digest new file mode 100644 index 000000000..d6fd2926d --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/fallback_usda-0dcbe995ba9d33f5-1.digest @@ -0,0 +1,32 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: None +camera: Camera { origin: Vec3A(15.0, 3.0, 3.0), lower_left_corner: Vec3A(4.8863316, -0.044797063, 4.174048), horizontal: Vec3A(1.2295314, 0.0, -6.147657), vertical: Vec3A(-0.44830504, 3.4967792, -0.08966101), u: Vec3A(0.19611613, 0.0, -0.9805807), v: Vec3A(-0.1271232, 0.991561, -0.02542464), lens_radius: 0.05, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: None +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 640, height: 360, region: PixelRect { x0: 0, y0: 0, x1: 640, y1: 360 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: None, depth_of_field: true, motion_blur: false, layer_stack: ["$DIR/fallback.usda"], invisible_overrides: Some(0) } +layer: $DIR/fallback.usda +warning: Warning { code: CameraMissing, kind: Skipped, count: 1, prims: [], message: "USD stage has no UsdGeomCamera — falling back to world::get_settings camera" } +lights: 0 +volumes: 0 +world: 3 geometries, PrimitiveBreakdown { triangles: 6, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 6, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:e52d9a39978026c5 camera=2:e52d9a39978026c5 shadow=2:e52d9a39978026c5 indirect=2:e52d9a39978026c5 +geom 1: material #1 Signature { kind: "UsdPreviewSurface (textured)", cutout: false, straight: false, boundary: false, emits: false, uv: true, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv Some(0) shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:71682785a2d90a85 camera=2:71682785a2d90a85 shadow=2:71682785a2d90a85 indirect=2:71682785a2d90a85 +geom 2: material #2 Signature { kind: "UsdPreviewSurface (textured)", cutout: false, straight: false, boundary: false, emits: false, uv: true, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv Some(1) shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:658935472ec9d838 camera=2:658935472ec9d838 shadow=2:658935472ec9d838 indirect=2:658935472ec9d838 +provenance material /W/Looks/Plain: MaterialOrigin { slots: [0], displaced: false } +provenance material /W/Looks/WithConstant: MaterialOrigin { slots: [1], displaced: false } +provenance material /W/Looks/WithFallback: MaterialOrigin { slots: [2], displaced: false } +provenance geometry 0..1: /W/Geo/C +provenance geometry 1..2: /W/Geo/B +provenance geometry 2..3: /W/Geo/A +provenance mesh: MeshOrigin { geom_id: 0, slot: 0, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 1, slot: 1, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 2, slot: 2, baked: true, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 204846636954257726, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 1: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 13714614058947076987, n_points: 4, n_indices: 4, n_uvs: Some(4), smooth: false, material: 1 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 2: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 7102539751037723505, n_points: 4, n_indices: 4, n_uvs: Some(4), smooth: false, material: 2 }), placements: 1, shared: false, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: None, cameras: [], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: None, offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/fallback_usda-0dcbe995ba9d33f5-1.image b/crates/crust-core/tests/data/import_baselines/fallback_usda-0dcbe995ba9d33f5-1.image new file mode 100644 index 000000000..c734c5b1d --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/fallback_usda-0dcbe995ba9d33f5-1.image @@ -0,0 +1 @@ +640x360 16spp clamp-off a04a09c0d4b5e325 diff --git a/crates/crust-core/tests/data/import_baselines/fallbacks_usda-19de7bd844b31582-1.digest b/crates/crust-core/tests/data/import_baselines/fallbacks_usda-19de7bd844b31582-1.digest new file mode 100644 index 000000000..e15b69408 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/fallbacks_usda-19de7bd844b31582-1.digest @@ -0,0 +1,29 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/W/Cam") +camera: Camera { origin: Vec3A(0.0, 0.0, 0.0), lower_left_corner: Vec3A(-2.0955, -1.1787187, -10.0), horizontal: Vec3A(4.191, 0.0, 0.0), vertical: Vec3A(0.0, 2.3574374, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: Some("/Render/settings") +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 640, height: 360, region: PixelRect { x0: 0, y0: 0, x1: 640, y1: 360 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 50.0, aperture: [20.955, 11.787188], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 10.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/fallbacks.usda"], invisible_overrides: Some(0) } +layer: $DIR/fallbacks.usda +lights: 0 +volumes: 0 +world: 3 geometries, PrimitiveBreakdown { triangles: 746, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 746, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=614:e346211ba8f75fb3 camera=614:e346211ba8f75fb3 shadow=614:e346211ba8f75fb3 indirect=614:e346211ba8f75fb3 +geom 1: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=4:3d2a5583044d7000 camera=4:3d2a5583044d7000 shadow=4:3d2a5583044d7000 indirect=4:3d2a5583044d7000 +geom 2: material #1 Signature { kind: "MaterialX", cutout: false, straight: false, boundary: false, emits: false, uv: true, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv Some(0) shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=128:d3d574bf0a638748 camera=128:d3d574bf0a638748 shadow=128:d3d574bf0a638748 indirect=128:d3d574bf0a638748 +provenance material /W/Looks/Mtl: MaterialOrigin { slots: [2], displaced: false } +provenance geometry 0..1: /W/Plain +provenance geometry 1..2: /W/Loop +provenance geometry 2..3: /W/Charted +provenance mesh: MeshOrigin { geom_id: 0, slot: 0, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 1, slot: 1, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 2, slot: 2, baked: true, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 18222910834673307205, n_points: 309, n_indices: 1842, n_uvs: None, smooth: true, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 1: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 16884212571384875336, n_points: 4, n_indices: 12, n_uvs: None, smooth: true, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 2: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 16045738747203913522, n_points: 81, n_indices: 384, n_uvs: Some(81), smooth: true, material: 1 }), placements: 1, shared: false, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: Some(ScreenKey([0, 0, 0, 1153360542, 0, 0, 0, 3212836864, 0, 3193345094, 1065353216, 0, 3193345094, 0, 3212836864, 3186714319, 0, 1065353216, 3186714319, 0, 0, 3212836864, 1073741824, 3])), domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/W/Cam"), cameras: ["/W/Cam"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/W/Cam"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/fallbacks_usda-19de7bd844b31582-1.image b/crates/crust-core/tests/data/import_baselines/fallbacks_usda-19de7bd844b31582-1.image new file mode 100644 index 000000000..c734c5b1d --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/fallbacks_usda-19de7bd844b31582-1.image @@ -0,0 +1 @@ +640x360 16spp clamp-off a04a09c0d4b5e325 diff --git a/crates/crust-core/tests/data/import_baselines/far_light_blocked_usda-ad271da815e04f1e-1.digest b/crates/crust-core/tests/data/import_baselines/far_light_blocked_usda-ad271da815e04f1e-1.digest new file mode 100644 index 000000000..4890dc992 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/far_light_blocked_usda-ad271da815e04f1e-1.digest @@ -0,0 +1,29 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: None +camera: Camera { origin: Vec3A(15.0, 3.0, 3.0), lower_left_corner: Vec3A(4.8863316, -0.044797063, 4.174048), horizontal: Vec3A(1.2295314, 0.0, -6.147657), vertical: Vec3A(-0.44830504, 3.4967792, -0.08966101), u: Vec3A(0.19611613, 0.0, -0.9805807), v: Vec3A(-0.1271232, 0.991561, -0.02542464), lens_radius: 0.05, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: None +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 640, height: 360, region: PixelRect { x0: 0, y0: 0, x1: 640, y1: 360 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: None, depth_of_field: true, motion_blur: false, layer_stack: ["$DIR/far_light_blocked.usda"], invisible_overrides: Some(0) } +layer: $DIR/far_light_blocked.usda +warning: Warning { code: CameraMissing, kind: Skipped, count: 1, prims: [], message: "USD stage has no UsdGeomCamera — falling back to world::get_settings camera" } +lights: 1 +light 0: area name Some("/World/Sun") lpe None pmf 1.0 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 3 geometries, PrimitiveBreakdown { triangles: 6, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 6, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:f761420f7326e0c1 camera=2:f761420f7326e0c1 shadow=2:f761420f7326e0c1 indirect=2:f761420f7326e0c1 +geom 1: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:fce6de5b675a55c5 camera=2:fce6de5b675a55c5 shadow=2:fce6de5b675a55c5 indirect=2:fce6de5b675a55c5 +geom 2: material #1 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:98baf1312be377e5 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=2:98baf1312be377e5 +provenance light /World/Sun: LightOrigin { index: 0, geoms: 2..3 } +provenance geometry 0..1: /World/Blocker +provenance geometry 1..2: /World/Ground +provenance geometry 2..3: /World/Sun +provenance mesh: MeshOrigin { geom_id: 0, slot: 0, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 1, slot: 1, baked: true, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 17572034852625986120, n_points: 4, n_indices: 4, n_uvs: None, smooth: true, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 1: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 14903623499644419787, n_points: 4, n_indices: 4, n_uvs: None, smooth: true, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: None, cameras: [], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: None, offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/far_light_blocked_usda-ad271da815e04f1e-1.image b/crates/crust-core/tests/data/import_baselines/far_light_blocked_usda-ad271da815e04f1e-1.image new file mode 100644 index 000000000..3872692e5 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/far_light_blocked_usda-ad271da815e04f1e-1.image @@ -0,0 +1 @@ +640x360 16spp clamp-off db5516db2665342e diff --git a/crates/crust-core/tests/data/import_baselines/far_light_clear_usda-4072c77a8d9198cd-1.digest b/crates/crust-core/tests/data/import_baselines/far_light_clear_usda-4072c77a8d9198cd-1.digest new file mode 100644 index 000000000..083232e69 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/far_light_clear_usda-4072c77a8d9198cd-1.digest @@ -0,0 +1,25 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: None +camera: Camera { origin: Vec3A(15.0, 3.0, 3.0), lower_left_corner: Vec3A(4.8863316, -0.044797063, 4.174048), horizontal: Vec3A(1.2295314, 0.0, -6.147657), vertical: Vec3A(-0.44830504, 3.4967792, -0.08966101), u: Vec3A(0.19611613, 0.0, -0.9805807), v: Vec3A(-0.1271232, 0.991561, -0.02542464), lens_radius: 0.05, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: None +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 640, height: 360, region: PixelRect { x0: 0, y0: 0, x1: 640, y1: 360 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: None, depth_of_field: true, motion_blur: false, layer_stack: ["$DIR/far_light_clear.usda"], invisible_overrides: Some(0) } +layer: $DIR/far_light_clear.usda +warning: Warning { code: CameraMissing, kind: Skipped, count: 1, prims: [], message: "USD stage has no UsdGeomCamera — falling back to world::get_settings camera" } +lights: 1 +light 0: area name Some("/World/Sun") lpe None pmf 1.0 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 2 geometries, PrimitiveBreakdown { triangles: 4, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 4, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:fce6de5b675a55c5 camera=2:fce6de5b675a55c5 shadow=2:fce6de5b675a55c5 indirect=2:fce6de5b675a55c5 +geom 1: material #1 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:98baf1312be377e5 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=2:98baf1312be377e5 +provenance light /World/Sun: LightOrigin { index: 0, geoms: 1..2 } +provenance geometry 0..1: /World/Ground +provenance geometry 1..2: /World/Sun +provenance mesh: MeshOrigin { geom_id: 0, slot: 0, baked: true, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 14903623499644419787, n_points: 4, n_indices: 4, n_uvs: None, smooth: true, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: None, cameras: [], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: None, offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/far_light_clear_usda-4072c77a8d9198cd-1.image b/crates/crust-core/tests/data/import_baselines/far_light_clear_usda-4072c77a8d9198cd-1.image new file mode 100644 index 000000000..b191c3857 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/far_light_clear_usda-4072c77a8d9198cd-1.image @@ -0,0 +1 @@ +640x360 16spp clamp-off 462318a5c0324fb1 diff --git a/crates/crust-core/tests/data/import_baselines/far_light_dimmed_usda-8a326222fcc01e51-1.digest b/crates/crust-core/tests/data/import_baselines/far_light_dimmed_usda-8a326222fcc01e51-1.digest new file mode 100644 index 000000000..a2e33490f --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/far_light_dimmed_usda-8a326222fcc01e51-1.digest @@ -0,0 +1,26 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: None +camera: Camera { origin: Vec3A(15.0, 3.0, 3.0), lower_left_corner: Vec3A(4.8863316, -0.044797063, 4.174048), horizontal: Vec3A(1.2295314, 0.0, -6.147657), vertical: Vec3A(-0.44830504, 3.4967792, -0.08966101), u: Vec3A(0.19611613, 0.0, -0.9805807), v: Vec3A(-0.1271232, 0.991561, -0.02542464), lens_radius: 0.05, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: None +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 640, height: 360, region: PixelRect { x0: 0, y0: 0, x1: 640, y1: 360 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: None, depth_of_field: true, motion_blur: false, layer_stack: ["$DIR/far_light_dimmed.usda"], invisible_overrides: Some(0) } +layer: $DIR/far_light_dimmed.usda +warning: Warning { code: CameraMissing, kind: Skipped, count: 1, prims: [], message: "USD stage has no UsdGeomCamera — falling back to world::get_settings camera" } +lights: 1 +light 0: area name Some("/World/Sun") lpe None pmf 1.0 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 1 +volume 0: sigma_s Vec3A(0.0, 0.0, 0.0) sigma_a Vec3A(20.0, 20.0, 20.0) g 0.0 emission Vec3A(0.0, 0.0, 0.0) mask RayMask(4294967295) class 65535 homogeneous true +world: 2 geometries, PrimitiveBreakdown { triangles: 4, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 4, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:fce6de5b675a55c5 camera=2:fce6de5b675a55c5 shadow=2:fce6de5b675a55c5 indirect=2:fce6de5b675a55c5 +geom 1: material #1 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:98baf1312be377e5 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=2:98baf1312be377e5 +provenance light /World/Sun: LightOrigin { index: 0, geoms: 1..2 } +provenance geometry 0..1: /World/Ground +provenance geometry 1..2: /World/Sun +provenance mesh: MeshOrigin { geom_id: 0, slot: 0, baked: true, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 14903623499644419787, n_points: 4, n_indices: 4, n_uvs: None, smooth: true, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [] +provenance volumes: ["/World/Haze"] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: None, cameras: [], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: None, offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/far_light_dimmed_usda-8a326222fcc01e51-1.image b/crates/crust-core/tests/data/import_baselines/far_light_dimmed_usda-8a326222fcc01e51-1.image new file mode 100644 index 000000000..f185f2a59 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/far_light_dimmed_usda-8a326222fcc01e51-1.image @@ -0,0 +1 @@ +640x360 16spp clamp-off b2598f4097135347 diff --git a/crates/crust-core/tests/data/import_baselines/filters_usda-c37f75b53580c4aa-1.digest b/crates/crust-core/tests/data/import_baselines/filters_usda-c37f75b53580c4aa-1.digest new file mode 100644 index 000000000..e762aa27a --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/filters_usda-c37f75b53580c4aa-1.digest @@ -0,0 +1,18 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/World/other") +camera: Camera { origin: Vec3A(0.0, 0.0, 0.0), lower_left_corner: Vec3A(-2.7183647, -1.5290802, -10.0), horizontal: Vec3A(5.4367294, 0.0, 0.0), vertical: Vec3A(0.0, 3.0581603, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: Some("/Render/settings") +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 640, height: 360, region: PixelRect { x0: 0, y0: 0, x1: 640, y1: 360 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [AovProduct { prim_path: "/Render/p", name: "p.exr", vars: [AovVar { prim_path: "/Render/arnold", name: "arnold", channel_prefix: None, source: Normal, components: 3, precision: Float, accumulation: Closest, clear: 0.0, expression: None, raw: false, variance: false }, AovVar { prim_path: "/Render/karma", name: "karma", channel_prefix: None, source: Alpha, components: 1, precision: Float, accumulation: Closest, clear: 0.0, expression: None, raw: false, variance: false }, AovVar { prim_path: "/Render/rman", name: "rman", channel_prefix: None, source: St, components: 2, precision: Float, accumulation: Closest, clear: 0.0, expression: None, raw: false, variance: false }, AovVar { prim_path: "/Render/multi", name: "multi", channel_prefix: None, source: Depth, components: 1, precision: Float, accumulation: Filtered, clear: inf, expression: None, raw: false, variance: false }], attributes: [] }], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 50.0, aperture: [20.955, 15.2908], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 10.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/filters.usda"], invisible_overrides: Some(0) } +layer: $DIR/filters.usda +lights: 0 +volumes: 0 +world: 1 geometries, PrimitiveBreakdown { triangles: 0, spheres: 1, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 0, spheres: 1, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:fb1e7d48790aec95 camera=1:fb1e7d48790aec95 shadow=1:fb1e7d48790aec95 indirect=1:fb1e7d48790aec95 +provenance geometry 0..1: /World/ball +provenance spheres: [0] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/World/other"), cameras: ["/World/other", "/World/cam"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/World/other"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/filters_usda-c37f75b53580c4aa-1.image b/crates/crust-core/tests/data/import_baselines/filters_usda-c37f75b53580c4aa-1.image new file mode 100644 index 000000000..c734c5b1d --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/filters_usda-c37f75b53580c4aa-1.image @@ -0,0 +1 @@ +640x360 16spp clamp-off a04a09c0d4b5e325 diff --git a/crates/crust-core/tests/data/import_baselines/five_usda-1346633108536d3b-1.digest b/crates/crust-core/tests/data/import_baselines/five_usda-1346633108536d3b-1.digest new file mode 100644 index 000000000..e59cfc881 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/five_usda-1346633108536d3b-1.digest @@ -0,0 +1,26 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/World/Cam") +camera: Camera { origin: Vec3A(0.0, 0.0, 0.0), lower_left_corner: Vec3A(-2.7183647, -1.5290802, -10.0), horizontal: Vec3A(5.4367294, 0.0, 0.0), vertical: Vec3A(0.0, 3.0581603, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: None +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 640, height: 360, region: PixelRect { x0: 0, y0: 0, x1: 640, y1: 360 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 50.0, aperture: [20.955, 15.2908], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 10.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/five.usda"], invisible_overrides: Some(0) } +layer: $DIR/five.usda +lights: 0 +volumes: 0 +world: 5 geometries, PrimitiveBreakdown { triangles: 0, spheres: 5, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 0, spheres: 5, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:c590b07dfa2f3d93 camera=1:c590b07dfa2f3d93 shadow=1:c590b07dfa2f3d93 indirect=1:c590b07dfa2f3d93 +geom 1: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:5bad523f30a52c86 camera=1:5bad523f30a52c86 shadow=1:5bad523f30a52c86 indirect=1:5bad523f30a52c86 +geom 2: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:3652186f2409e5d3 camera=1:3652186f2409e5d3 shadow=1:3652186f2409e5d3 indirect=1:3652186f2409e5d3 +geom 3: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:ae6d1e638460c55a camera=1:ae6d1e638460c55a shadow=1:ae6d1e638460c55a indirect=1:ae6d1e638460c55a +geom 4: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:bac7a9afc297cdcf camera=1:bac7a9afc297cdcf shadow=1:bac7a9afc297cdcf indirect=1:bac7a9afc297cdcf +provenance geometry 0..1: /World/S0 +provenance geometry 1..2: /World/S1 +provenance geometry 2..3: /World/S2 +provenance geometry 3..4: /World/S3 +provenance geometry 4..5: /World/S4 +provenance spheres: [0, 1, 2, 3, 4] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: true, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/World/Cam"), cameras: ["/World/Cam"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/World/Cam"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/five_usda-1346633108536d3b-1.image b/crates/crust-core/tests/data/import_baselines/five_usda-1346633108536d3b-1.image new file mode 100644 index 000000000..c734c5b1d --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/five_usda-1346633108536d3b-1.image @@ -0,0 +1 @@ +640x360 16spp clamp-off a04a09c0d4b5e325 diff --git a/crates/crust-core/tests/data/import_baselines/five_usda-98f6c3806296ddf6-1.digest b/crates/crust-core/tests/data/import_baselines/five_usda-98f6c3806296ddf6-1.digest new file mode 100644 index 000000000..b11d4e202 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/five_usda-98f6c3806296ddf6-1.digest @@ -0,0 +1,26 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/World/Cam") +camera: Camera { origin: Vec3A(0.0, 0.0, 0.0), lower_left_corner: Vec3A(-2.7183647, -1.5290802, -10.0), horizontal: Vec3A(5.4367294, 0.0, 0.0), vertical: Vec3A(0.0, 3.0581603, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: None +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 640, height: 360, region: PixelRect { x0: 0, y0: 0, x1: 640, y1: 360 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 50.0, aperture: [20.955, 15.2908], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 10.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/five.usda"], invisible_overrides: Some(0) } +layer: $DIR/five.usda +lights: 0 +volumes: 0 +world: 5 geometries, PrimitiveBreakdown { triangles: 0, spheres: 5, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 0, spheres: 5, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:c590b07dfa2f3d93 camera=1:c590b07dfa2f3d93 shadow=1:c590b07dfa2f3d93 indirect=1:c590b07dfa2f3d93 +geom 1: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:5bad523f30a52c86 camera=1:5bad523f30a52c86 shadow=1:5bad523f30a52c86 indirect=1:5bad523f30a52c86 +geom 2: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:3652186f2409e5d3 camera=1:3652186f2409e5d3 shadow=1:3652186f2409e5d3 indirect=1:3652186f2409e5d3 +geom 3: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:ae6d1e638460c55a camera=1:ae6d1e638460c55a shadow=1:ae6d1e638460c55a indirect=1:ae6d1e638460c55a +geom 4: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:bac7a9afc297cdcf camera=1:bac7a9afc297cdcf shadow=1:bac7a9afc297cdcf indirect=1:bac7a9afc297cdcf +provenance geometry 0..1: /World/S0 +provenance geometry 1..2: /World/S1 +provenance geometry 2..3: /World/S2 +provenance geometry 3..4: /World/S3 +provenance geometry 4..5: /World/S4 +provenance spheres: [0, 1, 2, 3, 4] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/World/Cam"), cameras: ["/World/Cam"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/World/Cam"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/five_usda-98f6c3806296ddf6-1.image b/crates/crust-core/tests/data/import_baselines/five_usda-98f6c3806296ddf6-1.image new file mode 100644 index 000000000..c734c5b1d --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/five_usda-98f6c3806296ddf6-1.image @@ -0,0 +1 @@ +640x360 16spp clamp-off a04a09c0d4b5e325 diff --git a/crates/crust-core/tests/data/import_baselines/fog_a_usda-c25ea86ab9b74771-1.digest b/crates/crust-core/tests/data/import_baselines/fog_a_usda-c25ea86ab9b74771-1.digest new file mode 100644 index 000000000..20eba1f7b --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/fog_a_usda-c25ea86ab9b74771-1.digest @@ -0,0 +1,25 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/World/Cam") +camera: Camera { origin: Vec3A(0.0, 1.0, 0.0), lower_left_corner: Vec3A(-2.0000002, -9.0, 2.0000002), horizontal: Vec3A(4.0000005, -0.0, 0.0), vertical: Vec3A(0.0, 8.881785e-16, -4.0000005), u: Vec3A(1.0, -0.0, 0.0), v: Vec3A(0.0, 2.220446e-16, -1.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: Some("/Render/settings") +settings: RenderSettings { samples_per_pixel: 4096, max_depth: 3, width: 4, height: 4, region: PixelRect { x0: 0, y0: 0, x1: 4, y1: 4 }, min_samples_per_pixel: 4096, variance_threshold: 0.0, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: None, light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 50.0, aperture: [20.0, 20.0], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 10.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/fog_a.usda"], invisible_overrides: Some(0) } +layer: $DIR/fog_a.usda +lights: 1 +light 0: area name Some("/World/A") lpe None pmf 1.0 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 1 +volume 0: sigma_s Vec3A(0.15, 0.15, 0.15) sigma_a Vec3A(0.1, 0.1, 0.1) g 0.0 emission Vec3A(0.0, 0.0, 0.0) mask RayMask(4294967295) class 65535 homogeneous true +world: 2 geometries, PrimitiveBreakdown { triangles: 2, spheres: 1, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 2, spheres: 1, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +geom 0: material #0 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:ea8cf4535fd53b08 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=1:ea8cf4535fd53b08 +geom 1: material #1 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:fce6de5b675a55c5 camera=2:fce6de5b675a55c5 shadow=2:fce6de5b675a55c5 indirect=2:fce6de5b675a55c5 +provenance light /World/A: LightOrigin { index: 0, geoms: 0..1 } +provenance geometry 0..1: /World/A +provenance geometry 1..2: /World/Floor +provenance mesh: MeshOrigin { geom_id: 1, slot: 0, baked: true, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 14903623499644419787, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [] +provenance volumes: ["/World/Fog"] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/World/Cam"), cameras: ["/World/Cam"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/World/Cam"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/fog_a_usda-c25ea86ab9b74771-1.image b/crates/crust-core/tests/data/import_baselines/fog_a_usda-c25ea86ab9b74771-1.image new file mode 100644 index 000000000..6c3ad9327 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/fog_a_usda-c25ea86ab9b74771-1.image @@ -0,0 +1 @@ +4x4 16spp clamp-off f8f86a118c6a0a31 diff --git a/crates/crust-core/tests/data/import_baselines/fog_b_usda-d165df586bcbb934-1.digest b/crates/crust-core/tests/data/import_baselines/fog_b_usda-d165df586bcbb934-1.digest new file mode 100644 index 000000000..8db889420 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/fog_b_usda-d165df586bcbb934-1.digest @@ -0,0 +1,25 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/World/Cam") +camera: Camera { origin: Vec3A(0.0, 1.0, 0.0), lower_left_corner: Vec3A(-2.0000002, -9.0, 2.0000002), horizontal: Vec3A(4.0000005, -0.0, 0.0), vertical: Vec3A(0.0, 8.881785e-16, -4.0000005), u: Vec3A(1.0, -0.0, 0.0), v: Vec3A(0.0, 2.220446e-16, -1.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: Some("/Render/settings") +settings: RenderSettings { samples_per_pixel: 4096, max_depth: 3, width: 4, height: 4, region: PixelRect { x0: 0, y0: 0, x1: 4, y1: 4 }, min_samples_per_pixel: 4096, variance_threshold: 0.0, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: None, light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 50.0, aperture: [20.0, 20.0], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 10.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/fog_b.usda"], invisible_overrides: Some(0) } +layer: $DIR/fog_b.usda +lights: 1 +light 0: area name Some("/World/B") lpe None pmf 1.0 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 1 +volume 0: sigma_s Vec3A(0.15, 0.15, 0.15) sigma_a Vec3A(0.1, 0.1, 0.1) g 0.0 emission Vec3A(0.0, 0.0, 0.0) mask RayMask(4294967295) class 65535 homogeneous true +world: 2 geometries, PrimitiveBreakdown { triangles: 2, spheres: 1, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 2, spheres: 1, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +geom 0: material #0 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:97233df63c15c661 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=1:97233df63c15c661 +geom 1: material #1 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:fce6de5b675a55c5 camera=2:fce6de5b675a55c5 shadow=2:fce6de5b675a55c5 indirect=2:fce6de5b675a55c5 +provenance light /World/B: LightOrigin { index: 0, geoms: 0..1 } +provenance geometry 0..1: /World/B +provenance geometry 1..2: /World/Floor +provenance mesh: MeshOrigin { geom_id: 1, slot: 0, baked: true, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 14903623499644419787, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [] +provenance volumes: ["/World/Fog"] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/World/Cam"), cameras: ["/World/Cam"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/World/Cam"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/fog_b_usda-d165df586bcbb934-1.image b/crates/crust-core/tests/data/import_baselines/fog_b_usda-d165df586bcbb934-1.image new file mode 100644 index 000000000..290379027 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/fog_b_usda-d165df586bcbb934-1.image @@ -0,0 +1 @@ +4x4 16spp clamp-off 4e2b562253bec41b diff --git a/crates/crust-core/tests/data/import_baselines/fog_bsdf_usda-240806b5ed98a443-1.digest b/crates/crust-core/tests/data/import_baselines/fog_bsdf_usda-240806b5ed98a443-1.digest new file mode 100644 index 000000000..49d71bbd3 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/fog_bsdf_usda-240806b5ed98a443-1.digest @@ -0,0 +1,29 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/World/Cam") +camera: Camera { origin: Vec3A(0.0, 1.0, 0.0), lower_left_corner: Vec3A(-2.0000002, -9.0, 2.0000002), horizontal: Vec3A(4.0000005, -0.0, 0.0), vertical: Vec3A(0.0, 8.881785e-16, -4.0000005), u: Vec3A(1.0, -0.0, 0.0), v: Vec3A(0.0, 2.220446e-16, -1.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: Some("/Render/settings") +settings: RenderSettings { samples_per_pixel: 16384, max_depth: 3, width: 4, height: 4, region: PixelRect { x0: 0, y0: 0, x1: 4, y1: 4 }, min_samples_per_pixel: 16384, variance_threshold: 0.0, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: BsdfOnly, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: None, light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 50.0, aperture: [20.0, 20.0], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 10.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/fog_bsdf.usda"], invisible_overrides: Some(0) } +layer: $DIR/fog_bsdf.usda +lights: 2 +light 0: area name Some("/World/B") lpe None pmf 0.5 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 1: area name Some("/World/A") lpe None pmf 0.5 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 1 +volume 0: sigma_s Vec3A(0.15, 0.15, 0.15) sigma_a Vec3A(0.1, 0.1, 0.1) g 0.0 emission Vec3A(0.0, 0.0, 0.0) mask RayMask(4294967295) class 65535 homogeneous true +world: 3 geometries, PrimitiveBreakdown { triangles: 2, spheres: 2, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 2, spheres: 2, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +geom 0: material #0 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:97233df63c15c661 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=1:97233df63c15c661 +geom 1: material #1 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:ea8cf4535fd53b08 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=1:ea8cf4535fd53b08 +geom 2: material #2 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:fce6de5b675a55c5 camera=2:fce6de5b675a55c5 shadow=2:fce6de5b675a55c5 indirect=2:fce6de5b675a55c5 +provenance light /World/A: LightOrigin { index: 1, geoms: 1..2 } +provenance light /World/B: LightOrigin { index: 0, geoms: 0..1 } +provenance geometry 0..1: /World/B +provenance geometry 1..2: /World/A +provenance geometry 2..3: /World/Floor +provenance mesh: MeshOrigin { geom_id: 2, slot: 0, baked: true, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 14903623499644419787, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [] +provenance volumes: ["/World/Fog"] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/World/Cam"), cameras: ["/World/Cam"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/World/Cam"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/fog_bsdf_usda-240806b5ed98a443-1.image b/crates/crust-core/tests/data/import_baselines/fog_bsdf_usda-240806b5ed98a443-1.image new file mode 100644 index 000000000..3a0368223 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/fog_bsdf_usda-240806b5ed98a443-1.image @@ -0,0 +1 @@ +4x4 16spp clamp-off c724de9ac3637afa diff --git a/crates/crust-core/tests/data/import_baselines/fog_excluded_bsdf_usda-9ebfc40e02ef831f-1.digest b/crates/crust-core/tests/data/import_baselines/fog_excluded_bsdf_usda-9ebfc40e02ef831f-1.digest new file mode 100644 index 000000000..e1a567cda --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/fog_excluded_bsdf_usda-9ebfc40e02ef831f-1.digest @@ -0,0 +1,21 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/World/Cam") +camera: Camera { origin: Vec3A(0.0, 0.0, 8.0), lower_left_corner: Vec3A(-5.142858, -5.142858, -2.0), horizontal: Vec3A(10.285716, 0.0, 0.0), vertical: Vec3A(0.0, 10.285716, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: Some("/Render/settings") +settings: RenderSettings { samples_per_pixel: 16, max_depth: 2, width: 8, height: 8, region: PixelRect { x0: 0, y0: 0, x1: 8, y1: 8 }, min_samples_per_pixel: 16, variance_threshold: 0.0, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: BsdfOnly, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: None, light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 35.0, aperture: [36.0, 36.0], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 10.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/fog_excluded_bsdf.usda"], invisible_overrides: Some(0) } +layer: $DIR/fog_excluded_bsdf.usda +lights: 1 +light 0: area name Some("/World/Key") lpe None pmf 1.0 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 1 +volume 0: sigma_s Vec3A(1.0, 1.0, 1.0) sigma_a Vec3A(0.0, 0.0, 0.0) g 0.0 emission Vec3A(0.0, 0.0, 0.0) mask RayMask(4294967295) class 1 homogeneous true +world: 1 geometries, PrimitiveBreakdown { triangles: 0, spheres: 1, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 0, spheres: 1, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +geom 0: material #0 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 0 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:bf7641bcd49398e5 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=1:bf7641bcd49398e5 +provenance light /World/Key: LightOrigin { index: 0, geoms: 0..1 } +provenance geometry 0..1: /World/Key +provenance spheres: [] +provenance volumes: ["/World/Fog"] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/World/Cam"), cameras: ["/World/Cam"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/World/Cam"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/fog_excluded_bsdf_usda-9ebfc40e02ef831f-1.image b/crates/crust-core/tests/data/import_baselines/fog_excluded_bsdf_usda-9ebfc40e02ef831f-1.image new file mode 100644 index 000000000..8aad9360c --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/fog_excluded_bsdf_usda-9ebfc40e02ef831f-1.image @@ -0,0 +1 @@ +8x8 16spp clamp-off 9fa9e040e0eedf25 diff --git a/crates/crust-core/tests/data/import_baselines/fog_excluded_power_usda-a0c514c4c53c3bc4-1.digest b/crates/crust-core/tests/data/import_baselines/fog_excluded_power_usda-a0c514c4c53c3bc4-1.digest new file mode 100644 index 000000000..dde3b9bd8 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/fog_excluded_power_usda-a0c514c4c53c3bc4-1.digest @@ -0,0 +1,21 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/World/Cam") +camera: Camera { origin: Vec3A(0.0, 0.0, 8.0), lower_left_corner: Vec3A(-5.142858, -5.142858, -2.0), horizontal: Vec3A(10.285716, 0.0, 0.0), vertical: Vec3A(0.0, 10.285716, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: Some("/Render/settings") +settings: RenderSettings { samples_per_pixel: 16, max_depth: 1, width: 8, height: 8, region: PixelRect { x0: 0, y0: 0, x1: 8, y1: 8 }, min_samples_per_pixel: 16, variance_threshold: 0.0, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: None, light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 35.0, aperture: [36.0, 36.0], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 10.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/fog_excluded_power.usda"], invisible_overrides: Some(0) } +layer: $DIR/fog_excluded_power.usda +lights: 1 +light 0: area name Some("/World/Key") lpe None pmf 1.0 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 1 +volume 0: sigma_s Vec3A(1.0, 1.0, 1.0) sigma_a Vec3A(0.0, 0.0, 0.0) g 0.0 emission Vec3A(0.0, 0.0, 0.0) mask RayMask(4294967295) class 1 homogeneous true +world: 1 geometries, PrimitiveBreakdown { triangles: 0, spheres: 1, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 0, spheres: 1, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +geom 0: material #0 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 0 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:bf7641bcd49398e5 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=1:bf7641bcd49398e5 +provenance light /World/Key: LightOrigin { index: 0, geoms: 0..1 } +provenance geometry 0..1: /World/Key +provenance spheres: [] +provenance volumes: ["/World/Fog"] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/World/Cam"), cameras: ["/World/Cam"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/World/Cam"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/fog_excluded_power_usda-a0c514c4c53c3bc4-1.image b/crates/crust-core/tests/data/import_baselines/fog_excluded_power_usda-a0c514c4c53c3bc4-1.image new file mode 100644 index 000000000..8aad9360c --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/fog_excluded_power_usda-a0c514c4c53c3bc4-1.image @@ -0,0 +1 @@ +8x8 16spp clamp-off 9fa9e040e0eedf25 diff --git a/crates/crust-core/tests/data/import_baselines/fog_light_usda-ac22cdb8dae42d75-1.digest b/crates/crust-core/tests/data/import_baselines/fog_light_usda-ac22cdb8dae42d75-1.digest new file mode 100644 index 000000000..d36886dc3 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/fog_light_usda-ac22cdb8dae42d75-1.digest @@ -0,0 +1,29 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/World/Cam") +camera: Camera { origin: Vec3A(0.0, 1.0, 0.0), lower_left_corner: Vec3A(-2.0000002, -9.0, 2.0000002), horizontal: Vec3A(4.0000005, -0.0, 0.0), vertical: Vec3A(0.0, 8.881785e-16, -4.0000005), u: Vec3A(1.0, -0.0, 0.0), v: Vec3A(0.0, 2.220446e-16, -1.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: Some("/Render/settings") +settings: RenderSettings { samples_per_pixel: 4096, max_depth: 3, width: 4, height: 4, region: PixelRect { x0: 0, y0: 0, x1: 4, y1: 4 }, min_samples_per_pixel: 4096, variance_threshold: 0.0, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: LightOnly, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: None, light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 50.0, aperture: [20.0, 20.0], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 10.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/fog_light.usda"], invisible_overrides: Some(0) } +layer: $DIR/fog_light.usda +lights: 2 +light 0: area name Some("/World/B") lpe None pmf 0.5 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 1: area name Some("/World/A") lpe None pmf 0.5 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 1 +volume 0: sigma_s Vec3A(0.15, 0.15, 0.15) sigma_a Vec3A(0.1, 0.1, 0.1) g 0.0 emission Vec3A(0.0, 0.0, 0.0) mask RayMask(4294967295) class 65535 homogeneous true +world: 3 geometries, PrimitiveBreakdown { triangles: 2, spheres: 2, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 2, spheres: 2, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +geom 0: material #0 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:97233df63c15c661 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=1:97233df63c15c661 +geom 1: material #1 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:ea8cf4535fd53b08 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=1:ea8cf4535fd53b08 +geom 2: material #2 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:fce6de5b675a55c5 camera=2:fce6de5b675a55c5 shadow=2:fce6de5b675a55c5 indirect=2:fce6de5b675a55c5 +provenance light /World/A: LightOrigin { index: 1, geoms: 1..2 } +provenance light /World/B: LightOrigin { index: 0, geoms: 0..1 } +provenance geometry 0..1: /World/B +provenance geometry 1..2: /World/A +provenance geometry 2..3: /World/Floor +provenance mesh: MeshOrigin { geom_id: 2, slot: 0, baked: true, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 14903623499644419787, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [] +provenance volumes: ["/World/Fog"] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/World/Cam"), cameras: ["/World/Cam"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/World/Cam"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/fog_light_usda-ac22cdb8dae42d75-1.image b/crates/crust-core/tests/data/import_baselines/fog_light_usda-ac22cdb8dae42d75-1.image new file mode 100644 index 000000000..8db6ff346 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/fog_light_usda-ac22cdb8dae42d75-1.image @@ -0,0 +1 @@ +4x4 16spp clamp-off bad54b942cedfc70 diff --git a/crates/crust-core/tests/data/import_baselines/fog_lit_bsdf_usda-4f776a8e8b44bb17-1.digest b/crates/crust-core/tests/data/import_baselines/fog_lit_bsdf_usda-4f776a8e8b44bb17-1.digest new file mode 100644 index 000000000..c02734bf5 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/fog_lit_bsdf_usda-4f776a8e8b44bb17-1.digest @@ -0,0 +1,21 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/World/Cam") +camera: Camera { origin: Vec3A(0.0, 0.0, 8.0), lower_left_corner: Vec3A(-5.142858, -5.142858, -2.0), horizontal: Vec3A(10.285716, 0.0, 0.0), vertical: Vec3A(0.0, 10.285716, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: Some("/Render/settings") +settings: RenderSettings { samples_per_pixel: 16, max_depth: 2, width: 8, height: 8, region: PixelRect { x0: 0, y0: 0, x1: 8, y1: 8 }, min_samples_per_pixel: 16, variance_threshold: 0.0, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: BsdfOnly, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: None, light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 35.0, aperture: [36.0, 36.0], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 10.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/fog_lit_bsdf.usda"], invisible_overrides: Some(0) } +layer: $DIR/fog_lit_bsdf.usda +lights: 1 +light 0: area name Some("/World/Key") lpe None pmf 1.0 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 1 +volume 0: sigma_s Vec3A(1.0, 1.0, 1.0) sigma_a Vec3A(0.0, 0.0, 0.0) g 0.0 emission Vec3A(0.0, 0.0, 0.0) mask RayMask(4294967295) class 65535 homogeneous true +world: 1 geometries, PrimitiveBreakdown { triangles: 0, spheres: 1, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 0, spheres: 1, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +geom 0: material #0 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:bf7641bcd49398e5 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=1:bf7641bcd49398e5 +provenance light /World/Key: LightOrigin { index: 0, geoms: 0..1 } +provenance geometry 0..1: /World/Key +provenance spheres: [] +provenance volumes: ["/World/Fog"] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/World/Cam"), cameras: ["/World/Cam"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/World/Cam"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/fog_lit_bsdf_usda-4f776a8e8b44bb17-1.image b/crates/crust-core/tests/data/import_baselines/fog_lit_bsdf_usda-4f776a8e8b44bb17-1.image new file mode 100644 index 000000000..407defa02 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/fog_lit_bsdf_usda-4f776a8e8b44bb17-1.image @@ -0,0 +1 @@ +8x8 16spp clamp-off e8dbc16899260ae4 diff --git a/crates/crust-core/tests/data/import_baselines/fog_lit_power_usda-cbade45198a3c38a-1.digest b/crates/crust-core/tests/data/import_baselines/fog_lit_power_usda-cbade45198a3c38a-1.digest new file mode 100644 index 000000000..8e470f88b --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/fog_lit_power_usda-cbade45198a3c38a-1.digest @@ -0,0 +1,21 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/World/Cam") +camera: Camera { origin: Vec3A(0.0, 0.0, 8.0), lower_left_corner: Vec3A(-5.142858, -5.142858, -2.0), horizontal: Vec3A(10.285716, 0.0, 0.0), vertical: Vec3A(0.0, 10.285716, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: Some("/Render/settings") +settings: RenderSettings { samples_per_pixel: 16, max_depth: 1, width: 8, height: 8, region: PixelRect { x0: 0, y0: 0, x1: 8, y1: 8 }, min_samples_per_pixel: 16, variance_threshold: 0.0, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: None, light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 35.0, aperture: [36.0, 36.0], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 10.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/fog_lit_power.usda"], invisible_overrides: Some(0) } +layer: $DIR/fog_lit_power.usda +lights: 1 +light 0: area name Some("/World/Key") lpe None pmf 1.0 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 1 +volume 0: sigma_s Vec3A(1.0, 1.0, 1.0) sigma_a Vec3A(0.0, 0.0, 0.0) g 0.0 emission Vec3A(0.0, 0.0, 0.0) mask RayMask(4294967295) class 65535 homogeneous true +world: 1 geometries, PrimitiveBreakdown { triangles: 0, spheres: 1, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 0, spheres: 1, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +geom 0: material #0 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:bf7641bcd49398e5 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=1:bf7641bcd49398e5 +provenance light /World/Key: LightOrigin { index: 0, geoms: 0..1 } +provenance geometry 0..1: /World/Key +provenance spheres: [] +provenance volumes: ["/World/Fog"] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/World/Cam"), cameras: ["/World/Cam"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/World/Cam"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/fog_lit_power_usda-cbade45198a3c38a-1.image b/crates/crust-core/tests/data/import_baselines/fog_lit_power_usda-cbade45198a3c38a-1.image new file mode 100644 index 000000000..23eac99a5 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/fog_lit_power_usda-cbade45198a3c38a-1.image @@ -0,0 +1 @@ +8x8 16spp clamp-off dc6e77ae5cc52076 diff --git a/crates/crust-core/tests/data/import_baselines/fog_power_usda-c8d64f5dff77f2e7-1.digest b/crates/crust-core/tests/data/import_baselines/fog_power_usda-c8d64f5dff77f2e7-1.digest new file mode 100644 index 000000000..90963c089 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/fog_power_usda-c8d64f5dff77f2e7-1.digest @@ -0,0 +1,29 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/World/Cam") +camera: Camera { origin: Vec3A(0.0, 1.0, 0.0), lower_left_corner: Vec3A(-2.0000002, -9.0, 2.0000002), horizontal: Vec3A(4.0000005, -0.0, 0.0), vertical: Vec3A(0.0, 8.881785e-16, -4.0000005), u: Vec3A(1.0, -0.0, 0.0), v: Vec3A(0.0, 2.220446e-16, -1.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: Some("/Render/settings") +settings: RenderSettings { samples_per_pixel: 4096, max_depth: 3, width: 4, height: 4, region: PixelRect { x0: 0, y0: 0, x1: 4, y1: 4 }, min_samples_per_pixel: 4096, variance_threshold: 0.0, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: None, light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 50.0, aperture: [20.0, 20.0], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 10.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/fog_power.usda"], invisible_overrides: Some(0) } +layer: $DIR/fog_power.usda +lights: 2 +light 0: area name Some("/World/B") lpe None pmf 0.5 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 1: area name Some("/World/A") lpe None pmf 0.5 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 1 +volume 0: sigma_s Vec3A(0.15, 0.15, 0.15) sigma_a Vec3A(0.1, 0.1, 0.1) g 0.0 emission Vec3A(0.0, 0.0, 0.0) mask RayMask(4294967295) class 65535 homogeneous true +world: 3 geometries, PrimitiveBreakdown { triangles: 2, spheres: 2, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 2, spheres: 2, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +geom 0: material #0 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:97233df63c15c661 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=1:97233df63c15c661 +geom 1: material #1 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:ea8cf4535fd53b08 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=1:ea8cf4535fd53b08 +geom 2: material #2 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:fce6de5b675a55c5 camera=2:fce6de5b675a55c5 shadow=2:fce6de5b675a55c5 indirect=2:fce6de5b675a55c5 +provenance light /World/A: LightOrigin { index: 1, geoms: 1..2 } +provenance light /World/B: LightOrigin { index: 0, geoms: 0..1 } +provenance geometry 0..1: /World/B +provenance geometry 1..2: /World/A +provenance geometry 2..3: /World/Floor +provenance mesh: MeshOrigin { geom_id: 2, slot: 0, baked: true, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 14903623499644419787, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [] +provenance volumes: ["/World/Fog"] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/World/Cam"), cameras: ["/World/Cam"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/World/Cam"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/fog_power_usda-c8d64f5dff77f2e7-1.image b/crates/crust-core/tests/data/import_baselines/fog_power_usda-c8d64f5dff77f2e7-1.image new file mode 100644 index 000000000..7b93d0d16 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/fog_power_usda-c8d64f5dff77f2e7-1.image @@ -0,0 +1 @@ +4x4 16spp clamp-off 081fb87b6f671fba diff --git a/crates/crust-core/tests/data/import_baselines/fog_usda-219213dd24619244-1.digest b/crates/crust-core/tests/data/import_baselines/fog_usda-219213dd24619244-1.digest new file mode 100644 index 000000000..1776a5421 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/fog_usda-219213dd24619244-1.digest @@ -0,0 +1,27 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/World/Cam") +camera: Camera { origin: Vec3A(0.0, 2.0, 8.5), lower_left_corner: Vec3A(-5.6632595, -1.1855836, -1.5), horizontal: Vec3A(11.326519, 0.0, 0.0), vertical: Vec3A(0.0, 6.371167, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: Some("/Render/settings") +settings: RenderSettings { samples_per_pixel: 64, max_depth: 16, width: 320, height: 180, region: PixelRect { x0: 0, y0: 0, x1: 320, y1: 180 }, min_samples_per_pixel: 16, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 24.0, aperture: [20.955, 15.2908], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 10.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/fog.usda"], invisible_overrides: Some(0) } +layer: $DIR/fog.usda +lights: 1 +light 0: area name Some("/World/CeilingLight") lpe None pmf 1.0 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 1 +volume 0: sigma_s Vec3A(0.15, 0.15, 0.15) sigma_a Vec3A(0.01, 0.015, 0.025) g 0.3 emission Vec3A(0.0, 0.0, 0.0) mask RayMask(4294967295) class 65535 homogeneous true +world: 3 geometries, PrimitiveBreakdown { triangles: 12, spheres: 1, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 12, spheres: 1, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +geom 0: material #0 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:147964f7c513cf55 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=2:147964f7c513cf55 +geom 1: material #1 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:1b43ff4c259f42b0 camera=1:1b43ff4c259f42b0 shadow=1:1b43ff4c259f42b0 indirect=1:1b43ff4c259f42b0 +geom 2: material #1 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=10:5e739a86b9f39f85 camera=10:5e739a86b9f39f85 shadow=10:5e739a86b9f39f85 indirect=10:5e739a86b9f39f85 +provenance light /World/CeilingLight: LightOrigin { index: 0, geoms: 0..1 } +provenance geometry 0..1: /World/CeilingLight +provenance geometry 1..2: /World/Ball +provenance geometry 2..3: /World/Room +provenance mesh: MeshOrigin { geom_id: 2, slot: 0, baked: true, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 18131637559251484386, n_points: 20, n_indices: 20, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [1] +provenance volumes: ["/World/Fog"] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/World/Cam"), cameras: ["/World/Cam"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/World/Cam"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/fog_usda-219213dd24619244-1.image b/crates/crust-core/tests/data/import_baselines/fog_usda-219213dd24619244-1.image new file mode 100644 index 000000000..7ec75be2e --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/fog_usda-219213dd24619244-1.image @@ -0,0 +1 @@ +320x180 16spp clamp-off d35261095dde40ff diff --git a/crates/crust-core/tests/data/import_baselines/fog_usda-4d459b664a7ea673-1.digest b/crates/crust-core/tests/data/import_baselines/fog_usda-4d459b664a7ea673-1.digest new file mode 100644 index 000000000..1776a5421 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/fog_usda-4d459b664a7ea673-1.digest @@ -0,0 +1,27 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/World/Cam") +camera: Camera { origin: Vec3A(0.0, 2.0, 8.5), lower_left_corner: Vec3A(-5.6632595, -1.1855836, -1.5), horizontal: Vec3A(11.326519, 0.0, 0.0), vertical: Vec3A(0.0, 6.371167, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: Some("/Render/settings") +settings: RenderSettings { samples_per_pixel: 64, max_depth: 16, width: 320, height: 180, region: PixelRect { x0: 0, y0: 0, x1: 320, y1: 180 }, min_samples_per_pixel: 16, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 24.0, aperture: [20.955, 15.2908], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 10.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/fog.usda"], invisible_overrides: Some(0) } +layer: $DIR/fog.usda +lights: 1 +light 0: area name Some("/World/CeilingLight") lpe None pmf 1.0 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 1 +volume 0: sigma_s Vec3A(0.15, 0.15, 0.15) sigma_a Vec3A(0.01, 0.015, 0.025) g 0.3 emission Vec3A(0.0, 0.0, 0.0) mask RayMask(4294967295) class 65535 homogeneous true +world: 3 geometries, PrimitiveBreakdown { triangles: 12, spheres: 1, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 12, spheres: 1, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +geom 0: material #0 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:147964f7c513cf55 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=2:147964f7c513cf55 +geom 1: material #1 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:1b43ff4c259f42b0 camera=1:1b43ff4c259f42b0 shadow=1:1b43ff4c259f42b0 indirect=1:1b43ff4c259f42b0 +geom 2: material #1 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=10:5e739a86b9f39f85 camera=10:5e739a86b9f39f85 shadow=10:5e739a86b9f39f85 indirect=10:5e739a86b9f39f85 +provenance light /World/CeilingLight: LightOrigin { index: 0, geoms: 0..1 } +provenance geometry 0..1: /World/CeilingLight +provenance geometry 1..2: /World/Ball +provenance geometry 2..3: /World/Room +provenance mesh: MeshOrigin { geom_id: 2, slot: 0, baked: true, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 18131637559251484386, n_points: 20, n_indices: 20, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [1] +provenance volumes: ["/World/Fog"] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/World/Cam"), cameras: ["/World/Cam"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/World/Cam"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/fog_usda-4d459b664a7ea673-1.image b/crates/crust-core/tests/data/import_baselines/fog_usda-4d459b664a7ea673-1.image new file mode 100644 index 000000000..7ec75be2e --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/fog_usda-4d459b664a7ea673-1.image @@ -0,0 +1 @@ +320x180 16spp clamp-off d35261095dde40ff diff --git a/crates/crust-core/tests/data/import_baselines/fog_usda-4d459b664a7ea673-2.digest b/crates/crust-core/tests/data/import_baselines/fog_usda-4d459b664a7ea673-2.digest new file mode 100644 index 000000000..1776a5421 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/fog_usda-4d459b664a7ea673-2.digest @@ -0,0 +1,27 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/World/Cam") +camera: Camera { origin: Vec3A(0.0, 2.0, 8.5), lower_left_corner: Vec3A(-5.6632595, -1.1855836, -1.5), horizontal: Vec3A(11.326519, 0.0, 0.0), vertical: Vec3A(0.0, 6.371167, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: Some("/Render/settings") +settings: RenderSettings { samples_per_pixel: 64, max_depth: 16, width: 320, height: 180, region: PixelRect { x0: 0, y0: 0, x1: 320, y1: 180 }, min_samples_per_pixel: 16, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 24.0, aperture: [20.955, 15.2908], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 10.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/fog.usda"], invisible_overrides: Some(0) } +layer: $DIR/fog.usda +lights: 1 +light 0: area name Some("/World/CeilingLight") lpe None pmf 1.0 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 1 +volume 0: sigma_s Vec3A(0.15, 0.15, 0.15) sigma_a Vec3A(0.01, 0.015, 0.025) g 0.3 emission Vec3A(0.0, 0.0, 0.0) mask RayMask(4294967295) class 65535 homogeneous true +world: 3 geometries, PrimitiveBreakdown { triangles: 12, spheres: 1, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 12, spheres: 1, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +geom 0: material #0 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:147964f7c513cf55 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=2:147964f7c513cf55 +geom 1: material #1 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:1b43ff4c259f42b0 camera=1:1b43ff4c259f42b0 shadow=1:1b43ff4c259f42b0 indirect=1:1b43ff4c259f42b0 +geom 2: material #1 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=10:5e739a86b9f39f85 camera=10:5e739a86b9f39f85 shadow=10:5e739a86b9f39f85 indirect=10:5e739a86b9f39f85 +provenance light /World/CeilingLight: LightOrigin { index: 0, geoms: 0..1 } +provenance geometry 0..1: /World/CeilingLight +provenance geometry 1..2: /World/Ball +provenance geometry 2..3: /World/Room +provenance mesh: MeshOrigin { geom_id: 2, slot: 0, baked: true, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 18131637559251484386, n_points: 20, n_indices: 20, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [1] +provenance volumes: ["/World/Fog"] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/World/Cam"), cameras: ["/World/Cam"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/World/Cam"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/fog_usda-4d459b664a7ea673-2.image b/crates/crust-core/tests/data/import_baselines/fog_usda-4d459b664a7ea673-2.image new file mode 100644 index 000000000..7ec75be2e --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/fog_usda-4d459b664a7ea673-2.image @@ -0,0 +1 @@ +320x180 16spp clamp-off d35261095dde40ff diff --git a/crates/crust-core/tests/data/import_baselines/fog_usda-509c893b29b09cb4-1.digest b/crates/crust-core/tests/data/import_baselines/fog_usda-509c893b29b09cb4-1.digest new file mode 100644 index 000000000..b42f91589 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/fog_usda-509c893b29b09cb4-1.digest @@ -0,0 +1,18 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: None +camera: Camera { origin: Vec3A(15.0, 3.0, 3.0), lower_left_corner: Vec3A(4.8863316, -0.044797063, 4.174048), horizontal: Vec3A(1.2295314, 0.0, -6.147657), vertical: Vec3A(-0.44830504, 3.4967792, -0.08966101), u: Vec3A(0.19611613, 0.0, -0.9805807), v: Vec3A(-0.1271232, 0.991561, -0.02542464), lens_radius: 0.05, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: None +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 640, height: 360, region: PixelRect { x0: 0, y0: 0, x1: 640, y1: 360 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: None, depth_of_field: true, motion_blur: false, layer_stack: ["$DIR/fog.usda"], invisible_overrides: Some(0) } +layer: $DIR/fog.usda +warning: Warning { code: CameraMissing, kind: Skipped, count: 1, prims: [], message: "USD stage has no UsdGeomCamera — falling back to world::get_settings camera" } +lights: 0 +volumes: 1 +volume 0: sigma_s Vec3A(1.0, 1.0, 1.0) sigma_a Vec3A(0.2, 0.4, 0.6) g 0.3 emission Vec3A(0.0, 0.0, 0.0) mask RayMask(4294967295) class 65535 homogeneous true +world: 0 geometries, PrimitiveBreakdown { triangles: 0, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 0, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +provenance spheres: [] +provenance volumes: ["/World/Fog"] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: None, cameras: [], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: None, offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/fog_usda-509c893b29b09cb4-1.image b/crates/crust-core/tests/data/import_baselines/fog_usda-509c893b29b09cb4-1.image new file mode 100644 index 000000000..c734c5b1d --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/fog_usda-509c893b29b09cb4-1.image @@ -0,0 +1 @@ +640x360 16spp clamp-off a04a09c0d4b5e325 diff --git a/crates/crust-core/tests/data/import_baselines/fog_usda-54b48891484e98a0-1.digest b/crates/crust-core/tests/data/import_baselines/fog_usda-54b48891484e98a0-1.digest new file mode 100644 index 000000000..1776a5421 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/fog_usda-54b48891484e98a0-1.digest @@ -0,0 +1,27 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/World/Cam") +camera: Camera { origin: Vec3A(0.0, 2.0, 8.5), lower_left_corner: Vec3A(-5.6632595, -1.1855836, -1.5), horizontal: Vec3A(11.326519, 0.0, 0.0), vertical: Vec3A(0.0, 6.371167, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: Some("/Render/settings") +settings: RenderSettings { samples_per_pixel: 64, max_depth: 16, width: 320, height: 180, region: PixelRect { x0: 0, y0: 0, x1: 320, y1: 180 }, min_samples_per_pixel: 16, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 24.0, aperture: [20.955, 15.2908], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 10.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/fog.usda"], invisible_overrides: Some(0) } +layer: $DIR/fog.usda +lights: 1 +light 0: area name Some("/World/CeilingLight") lpe None pmf 1.0 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 1 +volume 0: sigma_s Vec3A(0.15, 0.15, 0.15) sigma_a Vec3A(0.01, 0.015, 0.025) g 0.3 emission Vec3A(0.0, 0.0, 0.0) mask RayMask(4294967295) class 65535 homogeneous true +world: 3 geometries, PrimitiveBreakdown { triangles: 12, spheres: 1, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 12, spheres: 1, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +geom 0: material #0 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:147964f7c513cf55 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=2:147964f7c513cf55 +geom 1: material #1 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:1b43ff4c259f42b0 camera=1:1b43ff4c259f42b0 shadow=1:1b43ff4c259f42b0 indirect=1:1b43ff4c259f42b0 +geom 2: material #1 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=10:5e739a86b9f39f85 camera=10:5e739a86b9f39f85 shadow=10:5e739a86b9f39f85 indirect=10:5e739a86b9f39f85 +provenance light /World/CeilingLight: LightOrigin { index: 0, geoms: 0..1 } +provenance geometry 0..1: /World/CeilingLight +provenance geometry 1..2: /World/Ball +provenance geometry 2..3: /World/Room +provenance mesh: MeshOrigin { geom_id: 2, slot: 0, baked: true, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 18131637559251484386, n_points: 20, n_indices: 20, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [1] +provenance volumes: ["/World/Fog"] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/World/Cam"), cameras: ["/World/Cam"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/World/Cam"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/fog_usda-54b48891484e98a0-1.image b/crates/crust-core/tests/data/import_baselines/fog_usda-54b48891484e98a0-1.image new file mode 100644 index 000000000..7ec75be2e --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/fog_usda-54b48891484e98a0-1.image @@ -0,0 +1 @@ +320x180 16spp clamp-off d35261095dde40ff diff --git a/crates/crust-core/tests/data/import_baselines/fog_usda-643d53c126eee84d-1.digest b/crates/crust-core/tests/data/import_baselines/fog_usda-643d53c126eee84d-1.digest new file mode 100644 index 000000000..7fe15c69f --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/fog_usda-643d53c126eee84d-1.digest @@ -0,0 +1,27 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/World/Cam") +camera: Camera { origin: Vec3A(0.0, 2.0, 8.5), lower_left_corner: Vec3A(-5.6632595, -1.1855836, -1.5), horizontal: Vec3A(11.326519, 0.0, 0.0), vertical: Vec3A(0.0, 6.371167, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: Some("/Render/settings") +settings: RenderSettings { samples_per_pixel: 64, max_depth: 16, width: 320, height: 180, region: PixelRect { x0: 0, y0: 0, x1: 320, y1: 180 }, min_samples_per_pixel: 16, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 24.0, aperture: [20.955, 15.2908], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 10.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/fog.usda"], invisible_overrides: Some(0) } +layer: $DIR/fog.usda +lights: 1 +light 0: area name Some("/World/CeilingLight") lpe None pmf 1.0 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 1 +volume 0: sigma_s Vec3A(0.15, 0.15, 0.15) sigma_a Vec3A(0.01, 0.015, 0.025) g 0.3 emission Vec3A(0.0, 0.0, 0.0) mask RayMask(4294967295) class 65535 homogeneous true +world: 3 geometries, PrimitiveBreakdown { triangles: 12, spheres: 1, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 12, spheres: 1, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +geom 0: material #0 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:147964f7c513cf55 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=2:147964f7c513cf55 +geom 1: material #1 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:1b43ff4c259f42b0 camera=1:1b43ff4c259f42b0 shadow=1:1b43ff4c259f42b0 indirect=1:1b43ff4c259f42b0 +geom 2: material #1 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=10:5e739a86b9f39f85 camera=10:5e739a86b9f39f85 shadow=10:5e739a86b9f39f85 indirect=10:5e739a86b9f39f85 +provenance light /World/CeilingLight: LightOrigin { index: 0, geoms: 0..1 } +provenance geometry 0..1: /World/CeilingLight +provenance geometry 1..2: /World/Ball +provenance geometry 2..3: /World/Room +provenance mesh: MeshOrigin { geom_id: 2, slot: 0, baked: true, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 18131637559251484386, n_points: 20, n_indices: 20, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [1] +provenance volumes: ["/World/Fog"] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: true, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/World/Cam"), cameras: ["/World/Cam"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/World/Cam"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/fog_usda-643d53c126eee84d-1.image b/crates/crust-core/tests/data/import_baselines/fog_usda-643d53c126eee84d-1.image new file mode 100644 index 000000000..7ec75be2e --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/fog_usda-643d53c126eee84d-1.image @@ -0,0 +1 @@ +320x180 16spp clamp-off d35261095dde40ff diff --git a/crates/crust-core/tests/data/import_baselines/fog_usda-85a4ccafddfcce6b-1.digest b/crates/crust-core/tests/data/import_baselines/fog_usda-85a4ccafddfcce6b-1.digest new file mode 100644 index 000000000..1776a5421 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/fog_usda-85a4ccafddfcce6b-1.digest @@ -0,0 +1,27 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/World/Cam") +camera: Camera { origin: Vec3A(0.0, 2.0, 8.5), lower_left_corner: Vec3A(-5.6632595, -1.1855836, -1.5), horizontal: Vec3A(11.326519, 0.0, 0.0), vertical: Vec3A(0.0, 6.371167, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: Some("/Render/settings") +settings: RenderSettings { samples_per_pixel: 64, max_depth: 16, width: 320, height: 180, region: PixelRect { x0: 0, y0: 0, x1: 320, y1: 180 }, min_samples_per_pixel: 16, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 24.0, aperture: [20.955, 15.2908], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 10.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/fog.usda"], invisible_overrides: Some(0) } +layer: $DIR/fog.usda +lights: 1 +light 0: area name Some("/World/CeilingLight") lpe None pmf 1.0 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 1 +volume 0: sigma_s Vec3A(0.15, 0.15, 0.15) sigma_a Vec3A(0.01, 0.015, 0.025) g 0.3 emission Vec3A(0.0, 0.0, 0.0) mask RayMask(4294967295) class 65535 homogeneous true +world: 3 geometries, PrimitiveBreakdown { triangles: 12, spheres: 1, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 12, spheres: 1, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +geom 0: material #0 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:147964f7c513cf55 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=2:147964f7c513cf55 +geom 1: material #1 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:1b43ff4c259f42b0 camera=1:1b43ff4c259f42b0 shadow=1:1b43ff4c259f42b0 indirect=1:1b43ff4c259f42b0 +geom 2: material #1 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=10:5e739a86b9f39f85 camera=10:5e739a86b9f39f85 shadow=10:5e739a86b9f39f85 indirect=10:5e739a86b9f39f85 +provenance light /World/CeilingLight: LightOrigin { index: 0, geoms: 0..1 } +provenance geometry 0..1: /World/CeilingLight +provenance geometry 1..2: /World/Ball +provenance geometry 2..3: /World/Room +provenance mesh: MeshOrigin { geom_id: 2, slot: 0, baked: true, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 18131637559251484386, n_points: 20, n_indices: 20, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [1] +provenance volumes: ["/World/Fog"] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/World/Cam"), cameras: ["/World/Cam"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/World/Cam"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/fog_usda-85a4ccafddfcce6b-1.image b/crates/crust-core/tests/data/import_baselines/fog_usda-85a4ccafddfcce6b-1.image new file mode 100644 index 000000000..7ec75be2e --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/fog_usda-85a4ccafddfcce6b-1.image @@ -0,0 +1 @@ +320x180 16spp clamp-off d35261095dde40ff diff --git a/crates/crust-core/tests/data/import_baselines/fog_usda-85a4ccafddfcce6b-2.digest b/crates/crust-core/tests/data/import_baselines/fog_usda-85a4ccafddfcce6b-2.digest new file mode 100644 index 000000000..1776a5421 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/fog_usda-85a4ccafddfcce6b-2.digest @@ -0,0 +1,27 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/World/Cam") +camera: Camera { origin: Vec3A(0.0, 2.0, 8.5), lower_left_corner: Vec3A(-5.6632595, -1.1855836, -1.5), horizontal: Vec3A(11.326519, 0.0, 0.0), vertical: Vec3A(0.0, 6.371167, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: Some("/Render/settings") +settings: RenderSettings { samples_per_pixel: 64, max_depth: 16, width: 320, height: 180, region: PixelRect { x0: 0, y0: 0, x1: 320, y1: 180 }, min_samples_per_pixel: 16, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 24.0, aperture: [20.955, 15.2908], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 10.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/fog.usda"], invisible_overrides: Some(0) } +layer: $DIR/fog.usda +lights: 1 +light 0: area name Some("/World/CeilingLight") lpe None pmf 1.0 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 1 +volume 0: sigma_s Vec3A(0.15, 0.15, 0.15) sigma_a Vec3A(0.01, 0.015, 0.025) g 0.3 emission Vec3A(0.0, 0.0, 0.0) mask RayMask(4294967295) class 65535 homogeneous true +world: 3 geometries, PrimitiveBreakdown { triangles: 12, spheres: 1, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 12, spheres: 1, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +geom 0: material #0 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:147964f7c513cf55 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=2:147964f7c513cf55 +geom 1: material #1 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:1b43ff4c259f42b0 camera=1:1b43ff4c259f42b0 shadow=1:1b43ff4c259f42b0 indirect=1:1b43ff4c259f42b0 +geom 2: material #1 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=10:5e739a86b9f39f85 camera=10:5e739a86b9f39f85 shadow=10:5e739a86b9f39f85 indirect=10:5e739a86b9f39f85 +provenance light /World/CeilingLight: LightOrigin { index: 0, geoms: 0..1 } +provenance geometry 0..1: /World/CeilingLight +provenance geometry 1..2: /World/Ball +provenance geometry 2..3: /World/Room +provenance mesh: MeshOrigin { geom_id: 2, slot: 0, baked: true, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 18131637559251484386, n_points: 20, n_indices: 20, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [1] +provenance volumes: ["/World/Fog"] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/World/Cam"), cameras: ["/World/Cam"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/World/Cam"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/fog_usda-85a4ccafddfcce6b-2.image b/crates/crust-core/tests/data/import_baselines/fog_usda-85a4ccafddfcce6b-2.image new file mode 100644 index 000000000..7ec75be2e --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/fog_usda-85a4ccafddfcce6b-2.image @@ -0,0 +1 @@ +320x180 16spp clamp-off d35261095dde40ff diff --git a/crates/crust-core/tests/data/import_baselines/fog_usda-85a4ccafddfcce6b-3.digest b/crates/crust-core/tests/data/import_baselines/fog_usda-85a4ccafddfcce6b-3.digest new file mode 100644 index 000000000..1776a5421 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/fog_usda-85a4ccafddfcce6b-3.digest @@ -0,0 +1,27 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/World/Cam") +camera: Camera { origin: Vec3A(0.0, 2.0, 8.5), lower_left_corner: Vec3A(-5.6632595, -1.1855836, -1.5), horizontal: Vec3A(11.326519, 0.0, 0.0), vertical: Vec3A(0.0, 6.371167, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: Some("/Render/settings") +settings: RenderSettings { samples_per_pixel: 64, max_depth: 16, width: 320, height: 180, region: PixelRect { x0: 0, y0: 0, x1: 320, y1: 180 }, min_samples_per_pixel: 16, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 24.0, aperture: [20.955, 15.2908], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 10.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/fog.usda"], invisible_overrides: Some(0) } +layer: $DIR/fog.usda +lights: 1 +light 0: area name Some("/World/CeilingLight") lpe None pmf 1.0 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 1 +volume 0: sigma_s Vec3A(0.15, 0.15, 0.15) sigma_a Vec3A(0.01, 0.015, 0.025) g 0.3 emission Vec3A(0.0, 0.0, 0.0) mask RayMask(4294967295) class 65535 homogeneous true +world: 3 geometries, PrimitiveBreakdown { triangles: 12, spheres: 1, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 12, spheres: 1, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +geom 0: material #0 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:147964f7c513cf55 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=2:147964f7c513cf55 +geom 1: material #1 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:1b43ff4c259f42b0 camera=1:1b43ff4c259f42b0 shadow=1:1b43ff4c259f42b0 indirect=1:1b43ff4c259f42b0 +geom 2: material #1 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=10:5e739a86b9f39f85 camera=10:5e739a86b9f39f85 shadow=10:5e739a86b9f39f85 indirect=10:5e739a86b9f39f85 +provenance light /World/CeilingLight: LightOrigin { index: 0, geoms: 0..1 } +provenance geometry 0..1: /World/CeilingLight +provenance geometry 1..2: /World/Ball +provenance geometry 2..3: /World/Room +provenance mesh: MeshOrigin { geom_id: 2, slot: 0, baked: true, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 18131637559251484386, n_points: 20, n_indices: 20, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [1] +provenance volumes: ["/World/Fog"] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/World/Cam"), cameras: ["/World/Cam"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/World/Cam"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/fog_usda-85a4ccafddfcce6b-3.image b/crates/crust-core/tests/data/import_baselines/fog_usda-85a4ccafddfcce6b-3.image new file mode 100644 index 000000000..7ec75be2e --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/fog_usda-85a4ccafddfcce6b-3.image @@ -0,0 +1 @@ +320x180 16spp clamp-off d35261095dde40ff diff --git a/crates/crust-core/tests/data/import_baselines/fog_usda-85a4ccafddfcce6b-4.digest b/crates/crust-core/tests/data/import_baselines/fog_usda-85a4ccafddfcce6b-4.digest new file mode 100644 index 000000000..1776a5421 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/fog_usda-85a4ccafddfcce6b-4.digest @@ -0,0 +1,27 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/World/Cam") +camera: Camera { origin: Vec3A(0.0, 2.0, 8.5), lower_left_corner: Vec3A(-5.6632595, -1.1855836, -1.5), horizontal: Vec3A(11.326519, 0.0, 0.0), vertical: Vec3A(0.0, 6.371167, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: Some("/Render/settings") +settings: RenderSettings { samples_per_pixel: 64, max_depth: 16, width: 320, height: 180, region: PixelRect { x0: 0, y0: 0, x1: 320, y1: 180 }, min_samples_per_pixel: 16, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 24.0, aperture: [20.955, 15.2908], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 10.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/fog.usda"], invisible_overrides: Some(0) } +layer: $DIR/fog.usda +lights: 1 +light 0: area name Some("/World/CeilingLight") lpe None pmf 1.0 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 1 +volume 0: sigma_s Vec3A(0.15, 0.15, 0.15) sigma_a Vec3A(0.01, 0.015, 0.025) g 0.3 emission Vec3A(0.0, 0.0, 0.0) mask RayMask(4294967295) class 65535 homogeneous true +world: 3 geometries, PrimitiveBreakdown { triangles: 12, spheres: 1, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 12, spheres: 1, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +geom 0: material #0 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:147964f7c513cf55 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=2:147964f7c513cf55 +geom 1: material #1 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:1b43ff4c259f42b0 camera=1:1b43ff4c259f42b0 shadow=1:1b43ff4c259f42b0 indirect=1:1b43ff4c259f42b0 +geom 2: material #1 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=10:5e739a86b9f39f85 camera=10:5e739a86b9f39f85 shadow=10:5e739a86b9f39f85 indirect=10:5e739a86b9f39f85 +provenance light /World/CeilingLight: LightOrigin { index: 0, geoms: 0..1 } +provenance geometry 0..1: /World/CeilingLight +provenance geometry 1..2: /World/Ball +provenance geometry 2..3: /World/Room +provenance mesh: MeshOrigin { geom_id: 2, slot: 0, baked: true, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 18131637559251484386, n_points: 20, n_indices: 20, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [1] +provenance volumes: ["/World/Fog"] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/World/Cam"), cameras: ["/World/Cam"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/World/Cam"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/fog_usda-85a4ccafddfcce6b-4.image b/crates/crust-core/tests/data/import_baselines/fog_usda-85a4ccafddfcce6b-4.image new file mode 100644 index 000000000..7ec75be2e --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/fog_usda-85a4ccafddfcce6b-4.image @@ -0,0 +1 @@ +320x180 16spp clamp-off d35261095dde40ff diff --git a/crates/crust-core/tests/data/import_baselines/fog_usda-85a4ccafddfcce6b-5.digest b/crates/crust-core/tests/data/import_baselines/fog_usda-85a4ccafddfcce6b-5.digest new file mode 100644 index 000000000..1776a5421 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/fog_usda-85a4ccafddfcce6b-5.digest @@ -0,0 +1,27 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/World/Cam") +camera: Camera { origin: Vec3A(0.0, 2.0, 8.5), lower_left_corner: Vec3A(-5.6632595, -1.1855836, -1.5), horizontal: Vec3A(11.326519, 0.0, 0.0), vertical: Vec3A(0.0, 6.371167, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: Some("/Render/settings") +settings: RenderSettings { samples_per_pixel: 64, max_depth: 16, width: 320, height: 180, region: PixelRect { x0: 0, y0: 0, x1: 320, y1: 180 }, min_samples_per_pixel: 16, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 24.0, aperture: [20.955, 15.2908], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 10.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/fog.usda"], invisible_overrides: Some(0) } +layer: $DIR/fog.usda +lights: 1 +light 0: area name Some("/World/CeilingLight") lpe None pmf 1.0 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 1 +volume 0: sigma_s Vec3A(0.15, 0.15, 0.15) sigma_a Vec3A(0.01, 0.015, 0.025) g 0.3 emission Vec3A(0.0, 0.0, 0.0) mask RayMask(4294967295) class 65535 homogeneous true +world: 3 geometries, PrimitiveBreakdown { triangles: 12, spheres: 1, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 12, spheres: 1, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +geom 0: material #0 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:147964f7c513cf55 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=2:147964f7c513cf55 +geom 1: material #1 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:1b43ff4c259f42b0 camera=1:1b43ff4c259f42b0 shadow=1:1b43ff4c259f42b0 indirect=1:1b43ff4c259f42b0 +geom 2: material #1 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=10:5e739a86b9f39f85 camera=10:5e739a86b9f39f85 shadow=10:5e739a86b9f39f85 indirect=10:5e739a86b9f39f85 +provenance light /World/CeilingLight: LightOrigin { index: 0, geoms: 0..1 } +provenance geometry 0..1: /World/CeilingLight +provenance geometry 1..2: /World/Ball +provenance geometry 2..3: /World/Room +provenance mesh: MeshOrigin { geom_id: 2, slot: 0, baked: true, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 18131637559251484386, n_points: 20, n_indices: 20, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [1] +provenance volumes: ["/World/Fog"] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/World/Cam"), cameras: ["/World/Cam"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/World/Cam"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/fog_usda-85a4ccafddfcce6b-5.image b/crates/crust-core/tests/data/import_baselines/fog_usda-85a4ccafddfcce6b-5.image new file mode 100644 index 000000000..7ec75be2e --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/fog_usda-85a4ccafddfcce6b-5.image @@ -0,0 +1 @@ +320x180 16spp clamp-off d35261095dde40ff diff --git a/crates/crust-core/tests/data/import_baselines/fog_usda-c4be6859ecb41784-1.digest b/crates/crust-core/tests/data/import_baselines/fog_usda-c4be6859ecb41784-1.digest new file mode 100644 index 000000000..1776a5421 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/fog_usda-c4be6859ecb41784-1.digest @@ -0,0 +1,27 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/World/Cam") +camera: Camera { origin: Vec3A(0.0, 2.0, 8.5), lower_left_corner: Vec3A(-5.6632595, -1.1855836, -1.5), horizontal: Vec3A(11.326519, 0.0, 0.0), vertical: Vec3A(0.0, 6.371167, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: Some("/Render/settings") +settings: RenderSettings { samples_per_pixel: 64, max_depth: 16, width: 320, height: 180, region: PixelRect { x0: 0, y0: 0, x1: 320, y1: 180 }, min_samples_per_pixel: 16, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 24.0, aperture: [20.955, 15.2908], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 10.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/fog.usda"], invisible_overrides: Some(0) } +layer: $DIR/fog.usda +lights: 1 +light 0: area name Some("/World/CeilingLight") lpe None pmf 1.0 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 1 +volume 0: sigma_s Vec3A(0.15, 0.15, 0.15) sigma_a Vec3A(0.01, 0.015, 0.025) g 0.3 emission Vec3A(0.0, 0.0, 0.0) mask RayMask(4294967295) class 65535 homogeneous true +world: 3 geometries, PrimitiveBreakdown { triangles: 12, spheres: 1, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 12, spheres: 1, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +geom 0: material #0 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:147964f7c513cf55 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=2:147964f7c513cf55 +geom 1: material #1 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:1b43ff4c259f42b0 camera=1:1b43ff4c259f42b0 shadow=1:1b43ff4c259f42b0 indirect=1:1b43ff4c259f42b0 +geom 2: material #1 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=10:5e739a86b9f39f85 camera=10:5e739a86b9f39f85 shadow=10:5e739a86b9f39f85 indirect=10:5e739a86b9f39f85 +provenance light /World/CeilingLight: LightOrigin { index: 0, geoms: 0..1 } +provenance geometry 0..1: /World/CeilingLight +provenance geometry 1..2: /World/Ball +provenance geometry 2..3: /World/Room +provenance mesh: MeshOrigin { geom_id: 2, slot: 0, baked: true, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 18131637559251484386, n_points: 20, n_indices: 20, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [1] +provenance volumes: ["/World/Fog"] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/World/Cam"), cameras: ["/World/Cam"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/World/Cam"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/fog_usda-c4be6859ecb41784-1.image b/crates/crust-core/tests/data/import_baselines/fog_usda-c4be6859ecb41784-1.image new file mode 100644 index 000000000..7ec75be2e --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/fog_usda-c4be6859ecb41784-1.image @@ -0,0 +1 @@ +320x180 16spp clamp-off d35261095dde40ff diff --git a/crates/crust-core/tests/data/import_baselines/fog_wall_usda-d41794b69bda1696-1.digest b/crates/crust-core/tests/data/import_baselines/fog_wall_usda-d41794b69bda1696-1.digest new file mode 100644 index 000000000..7fad2fdee --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/fog_wall_usda-d41794b69bda1696-1.digest @@ -0,0 +1,33 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/World/Cam") +camera: Camera { origin: Vec3A(0.0, 0.0, 5.0), lower_left_corner: Vec3A(-2.7183647, -1.5290802, -5.0), horizontal: Vec3A(5.4367294, 0.0, 0.0), vertical: Vec3A(0.0, 3.0581603, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: None +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 640, height: 360, region: PixelRect { x0: 0, y0: 0, x1: 640, y1: 360 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 50.0, aperture: [20.955, 15.2908], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 10.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/fog_wall.usda"], invisible_overrides: Some(0) } +layer: $DIR/fog_wall.usda +lights: 2 +light 0: area name Some("/World/Geo/B") lpe None pmf 0.5 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 1: area name Some("/World/Geo/A") lpe None pmf 0.5 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 4 geometries, PrimitiveBreakdown { triangles: 14, spheres: 2, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 14, spheres: 2, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +geom 0: material #0 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:a05fcaa75be494b4 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=1:a05fcaa75be494b4 +geom 1: material #1 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:760997a6fb1839ac camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=1:760997a6fb1839ac +geom 2: material #2 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:124afecfd63f5b25 camera=2:124afecfd63f5b25 shadow=2:124afecfd63f5b25 indirect=2:124afecfd63f5b25 +geom 3: material #3 Signature { kind: "MaterialX", cutout: false, straight: false, boundary: true, emits: false, uv: true, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=12:cd5fc406e2358085 camera=12:cd5fc406e2358085 shadow=12:cd5fc406e2358085 indirect=12:cd5fc406e2358085 +provenance material /World/Looks/Fog: MaterialOrigin { slots: [3], displaced: false } +provenance light /World/Geo/A: LightOrigin { index: 1, geoms: 1..2 } +provenance light /World/Geo/B: LightOrigin { index: 0, geoms: 0..1 } +provenance geometry 0..1: /World/Geo/B +provenance geometry 1..2: /World/Geo/A +provenance geometry 2..3: /World/Geo/Wall +provenance geometry 3..4: /World/Geo/FogBox +provenance mesh: MeshOrigin { geom_id: 2, slot: 0, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 3, slot: 1, baked: true, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 13313980259990466373, n_points: 4, n_indices: 4, n_uvs: None, smooth: true, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 1: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 360626586407720226, n_points: 8, n_indices: 24, n_uvs: None, smooth: false, material: 1 }), placements: 1, shared: false, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/World/Cam"), cameras: ["/World/Cam"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/World/Cam"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/fog_wall_usda-d41794b69bda1696-1.image b/crates/crust-core/tests/data/import_baselines/fog_wall_usda-d41794b69bda1696-1.image new file mode 100644 index 000000000..3cde27029 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/fog_wall_usda-d41794b69bda1696-1.image @@ -0,0 +1 @@ +640x360 16spp clamp-off e23cfbc57d681661 diff --git a/crates/crust-core/tests/data/import_baselines/foreign_mtlx_usda-1e9da30a7325ba81-1.digest b/crates/crust-core/tests/data/import_baselines/foreign_mtlx_usda-1e9da30a7325ba81-1.digest new file mode 100644 index 000000000..80de3a950 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/foreign_mtlx_usda-1e9da30a7325ba81-1.digest @@ -0,0 +1,20 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: None +camera: Camera { origin: Vec3A(15.0, 3.0, 3.0), lower_left_corner: Vec3A(4.8863316, -0.044797063, 4.174048), horizontal: Vec3A(1.2295314, 0.0, -6.147657), vertical: Vec3A(-0.44830504, 3.4967792, -0.08966101), u: Vec3A(0.19611613, 0.0, -0.9805807), v: Vec3A(-0.1271232, 0.991561, -0.02542464), lens_radius: 0.05, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: None +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 640, height: 360, region: PixelRect { x0: 0, y0: 0, x1: 640, y1: 360 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: None, depth_of_field: true, motion_blur: false, layer_stack: ["$DIR/foreign_mtlx.usda"], invisible_overrides: Some(0) } +layer: $DIR/foreign_mtlx.usda +warning: Warning { code: CameraMissing, kind: Skipped, count: 1, prims: [], message: "USD stage has no UsdGeomCamera — falling back to world::get_settings camera" } +lights: 0 +volumes: 0 +world: 1 geometries, PrimitiveBreakdown { triangles: 0, spheres: 1, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 0, spheres: 1, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +geom 0: material #0 Signature { kind: "MaterialX", cutout: false, straight: true, boundary: false, emits: false, uv: true, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:fb1e7d48790aec95 camera=1:fb1e7d48790aec95 shadow=1:fb1e7d48790aec95 indirect=1:fb1e7d48790aec95 +provenance material /World/Glass: MaterialOrigin { slots: [0], displaced: false } +provenance geometry 0..1: /World/Ball +provenance spheres: [0] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: None, cameras: [], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: None, offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/foreign_mtlx_usda-1e9da30a7325ba81-1.image b/crates/crust-core/tests/data/import_baselines/foreign_mtlx_usda-1e9da30a7325ba81-1.image new file mode 100644 index 000000000..c734c5b1d --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/foreign_mtlx_usda-1e9da30a7325ba81-1.image @@ -0,0 +1 @@ +640x360 16spp clamp-off a04a09c0d4b5e325 diff --git a/crates/crust-core/tests/data/import_baselines/fov_cm_usda-aeeac260878050ff-1.digest b/crates/crust-core/tests/data/import_baselines/fov_cm_usda-aeeac260878050ff-1.digest new file mode 100644 index 000000000..5216ed6b1 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/fov_cm_usda-aeeac260878050ff-1.digest @@ -0,0 +1,16 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/World/Cam") +camera: Camera { origin: Vec3A(0.0, 0.0, 0.0), lower_left_corner: Vec3A(-2.7183647, -1.5290802, -10.0), horizontal: Vec3A(5.4367294, 0.0, 0.0), vertical: Vec3A(0.0, 3.0581603, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 1.25, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: None +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 640, height: 360, region: PixelRect { x0: 0, y0: 0, x1: 640, y1: 360 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 50.0, aperture: [20.955, 15.2908], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 2.0, focus_distance: 10.0 }), depth_of_field: true, motion_blur: false, layer_stack: ["$DIR/fov_cm.usda"], invisible_overrides: Some(0) } +layer: $DIR/fov_cm.usda +lights: 0 +volumes: 0 +world: 0 geometries, PrimitiveBreakdown { triangles: 0, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 0, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/World/Cam"), cameras: ["/World/Cam"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/World/Cam"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/fov_cm_usda-aeeac260878050ff-1.image b/crates/crust-core/tests/data/import_baselines/fov_cm_usda-aeeac260878050ff-1.image new file mode 100644 index 000000000..c734c5b1d --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/fov_cm_usda-aeeac260878050ff-1.image @@ -0,0 +1 @@ +640x360 16spp clamp-off a04a09c0d4b5e325 diff --git a/crates/crust-core/tests/data/import_baselines/fov_m_usda-b134eebe4c048026-1.digest b/crates/crust-core/tests/data/import_baselines/fov_m_usda-b134eebe4c048026-1.digest new file mode 100644 index 000000000..b23b2b7b7 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/fov_m_usda-b134eebe4c048026-1.digest @@ -0,0 +1,16 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/World/Cam") +camera: Camera { origin: Vec3A(0.0, 0.0, 0.0), lower_left_corner: Vec3A(-2.7183647, -1.5290802, -10.0), horizontal: Vec3A(5.4367294, 0.0, 0.0), vertical: Vec3A(0.0, 3.0581603, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0125, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: None +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 640, height: 360, region: PixelRect { x0: 0, y0: 0, x1: 640, y1: 360 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 50.0, aperture: [20.955, 15.2908], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 2.0, focus_distance: 10.0 }), depth_of_field: true, motion_blur: false, layer_stack: ["$DIR/fov_m.usda"], invisible_overrides: Some(0) } +layer: $DIR/fov_m.usda +lights: 0 +volumes: 0 +world: 0 geometries, PrimitiveBreakdown { triangles: 0, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 0, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/World/Cam"), cameras: ["/World/Cam"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/World/Cam"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/fov_m_usda-b134eebe4c048026-1.image b/crates/crust-core/tests/data/import_baselines/fov_m_usda-b134eebe4c048026-1.image new file mode 100644 index 000000000..c734c5b1d --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/fov_m_usda-b134eebe4c048026-1.image @@ -0,0 +1 @@ +640x360 16spp clamp-off a04a09c0d4b5e325 diff --git a/crates/crust-core/tests/data/import_baselines/frustum_usda-78a6eed72a138fc6-1.digest b/crates/crust-core/tests/data/import_baselines/frustum_usda-78a6eed72a138fc6-1.digest new file mode 100644 index 000000000..b7627c20a --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/frustum_usda-78a6eed72a138fc6-1.digest @@ -0,0 +1,24 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/W/Cam") +camera: Camera { origin: Vec3A(0.0, 0.0, 0.0), lower_left_corner: Vec3A(-2.0955, -1.1787187, -10.0), horizontal: Vec3A(4.191, 0.0, 0.0), vertical: Vec3A(0.0, 2.3574374, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: Some("/Render/settings") +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 640, height: 360, region: PixelRect { x0: 0, y0: 0, x1: 640, y1: 360 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 50.0, aperture: [20.955, 11.787188], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 10.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/frustum.usda"], invisible_overrides: Some(0) } +layer: $DIR/frustum.usda +lights: 0 +volumes: 0 +world: 2 geometries, PrimitiveBreakdown { triangles: 780, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 780, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=12:ccd41ed5d0a28c25 camera=12:ccd41ed5d0a28c25 shadow=12:ccd41ed5d0a28c25 indirect=12:ccd41ed5d0a28c25 +geom 1: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=768:bb9aeaae01563c51 camera=768:bb9aeaae01563c51 shadow=768:bb9aeaae01563c51 indirect=768:bb9aeaae01563c51 +provenance geometry 0..1: /W/Behind +provenance geometry 1..2: /W/Ahead +provenance mesh: MeshOrigin { geom_id: 0, slot: 0, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 1, slot: 1, baked: true, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 18253940121988772376, n_points: 8, n_indices: 36, n_uvs: None, smooth: true, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 1: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 13487480004083563611, n_points: 386, n_indices: 2304, n_uvs: None, smooth: true, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: Some(ScreenKey([0, 0, 0, 1153360542, 0, 0, 0, 3212836864, 0, 3193345094, 1065353216, 0, 3193345094, 0, 3212836864, 3186714319, 0, 1065353216, 3186714319, 0, 0, 3212836864, 1073741824, 3])), domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/W/Cam"), cameras: ["/W/Cam"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/W/Cam"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/frustum_usda-78a6eed72a138fc6-1.image b/crates/crust-core/tests/data/import_baselines/frustum_usda-78a6eed72a138fc6-1.image new file mode 100644 index 000000000..c734c5b1d --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/frustum_usda-78a6eed72a138fc6-1.image @@ -0,0 +1 @@ +640x360 16spp clamp-off a04a09c0d4b5e325 diff --git a/crates/crust-core/tests/data/import_baselines/full_a_light_s_shape_usda-ca8302fa13315ae0-1.digest b/crates/crust-core/tests/data/import_baselines/full_a_light_s_shape_usda-ca8302fa13315ae0-1.digest new file mode 100644 index 000000000..c77d87e88 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/full_a_light_s_shape_usda-ca8302fa13315ae0-1.digest @@ -0,0 +1,41 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/World/Cam") +camera: Camera { origin: Vec3A(0.0, 1.0, 6.0), lower_left_corner: Vec3A(-4.7783756, -2.1855836, -4.0), horizontal: Vec3A(9.556751, 0.0, 0.0), vertical: Vec3A(0.0, 6.371167, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: Some("/Render/settings") +settings: RenderSettings { samples_per_pixel: 128, max_depth: 4, width: 48, height: 32, region: PixelRect { x0: 0, y0: 0, x1: 48, y1: 32 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 24.0, aperture: [20.955, 15.2908], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 10.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/full_a_light's_shape.usda", "$DIR/stage.usda"], invisible_overrides: Some(0) } +layer: $DIR/full_a_light's_shape.usda +layer: $DIR/stage.usda +lights: 2 +light 0: area name Some("/World/Key") lpe None pmf 0.5 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 1: dome name Some("/World/Sky") lpe None pmf 0.5 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 5 geometries, PrimitiveBreakdown { triangles: 4, spheres: 3, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 4, spheres: 3, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +geom 0: material #0 Signature { kind: "MaterialX", cutout: false, straight: false, boundary: false, emits: false, uv: true, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:ba01d90e2cc0d4f5 camera=1:ba01d90e2cc0d4f5 shadow=1:ba01d90e2cc0d4f5 indirect=1:ba01d90e2cc0d4f5 +geom 1: material #1 Signature { kind: "MaterialX", cutout: false, straight: false, boundary: false, emits: false, uv: true, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:910eeb9b40238145 camera=1:910eeb9b40238145 shadow=1:910eeb9b40238145 indirect=1:910eeb9b40238145 +geom 2: material #2 Signature { kind: "MaterialX", cutout: false, straight: false, boundary: false, emits: false, uv: true, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:fb8c14f38ace31a8 camera=1:fb8c14f38ace31a8 shadow=1:fb8c14f38ace31a8 indirect=1:fb8c14f38ace31a8 +geom 3: material #3 Signature { kind: "UsdPreviewSurface (textured)", cutout: false, straight: false, boundary: false, emits: false, uv: true, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv Some(0) shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:6787da8eacebee45 camera=2:6787da8eacebee45 shadow=2:6787da8eacebee45 indirect=2:6787da8eacebee45 +geom 4: material #4 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:fc0f2041959d1735 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=2:fc0f2041959d1735 +provenance material /World/Looks/Base: MaterialOrigin { slots: [1], displaced: false } +provenance material /World/Looks/Derived: MaterialOrigin { slots: [0], displaced: false } +provenance material /World/Looks/Std: MaterialOrigin { slots: [2], displaced: false } +provenance material /World/Looks/Tex: MaterialOrigin { slots: [3], displaced: false } +provenance material read: ("/World/Looks/Base", "/World/Looks/Derived") +provenance material read: ("/World/Looks/Base/Surface", "/World/Looks/Derived") +provenance arc source: /World/Looks/Base +provenance arc source: /World/Looks/Base/Surface +provenance light /World/Key: LightOrigin { index: 0, geoms: 4..5 } +provenance light /World/Sky: LightOrigin { index: 1, geoms: 5..5 } +provenance geometry 0..1: /World/Right +provenance geometry 1..2: /World/Left +provenance geometry 2..3: /World/Ball +provenance geometry 3..4: /World/Floor +provenance geometry 4..5: /World/Key +provenance mesh: MeshOrigin { geom_id: 3, slot: 0, baked: true, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 9851181043634021438, n_points: 4, n_indices: 4, n_uvs: Some(4), smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [0, 1, 2] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: true }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/World/Cam"), cameras: ["/World/Cam"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/World/Cam"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/full_a_light_s_shape_usda-ca8302fa13315ae0-1.image b/crates/crust-core/tests/data/import_baselines/full_a_light_s_shape_usda-ca8302fa13315ae0-1.image new file mode 100644 index 000000000..8496c7874 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/full_a_light_s_shape_usda-ca8302fa13315ae0-1.image @@ -0,0 +1 @@ +48x32 16spp clamp-off 7ad539de7ff7244a diff --git a/crates/crust-core/tests/data/import_baselines/full_a_transform_usda-b99d3970dc3191b0-1.digest b/crates/crust-core/tests/data/import_baselines/full_a_transform_usda-b99d3970dc3191b0-1.digest new file mode 100644 index 000000000..6f583b1bd --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/full_a_transform_usda-b99d3970dc3191b0-1.digest @@ -0,0 +1,41 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/World/Cam") +camera: Camera { origin: Vec3A(0.0, 1.0, 6.0), lower_left_corner: Vec3A(-4.7783756, -2.1855836, -4.0), horizontal: Vec3A(9.556751, 0.0, 0.0), vertical: Vec3A(0.0, 6.371167, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: Some("/Render/settings") +settings: RenderSettings { samples_per_pixel: 128, max_depth: 4, width: 48, height: 32, region: PixelRect { x0: 0, y0: 0, x1: 48, y1: 32 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 24.0, aperture: [20.955, 15.2908], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 10.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/full_a_transform.usda", "$DIR/stage.usda"], invisible_overrides: Some(0) } +layer: $DIR/full_a_transform.usda +layer: $DIR/stage.usda +lights: 2 +light 0: area name Some("/World/Key") lpe None pmf 0.5 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 1: dome name Some("/World/Sky") lpe None pmf 0.5 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 5 geometries, PrimitiveBreakdown { triangles: 4, spheres: 3, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 4, spheres: 3, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +geom 0: material #0 Signature { kind: "MaterialX", cutout: false, straight: false, boundary: false, emits: false, uv: true, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:ba01d90e2cc0d4f5 camera=1:ba01d90e2cc0d4f5 shadow=1:ba01d90e2cc0d4f5 indirect=1:ba01d90e2cc0d4f5 +geom 1: material #1 Signature { kind: "MaterialX", cutout: false, straight: false, boundary: false, emits: false, uv: true, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:910eeb9b40238145 camera=1:910eeb9b40238145 shadow=1:910eeb9b40238145 indirect=1:910eeb9b40238145 +geom 2: material #2 Signature { kind: "MaterialX", cutout: false, straight: false, boundary: false, emits: false, uv: true, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:fb8c14f38ace31a8 camera=1:fb8c14f38ace31a8 shadow=1:fb8c14f38ace31a8 indirect=1:fb8c14f38ace31a8 +geom 3: material #3 Signature { kind: "UsdPreviewSurface (textured)", cutout: false, straight: false, boundary: false, emits: false, uv: true, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv Some(0) shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:6787da8eacebee45 camera=2:6787da8eacebee45 shadow=2:6787da8eacebee45 indirect=2:6787da8eacebee45 +geom 4: material #4 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:7812e24c7b4d4335 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=2:7812e24c7b4d4335 +provenance material /World/Looks/Base: MaterialOrigin { slots: [1], displaced: false } +provenance material /World/Looks/Derived: MaterialOrigin { slots: [0], displaced: false } +provenance material /World/Looks/Std: MaterialOrigin { slots: [2], displaced: false } +provenance material /World/Looks/Tex: MaterialOrigin { slots: [3], displaced: false } +provenance material read: ("/World/Looks/Base", "/World/Looks/Derived") +provenance material read: ("/World/Looks/Base/Surface", "/World/Looks/Derived") +provenance arc source: /World/Looks/Base +provenance arc source: /World/Looks/Base/Surface +provenance light /World/Key: LightOrigin { index: 0, geoms: 4..5 } +provenance light /World/Sky: LightOrigin { index: 1, geoms: 5..5 } +provenance geometry 0..1: /World/Right +provenance geometry 1..2: /World/Left +provenance geometry 2..3: /World/Ball +provenance geometry 3..4: /World/Floor +provenance geometry 4..5: /World/Key +provenance mesh: MeshOrigin { geom_id: 3, slot: 0, baked: true, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 9851181043634021438, n_points: 4, n_indices: 4, n_uvs: Some(4), smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [0, 1, 2] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: true }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/World/Cam"), cameras: ["/World/Cam"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/World/Cam"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/full_a_transform_usda-b99d3970dc3191b0-1.image b/crates/crust-core/tests/data/import_baselines/full_a_transform_usda-b99d3970dc3191b0-1.image new file mode 100644 index 000000000..5e1bf2e96 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/full_a_transform_usda-b99d3970dc3191b0-1.image @@ -0,0 +1 @@ +48x32 16spp clamp-off b0533d215a5cd138 diff --git a/crates/crust-core/tests/data/import_baselines/full_adaptive_diced_rotate_usda-e8c2998b278e7b4c-1.digest b/crates/crust-core/tests/data/import_baselines/full_adaptive_diced_rotate_usda-e8c2998b278e7b4c-1.digest new file mode 100644 index 000000000..684378bf8 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/full_adaptive_diced_rotate_usda-e8c2998b278e7b4c-1.digest @@ -0,0 +1,44 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/World/Cam") +camera: Camera { origin: Vec3A(0.3, 0.6, 5.5), lower_left_corner: Vec3A(-2.8181643, -1.2734121, -4.1201806), horizontal: Vec3A(4.168041, 0.0, -0.4380788), vertical: Vec3A(-0.01718934, 2.3516948, -0.16354565), u: Vec3A(0.9945219, 0.0, -0.104528464), v: Vec3A(-0.007291537, 0.9975641, -0.06937434), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: Some("/Render/settings") +settings: RenderSettings { samples_per_pixel: 64, max_depth: 4, width: 48, height: 27, region: PixelRect { x0: 0, y0: 0, x1: 48, y1: 27 }, min_samples_per_pixel: 16, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 50.0, aperture: [20.955, 11.787188], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 10.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/full_adaptive_diced_rotate.usda", "$DIR/input.usda", "$ROOT/samples/subdivision_adaptive.usda"], invisible_overrides: Some(0) } +layer: $ROOT/samples/subdivision_adaptive.usda +layer: $DIR/full_adaptive_diced_rotate.usda +layer: $DIR/input.usda +lights: 2 +light 0: distant name Some("/World/Sun") lpe None pmf 0.5 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 1: dome name Some("/World/Sky") lpe None pmf 0.5 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 6 geometries, PrimitiveBreakdown { triangles: 2, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 5 } top level, PrimitiveBreakdown { triangles: 14, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 5 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:4d8d0a8634ac849c camera=2:4d8d0a8634ac849c shadow=2:4d8d0a8634ac849c indirect=2:4d8d0a8634ac849c +geom 1: material #1 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=12:9b9b8ee224ae5549 camera=12:9b9b8ee224ae5549 shadow=12:9b9b8ee224ae5549 indirect=12:9b9b8ee224ae5549 +geom 2: material #1 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=12:56e3227c4c4f5a8d camera=12:56e3227c4c4f5a8d shadow=12:56e3227c4c4f5a8d indirect=12:56e3227c4c4f5a8d +geom 3: material #1 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=12:14e930a5d0b26e15 camera=12:14e930a5d0b26e15 shadow=12:14e930a5d0b26e15 indirect=12:14e930a5d0b26e15 +geom 4: material #1 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=12:1d38133bdf0eede5 camera=12:1d38133bdf0eede5 shadow=12:1d38133bdf0eede5 indirect=12:1d38133bdf0eede5 +geom 5: material #1 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=12:96155934aeac1ed5 camera=12:96155934aeac1ed5 shadow=12:96155934aeac1ed5 indirect=12:96155934aeac1ed5 +provenance material /World/Materials/clay: MaterialOrigin { slots: [1, 2, 3, 4, 5], displaced: false } +provenance arc source: /World/Cage +provenance light /World/Sky: LightOrigin { index: 1, geoms: 6..6 } +provenance light /World/Sun: LightOrigin { index: 0, geoms: 0..0 } +provenance geometry 0..1: /World/Floor +provenance geometry 1..2: /World/Cube5 +provenance geometry 2..3: /World/Cube4 +provenance geometry 3..4: /World/Cube3 +provenance geometry 4..5: /World/Cube2 +provenance geometry 5..6: /World/Cube1 +provenance mesh: MeshOrigin { geom_id: 0, slot: 0, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 1, slot: 1, baked: false, moving: false } +provenance mesh: MeshOrigin { geom_id: 2, slot: 1, baked: false, moving: false } +provenance mesh: MeshOrigin { geom_id: 3, slot: 1, baked: false, moving: false } +provenance mesh: MeshOrigin { geom_id: 4, slot: 1, baked: false, moving: false } +provenance mesh: MeshOrigin { geom_id: 5, slot: 1, baked: false, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 2079923942787246473, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 1: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 16825702510234920227, n_points: 8, n_indices: 36, n_uvs: None, smooth: true, material: 1 }), placements: 5, shared: false, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: true }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: Some(ScreenKey([0, 1056964608, 1086324736, 1110016897, 0, 1056964608, 1086324736, 3212836864, 0, 3205561020, 1065353216, 0, 3205561020, 0, 3212836864, 3198360084, 0, 1065353216, 3198360084, 0, 0, 3212836864, 1090519040, 3])), domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/World/Cam"), cameras: ["/World/Dicer", "/World/Cam"], dicing: Some("/World/Dicer"), on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/World/Cam"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/full_adaptive_diced_rotate_usda-e8c2998b278e7b4c-1.image b/crates/crust-core/tests/data/import_baselines/full_adaptive_diced_rotate_usda-e8c2998b278e7b4c-1.image new file mode 100644 index 000000000..fcaffe734 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/full_adaptive_diced_rotate_usda-e8c2998b278e7b4c-1.image @@ -0,0 +1 @@ +48x27 16spp clamp-off 0d773aac90551cea diff --git a/crates/crust-core/tests/data/import_baselines/full_adaptive_diced_translate_usda-0b0bd3f1a63779cf-1.digest b/crates/crust-core/tests/data/import_baselines/full_adaptive_diced_translate_usda-0b0bd3f1a63779cf-1.digest new file mode 100644 index 000000000..5b5c72ed0 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/full_adaptive_diced_translate_usda-0b0bd3f1a63779cf-1.digest @@ -0,0 +1,44 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/World/Cam") +camera: Camera { origin: Vec3A(0.3, 0.6, 5.5), lower_left_corner: Vec3A(-1.7955, -0.57871866, -4.5), horizontal: Vec3A(4.191, 0.0, 0.0), vertical: Vec3A(0.0, 2.3574374, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: Some("/Render/settings") +settings: RenderSettings { samples_per_pixel: 64, max_depth: 4, width: 48, height: 27, region: PixelRect { x0: 0, y0: 0, x1: 48, y1: 27 }, min_samples_per_pixel: 16, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 50.0, aperture: [20.955, 11.787188], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 10.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/full_adaptive_diced_translate.usda", "$DIR/input.usda", "$ROOT/samples/subdivision_adaptive.usda"], invisible_overrides: Some(0) } +layer: $ROOT/samples/subdivision_adaptive.usda +layer: $DIR/full_adaptive_diced_translate.usda +layer: $DIR/input.usda +lights: 2 +light 0: distant name Some("/World/Sun") lpe None pmf 0.5 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 1: dome name Some("/World/Sky") lpe None pmf 0.5 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 6 geometries, PrimitiveBreakdown { triangles: 2, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 5 } top level, PrimitiveBreakdown { triangles: 14, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 5 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:4d8d0a8634ac849c camera=2:4d8d0a8634ac849c shadow=2:4d8d0a8634ac849c indirect=2:4d8d0a8634ac849c +geom 1: material #1 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=12:9b9b8ee224ae5549 camera=12:9b9b8ee224ae5549 shadow=12:9b9b8ee224ae5549 indirect=12:9b9b8ee224ae5549 +geom 2: material #1 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=12:56e3227c4c4f5a8d camera=12:56e3227c4c4f5a8d shadow=12:56e3227c4c4f5a8d indirect=12:56e3227c4c4f5a8d +geom 3: material #1 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=12:14e930a5d0b26e15 camera=12:14e930a5d0b26e15 shadow=12:14e930a5d0b26e15 indirect=12:14e930a5d0b26e15 +geom 4: material #1 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=12:1d38133bdf0eede5 camera=12:1d38133bdf0eede5 shadow=12:1d38133bdf0eede5 indirect=12:1d38133bdf0eede5 +geom 5: material #1 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=12:96155934aeac1ed5 camera=12:96155934aeac1ed5 shadow=12:96155934aeac1ed5 indirect=12:96155934aeac1ed5 +provenance material /World/Materials/clay: MaterialOrigin { slots: [1, 2, 3, 4, 5], displaced: false } +provenance arc source: /World/Cage +provenance light /World/Sky: LightOrigin { index: 1, geoms: 6..6 } +provenance light /World/Sun: LightOrigin { index: 0, geoms: 0..0 } +provenance geometry 0..1: /World/Floor +provenance geometry 1..2: /World/Cube5 +provenance geometry 2..3: /World/Cube4 +provenance geometry 3..4: /World/Cube3 +provenance geometry 4..5: /World/Cube2 +provenance geometry 5..6: /World/Cube1 +provenance mesh: MeshOrigin { geom_id: 0, slot: 0, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 1, slot: 1, baked: false, moving: false } +provenance mesh: MeshOrigin { geom_id: 2, slot: 1, baked: false, moving: false } +provenance mesh: MeshOrigin { geom_id: 3, slot: 1, baked: false, moving: false } +provenance mesh: MeshOrigin { geom_id: 4, slot: 1, baked: false, moving: false } +provenance mesh: MeshOrigin { geom_id: 5, slot: 1, baked: false, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 2079923942787246473, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 1: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 16825702510234920227, n_points: 8, n_indices: 36, n_uvs: None, smooth: true, material: 1 }), placements: 5, shared: false, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: true }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: Some(ScreenKey([0, 1056964608, 1086324736, 1110016897, 0, 1056964608, 1086324736, 3212836864, 0, 3205561020, 1065353216, 0, 3205561020, 0, 3212836864, 3198360084, 0, 1065353216, 3198360084, 0, 0, 3212836864, 1090519040, 3])), domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/World/Cam"), cameras: ["/World/Dicer", "/World/Cam"], dicing: Some("/World/Dicer"), on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/World/Cam"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/full_adaptive_diced_translate_usda-0b0bd3f1a63779cf-1.image b/crates/crust-core/tests/data/import_baselines/full_adaptive_diced_translate_usda-0b0bd3f1a63779cf-1.image new file mode 100644 index 000000000..bf6242a3f --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/full_adaptive_diced_translate_usda-0b0bd3f1a63779cf-1.image @@ -0,0 +1 @@ +48x27 16spp clamp-off af1f735b84e46b6c diff --git a/crates/crust-core/tests/data/import_baselines/full_adaptive_exposure_usda-6a1bc74cbd2099fa-1.digest b/crates/crust-core/tests/data/import_baselines/full_adaptive_exposure_usda-6a1bc74cbd2099fa-1.digest new file mode 100644 index 000000000..0933e9e0b --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/full_adaptive_exposure_usda-6a1bc74cbd2099fa-1.digest @@ -0,0 +1,46 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/World/Cam") +camera: Camera { origin: Vec3A(0.0, 0.5, 0.0), lower_left_corner: Vec3A(-2.0955, -0.6787187, -10.0), horizontal: Vec3A(4.191, 0.0, 0.0), vertical: Vec3A(0.0, 2.3574374, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: Some("/Render/settings") +settings: RenderSettings { samples_per_pixel: 64, max_depth: 4, width: 48, height: 27, region: PixelRect { x0: 0, y0: 0, x1: 48, y1: 27 }, min_samples_per_pixel: 16, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 2.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 50.0, aperture: [20.955, 11.787188], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 10.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/full_adaptive_exposure.usda", "$DIR/input.usda", "$ROOT/samples/subdivision_adaptive.usda"], invisible_overrides: Some(0) } +layer: $ROOT/samples/subdivision_adaptive.usda +layer: $DIR/full_adaptive_exposure.usda +layer: $DIR/input.usda +lights: 2 +light 0: distant name Some("/World/Sun") lpe None pmf 0.5 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 1: dome name Some("/World/Sky") lpe None pmf 0.5 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 6 geometries, PrimitiveBreakdown { triangles: 290, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 3 } top level, PrimitiveBreakdown { triangles: 302, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 3 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:4d8d0a8634ac849c camera=2:4d8d0a8634ac849c shadow=2:4d8d0a8634ac849c indirect=2:4d8d0a8634ac849c +geom 1: material #1 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=12:9b9b8ee224ae5549 camera=12:9b9b8ee224ae5549 shadow=12:9b9b8ee224ae5549 indirect=12:9b9b8ee224ae5549 +geom 2: material #1 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=12:56e3227c4c4f5a8d camera=12:56e3227c4c4f5a8d shadow=12:56e3227c4c4f5a8d indirect=12:56e3227c4c4f5a8d +geom 3: material #1 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=12:14e930a5d0b26e15 camera=12:14e930a5d0b26e15 shadow=12:14e930a5d0b26e15 indirect=12:14e930a5d0b26e15 +geom 4: material #1 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=48:85fd1a1e8638f8d5 camera=48:85fd1a1e8638f8d5 shadow=48:85fd1a1e8638f8d5 indirect=48:85fd1a1e8638f8d5 +geom 5: material #1 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=240:ceb54a03c39454ff camera=240:ceb54a03c39454ff shadow=240:ceb54a03c39454ff indirect=240:ceb54a03c39454ff +provenance material /World/Materials/clay: MaterialOrigin { slots: [1, 2, 3, 4, 5], displaced: false } +provenance arc source: /World/Cage +provenance light /World/Sky: LightOrigin { index: 1, geoms: 6..6 } +provenance light /World/Sun: LightOrigin { index: 0, geoms: 0..0 } +provenance geometry 0..1: /World/Floor +provenance geometry 1..2: /World/Cube5 +provenance geometry 2..3: /World/Cube4 +provenance geometry 3..4: /World/Cube3 +provenance geometry 4..5: /World/Cube2 +provenance geometry 5..6: /World/Cube1 +provenance mesh: MeshOrigin { geom_id: 0, slot: 0, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 1, slot: 1, baked: false, moving: false } +provenance mesh: MeshOrigin { geom_id: 2, slot: 1, baked: false, moving: false } +provenance mesh: MeshOrigin { geom_id: 3, slot: 1, baked: false, moving: false } +provenance mesh: MeshOrigin { geom_id: 4, slot: 2, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 5, slot: 3, baked: true, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 2079923942787246473, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 1: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 16825702510234920227, n_points: 8, n_indices: 36, n_uvs: None, smooth: true, material: 1 }), placements: 3, shared: false, displaced: false } +provenance mesh slot 2: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 9125125757038733368, n_points: 26, n_indices: 144, n_uvs: None, smooth: true, material: 1 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 3: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 13090063996844779502, n_points: 122, n_indices: 720, n_uvs: None, smooth: true, material: 1 }), placements: 1, shared: false, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: true }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: Some(ScreenKey([0, 1056964608, 0, 1122308081, 0, 1056964608, 0, 3212836864, 0, 3193345094, 1065353216, 0, 3193345094, 0, 3212836864, 3186714319, 0, 1065353216, 3186714319, 0, 0, 3212836864, 1090519040, 3])), domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/World/Cam"), cameras: ["/World/Cam"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/World/Cam"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/full_adaptive_exposure_usda-6a1bc74cbd2099fa-1.image b/crates/crust-core/tests/data/import_baselines/full_adaptive_exposure_usda-6a1bc74cbd2099fa-1.image new file mode 100644 index 000000000..e3b32f859 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/full_adaptive_exposure_usda-6a1bc74cbd2099fa-1.image @@ -0,0 +1 @@ +48x27 16spp clamp-off 1f3143034888bf63 diff --git a/crates/crust-core/tests/data/import_baselines/full_adaptive_undo_exposure_usda-8cd035220544928f-1.digest b/crates/crust-core/tests/data/import_baselines/full_adaptive_undo_exposure_usda-8cd035220544928f-1.digest new file mode 100644 index 000000000..f67425cdf --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/full_adaptive_undo_exposure_usda-8cd035220544928f-1.digest @@ -0,0 +1,46 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/World/Cam") +camera: Camera { origin: Vec3A(0.0, 0.5, 0.0), lower_left_corner: Vec3A(-2.0955, -0.6787187, -10.0), horizontal: Vec3A(4.191, 0.0, 0.0), vertical: Vec3A(0.0, 2.3574374, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: Some("/Render/settings") +settings: RenderSettings { samples_per_pixel: 64, max_depth: 4, width: 48, height: 27, region: PixelRect { x0: 0, y0: 0, x1: 48, y1: 27 }, min_samples_per_pixel: 16, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 50.0, aperture: [20.955, 11.787188], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 10.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/full_adaptive_undo_exposure.usda", "$DIR/input.usda", "$ROOT/samples/subdivision_adaptive.usda"], invisible_overrides: Some(0) } +layer: $ROOT/samples/subdivision_adaptive.usda +layer: $DIR/full_adaptive_undo_exposure.usda +layer: $DIR/input.usda +lights: 2 +light 0: distant name Some("/World/Sun") lpe None pmf 0.5 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 1: dome name Some("/World/Sky") lpe None pmf 0.5 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 6 geometries, PrimitiveBreakdown { triangles: 290, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 3 } top level, PrimitiveBreakdown { triangles: 302, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 3 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:4d8d0a8634ac849c camera=2:4d8d0a8634ac849c shadow=2:4d8d0a8634ac849c indirect=2:4d8d0a8634ac849c +geom 1: material #1 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=12:9b9b8ee224ae5549 camera=12:9b9b8ee224ae5549 shadow=12:9b9b8ee224ae5549 indirect=12:9b9b8ee224ae5549 +geom 2: material #1 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=12:56e3227c4c4f5a8d camera=12:56e3227c4c4f5a8d shadow=12:56e3227c4c4f5a8d indirect=12:56e3227c4c4f5a8d +geom 3: material #1 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=12:14e930a5d0b26e15 camera=12:14e930a5d0b26e15 shadow=12:14e930a5d0b26e15 indirect=12:14e930a5d0b26e15 +geom 4: material #1 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=48:85fd1a1e8638f8d5 camera=48:85fd1a1e8638f8d5 shadow=48:85fd1a1e8638f8d5 indirect=48:85fd1a1e8638f8d5 +geom 5: material #1 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=240:ceb54a03c39454ff camera=240:ceb54a03c39454ff shadow=240:ceb54a03c39454ff indirect=240:ceb54a03c39454ff +provenance material /World/Materials/clay: MaterialOrigin { slots: [1, 2, 3, 4, 5], displaced: false } +provenance arc source: /World/Cage +provenance light /World/Sky: LightOrigin { index: 1, geoms: 6..6 } +provenance light /World/Sun: LightOrigin { index: 0, geoms: 0..0 } +provenance geometry 0..1: /World/Floor +provenance geometry 1..2: /World/Cube5 +provenance geometry 2..3: /World/Cube4 +provenance geometry 3..4: /World/Cube3 +provenance geometry 4..5: /World/Cube2 +provenance geometry 5..6: /World/Cube1 +provenance mesh: MeshOrigin { geom_id: 0, slot: 0, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 1, slot: 1, baked: false, moving: false } +provenance mesh: MeshOrigin { geom_id: 2, slot: 1, baked: false, moving: false } +provenance mesh: MeshOrigin { geom_id: 3, slot: 1, baked: false, moving: false } +provenance mesh: MeshOrigin { geom_id: 4, slot: 2, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 5, slot: 3, baked: true, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 2079923942787246473, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 1: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 16825702510234920227, n_points: 8, n_indices: 36, n_uvs: None, smooth: true, material: 1 }), placements: 3, shared: false, displaced: false } +provenance mesh slot 2: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 9125125757038733368, n_points: 26, n_indices: 144, n_uvs: None, smooth: true, material: 1 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 3: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 13090063996844779502, n_points: 122, n_indices: 720, n_uvs: None, smooth: true, material: 1 }), placements: 1, shared: false, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: true }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: Some(ScreenKey([0, 1056964608, 0, 1122308081, 0, 1056964608, 0, 3212836864, 0, 3193345094, 1065353216, 0, 3193345094, 0, 3212836864, 3186714319, 0, 1065353216, 3186714319, 0, 0, 3212836864, 1090519040, 3])), domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/World/Cam"), cameras: ["/World/Cam"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/World/Cam"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/full_adaptive_undo_exposure_usda-8cd035220544928f-1.image b/crates/crust-core/tests/data/import_baselines/full_adaptive_undo_exposure_usda-8cd035220544928f-1.image new file mode 100644 index 000000000..35947da35 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/full_adaptive_undo_exposure_usda-8cd035220544928f-1.image @@ -0,0 +1 @@ +48x27 16spp clamp-off cc1ed1cd405cee06 diff --git a/crates/crust-core/tests/data/import_baselines/full_base_colour_usda-185573627cdcf2a6-1.digest b/crates/crust-core/tests/data/import_baselines/full_base_colour_usda-185573627cdcf2a6-1.digest new file mode 100644 index 000000000..f76425d9a --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/full_base_colour_usda-185573627cdcf2a6-1.digest @@ -0,0 +1,41 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/World/Cam") +camera: Camera { origin: Vec3A(0.0, 1.0, 6.0), lower_left_corner: Vec3A(-4.7783756, -2.1855836, -4.0), horizontal: Vec3A(9.556751, 0.0, 0.0), vertical: Vec3A(0.0, 6.371167, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: Some("/Render/settings") +settings: RenderSettings { samples_per_pixel: 128, max_depth: 2, width: 48, height: 32, region: PixelRect { x0: 0, y0: 0, x1: 48, y1: 32 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: PmjBn, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 2.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 24.0, aperture: [20.955, 15.2908], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 10.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/full_base_colour.usda", "$DIR/stage.usda"], invisible_overrides: Some(0) } +layer: $DIR/full_base_colour.usda +layer: $DIR/stage.usda +lights: 2 +light 0: area name Some("/World/Key") lpe None pmf 0.5 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 1: dome name Some("/World/Sky") lpe None pmf 0.5 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 5 geometries, PrimitiveBreakdown { triangles: 4, spheres: 3, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 4, spheres: 3, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +geom 0: material #0 Signature { kind: "MaterialX", cutout: false, straight: false, boundary: false, emits: false, uv: true, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:ba01d90e2cc0d4f5 camera=1:ba01d90e2cc0d4f5 shadow=1:ba01d90e2cc0d4f5 indirect=1:ba01d90e2cc0d4f5 +geom 1: material #1 Signature { kind: "MaterialX", cutout: false, straight: false, boundary: false, emits: false, uv: true, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:910eeb9b40238145 camera=1:910eeb9b40238145 shadow=1:910eeb9b40238145 indirect=1:910eeb9b40238145 +geom 2: material #2 Signature { kind: "MaterialX", cutout: false, straight: false, boundary: false, emits: false, uv: true, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:ee76fd7ed45c4a85 camera=1:ee76fd7ed45c4a85 shadow=1:ee76fd7ed45c4a85 indirect=1:ee76fd7ed45c4a85 +geom 3: material #3 Signature { kind: "UsdPreviewSurface (textured)", cutout: false, straight: false, boundary: false, emits: false, uv: true, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv Some(0) shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:6787da8eacebee45 camera=2:6787da8eacebee45 shadow=2:6787da8eacebee45 indirect=2:6787da8eacebee45 +geom 4: material #4 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:7812e24c7b4d4335 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=2:7812e24c7b4d4335 +provenance material /World/Looks/Base: MaterialOrigin { slots: [1], displaced: false } +provenance material /World/Looks/Derived: MaterialOrigin { slots: [0], displaced: false } +provenance material /World/Looks/Std: MaterialOrigin { slots: [2], displaced: false } +provenance material /World/Looks/Tex: MaterialOrigin { slots: [3], displaced: false } +provenance material read: ("/World/Looks/Base", "/World/Looks/Derived") +provenance material read: ("/World/Looks/Base/Surface", "/World/Looks/Derived") +provenance arc source: /World/Looks/Base +provenance arc source: /World/Looks/Base/Surface +provenance light /World/Key: LightOrigin { index: 0, geoms: 4..5 } +provenance light /World/Sky: LightOrigin { index: 1, geoms: 5..5 } +provenance geometry 0..1: /World/Right +provenance geometry 1..2: /World/Left +provenance geometry 2..3: /World/Ball +provenance geometry 3..4: /World/Floor +provenance geometry 4..5: /World/Key +provenance mesh: MeshOrigin { geom_id: 3, slot: 0, baked: true, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 9851181043634021438, n_points: 4, n_indices: 4, n_uvs: Some(4), smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [0, 1, 2] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: true }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/World/Cam"), cameras: ["/World/Cam"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/World/Cam"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/full_base_colour_usda-185573627cdcf2a6-1.image b/crates/crust-core/tests/data/import_baselines/full_base_colour_usda-185573627cdcf2a6-1.image new file mode 100644 index 000000000..ab21343ca --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/full_base_colour_usda-185573627cdcf2a6-1.image @@ -0,0 +1 @@ +48x32 16spp clamp-off ff2beaa5102f00b8 diff --git a/crates/crust-core/tests/data/import_baselines/full_carried_fog_usda-b5397418f77073c1-1.digest b/crates/crust-core/tests/data/import_baselines/full_carried_fog_usda-b5397418f77073c1-1.digest new file mode 100644 index 000000000..3e75cb560 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/full_carried_fog_usda-b5397418f77073c1-1.digest @@ -0,0 +1,30 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/World/Cam") +camera: Camera { origin: Vec3A(0.3, 0.6, 5.5), lower_left_corner: Vec3A(-5.4717097, -3.2753882, -3.7005186), horizontal: Vec3A(9.504398, 0.0, -0.9989525), vertical: Vec3A(-0.0464556, 6.3556476, -0.4419955), u: Vec3A(0.9945219, 0.0, -0.104528464), v: Vec3A(-0.007291537, 0.9975641, -0.06937434), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: Some("/Render/settings") +settings: RenderSettings { samples_per_pixel: 128, max_depth: 2, width: 48, height: 32, region: PixelRect { x0: 0, y0: 0, x1: 48, y1: 32 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 24.0, aperture: [20.955, 15.2908], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 10.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/full_carried_fog.usda", "$DIR/input.usda"], invisible_overrides: Some(0) } +layer: $DIR/full_carried_fog.usda +layer: $DIR/input.usda +lights: 2 +light 0: distant name Some("/World/Sun") lpe None pmf 0.5 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 1: dome name Some("/World/Sky") lpe None pmf 0.5 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 1 +volume 0: sigma_s Vec3A(0.4, 0.4, 0.4) sigma_a Vec3A(0.05, 0.05, 0.05) g 0.0 emission Vec3A(0.0, 0.0, 0.0) mask RayMask(4294967295) class 65535 homogeneous true +world: 2 geometries, PrimitiveBreakdown { triangles: 4, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 4, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:0e0a4667da70ad35 camera=2:0e0a4667da70ad35 shadow=2:0e0a4667da70ad35 indirect=2:0e0a4667da70ad35 +geom 1: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:6787da8eacebee45 camera=2:6787da8eacebee45 shadow=2:6787da8eacebee45 indirect=2:6787da8eacebee45 +provenance light /World/Sky: LightOrigin { index: 1, geoms: 2..2 } +provenance light /World/Sun: LightOrigin { index: 0, geoms: 2..2 } +provenance geometry 0..1: /World/Card +provenance geometry 1..2: /World/Floor +provenance mesh: MeshOrigin { geom_id: 0, slot: 0, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 1, slot: 1, baked: true, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 18358658470076285213, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 1: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 800109031887815527, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [] +provenance volumes: ["/World/Cam/Fog"] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: true }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/World/Cam"), cameras: ["/World/Cam"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/World/Cam"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/full_carried_fog_usda-b5397418f77073c1-1.image b/crates/crust-core/tests/data/import_baselines/full_carried_fog_usda-b5397418f77073c1-1.image new file mode 100644 index 000000000..bbf584960 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/full_carried_fog_usda-b5397418f77073c1-1.image @@ -0,0 +1 @@ +48x32 16spp clamp-off 9e4982191bc1cf10 diff --git a/crates/crust-core/tests/data/import_baselines/full_changed_on_disk_usda-0c8b6f9bfb68059a-1.digest b/crates/crust-core/tests/data/import_baselines/full_changed_on_disk_usda-0c8b6f9bfb68059a-1.digest new file mode 100644 index 000000000..8202d7dc0 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/full_changed_on_disk_usda-0c8b6f9bfb68059a-1.digest @@ -0,0 +1,41 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/World/Cam") +camera: Camera { origin: Vec3A(0.0, 1.0, 6.0), lower_left_corner: Vec3A(-4.7783756, -2.1855836, -4.0), horizontal: Vec3A(9.556751, 0.0, 0.0), vertical: Vec3A(0.0, 6.371167, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: Some("/Render/settings") +settings: RenderSettings { samples_per_pixel: 128, max_depth: 4, width: 48, height: 32, region: PixelRect { x0: 0, y0: 0, x1: 48, y1: 32 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 24.0, aperture: [20.955, 15.2908], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 10.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/full_changed_on_disk.usda", "$DIR/stage.usda"], invisible_overrides: Some(0) } +layer: $DIR/full_changed_on_disk.usda +layer: $DIR/stage.usda +lights: 2 +light 0: area name Some("/World/Key") lpe None pmf 0.5 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 1: dome name Some("/World/Sky") lpe None pmf 0.5 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 5 geometries, PrimitiveBreakdown { triangles: 4, spheres: 3, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 4, spheres: 3, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +geom 0: material #0 Signature { kind: "MaterialX", cutout: false, straight: false, boundary: false, emits: false, uv: true, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:ba01d90e2cc0d4f5 camera=1:ba01d90e2cc0d4f5 shadow=1:ba01d90e2cc0d4f5 indirect=1:ba01d90e2cc0d4f5 +geom 1: material #1 Signature { kind: "MaterialX", cutout: false, straight: false, boundary: false, emits: false, uv: true, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:910eeb9b40238145 camera=1:910eeb9b40238145 shadow=1:910eeb9b40238145 indirect=1:910eeb9b40238145 +geom 2: material #2 Signature { kind: "MaterialX", cutout: false, straight: false, boundary: false, emits: false, uv: true, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:ee76fd7ed45c4a85 camera=1:ee76fd7ed45c4a85 shadow=1:ee76fd7ed45c4a85 indirect=1:ee76fd7ed45c4a85 +geom 3: material #3 Signature { kind: "UsdPreviewSurface (textured)", cutout: false, straight: false, boundary: false, emits: false, uv: true, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv Some(0) shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:6787da8eacebee45 camera=2:6787da8eacebee45 shadow=2:6787da8eacebee45 indirect=2:6787da8eacebee45 +geom 4: material #4 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:7812e24c7b4d4335 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=2:7812e24c7b4d4335 +provenance material /World/Looks/Base: MaterialOrigin { slots: [1], displaced: false } +provenance material /World/Looks/Derived: MaterialOrigin { slots: [0], displaced: false } +provenance material /World/Looks/Std: MaterialOrigin { slots: [2], displaced: false } +provenance material /World/Looks/Tex: MaterialOrigin { slots: [3], displaced: false } +provenance material read: ("/World/Looks/Base", "/World/Looks/Derived") +provenance material read: ("/World/Looks/Base/Surface", "/World/Looks/Derived") +provenance arc source: /World/Looks/Base +provenance arc source: /World/Looks/Base/Surface +provenance light /World/Key: LightOrigin { index: 0, geoms: 4..5 } +provenance light /World/Sky: LightOrigin { index: 1, geoms: 5..5 } +provenance geometry 0..1: /World/Right +provenance geometry 1..2: /World/Left +provenance geometry 2..3: /World/Ball +provenance geometry 3..4: /World/Floor +provenance geometry 4..5: /World/Key +provenance mesh: MeshOrigin { geom_id: 3, slot: 0, baked: true, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 9851181043634021438, n_points: 4, n_indices: 4, n_uvs: Some(4), smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [0, 1, 2] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: true }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/World/Cam"), cameras: ["/World/Cam"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/World/Cam"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/full_changed_on_disk_usda-0c8b6f9bfb68059a-1.image b/crates/crust-core/tests/data/import_baselines/full_changed_on_disk_usda-0c8b6f9bfb68059a-1.image new file mode 100644 index 000000000..79ca9c1a0 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/full_changed_on_disk_usda-0c8b6f9bfb68059a-1.image @@ -0,0 +1 @@ +48x32 16spp clamp-off 6673c392f1d4262b diff --git a/crates/crust-core/tests/data/import_baselines/full_cornellbox_rotate_usda-76b2e5fb271f6c0c-1.digest b/crates/crust-core/tests/data/import_baselines/full_cornellbox_rotate_usda-76b2e5fb271f6c0c-1.digest new file mode 100644 index 000000000..3cc2104bd --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/full_cornellbox_rotate_usda-76b2e5fb271f6c0c-1.digest @@ -0,0 +1,41 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/scene/camera1") +camera: Camera { origin: Vec3A(0.3, 0.6, 5.5), lower_left_corner: Vec3A(-7.643816, -4.736597, 1.6703372), horizontal: Vec3A(14.9178095, 0.0, -1.567925), vertical: Vec3A(-0.07291528, 9.975629, -0.6937425), u: Vec3A(0.9945219, 0.0, -0.104528464), v: Vec3A(-0.007291537, 0.9975641, -0.06937434), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: Some(Vec4(-0.10427384, -0.06975647, -0.99209934, 5.4296823)), far: Some(Vec4(0.10427384, 0.06975647, 0.99209934, 9994.471)), planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: Some("/Render/settings") +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 48, height: 32, region: PixelRect { x0: 0, y0: 0, x1: 48, y1: 32 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 12.700017, aperture: [25.4, 25.4], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 5.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/full_cornellbox_rotate.usda", "$DIR/input.usda", "$ROOT/samples/cornellbox.usda"], invisible_overrides: Some(0) } +layer: $ROOT/samples/cornellbox.usda +layer: $DIR/full_cornellbox_rotate.usda +layer: $DIR/input.usda +warning: Warning { code: MaterialFallbackDefault, kind: Skipped, count: 1, prims: ["/scene/Looks/initialShadingGroup"], message: "Material /scene/Looks/initialShadingGroup has no surface shader — using default grey OpenPBR" } +lights: 1 +light 0: dome name Some("/scene/Sky") lpe None pmf 1.0 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 5 geometries, PrimitiveBreakdown { triangles: 822, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 2 } top level, PrimitiveBreakdown { triangles: 1582, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 2 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.3585339 motion [] pieces all=760:2344ecf63e12c441 camera=760:2344ecf63e12c441 shadow=760:2344ecf63e12c441 indirect=760:2344ecf63e12c441 +geom 1: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.25 motion [] pieces all=800:4a8c9f44d777e131 camera=800:4a8c9f44d777e131 shadow=800:4a8c9f44d777e131 indirect=800:4a8c9f44d777e131 +geom 2: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=12:94a297badef437e1 camera=12:94a297badef437e1 shadow=12:94a297badef437e1 indirect=12:94a297badef437e1 +geom 3: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.2 motion [] pieces all=760:c2b60a75c52c78b9 camera=760:c2b60a75c52c78b9 shadow=760:c2b60a75c52c78b9 indirect=760:c2b60a75c52c78b9 +geom 4: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 4.0 motion [] pieces all=10:88b22fc3345d5b05 camera=10:88b22fc3345d5b05 shadow=10:88b22fc3345d5b05 indirect=10:88b22fc3345d5b05 +provenance material /scene/Looks/initialShadingGroup: MaterialOrigin { slots: [0, 1, 2, 3, 4], displaced: false } +provenance light /scene/Sky: LightOrigin { index: 0, geoms: 5..5 } +provenance geometry 0..1: /scene/pSphere2 +provenance geometry 1..2: /scene/pTorus1 +provenance geometry 2..3: /scene/pCube2 +provenance geometry 3..4: /scene/pSphere1 +provenance geometry 4..5: /scene/pCube1 +provenance mesh: MeshOrigin { geom_id: 0, slot: 0, baked: false, moving: false } +provenance mesh: MeshOrigin { geom_id: 1, slot: 1, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 2, slot: 2, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 3, slot: 0, baked: false, moving: false } +provenance mesh: MeshOrigin { geom_id: 4, slot: 3, baked: true, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 17119738035130870988, n_points: 382, n_indices: 1560, n_uvs: None, smooth: false, material: 0 }), placements: 2, shared: false, displaced: false } +provenance mesh slot 1: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 6096447469814747168, n_points: 400, n_indices: 1600, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 2: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 1739488954094729910, n_points: 8, n_indices: 24, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 3: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 12343188411137242430, n_points: 8, n_indices: 20, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: true }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/scene/camera1"), cameras: ["/scene/camera1"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/scene/camera1"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/full_cornellbox_rotate_usda-76b2e5fb271f6c0c-1.image b/crates/crust-core/tests/data/import_baselines/full_cornellbox_rotate_usda-76b2e5fb271f6c0c-1.image new file mode 100644 index 000000000..93c96d061 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/full_cornellbox_rotate_usda-76b2e5fb271f6c0c-1.image @@ -0,0 +1 @@ +48x32 16spp clamp-off 1916c797d2192e99 diff --git a/crates/crust-core/tests/data/import_baselines/full_cornellbox_translate_usda-ab7177593fd6f36b-1.digest b/crates/crust-core/tests/data/import_baselines/full_cornellbox_translate_usda-ab7177593fd6f36b-1.digest new file mode 100644 index 000000000..e4754c500 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/full_cornellbox_translate_usda-ab7177593fd6f36b-1.digest @@ -0,0 +1,41 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/scene/camera1") +camera: Camera { origin: Vec3A(0.3, 0.6, 5.5), lower_left_corner: Vec3A(-7.1999903, -4.399994, 0.5), horizontal: Vec3A(14.999981, 0.0, 0.0), vertical: Vec3A(0.0, 9.999988, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: Some(Vec4(0.0, 0.0, -1.0, 5.4)), far: Some(Vec4(0.0, 0.0, 1.0, 9994.5)), planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: Some("/Render/settings") +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 48, height: 32, region: PixelRect { x0: 0, y0: 0, x1: 48, y1: 32 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 12.700017, aperture: [25.4, 25.4], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 5.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/full_cornellbox_translate.usda", "$DIR/input.usda", "$ROOT/samples/cornellbox.usda"], invisible_overrides: Some(0) } +layer: $ROOT/samples/cornellbox.usda +layer: $DIR/full_cornellbox_translate.usda +layer: $DIR/input.usda +warning: Warning { code: MaterialFallbackDefault, kind: Skipped, count: 1, prims: ["/scene/Looks/initialShadingGroup"], message: "Material /scene/Looks/initialShadingGroup has no surface shader — using default grey OpenPBR" } +lights: 1 +light 0: dome name Some("/scene/Sky") lpe None pmf 1.0 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 5 geometries, PrimitiveBreakdown { triangles: 822, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 2 } top level, PrimitiveBreakdown { triangles: 1582, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 2 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.3585339 motion [] pieces all=760:2344ecf63e12c441 camera=760:2344ecf63e12c441 shadow=760:2344ecf63e12c441 indirect=760:2344ecf63e12c441 +geom 1: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.25 motion [] pieces all=800:4a8c9f44d777e131 camera=800:4a8c9f44d777e131 shadow=800:4a8c9f44d777e131 indirect=800:4a8c9f44d777e131 +geom 2: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=12:94a297badef437e1 camera=12:94a297badef437e1 shadow=12:94a297badef437e1 indirect=12:94a297badef437e1 +geom 3: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.2 motion [] pieces all=760:c2b60a75c52c78b9 camera=760:c2b60a75c52c78b9 shadow=760:c2b60a75c52c78b9 indirect=760:c2b60a75c52c78b9 +geom 4: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 4.0 motion [] pieces all=10:88b22fc3345d5b05 camera=10:88b22fc3345d5b05 shadow=10:88b22fc3345d5b05 indirect=10:88b22fc3345d5b05 +provenance material /scene/Looks/initialShadingGroup: MaterialOrigin { slots: [0, 1, 2, 3, 4], displaced: false } +provenance light /scene/Sky: LightOrigin { index: 0, geoms: 5..5 } +provenance geometry 0..1: /scene/pSphere2 +provenance geometry 1..2: /scene/pTorus1 +provenance geometry 2..3: /scene/pCube2 +provenance geometry 3..4: /scene/pSphere1 +provenance geometry 4..5: /scene/pCube1 +provenance mesh: MeshOrigin { geom_id: 0, slot: 0, baked: false, moving: false } +provenance mesh: MeshOrigin { geom_id: 1, slot: 1, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 2, slot: 2, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 3, slot: 0, baked: false, moving: false } +provenance mesh: MeshOrigin { geom_id: 4, slot: 3, baked: true, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 17119738035130870988, n_points: 382, n_indices: 1560, n_uvs: None, smooth: false, material: 0 }), placements: 2, shared: false, displaced: false } +provenance mesh slot 1: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 6096447469814747168, n_points: 400, n_indices: 1600, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 2: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 1739488954094729910, n_points: 8, n_indices: 24, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 3: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 12343188411137242430, n_points: 8, n_indices: 20, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: true }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/scene/camera1"), cameras: ["/scene/camera1"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/scene/camera1"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/full_cornellbox_translate_usda-ab7177593fd6f36b-1.image b/crates/crust-core/tests/data/import_baselines/full_cornellbox_translate_usda-ab7177593fd6f36b-1.image new file mode 100644 index 000000000..8ad243e38 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/full_cornellbox_translate_usda-ab7177593fd6f36b-1.image @@ -0,0 +1 @@ +48x32 16spp clamp-off 6f05189de4721ea1 diff --git a/crates/crust-core/tests/data/import_baselines/full_demoted_K1_usda-e328a49ee95fd405-1.digest b/crates/crust-core/tests/data/import_baselines/full_demoted_K1_usda-e328a49ee95fd405-1.digest new file mode 100644 index 000000000..613fd55d7 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/full_demoted_K1_usda-e328a49ee95fd405-1.digest @@ -0,0 +1,39 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/World/Cam") +camera: Camera { origin: Vec3A(0.0, 1.5, 8.0), lower_left_corner: Vec3A(-4.7783756, -1.6855836, -2.0), horizontal: Vec3A(9.556751, 0.0, 0.0), vertical: Vec3A(0.0, 6.371167, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: Some("/Render/settings") +settings: RenderSettings { samples_per_pixel: 128, max_depth: 2, width: 48, height: 32, region: PixelRect { x0: 0, y0: 0, x1: 48, y1: 32 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 24.0, aperture: [20.955, 15.2908], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 10.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/full_demoted_K1.usda", "$DIR/input.usda"], invisible_overrides: Some(0) } +layer: $DIR/full_demoted_K1.usda +layer: $DIR/input.usda +lights: 4 +light 0: area name Some("/World/K4") lpe None pmf 0.25 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 1: area name Some("/World/K3") lpe None pmf 0.25 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 2: area name Some("/World/K2") lpe None pmf 0.25 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 3: area name Some("/World/K1") lpe None pmf 0.25 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 6 geometries, PrimitiveBreakdown { triangles: 2, spheres: 5, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 2, spheres: 5, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:6787da8eacebee45 camera=2:6787da8eacebee45 shadow=2:6787da8eacebee45 indirect=2:6787da8eacebee45 +geom 1: material #1 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:18dc8de5ad9d8317 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=1:18dc8de5ad9d8317 +geom 2: material #2 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:a357e5efbc0c08cc camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=1:a357e5efbc0c08cc +geom 3: material #3 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=0:cbf29ce484222325 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=0:cbf29ce484222325 +geom 4: material #4 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:15501014f6ccffa4 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=1:15501014f6ccffa4 +geom 5: material #5 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:ee57dfea4661cce3 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=1:ee57dfea4661cce3 +provenance light /World/K1: LightOrigin { index: 3, geoms: 5..6 } +provenance light /World/K2: LightOrigin { index: 2, geoms: 4..5 } +provenance light /World/K3: LightOrigin { index: 1, geoms: 2..3 } +provenance light /World/K4: LightOrigin { index: 0, geoms: 1..2 } +provenance geometry 0..1: /World/Floor +provenance geometry 1..2: /World/K4 +provenance geometry 2..3: /World/K3 +provenance geometry 3..4: /World/Dead +provenance geometry 4..5: /World/K2 +provenance geometry 5..6: /World/K1 +provenance mesh: MeshOrigin { geom_id: 0, slot: 0, baked: true, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 800109031887815527, n_points: 4, n_indices: 4, n_uvs: None, smooth: true, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: true }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/World/Cam"), cameras: ["/World/Cam"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/World/Cam"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/full_demoted_K1_usda-e328a49ee95fd405-1.image b/crates/crust-core/tests/data/import_baselines/full_demoted_K1_usda-e328a49ee95fd405-1.image new file mode 100644 index 000000000..7538440af --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/full_demoted_K1_usda-e328a49ee95fd405-1.image @@ -0,0 +1 @@ +48x32 16spp clamp-off fbd0efbe7d828a88 diff --git a/crates/crust-core/tests/data/import_baselines/full_demoted_K4_usda-d0354a764756e3b4-1.digest b/crates/crust-core/tests/data/import_baselines/full_demoted_K4_usda-d0354a764756e3b4-1.digest new file mode 100644 index 000000000..51344b194 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/full_demoted_K4_usda-d0354a764756e3b4-1.digest @@ -0,0 +1,39 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/World/Cam") +camera: Camera { origin: Vec3A(0.0, 1.5, 8.0), lower_left_corner: Vec3A(-4.7783756, -1.6855836, -2.0), horizontal: Vec3A(9.556751, 0.0, 0.0), vertical: Vec3A(0.0, 6.371167, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: Some("/Render/settings") +settings: RenderSettings { samples_per_pixel: 128, max_depth: 2, width: 48, height: 32, region: PixelRect { x0: 0, y0: 0, x1: 48, y1: 32 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 24.0, aperture: [20.955, 15.2908], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 10.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/full_demoted_K4.usda", "$DIR/input.usda"], invisible_overrides: Some(0) } +layer: $DIR/full_demoted_K4.usda +layer: $DIR/input.usda +lights: 4 +light 0: area name Some("/World/K4") lpe None pmf 0.25 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 1: area name Some("/World/K3") lpe None pmf 0.25 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 2: area name Some("/World/K2") lpe None pmf 0.25 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 3: area name Some("/World/K1") lpe None pmf 0.25 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 6 geometries, PrimitiveBreakdown { triangles: 2, spheres: 5, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 2, spheres: 5, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:6787da8eacebee45 camera=2:6787da8eacebee45 shadow=2:6787da8eacebee45 indirect=2:6787da8eacebee45 +geom 1: material #1 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:18dc8de5ad9d8317 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=1:18dc8de5ad9d8317 +geom 2: material #2 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:a357e5efbc0c08cc camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=1:a357e5efbc0c08cc +geom 3: material #3 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=0:cbf29ce484222325 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=0:cbf29ce484222325 +geom 4: material #4 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:15501014f6ccffa4 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=1:15501014f6ccffa4 +geom 5: material #5 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:ee57dfea4661cce3 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=1:ee57dfea4661cce3 +provenance light /World/K1: LightOrigin { index: 3, geoms: 5..6 } +provenance light /World/K2: LightOrigin { index: 2, geoms: 4..5 } +provenance light /World/K3: LightOrigin { index: 1, geoms: 2..3 } +provenance light /World/K4: LightOrigin { index: 0, geoms: 1..2 } +provenance geometry 0..1: /World/Floor +provenance geometry 1..2: /World/K4 +provenance geometry 2..3: /World/K3 +provenance geometry 3..4: /World/Dead +provenance geometry 4..5: /World/K2 +provenance geometry 5..6: /World/K1 +provenance mesh: MeshOrigin { geom_id: 0, slot: 0, baked: true, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 800109031887815527, n_points: 4, n_indices: 4, n_uvs: None, smooth: true, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: true }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/World/Cam"), cameras: ["/World/Cam"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/World/Cam"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/full_demoted_K4_usda-d0354a764756e3b4-1.image b/crates/crust-core/tests/data/import_baselines/full_demoted_K4_usda-d0354a764756e3b4-1.image new file mode 100644 index 000000000..2bcc3e7a3 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/full_demoted_K4_usda-d0354a764756e3b4-1.image @@ -0,0 +1 @@ +48x32 16spp clamp-off 55228b08e17a941e diff --git a/crates/crust-core/tests/data/import_baselines/full_disable_depth_of_field__bad_unit_usda-bf5aa1ce7a54f9e2-1.digest b/crates/crust-core/tests/data/import_baselines/full_disable_depth_of_field__bad_unit_usda-bf5aa1ce7a54f9e2-1.digest new file mode 100644 index 000000000..43710bb74 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/full_disable_depth_of_field__bad_unit_usda-bf5aa1ce7a54f9e2-1.digest @@ -0,0 +1,23 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/World/Cam") +camera: Camera { origin: Vec3A(0.0, 0.0, 6.0), lower_left_corner: Vec3A(-1.3761721, -0.91744804, 0.0), horizontal: Vec3A(2.7523441, 0.0, 0.0), vertical: Vec3A(0.0, 1.8348961, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: Some("/Render/settings") +settings: RenderSettings { samples_per_pixel: 128, max_depth: 2, width: 48, height: 32, region: PixelRect { x0: 0, y0: 0, x1: 48, y1: 32 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: false, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 50.0, aperture: [20.955, 15.2908], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 2.0, focus_distance: 6.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/full_disable_depth_of_field,_bad_unit.usda", "$DIR/input.usda"], invisible_overrides: Some(0) } +layer: $DIR/full_disable_depth_of_field,_bad_unit.usda +layer: $DIR/input.usda +lights: 1 +light 0: distant name Some("/World/Sun") lpe None pmf 1.0 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 2 geometries, PrimitiveBreakdown { triangles: 0, spheres: 2, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 0, spheres: 2, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:1cd1488d041dfcdb camera=1:1cd1488d041dfcdb shadow=1:1cd1488d041dfcdb indirect=1:1cd1488d041dfcdb +geom 1: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:2d90e22d27992fa5 camera=1:2d90e22d27992fa5 shadow=1:2d90e22d27992fa5 indirect=1:2d90e22d27992fa5 +provenance light /World/Sun: LightOrigin { index: 0, geoms: 2..2 } +provenance geometry 0..1: /World/Far +provenance geometry 1..2: /World/Near +provenance spheres: [0, 1] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: true }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/World/Cam"), cameras: ["/World/Cam"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/World/Cam"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/full_disable_depth_of_field__bad_unit_usda-bf5aa1ce7a54f9e2-1.image b/crates/crust-core/tests/data/import_baselines/full_disable_depth_of_field__bad_unit_usda-bf5aa1ce7a54f9e2-1.image new file mode 100644 index 000000000..3f9e769f9 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/full_disable_depth_of_field__bad_unit_usda-bf5aa1ce7a54f9e2-1.image @@ -0,0 +1 @@ +48x32 16spp clamp-off d844fdc43565b494 diff --git a/crates/crust-core/tests/data/import_baselines/full_disable_depth_of_field_usda-61f50bc7be824751-1.digest b/crates/crust-core/tests/data/import_baselines/full_disable_depth_of_field_usda-61f50bc7be824751-1.digest new file mode 100644 index 000000000..7d975fc56 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/full_disable_depth_of_field_usda-61f50bc7be824751-1.digest @@ -0,0 +1,23 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/World/Cam") +camera: Camera { origin: Vec3A(0.0, 0.0, 6.0), lower_left_corner: Vec3A(-1.3761721, -0.91744804, 0.0), horizontal: Vec3A(2.7523441, 0.0, 0.0), vertical: Vec3A(0.0, 1.8348961, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: Some("/Render/settings") +settings: RenderSettings { samples_per_pixel: 128, max_depth: 2, width: 48, height: 32, region: PixelRect { x0: 0, y0: 0, x1: 48, y1: 32 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: false, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 50.0, aperture: [20.955, 15.2908], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 2.0, focus_distance: 6.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/full_disable_depth_of_field.usda", "$DIR/input.usda"], invisible_overrides: Some(0) } +layer: $DIR/full_disable_depth_of_field.usda +layer: $DIR/input.usda +lights: 1 +light 0: distant name Some("/World/Sun") lpe None pmf 1.0 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 2 geometries, PrimitiveBreakdown { triangles: 0, spheres: 2, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 0, spheres: 2, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:1cd1488d041dfcdb camera=1:1cd1488d041dfcdb shadow=1:1cd1488d041dfcdb indirect=1:1cd1488d041dfcdb +geom 1: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:2d90e22d27992fa5 camera=1:2d90e22d27992fa5 shadow=1:2d90e22d27992fa5 indirect=1:2d90e22d27992fa5 +provenance light /World/Sun: LightOrigin { index: 0, geoms: 2..2 } +provenance geometry 0..1: /World/Far +provenance geometry 1..2: /World/Near +provenance spheres: [0, 1] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: true }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/World/Cam"), cameras: ["/World/Cam"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/World/Cam"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/full_disable_depth_of_field_usda-61f50bc7be824751-1.image b/crates/crust-core/tests/data/import_baselines/full_disable_depth_of_field_usda-61f50bc7be824751-1.image new file mode 100644 index 000000000..3f9e769f9 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/full_disable_depth_of_field_usda-61f50bc7be824751-1.image @@ -0,0 +1 @@ +48x32 16spp clamp-off d844fdc43565b494 diff --git a/crates/crust-core/tests/data/import_baselines/full_dome_hidden_rotate_usda-82abbe3ed6112a4c-1.digest b/crates/crust-core/tests/data/import_baselines/full_dome_hidden_rotate_usda-82abbe3ed6112a4c-1.digest new file mode 100644 index 000000000..60cac1c84 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/full_dome_hidden_rotate_usda-82abbe3ed6112a4c-1.digest @@ -0,0 +1,29 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/World/Cam") +camera: Camera { origin: Vec3A(0.3, 0.6, 5.5), lower_left_corner: Vec3A(-5.4717097, -3.2753882, -3.7005186), horizontal: Vec3A(9.504398, 0.0, -0.9989525), vertical: Vec3A(-0.0464556, 6.3556476, -0.4419955), u: Vec3A(0.9945219, 0.0, -0.104528464), v: Vec3A(-0.007291537, 0.9975641, -0.06937434), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: Some("/Render/settings") +settings: RenderSettings { samples_per_pixel: 128, max_depth: 2, width: 48, height: 32, region: PixelRect { x0: 0, y0: 0, x1: 48, y1: 32 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 24.0, aperture: [20.955, 15.2908], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 10.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/full_dome_hidden_rotate.usda", "$DIR/input.usda"], invisible_overrides: Some(0) } +layer: $DIR/full_dome_hidden_rotate.usda +layer: $DIR/input.usda +lights: 2 +light 0: distant name Some("/World/Sun") lpe None pmf 0.5 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 1: dome name Some("/World/Sky") lpe None pmf 0.5 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 2 geometries, PrimitiveBreakdown { triangles: 4, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 4, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:0e0a4667da70ad35 camera=2:0e0a4667da70ad35 shadow=2:0e0a4667da70ad35 indirect=2:0e0a4667da70ad35 +geom 1: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:6787da8eacebee45 camera=2:6787da8eacebee45 shadow=2:6787da8eacebee45 indirect=2:6787da8eacebee45 +provenance light /World/Sky: LightOrigin { index: 1, geoms: 2..2 } +provenance light /World/Sun: LightOrigin { index: 0, geoms: 2..2 } +provenance geometry 0..1: /World/Card +provenance geometry 1..2: /World/Floor +provenance mesh: MeshOrigin { geom_id: 0, slot: 0, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 1, slot: 1, baked: true, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 18358658470076285213, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 1: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 800109031887815527, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: true }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: false, precomp: false, working: None, camera: Some("/World/Cam"), cameras: ["/World/Cam"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/World/Cam"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/full_dome_hidden_rotate_usda-82abbe3ed6112a4c-1.image b/crates/crust-core/tests/data/import_baselines/full_dome_hidden_rotate_usda-82abbe3ed6112a4c-1.image new file mode 100644 index 000000000..8737a33e9 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/full_dome_hidden_rotate_usda-82abbe3ed6112a4c-1.image @@ -0,0 +1 @@ +48x32 16spp clamp-off 05855210d395029f diff --git a/crates/crust-core/tests/data/import_baselines/full_dome_hidden_translate_usda-a8196d9e2f17ecbf-1.digest b/crates/crust-core/tests/data/import_baselines/full_dome_hidden_translate_usda-a8196d9e2f17ecbf-1.digest new file mode 100644 index 000000000..997cfee3f --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/full_dome_hidden_translate_usda-a8196d9e2f17ecbf-1.digest @@ -0,0 +1,29 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/World/Cam") +camera: Camera { origin: Vec3A(0.3, 0.6, 5.5), lower_left_corner: Vec3A(-4.4783754, -2.5855837, -4.5), horizontal: Vec3A(9.556751, 0.0, 0.0), vertical: Vec3A(0.0, 6.371167, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: Some("/Render/settings") +settings: RenderSettings { samples_per_pixel: 128, max_depth: 2, width: 48, height: 32, region: PixelRect { x0: 0, y0: 0, x1: 48, y1: 32 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 24.0, aperture: [20.955, 15.2908], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 10.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/full_dome_hidden_translate.usda", "$DIR/input.usda"], invisible_overrides: Some(0) } +layer: $DIR/full_dome_hidden_translate.usda +layer: $DIR/input.usda +lights: 2 +light 0: distant name Some("/World/Sun") lpe None pmf 0.5 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 1: dome name Some("/World/Sky") lpe None pmf 0.5 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 2 geometries, PrimitiveBreakdown { triangles: 4, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 4, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:0e0a4667da70ad35 camera=2:0e0a4667da70ad35 shadow=2:0e0a4667da70ad35 indirect=2:0e0a4667da70ad35 +geom 1: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:6787da8eacebee45 camera=2:6787da8eacebee45 shadow=2:6787da8eacebee45 indirect=2:6787da8eacebee45 +provenance light /World/Sky: LightOrigin { index: 1, geoms: 2..2 } +provenance light /World/Sun: LightOrigin { index: 0, geoms: 2..2 } +provenance geometry 0..1: /World/Card +provenance geometry 1..2: /World/Floor +provenance mesh: MeshOrigin { geom_id: 0, slot: 0, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 1, slot: 1, baked: true, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 18358658470076285213, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 1: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 800109031887815527, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: true }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: false, precomp: false, working: None, camera: Some("/World/Cam"), cameras: ["/World/Cam"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/World/Cam"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/full_dome_hidden_translate_usda-a8196d9e2f17ecbf-1.image b/crates/crust-core/tests/data/import_baselines/full_dome_hidden_translate_usda-a8196d9e2f17ecbf-1.image new file mode 100644 index 000000000..54ab33149 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/full_dome_hidden_translate_usda-a8196d9e2f17ecbf-1.image @@ -0,0 +1 @@ +48x32 16spp clamp-off 4546a5d33ec76d38 diff --git a/crates/crust-core/tests/data/import_baselines/full_dome_texture_usda-c3e04747e405ac6e-1.digest b/crates/crust-core/tests/data/import_baselines/full_dome_texture_usda-c3e04747e405ac6e-1.digest new file mode 100644 index 000000000..2d5122104 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/full_dome_texture_usda-c3e04747e405ac6e-1.digest @@ -0,0 +1,41 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/World/Cam") +camera: Camera { origin: Vec3A(0.0, 1.0, 6.0), lower_left_corner: Vec3A(-4.7783756, -2.1855836, -4.0), horizontal: Vec3A(9.556751, 0.0, 0.0), vertical: Vec3A(0.0, 6.371167, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: Some("/Render/settings") +settings: RenderSettings { samples_per_pixel: 128, max_depth: 2, width: 48, height: 32, region: PixelRect { x0: 0, y0: 0, x1: 48, y1: 32 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: PmjBn, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 2.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 24.0, aperture: [20.955, 15.2908], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 10.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/full_dome_texture.usda", "$DIR/stage.usda"], invisible_overrides: Some(0) } +layer: $DIR/full_dome_texture.usda +layer: $DIR/stage.usda +lights: 2 +light 0: area name Some("/World/Key") lpe None pmf 0.5 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 1: dome name Some("/World/Sky") lpe None pmf 0.5 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 5 geometries, PrimitiveBreakdown { triangles: 4, spheres: 3, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 4, spheres: 3, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +geom 0: material #0 Signature { kind: "MaterialX", cutout: false, straight: false, boundary: false, emits: false, uv: true, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:ba01d90e2cc0d4f5 camera=1:ba01d90e2cc0d4f5 shadow=1:ba01d90e2cc0d4f5 indirect=1:ba01d90e2cc0d4f5 +geom 1: material #1 Signature { kind: "MaterialX", cutout: false, straight: false, boundary: false, emits: false, uv: true, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:910eeb9b40238145 camera=1:910eeb9b40238145 shadow=1:910eeb9b40238145 indirect=1:910eeb9b40238145 +geom 2: material #2 Signature { kind: "MaterialX", cutout: false, straight: false, boundary: false, emits: false, uv: true, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:ee76fd7ed45c4a85 camera=1:ee76fd7ed45c4a85 shadow=1:ee76fd7ed45c4a85 indirect=1:ee76fd7ed45c4a85 +geom 3: material #3 Signature { kind: "UsdPreviewSurface (textured)", cutout: false, straight: false, boundary: false, emits: false, uv: true, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv Some(0) shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:6787da8eacebee45 camera=2:6787da8eacebee45 shadow=2:6787da8eacebee45 indirect=2:6787da8eacebee45 +geom 4: material #4 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:7812e24c7b4d4335 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=2:7812e24c7b4d4335 +provenance material /World/Looks/Base: MaterialOrigin { slots: [1], displaced: false } +provenance material /World/Looks/Derived: MaterialOrigin { slots: [0], displaced: false } +provenance material /World/Looks/Std: MaterialOrigin { slots: [2], displaced: false } +provenance material /World/Looks/Tex: MaterialOrigin { slots: [3], displaced: false } +provenance material read: ("/World/Looks/Base", "/World/Looks/Derived") +provenance material read: ("/World/Looks/Base/Surface", "/World/Looks/Derived") +provenance arc source: /World/Looks/Base +provenance arc source: /World/Looks/Base/Surface +provenance light /World/Key: LightOrigin { index: 0, geoms: 4..5 } +provenance light /World/Sky: LightOrigin { index: 1, geoms: 5..5 } +provenance geometry 0..1: /World/Right +provenance geometry 1..2: /World/Left +provenance geometry 2..3: /World/Ball +provenance geometry 3..4: /World/Floor +provenance geometry 4..5: /World/Key +provenance mesh: MeshOrigin { geom_id: 3, slot: 0, baked: true, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 9851181043634021438, n_points: 4, n_indices: 4, n_uvs: Some(4), smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [0, 1, 2] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: true }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/World/Cam"), cameras: ["/World/Cam"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/World/Cam"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/full_dome_texture_usda-c3e04747e405ac6e-1.image b/crates/crust-core/tests/data/import_baselines/full_dome_texture_usda-c3e04747e405ac6e-1.image new file mode 100644 index 000000000..01bfe0e42 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/full_dome_texture_usda-c3e04747e405ac6e-1.image @@ -0,0 +1 @@ +48x32 16spp clamp-off e91e50445f593725 diff --git a/crates/crust-core/tests/data/import_baselines/full_drop_usda-a61417609925c673-1.digest b/crates/crust-core/tests/data/import_baselines/full_drop_usda-a61417609925c673-1.digest new file mode 100644 index 000000000..aaa487db6 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/full_drop_usda-a61417609925c673-1.digest @@ -0,0 +1,78 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/World/Cam") +camera: Camera { origin: Vec3A(0.0, 4.0, 14.0), lower_left_corner: Vec3A(-6.371167, -0.2474451, 4.0), horizontal: Vec3A(12.742334, 0.0, 0.0), vertical: Vec3A(0.0, 8.49489, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: Some("/Render/settings") +settings: RenderSettings { samples_per_pixel: 128, max_depth: 3, width: 48, height: 32, region: PixelRect { x0: 0, y0: 0, x1: 48, y1: 32 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 18.0, aperture: [20.955, 15.2908], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 10.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/full_drop.usda", "$DIR/stage.usda", "$DIR/table.usda"], invisible_overrides: Some(0) } +layer: $DIR/crate.usda +layer: $DIR/full_drop.usda +layer: $DIR/stage.usda +layer: $DIR/table.usda +lights: 1 +light 0: dome name Some("/World/Sky") lpe None pmf 1.0 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 15 geometries, PrimitiveBreakdown { triangles: 166, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 6 } top level, PrimitiveBreakdown { triangles: 178, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 6 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=12:d69dc8407e39c57d camera=12:d69dc8407e39c57d shadow=12:d69dc8407e39c57d indirect=12:d69dc8407e39c57d +geom 1: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=12:108ece7556e2045d camera=12:108ece7556e2045d shadow=12:108ece7556e2045d indirect=12:108ece7556e2045d +geom 2: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=12:b6f2f6b932607ce5 camera=12:b6f2f6b932607ce5 shadow=12:b6f2f6b932607ce5 indirect=12:b6f2f6b932607ce5 +geom 3: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=12:cb9a75b390412b65 camera=12:cb9a75b390412b65 shadow=12:cb9a75b390412b65 indirect=12:cb9a75b390412b65 +geom 4: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=12:95835634df888e55 camera=12:95835634df888e55 shadow=12:95835634df888e55 indirect=12:95835634df888e55 +geom 5: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=12:8af8b4817318c205 camera=12:8af8b4817318c205 shadow=12:8af8b4817318c205 indirect=12:8af8b4817318c205 +geom 6: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=4:d3ae5d8c61eeefd5 camera=4:d3ae5d8c61eeefd5 shadow=4:d3ae5d8c61eeefd5 indirect=4:d3ae5d8c61eeefd5 +geom 7: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:02dee92ba923d022 camera=2:02dee92ba923d022 shadow=2:02dee92ba923d022 indirect=2:02dee92ba923d022 +geom 8: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:d420bef838b31092 camera=2:d420bef838b31092 shadow=2:d420bef838b31092 indirect=2:d420bef838b31092 +geom 9: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=128:7e7f92bf6cf1e8e1 camera=128:7e7f92bf6cf1e8e1 shadow=128:7e7f92bf6cf1e8e1 indirect=128:7e7f92bf6cf1e8e1 +geom 10: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:5fd3af8a8974e005 camera=2:5fd3af8a8974e005 shadow=2:5fd3af8a8974e005 indirect=2:5fd3af8a8974e005 +geom 11: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:9626b0f2f3e041c5 camera=2:9626b0f2f3e041c5 shadow=2:9626b0f2f3e041c5 indirect=2:9626b0f2f3e041c5 +geom 12: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=12:65eff1dac76e16e5 camera=12:65eff1dac76e16e5 shadow=12:65eff1dac76e16e5 indirect=12:65eff1dac76e16e5 +geom 13: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=12:c5bbf2f135b5e22b camera=12:c5bbf2f135b5e22b shadow=12:c5bbf2f135b5e22b indirect=12:c5bbf2f135b5e22b +geom 14: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:77f8032df1a5e1f5 camera=2:77f8032df1a5e1f5 shadow=2:77f8032df1a5e1f5 indirect=2:77f8032df1a5e1f5 +provenance arc source: /Crate +provenance arc source: /Crate/geo +provenance arc source: /_Cube +provenance light /World/Sky: LightOrigin { index: 0, geoms: 14..14 } +provenance geometry 0..1: /World/pebble/geo +provenance geometry 1..2: /World/away/geo +provenance geometry 2..3: /World/box/geo +provenance geometry 3..4: /World/sunk/geo +provenance geometry 4..5: /World/rock/geo +provenance geometry 5..6: /World/vase/geo +provenance geometry 6..7: /World/steps/geo +provenance geometry 7..8: /World/field/geo +provenance geometry 8..9: /World/slope/geo +provenance geometry 9..10: /World/terrain/geo +provenance geometry 10..11: /World/shelf/geo +provenance geometry 11..12: /World/floor/geo +provenance geometry 12..13: /World/inst +provenance geometry 13..14: /World/crate/geo +provenance geometry 14..15: /World/table/geo +provenance mesh: MeshOrigin { geom_id: 0, slot: 0, baked: false, moving: false } +provenance mesh: MeshOrigin { geom_id: 1, slot: 0, baked: false, moving: false } +provenance mesh: MeshOrigin { geom_id: 2, slot: 0, baked: false, moving: false } +provenance mesh: MeshOrigin { geom_id: 3, slot: 0, baked: false, moving: false } +provenance mesh: MeshOrigin { geom_id: 4, slot: 1, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 5, slot: 2, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 6, slot: 3, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 7, slot: 4, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 8, slot: 5, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 9, slot: 6, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 10, slot: 7, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 11, slot: 8, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 13, slot: 0, baked: false, moving: false } +provenance mesh: MeshOrigin { geom_id: 14, slot: 9, baked: true, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 2634041098053373584, n_points: 8, n_indices: 24, n_uvs: None, smooth: true, material: 0 }), placements: 5, shared: true, displaced: false } +provenance mesh slot 1: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 14470132405950877311, n_points: 8, n_indices: 24, n_uvs: None, smooth: true, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 2: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 1206830347127950734, n_points: 8, n_indices: 24, n_uvs: None, smooth: true, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 3: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 9519870911682368984, n_points: 6, n_indices: 8, n_uvs: None, smooth: true, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 4: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 1341889141698287293, n_points: 4, n_indices: 4, n_uvs: None, smooth: true, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 5: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 1313731086437247865, n_points: 4, n_indices: 4, n_uvs: None, smooth: true, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 6: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 15760070156626746114, n_points: 81, n_indices: 256, n_uvs: None, smooth: true, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 7: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 1050066994217133652, n_points: 4, n_indices: 4, n_uvs: None, smooth: true, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 8: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 14002714535549629103, n_points: 4, n_indices: 4, n_uvs: None, smooth: true, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 9: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 14095911038168715313, n_points: 4, n_indices: 4, n_uvs: None, smooth: true, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: true }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/World/Cam"), cameras: ["/World/Cam"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/World/Cam"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/full_drop_usda-a61417609925c673-1.image b/crates/crust-core/tests/data/import_baselines/full_drop_usda-a61417609925c673-1.image new file mode 100644 index 000000000..c8fe26a37 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/full_drop_usda-a61417609925c673-1.image @@ -0,0 +1 @@ +48x32 16spp clamp-off ea22816a7e537ada diff --git a/crates/crust-core/tests/data/import_baselines/full_exposure_usda-fe83c794ae61f2a2-1.digest b/crates/crust-core/tests/data/import_baselines/full_exposure_usda-fe83c794ae61f2a2-1.digest new file mode 100644 index 000000000..1509b51a3 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/full_exposure_usda-fe83c794ae61f2a2-1.digest @@ -0,0 +1,41 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/World/Cam") +camera: Camera { origin: Vec3A(0.0, 1.0, 6.0), lower_left_corner: Vec3A(-4.7783756, -2.1855836, -4.0), horizontal: Vec3A(9.556751, 0.0, 0.0), vertical: Vec3A(0.0, 6.371167, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: Some("/Render/settings") +settings: RenderSettings { samples_per_pixel: 128, max_depth: 4, width: 48, height: 32, region: PixelRect { x0: 0, y0: 0, x1: 48, y1: 32 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 2.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 24.0, aperture: [20.955, 15.2908], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 10.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/full_exposure.usda", "$DIR/stage.usda"], invisible_overrides: Some(0) } +layer: $DIR/full_exposure.usda +layer: $DIR/stage.usda +lights: 2 +light 0: area name Some("/World/Key") lpe None pmf 0.5 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 1: dome name Some("/World/Sky") lpe None pmf 0.5 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 5 geometries, PrimitiveBreakdown { triangles: 4, spheres: 3, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 4, spheres: 3, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +geom 0: material #0 Signature { kind: "MaterialX", cutout: false, straight: false, boundary: false, emits: false, uv: true, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:ba01d90e2cc0d4f5 camera=1:ba01d90e2cc0d4f5 shadow=1:ba01d90e2cc0d4f5 indirect=1:ba01d90e2cc0d4f5 +geom 1: material #1 Signature { kind: "MaterialX", cutout: false, straight: false, boundary: false, emits: false, uv: true, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:910eeb9b40238145 camera=1:910eeb9b40238145 shadow=1:910eeb9b40238145 indirect=1:910eeb9b40238145 +geom 2: material #2 Signature { kind: "MaterialX", cutout: false, straight: false, boundary: false, emits: false, uv: true, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:ee76fd7ed45c4a85 camera=1:ee76fd7ed45c4a85 shadow=1:ee76fd7ed45c4a85 indirect=1:ee76fd7ed45c4a85 +geom 3: material #3 Signature { kind: "UsdPreviewSurface (textured)", cutout: false, straight: false, boundary: false, emits: false, uv: true, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv Some(0) shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:6787da8eacebee45 camera=2:6787da8eacebee45 shadow=2:6787da8eacebee45 indirect=2:6787da8eacebee45 +geom 4: material #4 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:7812e24c7b4d4335 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=2:7812e24c7b4d4335 +provenance material /World/Looks/Base: MaterialOrigin { slots: [1], displaced: false } +provenance material /World/Looks/Derived: MaterialOrigin { slots: [0], displaced: false } +provenance material /World/Looks/Std: MaterialOrigin { slots: [2], displaced: false } +provenance material /World/Looks/Tex: MaterialOrigin { slots: [3], displaced: false } +provenance material read: ("/World/Looks/Base", "/World/Looks/Derived") +provenance material read: ("/World/Looks/Base/Surface", "/World/Looks/Derived") +provenance arc source: /World/Looks/Base +provenance arc source: /World/Looks/Base/Surface +provenance light /World/Key: LightOrigin { index: 0, geoms: 4..5 } +provenance light /World/Sky: LightOrigin { index: 1, geoms: 5..5 } +provenance geometry 0..1: /World/Right +provenance geometry 1..2: /World/Left +provenance geometry 2..3: /World/Ball +provenance geometry 3..4: /World/Floor +provenance geometry 4..5: /World/Key +provenance mesh: MeshOrigin { geom_id: 3, slot: 0, baked: true, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 9851181043634021438, n_points: 4, n_indices: 4, n_uvs: Some(4), smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [0, 1, 2] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: true }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/World/Cam"), cameras: ["/World/Cam"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/World/Cam"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/full_exposure_usda-fe83c794ae61f2a2-1.image b/crates/crust-core/tests/data/import_baselines/full_exposure_usda-fe83c794ae61f2a2-1.image new file mode 100644 index 000000000..cebc04326 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/full_exposure_usda-fe83c794ae61f2a2-1.image @@ -0,0 +1 @@ +48x32 16spp clamp-off bc40eaca1e9ff520 diff --git a/crates/crust-core/tests/data/import_baselines/full_fixed_usda-adb1781d64f694c8-1.digest b/crates/crust-core/tests/data/import_baselines/full_fixed_usda-adb1781d64f694c8-1.digest new file mode 100644 index 000000000..517bc7e97 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/full_fixed_usda-adb1781d64f694c8-1.digest @@ -0,0 +1,35 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/World/Cam") +camera: Camera { origin: Vec3A(0.0, 1.0, 6.0), lower_left_corner: Vec3A(-4.7783756, -2.1855836, -4.0), horizontal: Vec3A(9.556751, 0.0, 0.0), vertical: Vec3A(0.0, 6.371167, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: Some("/Render/settings") +settings: RenderSettings { samples_per_pixel: 128, max_depth: 4, width: 48, height: 32, region: PixelRect { x0: 0, y0: 0, x1: 48, y1: 32 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 24.0, aperture: [20.955, 15.2908], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 10.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/full_fixed.usda", "$DIR/shot.usda", "$DIR/lights.usda"], invisible_overrides: Some(0) } +layer: $DIR/full_fixed.usda +layer: $DIR/lights.usda +layer: $DIR/pay.usda +layer: $DIR/prop.usda +layer: $DIR/shot.usda +lights: 2 +light 0: dome name Some("/World/Sky") lpe None pmf 0.5 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 1: area name Some("/World/Key") lpe None pmf 0.5 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 3 geometries, PrimitiveBreakdown { triangles: 2, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 2 } top level, PrimitiveBreakdown { triangles: 4, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 2 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:6f550ecd4f901d05 camera=2:6f550ecd4f901d05 shadow=2:6f550ecd4f901d05 indirect=2:6f550ecd4f901d05 +geom 1: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:6f550ecd4f901d05 camera=2:6f550ecd4f901d05 shadow=2:6f550ecd4f901d05 indirect=2:6f550ecd4f901d05 +geom 2: material #1 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:7812e24c7b4d4335 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=2:7812e24c7b4d4335 +provenance arc source: /Pay +provenance arc source: /Prop +provenance light /World/Key: LightOrigin { index: 1, geoms: 2..3 } +provenance light /World/Sky: LightOrigin { index: 0, geoms: 2..2 } +provenance geometry 0..1: /World/Heavy +provenance geometry 1..2: /World/Prop +provenance geometry 2..3: /World/Key +provenance mesh: MeshOrigin { geom_id: 0, slot: 0, baked: false, moving: false } +provenance mesh: MeshOrigin { geom_id: 1, slot: 0, baked: false, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 6610719295604273699, n_points: 4, n_indices: 4, n_uvs: None, smooth: true, material: 0 }), placements: 2, shared: false, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: true }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/World/Cam"), cameras: ["/World/Cam"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/World/Cam"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/full_fixed_usda-adb1781d64f694c8-1.image b/crates/crust-core/tests/data/import_baselines/full_fixed_usda-adb1781d64f694c8-1.image new file mode 100644 index 000000000..afc2d921e --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/full_fixed_usda-adb1781d64f694c8-1.image @@ -0,0 +1 @@ +48x32 16spp clamp-off 2caa34772f5d6a86 diff --git a/crates/crust-core/tests/data/import_baselines/full_groom_base_colour_usda-dd47b7dff78ee58e-1.digest b/crates/crust-core/tests/data/import_baselines/full_groom_base_colour_usda-dd47b7dff78ee58e-1.digest new file mode 100644 index 000000000..2ff63b60c --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/full_groom_base_colour_usda-dd47b7dff78ee58e-1.digest @@ -0,0 +1,22 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/World/Cam") +camera: Camera { origin: Vec3A(0.0, 0.0, 6.0), lower_left_corner: Vec3A(-4.247444, -2.5484667, -4.0), horizontal: Vec3A(8.494888, 0.0, 0.0), vertical: Vec3A(0.0, 5.0969334, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: Some("/Render/settings") +settings: RenderSettings { samples_per_pixel: 128, max_depth: 3, width: 40, height: 24, region: PixelRect { x0: 0, y0: 0, x1: 40, y1: 24 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 30.0, aperture: [20.955, 15.2908], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 10.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/full_groom_base_colour.usda", "$DIR/input.usda"], invisible_overrides: Some(0) } +layer: $DIR/full_groom_base_colour.usda +layer: $DIR/input.usda +lights: 1 +light 0: dome name Some("/World/Sky") lpe None pmf 1.0 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 1 geometries, PrimitiveBreakdown { triangles: 0, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 1 } top level, PrimitiveBreakdown { triangles: 0, spheres: 0, disks: 0, cylinders: 0, curve_segments: 3, cubic_curve_spans: 0, instances: 1 } unique, motion false +geom 0: material #0 Signature { kind: "MaterialX", cutout: false, straight: false, boundary: false, emits: false, uv: true, uv_primvar: None, face_texture: None, curve: Some((false, false, [])), primvars: None } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves true scale 1.0 motion [] pieces all=3:a4253f27618d90a9 camera=3:a4253f27618d90a9 shadow=3:a4253f27618d90a9 indirect=3:a4253f27618d90a9 +provenance material /World/Looks/Hair: MaterialOrigin { slots: [0], displaced: false } +provenance light /World/Sky: LightOrigin { index: 0, geoms: 1..1 } +provenance geometry 0..1: /World/Groom +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: true }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/World/Cam"), cameras: ["/World/Cam"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/World/Cam"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/full_groom_base_colour_usda-dd47b7dff78ee58e-1.image b/crates/crust-core/tests/data/import_baselines/full_groom_base_colour_usda-dd47b7dff78ee58e-1.image new file mode 100644 index 000000000..40e1e94d3 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/full_groom_base_colour_usda-dd47b7dff78ee58e-1.image @@ -0,0 +1 @@ +40x24 16spp clamp-off 554d014c55de3865 diff --git a/crates/crust-core/tests/data/import_baselines/full_groom_primvar_undone_usda-318d40a5ee9b02d7-1.digest b/crates/crust-core/tests/data/import_baselines/full_groom_primvar_undone_usda-318d40a5ee9b02d7-1.digest new file mode 100644 index 000000000..f62e3270a --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/full_groom_primvar_undone_usda-318d40a5ee9b02d7-1.digest @@ -0,0 +1,22 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/World/Cam") +camera: Camera { origin: Vec3A(0.0, 0.0, 6.0), lower_left_corner: Vec3A(-4.247444, -2.5484667, -4.0), horizontal: Vec3A(8.494888, 0.0, 0.0), vertical: Vec3A(0.0, 5.0969334, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: Some("/Render/settings") +settings: RenderSettings { samples_per_pixel: 128, max_depth: 3, width: 40, height: 24, region: PixelRect { x0: 0, y0: 0, x1: 40, y1: 24 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 30.0, aperture: [20.955, 15.2908], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 10.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/full_groom_primvar_undone.usda", "$DIR/input.usda"], invisible_overrides: Some(0) } +layer: $DIR/full_groom_primvar_undone.usda +layer: $DIR/input.usda +lights: 1 +light 0: dome name Some("/World/Sky") lpe None pmf 1.0 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 1 geometries, PrimitiveBreakdown { triangles: 0, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 1 } top level, PrimitiveBreakdown { triangles: 0, spheres: 0, disks: 0, cylinders: 0, curve_segments: 3, cubic_curve_spans: 0, instances: 1 } unique, motion false +geom 0: material #0 Signature { kind: "MaterialX", cutout: false, straight: false, boundary: false, emits: false, uv: true, uv_primvar: None, face_texture: None, curve: Some((false, false, [])), primvars: None } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves true scale 1.0 motion [] pieces all=3:a4253f27618d90a9 camera=3:a4253f27618d90a9 shadow=3:a4253f27618d90a9 indirect=3:a4253f27618d90a9 +provenance material /World/Looks/Hair: MaterialOrigin { slots: [0], displaced: false } +provenance light /World/Sky: LightOrigin { index: 0, geoms: 1..1 } +provenance geometry 0..1: /World/Groom +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: true }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/World/Cam"), cameras: ["/World/Cam"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/World/Cam"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/full_groom_primvar_undone_usda-318d40a5ee9b02d7-1.image b/crates/crust-core/tests/data/import_baselines/full_groom_primvar_undone_usda-318d40a5ee9b02d7-1.image new file mode 100644 index 000000000..40e1e94d3 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/full_groom_primvar_undone_usda-318d40a5ee9b02d7-1.image @@ -0,0 +1 @@ +40x24 16spp clamp-off 554d014c55de3865 diff --git a/crates/crust-core/tests/data/import_baselines/full_groom_reads_its_primvar_usda-98bf5373a7d5697f-1.digest b/crates/crust-core/tests/data/import_baselines/full_groom_reads_its_primvar_usda-98bf5373a7d5697f-1.digest new file mode 100644 index 000000000..b5b09819d --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/full_groom_reads_its_primvar_usda-98bf5373a7d5697f-1.digest @@ -0,0 +1,22 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/World/Cam") +camera: Camera { origin: Vec3A(0.0, 0.0, 6.0), lower_left_corner: Vec3A(-4.247444, -2.5484667, -4.0), horizontal: Vec3A(8.494888, 0.0, 0.0), vertical: Vec3A(0.0, 5.0969334, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: Some("/Render/settings") +settings: RenderSettings { samples_per_pixel: 128, max_depth: 3, width: 40, height: 24, region: PixelRect { x0: 0, y0: 0, x1: 40, y1: 24 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 30.0, aperture: [20.955, 15.2908], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 10.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/full_groom_reads_its_primvar.usda", "$DIR/input.usda"], invisible_overrides: Some(0) } +layer: $DIR/full_groom_reads_its_primvar.usda +layer: $DIR/input.usda +lights: 1 +light 0: dome name Some("/World/Sky") lpe None pmf 1.0 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 1 geometries, PrimitiveBreakdown { triangles: 0, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 1 } top level, PrimitiveBreakdown { triangles: 0, spheres: 0, disks: 0, cylinders: 0, curve_segments: 3, cubic_curve_spans: 0, instances: 1 } unique, motion false +geom 0: material #0 Signature { kind: "MaterialX", cutout: false, straight: false, boundary: false, emits: false, uv: true, uv_primvar: None, face_texture: None, curve: Some((false, true, ["hairColor"])), primvars: None } class 65535 holdout false transparent false map None uv None shading None strands Some(0) aov None swapped false curves true scale 1.0 motion [] pieces all=3:a4253f27618d90a9 camera=3:a4253f27618d90a9 shadow=3:a4253f27618d90a9 indirect=3:a4253f27618d90a9 +provenance material /World/Looks/Hair: MaterialOrigin { slots: [0], displaced: false } +provenance light /World/Sky: LightOrigin { index: 0, geoms: 1..1 } +provenance geometry 0..1: /World/Groom +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: true }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/World/Cam"), cameras: ["/World/Cam"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/World/Cam"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/full_groom_reads_its_primvar_usda-98bf5373a7d5697f-1.image b/crates/crust-core/tests/data/import_baselines/full_groom_reads_its_primvar_usda-98bf5373a7d5697f-1.image new file mode 100644 index 000000000..cbda222ce --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/full_groom_reads_its_primvar_usda-98bf5373a7d5697f-1.image @@ -0,0 +1 @@ +40x24 16spp clamp-off c2a9124ddf153b95 diff --git a/crates/crust-core/tests/data/import_baselines/full_linked_Fill_usda-cb706e1f9f991794-1.digest b/crates/crust-core/tests/data/import_baselines/full_linked_Fill_usda-cb706e1f9f991794-1.digest new file mode 100644 index 000000000..945c4d73c --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/full_linked_Fill_usda-cb706e1f9f991794-1.digest @@ -0,0 +1,44 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/World/Cam") +camera: Camera { origin: Vec3A(0.0, 3.0, 9.0), lower_left_corner: Vec3A(-5.6632595, -2.195088, -0.119155884), horizontal: Vec3A(11.326519, -0.0, 0.0), vertical: Vec3A(0.0, 6.231942, -1.3246402), u: Vec3A(1.0, -0.0, 0.0), v: Vec3A(0.0, 0.9781476, -0.20791169), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: Some("/Render/settings") +settings: RenderSettings { samples_per_pixel: 64, max_depth: 4, width: 48, height: 27, region: PixelRect { x0: 0, y0: 0, x1: 48, y1: 27 }, min_samples_per_pixel: 16, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 24.0, aperture: [20.955, 15.2908], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 10.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/full_linked_Fill.usda", "$DIR/input.usda", "$ROOT/samples/light_linking.usda"], invisible_overrides: Some(0) } +layer: $ROOT/samples/light_linking.usda +layer: $DIR/full_linked_Fill.usda +layer: $DIR/input.usda +lights: 3 +light 0: area name Some("/World/Rim") lpe None pmf 0.33333334 shadow RayMask(4294967290) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 1: area name Some("/World/Fill") lpe None pmf 0.33333334 shadow RayMask(4294967290) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 2: area name Some("/World/Key") lpe None pmf 0.33333334 shadow RayMask(2) restricted true nee-only false twinned true gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 8 geometries, PrimitiveBreakdown { triangles: 14, spheres: 6, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 14, spheres: 6, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +geom 0: material #0 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 0 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:147e304cdaa43315 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=1:147e304cdaa43315 +geom 1: material #1 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 0 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:3bb65d4d618d300f camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=1:3bb65d4d618d300f +geom 2: material #2 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 0 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:414b9060aeb9fa5b camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=1:414b9060aeb9fa5b +geom 3: material #3 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 0 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=12:66555abe449aad95 camera=12:66555abe449aad95 shadow=0:cbf29ce484222325 indirect=12:66555abe449aad95 +geom 4: material #3 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 0 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:d864e332b6f2885f camera=1:d864e332b6f2885f shadow=1:d864e332b6f2885f indirect=1:d864e332b6f2885f +geom 5: material #3 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 1 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:b3ac5caa5601a5fa camera=1:b3ac5caa5601a5fa shadow=1:b3ac5caa5601a5fa indirect=1:b3ac5caa5601a5fa +geom 6: material #3 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 0 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:3fd5e7ad4a18db8b camera=1:3fd5e7ad4a18db8b shadow=1:3fd5e7ad4a18db8b indirect=1:3fd5e7ad4a18db8b +geom 7: material #3 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 2 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:be0b97004c4d3e85 camera=2:be0b97004c4d3e85 shadow=2:be0b97004c4d3e85 indirect=2:be0b97004c4d3e85 +provenance light /World/Fill: LightOrigin { index: 1, geoms: 1..2 } +provenance light /World/Key: LightOrigin { index: 2, geoms: 2..3 } +provenance light /World/Rim: LightOrigin { index: 0, geoms: 0..1 } +provenance geometry 0..1: /World/Rim +provenance geometry 1..2: /World/Fill +provenance geometry 2..3: /World/Key +provenance geometry 3..4: /World/Pillar +provenance geometry 4..5: /World/Right +provenance geometry 5..6: /World/Hero +provenance geometry 6..7: /World/Left +provenance geometry 7..8: /World/Floor +provenance mesh: MeshOrigin { geom_id: 3, slot: 0, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 7, slot: 1, baked: true, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 8639962265279651952, n_points: 8, n_indices: 24, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 1: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 8416296582947184296, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [4, 5, 6] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: true }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/World/Cam"), cameras: ["/World/Cam"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/World/Cam"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/full_linked_Fill_usda-cb706e1f9f991794-1.image b/crates/crust-core/tests/data/import_baselines/full_linked_Fill_usda-cb706e1f9f991794-1.image new file mode 100644 index 000000000..09ebed360 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/full_linked_Fill_usda-cb706e1f9f991794-1.image @@ -0,0 +1 @@ +48x27 16spp clamp-off 4288390158c0e799 diff --git a/crates/crust-core/tests/data/import_baselines/full_linked_Key_usda-db486cee2438fb3b-1.digest b/crates/crust-core/tests/data/import_baselines/full_linked_Key_usda-db486cee2438fb3b-1.digest new file mode 100644 index 000000000..e8db91496 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/full_linked_Key_usda-db486cee2438fb3b-1.digest @@ -0,0 +1,44 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/World/Cam") +camera: Camera { origin: Vec3A(0.0, 3.0, 9.0), lower_left_corner: Vec3A(-5.6632595, -2.195088, -0.119155884), horizontal: Vec3A(11.326519, -0.0, 0.0), vertical: Vec3A(0.0, 6.231942, -1.3246402), u: Vec3A(1.0, -0.0, 0.0), v: Vec3A(0.0, 0.9781476, -0.20791169), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: Some("/Render/settings") +settings: RenderSettings { samples_per_pixel: 64, max_depth: 4, width: 48, height: 27, region: PixelRect { x0: 0, y0: 0, x1: 48, y1: 27 }, min_samples_per_pixel: 16, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 24.0, aperture: [20.955, 15.2908], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 10.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/full_linked_Key.usda", "$DIR/input.usda", "$ROOT/samples/light_linking.usda"], invisible_overrides: Some(0) } +layer: $ROOT/samples/light_linking.usda +layer: $DIR/full_linked_Key.usda +layer: $DIR/input.usda +lights: 3 +light 0: area name Some("/World/Rim") lpe None pmf 0.33333334 shadow RayMask(4294967290) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 1: area name Some("/World/Fill") lpe None pmf 0.33333334 shadow RayMask(4294967290) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 2: area name Some("/World/Key") lpe None pmf 0.33333334 shadow RayMask(2) restricted true nee-only false twinned true gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 8 geometries, PrimitiveBreakdown { triangles: 14, spheres: 6, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 14, spheres: 6, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +geom 0: material #0 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 0 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:147e304cdaa43315 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=1:147e304cdaa43315 +geom 1: material #1 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 0 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:3bb65d4d618d300f camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=1:3bb65d4d618d300f +geom 2: material #2 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 0 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:414b9060aeb9fa5b camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=1:414b9060aeb9fa5b +geom 3: material #3 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 0 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=12:66555abe449aad95 camera=12:66555abe449aad95 shadow=0:cbf29ce484222325 indirect=12:66555abe449aad95 +geom 4: material #3 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 0 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:d864e332b6f2885f camera=1:d864e332b6f2885f shadow=1:d864e332b6f2885f indirect=1:d864e332b6f2885f +geom 5: material #3 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 1 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:b3ac5caa5601a5fa camera=1:b3ac5caa5601a5fa shadow=1:b3ac5caa5601a5fa indirect=1:b3ac5caa5601a5fa +geom 6: material #3 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 0 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:3fd5e7ad4a18db8b camera=1:3fd5e7ad4a18db8b shadow=1:3fd5e7ad4a18db8b indirect=1:3fd5e7ad4a18db8b +geom 7: material #3 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 2 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:be0b97004c4d3e85 camera=2:be0b97004c4d3e85 shadow=2:be0b97004c4d3e85 indirect=2:be0b97004c4d3e85 +provenance light /World/Fill: LightOrigin { index: 1, geoms: 1..2 } +provenance light /World/Key: LightOrigin { index: 2, geoms: 2..3 } +provenance light /World/Rim: LightOrigin { index: 0, geoms: 0..1 } +provenance geometry 0..1: /World/Rim +provenance geometry 1..2: /World/Fill +provenance geometry 2..3: /World/Key +provenance geometry 3..4: /World/Pillar +provenance geometry 4..5: /World/Right +provenance geometry 5..6: /World/Hero +provenance geometry 6..7: /World/Left +provenance geometry 7..8: /World/Floor +provenance mesh: MeshOrigin { geom_id: 3, slot: 0, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 7, slot: 1, baked: true, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 8639962265279651952, n_points: 8, n_indices: 24, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 1: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 8416296582947184296, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [4, 5, 6] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: true }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/World/Cam"), cameras: ["/World/Cam"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/World/Cam"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/full_linked_Key_usda-db486cee2438fb3b-1.image b/crates/crust-core/tests/data/import_baselines/full_linked_Key_usda-db486cee2438fb3b-1.image new file mode 100644 index 000000000..a84e36bde --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/full_linked_Key_usda-db486cee2438fb3b-1.image @@ -0,0 +1 @@ +48x27 16spp clamp-off a9f5c6ebe65efbfc diff --git a/crates/crust-core/tests/data/import_baselines/full_linked_Rim_usda-2874a091d25b590b-1.digest b/crates/crust-core/tests/data/import_baselines/full_linked_Rim_usda-2874a091d25b590b-1.digest new file mode 100644 index 000000000..70de0609b --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/full_linked_Rim_usda-2874a091d25b590b-1.digest @@ -0,0 +1,44 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/World/Cam") +camera: Camera { origin: Vec3A(0.0, 3.0, 9.0), lower_left_corner: Vec3A(-5.6632595, -2.195088, -0.119155884), horizontal: Vec3A(11.326519, -0.0, 0.0), vertical: Vec3A(0.0, 6.231942, -1.3246402), u: Vec3A(1.0, -0.0, 0.0), v: Vec3A(0.0, 0.9781476, -0.20791169), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: Some("/Render/settings") +settings: RenderSettings { samples_per_pixel: 64, max_depth: 4, width: 48, height: 27, region: PixelRect { x0: 0, y0: 0, x1: 48, y1: 27 }, min_samples_per_pixel: 16, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 24.0, aperture: [20.955, 15.2908], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 10.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/full_linked_Rim.usda", "$DIR/input.usda", "$ROOT/samples/light_linking.usda"], invisible_overrides: Some(0) } +layer: $ROOT/samples/light_linking.usda +layer: $DIR/full_linked_Rim.usda +layer: $DIR/input.usda +lights: 3 +light 0: area name Some("/World/Rim") lpe None pmf 0.33333334 shadow RayMask(4294967290) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 1: area name Some("/World/Fill") lpe None pmf 0.33333334 shadow RayMask(4294967290) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 2: area name Some("/World/Key") lpe None pmf 0.33333334 shadow RayMask(2) restricted true nee-only false twinned true gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 8 geometries, PrimitiveBreakdown { triangles: 14, spheres: 6, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 14, spheres: 6, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +geom 0: material #0 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 0 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:147e304cdaa43315 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=1:147e304cdaa43315 +geom 1: material #1 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 0 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:3bb65d4d618d300f camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=1:3bb65d4d618d300f +geom 2: material #2 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 0 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:414b9060aeb9fa5b camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=1:414b9060aeb9fa5b +geom 3: material #3 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 0 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=12:66555abe449aad95 camera=12:66555abe449aad95 shadow=0:cbf29ce484222325 indirect=12:66555abe449aad95 +geom 4: material #3 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 0 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:d864e332b6f2885f camera=1:d864e332b6f2885f shadow=1:d864e332b6f2885f indirect=1:d864e332b6f2885f +geom 5: material #3 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 1 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:b3ac5caa5601a5fa camera=1:b3ac5caa5601a5fa shadow=1:b3ac5caa5601a5fa indirect=1:b3ac5caa5601a5fa +geom 6: material #3 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 0 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:3fd5e7ad4a18db8b camera=1:3fd5e7ad4a18db8b shadow=1:3fd5e7ad4a18db8b indirect=1:3fd5e7ad4a18db8b +geom 7: material #3 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 2 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:be0b97004c4d3e85 camera=2:be0b97004c4d3e85 shadow=2:be0b97004c4d3e85 indirect=2:be0b97004c4d3e85 +provenance light /World/Fill: LightOrigin { index: 1, geoms: 1..2 } +provenance light /World/Key: LightOrigin { index: 2, geoms: 2..3 } +provenance light /World/Rim: LightOrigin { index: 0, geoms: 0..1 } +provenance geometry 0..1: /World/Rim +provenance geometry 1..2: /World/Fill +provenance geometry 2..3: /World/Key +provenance geometry 3..4: /World/Pillar +provenance geometry 4..5: /World/Right +provenance geometry 5..6: /World/Hero +provenance geometry 6..7: /World/Left +provenance geometry 7..8: /World/Floor +provenance mesh: MeshOrigin { geom_id: 3, slot: 0, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 7, slot: 1, baked: true, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 8639962265279651952, n_points: 8, n_indices: 24, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 1: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 8416296582947184296, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [4, 5, 6] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: true }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/World/Cam"), cameras: ["/World/Cam"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/World/Cam"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/full_linked_Rim_usda-2874a091d25b590b-1.image b/crates/crust-core/tests/data/import_baselines/full_linked_Rim_usda-2874a091d25b590b-1.image new file mode 100644 index 000000000..da645adc2 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/full_linked_Rim_usda-2874a091d25b590b-1.image @@ -0,0 +1 @@ +48x27 16spp clamp-off 7977e0aa7c988c4b diff --git a/crates/crust-core/tests/data/import_baselines/full_linked_undo_Fill_usda-a93137db50fd28c8-1.digest b/crates/crust-core/tests/data/import_baselines/full_linked_undo_Fill_usda-a93137db50fd28c8-1.digest new file mode 100644 index 000000000..149b2edce --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/full_linked_undo_Fill_usda-a93137db50fd28c8-1.digest @@ -0,0 +1,44 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/World/Cam") +camera: Camera { origin: Vec3A(0.0, 3.0, 9.0), lower_left_corner: Vec3A(-5.6632595, -2.195088, -0.119155884), horizontal: Vec3A(11.326519, -0.0, 0.0), vertical: Vec3A(0.0, 6.231942, -1.3246402), u: Vec3A(1.0, -0.0, 0.0), v: Vec3A(0.0, 0.9781476, -0.20791169), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: Some("/Render/settings") +settings: RenderSettings { samples_per_pixel: 64, max_depth: 4, width: 48, height: 27, region: PixelRect { x0: 0, y0: 0, x1: 48, y1: 27 }, min_samples_per_pixel: 16, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 24.0, aperture: [20.955, 15.2908], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 10.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/full_linked_undo_Fill.usda", "$DIR/input.usda", "$ROOT/samples/light_linking.usda"], invisible_overrides: Some(0) } +layer: $ROOT/samples/light_linking.usda +layer: $DIR/full_linked_undo_Fill.usda +layer: $DIR/input.usda +lights: 3 +light 0: area name Some("/World/Rim") lpe None pmf 0.33333334 shadow RayMask(4294967290) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 1: area name Some("/World/Fill") lpe None pmf 0.33333334 shadow RayMask(4294967290) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 2: area name Some("/World/Key") lpe None pmf 0.33333334 shadow RayMask(2) restricted true nee-only false twinned true gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 8 geometries, PrimitiveBreakdown { triangles: 14, spheres: 6, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 14, spheres: 6, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +geom 0: material #0 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 0 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:147e304cdaa43315 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=1:147e304cdaa43315 +geom 1: material #1 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 0 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:3bb65d4d618d300f camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=1:3bb65d4d618d300f +geom 2: material #2 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 0 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:414b9060aeb9fa5b camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=1:414b9060aeb9fa5b +geom 3: material #3 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 0 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=12:66555abe449aad95 camera=12:66555abe449aad95 shadow=0:cbf29ce484222325 indirect=12:66555abe449aad95 +geom 4: material #3 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 0 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:d864e332b6f2885f camera=1:d864e332b6f2885f shadow=1:d864e332b6f2885f indirect=1:d864e332b6f2885f +geom 5: material #3 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 1 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:b3ac5caa5601a5fa camera=1:b3ac5caa5601a5fa shadow=1:b3ac5caa5601a5fa indirect=1:b3ac5caa5601a5fa +geom 6: material #3 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 0 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:3fd5e7ad4a18db8b camera=1:3fd5e7ad4a18db8b shadow=1:3fd5e7ad4a18db8b indirect=1:3fd5e7ad4a18db8b +geom 7: material #3 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 2 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:be0b97004c4d3e85 camera=2:be0b97004c4d3e85 shadow=2:be0b97004c4d3e85 indirect=2:be0b97004c4d3e85 +provenance light /World/Fill: LightOrigin { index: 1, geoms: 1..2 } +provenance light /World/Key: LightOrigin { index: 2, geoms: 2..3 } +provenance light /World/Rim: LightOrigin { index: 0, geoms: 0..1 } +provenance geometry 0..1: /World/Rim +provenance geometry 1..2: /World/Fill +provenance geometry 2..3: /World/Key +provenance geometry 3..4: /World/Pillar +provenance geometry 4..5: /World/Right +provenance geometry 5..6: /World/Hero +provenance geometry 6..7: /World/Left +provenance geometry 7..8: /World/Floor +provenance mesh: MeshOrigin { geom_id: 3, slot: 0, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 7, slot: 1, baked: true, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 8639962265279651952, n_points: 8, n_indices: 24, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 1: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 8416296582947184296, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [4, 5, 6] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: true }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/World/Cam"), cameras: ["/World/Cam"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/World/Cam"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/full_linked_undo_Fill_usda-a93137db50fd28c8-1.image b/crates/crust-core/tests/data/import_baselines/full_linked_undo_Fill_usda-a93137db50fd28c8-1.image new file mode 100644 index 000000000..a84e36bde --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/full_linked_undo_Fill_usda-a93137db50fd28c8-1.image @@ -0,0 +1 @@ +48x27 16spp clamp-off a9f5c6ebe65efbfc diff --git a/crates/crust-core/tests/data/import_baselines/full_linked_undo_Key_usda-1239d0ab4241ef3f-1.digest b/crates/crust-core/tests/data/import_baselines/full_linked_undo_Key_usda-1239d0ab4241ef3f-1.digest new file mode 100644 index 000000000..3d09e5a1c --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/full_linked_undo_Key_usda-1239d0ab4241ef3f-1.digest @@ -0,0 +1,44 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/World/Cam") +camera: Camera { origin: Vec3A(0.0, 3.0, 9.0), lower_left_corner: Vec3A(-5.6632595, -2.195088, -0.119155884), horizontal: Vec3A(11.326519, -0.0, 0.0), vertical: Vec3A(0.0, 6.231942, -1.3246402), u: Vec3A(1.0, -0.0, 0.0), v: Vec3A(0.0, 0.9781476, -0.20791169), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: Some("/Render/settings") +settings: RenderSettings { samples_per_pixel: 64, max_depth: 4, width: 48, height: 27, region: PixelRect { x0: 0, y0: 0, x1: 48, y1: 27 }, min_samples_per_pixel: 16, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 24.0, aperture: [20.955, 15.2908], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 10.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/full_linked_undo_Key.usda", "$DIR/input.usda", "$ROOT/samples/light_linking.usda"], invisible_overrides: Some(0) } +layer: $ROOT/samples/light_linking.usda +layer: $DIR/full_linked_undo_Key.usda +layer: $DIR/input.usda +lights: 3 +light 0: area name Some("/World/Rim") lpe None pmf 0.33333334 shadow RayMask(4294967290) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 1: area name Some("/World/Fill") lpe None pmf 0.33333334 shadow RayMask(4294967290) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 2: area name Some("/World/Key") lpe None pmf 0.33333334 shadow RayMask(2) restricted true nee-only false twinned true gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 8 geometries, PrimitiveBreakdown { triangles: 14, spheres: 6, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 14, spheres: 6, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +geom 0: material #0 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 0 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:147e304cdaa43315 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=1:147e304cdaa43315 +geom 1: material #1 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 0 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:3bb65d4d618d300f camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=1:3bb65d4d618d300f +geom 2: material #2 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 0 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:414b9060aeb9fa5b camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=1:414b9060aeb9fa5b +geom 3: material #3 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 0 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=12:66555abe449aad95 camera=12:66555abe449aad95 shadow=0:cbf29ce484222325 indirect=12:66555abe449aad95 +geom 4: material #3 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 0 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:d864e332b6f2885f camera=1:d864e332b6f2885f shadow=1:d864e332b6f2885f indirect=1:d864e332b6f2885f +geom 5: material #3 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 1 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:b3ac5caa5601a5fa camera=1:b3ac5caa5601a5fa shadow=1:b3ac5caa5601a5fa indirect=1:b3ac5caa5601a5fa +geom 6: material #3 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 0 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:3fd5e7ad4a18db8b camera=1:3fd5e7ad4a18db8b shadow=1:3fd5e7ad4a18db8b indirect=1:3fd5e7ad4a18db8b +geom 7: material #3 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 2 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:be0b97004c4d3e85 camera=2:be0b97004c4d3e85 shadow=2:be0b97004c4d3e85 indirect=2:be0b97004c4d3e85 +provenance light /World/Fill: LightOrigin { index: 1, geoms: 1..2 } +provenance light /World/Key: LightOrigin { index: 2, geoms: 2..3 } +provenance light /World/Rim: LightOrigin { index: 0, geoms: 0..1 } +provenance geometry 0..1: /World/Rim +provenance geometry 1..2: /World/Fill +provenance geometry 2..3: /World/Key +provenance geometry 3..4: /World/Pillar +provenance geometry 4..5: /World/Right +provenance geometry 5..6: /World/Hero +provenance geometry 6..7: /World/Left +provenance geometry 7..8: /World/Floor +provenance mesh: MeshOrigin { geom_id: 3, slot: 0, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 7, slot: 1, baked: true, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 8639962265279651952, n_points: 8, n_indices: 24, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 1: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 8416296582947184296, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [4, 5, 6] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: true }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/World/Cam"), cameras: ["/World/Cam"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/World/Cam"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/full_linked_undo_Key_usda-1239d0ab4241ef3f-1.image b/crates/crust-core/tests/data/import_baselines/full_linked_undo_Key_usda-1239d0ab4241ef3f-1.image new file mode 100644 index 000000000..e60074db9 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/full_linked_undo_Key_usda-1239d0ab4241ef3f-1.image @@ -0,0 +1 @@ +48x27 16spp clamp-off 7efb7ee2a8cd5748 diff --git a/crates/crust-core/tests/data/import_baselines/full_linked_undo_Rim_usda-03ca7b9265c405f0-1.digest b/crates/crust-core/tests/data/import_baselines/full_linked_undo_Rim_usda-03ca7b9265c405f0-1.digest new file mode 100644 index 000000000..814c25c07 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/full_linked_undo_Rim_usda-03ca7b9265c405f0-1.digest @@ -0,0 +1,44 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/World/Cam") +camera: Camera { origin: Vec3A(0.0, 3.0, 9.0), lower_left_corner: Vec3A(-5.6632595, -2.195088, -0.119155884), horizontal: Vec3A(11.326519, -0.0, 0.0), vertical: Vec3A(0.0, 6.231942, -1.3246402), u: Vec3A(1.0, -0.0, 0.0), v: Vec3A(0.0, 0.9781476, -0.20791169), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: Some("/Render/settings") +settings: RenderSettings { samples_per_pixel: 64, max_depth: 4, width: 48, height: 27, region: PixelRect { x0: 0, y0: 0, x1: 48, y1: 27 }, min_samples_per_pixel: 16, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 24.0, aperture: [20.955, 15.2908], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 10.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/full_linked_undo_Rim.usda", "$DIR/input.usda", "$ROOT/samples/light_linking.usda"], invisible_overrides: Some(0) } +layer: $ROOT/samples/light_linking.usda +layer: $DIR/full_linked_undo_Rim.usda +layer: $DIR/input.usda +lights: 3 +light 0: area name Some("/World/Rim") lpe None pmf 0.33333334 shadow RayMask(4294967290) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 1: area name Some("/World/Fill") lpe None pmf 0.33333334 shadow RayMask(4294967290) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 2: area name Some("/World/Key") lpe None pmf 0.33333334 shadow RayMask(2) restricted true nee-only false twinned true gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 8 geometries, PrimitiveBreakdown { triangles: 14, spheres: 6, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 14, spheres: 6, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +geom 0: material #0 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 0 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:147e304cdaa43315 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=1:147e304cdaa43315 +geom 1: material #1 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 0 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:3bb65d4d618d300f camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=1:3bb65d4d618d300f +geom 2: material #2 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 0 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:414b9060aeb9fa5b camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=1:414b9060aeb9fa5b +geom 3: material #3 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 0 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=12:66555abe449aad95 camera=12:66555abe449aad95 shadow=0:cbf29ce484222325 indirect=12:66555abe449aad95 +geom 4: material #3 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 0 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:d864e332b6f2885f camera=1:d864e332b6f2885f shadow=1:d864e332b6f2885f indirect=1:d864e332b6f2885f +geom 5: material #3 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 1 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:b3ac5caa5601a5fa camera=1:b3ac5caa5601a5fa shadow=1:b3ac5caa5601a5fa indirect=1:b3ac5caa5601a5fa +geom 6: material #3 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 0 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:3fd5e7ad4a18db8b camera=1:3fd5e7ad4a18db8b shadow=1:3fd5e7ad4a18db8b indirect=1:3fd5e7ad4a18db8b +geom 7: material #3 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 2 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:be0b97004c4d3e85 camera=2:be0b97004c4d3e85 shadow=2:be0b97004c4d3e85 indirect=2:be0b97004c4d3e85 +provenance light /World/Fill: LightOrigin { index: 1, geoms: 1..2 } +provenance light /World/Key: LightOrigin { index: 2, geoms: 2..3 } +provenance light /World/Rim: LightOrigin { index: 0, geoms: 0..1 } +provenance geometry 0..1: /World/Rim +provenance geometry 1..2: /World/Fill +provenance geometry 2..3: /World/Key +provenance geometry 3..4: /World/Pillar +provenance geometry 4..5: /World/Right +provenance geometry 5..6: /World/Hero +provenance geometry 6..7: /World/Left +provenance geometry 7..8: /World/Floor +provenance mesh: MeshOrigin { geom_id: 3, slot: 0, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 7, slot: 1, baked: true, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 8639962265279651952, n_points: 8, n_indices: 24, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 1: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 8416296582947184296, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [4, 5, 6] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: true }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/World/Cam"), cameras: ["/World/Cam"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/World/Cam"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/full_linked_undo_Rim_usda-03ca7b9265c405f0-1.image b/crates/crust-core/tests/data/import_baselines/full_linked_undo_Rim_usda-03ca7b9265c405f0-1.image new file mode 100644 index 000000000..09ebed360 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/full_linked_undo_Rim_usda-03ca7b9265c405f0-1.image @@ -0,0 +1 @@ +48x27 16spp clamp-off 4288390158c0e799 diff --git a/crates/crust-core/tests/data/import_baselines/full_max_depth_usda-1164faed927e051e-1.digest b/crates/crust-core/tests/data/import_baselines/full_max_depth_usda-1164faed927e051e-1.digest new file mode 100644 index 000000000..1842b0abc --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/full_max_depth_usda-1164faed927e051e-1.digest @@ -0,0 +1,41 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/World/Cam") +camera: Camera { origin: Vec3A(0.0, 1.0, 6.0), lower_left_corner: Vec3A(-4.7783756, -2.1855836, -4.0), horizontal: Vec3A(9.556751, 0.0, 0.0), vertical: Vec3A(0.0, 6.371167, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: Some("/Render/settings") +settings: RenderSettings { samples_per_pixel: 128, max_depth: 2, width: 48, height: 32, region: PixelRect { x0: 0, y0: 0, x1: 48, y1: 32 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 2.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 24.0, aperture: [20.955, 15.2908], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 10.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/full_max_depth.usda", "$DIR/stage.usda"], invisible_overrides: Some(0) } +layer: $DIR/full_max_depth.usda +layer: $DIR/stage.usda +lights: 2 +light 0: area name Some("/World/Key") lpe None pmf 0.5 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 1: dome name Some("/World/Sky") lpe None pmf 0.5 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 5 geometries, PrimitiveBreakdown { triangles: 4, spheres: 3, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 4, spheres: 3, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +geom 0: material #0 Signature { kind: "MaterialX", cutout: false, straight: false, boundary: false, emits: false, uv: true, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:ba01d90e2cc0d4f5 camera=1:ba01d90e2cc0d4f5 shadow=1:ba01d90e2cc0d4f5 indirect=1:ba01d90e2cc0d4f5 +geom 1: material #1 Signature { kind: "MaterialX", cutout: false, straight: false, boundary: false, emits: false, uv: true, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:910eeb9b40238145 camera=1:910eeb9b40238145 shadow=1:910eeb9b40238145 indirect=1:910eeb9b40238145 +geom 2: material #2 Signature { kind: "MaterialX", cutout: false, straight: false, boundary: false, emits: false, uv: true, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:ee76fd7ed45c4a85 camera=1:ee76fd7ed45c4a85 shadow=1:ee76fd7ed45c4a85 indirect=1:ee76fd7ed45c4a85 +geom 3: material #3 Signature { kind: "UsdPreviewSurface (textured)", cutout: false, straight: false, boundary: false, emits: false, uv: true, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv Some(0) shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:6787da8eacebee45 camera=2:6787da8eacebee45 shadow=2:6787da8eacebee45 indirect=2:6787da8eacebee45 +geom 4: material #4 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:7812e24c7b4d4335 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=2:7812e24c7b4d4335 +provenance material /World/Looks/Base: MaterialOrigin { slots: [1], displaced: false } +provenance material /World/Looks/Derived: MaterialOrigin { slots: [0], displaced: false } +provenance material /World/Looks/Std: MaterialOrigin { slots: [2], displaced: false } +provenance material /World/Looks/Tex: MaterialOrigin { slots: [3], displaced: false } +provenance material read: ("/World/Looks/Base", "/World/Looks/Derived") +provenance material read: ("/World/Looks/Base/Surface", "/World/Looks/Derived") +provenance arc source: /World/Looks/Base +provenance arc source: /World/Looks/Base/Surface +provenance light /World/Key: LightOrigin { index: 0, geoms: 4..5 } +provenance light /World/Sky: LightOrigin { index: 1, geoms: 5..5 } +provenance geometry 0..1: /World/Right +provenance geometry 1..2: /World/Left +provenance geometry 2..3: /World/Ball +provenance geometry 3..4: /World/Floor +provenance geometry 4..5: /World/Key +provenance mesh: MeshOrigin { geom_id: 3, slot: 0, baked: true, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 9851181043634021438, n_points: 4, n_indices: 4, n_uvs: Some(4), smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [0, 1, 2] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: true }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/World/Cam"), cameras: ["/World/Cam"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/World/Cam"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/full_max_depth_usda-1164faed927e051e-1.image b/crates/crust-core/tests/data/import_baselines/full_max_depth_usda-1164faed927e051e-1.image new file mode 100644 index 000000000..7a2e4cc59 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/full_max_depth_usda-1164faed927e051e-1.image @@ -0,0 +1 @@ +48x32 16spp clamp-off 650d02711795ba6e diff --git a/crates/crust-core/tests/data/import_baselines/full_meshes_rotate_usda-402e98fde9a693c4-1.digest b/crates/crust-core/tests/data/import_baselines/full_meshes_rotate_usda-402e98fde9a693c4-1.digest new file mode 100644 index 000000000..881f0a5de --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/full_meshes_rotate_usda-402e98fde9a693c4-1.digest @@ -0,0 +1,29 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/World/Cam") +camera: Camera { origin: Vec3A(0.3, 0.6, 5.5), lower_left_corner: Vec3A(-5.4717097, -3.2753882, -3.7005186), horizontal: Vec3A(9.504398, 0.0, -0.9989525), vertical: Vec3A(-0.0464556, 6.3556476, -0.4419955), u: Vec3A(0.9945219, 0.0, -0.104528464), v: Vec3A(-0.007291537, 0.9975641, -0.06937434), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: Some("/Render/settings") +settings: RenderSettings { samples_per_pixel: 128, max_depth: 2, width: 48, height: 32, region: PixelRect { x0: 0, y0: 0, x1: 48, y1: 32 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 24.0, aperture: [20.955, 15.2908], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 10.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/full_meshes_rotate.usda", "$DIR/input.usda"], invisible_overrides: Some(0) } +layer: $DIR/full_meshes_rotate.usda +layer: $DIR/input.usda +lights: 2 +light 0: distant name Some("/World/Sun") lpe None pmf 0.5 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 1: dome name Some("/World/Sky") lpe None pmf 0.5 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 2 geometries, PrimitiveBreakdown { triangles: 4, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 4, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:0e0a4667da70ad35 camera=2:0e0a4667da70ad35 shadow=2:0e0a4667da70ad35 indirect=2:0e0a4667da70ad35 +geom 1: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:6787da8eacebee45 camera=2:6787da8eacebee45 shadow=2:6787da8eacebee45 indirect=2:6787da8eacebee45 +provenance light /World/Sky: LightOrigin { index: 1, geoms: 2..2 } +provenance light /World/Sun: LightOrigin { index: 0, geoms: 2..2 } +provenance geometry 0..1: /World/Card +provenance geometry 1..2: /World/Floor +provenance mesh: MeshOrigin { geom_id: 0, slot: 0, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 1, slot: 1, baked: true, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 18358658470076285213, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 1: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 800109031887815527, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: true }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/World/Cam"), cameras: ["/World/Cam"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/World/Cam"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/full_meshes_rotate_usda-402e98fde9a693c4-1.image b/crates/crust-core/tests/data/import_baselines/full_meshes_rotate_usda-402e98fde9a693c4-1.image new file mode 100644 index 000000000..5f60ec729 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/full_meshes_rotate_usda-402e98fde9a693c4-1.image @@ -0,0 +1 @@ +48x32 16spp clamp-off 2b7caada058a2573 diff --git a/crates/crust-core/tests/data/import_baselines/full_meshes_translate_usda-ee4192f2a802af39-1.digest b/crates/crust-core/tests/data/import_baselines/full_meshes_translate_usda-ee4192f2a802af39-1.digest new file mode 100644 index 000000000..1f6cbdd4b --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/full_meshes_translate_usda-ee4192f2a802af39-1.digest @@ -0,0 +1,29 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/World/Cam") +camera: Camera { origin: Vec3A(0.3, 0.6, 5.5), lower_left_corner: Vec3A(-4.4783754, -2.5855837, -4.5), horizontal: Vec3A(9.556751, 0.0, 0.0), vertical: Vec3A(0.0, 6.371167, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: Some("/Render/settings") +settings: RenderSettings { samples_per_pixel: 128, max_depth: 2, width: 48, height: 32, region: PixelRect { x0: 0, y0: 0, x1: 48, y1: 32 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 24.0, aperture: [20.955, 15.2908], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 10.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/full_meshes_translate.usda", "$DIR/input.usda"], invisible_overrides: Some(0) } +layer: $DIR/full_meshes_translate.usda +layer: $DIR/input.usda +lights: 2 +light 0: distant name Some("/World/Sun") lpe None pmf 0.5 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 1: dome name Some("/World/Sky") lpe None pmf 0.5 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 2 geometries, PrimitiveBreakdown { triangles: 4, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 4, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:0e0a4667da70ad35 camera=2:0e0a4667da70ad35 shadow=2:0e0a4667da70ad35 indirect=2:0e0a4667da70ad35 +geom 1: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:6787da8eacebee45 camera=2:6787da8eacebee45 shadow=2:6787da8eacebee45 indirect=2:6787da8eacebee45 +provenance light /World/Sky: LightOrigin { index: 1, geoms: 2..2 } +provenance light /World/Sun: LightOrigin { index: 0, geoms: 2..2 } +provenance geometry 0..1: /World/Card +provenance geometry 1..2: /World/Floor +provenance mesh: MeshOrigin { geom_id: 0, slot: 0, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 1, slot: 1, baked: true, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 18358658470076285213, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 1: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 800109031887815527, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: true }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/World/Cam"), cameras: ["/World/Cam"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/World/Cam"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/full_meshes_translate_usda-ee4192f2a802af39-1.image b/crates/crust-core/tests/data/import_baselines/full_meshes_translate_usda-ee4192f2a802af39-1.image new file mode 100644 index 000000000..b35cd56af --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/full_meshes_translate_usda-ee4192f2a802af39-1.image @@ -0,0 +1 @@ +48x32 16spp clamp-off c831c2dcae9ba81d diff --git a/crates/crust-core/tests/data/import_baselines/full_move_the_new_camera_usda-73f0dca6c14ef5d7-1.digest b/crates/crust-core/tests/data/import_baselines/full_move_the_new_camera_usda-73f0dca6c14ef5d7-1.digest new file mode 100644 index 000000000..50e5e470b --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/full_move_the_new_camera_usda-73f0dca6c14ef5d7-1.digest @@ -0,0 +1,29 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/World/Cam2") +camera: Camera { origin: Vec3A(1.0, 1.0, 6.0), lower_left_corner: Vec3A(-4.529999, -2.2177181, -2.6355724), horizontal: Vec3A(6.358542, -1.2206286e-8, -1.5853626), vertical: Vec3A(-0.11047701, 4.344867, -0.4430991), u: Vec3A(0.9702957, -1.8626451e-9, -0.2419219), v: Vec3A(-0.025287723, 0.99452186, -0.101423524), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: Some("/Render/settings") +settings: RenderSettings { samples_per_pixel: 128, max_depth: 2, width: 48, height: 32, region: PixelRect { x0: 0, y0: 0, x1: 48, y1: 32 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [AovProduct { prim_path: "/Render/beauty", name: "beauty.exr", vars: [AovVar { prim_path: "/Render/C", name: "C", channel_prefix: None, source: Color, components: 3, precision: Float, accumulation: Filtered, clear: 0.0, expression: None, raw: false, variance: false }], attributes: [] }], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 35.0, aperture: [20.955, 15.2908], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 10.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/full_move_the_new_camera.usda", "$DIR/input.usda"], invisible_overrides: Some(0) } +layer: $DIR/full_move_the_new_camera.usda +layer: $DIR/input.usda +lights: 2 +light 0: distant name Some("/World/Sun") lpe None pmf 0.5 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 1: dome name Some("/World/Sky") lpe None pmf 0.5 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 2 geometries, PrimitiveBreakdown { triangles: 4, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 4, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:0e0a4667da70ad35 camera=2:0e0a4667da70ad35 shadow=2:0e0a4667da70ad35 indirect=2:0e0a4667da70ad35 +geom 1: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:6787da8eacebee45 camera=2:6787da8eacebee45 shadow=2:6787da8eacebee45 indirect=2:6787da8eacebee45 +provenance light /World/Sky: LightOrigin { index: 1, geoms: 2..2 } +provenance light /World/Sun: LightOrigin { index: 0, geoms: 2..2 } +provenance geometry 0..1: /World/Card +provenance geometry 1..2: /World/Floor +provenance mesh: MeshOrigin { geom_id: 0, slot: 0, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 1, slot: 1, baked: true, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 18358658470076285213, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 1: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 800109031887815527, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: true }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/World/Cam2"), cameras: ["/World/Cam2", "/World/Cam"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/World/Cam2"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/full_move_the_new_camera_usda-73f0dca6c14ef5d7-1.image b/crates/crust-core/tests/data/import_baselines/full_move_the_new_camera_usda-73f0dca6c14ef5d7-1.image new file mode 100644 index 000000000..2b3250cf8 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/full_move_the_new_camera_usda-73f0dca6c14ef5d7-1.image @@ -0,0 +1 @@ +48x32 16spp clamp-off 28f7da964e2fd644 diff --git a/crates/crust-core/tests/data/import_baselines/full_on_screen_diced_rotate_usda-d7adb4497350da61-1.digest b/crates/crust-core/tests/data/import_baselines/full_on_screen_diced_rotate_usda-d7adb4497350da61-1.digest new file mode 100644 index 000000000..4420fe954 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/full_on_screen_diced_rotate_usda-d7adb4497350da61-1.digest @@ -0,0 +1,23 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/World/Cam") +camera: Camera { origin: Vec3A(0.3, 0.6, 5.5), lower_left_corner: Vec3A(-5.4717097, -3.2753882, -3.7005186), horizontal: Vec3A(9.504398, 0.0, -0.9989525), vertical: Vec3A(-0.0464556, 6.3556476, -0.4419955), u: Vec3A(0.9945219, 0.0, -0.104528464), v: Vec3A(-0.007291537, 0.9975641, -0.06937434), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: Some("/Render/settings") +settings: RenderSettings { samples_per_pixel: 128, max_depth: 2, width: 48, height: 32, region: PixelRect { x0: 0, y0: 0, x1: 48, y1: 32 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 24.0, aperture: [20.955, 15.2908], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 10.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/full_on-screen_diced_rotate.usda", "$DIR/input.usda"], invisible_overrides: Some(0) } +layer: $DIR/full_on-screen_diced_rotate.usda +layer: $DIR/input.usda +lights: 1 +light 0: distant name Some("/World/Sun") lpe None pmf 1.0 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 1 geometries, PrimitiveBreakdown { triangles: 64, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 64, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=64:5f84dcb3c52b7405 camera=64:5f84dcb3c52b7405 shadow=64:5f84dcb3c52b7405 indirect=64:5f84dcb3c52b7405 +provenance light /World/Sun: LightOrigin { index: 0, geoms: 1..1 } +provenance geometry 0..1: /World/Post +provenance mesh: MeshOrigin { geom_id: 0, slot: 0, baked: true, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 13212365895451826409, n_points: 66, n_indices: 160, n_uvs: None, smooth: true, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: true }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/World/Cam"), cameras: ["/World/Dicer", "/World/Cam"], dicing: Some("/World/Dicer"), on_screen_shapes: Some(ScreenKey([0, 1056964608, 1086324736, 1112074166, 0, 1056964608, 1086324736, 3212836864, 0, 3203704606, 1065353216, 0, 3203704606, 0, 3212836864, 3198360084, 0, 1065353216, 3198360084, 0, 0, 3212836864])), unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/World/Cam"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/full_on_screen_diced_rotate_usda-d7adb4497350da61-1.image b/crates/crust-core/tests/data/import_baselines/full_on_screen_diced_rotate_usda-d7adb4497350da61-1.image new file mode 100644 index 000000000..d600cd666 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/full_on_screen_diced_rotate_usda-d7adb4497350da61-1.image @@ -0,0 +1 @@ +48x32 16spp clamp-off 323335470c0fe12b diff --git a/crates/crust-core/tests/data/import_baselines/full_on_screen_diced_translate_usda-6bfd0fb9adcbe164-1.digest b/crates/crust-core/tests/data/import_baselines/full_on_screen_diced_translate_usda-6bfd0fb9adcbe164-1.digest new file mode 100644 index 000000000..f9854cc3d --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/full_on_screen_diced_translate_usda-6bfd0fb9adcbe164-1.digest @@ -0,0 +1,23 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/World/Cam") +camera: Camera { origin: Vec3A(0.3, 0.6, 5.5), lower_left_corner: Vec3A(-4.4783754, -2.5855837, -4.5), horizontal: Vec3A(9.556751, 0.0, 0.0), vertical: Vec3A(0.0, 6.371167, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: Some("/Render/settings") +settings: RenderSettings { samples_per_pixel: 128, max_depth: 2, width: 48, height: 32, region: PixelRect { x0: 0, y0: 0, x1: 48, y1: 32 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 24.0, aperture: [20.955, 15.2908], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 10.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/full_on-screen_diced_translate.usda", "$DIR/input.usda"], invisible_overrides: Some(0) } +layer: $DIR/full_on-screen_diced_translate.usda +layer: $DIR/input.usda +lights: 1 +light 0: distant name Some("/World/Sun") lpe None pmf 1.0 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 1 geometries, PrimitiveBreakdown { triangles: 64, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 64, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=64:5f84dcb3c52b7405 camera=64:5f84dcb3c52b7405 shadow=64:5f84dcb3c52b7405 indirect=64:5f84dcb3c52b7405 +provenance light /World/Sun: LightOrigin { index: 0, geoms: 1..1 } +provenance geometry 0..1: /World/Post +provenance mesh: MeshOrigin { geom_id: 0, slot: 0, baked: true, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 13212365895451826409, n_points: 66, n_indices: 160, n_uvs: None, smooth: true, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: true }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/World/Cam"), cameras: ["/World/Dicer", "/World/Cam"], dicing: Some("/World/Dicer"), on_screen_shapes: Some(ScreenKey([0, 1056964608, 1086324736, 1112074166, 0, 1056964608, 1086324736, 3212836864, 0, 3203704606, 1065353216, 0, 3203704606, 0, 3212836864, 3198360084, 0, 1065353216, 3198360084, 0, 0, 3212836864])), unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/World/Cam"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/full_on_screen_diced_translate_usda-6bfd0fb9adcbe164-1.image b/crates/crust-core/tests/data/import_baselines/full_on_screen_diced_translate_usda-6bfd0fb9adcbe164-1.image new file mode 100644 index 000000000..644e089e2 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/full_on_screen_diced_translate_usda-6bfd0fb9adcbe164-1.image @@ -0,0 +1 @@ +48x32 16spp clamp-off 76a1fa7d306a8a85 diff --git a/crates/crust-core/tests/data/import_baselines/full_on_screen_exposure_usda-b0790c819b4e0d97-1.digest b/crates/crust-core/tests/data/import_baselines/full_on_screen_exposure_usda-b0790c819b4e0d97-1.digest new file mode 100644 index 000000000..846626cbd --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/full_on_screen_exposure_usda-b0790c819b4e0d97-1.digest @@ -0,0 +1,23 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/World/Cam") +camera: Camera { origin: Vec3A(0.0, 0.0, 6.0), lower_left_corner: Vec3A(-4.7783756, -3.1855836, -4.0), horizontal: Vec3A(9.556751, 0.0, 0.0), vertical: Vec3A(0.0, 6.371167, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: Some("/Render/settings") +settings: RenderSettings { samples_per_pixel: 128, max_depth: 2, width: 48, height: 32, region: PixelRect { x0: 0, y0: 0, x1: 48, y1: 32 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 2.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 24.0, aperture: [20.955, 15.2908], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 10.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/full_on_screen_exposure.usda", "$DIR/input.usda"], invisible_overrides: Some(0) } +layer: $DIR/full_on_screen_exposure.usda +layer: $DIR/input.usda +lights: 1 +light 0: distant name Some("/World/Sun") lpe None pmf 1.0 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 1 geometries, PrimitiveBreakdown { triangles: 64, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 64, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=64:5f84dcb3c52b7405 camera=64:5f84dcb3c52b7405 shadow=64:5f84dcb3c52b7405 indirect=64:5f84dcb3c52b7405 +provenance light /World/Sun: LightOrigin { index: 0, geoms: 1..1 } +provenance geometry 0..1: /World/Post +provenance mesh: MeshOrigin { geom_id: 0, slot: 0, baked: true, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 13212365895451826409, n_points: 66, n_indices: 160, n_uvs: None, smooth: true, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: true }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/World/Cam"), cameras: ["/World/Cam"], dicing: None, on_screen_shapes: Some(ScreenKey([0, 0, 1086324736, 1112074166, 0, 0, 1086324736, 3212836864, 0, 3203704606, 1065353216, 0, 3203704606, 0, 3212836864, 3198360084, 0, 1065353216, 3198360084, 0, 0, 3212836864])), unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/World/Cam"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/full_on_screen_exposure_usda-b0790c819b4e0d97-1.image b/crates/crust-core/tests/data/import_baselines/full_on_screen_exposure_usda-b0790c819b4e0d97-1.image new file mode 100644 index 000000000..7ff3f4d38 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/full_on_screen_exposure_usda-b0790c819b4e0d97-1.image @@ -0,0 +1 @@ +48x32 16spp clamp-off b9259930d9171aab diff --git a/crates/crust-core/tests/data/import_baselines/full_on_screen_undo_exposure_usda-c40080b74d3fb5a6-1.digest b/crates/crust-core/tests/data/import_baselines/full_on_screen_undo_exposure_usda-c40080b74d3fb5a6-1.digest new file mode 100644 index 000000000..f032c98ba --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/full_on_screen_undo_exposure_usda-c40080b74d3fb5a6-1.digest @@ -0,0 +1,23 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/World/Cam") +camera: Camera { origin: Vec3A(0.0, 0.0, 6.0), lower_left_corner: Vec3A(-4.7783756, -3.1855836, -4.0), horizontal: Vec3A(9.556751, 0.0, 0.0), vertical: Vec3A(0.0, 6.371167, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: Some("/Render/settings") +settings: RenderSettings { samples_per_pixel: 128, max_depth: 2, width: 48, height: 32, region: PixelRect { x0: 0, y0: 0, x1: 48, y1: 32 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 24.0, aperture: [20.955, 15.2908], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 10.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/full_on_screen_undo_exposure.usda", "$DIR/input.usda"], invisible_overrides: Some(0) } +layer: $DIR/full_on_screen_undo_exposure.usda +layer: $DIR/input.usda +lights: 1 +light 0: distant name Some("/World/Sun") lpe None pmf 1.0 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 1 geometries, PrimitiveBreakdown { triangles: 64, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 64, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=64:5f84dcb3c52b7405 camera=64:5f84dcb3c52b7405 shadow=64:5f84dcb3c52b7405 indirect=64:5f84dcb3c52b7405 +provenance light /World/Sun: LightOrigin { index: 0, geoms: 1..1 } +provenance geometry 0..1: /World/Post +provenance mesh: MeshOrigin { geom_id: 0, slot: 0, baked: true, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 13212365895451826409, n_points: 66, n_indices: 160, n_uvs: None, smooth: true, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: true }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/World/Cam"), cameras: ["/World/Cam"], dicing: None, on_screen_shapes: Some(ScreenKey([0, 0, 1086324736, 1112074166, 0, 0, 1086324736, 3212836864, 0, 3203704606, 1065353216, 0, 3203704606, 0, 3212836864, 3198360084, 0, 1065353216, 3198360084, 0, 0, 3212836864])), unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/World/Cam"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/full_on_screen_undo_exposure_usda-c40080b74d3fb5a6-1.image b/crates/crust-core/tests/data/import_baselines/full_on_screen_undo_exposure_usda-c40080b74d3fb5a6-1.image new file mode 100644 index 000000000..6b6b0c40a --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/full_on_screen_undo_exposure_usda-c40080b74d3fb5a6-1.image @@ -0,0 +1 @@ +48x32 16spp clamp-off 5e901867aef8c50b diff --git a/crates/crust-core/tests/data/import_baselines/full_payload_rewritten_usda-03a6e3d1a01a5551-1.digest b/crates/crust-core/tests/data/import_baselines/full_payload_rewritten_usda-03a6e3d1a01a5551-1.digest new file mode 100644 index 000000000..764264623 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/full_payload_rewritten_usda-03a6e3d1a01a5551-1.digest @@ -0,0 +1,35 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/World/Cam") +camera: Camera { origin: Vec3A(0.0, 1.0, 6.0), lower_left_corner: Vec3A(-4.7783756, -2.1855836, -4.0), horizontal: Vec3A(9.556751, 0.0, 0.0), vertical: Vec3A(0.0, 6.371167, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: Some("/Render/settings") +settings: RenderSettings { samples_per_pixel: 128, max_depth: 4, width: 48, height: 32, region: PixelRect { x0: 0, y0: 0, x1: 48, y1: 32 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 24.0, aperture: [20.955, 15.2908], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 10.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/full_payload_rewritten.usda", "$DIR/shot.usda", "$DIR/lights.usda"], invisible_overrides: Some(0) } +layer: $DIR/full_payload_rewritten.usda +layer: $DIR/lights.usda +layer: $DIR/pay.usda +layer: $DIR/prop.usda +layer: $DIR/shot.usda +lights: 2 +light 0: dome name Some("/World/Sky") lpe None pmf 0.5 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 1: area name Some("/World/Key") lpe None pmf 0.5 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 3 geometries, PrimitiveBreakdown { triangles: 2, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 2 } top level, PrimitiveBreakdown { triangles: 4, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 2 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:8881e041bbb32975 camera=2:8881e041bbb32975 shadow=2:8881e041bbb32975 indirect=2:8881e041bbb32975 +geom 1: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:6f550ecd4f901d05 camera=2:6f550ecd4f901d05 shadow=2:6f550ecd4f901d05 indirect=2:6f550ecd4f901d05 +geom 2: material #1 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:7812e24c7b4d4335 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=2:7812e24c7b4d4335 +provenance arc source: /Pay +provenance arc source: /Prop +provenance light /World/Key: LightOrigin { index: 1, geoms: 2..3 } +provenance light /World/Sky: LightOrigin { index: 0, geoms: 2..2 } +provenance geometry 0..1: /World/Heavy +provenance geometry 1..2: /World/Prop +provenance geometry 2..3: /World/Key +provenance mesh: MeshOrigin { geom_id: 0, slot: 0, baked: false, moving: false } +provenance mesh: MeshOrigin { geom_id: 1, slot: 0, baked: false, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 6610719295604273699, n_points: 4, n_indices: 4, n_uvs: None, smooth: true, material: 0 }), placements: 2, shared: false, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: true }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/World/Cam"), cameras: ["/World/Cam"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/World/Cam"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/full_payload_rewritten_usda-03a6e3d1a01a5551-1.image b/crates/crust-core/tests/data/import_baselines/full_payload_rewritten_usda-03a6e3d1a01a5551-1.image new file mode 100644 index 000000000..2fbdc9344 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/full_payload_rewritten_usda-03a6e3d1a01a5551-1.image @@ -0,0 +1 @@ +48x32 16spp clamp-off 4c86d9fc0259a5fb diff --git a/crates/crust-core/tests/data/import_baselines/full_payload_roughness_usda-498bc078c77be0a5-1.digest b/crates/crust-core/tests/data/import_baselines/full_payload_roughness_usda-498bc078c77be0a5-1.digest new file mode 100644 index 000000000..ef3f2fb08 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/full_payload_roughness_usda-498bc078c77be0a5-1.digest @@ -0,0 +1,30 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/World/Cam") +camera: Camera { origin: Vec3A(0.0, 1.0, 6.0), lower_left_corner: Vec3A(-4.7783756, -2.1855836, -4.0), horizontal: Vec3A(9.556751, 0.0, 0.0), vertical: Vec3A(0.0, 6.371167, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: Some("/Render/settings") +settings: RenderSettings { samples_per_pixel: 128, max_depth: 2, width: 48, height: 32, region: PixelRect { x0: 0, y0: 0, x1: 48, y1: 32 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 24.0, aperture: [20.955, 15.2908], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 10.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/full_payload_roughness.usda", "$DIR/input.usda"], invisible_overrides: Some(0) } +layer: $DIR/full_payload_roughness.usda +layer: $DIR/input.usda +layer: $DIR/looks.usda +lights: 1 +light 0: distant name Some("/World/Sun") lpe None pmf 1.0 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 1 geometries, PrimitiveBreakdown { triangles: 0, spheres: 1, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 0, spheres: 1, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:ee76fd7ed45c4a85 camera=1:ee76fd7ed45c4a85 shadow=1:ee76fd7ed45c4a85 indirect=1:ee76fd7ed45c4a85 +provenance material /World/Looks/Clay: MaterialOrigin { slots: [0], displaced: false } +provenance material read: ("/Looks/Clay", "/World/Looks/Clay") +provenance material read: ("/Looks/Clay/Graph", "/World/Looks/Clay") +provenance material read: ("/Looks/Clay/Surface", "/World/Looks/Clay") +provenance arc source: /Looks +provenance arc source: /Looks/Clay +provenance arc source: /Looks/Clay/Graph +provenance arc source: /Looks/Clay/Surface +provenance light /World/Sun: LightOrigin { index: 0, geoms: 1..1 } +provenance geometry 0..1: /World/Ball +provenance spheres: [0] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: true }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/World/Cam"), cameras: ["/World/Cam"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/World/Cam"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/full_payload_roughness_usda-498bc078c77be0a5-1.image b/crates/crust-core/tests/data/import_baselines/full_payload_roughness_usda-498bc078c77be0a5-1.image new file mode 100644 index 000000000..fffd22f70 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/full_payload_roughness_usda-498bc078c77be0a5-1.image @@ -0,0 +1 @@ +48x32 16spp clamp-off ac9d4cf39c1a51e3 diff --git a/crates/crust-core/tests/data/import_baselines/full_payload_undo_roughness_usda-7143361153e7f548-1.digest b/crates/crust-core/tests/data/import_baselines/full_payload_undo_roughness_usda-7143361153e7f548-1.digest new file mode 100644 index 000000000..622101a69 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/full_payload_undo_roughness_usda-7143361153e7f548-1.digest @@ -0,0 +1,30 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/World/Cam") +camera: Camera { origin: Vec3A(0.0, 1.0, 6.0), lower_left_corner: Vec3A(-4.7783756, -2.1855836, -4.0), horizontal: Vec3A(9.556751, 0.0, 0.0), vertical: Vec3A(0.0, 6.371167, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: Some("/Render/settings") +settings: RenderSettings { samples_per_pixel: 128, max_depth: 2, width: 48, height: 32, region: PixelRect { x0: 0, y0: 0, x1: 48, y1: 32 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 24.0, aperture: [20.955, 15.2908], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 10.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/full_payload_undo_roughness.usda", "$DIR/input.usda"], invisible_overrides: Some(0) } +layer: $DIR/full_payload_undo_roughness.usda +layer: $DIR/input.usda +layer: $DIR/looks.usda +lights: 1 +light 0: distant name Some("/World/Sun") lpe None pmf 1.0 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 1 geometries, PrimitiveBreakdown { triangles: 0, spheres: 1, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 0, spheres: 1, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:ee76fd7ed45c4a85 camera=1:ee76fd7ed45c4a85 shadow=1:ee76fd7ed45c4a85 indirect=1:ee76fd7ed45c4a85 +provenance material /World/Looks/Clay: MaterialOrigin { slots: [0], displaced: false } +provenance material read: ("/Looks/Clay", "/World/Looks/Clay") +provenance material read: ("/Looks/Clay/Graph", "/World/Looks/Clay") +provenance material read: ("/Looks/Clay/Surface", "/World/Looks/Clay") +provenance arc source: /Looks +provenance arc source: /Looks/Clay +provenance arc source: /Looks/Clay/Graph +provenance arc source: /Looks/Clay/Surface +provenance light /World/Sun: LightOrigin { index: 0, geoms: 1..1 } +provenance geometry 0..1: /World/Ball +provenance spheres: [0] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: true }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/World/Cam"), cameras: ["/World/Cam"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/World/Cam"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/full_payload_undo_roughness_usda-7143361153e7f548-1.image b/crates/crust-core/tests/data/import_baselines/full_payload_undo_roughness_usda-7143361153e7f548-1.image new file mode 100644 index 000000000..fc580b73d --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/full_payload_undo_roughness_usda-7143361153e7f548-1.image @@ -0,0 +1 @@ +48x32 16spp clamp-off 366d57a699b8e531 diff --git a/crates/crust-core/tests/data/import_baselines/full_products_with_Pref_undone_usda-774a34f5226e3639-1.digest b/crates/crust-core/tests/data/import_baselines/full_products_with_Pref_undone_usda-774a34f5226e3639-1.digest new file mode 100644 index 000000000..15fb92e14 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/full_products_with_Pref_undone_usda-774a34f5226e3639-1.digest @@ -0,0 +1,23 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/World/Cam") +camera: Camera { origin: Vec3A(0.0, 0.0, 8.0), lower_left_corner: Vec3A(-2.0955, -1.5716249, -2.0), horizontal: Vec3A(4.191, 0.0, 0.0), vertical: Vec3A(0.0, 3.1432498, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: Some("/Render/settings") +settings: RenderSettings { samples_per_pixel: 128, max_depth: 2, width: 32, height: 24, region: PixelRect { x0: 0, y0: 0, x1: 32, y1: 24 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [AovProduct { prim_path: "/Render/plain", name: "plain.exr", vars: [AovVar { prim_path: "/Render/C", name: "C", channel_prefix: None, source: Color, components: 3, precision: Float, accumulation: Filtered, clear: 0.0, expression: None, raw: false, variance: false }], attributes: [] }], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 50.0, aperture: [20.955, 15.2908], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 10.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/full_products_with_Pref_undone.usda", "$DIR/input.usda"], invisible_overrides: Some(0) } +layer: $DIR/full_products_with_Pref_undone.usda +layer: $DIR/input.usda +lights: 1 +light 0: distant name Some("/World/Sun") lpe None pmf 1.0 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 1 geometries, PrimitiveBreakdown { triangles: 2, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 2, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:32f1a52c797bfee5 camera=2:32f1a52c797bfee5 shadow=2:32f1a52c797bfee5 indirect=2:32f1a52c797bfee5 +provenance light /World/Sun: LightOrigin { index: 0, geoms: 1..1 } +provenance geometry 0..1: /World/M +provenance mesh: MeshOrigin { geom_id: 0, slot: 0, baked: true, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 14414187199170096052, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: true }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/World/Cam"), cameras: ["/World/Cam"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/World/Cam"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/full_products_with_Pref_undone_usda-774a34f5226e3639-1.image b/crates/crust-core/tests/data/import_baselines/full_products_with_Pref_undone_usda-774a34f5226e3639-1.image new file mode 100644 index 000000000..6dce74c13 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/full_products_with_Pref_undone_usda-774a34f5226e3639-1.image @@ -0,0 +1 @@ +32x24 16spp clamp-off e648a58ccb35ae3b diff --git a/crates/crust-core/tests/data/import_baselines/full_products_with_Pref_usda-8674ccd68263fd36-1.digest b/crates/crust-core/tests/data/import_baselines/full_products_with_Pref_usda-8674ccd68263fd36-1.digest new file mode 100644 index 000000000..4d8d67147 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/full_products_with_Pref_usda-8674ccd68263fd36-1.digest @@ -0,0 +1,23 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/World/Cam") +camera: Camera { origin: Vec3A(0.0, 0.0, 8.0), lower_left_corner: Vec3A(-2.0955, -1.5716249, -2.0), horizontal: Vec3A(4.191, 0.0, 0.0), vertical: Vec3A(0.0, 3.1432498, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: Some("/Render/settings") +settings: RenderSettings { samples_per_pixel: 128, max_depth: 2, width: 32, height: 24, region: PixelRect { x0: 0, y0: 0, x1: 32, y1: 24 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [AovProduct { prim_path: "/Render/withRest", name: "rest.exr", vars: [AovVar { prim_path: "/Render/C", name: "C", channel_prefix: None, source: Color, components: 3, precision: Float, accumulation: Filtered, clear: 0.0, expression: None, raw: false, variance: false }, AovVar { prim_path: "/Render/Pref", name: "Pref", channel_prefix: None, source: Primvar(PrimvarSource { index: 0, components: 3, role: Vector }), components: 3, precision: Float, accumulation: Closest, clear: 0.0, expression: None, raw: false, variance: false }], attributes: [] }], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 50.0, aperture: [20.955, 15.2908], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 10.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/full_products_with_Pref.usda", "$DIR/input.usda"], invisible_overrides: Some(0) } +layer: $DIR/full_products_with_Pref.usda +layer: $DIR/input.usda +lights: 1 +light 0: distant name Some("/World/Sun") lpe None pmf 1.0 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 1 geometries, PrimitiveBreakdown { triangles: 2, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 2, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov Some((Some(0), false)) swapped false curves false scale 1.0 motion [] pieces all=2:32f1a52c797bfee5 camera=2:32f1a52c797bfee5 shadow=2:32f1a52c797bfee5 indirect=2:32f1a52c797bfee5 +provenance light /World/Sun: LightOrigin { index: 0, geoms: 1..1 } +provenance geometry 0..1: /World/M +provenance mesh: MeshOrigin { geom_id: 0, slot: 0, baked: true, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 11801363609627443368, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: true }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/World/Cam"), cameras: ["/World/Cam"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [("rest", 3)], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/World/Cam"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/full_products_with_Pref_usda-8674ccd68263fd36-1.image b/crates/crust-core/tests/data/import_baselines/full_products_with_Pref_usda-8674ccd68263fd36-1.image new file mode 100644 index 000000000..6dce74c13 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/full_products_with_Pref_usda-8674ccd68263fd36-1.image @@ -0,0 +1 @@ +32x24 16spp clamp-off e648a58ccb35ae3b diff --git a/crates/crust-core/tests/data/import_baselines/full_re_exported_usda-39edd0f167e79907-1.digest b/crates/crust-core/tests/data/import_baselines/full_re_exported_usda-39edd0f167e79907-1.digest new file mode 100644 index 000000000..768e03301 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/full_re_exported_usda-39edd0f167e79907-1.digest @@ -0,0 +1,41 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/World/Cam") +camera: Camera { origin: Vec3A(0.0, 1.0, 6.0), lower_left_corner: Vec3A(-4.7783756, -2.1855836, -4.0), horizontal: Vec3A(9.556751, 0.0, 0.0), vertical: Vec3A(0.0, 6.371167, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: Some("/Render/settings") +settings: RenderSettings { samples_per_pixel: 128, max_depth: 4, width: 48, height: 32, region: PixelRect { x0: 0, y0: 0, x1: 48, y1: 32 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 24.0, aperture: [20.955, 15.2908], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 10.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/full_re-exported.usda", "$DIR/stage.usda"], invisible_overrides: Some(0) } +layer: $DIR/full_re-exported.usda +layer: $DIR/stage.usda +lights: 2 +light 0: area name Some("/World/Key") lpe None pmf 0.5 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 1: dome name Some("/World/Sky") lpe None pmf 0.5 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 5 geometries, PrimitiveBreakdown { triangles: 4, spheres: 3, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 4, spheres: 3, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +geom 0: material #0 Signature { kind: "MaterialX", cutout: false, straight: false, boundary: false, emits: false, uv: true, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:ba01d90e2cc0d4f5 camera=1:ba01d90e2cc0d4f5 shadow=1:ba01d90e2cc0d4f5 indirect=1:ba01d90e2cc0d4f5 +geom 1: material #1 Signature { kind: "MaterialX", cutout: false, straight: false, boundary: false, emits: false, uv: true, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:910eeb9b40238145 camera=1:910eeb9b40238145 shadow=1:910eeb9b40238145 indirect=1:910eeb9b40238145 +geom 2: material #2 Signature { kind: "MaterialX", cutout: false, straight: false, boundary: false, emits: false, uv: true, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:a718186db3bab648 camera=1:a718186db3bab648 shadow=1:a718186db3bab648 indirect=1:a718186db3bab648 +geom 3: material #3 Signature { kind: "UsdPreviewSurface (textured)", cutout: false, straight: false, boundary: false, emits: false, uv: true, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv Some(0) shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:6787da8eacebee45 camera=2:6787da8eacebee45 shadow=2:6787da8eacebee45 indirect=2:6787da8eacebee45 +geom 4: material #4 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:7812e24c7b4d4335 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=2:7812e24c7b4d4335 +provenance material /World/Looks/Base: MaterialOrigin { slots: [1], displaced: false } +provenance material /World/Looks/Derived: MaterialOrigin { slots: [0], displaced: false } +provenance material /World/Looks/Std: MaterialOrigin { slots: [2], displaced: false } +provenance material /World/Looks/Tex: MaterialOrigin { slots: [3], displaced: false } +provenance material read: ("/World/Looks/Base", "/World/Looks/Derived") +provenance material read: ("/World/Looks/Base/Surface", "/World/Looks/Derived") +provenance arc source: /World/Looks/Base +provenance arc source: /World/Looks/Base/Surface +provenance light /World/Key: LightOrigin { index: 0, geoms: 4..5 } +provenance light /World/Sky: LightOrigin { index: 1, geoms: 5..5 } +provenance geometry 0..1: /World/Right +provenance geometry 1..2: /World/Left +provenance geometry 2..3: /World/Ball +provenance geometry 3..4: /World/Floor +provenance geometry 4..5: /World/Key +provenance mesh: MeshOrigin { geom_id: 3, slot: 0, baked: true, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 9851181043634021438, n_points: 4, n_indices: 4, n_uvs: Some(4), smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [0, 1, 2] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: true }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/World/Cam"), cameras: ["/World/Cam"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/World/Cam"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/full_re_exported_usda-39edd0f167e79907-1.image b/crates/crust-core/tests/data/import_baselines/full_re_exported_usda-39edd0f167e79907-1.image new file mode 100644 index 000000000..cc6b70dc4 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/full_re_exported_usda-39edd0f167e79907-1.image @@ -0,0 +1 @@ +48x32 16spp clamp-off 41504af5265577be diff --git a/crates/crust-core/tests/data/import_baselines/full_rect_light_usda-efc21afcf05d7959-1.digest b/crates/crust-core/tests/data/import_baselines/full_rect_light_usda-efc21afcf05d7959-1.digest new file mode 100644 index 000000000..388d14fcc --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/full_rect_light_usda-efc21afcf05d7959-1.digest @@ -0,0 +1,41 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/World/Cam") +camera: Camera { origin: Vec3A(0.0, 1.0, 6.0), lower_left_corner: Vec3A(-4.7783756, -2.1855836, -4.0), horizontal: Vec3A(9.556751, 0.0, 0.0), vertical: Vec3A(0.0, 6.371167, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: Some("/Render/settings") +settings: RenderSettings { samples_per_pixel: 128, max_depth: 2, width: 48, height: 32, region: PixelRect { x0: 0, y0: 0, x1: 48, y1: 32 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: PmjBn, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 2.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 24.0, aperture: [20.955, 15.2908], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 10.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/full_rect_light.usda", "$DIR/stage.usda"], invisible_overrides: Some(0) } +layer: $DIR/full_rect_light.usda +layer: $DIR/stage.usda +lights: 2 +light 0: area name Some("/World/Key") lpe None pmf 0.5 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 1: dome name Some("/World/Sky") lpe None pmf 0.5 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 5 geometries, PrimitiveBreakdown { triangles: 4, spheres: 3, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 4, spheres: 3, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +geom 0: material #0 Signature { kind: "MaterialX", cutout: false, straight: false, boundary: false, emits: false, uv: true, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:ba01d90e2cc0d4f5 camera=1:ba01d90e2cc0d4f5 shadow=1:ba01d90e2cc0d4f5 indirect=1:ba01d90e2cc0d4f5 +geom 1: material #1 Signature { kind: "MaterialX", cutout: false, straight: false, boundary: false, emits: false, uv: true, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:910eeb9b40238145 camera=1:910eeb9b40238145 shadow=1:910eeb9b40238145 indirect=1:910eeb9b40238145 +geom 2: material #2 Signature { kind: "MaterialX", cutout: false, straight: false, boundary: false, emits: false, uv: true, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:ee76fd7ed45c4a85 camera=1:ee76fd7ed45c4a85 shadow=1:ee76fd7ed45c4a85 indirect=1:ee76fd7ed45c4a85 +geom 3: material #3 Signature { kind: "UsdPreviewSurface (textured)", cutout: false, straight: false, boundary: false, emits: false, uv: true, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv Some(0) shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:6787da8eacebee45 camera=2:6787da8eacebee45 shadow=2:6787da8eacebee45 indirect=2:6787da8eacebee45 +geom 4: material #4 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:7812e24c7b4d4335 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=2:7812e24c7b4d4335 +provenance material /World/Looks/Base: MaterialOrigin { slots: [1], displaced: false } +provenance material /World/Looks/Derived: MaterialOrigin { slots: [0], displaced: false } +provenance material /World/Looks/Std: MaterialOrigin { slots: [2], displaced: false } +provenance material /World/Looks/Tex: MaterialOrigin { slots: [3], displaced: false } +provenance material read: ("/World/Looks/Base", "/World/Looks/Derived") +provenance material read: ("/World/Looks/Base/Surface", "/World/Looks/Derived") +provenance arc source: /World/Looks/Base +provenance arc source: /World/Looks/Base/Surface +provenance light /World/Key: LightOrigin { index: 0, geoms: 4..5 } +provenance light /World/Sky: LightOrigin { index: 1, geoms: 5..5 } +provenance geometry 0..1: /World/Right +provenance geometry 1..2: /World/Left +provenance geometry 2..3: /World/Ball +provenance geometry 3..4: /World/Floor +provenance geometry 4..5: /World/Key +provenance mesh: MeshOrigin { geom_id: 3, slot: 0, baked: true, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 9851181043634021438, n_points: 4, n_indices: 4, n_uvs: Some(4), smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [0, 1, 2] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: true }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/World/Cam"), cameras: ["/World/Cam"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/World/Cam"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/full_rect_light_usda-efc21afcf05d7959-1.image b/crates/crust-core/tests/data/import_baselines/full_rect_light_usda-efc21afcf05d7959-1.image new file mode 100644 index 000000000..fe212a5bd --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/full_rect_light_usda-efc21afcf05d7959-1.image @@ -0,0 +1 @@ +48x32 16spp clamp-off 5dca7776dd8e6c1f diff --git a/crates/crust-core/tests/data/import_baselines/full_reloaded_usda-5a765fd50dde24be-1.digest b/crates/crust-core/tests/data/import_baselines/full_reloaded_usda-5a765fd50dde24be-1.digest new file mode 100644 index 000000000..4c7f0906d --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/full_reloaded_usda-5a765fd50dde24be-1.digest @@ -0,0 +1,35 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/World/Cam") +camera: Camera { origin: Vec3A(0.0, 1.0, 6.0), lower_left_corner: Vec3A(-4.7783756, -2.1855836, -4.0), horizontal: Vec3A(9.556751, 0.0, 0.0), vertical: Vec3A(0.0, 6.371167, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: Some("/Render/settings") +settings: RenderSettings { samples_per_pixel: 128, max_depth: 4, width: 48, height: 32, region: PixelRect { x0: 0, y0: 0, x1: 48, y1: 32 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 24.0, aperture: [20.955, 15.2908], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 10.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/full_reloaded.usda", "$DIR/shot.usda", "$DIR/lights.usda"], invisible_overrides: Some(0) } +layer: $DIR/full_reloaded.usda +layer: $DIR/lights.usda +layer: $DIR/pay.usda +layer: $DIR/prop.usda +layer: $DIR/shot.usda +lights: 2 +light 0: dome name Some("/World/Sky") lpe None pmf 0.5 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 1: area name Some("/World/Key") lpe None pmf 0.5 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 3 geometries, PrimitiveBreakdown { triangles: 2, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 2 } top level, PrimitiveBreakdown { triangles: 4, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 2 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:6f550ecd4f901d05 camera=2:6f550ecd4f901d05 shadow=2:6f550ecd4f901d05 indirect=2:6f550ecd4f901d05 +geom 1: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:6f550ecd4f901d05 camera=2:6f550ecd4f901d05 shadow=2:6f550ecd4f901d05 indirect=2:6f550ecd4f901d05 +geom 2: material #1 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:7812e24c7b4d4335 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=2:7812e24c7b4d4335 +provenance arc source: /Pay +provenance arc source: /Prop +provenance light /World/Key: LightOrigin { index: 1, geoms: 2..3 } +provenance light /World/Sky: LightOrigin { index: 0, geoms: 2..2 } +provenance geometry 0..1: /World/Heavy +provenance geometry 1..2: /World/Prop +provenance geometry 2..3: /World/Key +provenance mesh: MeshOrigin { geom_id: 0, slot: 0, baked: false, moving: false } +provenance mesh: MeshOrigin { geom_id: 1, slot: 0, baked: false, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 6610719295604273699, n_points: 4, n_indices: 4, n_uvs: None, smooth: true, material: 0 }), placements: 2, shared: false, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: true }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/World/Cam"), cameras: ["/World/Cam"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/World/Cam"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/full_reloaded_usda-5a765fd50dde24be-1.image b/crates/crust-core/tests/data/import_baselines/full_reloaded_usda-5a765fd50dde24be-1.image new file mode 100644 index 000000000..569cd2ee9 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/full_reloaded_usda-5a765fd50dde24be-1.image @@ -0,0 +1 @@ +48x32 16spp clamp-off 0a5bf65444923e88 diff --git a/crates/crust-core/tests/data/import_baselines/full_reset_the_camera_s_transform_stack_usda-38a53b23a8f224c2-1.digest b/crates/crust-core/tests/data/import_baselines/full_reset_the_camera_s_transform_stack_usda-38a53b23a8f224c2-1.digest new file mode 100644 index 000000000..5280e409d --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/full_reset_the_camera_s_transform_stack_usda-38a53b23a8f224c2-1.digest @@ -0,0 +1,29 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/World/Cam") +camera: Camera { origin: Vec3A(0.0, 0.5, 6.0), lower_left_corner: Vec3A(-4.7783756, -2.6855836, -4.0), horizontal: Vec3A(9.556751, 0.0, 0.0), vertical: Vec3A(0.0, 6.371167, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: Some("/Render/settings") +settings: RenderSettings { samples_per_pixel: 128, max_depth: 2, width: 48, height: 32, region: PixelRect { x0: 0, y0: 0, x1: 48, y1: 32 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 24.0, aperture: [20.955, 15.2908], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 10.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/full_reset_the_camera's_transform_stack.usda", "$DIR/input.usda"], invisible_overrides: Some(0) } +layer: $DIR/full_reset_the_camera's_transform_stack.usda +layer: $DIR/input.usda +lights: 2 +light 0: distant name Some("/World/Sun") lpe None pmf 0.5 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 1: dome name Some("/World/Sky") lpe None pmf 0.5 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 2 geometries, PrimitiveBreakdown { triangles: 4, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 4, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:e7e3ae7da8a1689e camera=2:e7e3ae7da8a1689e shadow=2:e7e3ae7da8a1689e indirect=2:e7e3ae7da8a1689e +geom 1: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:50023872345aeae9 camera=2:50023872345aeae9 shadow=2:50023872345aeae9 indirect=2:50023872345aeae9 +provenance light /World/Sky: LightOrigin { index: 1, geoms: 2..2 } +provenance light /World/Sun: LightOrigin { index: 0, geoms: 2..2 } +provenance geometry 0..1: /World/Card +provenance geometry 1..2: /World/Floor +provenance mesh: MeshOrigin { geom_id: 0, slot: 0, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 1, slot: 1, baked: true, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 18358658470076285213, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 1: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 800109031887815527, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: true }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/World/Cam"), cameras: ["/World/Cam"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/World/Cam"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/full_reset_the_camera_s_transform_stack_usda-38a53b23a8f224c2-1.image b/crates/crust-core/tests/data/import_baselines/full_reset_the_camera_s_transform_stack_usda-38a53b23a8f224c2-1.image new file mode 100644 index 000000000..1cf8dfc29 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/full_reset_the_camera_s_transform_stack_usda-38a53b23a8f224c2-1.image @@ -0,0 +1 @@ +48x32 16spp clamp-off a68831230cd85e7d diff --git a/crates/crust-core/tests/data/import_baselines/full_retarget_a_diced_adaptive_scene_usda-bde6533023d6ccd8-1.digest b/crates/crust-core/tests/data/import_baselines/full_retarget_a_diced_adaptive_scene_usda-bde6533023d6ccd8-1.digest new file mode 100644 index 000000000..7dce6a32d --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/full_retarget_a_diced_adaptive_scene_usda-bde6533023d6ccd8-1.digest @@ -0,0 +1,46 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/World/Cam2") +camera: Camera { origin: Vec3A(1.5, 1.0, 5.0), lower_left_corner: Vec3A(-4.6187525, -2.2177181, -3.4887795), horizontal: Vec3A(7.5360494, -1.4466709e-8, -1.8789482), vertical: Vec3A(-0.11047701, 4.344867, -0.4430991), u: Vec3A(0.9702957, -1.8626451e-9, -0.2419219), v: Vec3A(-0.025287723, 0.99452186, -0.101423524), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: Some("/Render/settings") +settings: RenderSettings { samples_per_pixel: 64, max_depth: 4, width: 48, height: 27, region: PixelRect { x0: 0, y0: 0, x1: 48, y1: 27 }, min_samples_per_pixel: 16, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 35.0, aperture: [20.955, 15.2908], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 10.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/full_retarget_a_diced_adaptive_scene.usda", "$DIR/input.usda", "$ROOT/samples/subdivision_adaptive.usda"], invisible_overrides: Some(0) } +layer: $ROOT/samples/subdivision_adaptive.usda +layer: $DIR/full_retarget_a_diced_adaptive_scene.usda +layer: $DIR/input.usda +lights: 2 +light 0: distant name Some("/World/Sun") lpe None pmf 0.5 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 1: dome name Some("/World/Sky") lpe None pmf 0.5 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 6 geometries, PrimitiveBreakdown { triangles: 290, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 3 } top level, PrimitiveBreakdown { triangles: 302, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 3 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:4d8d0a8634ac849c camera=2:4d8d0a8634ac849c shadow=2:4d8d0a8634ac849c indirect=2:4d8d0a8634ac849c +geom 1: material #1 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=12:9b9b8ee224ae5549 camera=12:9b9b8ee224ae5549 shadow=12:9b9b8ee224ae5549 indirect=12:9b9b8ee224ae5549 +geom 2: material #1 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=12:56e3227c4c4f5a8d camera=12:56e3227c4c4f5a8d shadow=12:56e3227c4c4f5a8d indirect=12:56e3227c4c4f5a8d +geom 3: material #1 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=12:14e930a5d0b26e15 camera=12:14e930a5d0b26e15 shadow=12:14e930a5d0b26e15 indirect=12:14e930a5d0b26e15 +geom 4: material #1 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=48:85fd1a1e8638f8d5 camera=48:85fd1a1e8638f8d5 shadow=48:85fd1a1e8638f8d5 indirect=48:85fd1a1e8638f8d5 +geom 5: material #1 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=240:ceb54a03c39454ff camera=240:ceb54a03c39454ff shadow=240:ceb54a03c39454ff indirect=240:ceb54a03c39454ff +provenance material /World/Materials/clay: MaterialOrigin { slots: [1, 2, 3, 4, 5], displaced: false } +provenance arc source: /World/Cage +provenance light /World/Sky: LightOrigin { index: 1, geoms: 6..6 } +provenance light /World/Sun: LightOrigin { index: 0, geoms: 0..0 } +provenance geometry 0..1: /World/Floor +provenance geometry 1..2: /World/Cube5 +provenance geometry 2..3: /World/Cube4 +provenance geometry 3..4: /World/Cube3 +provenance geometry 4..5: /World/Cube2 +provenance geometry 5..6: /World/Cube1 +provenance mesh: MeshOrigin { geom_id: 0, slot: 0, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 1, slot: 1, baked: false, moving: false } +provenance mesh: MeshOrigin { geom_id: 2, slot: 1, baked: false, moving: false } +provenance mesh: MeshOrigin { geom_id: 3, slot: 1, baked: false, moving: false } +provenance mesh: MeshOrigin { geom_id: 4, slot: 2, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 5, slot: 3, baked: true, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 2079923942787246473, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 1: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 16825702510234920227, n_points: 8, n_indices: 36, n_uvs: None, smooth: true, material: 1 }), placements: 3, shared: false, displaced: false } +provenance mesh slot 2: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 9125125757038733368, n_points: 26, n_indices: 144, n_uvs: None, smooth: true, material: 1 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 3: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 13090063996844779502, n_points: 122, n_indices: 720, n_uvs: None, smooth: true, material: 1 }), placements: 1, shared: false, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: true }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: Some(ScreenKey([0, 1056964608, 0, 1122308081, 0, 1056964608, 0, 3212836864, 0, 3193345094, 1065353216, 0, 3193345094, 0, 3212836864, 3186714319, 0, 1065353216, 3186714319, 0, 0, 3212836864, 1090519040, 3])), domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/World/Cam2"), cameras: ["/World/Cam2", "/World/Cam"], dicing: Some("/World/Cam"), on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/World/Cam2"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/full_retarget_a_diced_adaptive_scene_usda-bde6533023d6ccd8-1.image b/crates/crust-core/tests/data/import_baselines/full_retarget_a_diced_adaptive_scene_usda-bde6533023d6ccd8-1.image new file mode 100644 index 000000000..e4272bb18 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/full_retarget_a_diced_adaptive_scene_usda-bde6533023d6ccd8-1.image @@ -0,0 +1 @@ +48x27 16spp clamp-off 65656b043bb46283 diff --git a/crates/crust-core/tests/data/import_baselines/full_retarget_an_adaptive_scene_usda-721dc26887b364a7-1.digest b/crates/crust-core/tests/data/import_baselines/full_retarget_an_adaptive_scene_usda-721dc26887b364a7-1.digest new file mode 100644 index 000000000..7b0a25bd1 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/full_retarget_an_adaptive_scene_usda-721dc26887b364a7-1.digest @@ -0,0 +1,45 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/World/Cam2") +camera: Camera { origin: Vec3A(1.5, 1.0, 5.0), lower_left_corner: Vec3A(-4.6187525, -2.2177181, -3.4887795), horizontal: Vec3A(7.5360494, -1.4466709e-8, -1.8789482), vertical: Vec3A(-0.11047701, 4.344867, -0.4430991), u: Vec3A(0.9702957, -1.8626451e-9, -0.2419219), v: Vec3A(-0.025287723, 0.99452186, -0.101423524), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: Some("/Render/settings") +settings: RenderSettings { samples_per_pixel: 64, max_depth: 4, width: 48, height: 27, region: PixelRect { x0: 0, y0: 0, x1: 48, y1: 27 }, min_samples_per_pixel: 16, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 35.0, aperture: [20.955, 15.2908], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 10.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/full_retarget_an_adaptive_scene.usda", "$DIR/input.usda", "$ROOT/samples/subdivision_adaptive.usda"], invisible_overrides: Some(0) } +layer: $ROOT/samples/subdivision_adaptive.usda +layer: $DIR/full_retarget_an_adaptive_scene.usda +layer: $DIR/input.usda +lights: 2 +light 0: distant name Some("/World/Sun") lpe None pmf 0.5 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 1: dome name Some("/World/Sky") lpe None pmf 0.5 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 6 geometries, PrimitiveBreakdown { triangles: 50, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 4 } top level, PrimitiveBreakdown { triangles: 62, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 4 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:4d8d0a8634ac849c camera=2:4d8d0a8634ac849c shadow=2:4d8d0a8634ac849c indirect=2:4d8d0a8634ac849c +geom 1: material #1 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=12:9b9b8ee224ae5549 camera=12:9b9b8ee224ae5549 shadow=12:9b9b8ee224ae5549 indirect=12:9b9b8ee224ae5549 +geom 2: material #1 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=12:56e3227c4c4f5a8d camera=12:56e3227c4c4f5a8d shadow=12:56e3227c4c4f5a8d indirect=12:56e3227c4c4f5a8d +geom 3: material #1 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=12:14e930a5d0b26e15 camera=12:14e930a5d0b26e15 shadow=12:14e930a5d0b26e15 indirect=12:14e930a5d0b26e15 +geom 4: material #1 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=12:1d38133bdf0eede5 camera=12:1d38133bdf0eede5 shadow=12:1d38133bdf0eede5 indirect=12:1d38133bdf0eede5 +geom 5: material #1 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=48:6e192a0e7059d151 camera=48:6e192a0e7059d151 shadow=48:6e192a0e7059d151 indirect=48:6e192a0e7059d151 +provenance material /World/Materials/clay: MaterialOrigin { slots: [1, 2, 3, 4, 5], displaced: false } +provenance arc source: /World/Cage +provenance light /World/Sky: LightOrigin { index: 1, geoms: 6..6 } +provenance light /World/Sun: LightOrigin { index: 0, geoms: 0..0 } +provenance geometry 0..1: /World/Floor +provenance geometry 1..2: /World/Cube5 +provenance geometry 2..3: /World/Cube4 +provenance geometry 3..4: /World/Cube3 +provenance geometry 4..5: /World/Cube2 +provenance geometry 5..6: /World/Cube1 +provenance mesh: MeshOrigin { geom_id: 0, slot: 0, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 1, slot: 1, baked: false, moving: false } +provenance mesh: MeshOrigin { geom_id: 2, slot: 1, baked: false, moving: false } +provenance mesh: MeshOrigin { geom_id: 3, slot: 1, baked: false, moving: false } +provenance mesh: MeshOrigin { geom_id: 4, slot: 1, baked: false, moving: false } +provenance mesh: MeshOrigin { geom_id: 5, slot: 2, baked: true, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 2079923942787246473, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 1: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 16825702510234920227, n_points: 8, n_indices: 36, n_uvs: None, smooth: true, material: 1 }), placements: 4, shared: false, displaced: false } +provenance mesh slot 2: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 9125125757038733368, n_points: 26, n_indices: 144, n_uvs: None, smooth: true, material: 1 }), placements: 1, shared: false, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: true }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: Some(ScreenKey([1069547520, 1065353216, 1084227584, 1115108637, 1069547520, 1065353216, 1084227584, 3213371458, 3173401642, 3188195590, 1063287320, 3173401642, 3206405490, 3168756112, 3212982450, 3185572784, 3181341822, 1064878233, 3198147198, 3195428598, 3184923397, 3212249332, 1090519040, 3])), domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/World/Cam2"), cameras: ["/World/Cam2", "/World/Cam"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/World/Cam2"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/full_retarget_an_adaptive_scene_usda-721dc26887b364a7-1.image b/crates/crust-core/tests/data/import_baselines/full_retarget_an_adaptive_scene_usda-721dc26887b364a7-1.image new file mode 100644 index 000000000..a84e5dad3 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/full_retarget_an_adaptive_scene_usda-721dc26887b364a7-1.image @@ -0,0 +1 @@ +48x27 16spp clamp-off 8afb97f1fcc0a4b0 diff --git a/crates/crust-core/tests/data/import_baselines/full_retarget_the_product_camera_usda-0a3badd9a91b1027-1.digest b/crates/crust-core/tests/data/import_baselines/full_retarget_the_product_camera_usda-0a3badd9a91b1027-1.digest new file mode 100644 index 000000000..3afd99fc2 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/full_retarget_the_product_camera_usda-0a3badd9a91b1027-1.digest @@ -0,0 +1,29 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/World/Cam2") +camera: Camera { origin: Vec3A(1.5, 1.0, 5.0), lower_left_corner: Vec3A(-4.029999, -2.2177181, -3.6355724), horizontal: Vec3A(6.358542, -1.2206286e-8, -1.5853626), vertical: Vec3A(-0.11047701, 4.344867, -0.4430991), u: Vec3A(0.9702957, -1.8626451e-9, -0.2419219), v: Vec3A(-0.025287723, 0.99452186, -0.101423524), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: Some("/Render/settings") +settings: RenderSettings { samples_per_pixel: 128, max_depth: 2, width: 48, height: 32, region: PixelRect { x0: 0, y0: 0, x1: 48, y1: 32 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [AovProduct { prim_path: "/Render/beauty", name: "beauty.exr", vars: [AovVar { prim_path: "/Render/C", name: "C", channel_prefix: None, source: Color, components: 3, precision: Float, accumulation: Filtered, clear: 0.0, expression: None, raw: false, variance: false }], attributes: [] }], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 35.0, aperture: [20.955, 15.2908], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 10.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/full_retarget_the_product_camera.usda", "$DIR/input.usda"], invisible_overrides: Some(0) } +layer: $DIR/full_retarget_the_product_camera.usda +layer: $DIR/input.usda +lights: 2 +light 0: distant name Some("/World/Sun") lpe None pmf 0.5 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 1: dome name Some("/World/Sky") lpe None pmf 0.5 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 2 geometries, PrimitiveBreakdown { triangles: 4, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 4, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:0e0a4667da70ad35 camera=2:0e0a4667da70ad35 shadow=2:0e0a4667da70ad35 indirect=2:0e0a4667da70ad35 +geom 1: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:6787da8eacebee45 camera=2:6787da8eacebee45 shadow=2:6787da8eacebee45 indirect=2:6787da8eacebee45 +provenance light /World/Sky: LightOrigin { index: 1, geoms: 2..2 } +provenance light /World/Sun: LightOrigin { index: 0, geoms: 2..2 } +provenance geometry 0..1: /World/Card +provenance geometry 1..2: /World/Floor +provenance mesh: MeshOrigin { geom_id: 0, slot: 0, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 1, slot: 1, baked: true, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 18358658470076285213, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 1: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 800109031887815527, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: true }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/World/Cam2"), cameras: ["/World/Cam2", "/World/Cam"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/World/Cam2"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/full_retarget_the_product_camera_usda-0a3badd9a91b1027-1.image b/crates/crust-core/tests/data/import_baselines/full_retarget_the_product_camera_usda-0a3badd9a91b1027-1.image new file mode 100644 index 000000000..61ffa56d4 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/full_retarget_the_product_camera_usda-0a3badd9a91b1027-1.image @@ -0,0 +1 @@ +48x32 16spp clamp-off 3072ee50a874d8ba diff --git a/crates/crust-core/tests/data/import_baselines/full_retarget_the_settings_camera_usda-2b1ab3b4034d45bb-1.digest b/crates/crust-core/tests/data/import_baselines/full_retarget_the_settings_camera_usda-2b1ab3b4034d45bb-1.digest new file mode 100644 index 000000000..8dd471e62 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/full_retarget_the_settings_camera_usda-2b1ab3b4034d45bb-1.digest @@ -0,0 +1,29 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/World/Cam") +camera: Camera { origin: Vec3A(0.0, 0.5, 6.0), lower_left_corner: Vec3A(-4.7783756, -2.6855836, -4.0), horizontal: Vec3A(9.556751, 0.0, 0.0), vertical: Vec3A(0.0, 6.371167, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: Some("/Render/settings") +settings: RenderSettings { samples_per_pixel: 128, max_depth: 2, width: 48, height: 32, region: PixelRect { x0: 0, y0: 0, x1: 48, y1: 32 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [AovProduct { prim_path: "/Render/beauty", name: "beauty.exr", vars: [AovVar { prim_path: "/Render/C", name: "C", channel_prefix: None, source: Color, components: 3, precision: Float, accumulation: Filtered, clear: 0.0, expression: None, raw: false, variance: false }], attributes: [] }], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 24.0, aperture: [20.955, 15.2908], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 10.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/full_retarget_the_settings_camera.usda", "$DIR/input.usda"], invisible_overrides: Some(0) } +layer: $DIR/full_retarget_the_settings_camera.usda +layer: $DIR/input.usda +lights: 2 +light 0: distant name Some("/World/Sun") lpe None pmf 0.5 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 1: dome name Some("/World/Sky") lpe None pmf 0.5 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 2 geometries, PrimitiveBreakdown { triangles: 4, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 4, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:0e0a4667da70ad35 camera=2:0e0a4667da70ad35 shadow=2:0e0a4667da70ad35 indirect=2:0e0a4667da70ad35 +geom 1: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:6787da8eacebee45 camera=2:6787da8eacebee45 shadow=2:6787da8eacebee45 indirect=2:6787da8eacebee45 +provenance light /World/Sky: LightOrigin { index: 1, geoms: 2..2 } +provenance light /World/Sun: LightOrigin { index: 0, geoms: 2..2 } +provenance geometry 0..1: /World/Card +provenance geometry 1..2: /World/Floor +provenance mesh: MeshOrigin { geom_id: 0, slot: 0, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 1, slot: 1, baked: true, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 18358658470076285213, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 1: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 800109031887815527, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: true }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/World/Cam"), cameras: ["/World/Cam2", "/World/Cam"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/World/Cam"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/full_retarget_the_settings_camera_usda-2b1ab3b4034d45bb-1.image b/crates/crust-core/tests/data/import_baselines/full_retarget_the_settings_camera_usda-2b1ab3b4034d45bb-1.image new file mode 100644 index 000000000..aa809d36e --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/full_retarget_the_settings_camera_usda-2b1ab3b4034d45bb-1.image @@ -0,0 +1 @@ +48x32 16spp clamp-off 8505746c918f1879 diff --git a/crates/crust-core/tests/data/import_baselines/full_retarget_to_a_carrying_camera_usda-56381435fa6b51f5-1.digest b/crates/crust-core/tests/data/import_baselines/full_retarget_to_a_carrying_camera_usda-56381435fa6b51f5-1.digest new file mode 100644 index 000000000..90c55f4bd --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/full_retarget_to_a_carrying_camera_usda-56381435fa6b51f5-1.digest @@ -0,0 +1,33 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/World/Cam2") +camera: Camera { origin: Vec3A(1.5, 1.0, 5.0), lower_left_corner: Vec3A(-4.029999, -2.2177181, -3.6355724), horizontal: Vec3A(6.358542, -1.2206286e-8, -1.5853626), vertical: Vec3A(-0.11047701, 4.344867, -0.4430991), u: Vec3A(0.9702957, -1.8626451e-9, -0.2419219), v: Vec3A(-0.025287723, 0.99452186, -0.101423524), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: Some("/Render/settings") +settings: RenderSettings { samples_per_pixel: 128, max_depth: 2, width: 48, height: 32, region: PixelRect { x0: 0, y0: 0, x1: 48, y1: 32 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [AovProduct { prim_path: "/Render/beauty", name: "beauty.exr", vars: [AovVar { prim_path: "/Render/C", name: "C", channel_prefix: None, source: Color, components: 3, precision: Float, accumulation: Filtered, clear: 0.0, expression: None, raw: false, variance: false }], attributes: [] }], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 35.0, aperture: [20.955, 15.2908], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 10.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/full_retarget_to_a_carrying_camera.usda", "$DIR/input.usda"], invisible_overrides: Some(0) } +layer: $DIR/full_retarget_to_a_carrying_camera.usda +layer: $DIR/input.usda +lights: 2 +light 0: distant name Some("/World/Sun") lpe None pmf 0.5 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 1: dome name Some("/World/Sky") lpe None pmf 0.5 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 3 geometries, PrimitiveBreakdown { triangles: 5, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 5, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:0e0a4667da70ad35 camera=2:0e0a4667da70ad35 shadow=2:0e0a4667da70ad35 indirect=2:0e0a4667da70ad35 +geom 1: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:6787da8eacebee45 camera=2:6787da8eacebee45 shadow=2:6787da8eacebee45 indirect=2:6787da8eacebee45 +geom 2: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:8644ef657b9e2de5 camera=1:8644ef657b9e2de5 shadow=1:8644ef657b9e2de5 indirect=1:8644ef657b9e2de5 +provenance light /World/Sky: LightOrigin { index: 1, geoms: 2..2 } +provenance light /World/Sun: LightOrigin { index: 0, geoms: 2..2 } +provenance geometry 0..1: /World/Card +provenance geometry 1..2: /World/Floor +provenance geometry 2..3: /World/Cam2/Badge +provenance mesh: MeshOrigin { geom_id: 0, slot: 0, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 1, slot: 1, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 2, slot: 2, baked: true, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 18358658470076285213, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 1: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 800109031887815527, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 2: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 7930610974440722833, n_points: 3, n_indices: 3, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: true }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/World/Cam2"), cameras: ["/World/Cam2", "/World/Cam"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/World/Cam2"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/full_retarget_to_a_carrying_camera_usda-56381435fa6b51f5-1.image b/crates/crust-core/tests/data/import_baselines/full_retarget_to_a_carrying_camera_usda-56381435fa6b51f5-1.image new file mode 100644 index 000000000..d1a3a8119 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/full_retarget_to_a_carrying_camera_usda-56381435fa6b51f5-1.image @@ -0,0 +1 @@ +48x32 16spp clamp-off 5ee39cdf8a8edcc5 diff --git a/crates/crust-core/tests/data/import_baselines/full_roughness_usda-a1ffe89d435678bc-1.digest b/crates/crust-core/tests/data/import_baselines/full_roughness_usda-a1ffe89d435678bc-1.digest new file mode 100644 index 000000000..b73e66b99 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/full_roughness_usda-a1ffe89d435678bc-1.digest @@ -0,0 +1,41 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/World/Cam") +camera: Camera { origin: Vec3A(0.0, 1.0, 6.0), lower_left_corner: Vec3A(-4.7783756, -2.1855836, -4.0), horizontal: Vec3A(9.556751, 0.0, 0.0), vertical: Vec3A(0.0, 6.371167, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: Some("/Render/settings") +settings: RenderSettings { samples_per_pixel: 128, max_depth: 2, width: 48, height: 32, region: PixelRect { x0: 0, y0: 0, x1: 48, y1: 32 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: PmjBn, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 2.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 24.0, aperture: [20.955, 15.2908], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 10.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/full_roughness.usda", "$DIR/stage.usda"], invisible_overrides: Some(0) } +layer: $DIR/full_roughness.usda +layer: $DIR/stage.usda +lights: 2 +light 0: area name Some("/World/Key") lpe None pmf 0.5 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 1: dome name Some("/World/Sky") lpe None pmf 0.5 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 5 geometries, PrimitiveBreakdown { triangles: 4, spheres: 3, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 4, spheres: 3, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +geom 0: material #0 Signature { kind: "MaterialX", cutout: false, straight: false, boundary: false, emits: false, uv: true, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:ba01d90e2cc0d4f5 camera=1:ba01d90e2cc0d4f5 shadow=1:ba01d90e2cc0d4f5 indirect=1:ba01d90e2cc0d4f5 +geom 1: material #1 Signature { kind: "MaterialX", cutout: false, straight: false, boundary: false, emits: false, uv: true, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:910eeb9b40238145 camera=1:910eeb9b40238145 shadow=1:910eeb9b40238145 indirect=1:910eeb9b40238145 +geom 2: material #2 Signature { kind: "MaterialX", cutout: false, straight: false, boundary: false, emits: false, uv: true, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:ee76fd7ed45c4a85 camera=1:ee76fd7ed45c4a85 shadow=1:ee76fd7ed45c4a85 indirect=1:ee76fd7ed45c4a85 +geom 3: material #3 Signature { kind: "UsdPreviewSurface (textured)", cutout: false, straight: false, boundary: false, emits: false, uv: true, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv Some(0) shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:6787da8eacebee45 camera=2:6787da8eacebee45 shadow=2:6787da8eacebee45 indirect=2:6787da8eacebee45 +geom 4: material #4 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:7812e24c7b4d4335 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=2:7812e24c7b4d4335 +provenance material /World/Looks/Base: MaterialOrigin { slots: [1], displaced: false } +provenance material /World/Looks/Derived: MaterialOrigin { slots: [0], displaced: false } +provenance material /World/Looks/Std: MaterialOrigin { slots: [2], displaced: false } +provenance material /World/Looks/Tex: MaterialOrigin { slots: [3], displaced: false } +provenance material read: ("/World/Looks/Base", "/World/Looks/Derived") +provenance material read: ("/World/Looks/Base/Surface", "/World/Looks/Derived") +provenance arc source: /World/Looks/Base +provenance arc source: /World/Looks/Base/Surface +provenance light /World/Key: LightOrigin { index: 0, geoms: 4..5 } +provenance light /World/Sky: LightOrigin { index: 1, geoms: 5..5 } +provenance geometry 0..1: /World/Right +provenance geometry 1..2: /World/Left +provenance geometry 2..3: /World/Ball +provenance geometry 3..4: /World/Floor +provenance geometry 4..5: /World/Key +provenance mesh: MeshOrigin { geom_id: 3, slot: 0, baked: true, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 9851181043634021438, n_points: 4, n_indices: 4, n_uvs: Some(4), smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [0, 1, 2] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: true }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/World/Cam"), cameras: ["/World/Cam"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/World/Cam"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/full_roughness_usda-a1ffe89d435678bc-1.image b/crates/crust-core/tests/data/import_baselines/full_roughness_usda-a1ffe89d435678bc-1.image new file mode 100644 index 000000000..990c78f2e --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/full_roughness_usda-a1ffe89d435678bc-1.image @@ -0,0 +1 @@ +48x32 16spp clamp-off c7129f3efaf88dda diff --git a/crates/crust-core/tests/data/import_baselines/full_sampler_usda-27ca674891cf7c52-1.digest b/crates/crust-core/tests/data/import_baselines/full_sampler_usda-27ca674891cf7c52-1.digest new file mode 100644 index 000000000..eb585b16b --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/full_sampler_usda-27ca674891cf7c52-1.digest @@ -0,0 +1,41 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/World/Cam") +camera: Camera { origin: Vec3A(0.0, 1.0, 6.0), lower_left_corner: Vec3A(-4.7783756, -2.1855836, -4.0), horizontal: Vec3A(9.556751, 0.0, 0.0), vertical: Vec3A(0.0, 6.371167, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: Some("/Render/settings") +settings: RenderSettings { samples_per_pixel: 128, max_depth: 2, width: 48, height: 32, region: PixelRect { x0: 0, y0: 0, x1: 48, y1: 32 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: PmjBn, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 2.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 24.0, aperture: [20.955, 15.2908], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 10.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/full_sampler.usda", "$DIR/stage.usda"], invisible_overrides: Some(0) } +layer: $DIR/full_sampler.usda +layer: $DIR/stage.usda +lights: 2 +light 0: area name Some("/World/Key") lpe None pmf 0.5 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 1: dome name Some("/World/Sky") lpe None pmf 0.5 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 5 geometries, PrimitiveBreakdown { triangles: 4, spheres: 3, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 4, spheres: 3, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +geom 0: material #0 Signature { kind: "MaterialX", cutout: false, straight: false, boundary: false, emits: false, uv: true, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:ba01d90e2cc0d4f5 camera=1:ba01d90e2cc0d4f5 shadow=1:ba01d90e2cc0d4f5 indirect=1:ba01d90e2cc0d4f5 +geom 1: material #1 Signature { kind: "MaterialX", cutout: false, straight: false, boundary: false, emits: false, uv: true, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:910eeb9b40238145 camera=1:910eeb9b40238145 shadow=1:910eeb9b40238145 indirect=1:910eeb9b40238145 +geom 2: material #2 Signature { kind: "MaterialX", cutout: false, straight: false, boundary: false, emits: false, uv: true, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:ee76fd7ed45c4a85 camera=1:ee76fd7ed45c4a85 shadow=1:ee76fd7ed45c4a85 indirect=1:ee76fd7ed45c4a85 +geom 3: material #3 Signature { kind: "UsdPreviewSurface (textured)", cutout: false, straight: false, boundary: false, emits: false, uv: true, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv Some(0) shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:6787da8eacebee45 camera=2:6787da8eacebee45 shadow=2:6787da8eacebee45 indirect=2:6787da8eacebee45 +geom 4: material #4 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:7812e24c7b4d4335 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=2:7812e24c7b4d4335 +provenance material /World/Looks/Base: MaterialOrigin { slots: [1], displaced: false } +provenance material /World/Looks/Derived: MaterialOrigin { slots: [0], displaced: false } +provenance material /World/Looks/Std: MaterialOrigin { slots: [2], displaced: false } +provenance material /World/Looks/Tex: MaterialOrigin { slots: [3], displaced: false } +provenance material read: ("/World/Looks/Base", "/World/Looks/Derived") +provenance material read: ("/World/Looks/Base/Surface", "/World/Looks/Derived") +provenance arc source: /World/Looks/Base +provenance arc source: /World/Looks/Base/Surface +provenance light /World/Key: LightOrigin { index: 0, geoms: 4..5 } +provenance light /World/Sky: LightOrigin { index: 1, geoms: 5..5 } +provenance geometry 0..1: /World/Right +provenance geometry 1..2: /World/Left +provenance geometry 2..3: /World/Ball +provenance geometry 3..4: /World/Floor +provenance geometry 4..5: /World/Key +provenance mesh: MeshOrigin { geom_id: 3, slot: 0, baked: true, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 9851181043634021438, n_points: 4, n_indices: 4, n_uvs: Some(4), smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [0, 1, 2] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: true }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/World/Cam"), cameras: ["/World/Cam"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/World/Cam"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/full_sampler_usda-27ca674891cf7c52-1.image b/crates/crust-core/tests/data/import_baselines/full_sampler_usda-27ca674891cf7c52-1.image new file mode 100644 index 000000000..f578d7bd6 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/full_sampler_usda-27ca674891cf7c52-1.image @@ -0,0 +1 @@ +48x32 16spp clamp-off ba9a59bdaff14a99 diff --git a/crates/crust-core/tests/data/import_baselines/full_scatter_usda-80ff37fcf1ff9f3c-1.digest b/crates/crust-core/tests/data/import_baselines/full_scatter_usda-80ff37fcf1ff9f3c-1.digest new file mode 100644 index 000000000..ce74fc480 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/full_scatter_usda-80ff37fcf1ff9f3c-1.digest @@ -0,0 +1,585 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/World/Cam") +camera: Camera { origin: Vec3A(0.0, 4.0, 14.0), lower_left_corner: Vec3A(-6.371167, -0.2474451, 4.0), horizontal: Vec3A(12.742334, 0.0, 0.0), vertical: Vec3A(0.0, 8.49489, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: Some("/Render/settings") +settings: RenderSettings { samples_per_pixel: 128, max_depth: 3, width: 48, height: 32, region: PixelRect { x0: 0, y0: 0, x1: 48, y1: 32 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 18.0, aperture: [20.955, 15.2908], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 10.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/full_scatter.usda", "$DIR/stage.usda", "$DIR/table.usda"], invisible_overrides: Some(0) } +layer: $DIR/crate.usda +layer: $DIR/full_scatter.usda +layer: $DIR/stage.usda +layer: $DIR/stone_a.usda +layer: $DIR/stone_b.usda +layer: $DIR/table.usda +lights: 1 +light 0: dome name Some("/World/Sky") lpe None pmf 1.0 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 515 geometries, PrimitiveBreakdown { triangles: 166, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 506 } top level, PrimitiveBreakdown { triangles: 202, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 506 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.1761441 motion [] pieces all=12:45a862dded98b1c6 camera=12:45a862dded98b1c6 shadow=12:45a862dded98b1c6 indirect=12:45a862dded98b1c6 +geom 1: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.8810865 motion [] pieces all=12:64944d265981058e camera=12:64944d265981058e shadow=12:64944d265981058e indirect=12:64944d265981058e +geom 2: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0232378 motion [] pieces all=12:3388e3ca138a3f1f camera=12:3388e3ca138a3f1f shadow=12:3388e3ca138a3f1f indirect=12:3388e3ca138a3f1f +geom 3: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.99894494 motion [] pieces all=12:fdfa25d8c193c4a0 camera=12:fdfa25d8c193c4a0 shadow=12:fdfa25d8c193c4a0 indirect=12:fdfa25d8c193c4a0 +geom 4: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.1065642 motion [] pieces all=12:6955ab4220a0f7f0 camera=12:6955ab4220a0f7f0 shadow=12:6955ab4220a0f7f0 indirect=12:6955ab4220a0f7f0 +geom 5: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.80337954 motion [] pieces all=12:e2e3eb04df83a72a camera=12:e2e3eb04df83a72a shadow=12:e2e3eb04df83a72a indirect=12:e2e3eb04df83a72a +geom 6: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0571522 motion [] pieces all=12:61f3b3daf13919ed camera=12:61f3b3daf13919ed shadow=12:61f3b3daf13919ed indirect=12:61f3b3daf13919ed +geom 7: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.9235039 motion [] pieces all=12:67d2180e9e401524 camera=12:67d2180e9e401524 shadow=12:67d2180e9e401524 indirect=12:67d2180e9e401524 +geom 8: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.97259986 motion [] pieces all=12:76d9e29bdce76947 camera=12:76d9e29bdce76947 shadow=12:76d9e29bdce76947 indirect=12:76d9e29bdce76947 +geom 9: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0333868 motion [] pieces all=12:f70acb4c14b57733 camera=12:f70acb4c14b57733 shadow=12:f70acb4c14b57733 indirect=12:f70acb4c14b57733 +geom 10: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.8712479 motion [] pieces all=12:a6e3103831c2bb95 camera=12:a6e3103831c2bb95 shadow=12:a6e3103831c2bb95 indirect=12:a6e3103831c2bb95 +geom 11: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.1695868 motion [] pieces all=12:b68f582acb9488d9 camera=12:b68f582acb9488d9 shadow=12:b68f582acb9488d9 indirect=12:b68f582acb9488d9 +geom 12: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.8319464 motion [] pieces all=12:acbc4ae83f658381 camera=12:acbc4ae83f658381 shadow=12:acbc4ae83f658381 indirect=12:acbc4ae83f658381 +geom 13: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.13118 motion [] pieces all=12:598aa1811e9041e8 camera=12:598aa1811e9041e8 shadow=12:598aa1811e9041e8 indirect=12:598aa1811e9041e8 +geom 14: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0985051 motion [] pieces all=12:e42f85275179f9eb camera=12:e42f85275179f9eb shadow=12:e42f85275179f9eb indirect=12:e42f85275179f9eb +geom 15: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.930394 motion [] pieces all=12:ecc186bbcfc12323 camera=12:ecc186bbcfc12323 shadow=12:ecc186bbcfc12323 indirect=12:ecc186bbcfc12323 +geom 16: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.1146806 motion [] pieces all=12:57da4df43fb578d2 camera=12:57da4df43fb578d2 shadow=12:57da4df43fb578d2 indirect=12:57da4df43fb578d2 +geom 17: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.8209351 motion [] pieces all=12:e25b06971fef82ac camera=12:e25b06971fef82ac shadow=12:e25b06971fef82ac indirect=12:e25b06971fef82ac +geom 18: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0663182 motion [] pieces all=12:b307914e162ebd94 camera=12:b307914e162ebd94 shadow=12:b307914e162ebd94 indirect=12:b307914e162ebd94 +geom 19: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.9115253 motion [] pieces all=12:24a6e636442db05b camera=12:24a6e636442db05b shadow=12:24a6e636442db05b indirect=12:24a6e636442db05b +geom 20: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.1879729 motion [] pieces all=12:481f9cd756cedde0 camera=12:481f9cd756cedde0 shadow=12:481f9cd756cedde0 indirect=12:481f9cd756cedde0 +geom 21: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.8957119 motion [] pieces all=12:2d4663e6184de452 camera=12:2d4663e6184de452 shadow=12:2d4663e6184de452 indirect=12:2d4663e6184de452 +geom 22: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0098108 motion [] pieces all=12:b0bb69961ba75478 camera=12:b0bb69961ba75478 shadow=12:b0bb69961ba75478 indirect=12:b0bb69961ba75478 +geom 23: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.98019165 motion [] pieces all=12:b9afdaa931bffdb6 camera=12:b9afdaa931bffdb6 shadow=12:b9afdaa931bffdb6 indirect=12:b9afdaa931bffdb6 +geom 24: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0813562 motion [] pieces all=12:f5d0fb106b756265 camera=12:f5d0fb106b756265 shadow=12:f5d0fb106b756265 indirect=12:f5d0fb106b756265 +geom 25: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.94515204 motion [] pieces all=12:089190d039cd8f05 camera=12:089190d039cd8f05 shadow=12:089190d039cd8f05 indirect=12:089190d039cd8f05 +geom 26: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.84345704 motion [] pieces all=12:e26f0d45af850c90 camera=12:e26f0d45af850c90 shadow=12:e26f0d45af850c90 indirect=12:e26f0d45af850c90 +geom 27: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.1462855 motion [] pieces all=12:b6f87466c44a00c9 camera=12:b6f87466c44a00c9 shadow=12:b6f87466c44a00c9 indirect=12:b6f87466c44a00c9 +geom 28: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.1544222 motion [] pieces all=12:797d242554fe864a camera=12:797d242554fe864a shadow=12:797d242554fe864a indirect=12:797d242554fe864a +geom 29: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.86153686 motion [] pieces all=12:be846117a4ea7801 camera=12:be846117a4ea7801 shadow=12:be846117a4ea7801 indirect=12:be846117a4ea7801 +geom 30: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0419827 motion [] pieces all=12:6ddf27426dad80b8 camera=12:6ddf27426dad80b8 shadow=12:6ddf27426dad80b8 indirect=12:6ddf27426dad80b8 +geom 31: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.9549145 motion [] pieces all=12:3f3d2de984f016e1 camera=12:3f3d2de984f016e1 shadow=12:3f3d2de984f016e1 indirect=12:3f3d2de984f016e1 +geom 32: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.1013982 motion [] pieces all=12:d325740a4c504329 camera=12:d325740a4c504329 shadow=12:d325740a4c504329 indirect=12:d325740a4c504329 +geom 33: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.8114375 motion [] pieces all=12:f529c99ebd35ea5e camera=12:f529c99ebd35ea5e shadow=12:f529c99ebd35ea5e indirect=12:f529c99ebd35ea5e +geom 34: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0561118 motion [] pieces all=12:3b32daf9fb97191e camera=12:3b32daf9fb97191e shadow=12:3b32daf9fb97191e indirect=12:3b32daf9fb97191e +geom 35: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.91436315 motion [] pieces all=12:9336514ad2a50746 camera=12:9336514ad2a50746 shadow=12:9336514ad2a50746 indirect=12:9336514ad2a50746 +geom 36: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.8854387 motion [] pieces all=12:ee06eb3bb41cf5e3 camera=12:ee06eb3bb41cf5e3 shadow=12:ee06eb3bb41cf5e3 indirect=12:ee06eb3bb41cf5e3 +geom 37: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.1826364 motion [] pieces all=12:6ab824c87ddbb42e camera=12:6ab824c87ddbb42e shadow=12:6ab824c87ddbb42e indirect=12:6ab824c87ddbb42e +geom 38: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.98780096 motion [] pieces all=12:3e246edc11785421 camera=12:3e246edc11785421 shadow=12:3e246edc11785421 indirect=12:3e246edc11785421 +geom 39: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0161881 motion [] pieces all=12:460bcfda839b7475 camera=12:460bcfda839b7475 shadow=12:460bcfda839b7475 indirect=12:460bcfda839b7475 +geom 40: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.1313198 motion [] pieces all=12:1df02a18f6ef0cb0 camera=12:1df02a18f6ef0cb0 shadow=12:1df02a18f6ef0cb0 indirect=12:1df02a18f6ef0cb0 +geom 41: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.8307075 motion [] pieces all=12:e5bd325c9cc63258 camera=12:e5bd325c9cc63258 shadow=12:e5bd325c9cc63258 indirect=12:e5bd325c9cc63258 +geom 42: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.93608296 motion [] pieces all=12:eaf20bfe2d9d2ea8 camera=12:eaf20bfe2d9d2ea8 shadow=12:eaf20bfe2d9d2ea8 indirect=12:eaf20bfe2d9d2ea8 +geom 43: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0927486 motion [] pieces all=12:0b46814b8788d10c camera=12:0b46814b8788d10c shadow=12:0b46814b8788d10c indirect=12:0b46814b8788d10c +geom 44: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.9677548 motion [] pieces all=12:a11085306be96c79 camera=12:a11085306be96c79 shadow=12:a11085306be96c79 indirect=12:a11085306be96c79 +geom 45: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0287622 motion [] pieces all=12:a2e4e83ee9235718 camera=12:a2e4e83ee9235718 shadow=12:a2e4e83ee9235718 indirect=12:a2e4e83ee9235718 +geom 46: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.867445 motion [] pieces all=12:52a12ca2ad2269a0 camera=12:52a12ca2ad2269a0 shadow=12:52a12ca2ad2269a0 indirect=12:52a12ca2ad2269a0 +geom 47: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.1652948 motion [] pieces all=12:8ac666cdc9aed126 camera=12:8ac666cdc9aed126 shadow=12:8ac666cdc9aed126 indirect=12:8ac666cdc9aed126 +geom 48: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.1573718 motion [] pieces all=12:dc22e4e0c3a563c5 camera=12:dc22e4e0c3a563c5 shadow=12:dc22e4e0c3a563c5 indirect=12:dc22e4e0c3a563c5 +geom 49: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.8516039 motion [] pieces all=12:d5439bf95adb5d29 camera=12:d5439bf95adb5d29 shadow=12:d5439bf95adb5d29 indirect=12:d5439bf95adb5d29 +geom 50: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.957956 motion [] pieces all=12:a2366eb57be17947 camera=12:a2366eb57be17947 shadow=12:a2366eb57be17947 indirect=12:a2366eb57be17947 +geom 51: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0476611 motion [] pieces all=12:aa424a427bf1da18 camera=12:aa424a427bf1da18 shadow=12:aa424a427bf1da18 indirect=12:aa424a427bf1da18 +geom 52: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.94141537 motion [] pieces all=12:439332df7477a2f0 camera=12:439332df7477a2f0 shadow=12:439332df7477a2f0 indirect=12:439332df7477a2f0 +geom 53: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0779837 motion [] pieces all=12:050de2f979a00214 camera=12:050de2f979a00214 shadow=12:050de2f979a00214 indirect=12:050de2f979a00214 +geom 54: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.84913945 motion [] pieces all=12:d359da50fe63fc4e camera=12:d359da50fe63fc4e shadow=12:d359da50fe63fc4e indirect=12:d359da50fe63fc4e +geom 55: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.1388466 motion [] pieces all=12:f274bc0e146ac6ec camera=12:f274bc0e146ac6ec shadow=12:f274bc0e146ac6ec indirect=12:f274bc0e146ac6ec +geom 56: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.81745243 motion [] pieces all=12:59b88eaab766334e camera=12:59b88eaab766334e shadow=12:59b88eaab766334e indirect=12:59b88eaab766334e +geom 57: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.1221887 motion [] pieces all=12:4391248690d8a96c camera=12:4391248690d8a96c shadow=12:4391248690d8a96c indirect=12:4391248690d8a96c +geom 58: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0737523 motion [] pieces all=12:5ca2a2dc5d2ca537 camera=12:5ca2a2dc5d2ca537 shadow=12:5ca2a2dc5d2ca537 indirect=12:5ca2a2dc5d2ca537 +geom 59: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.90149456 motion [] pieces all=12:c6c2782f00a068ab camera=12:c6c2782f00a068ab shadow=12:c6c2782f00a068ab indirect=12:c6c2782f00a068ab +geom 60: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.98508954 motion [] pieces all=12:75bc6455fa6a273c camera=12:75bc6455fa6a273c shadow=12:75bc6455fa6a273c indirect=12:75bc6455fa6a273c +geom 61: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0035064 motion [] pieces all=12:197384b40f7a87e2 camera=12:197384b40f7a87e2 shadow=12:197384b40f7a87e2 indirect=12:197384b40f7a87e2 +geom 62: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.8923537 motion [] pieces all=12:2b6626eb636f521c camera=12:2b6626eb636f521c shadow=12:2b6626eb636f521c indirect=12:2b6626eb636f521c +geom 63: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.1949198 motion [] pieces all=12:61af9c9b07f1116d camera=12:61af9c9b07f1116d shadow=12:61af9c9b07f1116d indirect=12:61af9c9b07f1116d +geom 64: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.1920719 motion [] pieces all=12:cfd846df87adb0da camera=12:cfd846df87adb0da shadow=12:cfd846df87adb0da indirect=12:cfd846df87adb0da +geom 65: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.8984334 motion [] pieces all=12:333d41a0dcb2e201 camera=12:333d41a0dcb2e201 shadow=12:333d41a0dcb2e201 indirect=12:333d41a0dcb2e201 +geom 66: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.9751323 motion [] pieces all=12:b7bdd232140c4521 camera=12:b7bdd232140c4521 shadow=12:b7bdd232140c4521 indirect=12:b7bdd232140c4521 +geom 67: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0087382 motion [] pieces all=12:d13ed6cfaf8f058c camera=12:d13ed6cfaf8f058c shadow=12:d13ed6cfaf8f058c indirect=12:d13ed6cfaf8f058c +geom 68: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0648361 motion [] pieces all=12:c21a4efa1141550f camera=12:c21a4efa1141550f shadow=12:c21a4efa1141550f indirect=12:c21a4efa1141550f +geom 69: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.90664405 motion [] pieces all=12:c2720b1e01aad493 camera=12:c2720b1e01aad493 shadow=12:c2720b1e01aad493 indirect=12:c2720b1e01aad493 +geom 70: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.1171777 motion [] pieces all=12:fad9d3b4cef64b24 camera=12:fad9d3b4cef64b24 shadow=12:fad9d3b4cef64b24 indirect=12:fad9d3b4cef64b24 +geom 71: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.824887 motion [] pieces all=12:f4410e325cd0afb1 camera=12:f4410e325cd0afb1 shadow=12:f4410e325cd0afb1 indirect=12:f4410e325cd0afb1 +geom 72: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.9516001 motion [] pieces all=12:cc84d88f692e85a6 camera=12:cc84d88f692e85a6 shadow=12:cc84d88f692e85a6 indirect=12:cc84d88f692e85a6 +geom 73: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0400816 motion [] pieces all=12:e22ab20fe11d8cfe camera=12:e22ab20fe11d8cfe shadow=12:e22ab20fe11d8cfe indirect=12:e22ab20fe11d8cfe +geom 74: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.8592531 motion [] pieces all=12:13c0a13a86e249ef camera=12:13c0a13a86e249ef shadow=12:13c0a13a86e249ef indirect=12:13c0a13a86e249ef +geom 75: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.1510249 motion [] pieces all=12:1937c664f4367544 camera=12:1937c664f4367544 shadow=12:1937c664f4367544 indirect=12:1937c664f4367544 +geom 76: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0866565 motion [] pieces all=12:5db5fb4d3b4d5b35 camera=12:5db5fb4d3b4d5b35 shadow=12:5db5fb4d3b4d5b35 indirect=12:5db5fb4d3b4d5b35 +geom 77: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.9487157 motion [] pieces all=12:d58005e750fb4342 camera=12:d58005e750fb4342 shadow=12:d58005e750fb4342 indirect=12:d58005e750fb4342 +geom 78: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.1492283 motion [] pieces all=12:0342164286461ee3 camera=12:0342164286461ee3 shadow=12:0342164286461ee3 indirect=12:0342164286461ee3 +geom 79: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.83977586 motion [] pieces all=12:c807827e3075e055 camera=12:c807827e3075e055 shadow=12:c807827e3075e055 indirect=12:c807827e3075e055 +geom 80: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0217434 motion [] pieces all=12:5285ac30cc4da062 camera=12:5285ac30cc4da062 shadow=12:5285ac30cc4da062 indirect=12:5285ac30cc4da062 +geom 81: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.9952757 motion [] pieces all=12:10bc56ab6511ed11 camera=12:10bc56ab6511ed11 shadow=12:10bc56ab6511ed11 indirect=12:10bc56ab6511ed11 +geom 82: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.87789065 motion [] pieces all=12:b7b3cff366213430 camera=12:b7b3cff366213430 shadow=12:b7b3cff366213430 indirect=12:b7b3cff366213430 +geom 83: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.179131 motion [] pieces all=12:26dba7352b5248dd camera=12:26dba7352b5248dd shadow=12:26dba7352b5248dd indirect=12:26dba7352b5248dd +geom 84: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.80048686 motion [] pieces all=12:ca11206893156c4a camera=12:ca11206893156c4a shadow=12:ca11206893156c4a indirect=12:ca11206893156c4a +geom 85: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.1101823 motion [] pieces all=12:956ae996e038f15c camera=12:956ae996e038f15c shadow=12:956ae996e038f15c indirect=12:956ae996e038f15c +geom 86: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.92086023 motion [] pieces all=12:bb66f238124bf21c camera=12:bb66f238124bf21c shadow=12:bb66f238124bf21c indirect=12:bb66f238124bf21c +geom 87: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0607451 motion [] pieces all=12:bfb452bde61271c1 camera=12:bfb452bde61271c1 shadow=12:bfb452bde61271c1 indirect=12:bfb452bde61271c1 +geom 88: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.1730204 motion [] pieces all=12:4202277f53e57a26 camera=12:4202277f53e57a26 shadow=12:4202277f53e57a26 indirect=12:4202277f53e57a26 +geom 89: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.8726802 motion [] pieces all=12:bfff37b52c3695b3 camera=12:bfff37b52c3695b3 shadow=12:bfff37b52c3695b3 indirect=12:bfff37b52c3695b3 +geom 90: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0355178 motion [] pieces all=12:d92670a1b5505f3f camera=12:d92670a1b5505f3f shadow=12:d92670a1b5505f3f indirect=12:d92670a1b5505f3f +geom 91: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.97155887 motion [] pieces all=12:038043fc4d8f3922 camera=12:038043fc4d8f3922 shadow=12:038043fc4d8f3922 indirect=12:038043fc4d8f3922 +geom 92: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.1275393 motion [] pieces all=12:21160187a4422810 camera=12:21160187a4422810 shadow=12:21160187a4422810 indirect=12:21160187a4422810 +geom 93: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.83525693 motion [] pieces all=12:222fd24745b9a688 camera=12:222fd24745b9a688 shadow=12:222fd24745b9a688 indirect=12:222fd24745b9a688 +geom 94: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0946484 motion [] pieces all=12:b93a89503d2db429 camera=12:b93a89503d2db429 shadow=12:b93a89503d2db429 indirect=12:b93a89503d2db429 +geom 95: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.92521805 motion [] pieces all=12:9deb2e0bd53286f5 camera=12:9deb2e0bd53286f5 shadow=12:9deb2e0bd53286f5 indirect=12:9deb2e0bd53286f5 +geom 96: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0792248 motion [] pieces all=12:c39dad0894dc3c01 camera=12:c39dad0894dc3c01 shadow=12:c39dad0894dc3c01 indirect=12:c39dad0894dc3c01 +geom 97: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.938952 motion [] pieces all=12:82dba3e562b9171c camera=12:82dba3e562b9171c shadow=12:82dba3e562b9171c indirect=12:82dba3e562b9171c +geom 98: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.8466961 motion [] pieces all=12:5771a39944397bbc camera=12:5771a39944397bbc shadow=12:5771a39944397bbc indirect=12:5771a39944397bbc +geom 99: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.1409111 motion [] pieces all=12:f4f5b1d34830c065 camera=12:f4f5b1d34830c065 shadow=12:f4f5b1d34830c065 indirect=12:f4f5b1d34830c065 +geom 100: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.1619297 motion [] pieces all=12:2ac55dd6a5129a82 camera=12:2ac55dd6a5129a82 shadow=12:2ac55dd6a5129a82 indirect=12:2ac55dd6a5129a82 +geom 101: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.8545255 motion [] pieces all=12:3318ba1c1ea6cb67 camera=12:3318ba1c1ea6cb67 shadow=12:3318ba1c1ea6cb67 indirect=12:3318ba1c1ea6cb67 +geom 102: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0461638 motion [] pieces all=12:abd06b6ac0d101a8 camera=12:abd06b6ac0d101a8 shadow=12:abd06b6ac0d101a8 indirect=12:abd06b6ac0d101a8 +geom 103: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.95997083 motion [] pieces all=12:0e766dd59c7864ea camera=12:0e766dd59c7864ea shadow=12:0e766dd59c7864ea indirect=12:0e766dd59c7864ea +geom 104: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.9838973 motion [] pieces all=12:4e51be9913a19574 camera=12:4e51be9913a19574 shadow=12:4e51be9913a19574 indirect=12:4e51be9913a19574 +geom 105: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0016983 motion [] pieces all=12:205b772513a5b2d0 camera=12:205b772513a5b2d0 shadow=12:205b772513a5b2d0 indirect=12:205b772513a5b2d0 +geom 106: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.1974854 motion [] pieces all=12:aafd38f582755d75 camera=12:aafd38f582755d75 shadow=12:aafd38f582755d75 indirect=12:aafd38f582755d75 +geom 107: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.89059156 motion [] pieces all=12:5e1c6ed9efae70da camera=12:5e1c6ed9efae70da shadow=12:5e1c6ed9efae70da indirect=12:5e1c6ed9efae70da +geom 108: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.1189466 motion [] pieces all=12:1ccc269c6db79208 camera=12:1ccc269c6db79208 shadow=12:1ccc269c6db79208 indirect=12:1ccc269c6db79208 +geom 109: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.81325066 motion [] pieces all=12:13bc64f0b3663db5 camera=12:13bc64f0b3663db5 shadow=12:13bc64f0b3663db5 indirect=12:13bc64f0b3663db5 +geom 110: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.069818 motion [] pieces all=12:932fe7987a89653d camera=12:932fe7987a89653d shadow=12:932fe7987a89653d indirect=12:932fe7987a89653d +geom 111: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.9038211 motion [] pieces all=12:90f5b972915f93b4 camera=12:90f5b972915f93b4 shadow=12:90f5b972915f93b4 indirect=12:90f5b972915f93b4 +geom 112: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.1853997 motion [] pieces all=12:8179b93651694931 camera=12:8179b93651694931 shadow=12:8179b93651694931 indirect=12:8179b93651694931 +geom 113: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.88160837 motion [] pieces all=12:069fc554995e3ee7 camera=12:069fc554995e3ee7 shadow=12:069fc554995e3ee7 indirect=12:069fc554995e3ee7 +geom 114: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0146524 motion [] pieces all=12:e176080f78b1eb15 camera=12:e176080f78b1eb15 shadow=12:e176080f78b1eb15 indirect=12:e176080f78b1eb15 +geom 115: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.99161226 motion [] pieces all=12:ef58b8a0de63d3c4 camera=12:ef58b8a0de63d3c4 shadow=12:ef58b8a0de63d3c4 indirect=12:ef58b8a0de63d3c4 +geom 116: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0511867 motion [] pieces all=12:4b16770c04cd474b camera=12:4b16770c04cd474b shadow=12:4b16770c04cd474b indirect=12:4b16770c04cd474b +geom 117: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.9171676 motion [] pieces all=12:609f6f3ddcf1af6d camera=12:609f6f3ddcf1af6d shadow=12:609f6f3ddcf1af6d indirect=12:609f6f3ddcf1af6d +geom 118: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.80908626 motion [] pieces all=12:4c035f8f3318d2f6 camera=12:4c035f8f3318d2f6 shadow=12:4c035f8f3318d2f6 indirect=12:4c035f8f3318d2f6 +geom 119: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.103263 motion [] pieces all=12:700889d040a6e4dd camera=12:700889d040a6e4dd shadow=12:700889d040a6e4dd indirect=12:700889d040a6e4dd +geom 120: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.8642026 motion [] pieces all=12:6e10e505ba86c48e camera=12:6e10e505ba86c48e shadow=12:6e10e505ba86c48e indirect=12:6e10e505ba86c48e +geom 121: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.1678903 motion [] pieces all=12:3582f8fba0915f4a camera=12:3582f8fba0915f4a shadow=12:3582f8fba0915f4a indirect=12:3582f8fba0915f4a +geom 122: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.9633117 motion [] pieces all=12:2040ef2ac8c3a93d camera=12:2040ef2ac8c3a93d shadow=12:2040ef2ac8c3a93d indirect=12:2040ef2ac8c3a93d +geom 123: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0253445 motion [] pieces all=12:a91be1fa2268d70b camera=12:a91be1fa2268d70b shadow=12:a91be1fa2268d70b indirect=12:a91be1fa2268d70b +geom 124: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.13635 motion [] pieces all=12:9e7372e64ec5bb9d camera=12:9e7372e64ec5bb9d shadow=12:9e7372e64ec5bb9d indirect=12:9e7372e64ec5bb9d +geom 125: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.8252184 motion [] pieces all=12:27afe71487c8acfc camera=12:27afe71487c8acfc shadow=12:27afe71487c8acfc indirect=12:27afe71487c8acfc +geom 126: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0885826 motion [] pieces all=12:c9ce7a955379bf47 camera=12:c9ce7a955379bf47 shadow=12:c9ce7a955379bf47 indirect=12:c9ce7a955379bf47 +geom 127: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.9313929 motion [] pieces all=12:f936746ea9fdaa67 camera=12:f936746ea9fdaa67 shadow=12:f936746ea9fdaa67 indirect=12:f936746ea9fdaa67 +geom 128: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0906614 motion [] pieces all=12:e6990c8db4ea9e79 camera=12:e6990c8db4ea9e79 shadow=12:e6990c8db4ea9e79 indirect=12:e6990c8db4ea9e79 +geom 129: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.93495494 motion [] pieces all=12:75b610907ba3ea9b camera=12:75b610907ba3ea9b shadow=12:75b610907ba3ea9b indirect=12:75b610907ba3ea9b +geom 130: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.82858384 motion [] pieces all=12:e78b8cafbe306a32 camera=12:e78b8cafbe306a32 shadow=12:e78b8cafbe306a32 indirect=12:e78b8cafbe306a32 +geom 131: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.1339966 motion [] pieces all=12:b9ac9a14840ed1f6 camera=12:b9ac9a14840ed1f6 shadow=12:b9ac9a14840ed1f6 indirect=12:b9ac9a14840ed1f6 +geom 132: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.8659113 motion [] pieces all=12:b1a9a739c1c000bc camera=12:b1a9a739c1c000bc shadow=12:b1a9a739c1c000bc indirect=12:b1a9a739c1c000bc +geom 133: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.1626551 motion [] pieces all=12:9f5c63d26cf251c1 camera=12:9f5c63d26cf251c1 shadow=12:9f5c63d26cf251c1 indirect=12:9f5c63d26cf251c1 +geom 134: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.96570367 motion [] pieces all=12:e82835f20fda3a2d camera=12:e82835f20fda3a2d shadow=12:e82835f20fda3a2d indirect=12:e82835f20fda3a2d +geom 135: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0299364 motion [] pieces all=12:a9c34018dedecc29 camera=12:a9c34018dedecc29 shadow=12:a9c34018dedecc29 indirect=12:a9c34018dedecc29 +geom 136: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0544772 motion [] pieces all=12:f171c63901b9cd24 camera=12:f171c63901b9cd24 shadow=12:f171c63901b9cd24 indirect=12:f171c63901b9cd24 +geom 137: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.9139284 motion [] pieces all=12:66942b3dbac18127 camera=12:66942b3dbac18127 shadow=12:66942b3dbac18127 indirect=12:66942b3dbac18127 +geom 138: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.103051 motion [] pieces all=12:0c9467685e6faf9b camera=12:0c9467685e6faf9b shadow=12:0c9467685e6faf9b indirect=12:0c9467685e6faf9b +geom 139: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.81037587 motion [] pieces all=12:4628207e87532cd9 camera=12:4628207e87532cd9 shadow=12:4628207e87532cd9 indirect=12:4628207e87532cd9 +geom 140: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0183249 motion [] pieces all=12:865fd372ca38e7d5 camera=12:865fd372ca38e7d5 shadow=12:865fd372ca38e7d5 indirect=12:865fd372ca38e7d5 +geom 141: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.99033916 motion [] pieces all=12:fd4547bf3f39772e camera=12:fd4547bf3f39772e shadow=12:fd4547bf3f39772e indirect=12:fd4547bf3f39772e +geom 142: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.1833695 motion [] pieces all=12:4718ab9f74de7af5 camera=12:4718ab9f74de7af5 shadow=12:4718ab9f74de7af5 indirect=12:4718ab9f74de7af5 +geom 143: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.8870931 motion [] pieces all=12:f073ad6af47da1b9 camera=12:f073ad6af47da1b9 shadow=12:f073ad6af47da1b9 indirect=12:f073ad6af47da1b9 +geom 144: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0751863 motion [] pieces all=12:469243371e3601c4 camera=12:469243371e3601c4 shadow=12:469243371e3601c4 indirect=12:469243371e3601c4 +geom 145: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.94338113 motion [] pieces all=12:242ede1ac82d2838 camera=12:242ede1ac82d2838 shadow=12:242ede1ac82d2838 indirect=12:242ede1ac82d2838 +geom 146: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.1404334 motion [] pieces all=12:6ae0e374492b1345 camera=12:6ae0e374492b1345 shadow=12:6ae0e374492b1345 indirect=12:6ae0e374492b1345 +geom 147: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.84811646 motion [] pieces all=12:7fc28f36f60f9e79 camera=12:7fc28f36f60f9e79 shadow=12:7fc28f36f60f9e79 indirect=12:7fc28f36f60f9e79 +geom 148: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.1578814 motion [] pieces all=12:004bab5661b3c514 camera=12:004bab5661b3c514 shadow=12:004bab5661b3c514 indirect=12:004bab5661b3c514 +geom 149: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.8510541 motion [] pieces all=12:06ee30278c301b97 camera=12:06ee30278c301b97 shadow=12:06ee30278c301b97 indirect=12:06ee30278c301b97 +geom 150: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.95639116 motion [] pieces all=12:0cc69f7eab6608d5 camera=12:0cc69f7eab6608d5 shadow=12:0cc69f7eab6608d5 indirect=12:0cc69f7eab6608d5 +geom 151: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0488136 motion [] pieces all=12:84683631bf3f2d7f camera=12:84683631bf3f2d7f shadow=12:84683631bf3f2d7f indirect=12:84683631bf3f2d7f +geom 152: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.1240493 motion [] pieces all=12:09e0339043c05885 camera=12:09e0339043c05885 shadow=12:09e0339043c05885 indirect=12:09e0339043c05885 +geom 153: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.81715965 motion [] pieces all=12:baff44b23fa2fe8c camera=12:baff44b23fa2fe8c shadow=12:baff44b23fa2fe8c indirect=12:baff44b23fa2fe8c +geom 154: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.072348 motion [] pieces all=12:7f07f015aba3675f camera=12:7f07f015aba3675f shadow=12:7f07f015aba3675f indirect=12:7f07f015aba3675f +geom 155: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.9028523 motion [] pieces all=12:e544345b30b64bce camera=12:e544345b30b64bce shadow=12:e544345b30b64bce indirect=12:e544345b30b64bce +geom 156: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.195409 motion [] pieces all=12:bf44779c62a0d1d9 camera=12:bf44779c62a0d1d9 shadow=12:bf44779c62a0d1d9 indirect=12:bf44779c62a0d1d9 +geom 157: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.8909322 motion [] pieces all=12:d9444d58a4aa29bf camera=12:d9444d58a4aa29bf shadow=12:d9444d58a4aa29bf indirect=12:d9444d58a4aa29bf +geom 158: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0053203 motion [] pieces all=12:f5a72299b44a6f83 camera=12:f5a72299b44a6f83 shadow=12:f5a72299b44a6f83 indirect=12:f5a72299b44a6f83 +geom 159: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.9874529 motion [] pieces all=12:478c430d181f0449 camera=12:478c430d181f0449 shadow=12:478c430d181f0449 indirect=12:478c430d181f0449 +geom 160: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.833996 motion [] pieces all=12:4f2c575953df9f82 camera=12:4f2c575953df9f82 shadow=12:4f2c575953df9f82 indirect=12:4f2c575953df9f82 +geom 161: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.129332 motion [] pieces all=12:858c4460ee11a801 camera=12:858c4460ee11a801 shadow=12:858c4460ee11a801 indirect=12:858c4460ee11a801 +geom 162: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.9295599 motion [] pieces all=12:e49c9cd7bb7700e3 camera=12:e49c9cd7bb7700e3 shadow=12:e49c9cd7bb7700e3 indirect=12:e49c9cd7bb7700e3 +geom 163: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0982622 motion [] pieces all=12:dc41ad73cd114385 camera=12:dc41ad73cd114385 shadow=12:dc41ad73cd114385 indirect=12:dc41ad73cd114385 +geom 164: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.97451484 motion [] pieces all=12:09af8565fc3d201d camera=12:09af8565fc3d201d shadow=12:09af8565fc3d201d indirect=12:09af8565fc3d201d +geom 165: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0320674 motion [] pieces all=12:9f9b6a360e10adbb camera=12:9f9b6a360e10adbb shadow=12:9f9b6a360e10adbb indirect=12:9f9b6a360e10adbb +geom 166: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.1709979 motion [] pieces all=12:99d2f51f4821115d camera=12:99d2f51f4821115d shadow=12:99d2f51f4821115d indirect=12:99d2f51f4821115d +geom 167: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.8691917 motion [] pieces all=12:0d56e690544efec0 camera=12:0d56e690544efec0 shadow=12:0d56e690544efec0 indirect=12:0d56e690544efec0 +geom 168: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.87965363 motion [] pieces all=12:827e12ddbf252fb5 camera=12:827e12ddbf252fb5 shadow=12:827e12ddbf252fb5 indirect=12:827e12ddbf252fb5 +geom 169: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.1770281 motion [] pieces all=12:88a6fafd5aaa039d camera=12:88a6fafd5aaa039d shadow=12:88a6fafd5aaa039d indirect=12:88a6fafd5aaa039d +geom 170: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.9975212 motion [] pieces all=12:f46016e89c458233 camera=12:f46016e89c458233 shadow=12:f46016e89c458233 indirect=12:f46016e89c458233 +geom 171: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0249971 motion [] pieces all=12:d662864dd505c55e camera=12:d662864dd505c55e shadow=12:d662864dd505c55e indirect=12:d662864dd505c55e +geom 172: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.92243314 motion [] pieces all=12:f342c3a2ed6b0950 camera=12:f342c3a2ed6b0950 shadow=12:f342c3a2ed6b0950 indirect=12:f342c3a2ed6b0950 +geom 173: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0585103 motion [] pieces all=12:ee7ff15f2424922f camera=12:ee7ff15f2424922f shadow=12:ee7ff15f2424922f indirect=12:ee7ff15f2424922f +geom 174: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.1082776 motion [] pieces all=12:86ef859898372a65 camera=12:86ef859898372a65 shadow=12:86ef859898372a65 indirect=12:86ef859898372a65 +geom 175: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.80569136 motion [] pieces all=12:9ec313ad6c2136d1 camera=12:9ec313ad6c2136d1 shadow=12:9ec313ad6c2136d1 indirect=12:9ec313ad6c2136d1 +geom 176: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.9787432 motion [] pieces all=12:2dde1f02614bce01 camera=12:2dde1f02614bce01 shadow=12:2dde1f02614bce01 indirect=12:2dde1f02614bce01 +geom 177: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0118738 motion [] pieces all=12:aafadba605d03110 camera=12:aafadba605d03110 shadow=12:aafadba605d03110 indirect=12:aafadba605d03110 +geom 178: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.89458597 motion [] pieces all=12:21e27892f962ac44 camera=12:21e27892f962ac44 shadow=12:21e27892f962ac44 indirect=12:21e27892f962ac44 +geom 179: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.190431 motion [] pieces all=12:6675c70617e67d8a camera=12:6675c70617e67d8a shadow=12:6675c70617e67d8a indirect=12:6675c70617e67d8a +geom 180: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0687202 motion [] pieces all=12:c5167e2e7d81c2ff camera=12:c5167e2e7d81c2ff shadow=12:c5167e2e7d81c2ff indirect=12:c5167e2e7d81c2ff +geom 181: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.91078526 motion [] pieces all=12:48e2cb88cfa05576 camera=12:48e2cb88cfa05576 shadow=12:48e2cb88cfa05576 indirect=12:48e2cb88cfa05576 +geom 182: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.1132085 motion [] pieces all=12:043069344a3076c2 camera=12:043069344a3076c2 shadow=12:043069344a3076c2 indirect=12:043069344a3076c2 +geom 183: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.81958956 motion [] pieces all=12:b6a3b6188b4b31bf camera=12:b6a3b6188b4b31bf shadow=12:b6a3b6188b4b31bf indirect=12:b6a3b6188b4b31bf +geom 184: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.95427895 motion [] pieces all=12:c001bd0dad9ff844 camera=12:c001bd0dad9ff844 shadow=12:c001bd0dad9ff844 indirect=12:c001bd0dad9ff844 +geom 185: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0434186 motion [] pieces all=12:0b59ff7e43848943 camera=12:0b59ff7e43848943 shadow=12:0b59ff7e43848943 indirect=12:0b59ff7e43848943 +geom 186: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.1551938 motion [] pieces all=12:5218f56e8786a8d1 camera=12:5218f56e8786a8d1 shadow=12:5218f56e8786a8d1 indirect=12:5218f56e8786a8d1 +geom 187: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.8595143 motion [] pieces all=12:4a7806cbcbb88531 camera=12:4a7806cbcbb88531 shadow=12:4a7806cbcbb88531 indirect=12:4a7806cbcbb88531 +geom 188: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.8408943 motion [] pieces all=12:7f3b442d9e722de1 camera=12:7f3b442d9e722de1 shadow=12:7f3b442d9e722de1 indirect=12:7f3b442d9e722de1 +geom 189: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.1452442 motion [] pieces all=12:e0d5bbe9bb208a1d camera=12:e0d5bbe9bb208a1d shadow=12:e0d5bbe9bb208a1d indirect=12:e0d5bbe9bb208a1d +geom 190: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.9464676 motion [] pieces all=12:b085d7918bf6355b camera=12:b085d7918bf6355b shadow=12:b085d7918bf6355b indirect=12:b085d7918bf6355b +geom 191: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0834273 motion [] pieces all=12:abe6c6954e3382a9 camera=12:abe6c6954e3382a9 shadow=12:abe6c6954e3382a9 indirect=12:abe6c6954e3382a9 +geom 192: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.8574602 motion [] pieces all=12:71ee11b13c594ff9 camera=12:71ee11b13c594ff9 shadow=12:71ee11b13c594ff9 indirect=12:71ee11b13c594ff9 +geom 193: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.151815 motion [] pieces all=12:dbe2a094f9f5dd6a camera=12:dbe2a094f9f5dd6a shadow=12:dbe2a094f9f5dd6a indirect=12:dbe2a094f9f5dd6a +geom 194: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0380479 motion [] pieces all=12:287aaeeaee0c366b camera=12:287aaeeaee0c366b shadow=12:287aaeeaee0c366b indirect=12:287aaeeaee0c366b +geom 195: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.95154804 motion [] pieces all=12:4846d4ce61cd070a camera=12:4846d4ce61cd070a shadow=12:4846d4ce61cd070a indirect=12:4846d4ce61cd070a +geom 196: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0853423 motion [] pieces all=12:668675de6db22ea9 camera=12:668675de6db22ea9 shadow=12:668675de6db22ea9 indirect=12:668675de6db22ea9 +geom 197: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.9481686 motion [] pieces all=12:b2176c9e3a8bd6be camera=12:b2176c9e3a8bd6be shadow=12:b2176c9e3a8bd6be indirect=12:b2176c9e3a8bd6be +geom 198: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.148388 motion [] pieces all=12:1b5bfe08d8aecf46 camera=12:1b5bfe08d8aecf46 shadow=12:1b5bfe08d8aecf46 indirect=12:1b5bfe08d8aecf46 +geom 199: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.8388503 motion [] pieces all=12:ed6a27aa851d98b4 camera=12:ed6a27aa851d98b4 shadow=12:ed6a27aa851d98b4 indirect=12:ed6a27aa851d98b4 +geom 200: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.1177161 motion [] pieces all=12:477f446ff91418fe camera=12:477f446ff91418fe shadow=12:477f446ff91418fe indirect=12:477f446ff91418fe +geom 201: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.821902 motion [] pieces all=12:e45df0929b4a7a20 camera=12:e45df0929b4a7a20 shadow=12:e45df0929b4a7a20 indirect=12:e45df0929b4a7a20 +geom 202: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.9081097 motion [] pieces all=12:d8ac1550c1d701d3 camera=12:d8ac1550c1d701d3 shadow=12:d8ac1550c1d701d3 indirect=12:d8ac1550c1d701d3 +geom 203: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0630432 motion [] pieces all=12:4bf7c09967756dab camera=12:4bf7c09967756dab shadow=12:4bf7c09967756dab indirect=12:4bf7c09967756dab +geom 204: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0076557 motion [] pieces all=12:4b743cdcfe182631 camera=12:4b743cdcfe182631 shadow=12:4b743cdcfe182631 indirect=12:4b743cdcfe182631 +geom 205: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.97757643 motion [] pieces all=12:ce244f01fc616d6d camera=12:ce244f01fc616d6d shadow=12:ce244f01fc616d6d indirect=12:ce244f01fc616d6d +geom 206: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.1927692 motion [] pieces all=12:3680ff2a1925c2b8 camera=12:3680ff2a1925c2b8 shadow=12:3680ff2a1925c2b8 indirect=12:3680ff2a1925c2b8 +geom 207: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.8998191 motion [] pieces all=12:631eb32618265a1d camera=12:631eb32618265a1d shadow=12:631eb32618265a1d indirect=12:631eb32618265a1d +geom 208: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0190506 motion [] pieces all=12:ecbbd67d5ea82535 camera=12:ecbbd67d5ea82535 shadow=12:ecbbd67d5ea82535 indirect=12:ecbbd67d5ea82535 +geom 209: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.99540603 motion [] pieces all=12:3ff8d546f9bdd0fb camera=12:3ff8d546f9bdd0fb shadow=12:3ff8d546f9bdd0fb indirect=12:3ff8d546f9bdd0fb +geom 210: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.1799959 motion [] pieces all=12:2317ef2a031d8f47 camera=12:2317ef2a031d8f47 shadow=12:2317ef2a031d8f47 indirect=12:2317ef2a031d8f47 +geom 211: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.87620467 motion [] pieces all=12:1779aa23bb0f9042 camera=12:1779aa23bb0f9042 shadow=12:1779aa23bb0f9042 indirect=12:1779aa23bb0f9042 +geom 212: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.1119057 motion [] pieces all=12:91f1de75efe1ff66 camera=12:91f1de75efe1ff66 shadow=12:91f1de75efe1ff66 indirect=12:91f1de75efe1ff66 +geom 213: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.8029353 motion [] pieces all=12:504fea94e49e26b5 camera=12:504fea94e49e26b5 shadow=12:504fea94e49e26b5 indirect=12:504fea94e49e26b5 +geom 214: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.9190664 motion [] pieces all=12:0efb54b7f23ac443 camera=12:0efb54b7f23ac443 shadow=12:0efb54b7f23ac443 indirect=12:0efb54b7f23ac443 +geom 215: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0612158 motion [] pieces all=12:55a92efc8135fc5d camera=12:55a92efc8135fc5d shadow=12:55a92efc8135fc5d indirect=12:55a92efc8135fc5d +geom 216: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.1734748 motion [] pieces all=12:a620be5aa9925d00 camera=12:a620be5aa9925d00 shadow=12:a620be5aa9925d00 indirect=12:a620be5aa9925d00 +geom 217: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.8742897 motion [] pieces all=12:c2fbfc60af19f0d0 camera=12:c2fbfc60af19f0d0 shadow=12:c2fbfc60af19f0d0 indirect=12:c2fbfc60af19f0d0 +geom 218: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0368638 motion [] pieces all=12:fd178773edcdb210 camera=12:fd178773edcdb210 shadow=12:fd178773edcdb210 indirect=12:fd178773edcdb210 +geom 219: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.9695358 motion [] pieces all=12:92c10878d7799c47 camera=12:92c10878d7799c47 shadow=12:92c10878d7799c47 indirect=12:92c10878d7799c47 +geom 220: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.83632326 motion [] pieces all=12:56eef0396f98b12d camera=12:56eef0396f98b12d shadow=12:56eef0396f98b12d indirect=12:56eef0396f98b12d +geom 221: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.125916 motion [] pieces all=12:2ee3e4102b2ca7c0 camera=12:2ee3e4102b2ca7c0 shadow=12:2ee3e4102b2ca7c0 indirect=12:2ee3e4102b2ca7c0 +geom 222: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.92677325 motion [] pieces all=12:9c793be4df2804bc camera=12:9c793be4df2804bc shadow=12:9c793be4df2804bc indirect=12:9c793be4df2804bc +geom 223: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.096751 motion [] pieces all=12:b6735b8f2a80f193 camera=12:b6735b8f2a80f193 shadow=12:b6735b8f2a80f193 indirect=12:b6735b8f2a80f193 +geom 224: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.99294955 motion [] pieces all=12:e14d605bbad5054b camera=12:e14d605bbad5054b shadow=12:e14d605bbad5054b indirect=12:e14d605bbad5054b +geom 225: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0129327 motion [] pieces all=12:ce70384139f3d953 camera=12:ce70384139f3d953 shadow=12:ce70384139f3d953 indirect=12:ce70384139f3d953 +geom 226: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.8834852 motion [] pieces all=12:f275b69e8465276d camera=12:f275b69e8465276d shadow=12:f275b69e8465276d indirect=12:f275b69e8465276d +geom 227: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.1862364 motion [] pieces all=12:73a525c8a7cfebfc camera=12:73a525c8a7cfebfc shadow=12:73a525c8a7cfebfc indirect=12:73a525c8a7cfebfc +geom 228: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.80695534 motion [] pieces all=12:4fc4787ac53c19ae camera=12:4fc4787ac53c19ae shadow=12:4fc4787ac53c19ae indirect=12:4fc4787ac53c19ae +geom 229: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.1052685 motion [] pieces all=12:5f526759f00f8bb1 camera=12:5f526759f00f8bb1 shadow=12:5f526759f00f8bb1 indirect=12:5f526759f00f8bb1 +geom 230: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0517714 motion [] pieces all=12:43a08224d7f3a5ff camera=12:43a08224d7f3a5ff shadow=12:43a08224d7f3a5ff indirect=12:43a08224d7f3a5ff +geom 231: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.9183691 motion [] pieces all=12:4e8261fe621a8754 camera=12:4e8261fe621a8754 shadow=12:4e8261fe621a8754 indirect=12:4e8261fe621a8754 +geom 232: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0896878 motion [] pieces all=12:2105a034e5acb921 camera=12:2105a034e5acb921 shadow=12:2105a034e5acb921 indirect=12:2105a034e5acb921 +geom 233: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.93423206 motion [] pieces all=12:47b70feddcfef5c4 camera=12:47b70feddcfef5c4 shadow=12:47b70feddcfef5c4 indirect=12:47b70feddcfef5c4 +geom 234: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.1348141 motion [] pieces all=12:c150c564a2f639e3 camera=12:c150c564a2f639e3 shadow=12:c150c564a2f639e3 indirect=12:c150c564a2f639e3 +geom 235: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.8272541 motion [] pieces all=12:9a036bb10f2a8c19 camera=12:9a036bb10f2a8c19 shadow=12:9a036bb10f2a8c19 indirect=12:9a036bb10f2a8c19 +geom 236: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.8628023 motion [] pieces all=12:df84cc6ab0cf1013 camera=12:df84cc6ab0cf1013 shadow=12:df84cc6ab0cf1013 indirect=12:df84cc6ab0cf1013 +geom 237: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.1667898 motion [] pieces all=12:ea055c935781e4b2 camera=12:ea055c935781e4b2 shadow=12:ea055c935781e4b2 indirect=12:ea055c935781e4b2 +geom 238: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0272492 motion [] pieces all=12:b666550bc7f3f2e3 camera=12:b666550bc7f3f2e3 shadow=12:b666550bc7f3f2e3 indirect=12:b666550bc7f3f2e3 +geom 239: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.9644636 motion [] pieces all=12:25b40fe1e3b33c13 camera=12:25b40fe1e3b33c13 shadow=12:25b40fe1e3b33c13 indirect=12:25b40fe1e3b33c13 +geom 240: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.9401488 motion [] pieces all=12:ef193e56f1c675ad camera=12:ef193e56f1c675ad shadow=12:ef193e56f1c675ad indirect=12:ef193e56f1c675ad +geom 241: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0806658 motion [] pieces all=12:6cd8d81131f613a5 camera=12:6cd8d81131f613a5 shadow=12:6cd8d81131f613a5 indirect=12:6cd8d81131f613a5 +geom 242: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.84431666 motion [] pieces all=12:75d58887322e3c92 camera=12:75d58887322e3c92 shadow=12:75d58887322e3c92 indirect=12:75d58887322e3c92 +geom 243: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.1427468 motion [] pieces all=12:ceb6c2a84e7313ea camera=12:ceb6c2a84e7313ea shadow=12:ceb6c2a84e7313ea indirect=12:ceb6c2a84e7313ea +geom 244: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.8558955 motion [] pieces all=12:966eb51da03b3092 camera=12:966eb51da03b3092 shadow=12:966eb51da03b3092 indirect=12:966eb51da03b3092 +geom 245: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.1608133 motion [] pieces all=12:4684046ad71d3941 camera=12:4684046ad71d3941 shadow=12:4684046ad71d3941 indirect=12:4684046ad71d3941 +geom 246: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0448556 motion [] pieces all=12:8909f2f12790188f camera=12:8909f2f12790188f shadow=12:8909f2f12790188f indirect=12:8909f2f12790188f +geom 247: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.9619815 motion [] pieces all=12:e68d935303781b60 camera=12:e68d935303781b60 shadow=12:e68d935303781b60 indirect=12:e68d935303781b60 +geom 248: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.9050406 motion [] pieces all=12:77e1fb7c3ccd3b72 camera=12:77e1fb7c3ccd3b72 shadow=12:77e1fb7c3ccd3b72 indirect=12:77e1fb7c3ccd3b72 +geom 249: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0704575 motion [] pieces all=12:bf814629e90eb2a6 camera=12:bf814629e90eb2a6 shadow=12:bf814629e90eb2a6 indirect=12:bf814629e90eb2a6 +geom 250: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.8142105 motion [] pieces all=12:3e101c8e3b9023da camera=12:3e101c8e3b9023da shadow=12:3e101c8e3b9023da indirect=12:3e101c8e3b9023da +geom 251: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.1210591 motion [] pieces all=12:adeb9df8e5336e1e camera=12:adeb9df8e5336e1e shadow=12:adeb9df8e5336e1e indirect=12:adeb9df8e5336e1e +geom 252: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0009634 motion [] pieces all=12:243ce4af91f5aa9f camera=12:243ce4af91f5aa9f shadow=12:243ce4af91f5aa9f indirect=12:243ce4af91f5aa9f +geom 253: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.9823128 motion [] pieces all=12:930bc470da7bfca0 camera=12:930bc470da7bfca0 shadow=12:930bc470da7bfca0 indirect=12:930bc470da7bfca0 +geom 254: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.1997087 motion [] pieces all=12:0eed12db9d57f617 camera=12:0eed12db9d57f617 shadow=12:0eed12db9d57f617 indirect=12:0eed12db9d57f617 +geom 255: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.8885824 motion [] pieces all=12:085bce0e053ac672 camera=12:085bce0e053ac672 shadow=12:085bce0e053ac672 indirect=12:085bce0e053ac672 +geom 256: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.1071253 motion [] pieces all=12:558e90753a1dbe0c camera=12:558e90753a1dbe0c shadow=12:558e90753a1dbe0c indirect=12:558e90753a1dbe0c +geom 257: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.80412865 motion [] pieces all=12:438f0ac0ef81a15c camera=12:438f0ac0ef81a15c shadow=12:438f0ac0ef81a15c indirect=12:438f0ac0ef81a15c +geom 258: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.056387 motion [] pieces all=12:532e9c68579ceebf camera=12:532e9c68579ceebf shadow=12:532e9c68579ceebf indirect=12:532e9c68579ceebf +geom 259: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.92466545 motion [] pieces all=12:8bd67b0e1ac0a9c5 camera=12:8bd67b0e1ac0a9c5 shadow=12:8bd67b0e1ac0a9c5 indirect=12:8bd67b0e1ac0a9c5 +geom 260: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0224771 motion [] pieces all=12:db8f1a9cc1fdd115 camera=12:db8f1a9cc1fdd115 shadow=12:db8f1a9cc1fdd115 indirect=12:db8f1a9cc1fdd115 +geom 261: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.9992335 motion [] pieces all=12:c12fef72270cd9b9 camera=12:c12fef72270cd9b9 shadow=12:c12fef72270cd9b9 indirect=12:c12fef72270cd9b9 +geom 262: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.8799568 motion [] pieces all=12:99f42a5ee0052055 camera=12:99f42a5ee0052055 shadow=12:99f42a5ee0052055 indirect=12:99f42a5ee0052055 +geom 263: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.1754391 motion [] pieces all=12:aec0913446abacc1 camera=12:aec0913446abacc1 shadow=12:aec0913446abacc1 indirect=12:aec0913446abacc1 +geom 264: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.1689945 motion [] pieces all=12:817419b742012466 camera=12:817419b742012466 shadow=12:817419b742012466 indirect=12:817419b742012466 +geom 265: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.8709754 motion [] pieces all=12:11dc946f2502073c camera=12:11dc946f2502073c shadow=12:11dc946f2502073c indirect=12:11dc946f2502073c +geom 266: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0341958 motion [] pieces all=12:2cdb9da3d277d7c3 camera=12:2cdb9da3d277d7c3 shadow=12:2cdb9da3d277d7c3 indirect=12:2cdb9da3d277d7c3 +geom 267: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.9728058 motion [] pieces all=12:adf045b7d32a2f1f camera=12:adf045b7d32a2f1f shadow=12:adf045b7d32a2f1f indirect=12:adf045b7d32a2f1f +geom 268: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.9305494 motion [] pieces all=12:8fdab00337b44101 camera=12:8fdab00337b44101 shadow=12:8fdab00337b44101 indirect=12:8fdab00337b44101 +geom 269: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0993541 motion [] pieces all=12:e9f74cbbc31e88ca camera=12:e9f74cbbc31e88ca shadow=12:e9f74cbbc31e88ca indirect=12:e9f74cbbc31e88ca +geom 270: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.1297429 motion [] pieces all=12:e6f58dc9a2c8cf31 camera=12:e6f58dc9a2c8cf31 shadow=12:e6f58dc9a2c8cf31 indirect=12:e6f58dc9a2c8cf31 +geom 271: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.8328105 motion [] pieces all=12:28fe4127d8309887 camera=12:28fe4127d8309887 shadow=12:28fe4127d8309887 indirect=12:28fe4127d8309887 +geom 272: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0407774 motion [] pieces all=12:d1adc814dd14ee88 camera=12:d1adc814dd14ee88 shadow=12:d1adc814dd14ee88 indirect=12:d1adc814dd14ee88 +geom 273: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.9556146 motion [] pieces all=12:6d24b8714ab18ccb camera=12:6d24b8714ab18ccb shadow=12:6d24b8714ab18ccb indirect=12:6d24b8714ab18ccb +geom 274: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.8622651 motion [] pieces all=12:4123fa223d783808 camera=12:4123fa223d783808 shadow=12:4123fa223d783808 indirect=12:4123fa223d783808 +geom 275: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.1533363 motion [] pieces all=12:b1d8d2f5c048d126 camera=12:b1d8d2f5c048d126 shadow=12:b1d8d2f5c048d126 indirect=12:b1d8d2f5c048d126 +geom 276: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0827482 motion [] pieces all=12:b34d3f2fea6ccf3f camera=12:b34d3f2fea6ccf3f shadow=12:b34d3f2fea6ccf3f indirect=12:b34d3f2fea6ccf3f +geom 277: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.94452286 motion [] pieces all=12:d7313d7a2c947b15 camera=12:d7313d7a2c947b15 shadow=12:d7313d7a2c947b15 indirect=12:d7313d7a2c947b15 +geom 278: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.84241277 motion [] pieces all=12:cf8f50c89c7848bf camera=12:cf8f50c89c7848bf shadow=12:cf8f50c89c7848bf indirect=12:cf8f50c89c7848bf +geom 279: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.145969 motion [] pieces all=12:fc6d0c5cd4ac480a camera=12:fc6d0c5cd4ac480a shadow=12:fc6d0c5cd4ac480a indirect=12:fc6d0c5cd4ac480a +geom 280: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.8967557 motion [] pieces all=12:01efc81ea2dc09da camera=12:01efc81ea2dc09da shadow=12:01efc81ea2dc09da indirect=12:01efc81ea2dc09da +geom 281: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.1884634 motion [] pieces all=12:985e2ace4f406785 camera=12:985e2ace4f406785 shadow=12:985e2ace4f406785 indirect=12:985e2ace4f406785 +geom 282: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0103384 motion [] pieces all=12:595d0b15b7883054 camera=12:595d0b15b7883054 shadow=12:595d0b15b7883054 indirect=12:595d0b15b7883054 +geom 283: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.9807979 motion [] pieces all=12:91c655586891aa6d camera=12:91c655586891aa6d shadow=12:91c655586891aa6d indirect=12:91c655586891aa6d +geom 284: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.91237754 motion [] pieces all=12:1f92e95a24a0a941 camera=12:1f92e95a24a0a941 shadow=12:1f92e95a24a0a941 indirect=12:1f92e95a24a0a941 +geom 285: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0665895 motion [] pieces all=12:24eed0a13c96f7c0 camera=12:24eed0a13c96f7c0 shadow=12:24eed0a13c96f7c0 indirect=12:24eed0a13c96f7c0 +geom 286: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.8213568 motion [] pieces all=12:3ace4e273389b040 camera=12:3ace4e273389b040 shadow=12:3ace4e273389b040 indirect=12:3ace4e273389b040 +geom 287: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.1155375 motion [] pieces all=12:a774e8fd544c302f camera=12:a774e8fd544c302f shadow=12:a774e8fd544c302f indirect=12:a774e8fd544c302f +geom 288: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0168831 motion [] pieces all=12:3b8dfe9ac6e074e4 camera=12:3b8dfe9ac6e074e4 shadow=12:3b8dfe9ac6e074e4 indirect=12:3b8dfe9ac6e074e4 +geom 289: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.9887352 motion [] pieces all=12:9cc4d9cc6beae0f8 camera=12:9cc4d9cc6beae0f8 shadow=12:9cc4d9cc6beae0f8 indirect=12:9cc4d9cc6beae0f8 +geom 290: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.88512194 motion [] pieces all=12:54452159c0cc6de1 camera=12:54452159c0cc6de1 shadow=12:54452159c0cc6de1 indirect=12:54452159c0cc6de1 +geom 291: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.1818812 motion [] pieces all=12:d8d6033726a0ae3c camera=12:d8d6033726a0ae3c shadow=12:d8d6033726a0ae3c indirect=12:d8d6033726a0ae3c +geom 292: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0553548 motion [] pieces all=12:14bad604a1de7065 camera=12:14bad604a1de7065 shadow=12:14bad604a1de7065 indirect=12:14bad604a1de7065 +geom 293: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.91546917 motion [] pieces all=12:c40b47e88849fe33 camera=12:c40b47e88849fe33 shadow=12:c40b47e88849fe33 indirect=12:c40b47e88849fe33 +geom 294: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.8122816 motion [] pieces all=12:2e893d2222249532 camera=12:2e893d2222249532 shadow=12:2e893d2222249532 indirect=12:2e893d2222249532 +geom 295: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.1005894 motion [] pieces all=12:bd58cb1520f6c589 camera=12:bd58cb1520f6c589 shadow=12:bd58cb1520f6c589 indirect=12:bd58cb1520f6c589 +geom 296: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.9684521 motion [] pieces all=12:5ee1a186ae2d9dd0 camera=12:5ee1a186ae2d9dd0 shadow=12:5ee1a186ae2d9dd0 indirect=12:5ee1a186ae2d9dd0 +geom 297: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0291594 motion [] pieces all=12:bbe60b405380df40 camera=12:bbe60b405380df40 shadow=12:bbe60b405380df40 indirect=12:bbe60b405380df40 +geom 298: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.868216 motion [] pieces all=12:1139e1c7e4a5e8fb camera=12:1139e1c7e4a5e8fb shadow=12:1139e1c7e4a5e8fb indirect=12:1139e1c7e4a5e8fb +geom 299: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.1648309 motion [] pieces all=12:f4d9f51838186556 camera=12:f4d9f51838186556 shadow=12:f4d9f51838186556 indirect=12:f4d9f51838186556 +geom 300: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.1327685 motion [] pieces all=12:6c7567952e89b197 camera=12:6c7567952e89b197 shadow=12:6c7567952e89b197 indirect=12:6c7567952e89b197 +geom 301: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.8302819 motion [] pieces all=12:78388d34aa653f58 camera=12:78388d34aa653f58 shadow=12:78388d34aa653f58 indirect=12:78388d34aa653f58 +geom 302: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.93690276 motion [] pieces all=12:b8ddd2c09893939a camera=12:b8ddd2c09893939a shadow=12:b8ddd2c09893939a indirect=12:b8ddd2c09893939a +geom 303: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0930607 motion [] pieces all=12:1439028a696a7d6a camera=12:1439028a696a7d6a shadow=12:1439028a696a7d6a indirect=12:1439028a696a7d6a +geom 304: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.98559374 motion [] pieces all=12:2d5a80cc0e242252 camera=12:2d5a80cc0e242252 shadow=12:2d5a80cc0e242252 indirect=12:2d5a80cc0e242252 +geom 305: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0042014 motion [] pieces all=12:ba32837f934d89a0 camera=12:ba32837f934d89a0 shadow=12:ba32837f934d89a0 indirect=12:ba32837f934d89a0 +geom 306: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.1942586 motion [] pieces all=12:eafe5de3bea88df7 camera=12:eafe5de3bea88df7 shadow=12:eafe5de3bea88df7 indirect=12:eafe5de3bea88df7 +geom 307: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.893466 motion [] pieces all=12:647780a6ed707c17 camera=12:647780a6ed707c17 shadow=12:647780a6ed707c17 indirect=12:647780a6ed707c17 +geom 308: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.90030926 motion [] pieces all=12:487b70fa9b392254 camera=12:487b70fa9b392254 shadow=12:487b70fa9b392254 indirect=12:487b70fa9b392254 +geom 309: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0744654 motion [] pieces all=12:d541c481d5fd43bf camera=12:d541c481d5fd43bf shadow=12:d541c481d5fd43bf indirect=12:d541c481d5fd43bf +geom 310: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.1226648 motion [] pieces all=12:631e3ff8dcda598a camera=12:631e3ff8dcda598a shadow=12:631e3ff8dcda598a indirect=12:631e3ff8dcda598a +geom 311: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.8183132 motion [] pieces all=12:4d8c861c7b334b12 camera=12:4d8c861c7b334b12 shadow=12:4d8c861c7b334b12 indirect=12:4d8c861c7b334b12 +geom 312: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0470083 motion [] pieces all=12:144bf5f952df3aae camera=12:144bf5f952df3aae shadow=12:144bf5f952df3aae indirect=12:144bf5f952df3aae +geom 313: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.9589237 motion [] pieces all=12:6f08e2f191c13829 camera=12:6f08e2f191c13829 shadow=12:6f08e2f191c13829 indirect=12:6f08e2f191c13829 +geom 314: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.1568285 motion [] pieces all=12:9ddb7a84275336f2 camera=12:9ddb7a84275336f2 shadow=12:9ddb7a84275336f2 indirect=12:9ddb7a84275336f2 +geom 315: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.8528369 motion [] pieces all=12:dc6f6b0e0689c4fe camera=12:dc6f6b0e0689c4fe shadow=12:dc6f6b0e0689c4fe indirect=12:dc6f6b0e0689c4fe +geom 316: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.1375338 motion [] pieces all=12:771d4bc7d8a2055c camera=12:771d4bc7d8a2055c shadow=12:771d4bc7d8a2055c indirect=12:771d4bc7d8a2055c +geom 317: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.84985673 motion [] pieces all=12:5f8f376f318e7dd6 camera=12:5f8f376f318e7dd6 shadow=12:5f8f376f318e7dd6 indirect=12:5f8f376f318e7dd6 +geom 318: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.94081056 motion [] pieces all=12:7a3fb26c1cd5533d camera=12:7a3fb26c1cd5533d shadow=12:7a3fb26c1cd5533d indirect=12:7a3fb26c1cd5533d +geom 319: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0773013 motion [] pieces all=12:d7fce092f6c85dec camera=12:d7fce092f6c85dec shadow=12:d7fce092f6c85dec indirect=12:d7fce092f6c85dec +geom 320: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.1783283 motion [] pieces all=12:37d30f1a46e449ff camera=12:37d30f1a46e449ff shadow=12:37d30f1a46e449ff indirect=12:37d30f1a46e449ff +geom 321: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.87658024 motion [] pieces all=12:14d43fd6bb0ff55d camera=12:14d43fd6bb0ff55d shadow=12:14d43fd6bb0ff55d indirect=12:14d43fd6bb0ff55d +geom 322: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0205542 motion [] pieces all=12:87481ae735713eaa camera=12:87481ae735713eaa shadow=12:87481ae735713eaa indirect=12:87481ae735713eaa +geom 323: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.99422103 motion [] pieces all=12:5bde4420dcb7830a camera=12:5bde4420dcb7830a shadow=12:5bde4420dcb7830a indirect=12:5bde4420dcb7830a +geom 324: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.9212079 motion [] pieces all=12:dd5d8187b0e11f4d camera=12:dd5d8187b0e11f4d shadow=12:dd5d8187b0e11f4d indirect=12:dd5d8187b0e11f4d +geom 325: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0596653 motion [] pieces all=12:a13d8d5031328858 camera=12:a13d8d5031328858 shadow=12:a13d8d5031328858 indirect=12:a13d8d5031328858 +geom 326: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.1097448 motion [] pieces all=12:df0336c5dc625715 camera=12:df0336c5dc625715 shadow=12:df0336c5dc625715 indirect=12:df0336c5dc625715 +geom 327: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.80082613 motion [] pieces all=12:7fdb2280b720b4e0 camera=12:7fdb2280b720b4e0 shadow=12:7fdb2280b720b4e0 indirect=12:7fdb2280b720b4e0 +geom 328: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.83511055 motion [] pieces all=12:8e6bbb989918f2d4 camera=12:8e6bbb989918f2d4 shadow=12:8e6bbb989918f2d4 indirect=12:8e6bbb989918f2d4 +geom 329: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.126959 motion [] pieces all=12:30f7453b0f345828 camera=12:30f7453b0f345828 shadow=12:30f7453b0f345828 indirect=12:30f7453b0f345828 +geom 330: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.92609227 motion [] pieces all=12:91f9f276b93f6466 camera=12:91f9f276b93f6466 shadow=12:91f9f276b93f6466 indirect=12:91f9f276b93f6466 +geom 331: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0945077 motion [] pieces all=12:d6b247f1e91ba686 camera=12:d6b247f1e91ba686 shadow=12:d6b247f1e91ba686 indirect=12:d6b247f1e91ba686 +geom 332: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0349877 motion [] pieces all=12:d5740e0bac5cd316 camera=12:d5740e0bac5cd316 shadow=12:d5740e0bac5cd316 indirect=12:d5740e0bac5cd316 +geom 333: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.9710804 motion [] pieces all=12:27d44de46e3dca54 camera=12:27d44de46e3dca54 shadow=12:27d44de46e3dca54 indirect=12:27d44de46e3dca54 +geom 334: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.8721167 motion [] pieces all=12:18228ff2b63f8c7d camera=12:18228ff2b63f8c7d shadow=12:18228ff2b63f8c7d indirect=12:18228ff2b63f8c7d +geom 335: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.1724524 motion [] pieces all=12:2ab0876e534f298f camera=12:2ab0876e534f298f shadow=12:2ab0876e534f298f indirect=12:2ab0876e534f298f +geom 336: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.8403497 motion [] pieces all=12:41a2c55a267ac5c4 camera=12:41a2c55a267ac5c4 shadow=12:41a2c55a267ac5c4 indirect=12:41a2c55a267ac5c4 +geom 337: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.1488395 motion [] pieces all=12:dfc161a8f6a92ea3 camera=12:dfc161a8f6a92ea3 shadow=12:dfc161a8f6a92ea3 indirect=12:dfc161a8f6a92ea3 +geom 338: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0872728 motion [] pieces all=12:4009af968809592a camera=12:4009af968809592a shadow=12:4009af968809592a indirect=12:4009af968809592a +geom 339: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.9498308 motion [] pieces all=12:d97514bcecdc5662 camera=12:d97514bcecdc5662 shadow=12:d97514bcecdc5662 indirect=12:d97514bcecdc5662 +geom 340: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.1501721 motion [] pieces all=12:d7c58849a10d0edf camera=12:d7c58849a10d0edf shadow=12:d7c58849a10d0edf indirect=12:d7c58849a10d0edf +geom 341: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.85824037 motion [] pieces all=12:aed050e32284fe6e camera=12:aed050e32284fe6e shadow=12:aed050e32284fe6e indirect=12:aed050e32284fe6e +geom 342: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.9529558 motion [] pieces all=12:ea1dbdb85f1f4d6d camera=12:ea1dbdb85f1f4d6d shadow=12:ea1dbdb85f1f4d6d indirect=12:ea1dbdb85f1f4d6d +geom 343: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0397669 motion [] pieces all=12:6babb56fe308d4cb camera=12:6babb56fe308d4cb shadow=12:6babb56fe308d4cb indirect=12:6babb56fe308d4cb +geom 344: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.1160651 motion [] pieces all=12:2957ca89e418c28f camera=12:2957ca89e418c28f shadow=12:2957ca89e418c28f indirect=12:2957ca89e418c28f +geom 345: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.8239306 motion [] pieces all=12:2e7f31d4fa464ed4 camera=12:2e7f31d4fa464ed4 shadow=12:2e7f31d4fa464ed4 indirect=12:2e7f31d4fa464ed4 +geom 346: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0655339 motion [] pieces all=12:b200843dc58e1388 camera=12:b200843dc58e1388 shadow=12:b200843dc58e1388 indirect=12:b200843dc58e1388 +geom 347: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.9071375 motion [] pieces all=12:249c549d82e9acea camera=12:249c549d82e9acea shadow=12:249c549d82e9acea indirect=12:249c549d82e9acea +geom 348: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0080239 motion [] pieces all=12:e170da844f0a982b camera=12:e170da844f0a982b shadow=12:e170da844f0a982b indirect=12:e170da844f0a982b +geom 349: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.97620225 motion [] pieces all=12:193709b6aa2f5d65 camera=12:193709b6aa2f5d65 shadow=12:193709b6aa2f5d65 indirect=12:193709b6aa2f5d65 +geom 350: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.89718294 motion [] pieces all=12:c4f52cbc70fa9dca camera=12:c4f52cbc70fa9dca shadow=12:c4f52cbc70fa9dca indirect=12:c4f52cbc70fa9dca +geom 351: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.191257 motion [] pieces all=12:9bcfc66882080152 camera=12:9bcfc66882080152 shadow=12:9bcfc66882080152 indirect=12:9bcfc66882080152 +geom 352: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.1368771 motion [] pieces all=12:17d409264b25aaa1 camera=12:17d409264b25aaa1 shadow=12:17d409264b25aaa1 indirect=12:17d409264b25aaa1 +geom 353: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.8263488 motion [] pieces all=12:c88cfa106e34b214 camera=12:c88cfa106e34b214 shadow=12:c88cfa106e34b214 indirect=12:c88cfa106e34b214 +geom 354: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.9322859 motion [] pieces all=12:72d56a4ceec9b227 camera=12:72d56a4ceec9b227 shadow=12:72d56a4ceec9b227 indirect=12:72d56a4ceec9b227 +geom 355: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0880939 motion [] pieces all=12:b195b52f8adf62a0 camera=12:b195b52f8adf62a0 shadow=12:b195b52f8adf62a0 indirect=12:b195b52f8adf62a0 +geom 356: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0262136 motion [] pieces all=12:45df4628c3eb5709 camera=12:45df4628c3eb5709 shadow=12:45df4628c3eb5709 indirect=12:45df4628c3eb5709 +geom 357: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.96307683 motion [] pieces all=12:345e61e8806a6778 camera=12:345e61e8806a6778 shadow=12:345e61e8806a6778 indirect=12:345e61e8806a6778 +geom 358: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.1681463 motion [] pieces all=12:86243dfecd6ed800 camera=12:86243dfecd6ed800 shadow=12:86243dfecd6ed800 indirect=12:86243dfecd6ed800 +geom 359: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.86502236 motion [] pieces all=12:343a16809805502c camera=12:343a16809805502c shadow=12:343a16809805502c indirect=12:343a16809805502c +geom 360: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.050149 motion [] pieces all=12:82646e4cfdf87acb camera=12:82646e4cfdf87acb shadow=12:82646e4cfdf87acb indirect=12:82646e4cfdf87acb +geom 361: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.9158084 motion [] pieces all=12:24aaf806f2e380e8 camera=12:24aaf806f2e380e8 shadow=12:24aaf806f2e380e8 indirect=12:24aaf806f2e380e8 +geom 362: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.8081211 motion [] pieces all=12:7cbe153faf6f8d7a camera=12:7cbe153faf6f8d7a shadow=12:7cbe153faf6f8d7a indirect=12:7cbe153faf6f8d7a +geom 363: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.1042663 motion [] pieces all=12:35a219666dea319c camera=12:35a219666dea319c shadow=12:35a219666dea319c indirect=12:35a219666dea319c +geom 364: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0155733 motion [] pieces all=12:e6d7079bdb47adab camera=12:e6d7079bdb47adab shadow=12:e6d7079bdb47adab indirect=12:e6d7079bdb47adab +geom 365: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.9908399 motion [] pieces all=12:e8c07fc49651ed38 camera=12:e8c07fc49651ed38 shadow=12:e8c07fc49651ed38 indirect=12:e8c07fc49651ed38 +geom 366: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.88250023 motion [] pieces all=12:f5e38f522feb37cb camera=12:f5e38f522feb37cb shadow=12:f5e38f522feb37cb indirect=12:f5e38f522feb37cb +geom 367: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.1847697 motion [] pieces all=12:fbc06fd87a8d291f camera=12:fbc06fd87a8d291f shadow=12:fbc06fd87a8d291f indirect=12:fbc06fd87a8d291f +geom 368: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.046034 motion [] pieces all=12:9f78122893426734 camera=12:9f78122893426734 shadow=12:9f78122893426734 indirect=12:9f78122893426734 +geom 369: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.96090317 motion [] pieces all=12:5694cc0009888a2a camera=12:5694cc0009888a2a shadow=12:5694cc0009888a2a indirect=12:5694cc0009888a2a +geom 370: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.85369337 motion [] pieces all=12:cc6149139636f173 camera=12:cc6149139636f173 shadow=12:cc6149139636f173 indirect=12:cc6149139636f173 +geom 371: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.1612246 motion [] pieces all=12:479fb480718c0a74 camera=12:479fb480718c0a74 shadow=12:479fb480718c0a74 indirect=12:479fb480718c0a74 +geom 372: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.1420475 motion [] pieces all=12:5011fcf9b2420f89 camera=12:5011fcf9b2420f89 shadow=12:5011fcf9b2420f89 indirect=12:5011fcf9b2420f89 +geom 373: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.8454647 motion [] pieces all=12:fe62212b32243903 camera=12:fe62212b32243903 shadow=12:fe62212b32243903 indirect=12:fe62212b32243903 +geom 374: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0787628 motion [] pieces all=12:c09b7779bc49b050 camera=12:c09b7779bc49b050 shadow=12:c09b7779bc49b050 indirect=12:c09b7779bc49b050 +geom 375: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.93800545 motion [] pieces all=12:29492bf11ee992b7 camera=12:29492bf11ee992b7 shadow=12:29492bf11ee992b7 indirect=12:29492bf11ee992b7 +geom 376: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0030414 motion [] pieces all=12:12425a2887a24940 camera=12:12425a2887a24940 shadow=12:12425a2887a24940 indirect=12:12425a2887a24940 +geom 377: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.983221 motion [] pieces all=12:c8dff14682474aff camera=12:c8dff14682474aff shadow=12:c8dff14682474aff indirect=12:c8dff14682474aff +geom 378: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.8891724 motion [] pieces all=12:1c2a82a18eb963f6 camera=12:1c2a82a18eb963f6 shadow=12:1c2a82a18eb963f6 indirect=12:1c2a82a18eb963f6 +geom 379: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.1983188 motion [] pieces all=12:0512533337d37dec camera=12:0512533337d37dec shadow=12:0512533337d37dec indirect=12:0512533337d37dec +geom 380: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0690044 motion [] pieces all=12:d7ddf5a4c50ddc75 camera=12:d7ddf5a4c50ddc75 shadow=12:d7ddf5a4c50ddc75 indirect=12:d7ddf5a4c50ddc75 +geom 381: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.9040715 motion [] pieces all=12:69a66701f2fff347 camera=12:69a66701f2fff347 shadow=12:69a66701f2fff347 indirect=12:69a66701f2fff347 +geom 382: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.8138704 motion [] pieces all=12:e569ce107be2c4d3 camera=12:e569ce107be2c4d3 shadow=12:e569ce107be2c4d3 indirect=12:e569ce107be2c4d3 +geom 383: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.1195462 motion [] pieces all=12:42484194db7c8a06 camera=12:42484194db7c8a06 shadow=12:42484194db7c8a06 indirect=12:42484194db7c8a06 +geom 384: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.9979357 motion [] pieces all=12:817b453870a3d419 camera=12:817b453870a3d419 shadow=12:817b453870a3d419 indirect=12:817b453870a3d419 +geom 385: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0240195 motion [] pieces all=12:2ced474f3777cf40 camera=12:2ced474f3777cf40 shadow=12:2ced474f3777cf40 indirect=12:2ced474f3777cf40 +geom 386: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.1780815 motion [] pieces all=12:9393967072a354e1 camera=12:9393967072a354e1 shadow=12:9393967072a354e1 indirect=12:9393967072a354e1 +geom 387: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.87838584 motion [] pieces all=12:027e2841751e5753 camera=12:027e2841751e5753 shadow=12:027e2841751e5753 indirect=12:027e2841751e5753 +geom 388: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.1091733 motion [] pieces all=12:2ed1840aa5cba15e camera=12:2ed1840aa5cba15e shadow=12:2ed1840aa5cba15e indirect=12:2ed1840aa5cba15e +geom 389: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.805113 motion [] pieces all=12:60447d059631efd4 camera=12:60447d059631efd4 shadow=12:60447d059631efd4 indirect=12:60447d059631efd4 +geom 390: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0589079 motion [] pieces all=12:e47acd5a96839e07 camera=12:e47acd5a96839e07 shadow=12:e47acd5a96839e07 indirect=12:e47acd5a96839e07 +geom 391: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.92295647 motion [] pieces all=12:7b43a30fb1dddcde camera=12:7b43a30fb1dddcde shadow=12:7b43a30fb1dddcde indirect=12:7b43a30fb1dddcde +geom 392: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.128148 motion [] pieces all=12:69a0ed79f1b361cf camera=12:69a0ed79f1b361cf shadow=12:69a0ed79f1b361cf indirect=12:69a0ed79f1b361cf +geom 393: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.83284235 motion [] pieces all=12:d0f91134dfad0a19 camera=12:d0f91134dfad0a19 shadow=12:d0f91134dfad0a19 indirect=12:d0f91134dfad0a19 +geom 394: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.92853355 motion [] pieces all=12:f81b7e7017cc610e camera=12:f81b7e7017cc610e shadow=12:f81b7e7017cc610e indirect=12:f81b7e7017cc610e +geom 395: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0970887 motion [] pieces all=12:78927457c90a0400 camera=12:78927457c90a0400 shadow=12:78927457c90a0400 indirect=12:78927457c90a0400 +geom 396: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0317997 motion [] pieces all=12:20b0fd0fc171807f camera=12:20b0fd0fc171807f shadow=12:20b0fd0fc171807f indirect=12:20b0fd0fc171807f +geom 397: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.97373277 motion [] pieces all=12:dcdf42631e7cd0a2 camera=12:dcdf42631e7cd0a2 shadow=12:dcdf42631e7cd0a2 indirect=12:dcdf42631e7cd0a2 +geom 398: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.1714392 motion [] pieces all=12:c472d0d4899eae67 camera=12:c472d0d4899eae67 shadow=12:c472d0d4899eae67 indirect=12:c472d0d4899eae67 +geom 399: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.8703055 motion [] pieces all=12:8267e610d01a5680 camera=12:8267e610d01a5680 shadow=12:8267e610d01a5680 indirect=12:8267e610d01a5680 +geom 400: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.1441025 motion [] pieces all=12:279b3e24a102bf1e camera=12:279b3e24a102bf1e shadow=12:279b3e24a102bf1e indirect=12:279b3e24a102bf1e +geom 401: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.84141374 motion [] pieces all=12:d17319b14aca9e2c camera=12:d17319b14aca9e2c shadow=12:d17319b14aca9e2c indirect=12:d17319b14aca9e2c +geom 402: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0838239 motion [] pieces all=12:96dd4c0357b42b14 camera=12:96dd4c0357b42b14 shadow=12:96dd4c0357b42b14 indirect=12:96dd4c0357b42b14 +geom 403: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.94532305 motion [] pieces all=12:f5fe4cb39a4686ce camera=12:f5fe4cb39a4686ce shadow=12:f5fe4cb39a4686ce indirect=12:f5fe4cb39a4686ce +geom 404: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.95378745 motion [] pieces all=12:8dd37214aa940697 camera=12:8dd37214aa940697 shadow=12:8dd37214aa940697 indirect=12:8dd37214aa940697 +geom 405: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0423332 motion [] pieces all=12:de1e755492a14152 camera=12:de1e755492a14152 shadow=12:de1e755492a14152 indirect=12:de1e755492a14152 +geom 406: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.1559403 motion [] pieces all=12:9249a94688f496e1 camera=12:9249a94688f496e1 shadow=12:9249a94688f496e1 indirect=12:9249a94688f496e1 +geom 407: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.8601882 motion [] pieces all=12:1283b0c1c55f493f camera=12:1283b0c1c55f493f shadow=12:1283b0c1c55f493f indirect=12:1283b0c1c55f493f +geom 408: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.1138958 motion [] pieces all=12:8c88dd3a0f244fe6 camera=12:8c88dd3a0f244fe6 shadow=12:8c88dd3a0f244fe6 indirect=12:8c88dd3a0f244fe6 +geom 409: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.8189872 motion [] pieces all=12:6fe3119800e2b724 camera=12:6fe3119800e2b724 shadow=12:6fe3119800e2b724 indirect=12:6fe3119800e2b724 +geom 410: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.90952617 motion [] pieces all=12:8c6a289ed18001c2 camera=12:8c6a289ed18001c2 shadow=12:8c6a289ed18001c2 indirect=12:8c6a289ed18001c2 +geom 411: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0676242 motion [] pieces all=12:48ef6b53ccf7f3ae camera=12:48ef6b53ccf7f3ae shadow=12:48ef6b53ccf7f3ae indirect=12:48ef6b53ccf7f3ae +geom 412: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.1898406 motion [] pieces all=12:b2408acca88da277 camera=12:b2408acca88da277 shadow=12:b2408acca88da277 indirect=12:b2408acca88da277 +geom 413: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.8942463 motion [] pieces all=12:6be4b9c1cca2d56a camera=12:6be4b9c1cca2d56a shadow=12:6be4b9c1cca2d56a indirect=12:6be4b9c1cca2d56a +geom 414: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.97924507 motion [] pieces all=12:225624b471d1e03b camera=12:225624b471d1e03b shadow=12:225624b471d1e03b indirect=12:225624b471d1e03b +geom 415: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0110332 motion [] pieces all=12:cca30bb094acd981 camera=12:cca30bb094acd981 shadow=12:cca30bb094acd981 indirect=12:cca30bb094acd981 +geom 416: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.81568116 motion [] pieces all=12:d0cafe097a17f591 camera=12:d0cafe097a17f591 shadow=12:d0cafe097a17f591 indirect=12:d0cafe097a17f591 +geom 417: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.1248193 motion [] pieces all=12:37a2bd30f2744dc6 camera=12:37a2bd30f2744dc6 shadow=12:37a2bd30f2744dc6 indirect=12:37a2bd30f2744dc6 +geom 418: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.9016662 motion [] pieces all=12:22706d0be71e9245 camera=12:22706d0be71e9245 shadow=12:22706d0be71e9245 indirect=12:22706d0be71e9245 +geom 419: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0732667 motion [] pieces all=12:40038908680d4401 camera=12:40038908680d4401 shadow=12:40038908680d4401 indirect=12:40038908680d4401 +geom 420: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0060534 motion [] pieces all=12:f41bc3293229b5c6 camera=12:f41bc3293229b5c6 shadow=12:f41bc3293229b5c6 indirect=12:f41bc3293229b5c6 +geom 421: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.98605454 motion [] pieces all=12:74201c06a60b7e79 camera=12:74201c06a60b7e79 shadow=12:74201c06a60b7e79 indirect=12:74201c06a60b7e79 +geom 422: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.8919946 motion [] pieces all=12:5f2730bf79a70fe6 camera=12:5f2730bf79a70fe6 shadow=12:5f2730bf79a70fe6 indirect=12:5f2730bf79a70fe6 +geom 423: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.19644 motion [] pieces all=12:3146e5e85b71495b camera=12:3146e5e85b71495b shadow=12:3146e5e85b71495b indirect=12:3146e5e85b71495b +geom 424: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.8503766 motion [] pieces all=12:08a48fe8aa435062 camera=12:08a48fe8aa435062 shadow=12:08a48fe8aa435062 indirect=12:08a48fe8aa435062 +geom 425: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.1588464 motion [] pieces all=12:42a78cff3d571444 camera=12:42a78cff3d571444 shadow=12:42a78cff3d571444 indirect=12:42a78cff3d571444 +geom 426: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.95724255 motion [] pieces all=12:a5085c33a6b177c9 camera=12:a5085c33a6b177c9 shadow=12:a5085c33a6b177c9 indirect=12:a5085c33a6b177c9 +geom 427: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0496792 motion [] pieces all=12:d237182b1562400a camera=12:d237182b1562400a shadow=12:d237182b1562400a indirect=12:d237182b1562400a +geom 428: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0764337 motion [] pieces all=12:1fc7edde3708a83c camera=12:1fc7edde3708a83c shadow=12:1fc7edde3708a83c indirect=12:1fc7edde3708a83c +geom 429: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.94295996 motion [] pieces all=12:49bee21585a46b48 camera=12:49bee21585a46b48 shadow=12:49bee21585a46b48 indirect=12:49bee21585a46b48 +geom 430: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.84723824 motion [] pieces all=12:f8f063c5827ba797 camera=12:f8f063c5827ba797 shadow=12:f8f063c5827ba797 indirect=12:f8f063c5827ba797 +geom 431: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.139218 motion [] pieces all=12:a397a5167452c818 camera=12:a397a5167452c818 shadow=12:a397a5167452c818 indirect=12:a397a5167452c818 +geom 432: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.8667562 motion [] pieces all=12:6dc7c0e793f4c492 camera=12:6dc7c0e793f4c492 shadow=12:6dc7c0e793f4c492 indirect=12:6dc7c0e793f4c492 +geom 433: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.1638904 motion [] pieces all=12:c005ed491d1abb17 camera=12:c005ed491d1abb17 shadow=12:c005ed491d1abb17 indirect=12:c005ed491d1abb17 +geom 434: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.96669084 motion [] pieces all=12:9a5425fe4964167c camera=12:9a5425fe4964167c shadow=12:9a5425fe4964167c indirect=12:9a5425fe4964167c +geom 435: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0310098 motion [] pieces all=12:422a73f3c3468e8a camera=12:422a73f3c3468e8a shadow=12:422a73f3c3468e8a indirect=12:422a73f3c3468e8a +geom 436: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.9359371 motion [] pieces all=12:c41f8c20a8cefe26 camera=12:c41f8c20a8cefe26 shadow=12:c41f8c20a8cefe26 indirect=12:c41f8c20a8cefe26 +geom 437: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0920191 motion [] pieces all=12:67da5a5117403cb0 camera=12:67da5a5117403cb0 shadow=12:67da5a5117403cb0 indirect=12:67da5a5117403cb0 +geom 438: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.1332088 motion [] pieces all=12:fc1749d615ff3503 camera=12:fc1749d615ff3503 shadow=12:fc1749d615ff3503 indirect=12:fc1749d615ff3503 +geom 439: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.82963383 motion [] pieces all=12:8923dc9c030f82cb camera=12:8923dc9c030f82cb shadow=12:8923dc9c030f82cb indirect=12:8923dc9c030f82cb +geom 440: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.989561 motion [] pieces all=12:53a4125ff63a0937 camera=12:53a4125ff63a0937 shadow=12:53a4125ff63a0937 indirect=12:53a4125ff63a0937 +geom 441: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0177096 motion [] pieces all=12:65f91049698d610a camera=12:65f91049698d610a shadow=12:65f91049698d610a indirect=12:65f91049698d610a +geom 442: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.1837815 motion [] pieces all=12:cdcb5a0d01d898da camera=12:cdcb5a0d01d898da shadow=12:cdcb5a0d01d898da indirect=12:cdcb5a0d01d898da +geom 443: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.88659936 motion [] pieces all=12:9499b7def0936290 camera=12:9499b7def0936290 shadow=12:9499b7def0936290 indirect=12:9499b7def0936290 +geom 444: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.91293037 motion [] pieces all=12:83e3abd6ac7f83a9 camera=12:83e3abd6ac7f83a9 shadow=12:83e3abd6ac7f83a9 indirect=12:83e3abd6ac7f83a9 +geom 445: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.053651 motion [] pieces all=12:b0a60d26f0688b94 camera=12:b0a60d26f0688b94 shadow=12:b0a60d26f0688b94 indirect=12:b0a60d26f0688b94 +geom 446: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.1022353 motion [] pieces all=12:a8aca66167227e3e camera=12:a8aca66167227e3e shadow=12:a8aca66167227e3e indirect=12:a8aca66167227e3e +geom 447: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.8098009 motion [] pieces all=12:d772aadd56b26362 camera=12:d772aadd56b26362 shadow=12:d772aadd56b26362 indirect=12:d772aadd56b26362 +geom 448: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.1986847 motion [] pieces all=12:c1d1ba87d4521c68 camera=12:c1d1ba87d4521c68 shadow=12:c1d1ba87d4521c68 indirect=12:c1d1ba87d4521c68 +geom 449: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.8879799 motion [] pieces all=12:1cb570eb6a8dbc6e camera=12:1cb570eb6a8dbc6e shadow=12:1cb570eb6a8dbc6e indirect=12:1cb570eb6a8dbc6e +geom 450: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.98173344 motion [] pieces all=12:7eee75fae3c2c38e camera=12:7eee75fae3c2c38e shadow=12:7eee75fae3c2c38e indirect=12:7eee75fae3c2c38e +geom 451: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0000744 motion [] pieces all=12:ded11bb563f60b18 camera=12:ded11bb563f60b18 shadow=12:ded11bb563f60b18 indirect=12:ded11bb563f60b18 +geom 452: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.1216958 motion [] pieces all=12:7d0ffec4d58dda61 camera=12:7d0ffec4d58dda61 shadow=12:7d0ffec4d58dda61 indirect=12:7d0ffec4d58dda61 +geom 453: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.81506497 motion [] pieces all=12:11b648c7989f69d4 camera=12:11b648c7989f69d4 shadow=12:11b648c7989f69d4 indirect=12:11b648c7989f69d4 +geom 454: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.9058803 motion [] pieces all=12:9cd46ed2bbcbe3f3 camera=12:9cd46ed2bbcbe3f3 shadow=12:9cd46ed2bbcbe3f3 indirect=12:9cd46ed2bbcbe3f3 +geom 455: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0716925 motion [] pieces all=12:e1619e0d048155ae camera=12:e1619e0d048155ae shadow=12:e1619e0d048155ae indirect=12:e1619e0d048155ae +geom 456: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.85529506 motion [] pieces all=12:02ba68249605a870 camera=12:02ba68249605a870 shadow=12:02ba68249605a870 indirect=12:02ba68249605a870 +geom 457: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.1597875 motion [] pieces all=12:a894986db251ee0f camera=12:a894986db251ee0f shadow=12:a894986db251ee0f indirect=12:a894986db251ee0f +geom 458: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0444325 motion [] pieces all=12:4a2250159785a6e2 camera=12:4a2250159785a6e2 shadow=12:4a2250159785a6e2 indirect=12:4a2250159785a6e2 +geom 459: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.9616838 motion [] pieces all=12:d1ec13b3e62f6e92 camera=12:d1ec13b3e62f6e92 shadow=12:d1ec13b3e62f6e92 indirect=12:d1ec13b3e62f6e92 +geom 460: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.93935156 motion [] pieces all=12:04ea79f01e5f9a59 camera=12:04ea79f01e5f9a59 shadow=12:04ea79f01e5f9a59 indirect=12:04ea79f01e5f9a59 +geom 461: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0803297 motion [] pieces all=12:bf10521f4ec2bbb3 camera=12:bf10521f4ec2bbb3 shadow=12:bf10521f4ec2bbb3 indirect=12:bf10521f4ec2bbb3 +geom 462: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.8450973 motion [] pieces all=12:2a5cfdaaddca44c2 camera=12:2a5cfdaaddca44c2 shadow=12:2a5cfdaaddca44c2 indirect=12:2a5cfdaaddca44c2 +geom 463: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.1432472 motion [] pieces all=12:fbc5ba1ad600edaa camera=12:fbc5ba1ad600edaa shadow=12:fbc5ba1ad600edaa indirect=12:fbc5ba1ad600edaa +geom 464: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.1353691 motion [] pieces all=12:049353c120cbebfc camera=12:049353c120cbebfc shadow=12:049353c120cbebfc indirect=12:049353c120cbebfc +geom 465: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.8273636 motion [] pieces all=12:3c3011131e7e8813 camera=12:3c3011131e7e8813 shadow=12:3c3011131e7e8813 indirect=12:3c3011131e7e8813 +geom 466: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0902855 motion [] pieces all=12:772930a049a7379c camera=12:772930a049a7379c shadow=12:772930a049a7379c indirect=12:772930a049a7379c +geom 467: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.93297297 motion [] pieces all=12:25b9c445d211692a camera=12:25b9c445d211692a shadow=12:25b9c445d211692a indirect=12:25b9c445d211692a +geom 468: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.027414 motion [] pieces all=12:740d229d84e9cff7 camera=12:740d229d84e9cff7 shadow=12:740d229d84e9cff7 indirect=12:740d229d84e9cff7 +geom 469: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.96549386 motion [] pieces all=12:0aaa0db013610e8a camera=12:0aaa0db013610e8a shadow=12:0aaa0db013610e8a indirect=12:0aaa0db013610e8a +geom 470: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.8634908 motion [] pieces all=12:2fbc17d887102e0e camera=12:2fbc17d887102e0e shadow=12:2fbc17d887102e0e indirect=12:2fbc17d887102e0e +geom 471: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.165813 motion [] pieces all=12:016baf1b7130dcdc camera=12:016baf1b7130dcdc shadow=12:016baf1b7130dcdc indirect=12:016baf1b7130dcdc +geom 472: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.9932002 motion [] pieces all=12:614b99fb4286ac07 camera=12:614b99fb4286ac07 shadow=12:614b99fb4286ac07 indirect=12:614b99fb4286ac07 +geom 473: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0138267 motion [] pieces all=12:7f75b45364112aba camera=12:7f75b45364112aba shadow=12:7f75b45364112aba indirect=12:7f75b45364112aba +geom 474: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.8838996 motion [] pieces all=12:188942be9177a3f5 camera=12:188942be9177a3f5 shadow=12:188942be9177a3f5 indirect=12:188942be9177a3f5 +geom 475: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.1870891 motion [] pieces all=12:7546e17f458e7da2 camera=12:7546e17f458e7da2 shadow=12:7546e17f458e7da2 indirect=12:7546e17f458e7da2 +geom 476: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.1059833 motion [] pieces all=12:26de3a63ac32d9c0 camera=12:26de3a63ac32d9c0 shadow=12:26de3a63ac32d9c0 indirect=12:26de3a63ac32d9c0 +geom 477: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.8076202 motion [] pieces all=12:e1c21f8a4b9a925f camera=12:e1c21f8a4b9a925f shadow=12:e1c21f8a4b9a925f indirect=12:e1c21f8a4b9a925f +geom 478: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.917528 motion [] pieces all=12:7e89e6fe71b7d5e1 camera=12:7e89e6fe71b7d5e1 shadow=12:7e89e6fe71b7d5e1 indirect=12:7e89e6fe71b7d5e1 +geom 479: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0525516 motion [] pieces all=12:2e4367fb76a93572 camera=12:2e4367fb76a93572 shadow=12:2e4367fb76a93572 indirect=12:2e4367fb76a93572 +geom 480: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.1471847 motion [] pieces all=12:487ee130369a3f18 camera=12:487ee130369a3f18 shadow=12:487ee130369a3f18 indirect=12:487ee130369a3f18 +geom 481: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.8377189 motion [] pieces all=12:81f60f5e764c9e94 camera=12:81f60f5e764c9e94 shadow=12:81f60f5e764c9e94 indirect=12:81f60f5e764c9e94 +geom 482: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.9474101 motion [] pieces all=12:26736fb3efaf0e8b camera=12:26736fb3efaf0e8b shadow=12:26736fb3efaf0e8b indirect=12:26736fb3efaf0e8b +geom 483: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.085121 motion [] pieces all=12:9661338d340c04ba camera=12:9661338d340c04ba shadow=12:9661338d340c04ba indirect=12:9661338d340c04ba +geom 484: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.856993 motion [] pieces all=12:dbdb91d39e8aae83 camera=12:dbdb91d39e8aae83 shadow=12:dbdb91d39e8aae83 indirect=12:dbdb91d39e8aae83 +geom 485: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.1528894 motion [] pieces all=12:77eb4b680ce04830 camera=12:77eb4b680ce04830 shadow=12:77eb4b680ce04830 indirect=12:77eb4b680ce04830 +geom 486: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.038916 motion [] pieces all=12:81a43a78bc1e73fd camera=12:81a43a78bc1e73fd shadow=12:81a43a78bc1e73fd indirect=12:81a43a78bc1e73fd +geom 487: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.9504711 motion [] pieces all=12:5ff064de78509a0a camera=12:5ff064de78509a0a shadow=12:5ff064de78509a0a indirect=12:5ff064de78509a0a +geom 488: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0637788 motion [] pieces all=12:559a1655469b6861 camera=12:559a1655469b6861 shadow=12:559a1655469b6861 indirect=12:559a1655469b6861 +geom 489: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.90910155 motion [] pieces all=12:44a0535ec759978f camera=12:44a0535ec759978f shadow=12:44a0535ec759978f indirect=12:44a0535ec759978f +geom 490: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.1182432 motion [] pieces all=12:8b8f0bbb4571f9ae camera=12:8b8f0bbb4571f9ae shadow=12:8b8f0bbb4571f9ae indirect=12:8b8f0bbb4571f9ae +geom 491: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.82327044 motion [] pieces all=12:044596a57f782592 camera=12:044596a57f782592 shadow=12:044596a57f782592 indirect=12:044596a57f782592 +geom 492: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.193281 motion [] pieces all=12:583665b31fb2f901 camera=12:583665b31fb2f901 shadow=12:583665b31fb2f901 indirect=12:583665b31fb2f901 +geom 493: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.8985092 motion [] pieces all=12:16ee9626140776f4 camera=12:16ee9626140776f4 shadow=12:16ee9626140776f4 indirect=12:16ee9626140776f4 +geom 494: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.9765626 motion [] pieces all=12:9ac81ebc0d4f4c1d camera=12:9ac81ebc0d4f4c1d shadow=12:9ac81ebc0d4f4c1d indirect=12:9ac81ebc0d4f4c1d +geom 495: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0068495 motion [] pieces all=12:b55004e8fe41a807 camera=12:b55004e8fe41a807 shadow=12:b55004e8fe41a807 indirect=12:b55004e8fe41a807 +geom 496: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.1257349 motion [] pieces all=12:794d02ae4d0bbc6b camera=12:794d02ae4d0bbc6b shadow=12:794d02ae4d0bbc6b indirect=12:794d02ae4d0bbc6b +geom 497: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.8368855 motion [] pieces all=12:978c75be788afc67 camera=12:978c75be788afc67 shadow=12:978c75be788afc67 indirect=12:978c75be788afc67 +geom 498: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.92759454 motion [] pieces all=12:8c8da1e4983b11c8 camera=12:8c8da1e4983b11c8 shadow=12:8c8da1e4983b11c8 indirect=12:8c8da1e4983b11c8 +geom 499: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0956422 motion [] pieces all=12:ac83c9c903ea15c9 camera=12:ac83c9c903ea15c9 shadow=12:ac83c9c903ea15c9 indirect=12:ac83c9c903ea15c9 +geom 500: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=12:d69dc8407e39c57d camera=12:d69dc8407e39c57d shadow=12:d69dc8407e39c57d indirect=12:d69dc8407e39c57d +geom 501: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=12:108ece7556e2045d camera=12:108ece7556e2045d shadow=12:108ece7556e2045d indirect=12:108ece7556e2045d +geom 502: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=12:b6f2f6b932607ce5 camera=12:b6f2f6b932607ce5 shadow=12:b6f2f6b932607ce5 indirect=12:b6f2f6b932607ce5 +geom 503: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=12:18f7f442a8f08005 camera=12:18f7f442a8f08005 shadow=12:18f7f442a8f08005 indirect=12:18f7f442a8f08005 +geom 504: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=12:95835634df888e55 camera=12:95835634df888e55 shadow=12:95835634df888e55 indirect=12:95835634df888e55 +geom 505: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=12:26e126fb8d08607d camera=12:26e126fb8d08607d shadow=12:26e126fb8d08607d indirect=12:26e126fb8d08607d +geom 506: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=4:d3ae5d8c61eeefd5 camera=4:d3ae5d8c61eeefd5 shadow=4:d3ae5d8c61eeefd5 indirect=4:d3ae5d8c61eeefd5 +geom 507: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:02dee92ba923d022 camera=2:02dee92ba923d022 shadow=2:02dee92ba923d022 indirect=2:02dee92ba923d022 +geom 508: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:d420bef838b31092 camera=2:d420bef838b31092 shadow=2:d420bef838b31092 indirect=2:d420bef838b31092 +geom 509: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=128:7e7f92bf6cf1e8e1 camera=128:7e7f92bf6cf1e8e1 shadow=128:7e7f92bf6cf1e8e1 indirect=128:7e7f92bf6cf1e8e1 +geom 510: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:5fd3af8a8974e005 camera=2:5fd3af8a8974e005 shadow=2:5fd3af8a8974e005 indirect=2:5fd3af8a8974e005 +geom 511: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:9626b0f2f3e041c5 camera=2:9626b0f2f3e041c5 shadow=2:9626b0f2f3e041c5 indirect=2:9626b0f2f3e041c5 +geom 512: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=12:65eff1dac76e16e5 camera=12:65eff1dac76e16e5 shadow=12:65eff1dac76e16e5 indirect=12:65eff1dac76e16e5 +geom 513: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=12:c5bbf2f135b5e22b camera=12:c5bbf2f135b5e22b shadow=12:c5bbf2f135b5e22b indirect=12:c5bbf2f135b5e22b +geom 514: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:77f8032df1a5e1f5 camera=2:77f8032df1a5e1f5 shadow=2:77f8032df1a5e1f5 indirect=2:77f8032df1a5e1f5 +provenance arc source: /Crate +provenance arc source: /Crate/geo +provenance arc source: /World/stones/Prototypes/stone_a +provenance arc source: /World/stones/Prototypes/stone_b +provenance arc source: /_Cube +provenance light /World/Sky: LightOrigin { index: 0, geoms: 514..514 } +provenance geometry 0..500: /World/stones +provenance geometry 500..501: /World/pebble/geo +provenance geometry 501..502: /World/away/geo +provenance geometry 502..503: /World/box/geo +provenance geometry 503..504: /World/sunk/geo +provenance geometry 504..505: /World/rock/geo +provenance geometry 505..506: /World/vase/geo +provenance geometry 506..507: /World/steps/geo +provenance geometry 507..508: /World/field/geo +provenance geometry 508..509: /World/slope/geo +provenance geometry 509..510: /World/terrain/geo +provenance geometry 510..511: /World/shelf/geo +provenance geometry 511..512: /World/floor/geo +provenance geometry 512..513: /World/inst +provenance geometry 513..514: /World/crate/geo +provenance geometry 514..515: /World/table/geo +provenance mesh: MeshOrigin { geom_id: 500, slot: 2, baked: false, moving: false } +provenance mesh: MeshOrigin { geom_id: 501, slot: 2, baked: false, moving: false } +provenance mesh: MeshOrigin { geom_id: 502, slot: 2, baked: false, moving: false } +provenance mesh: MeshOrigin { geom_id: 503, slot: 2, baked: false, moving: false } +provenance mesh: MeshOrigin { geom_id: 504, slot: 3, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 505, slot: 4, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 506, slot: 5, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 507, slot: 6, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 508, slot: 7, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 509, slot: 8, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 510, slot: 9, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 511, slot: 10, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 513, slot: 2, baked: false, moving: false } +provenance mesh: MeshOrigin { geom_id: 514, slot: 11, baked: true, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 4345222167175548266, n_points: 8, n_indices: 24, n_uvs: None, smooth: true, material: 0 }), placements: 0, shared: true, displaced: false } +provenance mesh slot 1: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 735706973108043347, n_points: 8, n_indices: 24, n_uvs: None, smooth: true, material: 0 }), placements: 0, shared: true, displaced: false } +provenance mesh slot 2: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 2634041098053373584, n_points: 8, n_indices: 24, n_uvs: None, smooth: true, material: 0 }), placements: 5, shared: true, displaced: false } +provenance mesh slot 3: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 14470132405950877311, n_points: 8, n_indices: 24, n_uvs: None, smooth: true, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 4: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 1206830347127950734, n_points: 8, n_indices: 24, n_uvs: None, smooth: true, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 5: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 9519870911682368984, n_points: 6, n_indices: 8, n_uvs: None, smooth: true, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 6: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 1341889141698287293, n_points: 4, n_indices: 4, n_uvs: None, smooth: true, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 7: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 1313731086437247865, n_points: 4, n_indices: 4, n_uvs: None, smooth: true, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 8: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 15760070156626746114, n_points: 81, n_indices: 256, n_uvs: None, smooth: true, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 9: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 1050066994217133652, n_points: 4, n_indices: 4, n_uvs: None, smooth: true, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 10: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 14002714535549629103, n_points: 4, n_indices: 4, n_uvs: None, smooth: true, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 11: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 14095911038168715313, n_points: 4, n_indices: 4, n_uvs: None, smooth: true, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: true }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/World/Cam"), cameras: ["/World/Cam"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/World/Cam"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/full_scatter_usda-80ff37fcf1ff9f3c-1.image b/crates/crust-core/tests/data/import_baselines/full_scatter_usda-80ff37fcf1ff9f3c-1.image new file mode 100644 index 000000000..d6302dd1b --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/full_scatter_usda-80ff37fcf1ff9f3c-1.image @@ -0,0 +1 @@ +48x32 16spp clamp-off 74128e666e058a48 diff --git a/crates/crust-core/tests/data/import_baselines/full_shared_shader_usda-bcebf475c7d9ca1f-1.digest b/crates/crust-core/tests/data/import_baselines/full_shared_shader_usda-bcebf475c7d9ca1f-1.digest new file mode 100644 index 000000000..4a9729ea6 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/full_shared_shader_usda-bcebf475c7d9ca1f-1.digest @@ -0,0 +1,41 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/World/Cam") +camera: Camera { origin: Vec3A(0.0, 1.0, 6.0), lower_left_corner: Vec3A(-4.7783756, -2.1855836, -4.0), horizontal: Vec3A(9.556751, 0.0, 0.0), vertical: Vec3A(0.0, 6.371167, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: Some("/Render/settings") +settings: RenderSettings { samples_per_pixel: 128, max_depth: 4, width: 48, height: 32, region: PixelRect { x0: 0, y0: 0, x1: 48, y1: 32 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 24.0, aperture: [20.955, 15.2908], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 10.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/full_shared_shader.usda", "$DIR/stage.usda"], invisible_overrides: Some(0) } +layer: $DIR/full_shared_shader.usda +layer: $DIR/stage.usda +lights: 2 +light 0: area name Some("/World/Key") lpe None pmf 0.5 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 1: dome name Some("/World/Sky") lpe None pmf 0.5 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 5 geometries, PrimitiveBreakdown { triangles: 4, spheres: 3, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 4, spheres: 3, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +geom 0: material #0 Signature { kind: "MaterialX", cutout: false, straight: false, boundary: false, emits: false, uv: true, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:ba01d90e2cc0d4f5 camera=1:ba01d90e2cc0d4f5 shadow=1:ba01d90e2cc0d4f5 indirect=1:ba01d90e2cc0d4f5 +geom 1: material #1 Signature { kind: "MaterialX", cutout: false, straight: false, boundary: false, emits: false, uv: true, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:910eeb9b40238145 camera=1:910eeb9b40238145 shadow=1:910eeb9b40238145 indirect=1:910eeb9b40238145 +geom 2: material #2 Signature { kind: "MaterialX", cutout: false, straight: false, boundary: false, emits: false, uv: true, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:ee76fd7ed45c4a85 camera=1:ee76fd7ed45c4a85 shadow=1:ee76fd7ed45c4a85 indirect=1:ee76fd7ed45c4a85 +geom 3: material #3 Signature { kind: "UsdPreviewSurface (textured)", cutout: false, straight: false, boundary: false, emits: false, uv: true, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv Some(0) shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:6787da8eacebee45 camera=2:6787da8eacebee45 shadow=2:6787da8eacebee45 indirect=2:6787da8eacebee45 +geom 4: material #4 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:7812e24c7b4d4335 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=2:7812e24c7b4d4335 +provenance material /World/Looks/Base: MaterialOrigin { slots: [1], displaced: false } +provenance material /World/Looks/Derived: MaterialOrigin { slots: [0], displaced: false } +provenance material /World/Looks/Std: MaterialOrigin { slots: [2], displaced: false } +provenance material /World/Looks/Tex: MaterialOrigin { slots: [3], displaced: false } +provenance material read: ("/World/Looks/Base", "/World/Looks/Derived") +provenance material read: ("/World/Looks/Base/Surface", "/World/Looks/Derived") +provenance arc source: /World/Looks/Base +provenance arc source: /World/Looks/Base/Surface +provenance light /World/Key: LightOrigin { index: 0, geoms: 4..5 } +provenance light /World/Sky: LightOrigin { index: 1, geoms: 5..5 } +provenance geometry 0..1: /World/Right +provenance geometry 1..2: /World/Left +provenance geometry 2..3: /World/Ball +provenance geometry 3..4: /World/Floor +provenance geometry 4..5: /World/Key +provenance mesh: MeshOrigin { geom_id: 3, slot: 0, baked: true, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 9851181043634021438, n_points: 4, n_indices: 4, n_uvs: Some(4), smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [0, 1, 2] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: true }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/World/Cam"), cameras: ["/World/Cam"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/World/Cam"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/full_shared_shader_usda-bcebf475c7d9ca1f-1.image b/crates/crust-core/tests/data/import_baselines/full_shared_shader_usda-bcebf475c7d9ca1f-1.image new file mode 100644 index 000000000..4b9a46633 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/full_shared_shader_usda-bcebf475c7d9ca1f-1.image @@ -0,0 +1 @@ +48x32 16spp clamp-off 878a44fd0e7d2b84 diff --git a/crates/crust-core/tests/data/import_baselines/full_sharp_at_the_frame_usda-06436b4d06eb2f5f-1.digest b/crates/crust-core/tests/data/import_baselines/full_sharp_at_the_frame_usda-06436b4d06eb2f5f-1.digest new file mode 100644 index 000000000..9d6fb13ae --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/full_sharp_at_the_frame_usda-06436b4d06eb2f5f-1.digest @@ -0,0 +1,22 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/World/Cam") +camera: Camera { origin: Vec3A(0.0, 0.0, 6.0), lower_left_corner: Vec3A(-4.7783756, -3.1855836, -4.0), horizontal: Vec3A(9.556751, 0.0, 0.0), vertical: Vec3A(0.0, 6.371167, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: Some("/Render/settings") +settings: RenderSettings { samples_per_pixel: 128, max_depth: 2, width: 48, height: 32, region: PixelRect { x0: 0, y0: 0, x1: 48, y1: 32 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: false, depth_of_field: true, exposure_scale: 2.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 24.0, aperture: [20.955, 15.2908], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 10.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/full_sharp_at_the_frame.usda", "$DIR/input.usda"], invisible_overrides: Some(0) } +layer: $DIR/full_sharp_at_the_frame.usda +layer: $DIR/input.usda +warning: Warning { code: TimeMotionNeedsFrame, kind: Skipped, count: 1, prims: ["/World/Mover"], message: "/World/Cam opens its shutter (-0.25 .. 0.25), but no frame was given: 1 drawn prim's time-sampled transforms are not evaluated over it and render sharp (the first at /World/Mover). Render a frame with -f" } +lights: 1 +light 0: distant name Some("/World/Sun") lpe None pmf 1.0 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 1 geometries, PrimitiveBreakdown { triangles: 0, spheres: 1, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 0, spheres: 1, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:984632b55acb5495 camera=1:984632b55acb5495 shadow=1:984632b55acb5495 indirect=1:984632b55acb5495 +provenance light /World/Sun: LightOrigin { index: 0, geoms: 1..1 } +provenance geometry 0..1: /World/Mover +provenance spheres: [0] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: true }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/World/Cam"), cameras: ["/World/Cam"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/World/Cam"), offsets: [13821547256400052224, 4598175219545276416], interval: None, query: true, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/full_sharp_at_the_frame_usda-06436b4d06eb2f5f-1.image b/crates/crust-core/tests/data/import_baselines/full_sharp_at_the_frame_usda-06436b4d06eb2f5f-1.image new file mode 100644 index 000000000..79bc428f3 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/full_sharp_at_the_frame_usda-06436b4d06eb2f5f-1.image @@ -0,0 +1 @@ +48x32 16spp clamp-off 0956f9aa6aa6e7f9 diff --git a/crates/crust-core/tests/data/import_baselines/full_shutter_close_usda-ce0b12427cfd435b-1.digest b/crates/crust-core/tests/data/import_baselines/full_shutter_close_usda-ce0b12427cfd435b-1.digest new file mode 100644 index 000000000..89db1d644 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/full_shutter_close_usda-ce0b12427cfd435b-1.digest @@ -0,0 +1,22 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/World/Cam") +camera: Camera { origin: Vec3A(0.0, 0.0, 6.0), lower_left_corner: Vec3A(-4.7783756, -3.1855836, -4.0), horizontal: Vec3A(9.556751, 0.0, 0.0), vertical: Vec3A(0.0, 6.371167, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: Some("/Render/settings") +settings: RenderSettings { samples_per_pixel: 128, max_depth: 2, width: 48, height: 32, region: PixelRect { x0: 0, y0: 0, x1: 48, y1: 32 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 2.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 24.0, aperture: [20.955, 15.2908], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 10.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/full_shutter_close.usda", "$DIR/input.usda"], invisible_overrides: Some(0) } +layer: $DIR/full_shutter_close.usda +layer: $DIR/input.usda +warning: Warning { code: TimeMotionNeedsFrame, kind: Skipped, count: 1, prims: ["/World/Mover"], message: "/World/Cam opens its shutter (0 .. 0.5), but no frame was given: 1 drawn prim's time-sampled transforms are not evaluated over it and render sharp (the first at /World/Mover). Render a frame with -f" } +lights: 1 +light 0: distant name Some("/World/Sun") lpe None pmf 1.0 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 1 geometries, PrimitiveBreakdown { triangles: 0, spheres: 1, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 0, spheres: 1, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:984632b55acb5495 camera=1:984632b55acb5495 shadow=1:984632b55acb5495 indirect=1:984632b55acb5495 +provenance light /World/Sun: LightOrigin { index: 0, geoms: 1..1 } +provenance geometry 0..1: /World/Mover +provenance spheres: [0] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: true }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/World/Cam"), cameras: ["/World/Cam"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/World/Cam"), offsets: [0, 4602678819172646912], interval: None, query: true, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/full_shutter_close_usda-ce0b12427cfd435b-1.image b/crates/crust-core/tests/data/import_baselines/full_shutter_close_usda-ce0b12427cfd435b-1.image new file mode 100644 index 000000000..79bc428f3 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/full_shutter_close_usda-ce0b12427cfd435b-1.image @@ -0,0 +1 @@ +48x32 16spp clamp-off 0956f9aa6aa6e7f9 diff --git a/crates/crust-core/tests/data/import_baselines/full_shutter_exposure_usda-36da172692d8936a-1.digest b/crates/crust-core/tests/data/import_baselines/full_shutter_exposure_usda-36da172692d8936a-1.digest new file mode 100644 index 000000000..89209d169 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/full_shutter_exposure_usda-36da172692d8936a-1.digest @@ -0,0 +1,21 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/World/Cam") +camera: Camera { origin: Vec3A(0.0, 0.0, 6.0), lower_left_corner: Vec3A(-4.7783756, -3.1855836, -4.0), horizontal: Vec3A(9.556751, 0.0, 0.0), vertical: Vec3A(0.0, 6.371167, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: Some("/Render/settings") +settings: RenderSettings { samples_per_pixel: 128, max_depth: 2, width: 48, height: 32, region: PixelRect { x0: 0, y0: 0, x1: 48, y1: 32 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 2.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 24.0, aperture: [20.955, 15.2908], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 10.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/full_shutter_exposure.usda", "$DIR/input.usda"], invisible_overrides: Some(0) } +layer: $DIR/full_shutter_exposure.usda +layer: $DIR/input.usda +lights: 1 +light 0: distant name Some("/World/Sun") lpe None pmf 1.0 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 1 geometries, PrimitiveBreakdown { triangles: 0, spheres: 1, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 0, spheres: 1, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:984632b55acb5495 camera=1:984632b55acb5495 shadow=1:984632b55acb5495 indirect=1:984632b55acb5495 +provenance light /World/Sun: LightOrigin { index: 0, geoms: 1..1 } +provenance geometry 0..1: /World/Mover +provenance spheres: [0] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: true }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/World/Cam"), cameras: ["/World/Cam"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/World/Cam"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/full_shutter_exposure_usda-36da172692d8936a-1.image b/crates/crust-core/tests/data/import_baselines/full_shutter_exposure_usda-36da172692d8936a-1.image new file mode 100644 index 000000000..79bc428f3 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/full_shutter_exposure_usda-36da172692d8936a-1.image @@ -0,0 +1 @@ +48x32 16spp clamp-off 0956f9aa6aa6e7f9 diff --git a/crates/crust-core/tests/data/import_baselines/full_sublayer_rewritten_usda-2e79c887f2d55e88-1.digest b/crates/crust-core/tests/data/import_baselines/full_sublayer_rewritten_usda-2e79c887f2d55e88-1.digest new file mode 100644 index 000000000..e2f5461aa --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/full_sublayer_rewritten_usda-2e79c887f2d55e88-1.digest @@ -0,0 +1,35 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/World/Cam") +camera: Camera { origin: Vec3A(0.0, 1.0, 6.0), lower_left_corner: Vec3A(-4.7783756, -2.1855836, -4.0), horizontal: Vec3A(9.556751, 0.0, 0.0), vertical: Vec3A(0.0, 6.371167, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: Some("/Render/settings") +settings: RenderSettings { samples_per_pixel: 128, max_depth: 4, width: 48, height: 32, region: PixelRect { x0: 0, y0: 0, x1: 48, y1: 32 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 24.0, aperture: [20.955, 15.2908], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 10.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/full_sublayer_rewritten.usda", "$DIR/shot.usda", "$DIR/lights.usda"], invisible_overrides: Some(0) } +layer: $DIR/full_sublayer_rewritten.usda +layer: $DIR/lights.usda +layer: $DIR/pay.usda +layer: $DIR/prop.usda +layer: $DIR/shot.usda +lights: 2 +light 0: dome name Some("/World/Sky") lpe None pmf 0.5 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 1: area name Some("/World/Key") lpe None pmf 0.5 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 3 geometries, PrimitiveBreakdown { triangles: 2, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 2 } top level, PrimitiveBreakdown { triangles: 4, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 2 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:6f550ecd4f901d05 camera=2:6f550ecd4f901d05 shadow=2:6f550ecd4f901d05 indirect=2:6f550ecd4f901d05 +geom 1: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:6f550ecd4f901d05 camera=2:6f550ecd4f901d05 shadow=2:6f550ecd4f901d05 indirect=2:6f550ecd4f901d05 +geom 2: material #1 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:7812e24c7b4d4335 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=2:7812e24c7b4d4335 +provenance arc source: /Pay +provenance arc source: /Prop +provenance light /World/Key: LightOrigin { index: 1, geoms: 2..3 } +provenance light /World/Sky: LightOrigin { index: 0, geoms: 2..2 } +provenance geometry 0..1: /World/Heavy +provenance geometry 1..2: /World/Prop +provenance geometry 2..3: /World/Key +provenance mesh: MeshOrigin { geom_id: 0, slot: 0, baked: false, moving: false } +provenance mesh: MeshOrigin { geom_id: 1, slot: 0, baked: false, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 6610719295604273699, n_points: 4, n_indices: 4, n_uvs: None, smooth: true, material: 0 }), placements: 2, shared: false, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: true }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/World/Cam"), cameras: ["/World/Cam"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/World/Cam"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/full_sublayer_rewritten_usda-2e79c887f2d55e88-1.image b/crates/crust-core/tests/data/import_baselines/full_sublayer_rewritten_usda-2e79c887f2d55e88-1.image new file mode 100644 index 000000000..e14303a7e --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/full_sublayer_rewritten_usda-2e79c887f2d55e88-1.image @@ -0,0 +1 @@ +48x32 16spp clamp-off 55db275bd8392d23 diff --git a/crates/crust-core/tests/data/import_baselines/full_texture_file_usda-1fd2cfaf6e5de06c-1.digest b/crates/crust-core/tests/data/import_baselines/full_texture_file_usda-1fd2cfaf6e5de06c-1.digest new file mode 100644 index 000000000..caabce948 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/full_texture_file_usda-1fd2cfaf6e5de06c-1.digest @@ -0,0 +1,41 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/World/Cam") +camera: Camera { origin: Vec3A(0.0, 1.0, 6.0), lower_left_corner: Vec3A(-4.7783756, -2.1855836, -4.0), horizontal: Vec3A(9.556751, 0.0, 0.0), vertical: Vec3A(0.0, 6.371167, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: Some("/Render/settings") +settings: RenderSettings { samples_per_pixel: 128, max_depth: 2, width: 48, height: 32, region: PixelRect { x0: 0, y0: 0, x1: 48, y1: 32 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: PmjBn, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 2.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 24.0, aperture: [20.955, 15.2908], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 10.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/full_texture_file.usda", "$DIR/stage.usda"], invisible_overrides: Some(0) } +layer: $DIR/full_texture_file.usda +layer: $DIR/stage.usda +lights: 2 +light 0: area name Some("/World/Key") lpe None pmf 0.5 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 1: dome name Some("/World/Sky") lpe None pmf 0.5 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 5 geometries, PrimitiveBreakdown { triangles: 4, spheres: 3, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 4, spheres: 3, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +geom 0: material #0 Signature { kind: "MaterialX", cutout: false, straight: false, boundary: false, emits: false, uv: true, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:ba01d90e2cc0d4f5 camera=1:ba01d90e2cc0d4f5 shadow=1:ba01d90e2cc0d4f5 indirect=1:ba01d90e2cc0d4f5 +geom 1: material #1 Signature { kind: "MaterialX", cutout: false, straight: false, boundary: false, emits: false, uv: true, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:910eeb9b40238145 camera=1:910eeb9b40238145 shadow=1:910eeb9b40238145 indirect=1:910eeb9b40238145 +geom 2: material #2 Signature { kind: "MaterialX", cutout: false, straight: false, boundary: false, emits: false, uv: true, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:ee76fd7ed45c4a85 camera=1:ee76fd7ed45c4a85 shadow=1:ee76fd7ed45c4a85 indirect=1:ee76fd7ed45c4a85 +geom 3: material #3 Signature { kind: "UsdPreviewSurface (textured)", cutout: false, straight: false, boundary: false, emits: false, uv: true, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv Some(0) shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:6787da8eacebee45 camera=2:6787da8eacebee45 shadow=2:6787da8eacebee45 indirect=2:6787da8eacebee45 +geom 4: material #4 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:7812e24c7b4d4335 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=2:7812e24c7b4d4335 +provenance material /World/Looks/Base: MaterialOrigin { slots: [1], displaced: false } +provenance material /World/Looks/Derived: MaterialOrigin { slots: [0], displaced: false } +provenance material /World/Looks/Std: MaterialOrigin { slots: [2], displaced: false } +provenance material /World/Looks/Tex: MaterialOrigin { slots: [3], displaced: false } +provenance material read: ("/World/Looks/Base", "/World/Looks/Derived") +provenance material read: ("/World/Looks/Base/Surface", "/World/Looks/Derived") +provenance arc source: /World/Looks/Base +provenance arc source: /World/Looks/Base/Surface +provenance light /World/Key: LightOrigin { index: 0, geoms: 4..5 } +provenance light /World/Sky: LightOrigin { index: 1, geoms: 5..5 } +provenance geometry 0..1: /World/Right +provenance geometry 1..2: /World/Left +provenance geometry 2..3: /World/Ball +provenance geometry 3..4: /World/Floor +provenance geometry 4..5: /World/Key +provenance mesh: MeshOrigin { geom_id: 3, slot: 0, baked: true, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 9851181043634021438, n_points: 4, n_indices: 4, n_uvs: Some(4), smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [0, 1, 2] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: true }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/World/Cam"), cameras: ["/World/Cam"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/World/Cam"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/full_texture_file_usda-1fd2cfaf6e5de06c-1.image b/crates/crust-core/tests/data/import_baselines/full_texture_file_usda-1fd2cfaf6e5de06c-1.image new file mode 100644 index 000000000..5cd45a9c6 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/full_texture_file_usda-1fd2cfaf6e5de06c-1.image @@ -0,0 +1 @@ +48x32 16spp clamp-off a51db73d7e796579 diff --git a/crates/crust-core/tests/data/import_baselines/full_undo_a_light_s_shape_usda-f05814080b96dca5-1.digest b/crates/crust-core/tests/data/import_baselines/full_undo_a_light_s_shape_usda-f05814080b96dca5-1.digest new file mode 100644 index 000000000..a5097f206 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/full_undo_a_light_s_shape_usda-f05814080b96dca5-1.digest @@ -0,0 +1,41 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/World/Cam") +camera: Camera { origin: Vec3A(0.0, 1.0, 6.0), lower_left_corner: Vec3A(-4.7783756, -2.1855836, -4.0), horizontal: Vec3A(9.556751, 0.0, 0.0), vertical: Vec3A(0.0, 6.371167, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: Some("/Render/settings") +settings: RenderSettings { samples_per_pixel: 128, max_depth: 4, width: 48, height: 32, region: PixelRect { x0: 0, y0: 0, x1: 48, y1: 32 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 24.0, aperture: [20.955, 15.2908], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 10.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/full_undo_a_light's_shape.usda", "$DIR/stage.usda"], invisible_overrides: Some(0) } +layer: $DIR/full_undo_a_light's_shape.usda +layer: $DIR/stage.usda +lights: 2 +light 0: area name Some("/World/Key") lpe None pmf 0.5 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 1: dome name Some("/World/Sky") lpe None pmf 0.5 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 5 geometries, PrimitiveBreakdown { triangles: 4, spheres: 3, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 4, spheres: 3, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +geom 0: material #0 Signature { kind: "MaterialX", cutout: false, straight: false, boundary: false, emits: false, uv: true, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:ba01d90e2cc0d4f5 camera=1:ba01d90e2cc0d4f5 shadow=1:ba01d90e2cc0d4f5 indirect=1:ba01d90e2cc0d4f5 +geom 1: material #1 Signature { kind: "MaterialX", cutout: false, straight: false, boundary: false, emits: false, uv: true, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:910eeb9b40238145 camera=1:910eeb9b40238145 shadow=1:910eeb9b40238145 indirect=1:910eeb9b40238145 +geom 2: material #2 Signature { kind: "MaterialX", cutout: false, straight: false, boundary: false, emits: false, uv: true, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:fb8c14f38ace31a8 camera=1:fb8c14f38ace31a8 shadow=1:fb8c14f38ace31a8 indirect=1:fb8c14f38ace31a8 +geom 3: material #3 Signature { kind: "UsdPreviewSurface (textured)", cutout: false, straight: false, boundary: false, emits: false, uv: true, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv Some(0) shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:6787da8eacebee45 camera=2:6787da8eacebee45 shadow=2:6787da8eacebee45 indirect=2:6787da8eacebee45 +geom 4: material #4 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:7812e24c7b4d4335 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=2:7812e24c7b4d4335 +provenance material /World/Looks/Base: MaterialOrigin { slots: [1], displaced: false } +provenance material /World/Looks/Derived: MaterialOrigin { slots: [0], displaced: false } +provenance material /World/Looks/Std: MaterialOrigin { slots: [2], displaced: false } +provenance material /World/Looks/Tex: MaterialOrigin { slots: [3], displaced: false } +provenance material read: ("/World/Looks/Base", "/World/Looks/Derived") +provenance material read: ("/World/Looks/Base/Surface", "/World/Looks/Derived") +provenance arc source: /World/Looks/Base +provenance arc source: /World/Looks/Base/Surface +provenance light /World/Key: LightOrigin { index: 0, geoms: 4..5 } +provenance light /World/Sky: LightOrigin { index: 1, geoms: 5..5 } +provenance geometry 0..1: /World/Right +provenance geometry 1..2: /World/Left +provenance geometry 2..3: /World/Ball +provenance geometry 3..4: /World/Floor +provenance geometry 4..5: /World/Key +provenance mesh: MeshOrigin { geom_id: 3, slot: 0, baked: true, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 9851181043634021438, n_points: 4, n_indices: 4, n_uvs: Some(4), smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [0, 1, 2] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: true }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/World/Cam"), cameras: ["/World/Cam"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/World/Cam"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/full_undo_a_light_s_shape_usda-f05814080b96dca5-1.image b/crates/crust-core/tests/data/import_baselines/full_undo_a_light_s_shape_usda-f05814080b96dca5-1.image new file mode 100644 index 000000000..5e1bf2e96 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/full_undo_a_light_s_shape_usda-f05814080b96dca5-1.image @@ -0,0 +1 @@ +48x32 16spp clamp-off b0533d215a5cd138 diff --git a/crates/crust-core/tests/data/import_baselines/full_undo_a_transform_usda-d26b3a02a093ce4f-1.digest b/crates/crust-core/tests/data/import_baselines/full_undo_a_transform_usda-d26b3a02a093ce4f-1.digest new file mode 100644 index 000000000..32d892d91 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/full_undo_a_transform_usda-d26b3a02a093ce4f-1.digest @@ -0,0 +1,41 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/World/Cam") +camera: Camera { origin: Vec3A(0.0, 1.0, 6.0), lower_left_corner: Vec3A(-4.7783756, -2.1855836, -4.0), horizontal: Vec3A(9.556751, 0.0, 0.0), vertical: Vec3A(0.0, 6.371167, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: Some("/Render/settings") +settings: RenderSettings { samples_per_pixel: 128, max_depth: 4, width: 48, height: 32, region: PixelRect { x0: 0, y0: 0, x1: 48, y1: 32 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 24.0, aperture: [20.955, 15.2908], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 10.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/full_undo_a_transform.usda", "$DIR/stage.usda"], invisible_overrides: Some(0) } +layer: $DIR/full_undo_a_transform.usda +layer: $DIR/stage.usda +lights: 2 +light 0: area name Some("/World/Key") lpe None pmf 0.5 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 1: dome name Some("/World/Sky") lpe None pmf 0.5 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 5 geometries, PrimitiveBreakdown { triangles: 4, spheres: 3, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 4, spheres: 3, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +geom 0: material #0 Signature { kind: "MaterialX", cutout: false, straight: false, boundary: false, emits: false, uv: true, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:ba01d90e2cc0d4f5 camera=1:ba01d90e2cc0d4f5 shadow=1:ba01d90e2cc0d4f5 indirect=1:ba01d90e2cc0d4f5 +geom 1: material #1 Signature { kind: "MaterialX", cutout: false, straight: false, boundary: false, emits: false, uv: true, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:910eeb9b40238145 camera=1:910eeb9b40238145 shadow=1:910eeb9b40238145 indirect=1:910eeb9b40238145 +geom 2: material #2 Signature { kind: "MaterialX", cutout: false, straight: false, boundary: false, emits: false, uv: true, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:ee76fd7ed45c4a85 camera=1:ee76fd7ed45c4a85 shadow=1:ee76fd7ed45c4a85 indirect=1:ee76fd7ed45c4a85 +geom 3: material #3 Signature { kind: "UsdPreviewSurface (textured)", cutout: false, straight: false, boundary: false, emits: false, uv: true, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv Some(0) shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:6787da8eacebee45 camera=2:6787da8eacebee45 shadow=2:6787da8eacebee45 indirect=2:6787da8eacebee45 +geom 4: material #4 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:7812e24c7b4d4335 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=2:7812e24c7b4d4335 +provenance material /World/Looks/Base: MaterialOrigin { slots: [1], displaced: false } +provenance material /World/Looks/Derived: MaterialOrigin { slots: [0], displaced: false } +provenance material /World/Looks/Std: MaterialOrigin { slots: [2], displaced: false } +provenance material /World/Looks/Tex: MaterialOrigin { slots: [3], displaced: false } +provenance material read: ("/World/Looks/Base", "/World/Looks/Derived") +provenance material read: ("/World/Looks/Base/Surface", "/World/Looks/Derived") +provenance arc source: /World/Looks/Base +provenance arc source: /World/Looks/Base/Surface +provenance light /World/Key: LightOrigin { index: 0, geoms: 4..5 } +provenance light /World/Sky: LightOrigin { index: 1, geoms: 5..5 } +provenance geometry 0..1: /World/Right +provenance geometry 1..2: /World/Left +provenance geometry 2..3: /World/Ball +provenance geometry 3..4: /World/Floor +provenance geometry 4..5: /World/Key +provenance mesh: MeshOrigin { geom_id: 3, slot: 0, baked: true, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 9851181043634021438, n_points: 4, n_indices: 4, n_uvs: Some(4), smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [0, 1, 2] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: true }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/World/Cam"), cameras: ["/World/Cam"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/World/Cam"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/full_undo_a_transform_usda-d26b3a02a093ce4f-1.image b/crates/crust-core/tests/data/import_baselines/full_undo_a_transform_usda-d26b3a02a093ce4f-1.image new file mode 100644 index 000000000..11828d811 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/full_undo_a_transform_usda-d26b3a02a093ce4f-1.image @@ -0,0 +1 @@ +48x32 16spp clamp-off a22f3882aa730ddf diff --git a/crates/crust-core/tests/data/import_baselines/full_undo_base_colour_usda-d814da72eab3f116-1.digest b/crates/crust-core/tests/data/import_baselines/full_undo_base_colour_usda-d814da72eab3f116-1.digest new file mode 100644 index 000000000..09b6bc51c --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/full_undo_base_colour_usda-d814da72eab3f116-1.digest @@ -0,0 +1,41 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/World/Cam") +camera: Camera { origin: Vec3A(0.0, 1.0, 6.0), lower_left_corner: Vec3A(-4.7783756, -2.1855836, -4.0), horizontal: Vec3A(9.556751, 0.0, 0.0), vertical: Vec3A(0.0, 6.371167, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: Some("/Render/settings") +settings: RenderSettings { samples_per_pixel: 128, max_depth: 2, width: 48, height: 32, region: PixelRect { x0: 0, y0: 0, x1: 48, y1: 32 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: PmjBn, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 2.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 24.0, aperture: [20.955, 15.2908], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 10.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/full_undo_base_colour.usda", "$DIR/stage.usda"], invisible_overrides: Some(0) } +layer: $DIR/full_undo_base_colour.usda +layer: $DIR/stage.usda +lights: 2 +light 0: area name Some("/World/Key") lpe None pmf 0.5 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 1: dome name Some("/World/Sky") lpe None pmf 0.5 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 5 geometries, PrimitiveBreakdown { triangles: 4, spheres: 3, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 4, spheres: 3, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +geom 0: material #0 Signature { kind: "MaterialX", cutout: false, straight: false, boundary: false, emits: false, uv: true, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:ba01d90e2cc0d4f5 camera=1:ba01d90e2cc0d4f5 shadow=1:ba01d90e2cc0d4f5 indirect=1:ba01d90e2cc0d4f5 +geom 1: material #1 Signature { kind: "MaterialX", cutout: false, straight: false, boundary: false, emits: false, uv: true, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:910eeb9b40238145 camera=1:910eeb9b40238145 shadow=1:910eeb9b40238145 indirect=1:910eeb9b40238145 +geom 2: material #2 Signature { kind: "MaterialX", cutout: false, straight: false, boundary: false, emits: false, uv: true, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:ee76fd7ed45c4a85 camera=1:ee76fd7ed45c4a85 shadow=1:ee76fd7ed45c4a85 indirect=1:ee76fd7ed45c4a85 +geom 3: material #3 Signature { kind: "UsdPreviewSurface (textured)", cutout: false, straight: false, boundary: false, emits: false, uv: true, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv Some(0) shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:6787da8eacebee45 camera=2:6787da8eacebee45 shadow=2:6787da8eacebee45 indirect=2:6787da8eacebee45 +geom 4: material #4 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:7812e24c7b4d4335 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=2:7812e24c7b4d4335 +provenance material /World/Looks/Base: MaterialOrigin { slots: [1], displaced: false } +provenance material /World/Looks/Derived: MaterialOrigin { slots: [0], displaced: false } +provenance material /World/Looks/Std: MaterialOrigin { slots: [2], displaced: false } +provenance material /World/Looks/Tex: MaterialOrigin { slots: [3], displaced: false } +provenance material read: ("/World/Looks/Base", "/World/Looks/Derived") +provenance material read: ("/World/Looks/Base/Surface", "/World/Looks/Derived") +provenance arc source: /World/Looks/Base +provenance arc source: /World/Looks/Base/Surface +provenance light /World/Key: LightOrigin { index: 0, geoms: 4..5 } +provenance light /World/Sky: LightOrigin { index: 1, geoms: 5..5 } +provenance geometry 0..1: /World/Right +provenance geometry 1..2: /World/Left +provenance geometry 2..3: /World/Ball +provenance geometry 3..4: /World/Floor +provenance geometry 4..5: /World/Key +provenance mesh: MeshOrigin { geom_id: 3, slot: 0, baked: true, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 9851181043634021438, n_points: 4, n_indices: 4, n_uvs: Some(4), smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [0, 1, 2] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: true }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/World/Cam"), cameras: ["/World/Cam"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/World/Cam"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/full_undo_base_colour_usda-d814da72eab3f116-1.image b/crates/crust-core/tests/data/import_baselines/full_undo_base_colour_usda-d814da72eab3f116-1.image new file mode 100644 index 000000000..01bfe0e42 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/full_undo_base_colour_usda-d814da72eab3f116-1.image @@ -0,0 +1 @@ +48x32 16spp clamp-off e91e50445f593725 diff --git a/crates/crust-core/tests/data/import_baselines/full_undo_disable_depth_of_field__bad_unit_usda-6419381399744bc7-1.digest b/crates/crust-core/tests/data/import_baselines/full_undo_disable_depth_of_field__bad_unit_usda-6419381399744bc7-1.digest new file mode 100644 index 000000000..70982821d --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/full_undo_disable_depth_of_field__bad_unit_usda-6419381399744bc7-1.digest @@ -0,0 +1,24 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/World/Cam") +camera: Camera { origin: Vec3A(0.0, 0.0, 6.0), lower_left_corner: Vec3A(-1.3761721, -0.91744804, 0.0), horizontal: Vec3A(2.7523441, 0.0, 0.0), vertical: Vec3A(0.0, 1.8348961, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 1.25, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: Some("/Render/settings") +settings: RenderSettings { samples_per_pixel: 128, max_depth: 2, width: 48, height: 32, region: PixelRect { x0: 0, y0: 0, x1: 48, y1: 32 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 50.0, aperture: [20.955, 15.2908], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 2.0, focus_distance: 6.0 }), depth_of_field: true, motion_blur: false, layer_stack: ["$DIR/full_undo_disable_depth_of_field,_bad_unit.usda", "$DIR/input.usda"], invisible_overrides: Some(0) } +layer: $DIR/full_undo_disable_depth_of_field,_bad_unit.usda +layer: $DIR/input.usda +warning: Warning { code: CameraInvalidMetersPerUnit, kind: Refused, count: 1, prims: [], message: "/World/Cam: the stage's metersPerUnit = 0 is not a length the lens can use; it reads it as 0.01 (a centimetre)" } +lights: 1 +light 0: distant name Some("/World/Sun") lpe None pmf 1.0 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 2 geometries, PrimitiveBreakdown { triangles: 0, spheres: 2, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 0, spheres: 2, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:1cd1488d041dfcdb camera=1:1cd1488d041dfcdb shadow=1:1cd1488d041dfcdb indirect=1:1cd1488d041dfcdb +geom 1: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:2d90e22d27992fa5 camera=1:2d90e22d27992fa5 shadow=1:2d90e22d27992fa5 indirect=1:2d90e22d27992fa5 +provenance light /World/Sun: LightOrigin { index: 0, geoms: 2..2 } +provenance geometry 0..1: /World/Far +provenance geometry 1..2: /World/Near +provenance spheres: [0, 1] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: true }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/World/Cam"), cameras: ["/World/Cam"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/World/Cam"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/full_undo_disable_depth_of_field__bad_unit_usda-6419381399744bc7-1.image b/crates/crust-core/tests/data/import_baselines/full_undo_disable_depth_of_field__bad_unit_usda-6419381399744bc7-1.image new file mode 100644 index 000000000..95603ce7c --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/full_undo_disable_depth_of_field__bad_unit_usda-6419381399744bc7-1.image @@ -0,0 +1 @@ +48x32 16spp clamp-off 6403d1e8ae317b59 diff --git a/crates/crust-core/tests/data/import_baselines/full_undo_disable_depth_of_field_usda-3ef9a9cb1855677e-1.digest b/crates/crust-core/tests/data/import_baselines/full_undo_disable_depth_of_field_usda-3ef9a9cb1855677e-1.digest new file mode 100644 index 000000000..0799f9bbd --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/full_undo_disable_depth_of_field_usda-3ef9a9cb1855677e-1.digest @@ -0,0 +1,23 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/World/Cam") +camera: Camera { origin: Vec3A(0.0, 0.0, 6.0), lower_left_corner: Vec3A(-1.3761721, -0.91744804, 0.0), horizontal: Vec3A(2.7523441, 0.0, 0.0), vertical: Vec3A(0.0, 1.8348961, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 1.25, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: Some("/Render/settings") +settings: RenderSettings { samples_per_pixel: 128, max_depth: 2, width: 48, height: 32, region: PixelRect { x0: 0, y0: 0, x1: 48, y1: 32 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 50.0, aperture: [20.955, 15.2908], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 2.0, focus_distance: 6.0 }), depth_of_field: true, motion_blur: false, layer_stack: ["$DIR/full_undo_disable_depth_of_field.usda", "$DIR/input.usda"], invisible_overrides: Some(0) } +layer: $DIR/full_undo_disable_depth_of_field.usda +layer: $DIR/input.usda +lights: 1 +light 0: distant name Some("/World/Sun") lpe None pmf 1.0 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 2 geometries, PrimitiveBreakdown { triangles: 0, spheres: 2, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 0, spheres: 2, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:1cd1488d041dfcdb camera=1:1cd1488d041dfcdb shadow=1:1cd1488d041dfcdb indirect=1:1cd1488d041dfcdb +geom 1: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:2d90e22d27992fa5 camera=1:2d90e22d27992fa5 shadow=1:2d90e22d27992fa5 indirect=1:2d90e22d27992fa5 +provenance light /World/Sun: LightOrigin { index: 0, geoms: 2..2 } +provenance geometry 0..1: /World/Far +provenance geometry 1..2: /World/Near +provenance spheres: [0, 1] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: true }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/World/Cam"), cameras: ["/World/Cam"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/World/Cam"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/full_undo_disable_depth_of_field_usda-3ef9a9cb1855677e-1.image b/crates/crust-core/tests/data/import_baselines/full_undo_disable_depth_of_field_usda-3ef9a9cb1855677e-1.image new file mode 100644 index 000000000..95603ce7c --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/full_undo_disable_depth_of_field_usda-3ef9a9cb1855677e-1.image @@ -0,0 +1 @@ +48x32 16spp clamp-off 6403d1e8ae317b59 diff --git a/crates/crust-core/tests/data/import_baselines/full_undo_dome_texture_usda-a17c02c0536bdc00-1.digest b/crates/crust-core/tests/data/import_baselines/full_undo_dome_texture_usda-a17c02c0536bdc00-1.digest new file mode 100644 index 000000000..0c3c62f42 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/full_undo_dome_texture_usda-a17c02c0536bdc00-1.digest @@ -0,0 +1,41 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/World/Cam") +camera: Camera { origin: Vec3A(0.0, 1.0, 6.0), lower_left_corner: Vec3A(-4.7783756, -2.1855836, -4.0), horizontal: Vec3A(9.556751, 0.0, 0.0), vertical: Vec3A(0.0, 6.371167, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: Some("/Render/settings") +settings: RenderSettings { samples_per_pixel: 128, max_depth: 2, width: 48, height: 32, region: PixelRect { x0: 0, y0: 0, x1: 48, y1: 32 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: PmjBn, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 2.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 24.0, aperture: [20.955, 15.2908], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 10.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/full_undo_dome_texture.usda", "$DIR/stage.usda"], invisible_overrides: Some(0) } +layer: $DIR/full_undo_dome_texture.usda +layer: $DIR/stage.usda +lights: 2 +light 0: area name Some("/World/Key") lpe None pmf 0.5 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 1: dome name Some("/World/Sky") lpe None pmf 0.5 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 5 geometries, PrimitiveBreakdown { triangles: 4, spheres: 3, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 4, spheres: 3, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +geom 0: material #0 Signature { kind: "MaterialX", cutout: false, straight: false, boundary: false, emits: false, uv: true, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:ba01d90e2cc0d4f5 camera=1:ba01d90e2cc0d4f5 shadow=1:ba01d90e2cc0d4f5 indirect=1:ba01d90e2cc0d4f5 +geom 1: material #1 Signature { kind: "MaterialX", cutout: false, straight: false, boundary: false, emits: false, uv: true, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:910eeb9b40238145 camera=1:910eeb9b40238145 shadow=1:910eeb9b40238145 indirect=1:910eeb9b40238145 +geom 2: material #2 Signature { kind: "MaterialX", cutout: false, straight: false, boundary: false, emits: false, uv: true, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:ee76fd7ed45c4a85 camera=1:ee76fd7ed45c4a85 shadow=1:ee76fd7ed45c4a85 indirect=1:ee76fd7ed45c4a85 +geom 3: material #3 Signature { kind: "UsdPreviewSurface (textured)", cutout: false, straight: false, boundary: false, emits: false, uv: true, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv Some(0) shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:6787da8eacebee45 camera=2:6787da8eacebee45 shadow=2:6787da8eacebee45 indirect=2:6787da8eacebee45 +geom 4: material #4 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:7812e24c7b4d4335 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=2:7812e24c7b4d4335 +provenance material /World/Looks/Base: MaterialOrigin { slots: [1], displaced: false } +provenance material /World/Looks/Derived: MaterialOrigin { slots: [0], displaced: false } +provenance material /World/Looks/Std: MaterialOrigin { slots: [2], displaced: false } +provenance material /World/Looks/Tex: MaterialOrigin { slots: [3], displaced: false } +provenance material read: ("/World/Looks/Base", "/World/Looks/Derived") +provenance material read: ("/World/Looks/Base/Surface", "/World/Looks/Derived") +provenance arc source: /World/Looks/Base +provenance arc source: /World/Looks/Base/Surface +provenance light /World/Key: LightOrigin { index: 0, geoms: 4..5 } +provenance light /World/Sky: LightOrigin { index: 1, geoms: 5..5 } +provenance geometry 0..1: /World/Right +provenance geometry 1..2: /World/Left +provenance geometry 2..3: /World/Ball +provenance geometry 3..4: /World/Floor +provenance geometry 4..5: /World/Key +provenance mesh: MeshOrigin { geom_id: 3, slot: 0, baked: true, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 9851181043634021438, n_points: 4, n_indices: 4, n_uvs: Some(4), smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [0, 1, 2] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: true }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/World/Cam"), cameras: ["/World/Cam"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/World/Cam"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/full_undo_dome_texture_usda-a17c02c0536bdc00-1.image b/crates/crust-core/tests/data/import_baselines/full_undo_dome_texture_usda-a17c02c0536bdc00-1.image new file mode 100644 index 000000000..fe212a5bd --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/full_undo_dome_texture_usda-a17c02c0536bdc00-1.image @@ -0,0 +1 @@ +48x32 16spp clamp-off 5dca7776dd8e6c1f diff --git a/crates/crust-core/tests/data/import_baselines/full_undo_exposure_usda-c9169e83397e3561-1.digest b/crates/crust-core/tests/data/import_baselines/full_undo_exposure_usda-c9169e83397e3561-1.digest new file mode 100644 index 000000000..e48539684 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/full_undo_exposure_usda-c9169e83397e3561-1.digest @@ -0,0 +1,41 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/World/Cam") +camera: Camera { origin: Vec3A(0.0, 1.0, 6.0), lower_left_corner: Vec3A(-4.7783756, -2.1855836, -4.0), horizontal: Vec3A(9.556751, 0.0, 0.0), vertical: Vec3A(0.0, 6.371167, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: Some("/Render/settings") +settings: RenderSettings { samples_per_pixel: 128, max_depth: 4, width: 48, height: 32, region: PixelRect { x0: 0, y0: 0, x1: 48, y1: 32 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 24.0, aperture: [20.955, 15.2908], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 10.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/full_undo_exposure.usda", "$DIR/stage.usda"], invisible_overrides: Some(0) } +layer: $DIR/full_undo_exposure.usda +layer: $DIR/stage.usda +lights: 2 +light 0: area name Some("/World/Key") lpe None pmf 0.5 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 1: dome name Some("/World/Sky") lpe None pmf 0.5 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 5 geometries, PrimitiveBreakdown { triangles: 4, spheres: 3, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 4, spheres: 3, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +geom 0: material #0 Signature { kind: "MaterialX", cutout: false, straight: false, boundary: false, emits: false, uv: true, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:ba01d90e2cc0d4f5 camera=1:ba01d90e2cc0d4f5 shadow=1:ba01d90e2cc0d4f5 indirect=1:ba01d90e2cc0d4f5 +geom 1: material #1 Signature { kind: "MaterialX", cutout: false, straight: false, boundary: false, emits: false, uv: true, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:910eeb9b40238145 camera=1:910eeb9b40238145 shadow=1:910eeb9b40238145 indirect=1:910eeb9b40238145 +geom 2: material #2 Signature { kind: "MaterialX", cutout: false, straight: false, boundary: false, emits: false, uv: true, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:ee76fd7ed45c4a85 camera=1:ee76fd7ed45c4a85 shadow=1:ee76fd7ed45c4a85 indirect=1:ee76fd7ed45c4a85 +geom 3: material #3 Signature { kind: "UsdPreviewSurface (textured)", cutout: false, straight: false, boundary: false, emits: false, uv: true, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv Some(0) shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:6787da8eacebee45 camera=2:6787da8eacebee45 shadow=2:6787da8eacebee45 indirect=2:6787da8eacebee45 +geom 4: material #4 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:7812e24c7b4d4335 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=2:7812e24c7b4d4335 +provenance material /World/Looks/Base: MaterialOrigin { slots: [1], displaced: false } +provenance material /World/Looks/Derived: MaterialOrigin { slots: [0], displaced: false } +provenance material /World/Looks/Std: MaterialOrigin { slots: [2], displaced: false } +provenance material /World/Looks/Tex: MaterialOrigin { slots: [3], displaced: false } +provenance material read: ("/World/Looks/Base", "/World/Looks/Derived") +provenance material read: ("/World/Looks/Base/Surface", "/World/Looks/Derived") +provenance arc source: /World/Looks/Base +provenance arc source: /World/Looks/Base/Surface +provenance light /World/Key: LightOrigin { index: 0, geoms: 4..5 } +provenance light /World/Sky: LightOrigin { index: 1, geoms: 5..5 } +provenance geometry 0..1: /World/Right +provenance geometry 1..2: /World/Left +provenance geometry 2..3: /World/Ball +provenance geometry 3..4: /World/Floor +provenance geometry 4..5: /World/Key +provenance mesh: MeshOrigin { geom_id: 3, slot: 0, baked: true, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 9851181043634021438, n_points: 4, n_indices: 4, n_uvs: Some(4), smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [0, 1, 2] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: true }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/World/Cam"), cameras: ["/World/Cam"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/World/Cam"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/full_undo_exposure_usda-c9169e83397e3561-1.image b/crates/crust-core/tests/data/import_baselines/full_undo_exposure_usda-c9169e83397e3561-1.image new file mode 100644 index 000000000..11828d811 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/full_undo_exposure_usda-c9169e83397e3561-1.image @@ -0,0 +1 @@ +48x32 16spp clamp-off a22f3882aa730ddf diff --git a/crates/crust-core/tests/data/import_baselines/full_undo_max_depth_usda-a8a78eb6299a327a-1.digest b/crates/crust-core/tests/data/import_baselines/full_undo_max_depth_usda-a8a78eb6299a327a-1.digest new file mode 100644 index 000000000..8c9f18d7d --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/full_undo_max_depth_usda-a8a78eb6299a327a-1.digest @@ -0,0 +1,41 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/World/Cam") +camera: Camera { origin: Vec3A(0.0, 1.0, 6.0), lower_left_corner: Vec3A(-4.7783756, -2.1855836, -4.0), horizontal: Vec3A(9.556751, 0.0, 0.0), vertical: Vec3A(0.0, 6.371167, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: Some("/Render/settings") +settings: RenderSettings { samples_per_pixel: 128, max_depth: 4, width: 48, height: 32, region: PixelRect { x0: 0, y0: 0, x1: 48, y1: 32 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 2.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 24.0, aperture: [20.955, 15.2908], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 10.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/full_undo_max_depth.usda", "$DIR/stage.usda"], invisible_overrides: Some(0) } +layer: $DIR/full_undo_max_depth.usda +layer: $DIR/stage.usda +lights: 2 +light 0: area name Some("/World/Key") lpe None pmf 0.5 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 1: dome name Some("/World/Sky") lpe None pmf 0.5 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 5 geometries, PrimitiveBreakdown { triangles: 4, spheres: 3, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 4, spheres: 3, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +geom 0: material #0 Signature { kind: "MaterialX", cutout: false, straight: false, boundary: false, emits: false, uv: true, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:ba01d90e2cc0d4f5 camera=1:ba01d90e2cc0d4f5 shadow=1:ba01d90e2cc0d4f5 indirect=1:ba01d90e2cc0d4f5 +geom 1: material #1 Signature { kind: "MaterialX", cutout: false, straight: false, boundary: false, emits: false, uv: true, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:910eeb9b40238145 camera=1:910eeb9b40238145 shadow=1:910eeb9b40238145 indirect=1:910eeb9b40238145 +geom 2: material #2 Signature { kind: "MaterialX", cutout: false, straight: false, boundary: false, emits: false, uv: true, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:ee76fd7ed45c4a85 camera=1:ee76fd7ed45c4a85 shadow=1:ee76fd7ed45c4a85 indirect=1:ee76fd7ed45c4a85 +geom 3: material #3 Signature { kind: "UsdPreviewSurface (textured)", cutout: false, straight: false, boundary: false, emits: false, uv: true, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv Some(0) shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:6787da8eacebee45 camera=2:6787da8eacebee45 shadow=2:6787da8eacebee45 indirect=2:6787da8eacebee45 +geom 4: material #4 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:7812e24c7b4d4335 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=2:7812e24c7b4d4335 +provenance material /World/Looks/Base: MaterialOrigin { slots: [1], displaced: false } +provenance material /World/Looks/Derived: MaterialOrigin { slots: [0], displaced: false } +provenance material /World/Looks/Std: MaterialOrigin { slots: [2], displaced: false } +provenance material /World/Looks/Tex: MaterialOrigin { slots: [3], displaced: false } +provenance material read: ("/World/Looks/Base", "/World/Looks/Derived") +provenance material read: ("/World/Looks/Base/Surface", "/World/Looks/Derived") +provenance arc source: /World/Looks/Base +provenance arc source: /World/Looks/Base/Surface +provenance light /World/Key: LightOrigin { index: 0, geoms: 4..5 } +provenance light /World/Sky: LightOrigin { index: 1, geoms: 5..5 } +provenance geometry 0..1: /World/Right +provenance geometry 1..2: /World/Left +provenance geometry 2..3: /World/Ball +provenance geometry 3..4: /World/Floor +provenance geometry 4..5: /World/Key +provenance mesh: MeshOrigin { geom_id: 3, slot: 0, baked: true, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 9851181043634021438, n_points: 4, n_indices: 4, n_uvs: Some(4), smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [0, 1, 2] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: true }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/World/Cam"), cameras: ["/World/Cam"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/World/Cam"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/full_undo_max_depth_usda-a8a78eb6299a327a-1.image b/crates/crust-core/tests/data/import_baselines/full_undo_max_depth_usda-a8a78eb6299a327a-1.image new file mode 100644 index 000000000..cebc04326 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/full_undo_max_depth_usda-a8a78eb6299a327a-1.image @@ -0,0 +1 @@ +48x32 16spp clamp-off bc40eaca1e9ff520 diff --git a/crates/crust-core/tests/data/import_baselines/full_undo_rect_light_usda-2d6a907009434890-1.digest b/crates/crust-core/tests/data/import_baselines/full_undo_rect_light_usda-2d6a907009434890-1.digest new file mode 100644 index 000000000..09a0c929d --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/full_undo_rect_light_usda-2d6a907009434890-1.digest @@ -0,0 +1,41 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/World/Cam") +camera: Camera { origin: Vec3A(0.0, 1.0, 6.0), lower_left_corner: Vec3A(-4.7783756, -2.1855836, -4.0), horizontal: Vec3A(9.556751, 0.0, 0.0), vertical: Vec3A(0.0, 6.371167, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: Some("/Render/settings") +settings: RenderSettings { samples_per_pixel: 128, max_depth: 2, width: 48, height: 32, region: PixelRect { x0: 0, y0: 0, x1: 48, y1: 32 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: PmjBn, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 2.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 24.0, aperture: [20.955, 15.2908], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 10.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/full_undo_rect_light.usda", "$DIR/stage.usda"], invisible_overrides: Some(0) } +layer: $DIR/full_undo_rect_light.usda +layer: $DIR/stage.usda +lights: 2 +light 0: area name Some("/World/Key") lpe None pmf 0.5 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 1: dome name Some("/World/Sky") lpe None pmf 0.5 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 5 geometries, PrimitiveBreakdown { triangles: 4, spheres: 3, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 4, spheres: 3, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +geom 0: material #0 Signature { kind: "MaterialX", cutout: false, straight: false, boundary: false, emits: false, uv: true, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:ba01d90e2cc0d4f5 camera=1:ba01d90e2cc0d4f5 shadow=1:ba01d90e2cc0d4f5 indirect=1:ba01d90e2cc0d4f5 +geom 1: material #1 Signature { kind: "MaterialX", cutout: false, straight: false, boundary: false, emits: false, uv: true, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:910eeb9b40238145 camera=1:910eeb9b40238145 shadow=1:910eeb9b40238145 indirect=1:910eeb9b40238145 +geom 2: material #2 Signature { kind: "MaterialX", cutout: false, straight: false, boundary: false, emits: false, uv: true, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:ee76fd7ed45c4a85 camera=1:ee76fd7ed45c4a85 shadow=1:ee76fd7ed45c4a85 indirect=1:ee76fd7ed45c4a85 +geom 3: material #3 Signature { kind: "UsdPreviewSurface (textured)", cutout: false, straight: false, boundary: false, emits: false, uv: true, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv Some(0) shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:6787da8eacebee45 camera=2:6787da8eacebee45 shadow=2:6787da8eacebee45 indirect=2:6787da8eacebee45 +geom 4: material #4 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:7812e24c7b4d4335 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=2:7812e24c7b4d4335 +provenance material /World/Looks/Base: MaterialOrigin { slots: [1], displaced: false } +provenance material /World/Looks/Derived: MaterialOrigin { slots: [0], displaced: false } +provenance material /World/Looks/Std: MaterialOrigin { slots: [2], displaced: false } +provenance material /World/Looks/Tex: MaterialOrigin { slots: [3], displaced: false } +provenance material read: ("/World/Looks/Base", "/World/Looks/Derived") +provenance material read: ("/World/Looks/Base/Surface", "/World/Looks/Derived") +provenance arc source: /World/Looks/Base +provenance arc source: /World/Looks/Base/Surface +provenance light /World/Key: LightOrigin { index: 0, geoms: 4..5 } +provenance light /World/Sky: LightOrigin { index: 1, geoms: 5..5 } +provenance geometry 0..1: /World/Right +provenance geometry 1..2: /World/Left +provenance geometry 2..3: /World/Ball +provenance geometry 3..4: /World/Floor +provenance geometry 4..5: /World/Key +provenance mesh: MeshOrigin { geom_id: 3, slot: 0, baked: true, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 9851181043634021438, n_points: 4, n_indices: 4, n_uvs: Some(4), smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [0, 1, 2] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: true }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/World/Cam"), cameras: ["/World/Cam"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/World/Cam"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/full_undo_rect_light_usda-2d6a907009434890-1.image b/crates/crust-core/tests/data/import_baselines/full_undo_rect_light_usda-2d6a907009434890-1.image new file mode 100644 index 000000000..f578d7bd6 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/full_undo_rect_light_usda-2d6a907009434890-1.image @@ -0,0 +1 @@ +48x32 16spp clamp-off ba9a59bdaff14a99 diff --git a/crates/crust-core/tests/data/import_baselines/full_undo_roughness_usda-62c5e0d0879e604d-1.digest b/crates/crust-core/tests/data/import_baselines/full_undo_roughness_usda-62c5e0d0879e604d-1.digest new file mode 100644 index 000000000..369a85ff6 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/full_undo_roughness_usda-62c5e0d0879e604d-1.digest @@ -0,0 +1,41 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/World/Cam") +camera: Camera { origin: Vec3A(0.0, 1.0, 6.0), lower_left_corner: Vec3A(-4.7783756, -2.1855836, -4.0), horizontal: Vec3A(9.556751, 0.0, 0.0), vertical: Vec3A(0.0, 6.371167, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: Some("/Render/settings") +settings: RenderSettings { samples_per_pixel: 128, max_depth: 2, width: 48, height: 32, region: PixelRect { x0: 0, y0: 0, x1: 48, y1: 32 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: PmjBn, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 2.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 24.0, aperture: [20.955, 15.2908], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 10.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/full_undo_roughness.usda", "$DIR/stage.usda"], invisible_overrides: Some(0) } +layer: $DIR/full_undo_roughness.usda +layer: $DIR/stage.usda +lights: 2 +light 0: area name Some("/World/Key") lpe None pmf 0.5 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 1: dome name Some("/World/Sky") lpe None pmf 0.5 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 5 geometries, PrimitiveBreakdown { triangles: 4, spheres: 3, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 4, spheres: 3, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +geom 0: material #0 Signature { kind: "MaterialX", cutout: false, straight: false, boundary: false, emits: false, uv: true, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:ba01d90e2cc0d4f5 camera=1:ba01d90e2cc0d4f5 shadow=1:ba01d90e2cc0d4f5 indirect=1:ba01d90e2cc0d4f5 +geom 1: material #1 Signature { kind: "MaterialX", cutout: false, straight: false, boundary: false, emits: false, uv: true, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:910eeb9b40238145 camera=1:910eeb9b40238145 shadow=1:910eeb9b40238145 indirect=1:910eeb9b40238145 +geom 2: material #2 Signature { kind: "MaterialX", cutout: false, straight: false, boundary: false, emits: false, uv: true, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:ee76fd7ed45c4a85 camera=1:ee76fd7ed45c4a85 shadow=1:ee76fd7ed45c4a85 indirect=1:ee76fd7ed45c4a85 +geom 3: material #3 Signature { kind: "UsdPreviewSurface (textured)", cutout: false, straight: false, boundary: false, emits: false, uv: true, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv Some(0) shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:6787da8eacebee45 camera=2:6787da8eacebee45 shadow=2:6787da8eacebee45 indirect=2:6787da8eacebee45 +geom 4: material #4 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:7812e24c7b4d4335 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=2:7812e24c7b4d4335 +provenance material /World/Looks/Base: MaterialOrigin { slots: [1], displaced: false } +provenance material /World/Looks/Derived: MaterialOrigin { slots: [0], displaced: false } +provenance material /World/Looks/Std: MaterialOrigin { slots: [2], displaced: false } +provenance material /World/Looks/Tex: MaterialOrigin { slots: [3], displaced: false } +provenance material read: ("/World/Looks/Base", "/World/Looks/Derived") +provenance material read: ("/World/Looks/Base/Surface", "/World/Looks/Derived") +provenance arc source: /World/Looks/Base +provenance arc source: /World/Looks/Base/Surface +provenance light /World/Key: LightOrigin { index: 0, geoms: 4..5 } +provenance light /World/Sky: LightOrigin { index: 1, geoms: 5..5 } +provenance geometry 0..1: /World/Right +provenance geometry 1..2: /World/Left +provenance geometry 2..3: /World/Ball +provenance geometry 3..4: /World/Floor +provenance geometry 4..5: /World/Key +provenance mesh: MeshOrigin { geom_id: 3, slot: 0, baked: true, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 9851181043634021438, n_points: 4, n_indices: 4, n_uvs: Some(4), smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [0, 1, 2] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: true }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/World/Cam"), cameras: ["/World/Cam"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/World/Cam"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/full_undo_roughness_usda-62c5e0d0879e604d-1.image b/crates/crust-core/tests/data/import_baselines/full_undo_roughness_usda-62c5e0d0879e604d-1.image new file mode 100644 index 000000000..ab21343ca --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/full_undo_roughness_usda-62c5e0d0879e604d-1.image @@ -0,0 +1 @@ +48x32 16spp clamp-off ff2beaa5102f00b8 diff --git a/crates/crust-core/tests/data/import_baselines/full_undo_sampler_usda-0d28664679d41bef-1.digest b/crates/crust-core/tests/data/import_baselines/full_undo_sampler_usda-0d28664679d41bef-1.digest new file mode 100644 index 000000000..1b1434263 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/full_undo_sampler_usda-0d28664679d41bef-1.digest @@ -0,0 +1,41 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/World/Cam") +camera: Camera { origin: Vec3A(0.0, 1.0, 6.0), lower_left_corner: Vec3A(-4.7783756, -2.1855836, -4.0), horizontal: Vec3A(9.556751, 0.0, 0.0), vertical: Vec3A(0.0, 6.371167, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: Some("/Render/settings") +settings: RenderSettings { samples_per_pixel: 128, max_depth: 2, width: 48, height: 32, region: PixelRect { x0: 0, y0: 0, x1: 48, y1: 32 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 2.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 24.0, aperture: [20.955, 15.2908], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 10.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/full_undo_sampler.usda", "$DIR/stage.usda"], invisible_overrides: Some(0) } +layer: $DIR/full_undo_sampler.usda +layer: $DIR/stage.usda +lights: 2 +light 0: area name Some("/World/Key") lpe None pmf 0.5 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 1: dome name Some("/World/Sky") lpe None pmf 0.5 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 5 geometries, PrimitiveBreakdown { triangles: 4, spheres: 3, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 4, spheres: 3, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +geom 0: material #0 Signature { kind: "MaterialX", cutout: false, straight: false, boundary: false, emits: false, uv: true, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:ba01d90e2cc0d4f5 camera=1:ba01d90e2cc0d4f5 shadow=1:ba01d90e2cc0d4f5 indirect=1:ba01d90e2cc0d4f5 +geom 1: material #1 Signature { kind: "MaterialX", cutout: false, straight: false, boundary: false, emits: false, uv: true, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:910eeb9b40238145 camera=1:910eeb9b40238145 shadow=1:910eeb9b40238145 indirect=1:910eeb9b40238145 +geom 2: material #2 Signature { kind: "MaterialX", cutout: false, straight: false, boundary: false, emits: false, uv: true, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:ee76fd7ed45c4a85 camera=1:ee76fd7ed45c4a85 shadow=1:ee76fd7ed45c4a85 indirect=1:ee76fd7ed45c4a85 +geom 3: material #3 Signature { kind: "UsdPreviewSurface (textured)", cutout: false, straight: false, boundary: false, emits: false, uv: true, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv Some(0) shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:6787da8eacebee45 camera=2:6787da8eacebee45 shadow=2:6787da8eacebee45 indirect=2:6787da8eacebee45 +geom 4: material #4 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:7812e24c7b4d4335 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=2:7812e24c7b4d4335 +provenance material /World/Looks/Base: MaterialOrigin { slots: [1], displaced: false } +provenance material /World/Looks/Derived: MaterialOrigin { slots: [0], displaced: false } +provenance material /World/Looks/Std: MaterialOrigin { slots: [2], displaced: false } +provenance material /World/Looks/Tex: MaterialOrigin { slots: [3], displaced: false } +provenance material read: ("/World/Looks/Base", "/World/Looks/Derived") +provenance material read: ("/World/Looks/Base/Surface", "/World/Looks/Derived") +provenance arc source: /World/Looks/Base +provenance arc source: /World/Looks/Base/Surface +provenance light /World/Key: LightOrigin { index: 0, geoms: 4..5 } +provenance light /World/Sky: LightOrigin { index: 1, geoms: 5..5 } +provenance geometry 0..1: /World/Right +provenance geometry 1..2: /World/Left +provenance geometry 2..3: /World/Ball +provenance geometry 3..4: /World/Floor +provenance geometry 4..5: /World/Key +provenance mesh: MeshOrigin { geom_id: 3, slot: 0, baked: true, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 9851181043634021438, n_points: 4, n_indices: 4, n_uvs: Some(4), smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [0, 1, 2] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: true }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/World/Cam"), cameras: ["/World/Cam"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/World/Cam"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/full_undo_sampler_usda-0d28664679d41bef-1.image b/crates/crust-core/tests/data/import_baselines/full_undo_sampler_usda-0d28664679d41bef-1.image new file mode 100644 index 000000000..7a2e4cc59 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/full_undo_sampler_usda-0d28664679d41bef-1.image @@ -0,0 +1 @@ +48x32 16spp clamp-off 650d02711795ba6e diff --git a/crates/crust-core/tests/data/import_baselines/full_undo_shutter_close_usda-f7c724218b21e98a-1.digest b/crates/crust-core/tests/data/import_baselines/full_undo_shutter_close_usda-f7c724218b21e98a-1.digest new file mode 100644 index 000000000..f1d87266b --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/full_undo_shutter_close_usda-f7c724218b21e98a-1.digest @@ -0,0 +1,21 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/World/Cam") +camera: Camera { origin: Vec3A(0.0, 0.0, 6.0), lower_left_corner: Vec3A(-4.7783756, -3.1855836, -4.0), horizontal: Vec3A(9.556751, 0.0, 0.0), vertical: Vec3A(0.0, 6.371167, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: Some("/Render/settings") +settings: RenderSettings { samples_per_pixel: 128, max_depth: 2, width: 48, height: 32, region: PixelRect { x0: 0, y0: 0, x1: 48, y1: 32 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 2.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 24.0, aperture: [20.955, 15.2908], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 10.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/full_undo_shutter_close.usda", "$DIR/input.usda"], invisible_overrides: Some(0) } +layer: $DIR/full_undo_shutter_close.usda +layer: $DIR/input.usda +lights: 1 +light 0: distant name Some("/World/Sun") lpe None pmf 1.0 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 1 geometries, PrimitiveBreakdown { triangles: 0, spheres: 1, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 0, spheres: 1, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:984632b55acb5495 camera=1:984632b55acb5495 shadow=1:984632b55acb5495 indirect=1:984632b55acb5495 +provenance light /World/Sun: LightOrigin { index: 0, geoms: 1..1 } +provenance geometry 0..1: /World/Mover +provenance spheres: [0] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: true }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/World/Cam"), cameras: ["/World/Cam"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/World/Cam"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/full_undo_shutter_close_usda-f7c724218b21e98a-1.image b/crates/crust-core/tests/data/import_baselines/full_undo_shutter_close_usda-f7c724218b21e98a-1.image new file mode 100644 index 000000000..79bc428f3 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/full_undo_shutter_close_usda-f7c724218b21e98a-1.image @@ -0,0 +1 @@ +48x32 16spp clamp-off 0956f9aa6aa6e7f9 diff --git a/crates/crust-core/tests/data/import_baselines/full_undo_texture_file_usda-d5aef4a622503f01-1.digest b/crates/crust-core/tests/data/import_baselines/full_undo_texture_file_usda-d5aef4a622503f01-1.digest new file mode 100644 index 000000000..983c220d9 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/full_undo_texture_file_usda-d5aef4a622503f01-1.digest @@ -0,0 +1,41 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/World/Cam") +camera: Camera { origin: Vec3A(0.0, 1.0, 6.0), lower_left_corner: Vec3A(-4.7783756, -2.1855836, -4.0), horizontal: Vec3A(9.556751, 0.0, 0.0), vertical: Vec3A(0.0, 6.371167, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: Some("/Render/settings") +settings: RenderSettings { samples_per_pixel: 128, max_depth: 2, width: 48, height: 32, region: PixelRect { x0: 0, y0: 0, x1: 48, y1: 32 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: PmjBn, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 2.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 24.0, aperture: [20.955, 15.2908], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 10.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/full_undo_texture_file.usda", "$DIR/stage.usda"], invisible_overrides: Some(0) } +layer: $DIR/full_undo_texture_file.usda +layer: $DIR/stage.usda +lights: 2 +light 0: area name Some("/World/Key") lpe None pmf 0.5 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 1: dome name Some("/World/Sky") lpe None pmf 0.5 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 5 geometries, PrimitiveBreakdown { triangles: 4, spheres: 3, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 4, spheres: 3, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +geom 0: material #0 Signature { kind: "MaterialX", cutout: false, straight: false, boundary: false, emits: false, uv: true, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:ba01d90e2cc0d4f5 camera=1:ba01d90e2cc0d4f5 shadow=1:ba01d90e2cc0d4f5 indirect=1:ba01d90e2cc0d4f5 +geom 1: material #1 Signature { kind: "MaterialX", cutout: false, straight: false, boundary: false, emits: false, uv: true, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:910eeb9b40238145 camera=1:910eeb9b40238145 shadow=1:910eeb9b40238145 indirect=1:910eeb9b40238145 +geom 2: material #2 Signature { kind: "MaterialX", cutout: false, straight: false, boundary: false, emits: false, uv: true, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:ee76fd7ed45c4a85 camera=1:ee76fd7ed45c4a85 shadow=1:ee76fd7ed45c4a85 indirect=1:ee76fd7ed45c4a85 +geom 3: material #3 Signature { kind: "UsdPreviewSurface (textured)", cutout: false, straight: false, boundary: false, emits: false, uv: true, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv Some(0) shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:6787da8eacebee45 camera=2:6787da8eacebee45 shadow=2:6787da8eacebee45 indirect=2:6787da8eacebee45 +geom 4: material #4 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:7812e24c7b4d4335 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=2:7812e24c7b4d4335 +provenance material /World/Looks/Base: MaterialOrigin { slots: [1], displaced: false } +provenance material /World/Looks/Derived: MaterialOrigin { slots: [0], displaced: false } +provenance material /World/Looks/Std: MaterialOrigin { slots: [2], displaced: false } +provenance material /World/Looks/Tex: MaterialOrigin { slots: [3], displaced: false } +provenance material read: ("/World/Looks/Base", "/World/Looks/Derived") +provenance material read: ("/World/Looks/Base/Surface", "/World/Looks/Derived") +provenance arc source: /World/Looks/Base +provenance arc source: /World/Looks/Base/Surface +provenance light /World/Key: LightOrigin { index: 0, geoms: 4..5 } +provenance light /World/Sky: LightOrigin { index: 1, geoms: 5..5 } +provenance geometry 0..1: /World/Right +provenance geometry 1..2: /World/Left +provenance geometry 2..3: /World/Ball +provenance geometry 3..4: /World/Floor +provenance geometry 4..5: /World/Key +provenance mesh: MeshOrigin { geom_id: 3, slot: 0, baked: true, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 9851181043634021438, n_points: 4, n_indices: 4, n_uvs: Some(4), smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [0, 1, 2] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: true }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/World/Cam"), cameras: ["/World/Cam"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/World/Cam"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/full_undo_texture_file_usda-d5aef4a622503f01-1.image b/crates/crust-core/tests/data/import_baselines/full_undo_texture_file_usda-d5aef4a622503f01-1.image new file mode 100644 index 000000000..990c78f2e --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/full_undo_texture_file_usda-d5aef4a622503f01-1.image @@ -0,0 +1 @@ +48x32 16spp clamp-off c7129f3efaf88dda diff --git a/crates/crust-core/tests/data/import_baselines/full_undo_the_product_retarget_usda-1e1edebd41fde9bc-1.digest b/crates/crust-core/tests/data/import_baselines/full_undo_the_product_retarget_usda-1e1edebd41fde9bc-1.digest new file mode 100644 index 000000000..fa0bd821e --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/full_undo_the_product_retarget_usda-1e1edebd41fde9bc-1.digest @@ -0,0 +1,29 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/World/Cam") +camera: Camera { origin: Vec3A(0.0, 0.5, 6.0), lower_left_corner: Vec3A(-4.7783756, -2.6855836, -4.0), horizontal: Vec3A(9.556751, 0.0, 0.0), vertical: Vec3A(0.0, 6.371167, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: Some("/Render/settings") +settings: RenderSettings { samples_per_pixel: 128, max_depth: 2, width: 48, height: 32, region: PixelRect { x0: 0, y0: 0, x1: 48, y1: 32 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [AovProduct { prim_path: "/Render/beauty", name: "beauty.exr", vars: [AovVar { prim_path: "/Render/C", name: "C", channel_prefix: None, source: Color, components: 3, precision: Float, accumulation: Filtered, clear: 0.0, expression: None, raw: false, variance: false }], attributes: [] }], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 24.0, aperture: [20.955, 15.2908], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 10.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/full_undo_the_product_retarget.usda", "$DIR/input.usda"], invisible_overrides: Some(0) } +layer: $DIR/full_undo_the_product_retarget.usda +layer: $DIR/input.usda +lights: 2 +light 0: distant name Some("/World/Sun") lpe None pmf 0.5 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 1: dome name Some("/World/Sky") lpe None pmf 0.5 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 2 geometries, PrimitiveBreakdown { triangles: 4, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 4, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:0e0a4667da70ad35 camera=2:0e0a4667da70ad35 shadow=2:0e0a4667da70ad35 indirect=2:0e0a4667da70ad35 +geom 1: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:6787da8eacebee45 camera=2:6787da8eacebee45 shadow=2:6787da8eacebee45 indirect=2:6787da8eacebee45 +provenance light /World/Sky: LightOrigin { index: 1, geoms: 2..2 } +provenance light /World/Sun: LightOrigin { index: 0, geoms: 2..2 } +provenance geometry 0..1: /World/Card +provenance geometry 1..2: /World/Floor +provenance mesh: MeshOrigin { geom_id: 0, slot: 0, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 1, slot: 1, baked: true, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 18358658470076285213, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 1: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 800109031887815527, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: true }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/World/Cam"), cameras: ["/World/Cam2", "/World/Cam"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/World/Cam"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/full_undo_the_product_retarget_usda-1e1edebd41fde9bc-1.image b/crates/crust-core/tests/data/import_baselines/full_undo_the_product_retarget_usda-1e1edebd41fde9bc-1.image new file mode 100644 index 000000000..aa809d36e --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/full_undo_the_product_retarget_usda-1e1edebd41fde9bc-1.image @@ -0,0 +1 @@ +48x32 16spp clamp-off 8505746c918f1879 diff --git a/crates/crust-core/tests/data/import_baselines/full_undo_the_reset_usda-7e7c9dbebb517c2f-1.digest b/crates/crust-core/tests/data/import_baselines/full_undo_the_reset_usda-7e7c9dbebb517c2f-1.digest new file mode 100644 index 000000000..b5576391e --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/full_undo_the_reset_usda-7e7c9dbebb517c2f-1.digest @@ -0,0 +1,29 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/World/Cam") +camera: Camera { origin: Vec3A(0.5, 0.9, 6.0), lower_left_corner: Vec3A(-4.2783756, -2.2855835, -4.0), horizontal: Vec3A(9.556751, 0.0, 0.0), vertical: Vec3A(0.0, 6.371167, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: Some("/Render/settings") +settings: RenderSettings { samples_per_pixel: 128, max_depth: 2, width: 48, height: 32, region: PixelRect { x0: 0, y0: 0, x1: 48, y1: 32 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 24.0, aperture: [20.955, 15.2908], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 10.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/full_undo_the_reset.usda", "$DIR/input.usda"], invisible_overrides: Some(0) } +layer: $DIR/full_undo_the_reset.usda +layer: $DIR/input.usda +lights: 2 +light 0: distant name Some("/World/Sun") lpe None pmf 0.5 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 1: dome name Some("/World/Sky") lpe None pmf 0.5 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 2 geometries, PrimitiveBreakdown { triangles: 4, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 4, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:e7e3ae7da8a1689e camera=2:e7e3ae7da8a1689e shadow=2:e7e3ae7da8a1689e indirect=2:e7e3ae7da8a1689e +geom 1: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:50023872345aeae9 camera=2:50023872345aeae9 shadow=2:50023872345aeae9 indirect=2:50023872345aeae9 +provenance light /World/Sky: LightOrigin { index: 1, geoms: 2..2 } +provenance light /World/Sun: LightOrigin { index: 0, geoms: 2..2 } +provenance geometry 0..1: /World/Card +provenance geometry 1..2: /World/Floor +provenance mesh: MeshOrigin { geom_id: 0, slot: 0, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 1, slot: 1, baked: true, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 18358658470076285213, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 1: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 800109031887815527, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: true }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/World/Cam"), cameras: ["/World/Cam"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/World/Cam"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/full_undo_the_reset_usda-7e7c9dbebb517c2f-1.image b/crates/crust-core/tests/data/import_baselines/full_undo_the_reset_usda-7e7c9dbebb517c2f-1.image new file mode 100644 index 000000000..aa809d36e --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/full_undo_the_reset_usda-7e7c9dbebb517c2f-1.image @@ -0,0 +1 @@ +48x32 16spp clamp-off 8505746c918f1879 diff --git a/crates/crust-core/tests/data/import_baselines/full_undo_the_rotate_usda-c1aa90b58073a573-1.digest b/crates/crust-core/tests/data/import_baselines/full_undo_the_rotate_usda-c1aa90b58073a573-1.digest new file mode 100644 index 000000000..91b9aa621 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/full_undo_the_rotate_usda-c1aa90b58073a573-1.digest @@ -0,0 +1,29 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/World/Cam") +camera: Camera { origin: Vec3A(0.3, 0.6, 5.5), lower_left_corner: Vec3A(-4.4783754, -2.5855837, -4.5), horizontal: Vec3A(9.556751, 0.0, 0.0), vertical: Vec3A(0.0, 6.371167, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: Some("/Render/settings") +settings: RenderSettings { samples_per_pixel: 128, max_depth: 2, width: 48, height: 32, region: PixelRect { x0: 0, y0: 0, x1: 48, y1: 32 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 24.0, aperture: [20.955, 15.2908], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 10.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/full_undo_the_rotate.usda", "$DIR/input.usda"], invisible_overrides: Some(0) } +layer: $DIR/full_undo_the_rotate.usda +layer: $DIR/input.usda +lights: 2 +light 0: distant name Some("/World/Sun") lpe None pmf 0.5 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 1: dome name Some("/World/Sky") lpe None pmf 0.5 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 2 geometries, PrimitiveBreakdown { triangles: 4, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 4, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:0e0a4667da70ad35 camera=2:0e0a4667da70ad35 shadow=2:0e0a4667da70ad35 indirect=2:0e0a4667da70ad35 +geom 1: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:6787da8eacebee45 camera=2:6787da8eacebee45 shadow=2:6787da8eacebee45 indirect=2:6787da8eacebee45 +provenance light /World/Sky: LightOrigin { index: 1, geoms: 2..2 } +provenance light /World/Sun: LightOrigin { index: 0, geoms: 2..2 } +provenance geometry 0..1: /World/Card +provenance geometry 1..2: /World/Floor +provenance mesh: MeshOrigin { geom_id: 0, slot: 0, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 1, slot: 1, baked: true, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 18358658470076285213, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 1: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 800109031887815527, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: true }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/World/Cam"), cameras: ["/World/Cam"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/World/Cam"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/full_undo_the_rotate_usda-c1aa90b58073a573-1.image b/crates/crust-core/tests/data/import_baselines/full_undo_the_rotate_usda-c1aa90b58073a573-1.image new file mode 100644 index 000000000..b35cd56af --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/full_undo_the_rotate_usda-c1aa90b58073a573-1.image @@ -0,0 +1 @@ +48x32 16spp clamp-off c831c2dcae9ba81d diff --git a/crates/crust-core/tests/data/import_baselines/full_undone_after_reload_usda-b19199733b99fec2-1.digest b/crates/crust-core/tests/data/import_baselines/full_undone_after_reload_usda-b19199733b99fec2-1.digest new file mode 100644 index 000000000..eb8d7bba3 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/full_undone_after_reload_usda-b19199733b99fec2-1.digest @@ -0,0 +1,35 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/World/Cam") +camera: Camera { origin: Vec3A(0.0, 1.0, 6.0), lower_left_corner: Vec3A(-4.7783756, -2.1855836, -4.0), horizontal: Vec3A(9.556751, 0.0, 0.0), vertical: Vec3A(0.0, 6.371167, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: Some("/Render/settings") +settings: RenderSettings { samples_per_pixel: 128, max_depth: 4, width: 48, height: 32, region: PixelRect { x0: 0, y0: 0, x1: 48, y1: 32 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 24.0, aperture: [20.955, 15.2908], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 10.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/full_undone_after_reload.usda", "$DIR/shot.usda", "$DIR/lights.usda"], invisible_overrides: Some(0) } +layer: $DIR/full_undone_after_reload.usda +layer: $DIR/lights.usda +layer: $DIR/pay.usda +layer: $DIR/prop.usda +layer: $DIR/shot.usda +lights: 2 +light 0: dome name Some("/World/Sky") lpe None pmf 0.5 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 1: area name Some("/World/Key") lpe None pmf 0.5 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 3 geometries, PrimitiveBreakdown { triangles: 2, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 2 } top level, PrimitiveBreakdown { triangles: 4, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 2 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:6f550ecd4f901d05 camera=2:6f550ecd4f901d05 shadow=2:6f550ecd4f901d05 indirect=2:6f550ecd4f901d05 +geom 1: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:6f550ecd4f901d05 camera=2:6f550ecd4f901d05 shadow=2:6f550ecd4f901d05 indirect=2:6f550ecd4f901d05 +geom 2: material #1 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:7812e24c7b4d4335 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=2:7812e24c7b4d4335 +provenance arc source: /Pay +provenance arc source: /Prop +provenance light /World/Key: LightOrigin { index: 1, geoms: 2..3 } +provenance light /World/Sky: LightOrigin { index: 0, geoms: 2..2 } +provenance geometry 0..1: /World/Heavy +provenance geometry 1..2: /World/Prop +provenance geometry 2..3: /World/Key +provenance mesh: MeshOrigin { geom_id: 0, slot: 0, baked: false, moving: false } +provenance mesh: MeshOrigin { geom_id: 1, slot: 0, baked: false, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 6610719295604273699, n_points: 4, n_indices: 4, n_uvs: None, smooth: true, material: 0 }), placements: 2, shared: false, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: true }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/World/Cam"), cameras: ["/World/Cam"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/World/Cam"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/full_undone_after_reload_usda-b19199733b99fec2-1.image b/crates/crust-core/tests/data/import_baselines/full_undone_after_reload_usda-b19199733b99fec2-1.image new file mode 100644 index 000000000..569cd2ee9 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/full_undone_after_reload_usda-b19199733b99fec2-1.image @@ -0,0 +1 @@ +48x32 16spp clamp-off 0a5bf65444923e88 diff --git a/crates/crust-core/tests/data/import_baselines/furnace_ball_usda-54ac5243ee332532-1.digest b/crates/crust-core/tests/data/import_baselines/furnace_ball_usda-54ac5243ee332532-1.digest new file mode 100644 index 000000000..261a738ea --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/furnace_ball_usda-54ac5243ee332532-1.digest @@ -0,0 +1,25 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: None +camera: Camera { origin: Vec3A(15.0, 3.0, 3.0), lower_left_corner: Vec3A(4.8863316, -0.044797063, 4.174048), horizontal: Vec3A(1.2295314, 0.0, -6.147657), vertical: Vec3A(-0.44830504, 3.4967792, -0.08966101), u: Vec3A(0.19611613, 0.0, -0.9805807), v: Vec3A(-0.1271232, 0.991561, -0.02542464), lens_radius: 0.05, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: None +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 640, height: 360, region: PixelRect { x0: 0, y0: 0, x1: 640, y1: 360 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: None, depth_of_field: true, motion_blur: false, layer_stack: ["$DIR/furnace_ball.usda"], invisible_overrides: Some(0) } +layer: $DIR/furnace_ball.usda +warning: Warning { code: CameraMissing, kind: Skipped, count: 1, prims: [], message: "USD stage has no UsdGeomCamera — falling back to world::get_settings camera" } +lights: 1 +light 0: dome name Some("/World/Sky") lpe None pmf 1.0 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 2 geometries, PrimitiveBreakdown { triangles: 0, spheres: 2, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 0, spheres: 2, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +geom 0: material #0 Signature { kind: "MaterialX", cutout: false, straight: false, boundary: false, emits: false, uv: true, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:daf815b22e8106b9 camera=1:daf815b22e8106b9 shadow=1:daf815b22e8106b9 indirect=1:daf815b22e8106b9 +geom 1: material #1 Signature { kind: "MaterialX", cutout: false, straight: false, boundary: true, emits: false, uv: true, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:d5fa2ac5108a1585 camera=1:d5fa2ac5108a1585 shadow=1:d5fa2ac5108a1585 indirect=1:d5fa2ac5108a1585 +provenance material /World/Looks/Fog: MaterialOrigin { slots: [1], displaced: false } +provenance material /World/Looks/White: MaterialOrigin { slots: [0], displaced: false } +provenance light /World/Sky: LightOrigin { index: 0, geoms: 0..0 } +provenance geometry 0..1: /World/Geo/Ball +provenance geometry 1..2: /World/Geo/Haze +provenance spheres: [0, 1] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: None, cameras: [], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: None, offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/furnace_ball_usda-54ac5243ee332532-1.image b/crates/crust-core/tests/data/import_baselines/furnace_ball_usda-54ac5243ee332532-1.image new file mode 100644 index 000000000..fb6010473 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/furnace_ball_usda-54ac5243ee332532-1.image @@ -0,0 +1 @@ +640x360 16spp clamp-off b937cc926f9c9d43 diff --git a/crates/crust-core/tests/data/import_baselines/furnace_usda-bbc6fe1cb946780f-1.digest b/crates/crust-core/tests/data/import_baselines/furnace_usda-bbc6fe1cb946780f-1.digest new file mode 100644 index 000000000..7f75ad665 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/furnace_usda-bbc6fe1cb946780f-1.digest @@ -0,0 +1,22 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: None +camera: Camera { origin: Vec3A(15.0, 3.0, 3.0), lower_left_corner: Vec3A(4.8863316, -0.044797063, 4.174048), horizontal: Vec3A(1.2295314, 0.0, -6.147657), vertical: Vec3A(-0.44830504, 3.4967792, -0.08966101), u: Vec3A(0.19611613, 0.0, -0.9805807), v: Vec3A(-0.1271232, 0.991561, -0.02542464), lens_radius: 0.05, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: None +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 640, height: 360, region: PixelRect { x0: 0, y0: 0, x1: 640, y1: 360 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: None, depth_of_field: true, motion_blur: false, layer_stack: ["$DIR/furnace.usda"], invisible_overrides: Some(0) } +layer: $DIR/furnace.usda +warning: Warning { code: CameraMissing, kind: Skipped, count: 1, prims: [], message: "USD stage has no UsdGeomCamera — falling back to world::get_settings camera" } +lights: 1 +light 0: dome name Some("/World/Sky") lpe None pmf 1.0 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 1 geometries, PrimitiveBreakdown { triangles: 0, spheres: 1, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 0, spheres: 1, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +geom 0: material #0 Signature { kind: "MaterialX", cutout: false, straight: false, boundary: true, emits: false, uv: true, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:fb1e7d48790aec95 camera=1:fb1e7d48790aec95 shadow=1:fb1e7d48790aec95 indirect=1:fb1e7d48790aec95 +provenance material /World/Fog: MaterialOrigin { slots: [0], displaced: false } +provenance light /World/Sky: LightOrigin { index: 0, geoms: 0..0 } +provenance geometry 0..1: /World/Ball +provenance spheres: [0] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: None, cameras: [], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: None, offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/furnace_usda-bbc6fe1cb946780f-1.image b/crates/crust-core/tests/data/import_baselines/furnace_usda-bbc6fe1cb946780f-1.image new file mode 100644 index 000000000..7affe4a04 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/furnace_usda-bbc6fe1cb946780f-1.image @@ -0,0 +1 @@ +640x360 16spp clamp-off ba2760d3ba163bec diff --git a/crates/crust-core/tests/data/import_baselines/fvar_bilinear_usda-8ca893f677c91586-1.digest b/crates/crust-core/tests/data/import_baselines/fvar_bilinear_usda-8ca893f677c91586-1.digest new file mode 100644 index 000000000..2181c94bd --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/fvar_bilinear_usda-8ca893f677c91586-1.digest @@ -0,0 +1,22 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/World/cam") +camera: Camera { origin: Vec3A(0.0, 0.0, 10.0), lower_left_corner: Vec3A(-2.0955, -1.5716249, 0.0), horizontal: Vec3A(4.191, 0.0, 0.0), vertical: Vec3A(0.0, 3.1432498, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: Some("/Render/settings") +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 48, height: 36, region: PixelRect { x0: 0, y0: 0, x1: 48, y1: 36 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [AovProduct { prim_path: "/Render/p", name: "p.exr", vars: [AovVar { prim_path: "/Render/P", name: "P", channel_prefix: None, source: P, components: 3, precision: Float, accumulation: Closest, clear: 0.0, expression: None, raw: false, variance: false }, AovVar { prim_path: "/Render/xy", name: "xy", channel_prefix: None, source: Primvar(PrimvarSource { index: 0, components: 2, role: TexCoord }), components: 2, precision: Float, accumulation: Closest, clear: 0.0, expression: None, raw: false, variance: false }], attributes: [] }], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 50.0, aperture: [20.955, 15.2908], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 10.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/fvar_bilinear.usda"], invisible_overrides: Some(0) } +layer: $DIR/fvar_bilinear.usda +lights: 1 +light 0: dome name Some("/World/dome") lpe None pmf 1.0 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 1 geometries, PrimitiveBreakdown { triangles: 192, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 192, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov Some((Some(0), false)) swapped false curves false scale 1.0 motion [] pieces all=192:ff2e46f3016d142d camera=192:ff2e46f3016d142d shadow=192:ff2e46f3016d142d indirect=192:ff2e46f3016d142d +provenance light /World/dome: LightOrigin { index: 0, geoms: 1..1 } +provenance geometry 0..1: /World/cube +provenance mesh: MeshOrigin { geom_id: 0, slot: 0, baked: true, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 17387146745673654341, n_points: 98, n_indices: 384, n_uvs: None, smooth: true, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 2, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/World/cam"), cameras: ["/World/cam"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [("xy", 2)], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/World/cam"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/fvar_bilinear_usda-8ca893f677c91586-1.image b/crates/crust-core/tests/data/import_baselines/fvar_bilinear_usda-8ca893f677c91586-1.image new file mode 100644 index 000000000..6d06e5018 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/fvar_bilinear_usda-8ca893f677c91586-1.image @@ -0,0 +1 @@ +48x36 16spp clamp-off efadd6e696ce03d6 diff --git a/crates/crust-core/tests/data/import_baselines/fvar_loop_usda-855199bacac38db5-1.digest b/crates/crust-core/tests/data/import_baselines/fvar_loop_usda-855199bacac38db5-1.digest new file mode 100644 index 000000000..fd5077f98 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/fvar_loop_usda-855199bacac38db5-1.digest @@ -0,0 +1,22 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/World/cam") +camera: Camera { origin: Vec3A(0.0, 0.0, 10.0), lower_left_corner: Vec3A(-2.0955, -1.5716249, 0.0), horizontal: Vec3A(4.191, 0.0, 0.0), vertical: Vec3A(0.0, 3.1432498, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: Some("/Render/settings") +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 48, height: 36, region: PixelRect { x0: 0, y0: 0, x1: 48, y1: 36 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [AovProduct { prim_path: "/Render/p", name: "p.exr", vars: [AovVar { prim_path: "/Render/P", name: "P", channel_prefix: None, source: P, components: 3, precision: Float, accumulation: Closest, clear: 0.0, expression: None, raw: false, variance: false }, AovVar { prim_path: "/Render/xy", name: "xy", channel_prefix: None, source: Primvar(PrimvarSource { index: 0, components: 2, role: TexCoord }), components: 2, precision: Float, accumulation: Closest, clear: 0.0, expression: None, raw: false, variance: false }], attributes: [] }], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 50.0, aperture: [20.955, 15.2908], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 10.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/fvar_loop.usda"], invisible_overrides: Some(0) } +layer: $DIR/fvar_loop.usda +lights: 1 +light 0: dome name Some("/World/dome") lpe None pmf 1.0 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 1 geometries, PrimitiveBreakdown { triangles: 128, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 128, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov Some((Some(0), false)) swapped false curves false scale 1.0 motion [] pieces all=128:92e706974a651d05 camera=128:92e706974a651d05 shadow=128:92e706974a651d05 indirect=128:92e706974a651d05 +provenance light /World/dome: LightOrigin { index: 0, geoms: 1..1 } +provenance geometry 0..1: /World/octa +provenance mesh: MeshOrigin { geom_id: 0, slot: 0, baked: true, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 7831137738973469772, n_points: 66, n_indices: 384, n_uvs: None, smooth: true, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 2, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/World/cam"), cameras: ["/World/cam"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [("xy", 2)], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/World/cam"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/fvar_loop_usda-855199bacac38db5-1.image b/crates/crust-core/tests/data/import_baselines/fvar_loop_usda-855199bacac38db5-1.image new file mode 100644 index 000000000..a2eecad9d --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/fvar_loop_usda-855199bacac38db5-1.image @@ -0,0 +1 @@ +48x36 16spp clamp-off c6767216609b1ec9 diff --git a/crates/crust-core/tests/data/import_baselines/geometry_usda-3299cf85fca858a4-1.digest b/crates/crust-core/tests/data/import_baselines/geometry_usda-3299cf85fca858a4-1.digest new file mode 100644 index 000000000..603c846dc --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/geometry_usda-3299cf85fca858a4-1.digest @@ -0,0 +1,19 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/World/cam") +camera: Camera { origin: Vec3A(0.0, 0.0, 0.0), lower_left_corner: Vec3A(-2.7183647, -1.5290802, -10.0), horizontal: Vec3A(5.4367294, 0.0, 0.0), vertical: Vec3A(0.0, 3.0581603, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: None +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 640, height: 360, region: PixelRect { x0: 0, y0: 0, x1: 640, y1: 360 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 50.0, aperture: [20.955, 15.2908], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 10.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/geometry.usda"], invisible_overrides: Some(0) } +layer: $DIR/geometry.usda +warning: Warning { code: XformUnknownOp, kind: Approximated, count: 1, prims: ["/World/odd"], message: "/World/odd: xformOpOrder lists xformOp:frobnicate — not a UsdGeomXformOp kind, read as identity" } +warning: Warning { code: CurvesUnsupportedBasis, kind: Skipped, count: 1, prims: ["/World/hair"], message: "BasisCurves at /World/hair: basis \"hermite\" is not supported (bezier | bspline | catmullRom) — skipped" } +warning: Warning { code: VolumeUnknownType, kind: Skipped, count: 1, prims: ["/World/fog"], message: "Volume at /World/fog: unknown crust:volume:type \"plasma\" (expected homogeneous | smoke | grid) — skipped" } +lights: 0 +volumes: 0 +world: 0 geometries, PrimitiveBreakdown { triangles: 0, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 0, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/World/cam"), cameras: ["/World/cam"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/World/cam"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/geometry_usda-3299cf85fca858a4-1.image b/crates/crust-core/tests/data/import_baselines/geometry_usda-3299cf85fca858a4-1.image new file mode 100644 index 000000000..c734c5b1d --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/geometry_usda-3299cf85fca858a4-1.image @@ -0,0 +1 @@ +640x360 16spp clamp-off a04a09c0d4b5e325 diff --git a/crates/crust-core/tests/data/import_baselines/glass_usda-6ef57f18257a3d7a-1.digest b/crates/crust-core/tests/data/import_baselines/glass_usda-6ef57f18257a3d7a-1.digest new file mode 100644 index 000000000..f1d227da2 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/glass_usda-6ef57f18257a3d7a-1.digest @@ -0,0 +1,20 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: None +camera: Camera { origin: Vec3A(15.0, 3.0, 3.0), lower_left_corner: Vec3A(4.8863316, -0.044797063, 4.174048), horizontal: Vec3A(1.2295314, 0.0, -6.147657), vertical: Vec3A(-0.44830504, 3.4967792, -0.08966101), u: Vec3A(0.19611613, 0.0, -0.9805807), v: Vec3A(-0.1271232, 0.991561, -0.02542464), lens_radius: 0.05, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: None +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 640, height: 360, region: PixelRect { x0: 0, y0: 0, x1: 640, y1: 360 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: None, depth_of_field: true, motion_blur: false, layer_stack: ["$DIR/glass.usda"], invisible_overrides: Some(0) } +layer: $DIR/glass.usda +warning: Warning { code: CameraMissing, kind: Skipped, count: 1, prims: [], message: "USD stage has no UsdGeomCamera — falling back to world::get_settings camera" } +lights: 0 +volumes: 0 +world: 1 geometries, PrimitiveBreakdown { triangles: 0, spheres: 1, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 0, spheres: 1, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +geom 0: material #0 Signature { kind: "MaterialX", cutout: false, straight: true, boundary: false, emits: false, uv: true, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:fb1e7d48790aec95 camera=1:fb1e7d48790aec95 shadow=1:fb1e7d48790aec95 indirect=1:fb1e7d48790aec95 +provenance material /World/Glass: MaterialOrigin { slots: [0], displaced: false } +provenance geometry 0..1: /World/Ball +provenance spheres: [0] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: None, cameras: [], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: None, offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/glass_usda-6ef57f18257a3d7a-1.image b/crates/crust-core/tests/data/import_baselines/glass_usda-6ef57f18257a3d7a-1.image new file mode 100644 index 000000000..c734c5b1d --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/glass_usda-6ef57f18257a3d7a-1.image @@ -0,0 +1 @@ +640x360 16spp clamp-off a04a09c0d4b5e325 diff --git a/crates/crust-core/tests/data/import_baselines/glossy_sphere_bsdf_false_1_usda-8cc43a3f4dae46fb-1.digest b/crates/crust-core/tests/data/import_baselines/glossy_sphere_bsdf_false_1_usda-8cc43a3f4dae46fb-1.digest new file mode 100644 index 000000000..b2391e41f --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/glossy_sphere_bsdf_false_1_usda-8cc43a3f4dae46fb-1.digest @@ -0,0 +1,27 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/World/Cam") +camera: Camera { origin: Vec3A(0.0, 5.0, 6.0), lower_left_corner: Vec3A(-2.0000002, -2.9376645, -0.40261602), horizontal: Vec3A(4.0000005, -0.0, 0.0), vertical: Vec3A(0.0, 3.0731347, -2.560439), u: Vec3A(1.0, -0.0, 0.0), v: Vec3A(0.0, 0.76828355, -0.6401097), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: Some("/Render/settings") +settings: RenderSettings { samples_per_pixel: 64, max_depth: 2, width: 16, height: 16, region: PixelRect { x0: 0, y0: 0, x1: 16, y1: 16 }, min_samples_per_pixel: 64, variance_threshold: 0.0, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: BsdfOnly, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: None, light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 50.0, aperture: [20.0, 20.0], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 10.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/glossy_sphere_bsdf_false_1.usda"], invisible_overrides: Some(0) } +layer: $DIR/glossy_sphere_bsdf_false_1.usda +lights: 1 +light 0: area name Some("/World/Key") lpe None pmf 1.0 shadow RayMask(2) restricted true nee-only false twinned true gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 3 geometries, PrimitiveBreakdown { triangles: 2, spheres: 2, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 2, spheres: 2, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:e6e23411748a6d98 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=1:e6e23411748a6d98 +geom 1: material #1 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:ca080854f0bf27b5 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=1:ca080854f0bf27b5 +geom 2: material #2 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:fce6de5b675a55c5 camera=2:fce6de5b675a55c5 shadow=2:fce6de5b675a55c5 indirect=2:fce6de5b675a55c5 +provenance material /World/Metal: MaterialOrigin { slots: [2], displaced: false } +provenance light /World/Key: LightOrigin { index: 0, geoms: 1..2 } +provenance geometry 0..1: /World/Blocker +provenance geometry 1..2: /World/Key +provenance geometry 2..3: /World/Floor +provenance mesh: MeshOrigin { geom_id: 2, slot: 0, baked: true, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 14903623499644419787, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [0] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/World/Cam"), cameras: ["/World/Cam"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/World/Cam"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/glossy_sphere_bsdf_false_1_usda-8cc43a3f4dae46fb-1.image b/crates/crust-core/tests/data/import_baselines/glossy_sphere_bsdf_false_1_usda-8cc43a3f4dae46fb-1.image new file mode 100644 index 000000000..ceb94c2d9 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/glossy_sphere_bsdf_false_1_usda-8cc43a3f4dae46fb-1.image @@ -0,0 +1 @@ +16x16 16spp clamp-off f8983a52f2ec7248 diff --git a/crates/crust-core/tests/data/import_baselines/glossy_sphere_bsdf_false_2_usda-ff99772c18e0997c-1.digest b/crates/crust-core/tests/data/import_baselines/glossy_sphere_bsdf_false_2_usda-ff99772c18e0997c-1.digest new file mode 100644 index 000000000..24e68e7da --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/glossy_sphere_bsdf_false_2_usda-ff99772c18e0997c-1.digest @@ -0,0 +1,27 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/World/Cam") +camera: Camera { origin: Vec3A(0.0, 5.0, 6.0), lower_left_corner: Vec3A(-2.0000002, -2.9376645, -0.40261602), horizontal: Vec3A(4.0000005, -0.0, 0.0), vertical: Vec3A(0.0, 3.0731347, -2.560439), u: Vec3A(1.0, -0.0, 0.0), v: Vec3A(0.0, 0.76828355, -0.6401097), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: Some("/Render/settings") +settings: RenderSettings { samples_per_pixel: 64, max_depth: 2, width: 16, height: 16, region: PixelRect { x0: 0, y0: 0, x1: 16, y1: 16 }, min_samples_per_pixel: 64, variance_threshold: 0.0, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: BsdfOnly, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: None, light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 50.0, aperture: [20.0, 20.0], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 10.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/glossy_sphere_bsdf_false_2.usda"], invisible_overrides: Some(0) } +layer: $DIR/glossy_sphere_bsdf_false_2.usda +lights: 1 +light 0: area name Some("/World/Key") lpe None pmf 1.0 shadow RayMask(2) restricted true nee-only false twinned true gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 3 geometries, PrimitiveBreakdown { triangles: 2, spheres: 2, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 2, spheres: 2, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:e6e23411748a6d98 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=1:e6e23411748a6d98 +geom 1: material #1 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:ca080854f0bf27b5 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=1:ca080854f0bf27b5 +geom 2: material #2 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:fce6de5b675a55c5 camera=2:fce6de5b675a55c5 shadow=2:fce6de5b675a55c5 indirect=2:fce6de5b675a55c5 +provenance material /World/Metal: MaterialOrigin { slots: [2], displaced: false } +provenance light /World/Key: LightOrigin { index: 0, geoms: 1..2 } +provenance geometry 0..1: /World/Blocker +provenance geometry 1..2: /World/Key +provenance geometry 2..3: /World/Floor +provenance mesh: MeshOrigin { geom_id: 2, slot: 0, baked: true, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 14903623499644419787, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [0] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/World/Cam"), cameras: ["/World/Cam"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/World/Cam"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/glossy_sphere_bsdf_false_2_usda-ff99772c18e0997c-1.image b/crates/crust-core/tests/data/import_baselines/glossy_sphere_bsdf_false_2_usda-ff99772c18e0997c-1.image new file mode 100644 index 000000000..ceb94c2d9 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/glossy_sphere_bsdf_false_2_usda-ff99772c18e0997c-1.image @@ -0,0 +1 @@ +16x16 16spp clamp-off f8983a52f2ec7248 diff --git a/crates/crust-core/tests/data/import_baselines/glossy_sphere_bsdf_false_3_usda-8c8e2079502f800d-1.digest b/crates/crust-core/tests/data/import_baselines/glossy_sphere_bsdf_false_3_usda-8c8e2079502f800d-1.digest new file mode 100644 index 000000000..19e716bb6 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/glossy_sphere_bsdf_false_3_usda-8c8e2079502f800d-1.digest @@ -0,0 +1,27 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/World/Cam") +camera: Camera { origin: Vec3A(0.0, 5.0, 6.0), lower_left_corner: Vec3A(-2.0000002, -2.9376645, -0.40261602), horizontal: Vec3A(4.0000005, -0.0, 0.0), vertical: Vec3A(0.0, 3.0731347, -2.560439), u: Vec3A(1.0, -0.0, 0.0), v: Vec3A(0.0, 0.76828355, -0.6401097), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: Some("/Render/settings") +settings: RenderSettings { samples_per_pixel: 64, max_depth: 2, width: 16, height: 16, region: PixelRect { x0: 0, y0: 0, x1: 16, y1: 16 }, min_samples_per_pixel: 64, variance_threshold: 0.0, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: BsdfOnly, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: None, light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 50.0, aperture: [20.0, 20.0], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 10.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/glossy_sphere_bsdf_false_3.usda"], invisible_overrides: Some(0) } +layer: $DIR/glossy_sphere_bsdf_false_3.usda +lights: 1 +light 0: area name Some("/World/Key") lpe None pmf 1.0 shadow RayMask(2) restricted true nee-only false twinned true gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 3 geometries, PrimitiveBreakdown { triangles: 2, spheres: 2, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 2, spheres: 2, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:e6e23411748a6d98 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=1:e6e23411748a6d98 +geom 1: material #1 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:ca080854f0bf27b5 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=1:ca080854f0bf27b5 +geom 2: material #2 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:fce6de5b675a55c5 camera=2:fce6de5b675a55c5 shadow=2:fce6de5b675a55c5 indirect=2:fce6de5b675a55c5 +provenance material /World/Metal: MaterialOrigin { slots: [2], displaced: false } +provenance light /World/Key: LightOrigin { index: 0, geoms: 1..2 } +provenance geometry 0..1: /World/Blocker +provenance geometry 1..2: /World/Key +provenance geometry 2..3: /World/Floor +provenance mesh: MeshOrigin { geom_id: 2, slot: 0, baked: true, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 14903623499644419787, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [0] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/World/Cam"), cameras: ["/World/Cam"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/World/Cam"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/glossy_sphere_bsdf_false_3_usda-8c8e2079502f800d-1.image b/crates/crust-core/tests/data/import_baselines/glossy_sphere_bsdf_false_3_usda-8c8e2079502f800d-1.image new file mode 100644 index 000000000..ceb94c2d9 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/glossy_sphere_bsdf_false_3_usda-8c8e2079502f800d-1.image @@ -0,0 +1 @@ +16x16 16spp clamp-off f8983a52f2ec7248 diff --git a/crates/crust-core/tests/data/import_baselines/glossy_sphere_bsdf_false_4_usda-76914e768885b3e6-1.digest b/crates/crust-core/tests/data/import_baselines/glossy_sphere_bsdf_false_4_usda-76914e768885b3e6-1.digest new file mode 100644 index 000000000..ccfa5381d --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/glossy_sphere_bsdf_false_4_usda-76914e768885b3e6-1.digest @@ -0,0 +1,27 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/World/Cam") +camera: Camera { origin: Vec3A(0.0, 5.0, 6.0), lower_left_corner: Vec3A(-2.0000002, -2.9376645, -0.40261602), horizontal: Vec3A(4.0000005, -0.0, 0.0), vertical: Vec3A(0.0, 3.0731347, -2.560439), u: Vec3A(1.0, -0.0, 0.0), v: Vec3A(0.0, 0.76828355, -0.6401097), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: Some("/Render/settings") +settings: RenderSettings { samples_per_pixel: 64, max_depth: 2, width: 16, height: 16, region: PixelRect { x0: 0, y0: 0, x1: 16, y1: 16 }, min_samples_per_pixel: 64, variance_threshold: 0.0, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: BsdfOnly, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: None, light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 50.0, aperture: [20.0, 20.0], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 10.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/glossy_sphere_bsdf_false_4.usda"], invisible_overrides: Some(0) } +layer: $DIR/glossy_sphere_bsdf_false_4.usda +lights: 1 +light 0: area name Some("/World/Key") lpe None pmf 1.0 shadow RayMask(2) restricted true nee-only false twinned true gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 3 geometries, PrimitiveBreakdown { triangles: 2, spheres: 2, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 2, spheres: 2, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:e6e23411748a6d98 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=1:e6e23411748a6d98 +geom 1: material #1 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:ca080854f0bf27b5 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=1:ca080854f0bf27b5 +geom 2: material #2 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:fce6de5b675a55c5 camera=2:fce6de5b675a55c5 shadow=2:fce6de5b675a55c5 indirect=2:fce6de5b675a55c5 +provenance material /World/Metal: MaterialOrigin { slots: [2], displaced: false } +provenance light /World/Key: LightOrigin { index: 0, geoms: 1..2 } +provenance geometry 0..1: /World/Blocker +provenance geometry 1..2: /World/Key +provenance geometry 2..3: /World/Floor +provenance mesh: MeshOrigin { geom_id: 2, slot: 0, baked: true, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 14903623499644419787, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [0] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/World/Cam"), cameras: ["/World/Cam"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/World/Cam"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/glossy_sphere_bsdf_false_4_usda-76914e768885b3e6-1.image b/crates/crust-core/tests/data/import_baselines/glossy_sphere_bsdf_false_4_usda-76914e768885b3e6-1.image new file mode 100644 index 000000000..ceb94c2d9 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/glossy_sphere_bsdf_false_4_usda-76914e768885b3e6-1.image @@ -0,0 +1 @@ +16x16 16spp clamp-off f8983a52f2ec7248 diff --git a/crates/crust-core/tests/data/import_baselines/glossy_sphere_light_false_1_usda-7fde13de0abc769b-1.digest b/crates/crust-core/tests/data/import_baselines/glossy_sphere_light_false_1_usda-7fde13de0abc769b-1.digest new file mode 100644 index 000000000..05c655811 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/glossy_sphere_light_false_1_usda-7fde13de0abc769b-1.digest @@ -0,0 +1,27 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/World/Cam") +camera: Camera { origin: Vec3A(0.0, 5.0, 6.0), lower_left_corner: Vec3A(-2.0000002, -2.9376645, -0.40261602), horizontal: Vec3A(4.0000005, -0.0, 0.0), vertical: Vec3A(0.0, 3.0731347, -2.560439), u: Vec3A(1.0, -0.0, 0.0), v: Vec3A(0.0, 0.76828355, -0.6401097), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: Some("/Render/settings") +settings: RenderSettings { samples_per_pixel: 64, max_depth: 2, width: 16, height: 16, region: PixelRect { x0: 0, y0: 0, x1: 16, y1: 16 }, min_samples_per_pixel: 64, variance_threshold: 0.0, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: LightOnly, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: None, light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 50.0, aperture: [20.0, 20.0], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 10.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/glossy_sphere_light_false_1.usda"], invisible_overrides: Some(0) } +layer: $DIR/glossy_sphere_light_false_1.usda +lights: 1 +light 0: area name Some("/World/Key") lpe None pmf 1.0 shadow RayMask(2) restricted true nee-only false twinned true gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 3 geometries, PrimitiveBreakdown { triangles: 2, spheres: 2, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 2, spheres: 2, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:e6e23411748a6d98 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=1:e6e23411748a6d98 +geom 1: material #1 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:ca080854f0bf27b5 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=1:ca080854f0bf27b5 +geom 2: material #2 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:fce6de5b675a55c5 camera=2:fce6de5b675a55c5 shadow=2:fce6de5b675a55c5 indirect=2:fce6de5b675a55c5 +provenance material /World/Metal: MaterialOrigin { slots: [2], displaced: false } +provenance light /World/Key: LightOrigin { index: 0, geoms: 1..2 } +provenance geometry 0..1: /World/Blocker +provenance geometry 1..2: /World/Key +provenance geometry 2..3: /World/Floor +provenance mesh: MeshOrigin { geom_id: 2, slot: 0, baked: true, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 14903623499644419787, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [0] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/World/Cam"), cameras: ["/World/Cam"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/World/Cam"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/glossy_sphere_light_false_1_usda-7fde13de0abc769b-1.image b/crates/crust-core/tests/data/import_baselines/glossy_sphere_light_false_1_usda-7fde13de0abc769b-1.image new file mode 100644 index 000000000..2aeb04a01 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/glossy_sphere_light_false_1_usda-7fde13de0abc769b-1.image @@ -0,0 +1 @@ +16x16 16spp clamp-off f994e3bc623bc22a diff --git a/crates/crust-core/tests/data/import_baselines/glossy_sphere_light_false_2_usda-58c418a757f93b46-1.digest b/crates/crust-core/tests/data/import_baselines/glossy_sphere_light_false_2_usda-58c418a757f93b46-1.digest new file mode 100644 index 000000000..ad74a7cac --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/glossy_sphere_light_false_2_usda-58c418a757f93b46-1.digest @@ -0,0 +1,27 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/World/Cam") +camera: Camera { origin: Vec3A(0.0, 5.0, 6.0), lower_left_corner: Vec3A(-2.0000002, -2.9376645, -0.40261602), horizontal: Vec3A(4.0000005, -0.0, 0.0), vertical: Vec3A(0.0, 3.0731347, -2.560439), u: Vec3A(1.0, -0.0, 0.0), v: Vec3A(0.0, 0.76828355, -0.6401097), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: Some("/Render/settings") +settings: RenderSettings { samples_per_pixel: 64, max_depth: 2, width: 16, height: 16, region: PixelRect { x0: 0, y0: 0, x1: 16, y1: 16 }, min_samples_per_pixel: 64, variance_threshold: 0.0, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: LightOnly, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: None, light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 50.0, aperture: [20.0, 20.0], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 10.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/glossy_sphere_light_false_2.usda"], invisible_overrides: Some(0) } +layer: $DIR/glossy_sphere_light_false_2.usda +lights: 1 +light 0: area name Some("/World/Key") lpe None pmf 1.0 shadow RayMask(2) restricted true nee-only false twinned true gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 3 geometries, PrimitiveBreakdown { triangles: 2, spheres: 2, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 2, spheres: 2, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:e6e23411748a6d98 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=1:e6e23411748a6d98 +geom 1: material #1 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:ca080854f0bf27b5 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=1:ca080854f0bf27b5 +geom 2: material #2 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:fce6de5b675a55c5 camera=2:fce6de5b675a55c5 shadow=2:fce6de5b675a55c5 indirect=2:fce6de5b675a55c5 +provenance material /World/Metal: MaterialOrigin { slots: [2], displaced: false } +provenance light /World/Key: LightOrigin { index: 0, geoms: 1..2 } +provenance geometry 0..1: /World/Blocker +provenance geometry 1..2: /World/Key +provenance geometry 2..3: /World/Floor +provenance mesh: MeshOrigin { geom_id: 2, slot: 0, baked: true, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 14903623499644419787, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [0] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/World/Cam"), cameras: ["/World/Cam"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/World/Cam"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/glossy_sphere_light_false_2_usda-58c418a757f93b46-1.image b/crates/crust-core/tests/data/import_baselines/glossy_sphere_light_false_2_usda-58c418a757f93b46-1.image new file mode 100644 index 000000000..2aeb04a01 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/glossy_sphere_light_false_2_usda-58c418a757f93b46-1.image @@ -0,0 +1 @@ +16x16 16spp clamp-off f994e3bc623bc22a diff --git a/crates/crust-core/tests/data/import_baselines/glossy_sphere_light_false_3_usda-0e4d0c5d73f098b1-1.digest b/crates/crust-core/tests/data/import_baselines/glossy_sphere_light_false_3_usda-0e4d0c5d73f098b1-1.digest new file mode 100644 index 000000000..f744ca02a --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/glossy_sphere_light_false_3_usda-0e4d0c5d73f098b1-1.digest @@ -0,0 +1,27 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/World/Cam") +camera: Camera { origin: Vec3A(0.0, 5.0, 6.0), lower_left_corner: Vec3A(-2.0000002, -2.9376645, -0.40261602), horizontal: Vec3A(4.0000005, -0.0, 0.0), vertical: Vec3A(0.0, 3.0731347, -2.560439), u: Vec3A(1.0, -0.0, 0.0), v: Vec3A(0.0, 0.76828355, -0.6401097), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: Some("/Render/settings") +settings: RenderSettings { samples_per_pixel: 64, max_depth: 2, width: 16, height: 16, region: PixelRect { x0: 0, y0: 0, x1: 16, y1: 16 }, min_samples_per_pixel: 64, variance_threshold: 0.0, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: LightOnly, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: None, light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 50.0, aperture: [20.0, 20.0], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 10.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/glossy_sphere_light_false_3.usda"], invisible_overrides: Some(0) } +layer: $DIR/glossy_sphere_light_false_3.usda +lights: 1 +light 0: area name Some("/World/Key") lpe None pmf 1.0 shadow RayMask(2) restricted true nee-only false twinned true gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 3 geometries, PrimitiveBreakdown { triangles: 2, spheres: 2, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 2, spheres: 2, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:e6e23411748a6d98 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=1:e6e23411748a6d98 +geom 1: material #1 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:ca080854f0bf27b5 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=1:ca080854f0bf27b5 +geom 2: material #2 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:fce6de5b675a55c5 camera=2:fce6de5b675a55c5 shadow=2:fce6de5b675a55c5 indirect=2:fce6de5b675a55c5 +provenance material /World/Metal: MaterialOrigin { slots: [2], displaced: false } +provenance light /World/Key: LightOrigin { index: 0, geoms: 1..2 } +provenance geometry 0..1: /World/Blocker +provenance geometry 1..2: /World/Key +provenance geometry 2..3: /World/Floor +provenance mesh: MeshOrigin { geom_id: 2, slot: 0, baked: true, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 14903623499644419787, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [0] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/World/Cam"), cameras: ["/World/Cam"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/World/Cam"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/glossy_sphere_light_false_3_usda-0e4d0c5d73f098b1-1.image b/crates/crust-core/tests/data/import_baselines/glossy_sphere_light_false_3_usda-0e4d0c5d73f098b1-1.image new file mode 100644 index 000000000..2aeb04a01 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/glossy_sphere_light_false_3_usda-0e4d0c5d73f098b1-1.image @@ -0,0 +1 @@ +16x16 16spp clamp-off f994e3bc623bc22a diff --git a/crates/crust-core/tests/data/import_baselines/glossy_sphere_light_false_4_usda-db6287c220d2329c-1.digest b/crates/crust-core/tests/data/import_baselines/glossy_sphere_light_false_4_usda-db6287c220d2329c-1.digest new file mode 100644 index 000000000..a6d479d81 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/glossy_sphere_light_false_4_usda-db6287c220d2329c-1.digest @@ -0,0 +1,27 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/World/Cam") +camera: Camera { origin: Vec3A(0.0, 5.0, 6.0), lower_left_corner: Vec3A(-2.0000002, -2.9376645, -0.40261602), horizontal: Vec3A(4.0000005, -0.0, 0.0), vertical: Vec3A(0.0, 3.0731347, -2.560439), u: Vec3A(1.0, -0.0, 0.0), v: Vec3A(0.0, 0.76828355, -0.6401097), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: Some("/Render/settings") +settings: RenderSettings { samples_per_pixel: 64, max_depth: 2, width: 16, height: 16, region: PixelRect { x0: 0, y0: 0, x1: 16, y1: 16 }, min_samples_per_pixel: 64, variance_threshold: 0.0, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: LightOnly, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: None, light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 50.0, aperture: [20.0, 20.0], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 10.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/glossy_sphere_light_false_4.usda"], invisible_overrides: Some(0) } +layer: $DIR/glossy_sphere_light_false_4.usda +lights: 1 +light 0: area name Some("/World/Key") lpe None pmf 1.0 shadow RayMask(2) restricted true nee-only false twinned true gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 3 geometries, PrimitiveBreakdown { triangles: 2, spheres: 2, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 2, spheres: 2, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:e6e23411748a6d98 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=1:e6e23411748a6d98 +geom 1: material #1 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:ca080854f0bf27b5 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=1:ca080854f0bf27b5 +geom 2: material #2 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:fce6de5b675a55c5 camera=2:fce6de5b675a55c5 shadow=2:fce6de5b675a55c5 indirect=2:fce6de5b675a55c5 +provenance material /World/Metal: MaterialOrigin { slots: [2], displaced: false } +provenance light /World/Key: LightOrigin { index: 0, geoms: 1..2 } +provenance geometry 0..1: /World/Blocker +provenance geometry 1..2: /World/Key +provenance geometry 2..3: /World/Floor +provenance mesh: MeshOrigin { geom_id: 2, slot: 0, baked: true, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 14903623499644419787, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [0] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/World/Cam"), cameras: ["/World/Cam"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/World/Cam"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/glossy_sphere_light_false_4_usda-db6287c220d2329c-1.image b/crates/crust-core/tests/data/import_baselines/glossy_sphere_light_false_4_usda-db6287c220d2329c-1.image new file mode 100644 index 000000000..2aeb04a01 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/glossy_sphere_light_false_4_usda-db6287c220d2329c-1.image @@ -0,0 +1 @@ +16x16 16spp clamp-off f994e3bc623bc22a diff --git a/crates/crust-core/tests/data/import_baselines/glossy_sphere_light_true_1_usda-da25e07b06740551-1.digest b/crates/crust-core/tests/data/import_baselines/glossy_sphere_light_true_1_usda-da25e07b06740551-1.digest new file mode 100644 index 000000000..3a55ee414 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/glossy_sphere_light_true_1_usda-da25e07b06740551-1.digest @@ -0,0 +1,27 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/World/Cam") +camera: Camera { origin: Vec3A(0.0, 5.0, 6.0), lower_left_corner: Vec3A(-2.0000002, -2.9376645, -0.40261602), horizontal: Vec3A(4.0000005, -0.0, 0.0), vertical: Vec3A(0.0, 3.0731347, -2.560439), u: Vec3A(1.0, -0.0, 0.0), v: Vec3A(0.0, 0.76828355, -0.6401097), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: Some("/Render/settings") +settings: RenderSettings { samples_per_pixel: 64, max_depth: 2, width: 16, height: 16, region: PixelRect { x0: 0, y0: 0, x1: 16, y1: 16 }, min_samples_per_pixel: 64, variance_threshold: 0.0, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: LightOnly, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: None, light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 50.0, aperture: [20.0, 20.0], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 10.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/glossy_sphere_light_true_1.usda"], invisible_overrides: Some(0) } +layer: $DIR/glossy_sphere_light_true_1.usda +lights: 1 +light 0: area name Some("/World/Key") lpe None pmf 1.0 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 3 geometries, PrimitiveBreakdown { triangles: 2, spheres: 2, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 2, spheres: 2, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:e6e23411748a6d98 camera=0:cbf29ce484222325 shadow=1:e6e23411748a6d98 indirect=1:e6e23411748a6d98 +geom 1: material #1 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:ca080854f0bf27b5 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=1:ca080854f0bf27b5 +geom 2: material #2 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:fce6de5b675a55c5 camera=2:fce6de5b675a55c5 shadow=2:fce6de5b675a55c5 indirect=2:fce6de5b675a55c5 +provenance material /World/Metal: MaterialOrigin { slots: [2], displaced: false } +provenance light /World/Key: LightOrigin { index: 0, geoms: 1..2 } +provenance geometry 0..1: /World/Blocker +provenance geometry 1..2: /World/Key +provenance geometry 2..3: /World/Floor +provenance mesh: MeshOrigin { geom_id: 2, slot: 0, baked: true, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 14903623499644419787, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [0] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/World/Cam"), cameras: ["/World/Cam"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/World/Cam"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/glossy_sphere_light_true_1_usda-da25e07b06740551-1.image b/crates/crust-core/tests/data/import_baselines/glossy_sphere_light_true_1_usda-da25e07b06740551-1.image new file mode 100644 index 000000000..6e3d6c696 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/glossy_sphere_light_true_1_usda-da25e07b06740551-1.image @@ -0,0 +1 @@ +16x16 16spp clamp-off beeb101beb583943 diff --git a/crates/crust-core/tests/data/import_baselines/glossy_sphere_light_true_2_usda-ddbe5a176c05cba2-1.digest b/crates/crust-core/tests/data/import_baselines/glossy_sphere_light_true_2_usda-ddbe5a176c05cba2-1.digest new file mode 100644 index 000000000..51aa27631 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/glossy_sphere_light_true_2_usda-ddbe5a176c05cba2-1.digest @@ -0,0 +1,27 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/World/Cam") +camera: Camera { origin: Vec3A(0.0, 5.0, 6.0), lower_left_corner: Vec3A(-2.0000002, -2.9376645, -0.40261602), horizontal: Vec3A(4.0000005, -0.0, 0.0), vertical: Vec3A(0.0, 3.0731347, -2.560439), u: Vec3A(1.0, -0.0, 0.0), v: Vec3A(0.0, 0.76828355, -0.6401097), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: Some("/Render/settings") +settings: RenderSettings { samples_per_pixel: 64, max_depth: 2, width: 16, height: 16, region: PixelRect { x0: 0, y0: 0, x1: 16, y1: 16 }, min_samples_per_pixel: 64, variance_threshold: 0.0, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: LightOnly, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: None, light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 50.0, aperture: [20.0, 20.0], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 10.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/glossy_sphere_light_true_2.usda"], invisible_overrides: Some(0) } +layer: $DIR/glossy_sphere_light_true_2.usda +lights: 1 +light 0: area name Some("/World/Key") lpe None pmf 1.0 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 3 geometries, PrimitiveBreakdown { triangles: 2, spheres: 2, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 2, spheres: 2, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:e6e23411748a6d98 camera=0:cbf29ce484222325 shadow=1:e6e23411748a6d98 indirect=1:e6e23411748a6d98 +geom 1: material #1 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:ca080854f0bf27b5 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=1:ca080854f0bf27b5 +geom 2: material #2 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:fce6de5b675a55c5 camera=2:fce6de5b675a55c5 shadow=2:fce6de5b675a55c5 indirect=2:fce6de5b675a55c5 +provenance material /World/Metal: MaterialOrigin { slots: [2], displaced: false } +provenance light /World/Key: LightOrigin { index: 0, geoms: 1..2 } +provenance geometry 0..1: /World/Blocker +provenance geometry 1..2: /World/Key +provenance geometry 2..3: /World/Floor +provenance mesh: MeshOrigin { geom_id: 2, slot: 0, baked: true, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 14903623499644419787, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [0] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/World/Cam"), cameras: ["/World/Cam"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/World/Cam"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/glossy_sphere_light_true_2_usda-ddbe5a176c05cba2-1.image b/crates/crust-core/tests/data/import_baselines/glossy_sphere_light_true_2_usda-ddbe5a176c05cba2-1.image new file mode 100644 index 000000000..6e3d6c696 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/glossy_sphere_light_true_2_usda-ddbe5a176c05cba2-1.image @@ -0,0 +1 @@ +16x16 16spp clamp-off beeb101beb583943 diff --git a/crates/crust-core/tests/data/import_baselines/glossy_sphere_light_true_3_usda-06ab9cf1d9f5303b-1.digest b/crates/crust-core/tests/data/import_baselines/glossy_sphere_light_true_3_usda-06ab9cf1d9f5303b-1.digest new file mode 100644 index 000000000..bb4c40118 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/glossy_sphere_light_true_3_usda-06ab9cf1d9f5303b-1.digest @@ -0,0 +1,27 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/World/Cam") +camera: Camera { origin: Vec3A(0.0, 5.0, 6.0), lower_left_corner: Vec3A(-2.0000002, -2.9376645, -0.40261602), horizontal: Vec3A(4.0000005, -0.0, 0.0), vertical: Vec3A(0.0, 3.0731347, -2.560439), u: Vec3A(1.0, -0.0, 0.0), v: Vec3A(0.0, 0.76828355, -0.6401097), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: Some("/Render/settings") +settings: RenderSettings { samples_per_pixel: 64, max_depth: 2, width: 16, height: 16, region: PixelRect { x0: 0, y0: 0, x1: 16, y1: 16 }, min_samples_per_pixel: 64, variance_threshold: 0.0, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: LightOnly, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: None, light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 50.0, aperture: [20.0, 20.0], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 10.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/glossy_sphere_light_true_3.usda"], invisible_overrides: Some(0) } +layer: $DIR/glossy_sphere_light_true_3.usda +lights: 1 +light 0: area name Some("/World/Key") lpe None pmf 1.0 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 3 geometries, PrimitiveBreakdown { triangles: 2, spheres: 2, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 2, spheres: 2, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:e6e23411748a6d98 camera=0:cbf29ce484222325 shadow=1:e6e23411748a6d98 indirect=1:e6e23411748a6d98 +geom 1: material #1 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:ca080854f0bf27b5 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=1:ca080854f0bf27b5 +geom 2: material #2 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:fce6de5b675a55c5 camera=2:fce6de5b675a55c5 shadow=2:fce6de5b675a55c5 indirect=2:fce6de5b675a55c5 +provenance material /World/Metal: MaterialOrigin { slots: [2], displaced: false } +provenance light /World/Key: LightOrigin { index: 0, geoms: 1..2 } +provenance geometry 0..1: /World/Blocker +provenance geometry 1..2: /World/Key +provenance geometry 2..3: /World/Floor +provenance mesh: MeshOrigin { geom_id: 2, slot: 0, baked: true, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 14903623499644419787, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [0] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/World/Cam"), cameras: ["/World/Cam"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/World/Cam"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/glossy_sphere_light_true_3_usda-06ab9cf1d9f5303b-1.image b/crates/crust-core/tests/data/import_baselines/glossy_sphere_light_true_3_usda-06ab9cf1d9f5303b-1.image new file mode 100644 index 000000000..6e3d6c696 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/glossy_sphere_light_true_3_usda-06ab9cf1d9f5303b-1.image @@ -0,0 +1 @@ +16x16 16spp clamp-off beeb101beb583943 diff --git a/crates/crust-core/tests/data/import_baselines/glossy_sphere_light_true_4_usda-bae142df171828c4-1.digest b/crates/crust-core/tests/data/import_baselines/glossy_sphere_light_true_4_usda-bae142df171828c4-1.digest new file mode 100644 index 000000000..55bdd67be --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/glossy_sphere_light_true_4_usda-bae142df171828c4-1.digest @@ -0,0 +1,27 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/World/Cam") +camera: Camera { origin: Vec3A(0.0, 5.0, 6.0), lower_left_corner: Vec3A(-2.0000002, -2.9376645, -0.40261602), horizontal: Vec3A(4.0000005, -0.0, 0.0), vertical: Vec3A(0.0, 3.0731347, -2.560439), u: Vec3A(1.0, -0.0, 0.0), v: Vec3A(0.0, 0.76828355, -0.6401097), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: Some("/Render/settings") +settings: RenderSettings { samples_per_pixel: 64, max_depth: 2, width: 16, height: 16, region: PixelRect { x0: 0, y0: 0, x1: 16, y1: 16 }, min_samples_per_pixel: 64, variance_threshold: 0.0, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: LightOnly, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: None, light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 50.0, aperture: [20.0, 20.0], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 10.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/glossy_sphere_light_true_4.usda"], invisible_overrides: Some(0) } +layer: $DIR/glossy_sphere_light_true_4.usda +lights: 1 +light 0: area name Some("/World/Key") lpe None pmf 1.0 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 3 geometries, PrimitiveBreakdown { triangles: 2, spheres: 2, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 2, spheres: 2, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:e6e23411748a6d98 camera=0:cbf29ce484222325 shadow=1:e6e23411748a6d98 indirect=1:e6e23411748a6d98 +geom 1: material #1 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:ca080854f0bf27b5 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=1:ca080854f0bf27b5 +geom 2: material #2 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:fce6de5b675a55c5 camera=2:fce6de5b675a55c5 shadow=2:fce6de5b675a55c5 indirect=2:fce6de5b675a55c5 +provenance material /World/Metal: MaterialOrigin { slots: [2], displaced: false } +provenance light /World/Key: LightOrigin { index: 0, geoms: 1..2 } +provenance geometry 0..1: /World/Blocker +provenance geometry 1..2: /World/Key +provenance geometry 2..3: /World/Floor +provenance mesh: MeshOrigin { geom_id: 2, slot: 0, baked: true, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 14903623499644419787, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [0] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/World/Cam"), cameras: ["/World/Cam"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/World/Cam"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/glossy_sphere_light_true_4_usda-bae142df171828c4-1.image b/crates/crust-core/tests/data/import_baselines/glossy_sphere_light_true_4_usda-bae142df171828c4-1.image new file mode 100644 index 000000000..6e3d6c696 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/glossy_sphere_light_true_4_usda-bae142df171828c4-1.image @@ -0,0 +1 @@ +16x16 16spp clamp-off beeb101beb583943 diff --git a/crates/crust-core/tests/data/import_baselines/glossy_sphere_power_false_1_usda-8463e7fa7c167c7f-1.digest b/crates/crust-core/tests/data/import_baselines/glossy_sphere_power_false_1_usda-8463e7fa7c167c7f-1.digest new file mode 100644 index 000000000..5eb54b705 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/glossy_sphere_power_false_1_usda-8463e7fa7c167c7f-1.digest @@ -0,0 +1,27 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/World/Cam") +camera: Camera { origin: Vec3A(0.0, 5.0, 6.0), lower_left_corner: Vec3A(-2.0000002, -2.9376645, -0.40261602), horizontal: Vec3A(4.0000005, -0.0, 0.0), vertical: Vec3A(0.0, 3.0731347, -2.560439), u: Vec3A(1.0, -0.0, 0.0), v: Vec3A(0.0, 0.76828355, -0.6401097), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: Some("/Render/settings") +settings: RenderSettings { samples_per_pixel: 64, max_depth: 2, width: 16, height: 16, region: PixelRect { x0: 0, y0: 0, x1: 16, y1: 16 }, min_samples_per_pixel: 64, variance_threshold: 0.0, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: None, light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 50.0, aperture: [20.0, 20.0], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 10.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/glossy_sphere_power_false_1.usda"], invisible_overrides: Some(0) } +layer: $DIR/glossy_sphere_power_false_1.usda +lights: 1 +light 0: area name Some("/World/Key") lpe None pmf 1.0 shadow RayMask(2) restricted true nee-only false twinned true gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 3 geometries, PrimitiveBreakdown { triangles: 2, spheres: 2, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 2, spheres: 2, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:e6e23411748a6d98 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=1:e6e23411748a6d98 +geom 1: material #1 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:ca080854f0bf27b5 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=1:ca080854f0bf27b5 +geom 2: material #2 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:fce6de5b675a55c5 camera=2:fce6de5b675a55c5 shadow=2:fce6de5b675a55c5 indirect=2:fce6de5b675a55c5 +provenance material /World/Metal: MaterialOrigin { slots: [2], displaced: false } +provenance light /World/Key: LightOrigin { index: 0, geoms: 1..2 } +provenance geometry 0..1: /World/Blocker +provenance geometry 1..2: /World/Key +provenance geometry 2..3: /World/Floor +provenance mesh: MeshOrigin { geom_id: 2, slot: 0, baked: true, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 14903623499644419787, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [0] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/World/Cam"), cameras: ["/World/Cam"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/World/Cam"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/glossy_sphere_power_false_1_usda-8463e7fa7c167c7f-1.image b/crates/crust-core/tests/data/import_baselines/glossy_sphere_power_false_1_usda-8463e7fa7c167c7f-1.image new file mode 100644 index 000000000..11aff8e3f --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/glossy_sphere_power_false_1_usda-8463e7fa7c167c7f-1.image @@ -0,0 +1 @@ +16x16 16spp clamp-off 284a0fc522983440 diff --git a/crates/crust-core/tests/data/import_baselines/glossy_sphere_power_false_2_usda-dcf0f8d60a6084ce-1.digest b/crates/crust-core/tests/data/import_baselines/glossy_sphere_power_false_2_usda-dcf0f8d60a6084ce-1.digest new file mode 100644 index 000000000..1938da6d6 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/glossy_sphere_power_false_2_usda-dcf0f8d60a6084ce-1.digest @@ -0,0 +1,27 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/World/Cam") +camera: Camera { origin: Vec3A(0.0, 5.0, 6.0), lower_left_corner: Vec3A(-2.0000002, -2.9376645, -0.40261602), horizontal: Vec3A(4.0000005, -0.0, 0.0), vertical: Vec3A(0.0, 3.0731347, -2.560439), u: Vec3A(1.0, -0.0, 0.0), v: Vec3A(0.0, 0.76828355, -0.6401097), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: Some("/Render/settings") +settings: RenderSettings { samples_per_pixel: 64, max_depth: 2, width: 16, height: 16, region: PixelRect { x0: 0, y0: 0, x1: 16, y1: 16 }, min_samples_per_pixel: 64, variance_threshold: 0.0, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: None, light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 50.0, aperture: [20.0, 20.0], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 10.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/glossy_sphere_power_false_2.usda"], invisible_overrides: Some(0) } +layer: $DIR/glossy_sphere_power_false_2.usda +lights: 1 +light 0: area name Some("/World/Key") lpe None pmf 1.0 shadow RayMask(2) restricted true nee-only false twinned true gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 3 geometries, PrimitiveBreakdown { triangles: 2, spheres: 2, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 2, spheres: 2, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:e6e23411748a6d98 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=1:e6e23411748a6d98 +geom 1: material #1 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:ca080854f0bf27b5 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=1:ca080854f0bf27b5 +geom 2: material #2 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:fce6de5b675a55c5 camera=2:fce6de5b675a55c5 shadow=2:fce6de5b675a55c5 indirect=2:fce6de5b675a55c5 +provenance material /World/Metal: MaterialOrigin { slots: [2], displaced: false } +provenance light /World/Key: LightOrigin { index: 0, geoms: 1..2 } +provenance geometry 0..1: /World/Blocker +provenance geometry 1..2: /World/Key +provenance geometry 2..3: /World/Floor +provenance mesh: MeshOrigin { geom_id: 2, slot: 0, baked: true, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 14903623499644419787, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [0] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/World/Cam"), cameras: ["/World/Cam"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/World/Cam"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/glossy_sphere_power_false_2_usda-dcf0f8d60a6084ce-1.image b/crates/crust-core/tests/data/import_baselines/glossy_sphere_power_false_2_usda-dcf0f8d60a6084ce-1.image new file mode 100644 index 000000000..11aff8e3f --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/glossy_sphere_power_false_2_usda-dcf0f8d60a6084ce-1.image @@ -0,0 +1 @@ +16x16 16spp clamp-off 284a0fc522983440 diff --git a/crates/crust-core/tests/data/import_baselines/glossy_sphere_power_false_3_usda-fedffe90ed130071-1.digest b/crates/crust-core/tests/data/import_baselines/glossy_sphere_power_false_3_usda-fedffe90ed130071-1.digest new file mode 100644 index 000000000..84cc01ec2 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/glossy_sphere_power_false_3_usda-fedffe90ed130071-1.digest @@ -0,0 +1,27 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/World/Cam") +camera: Camera { origin: Vec3A(0.0, 5.0, 6.0), lower_left_corner: Vec3A(-2.0000002, -2.9376645, -0.40261602), horizontal: Vec3A(4.0000005, -0.0, 0.0), vertical: Vec3A(0.0, 3.0731347, -2.560439), u: Vec3A(1.0, -0.0, 0.0), v: Vec3A(0.0, 0.76828355, -0.6401097), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: Some("/Render/settings") +settings: RenderSettings { samples_per_pixel: 64, max_depth: 2, width: 16, height: 16, region: PixelRect { x0: 0, y0: 0, x1: 16, y1: 16 }, min_samples_per_pixel: 64, variance_threshold: 0.0, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: None, light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 50.0, aperture: [20.0, 20.0], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 10.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/glossy_sphere_power_false_3.usda"], invisible_overrides: Some(0) } +layer: $DIR/glossy_sphere_power_false_3.usda +lights: 1 +light 0: area name Some("/World/Key") lpe None pmf 1.0 shadow RayMask(2) restricted true nee-only false twinned true gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 3 geometries, PrimitiveBreakdown { triangles: 2, spheres: 2, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 2, spheres: 2, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:e6e23411748a6d98 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=1:e6e23411748a6d98 +geom 1: material #1 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:ca080854f0bf27b5 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=1:ca080854f0bf27b5 +geom 2: material #2 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:fce6de5b675a55c5 camera=2:fce6de5b675a55c5 shadow=2:fce6de5b675a55c5 indirect=2:fce6de5b675a55c5 +provenance material /World/Metal: MaterialOrigin { slots: [2], displaced: false } +provenance light /World/Key: LightOrigin { index: 0, geoms: 1..2 } +provenance geometry 0..1: /World/Blocker +provenance geometry 1..2: /World/Key +provenance geometry 2..3: /World/Floor +provenance mesh: MeshOrigin { geom_id: 2, slot: 0, baked: true, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 14903623499644419787, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [0] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/World/Cam"), cameras: ["/World/Cam"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/World/Cam"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/glossy_sphere_power_false_3_usda-fedffe90ed130071-1.image b/crates/crust-core/tests/data/import_baselines/glossy_sphere_power_false_3_usda-fedffe90ed130071-1.image new file mode 100644 index 000000000..11aff8e3f --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/glossy_sphere_power_false_3_usda-fedffe90ed130071-1.image @@ -0,0 +1 @@ +16x16 16spp clamp-off 284a0fc522983440 diff --git a/crates/crust-core/tests/data/import_baselines/glossy_sphere_power_false_4_usda-654bf9f6d4073ca8-1.digest b/crates/crust-core/tests/data/import_baselines/glossy_sphere_power_false_4_usda-654bf9f6d4073ca8-1.digest new file mode 100644 index 000000000..f9a8c9be0 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/glossy_sphere_power_false_4_usda-654bf9f6d4073ca8-1.digest @@ -0,0 +1,27 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/World/Cam") +camera: Camera { origin: Vec3A(0.0, 5.0, 6.0), lower_left_corner: Vec3A(-2.0000002, -2.9376645, -0.40261602), horizontal: Vec3A(4.0000005, -0.0, 0.0), vertical: Vec3A(0.0, 3.0731347, -2.560439), u: Vec3A(1.0, -0.0, 0.0), v: Vec3A(0.0, 0.76828355, -0.6401097), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: Some("/Render/settings") +settings: RenderSettings { samples_per_pixel: 64, max_depth: 2, width: 16, height: 16, region: PixelRect { x0: 0, y0: 0, x1: 16, y1: 16 }, min_samples_per_pixel: 64, variance_threshold: 0.0, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: None, light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 50.0, aperture: [20.0, 20.0], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 10.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/glossy_sphere_power_false_4.usda"], invisible_overrides: Some(0) } +layer: $DIR/glossy_sphere_power_false_4.usda +lights: 1 +light 0: area name Some("/World/Key") lpe None pmf 1.0 shadow RayMask(2) restricted true nee-only false twinned true gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 3 geometries, PrimitiveBreakdown { triangles: 2, spheres: 2, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 2, spheres: 2, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:e6e23411748a6d98 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=1:e6e23411748a6d98 +geom 1: material #1 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:ca080854f0bf27b5 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=1:ca080854f0bf27b5 +geom 2: material #2 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:fce6de5b675a55c5 camera=2:fce6de5b675a55c5 shadow=2:fce6de5b675a55c5 indirect=2:fce6de5b675a55c5 +provenance material /World/Metal: MaterialOrigin { slots: [2], displaced: false } +provenance light /World/Key: LightOrigin { index: 0, geoms: 1..2 } +provenance geometry 0..1: /World/Blocker +provenance geometry 1..2: /World/Key +provenance geometry 2..3: /World/Floor +provenance mesh: MeshOrigin { geom_id: 2, slot: 0, baked: true, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 14903623499644419787, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [0] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/World/Cam"), cameras: ["/World/Cam"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/World/Cam"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/glossy_sphere_power_false_4_usda-654bf9f6d4073ca8-1.image b/crates/crust-core/tests/data/import_baselines/glossy_sphere_power_false_4_usda-654bf9f6d4073ca8-1.image new file mode 100644 index 000000000..11aff8e3f --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/glossy_sphere_power_false_4_usda-654bf9f6d4073ca8-1.image @@ -0,0 +1 @@ +16x16 16spp clamp-off 284a0fc522983440 diff --git a/crates/crust-core/tests/data/import_baselines/glossy_sun_bsdf_false_1_usda-5434dbae8c19939f-1.digest b/crates/crust-core/tests/data/import_baselines/glossy_sun_bsdf_false_1_usda-5434dbae8c19939f-1.digest new file mode 100644 index 000000000..0d357f25d --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/glossy_sun_bsdf_false_1_usda-5434dbae8c19939f-1.digest @@ -0,0 +1,25 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/World/Cam") +camera: Camera { origin: Vec3A(0.0, 5.0, 6.0), lower_left_corner: Vec3A(-2.0000002, -2.9376645, -0.40261602), horizontal: Vec3A(4.0000005, -0.0, 0.0), vertical: Vec3A(0.0, 3.0731347, -2.560439), u: Vec3A(1.0, -0.0, 0.0), v: Vec3A(0.0, 0.76828355, -0.6401097), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: Some("/Render/settings") +settings: RenderSettings { samples_per_pixel: 64, max_depth: 2, width: 16, height: 16, region: PixelRect { x0: 0, y0: 0, x1: 16, y1: 16 }, min_samples_per_pixel: 64, variance_threshold: 0.0, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: BsdfOnly, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: None, light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 50.0, aperture: [20.0, 20.0], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 10.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/glossy_sun_bsdf_false_1.usda"], invisible_overrides: Some(0) } +layer: $DIR/glossy_sun_bsdf_false_1.usda +lights: 1 +light 0: distant name Some("/World/Key") lpe None pmf 1.0 shadow RayMask(2) restricted true nee-only false twinned true gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 2 geometries, PrimitiveBreakdown { triangles: 2, spheres: 1, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 2, spheres: 1, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:e6e23411748a6d98 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=1:e6e23411748a6d98 +geom 1: material #1 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:fce6de5b675a55c5 camera=2:fce6de5b675a55c5 shadow=2:fce6de5b675a55c5 indirect=2:fce6de5b675a55c5 +provenance material /World/Metal: MaterialOrigin { slots: [1], displaced: false } +provenance light /World/Key: LightOrigin { index: 0, geoms: 1..1 } +provenance geometry 0..1: /World/Blocker +provenance geometry 1..2: /World/Floor +provenance mesh: MeshOrigin { geom_id: 1, slot: 0, baked: true, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 14903623499644419787, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [0] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/World/Cam"), cameras: ["/World/Cam"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/World/Cam"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/glossy_sun_bsdf_false_1_usda-5434dbae8c19939f-1.image b/crates/crust-core/tests/data/import_baselines/glossy_sun_bsdf_false_1_usda-5434dbae8c19939f-1.image new file mode 100644 index 000000000..1b3ec996a --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/glossy_sun_bsdf_false_1_usda-5434dbae8c19939f-1.image @@ -0,0 +1 @@ +16x16 16spp clamp-off 46b9b601936d068e diff --git a/crates/crust-core/tests/data/import_baselines/glossy_sun_bsdf_false_2_usda-bb9d9ab32ead4e0e-1.digest b/crates/crust-core/tests/data/import_baselines/glossy_sun_bsdf_false_2_usda-bb9d9ab32ead4e0e-1.digest new file mode 100644 index 000000000..c62a031b2 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/glossy_sun_bsdf_false_2_usda-bb9d9ab32ead4e0e-1.digest @@ -0,0 +1,25 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/World/Cam") +camera: Camera { origin: Vec3A(0.0, 5.0, 6.0), lower_left_corner: Vec3A(-2.0000002, -2.9376645, -0.40261602), horizontal: Vec3A(4.0000005, -0.0, 0.0), vertical: Vec3A(0.0, 3.0731347, -2.560439), u: Vec3A(1.0, -0.0, 0.0), v: Vec3A(0.0, 0.76828355, -0.6401097), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: Some("/Render/settings") +settings: RenderSettings { samples_per_pixel: 64, max_depth: 2, width: 16, height: 16, region: PixelRect { x0: 0, y0: 0, x1: 16, y1: 16 }, min_samples_per_pixel: 64, variance_threshold: 0.0, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: BsdfOnly, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: None, light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 50.0, aperture: [20.0, 20.0], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 10.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/glossy_sun_bsdf_false_2.usda"], invisible_overrides: Some(0) } +layer: $DIR/glossy_sun_bsdf_false_2.usda +lights: 1 +light 0: distant name Some("/World/Key") lpe None pmf 1.0 shadow RayMask(2) restricted true nee-only false twinned true gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 2 geometries, PrimitiveBreakdown { triangles: 2, spheres: 1, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 2, spheres: 1, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:e6e23411748a6d98 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=1:e6e23411748a6d98 +geom 1: material #1 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:fce6de5b675a55c5 camera=2:fce6de5b675a55c5 shadow=2:fce6de5b675a55c5 indirect=2:fce6de5b675a55c5 +provenance material /World/Metal: MaterialOrigin { slots: [1], displaced: false } +provenance light /World/Key: LightOrigin { index: 0, geoms: 1..1 } +provenance geometry 0..1: /World/Blocker +provenance geometry 1..2: /World/Floor +provenance mesh: MeshOrigin { geom_id: 1, slot: 0, baked: true, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 14903623499644419787, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [0] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/World/Cam"), cameras: ["/World/Cam"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/World/Cam"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/glossy_sun_bsdf_false_2_usda-bb9d9ab32ead4e0e-1.image b/crates/crust-core/tests/data/import_baselines/glossy_sun_bsdf_false_2_usda-bb9d9ab32ead4e0e-1.image new file mode 100644 index 000000000..1b3ec996a --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/glossy_sun_bsdf_false_2_usda-bb9d9ab32ead4e0e-1.image @@ -0,0 +1 @@ +16x16 16spp clamp-off 46b9b601936d068e diff --git a/crates/crust-core/tests/data/import_baselines/glossy_sun_bsdf_false_3_usda-edc5ae56976f1ff1-1.digest b/crates/crust-core/tests/data/import_baselines/glossy_sun_bsdf_false_3_usda-edc5ae56976f1ff1-1.digest new file mode 100644 index 000000000..915d438b2 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/glossy_sun_bsdf_false_3_usda-edc5ae56976f1ff1-1.digest @@ -0,0 +1,25 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/World/Cam") +camera: Camera { origin: Vec3A(0.0, 5.0, 6.0), lower_left_corner: Vec3A(-2.0000002, -2.9376645, -0.40261602), horizontal: Vec3A(4.0000005, -0.0, 0.0), vertical: Vec3A(0.0, 3.0731347, -2.560439), u: Vec3A(1.0, -0.0, 0.0), v: Vec3A(0.0, 0.76828355, -0.6401097), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: Some("/Render/settings") +settings: RenderSettings { samples_per_pixel: 64, max_depth: 2, width: 16, height: 16, region: PixelRect { x0: 0, y0: 0, x1: 16, y1: 16 }, min_samples_per_pixel: 64, variance_threshold: 0.0, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: BsdfOnly, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: None, light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 50.0, aperture: [20.0, 20.0], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 10.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/glossy_sun_bsdf_false_3.usda"], invisible_overrides: Some(0) } +layer: $DIR/glossy_sun_bsdf_false_3.usda +lights: 1 +light 0: distant name Some("/World/Key") lpe None pmf 1.0 shadow RayMask(2) restricted true nee-only false twinned true gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 2 geometries, PrimitiveBreakdown { triangles: 2, spheres: 1, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 2, spheres: 1, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:e6e23411748a6d98 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=1:e6e23411748a6d98 +geom 1: material #1 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:fce6de5b675a55c5 camera=2:fce6de5b675a55c5 shadow=2:fce6de5b675a55c5 indirect=2:fce6de5b675a55c5 +provenance material /World/Metal: MaterialOrigin { slots: [1], displaced: false } +provenance light /World/Key: LightOrigin { index: 0, geoms: 1..1 } +provenance geometry 0..1: /World/Blocker +provenance geometry 1..2: /World/Floor +provenance mesh: MeshOrigin { geom_id: 1, slot: 0, baked: true, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 14903623499644419787, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [0] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/World/Cam"), cameras: ["/World/Cam"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/World/Cam"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/glossy_sun_bsdf_false_3_usda-edc5ae56976f1ff1-1.image b/crates/crust-core/tests/data/import_baselines/glossy_sun_bsdf_false_3_usda-edc5ae56976f1ff1-1.image new file mode 100644 index 000000000..1b3ec996a --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/glossy_sun_bsdf_false_3_usda-edc5ae56976f1ff1-1.image @@ -0,0 +1 @@ +16x16 16spp clamp-off 46b9b601936d068e diff --git a/crates/crust-core/tests/data/import_baselines/glossy_sun_bsdf_false_4_usda-b2e4ed7db6e6d9c8-1.digest b/crates/crust-core/tests/data/import_baselines/glossy_sun_bsdf_false_4_usda-b2e4ed7db6e6d9c8-1.digest new file mode 100644 index 000000000..3120cf89d --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/glossy_sun_bsdf_false_4_usda-b2e4ed7db6e6d9c8-1.digest @@ -0,0 +1,25 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/World/Cam") +camera: Camera { origin: Vec3A(0.0, 5.0, 6.0), lower_left_corner: Vec3A(-2.0000002, -2.9376645, -0.40261602), horizontal: Vec3A(4.0000005, -0.0, 0.0), vertical: Vec3A(0.0, 3.0731347, -2.560439), u: Vec3A(1.0, -0.0, 0.0), v: Vec3A(0.0, 0.76828355, -0.6401097), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: Some("/Render/settings") +settings: RenderSettings { samples_per_pixel: 64, max_depth: 2, width: 16, height: 16, region: PixelRect { x0: 0, y0: 0, x1: 16, y1: 16 }, min_samples_per_pixel: 64, variance_threshold: 0.0, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: BsdfOnly, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: None, light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 50.0, aperture: [20.0, 20.0], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 10.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/glossy_sun_bsdf_false_4.usda"], invisible_overrides: Some(0) } +layer: $DIR/glossy_sun_bsdf_false_4.usda +lights: 1 +light 0: distant name Some("/World/Key") lpe None pmf 1.0 shadow RayMask(2) restricted true nee-only false twinned true gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 2 geometries, PrimitiveBreakdown { triangles: 2, spheres: 1, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 2, spheres: 1, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:e6e23411748a6d98 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=1:e6e23411748a6d98 +geom 1: material #1 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:fce6de5b675a55c5 camera=2:fce6de5b675a55c5 shadow=2:fce6de5b675a55c5 indirect=2:fce6de5b675a55c5 +provenance material /World/Metal: MaterialOrigin { slots: [1], displaced: false } +provenance light /World/Key: LightOrigin { index: 0, geoms: 1..1 } +provenance geometry 0..1: /World/Blocker +provenance geometry 1..2: /World/Floor +provenance mesh: MeshOrigin { geom_id: 1, slot: 0, baked: true, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 14903623499644419787, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [0] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/World/Cam"), cameras: ["/World/Cam"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/World/Cam"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/glossy_sun_bsdf_false_4_usda-b2e4ed7db6e6d9c8-1.image b/crates/crust-core/tests/data/import_baselines/glossy_sun_bsdf_false_4_usda-b2e4ed7db6e6d9c8-1.image new file mode 100644 index 000000000..1b3ec996a --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/glossy_sun_bsdf_false_4_usda-b2e4ed7db6e6d9c8-1.image @@ -0,0 +1 @@ +16x16 16spp clamp-off 46b9b601936d068e diff --git a/crates/crust-core/tests/data/import_baselines/glossy_sun_light_false_1_usda-03a3c8316f39e87b-1.digest b/crates/crust-core/tests/data/import_baselines/glossy_sun_light_false_1_usda-03a3c8316f39e87b-1.digest new file mode 100644 index 000000000..5067a46c0 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/glossy_sun_light_false_1_usda-03a3c8316f39e87b-1.digest @@ -0,0 +1,25 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/World/Cam") +camera: Camera { origin: Vec3A(0.0, 5.0, 6.0), lower_left_corner: Vec3A(-2.0000002, -2.9376645, -0.40261602), horizontal: Vec3A(4.0000005, -0.0, 0.0), vertical: Vec3A(0.0, 3.0731347, -2.560439), u: Vec3A(1.0, -0.0, 0.0), v: Vec3A(0.0, 0.76828355, -0.6401097), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: Some("/Render/settings") +settings: RenderSettings { samples_per_pixel: 64, max_depth: 2, width: 16, height: 16, region: PixelRect { x0: 0, y0: 0, x1: 16, y1: 16 }, min_samples_per_pixel: 64, variance_threshold: 0.0, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: LightOnly, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: None, light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 50.0, aperture: [20.0, 20.0], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 10.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/glossy_sun_light_false_1.usda"], invisible_overrides: Some(0) } +layer: $DIR/glossy_sun_light_false_1.usda +lights: 1 +light 0: distant name Some("/World/Key") lpe None pmf 1.0 shadow RayMask(2) restricted true nee-only false twinned true gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 2 geometries, PrimitiveBreakdown { triangles: 2, spheres: 1, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 2, spheres: 1, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:e6e23411748a6d98 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=1:e6e23411748a6d98 +geom 1: material #1 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:fce6de5b675a55c5 camera=2:fce6de5b675a55c5 shadow=2:fce6de5b675a55c5 indirect=2:fce6de5b675a55c5 +provenance material /World/Metal: MaterialOrigin { slots: [1], displaced: false } +provenance light /World/Key: LightOrigin { index: 0, geoms: 1..1 } +provenance geometry 0..1: /World/Blocker +provenance geometry 1..2: /World/Floor +provenance mesh: MeshOrigin { geom_id: 1, slot: 0, baked: true, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 14903623499644419787, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [0] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/World/Cam"), cameras: ["/World/Cam"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/World/Cam"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/glossy_sun_light_false_1_usda-03a3c8316f39e87b-1.image b/crates/crust-core/tests/data/import_baselines/glossy_sun_light_false_1_usda-03a3c8316f39e87b-1.image new file mode 100644 index 000000000..c404b2c96 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/glossy_sun_light_false_1_usda-03a3c8316f39e87b-1.image @@ -0,0 +1 @@ +16x16 16spp clamp-off 6dac79f27dc1db9f diff --git a/crates/crust-core/tests/data/import_baselines/glossy_sun_light_false_2_usda-33306f5e5e7489a0-1.digest b/crates/crust-core/tests/data/import_baselines/glossy_sun_light_false_2_usda-33306f5e5e7489a0-1.digest new file mode 100644 index 000000000..1aaad75c8 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/glossy_sun_light_false_2_usda-33306f5e5e7489a0-1.digest @@ -0,0 +1,25 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/World/Cam") +camera: Camera { origin: Vec3A(0.0, 5.0, 6.0), lower_left_corner: Vec3A(-2.0000002, -2.9376645, -0.40261602), horizontal: Vec3A(4.0000005, -0.0, 0.0), vertical: Vec3A(0.0, 3.0731347, -2.560439), u: Vec3A(1.0, -0.0, 0.0), v: Vec3A(0.0, 0.76828355, -0.6401097), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: Some("/Render/settings") +settings: RenderSettings { samples_per_pixel: 64, max_depth: 2, width: 16, height: 16, region: PixelRect { x0: 0, y0: 0, x1: 16, y1: 16 }, min_samples_per_pixel: 64, variance_threshold: 0.0, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: LightOnly, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: None, light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 50.0, aperture: [20.0, 20.0], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 10.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/glossy_sun_light_false_2.usda"], invisible_overrides: Some(0) } +layer: $DIR/glossy_sun_light_false_2.usda +lights: 1 +light 0: distant name Some("/World/Key") lpe None pmf 1.0 shadow RayMask(2) restricted true nee-only false twinned true gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 2 geometries, PrimitiveBreakdown { triangles: 2, spheres: 1, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 2, spheres: 1, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:e6e23411748a6d98 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=1:e6e23411748a6d98 +geom 1: material #1 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:fce6de5b675a55c5 camera=2:fce6de5b675a55c5 shadow=2:fce6de5b675a55c5 indirect=2:fce6de5b675a55c5 +provenance material /World/Metal: MaterialOrigin { slots: [1], displaced: false } +provenance light /World/Key: LightOrigin { index: 0, geoms: 1..1 } +provenance geometry 0..1: /World/Blocker +provenance geometry 1..2: /World/Floor +provenance mesh: MeshOrigin { geom_id: 1, slot: 0, baked: true, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 14903623499644419787, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [0] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/World/Cam"), cameras: ["/World/Cam"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/World/Cam"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/glossy_sun_light_false_2_usda-33306f5e5e7489a0-1.image b/crates/crust-core/tests/data/import_baselines/glossy_sun_light_false_2_usda-33306f5e5e7489a0-1.image new file mode 100644 index 000000000..c404b2c96 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/glossy_sun_light_false_2_usda-33306f5e5e7489a0-1.image @@ -0,0 +1 @@ +16x16 16spp clamp-off 6dac79f27dc1db9f diff --git a/crates/crust-core/tests/data/import_baselines/glossy_sun_light_false_3_usda-d3cf26f624795805-1.digest b/crates/crust-core/tests/data/import_baselines/glossy_sun_light_false_3_usda-d3cf26f624795805-1.digest new file mode 100644 index 000000000..2a7a251c1 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/glossy_sun_light_false_3_usda-d3cf26f624795805-1.digest @@ -0,0 +1,25 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/World/Cam") +camera: Camera { origin: Vec3A(0.0, 5.0, 6.0), lower_left_corner: Vec3A(-2.0000002, -2.9376645, -0.40261602), horizontal: Vec3A(4.0000005, -0.0, 0.0), vertical: Vec3A(0.0, 3.0731347, -2.560439), u: Vec3A(1.0, -0.0, 0.0), v: Vec3A(0.0, 0.76828355, -0.6401097), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: Some("/Render/settings") +settings: RenderSettings { samples_per_pixel: 64, max_depth: 2, width: 16, height: 16, region: PixelRect { x0: 0, y0: 0, x1: 16, y1: 16 }, min_samples_per_pixel: 64, variance_threshold: 0.0, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: LightOnly, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: None, light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 50.0, aperture: [20.0, 20.0], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 10.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/glossy_sun_light_false_3.usda"], invisible_overrides: Some(0) } +layer: $DIR/glossy_sun_light_false_3.usda +lights: 1 +light 0: distant name Some("/World/Key") lpe None pmf 1.0 shadow RayMask(2) restricted true nee-only false twinned true gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 2 geometries, PrimitiveBreakdown { triangles: 2, spheres: 1, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 2, spheres: 1, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:e6e23411748a6d98 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=1:e6e23411748a6d98 +geom 1: material #1 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:fce6de5b675a55c5 camera=2:fce6de5b675a55c5 shadow=2:fce6de5b675a55c5 indirect=2:fce6de5b675a55c5 +provenance material /World/Metal: MaterialOrigin { slots: [1], displaced: false } +provenance light /World/Key: LightOrigin { index: 0, geoms: 1..1 } +provenance geometry 0..1: /World/Blocker +provenance geometry 1..2: /World/Floor +provenance mesh: MeshOrigin { geom_id: 1, slot: 0, baked: true, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 14903623499644419787, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [0] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/World/Cam"), cameras: ["/World/Cam"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/World/Cam"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/glossy_sun_light_false_3_usda-d3cf26f624795805-1.image b/crates/crust-core/tests/data/import_baselines/glossy_sun_light_false_3_usda-d3cf26f624795805-1.image new file mode 100644 index 000000000..c404b2c96 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/glossy_sun_light_false_3_usda-d3cf26f624795805-1.image @@ -0,0 +1 @@ +16x16 16spp clamp-off 6dac79f27dc1db9f diff --git a/crates/crust-core/tests/data/import_baselines/glossy_sun_light_false_4_usda-bc3c2cc49389e192-1.digest b/crates/crust-core/tests/data/import_baselines/glossy_sun_light_false_4_usda-bc3c2cc49389e192-1.digest new file mode 100644 index 000000000..3c23d16bb --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/glossy_sun_light_false_4_usda-bc3c2cc49389e192-1.digest @@ -0,0 +1,25 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/World/Cam") +camera: Camera { origin: Vec3A(0.0, 5.0, 6.0), lower_left_corner: Vec3A(-2.0000002, -2.9376645, -0.40261602), horizontal: Vec3A(4.0000005, -0.0, 0.0), vertical: Vec3A(0.0, 3.0731347, -2.560439), u: Vec3A(1.0, -0.0, 0.0), v: Vec3A(0.0, 0.76828355, -0.6401097), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: Some("/Render/settings") +settings: RenderSettings { samples_per_pixel: 64, max_depth: 2, width: 16, height: 16, region: PixelRect { x0: 0, y0: 0, x1: 16, y1: 16 }, min_samples_per_pixel: 64, variance_threshold: 0.0, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: LightOnly, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: None, light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 50.0, aperture: [20.0, 20.0], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 10.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/glossy_sun_light_false_4.usda"], invisible_overrides: Some(0) } +layer: $DIR/glossy_sun_light_false_4.usda +lights: 1 +light 0: distant name Some("/World/Key") lpe None pmf 1.0 shadow RayMask(2) restricted true nee-only false twinned true gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 2 geometries, PrimitiveBreakdown { triangles: 2, spheres: 1, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 2, spheres: 1, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:e6e23411748a6d98 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=1:e6e23411748a6d98 +geom 1: material #1 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:fce6de5b675a55c5 camera=2:fce6de5b675a55c5 shadow=2:fce6de5b675a55c5 indirect=2:fce6de5b675a55c5 +provenance material /World/Metal: MaterialOrigin { slots: [1], displaced: false } +provenance light /World/Key: LightOrigin { index: 0, geoms: 1..1 } +provenance geometry 0..1: /World/Blocker +provenance geometry 1..2: /World/Floor +provenance mesh: MeshOrigin { geom_id: 1, slot: 0, baked: true, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 14903623499644419787, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [0] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/World/Cam"), cameras: ["/World/Cam"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/World/Cam"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/glossy_sun_light_false_4_usda-bc3c2cc49389e192-1.image b/crates/crust-core/tests/data/import_baselines/glossy_sun_light_false_4_usda-bc3c2cc49389e192-1.image new file mode 100644 index 000000000..c404b2c96 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/glossy_sun_light_false_4_usda-bc3c2cc49389e192-1.image @@ -0,0 +1 @@ +16x16 16spp clamp-off 6dac79f27dc1db9f diff --git a/crates/crust-core/tests/data/import_baselines/glossy_sun_light_true_1_usda-c5cb6d9f35a09a41-1.digest b/crates/crust-core/tests/data/import_baselines/glossy_sun_light_true_1_usda-c5cb6d9f35a09a41-1.digest new file mode 100644 index 000000000..cb4f3b106 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/glossy_sun_light_true_1_usda-c5cb6d9f35a09a41-1.digest @@ -0,0 +1,25 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/World/Cam") +camera: Camera { origin: Vec3A(0.0, 5.0, 6.0), lower_left_corner: Vec3A(-2.0000002, -2.9376645, -0.40261602), horizontal: Vec3A(4.0000005, -0.0, 0.0), vertical: Vec3A(0.0, 3.0731347, -2.560439), u: Vec3A(1.0, -0.0, 0.0), v: Vec3A(0.0, 0.76828355, -0.6401097), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: Some("/Render/settings") +settings: RenderSettings { samples_per_pixel: 64, max_depth: 2, width: 16, height: 16, region: PixelRect { x0: 0, y0: 0, x1: 16, y1: 16 }, min_samples_per_pixel: 64, variance_threshold: 0.0, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: LightOnly, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: None, light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 50.0, aperture: [20.0, 20.0], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 10.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/glossy_sun_light_true_1.usda"], invisible_overrides: Some(0) } +layer: $DIR/glossy_sun_light_true_1.usda +lights: 1 +light 0: distant name Some("/World/Key") lpe None pmf 1.0 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 2 geometries, PrimitiveBreakdown { triangles: 2, spheres: 1, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 2, spheres: 1, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:e6e23411748a6d98 camera=0:cbf29ce484222325 shadow=1:e6e23411748a6d98 indirect=1:e6e23411748a6d98 +geom 1: material #1 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:fce6de5b675a55c5 camera=2:fce6de5b675a55c5 shadow=2:fce6de5b675a55c5 indirect=2:fce6de5b675a55c5 +provenance material /World/Metal: MaterialOrigin { slots: [1], displaced: false } +provenance light /World/Key: LightOrigin { index: 0, geoms: 1..1 } +provenance geometry 0..1: /World/Blocker +provenance geometry 1..2: /World/Floor +provenance mesh: MeshOrigin { geom_id: 1, slot: 0, baked: true, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 14903623499644419787, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [0] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/World/Cam"), cameras: ["/World/Cam"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/World/Cam"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/glossy_sun_light_true_1_usda-c5cb6d9f35a09a41-1.image b/crates/crust-core/tests/data/import_baselines/glossy_sun_light_true_1_usda-c5cb6d9f35a09a41-1.image new file mode 100644 index 000000000..5ce77a9d0 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/glossy_sun_light_true_1_usda-c5cb6d9f35a09a41-1.image @@ -0,0 +1 @@ +16x16 16spp clamp-off e6550243a82e0188 diff --git a/crates/crust-core/tests/data/import_baselines/glossy_sun_light_true_2_usda-4db04417a2f553bc-1.digest b/crates/crust-core/tests/data/import_baselines/glossy_sun_light_true_2_usda-4db04417a2f553bc-1.digest new file mode 100644 index 000000000..bc6f0269c --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/glossy_sun_light_true_2_usda-4db04417a2f553bc-1.digest @@ -0,0 +1,25 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/World/Cam") +camera: Camera { origin: Vec3A(0.0, 5.0, 6.0), lower_left_corner: Vec3A(-2.0000002, -2.9376645, -0.40261602), horizontal: Vec3A(4.0000005, -0.0, 0.0), vertical: Vec3A(0.0, 3.0731347, -2.560439), u: Vec3A(1.0, -0.0, 0.0), v: Vec3A(0.0, 0.76828355, -0.6401097), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: Some("/Render/settings") +settings: RenderSettings { samples_per_pixel: 64, max_depth: 2, width: 16, height: 16, region: PixelRect { x0: 0, y0: 0, x1: 16, y1: 16 }, min_samples_per_pixel: 64, variance_threshold: 0.0, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: LightOnly, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: None, light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 50.0, aperture: [20.0, 20.0], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 10.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/glossy_sun_light_true_2.usda"], invisible_overrides: Some(0) } +layer: $DIR/glossy_sun_light_true_2.usda +lights: 1 +light 0: distant name Some("/World/Key") lpe None pmf 1.0 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 2 geometries, PrimitiveBreakdown { triangles: 2, spheres: 1, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 2, spheres: 1, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:e6e23411748a6d98 camera=0:cbf29ce484222325 shadow=1:e6e23411748a6d98 indirect=1:e6e23411748a6d98 +geom 1: material #1 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:fce6de5b675a55c5 camera=2:fce6de5b675a55c5 shadow=2:fce6de5b675a55c5 indirect=2:fce6de5b675a55c5 +provenance material /World/Metal: MaterialOrigin { slots: [1], displaced: false } +provenance light /World/Key: LightOrigin { index: 0, geoms: 1..1 } +provenance geometry 0..1: /World/Blocker +provenance geometry 1..2: /World/Floor +provenance mesh: MeshOrigin { geom_id: 1, slot: 0, baked: true, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 14903623499644419787, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [0] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/World/Cam"), cameras: ["/World/Cam"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/World/Cam"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/glossy_sun_light_true_2_usda-4db04417a2f553bc-1.image b/crates/crust-core/tests/data/import_baselines/glossy_sun_light_true_2_usda-4db04417a2f553bc-1.image new file mode 100644 index 000000000..5ce77a9d0 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/glossy_sun_light_true_2_usda-4db04417a2f553bc-1.image @@ -0,0 +1 @@ +16x16 16spp clamp-off e6550243a82e0188 diff --git a/crates/crust-core/tests/data/import_baselines/glossy_sun_light_true_3_usda-8962360ec726337b-1.digest b/crates/crust-core/tests/data/import_baselines/glossy_sun_light_true_3_usda-8962360ec726337b-1.digest new file mode 100644 index 000000000..c0d742666 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/glossy_sun_light_true_3_usda-8962360ec726337b-1.digest @@ -0,0 +1,25 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/World/Cam") +camera: Camera { origin: Vec3A(0.0, 5.0, 6.0), lower_left_corner: Vec3A(-2.0000002, -2.9376645, -0.40261602), horizontal: Vec3A(4.0000005, -0.0, 0.0), vertical: Vec3A(0.0, 3.0731347, -2.560439), u: Vec3A(1.0, -0.0, 0.0), v: Vec3A(0.0, 0.76828355, -0.6401097), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: Some("/Render/settings") +settings: RenderSettings { samples_per_pixel: 64, max_depth: 2, width: 16, height: 16, region: PixelRect { x0: 0, y0: 0, x1: 16, y1: 16 }, min_samples_per_pixel: 64, variance_threshold: 0.0, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: LightOnly, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: None, light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 50.0, aperture: [20.0, 20.0], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 10.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/glossy_sun_light_true_3.usda"], invisible_overrides: Some(0) } +layer: $DIR/glossy_sun_light_true_3.usda +lights: 1 +light 0: distant name Some("/World/Key") lpe None pmf 1.0 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 2 geometries, PrimitiveBreakdown { triangles: 2, spheres: 1, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 2, spheres: 1, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:e6e23411748a6d98 camera=0:cbf29ce484222325 shadow=1:e6e23411748a6d98 indirect=1:e6e23411748a6d98 +geom 1: material #1 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:fce6de5b675a55c5 camera=2:fce6de5b675a55c5 shadow=2:fce6de5b675a55c5 indirect=2:fce6de5b675a55c5 +provenance material /World/Metal: MaterialOrigin { slots: [1], displaced: false } +provenance light /World/Key: LightOrigin { index: 0, geoms: 1..1 } +provenance geometry 0..1: /World/Blocker +provenance geometry 1..2: /World/Floor +provenance mesh: MeshOrigin { geom_id: 1, slot: 0, baked: true, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 14903623499644419787, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [0] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/World/Cam"), cameras: ["/World/Cam"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/World/Cam"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/glossy_sun_light_true_3_usda-8962360ec726337b-1.image b/crates/crust-core/tests/data/import_baselines/glossy_sun_light_true_3_usda-8962360ec726337b-1.image new file mode 100644 index 000000000..5ce77a9d0 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/glossy_sun_light_true_3_usda-8962360ec726337b-1.image @@ -0,0 +1 @@ +16x16 16spp clamp-off e6550243a82e0188 diff --git a/crates/crust-core/tests/data/import_baselines/glossy_sun_light_true_4_usda-704837282362091e-1.digest b/crates/crust-core/tests/data/import_baselines/glossy_sun_light_true_4_usda-704837282362091e-1.digest new file mode 100644 index 000000000..d80b31dd3 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/glossy_sun_light_true_4_usda-704837282362091e-1.digest @@ -0,0 +1,25 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/World/Cam") +camera: Camera { origin: Vec3A(0.0, 5.0, 6.0), lower_left_corner: Vec3A(-2.0000002, -2.9376645, -0.40261602), horizontal: Vec3A(4.0000005, -0.0, 0.0), vertical: Vec3A(0.0, 3.0731347, -2.560439), u: Vec3A(1.0, -0.0, 0.0), v: Vec3A(0.0, 0.76828355, -0.6401097), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: Some("/Render/settings") +settings: RenderSettings { samples_per_pixel: 64, max_depth: 2, width: 16, height: 16, region: PixelRect { x0: 0, y0: 0, x1: 16, y1: 16 }, min_samples_per_pixel: 64, variance_threshold: 0.0, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: LightOnly, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: None, light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 50.0, aperture: [20.0, 20.0], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 10.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/glossy_sun_light_true_4.usda"], invisible_overrides: Some(0) } +layer: $DIR/glossy_sun_light_true_4.usda +lights: 1 +light 0: distant name Some("/World/Key") lpe None pmf 1.0 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 2 geometries, PrimitiveBreakdown { triangles: 2, spheres: 1, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 2, spheres: 1, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:e6e23411748a6d98 camera=0:cbf29ce484222325 shadow=1:e6e23411748a6d98 indirect=1:e6e23411748a6d98 +geom 1: material #1 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:fce6de5b675a55c5 camera=2:fce6de5b675a55c5 shadow=2:fce6de5b675a55c5 indirect=2:fce6de5b675a55c5 +provenance material /World/Metal: MaterialOrigin { slots: [1], displaced: false } +provenance light /World/Key: LightOrigin { index: 0, geoms: 1..1 } +provenance geometry 0..1: /World/Blocker +provenance geometry 1..2: /World/Floor +provenance mesh: MeshOrigin { geom_id: 1, slot: 0, baked: true, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 14903623499644419787, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [0] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/World/Cam"), cameras: ["/World/Cam"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/World/Cam"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/glossy_sun_light_true_4_usda-704837282362091e-1.image b/crates/crust-core/tests/data/import_baselines/glossy_sun_light_true_4_usda-704837282362091e-1.image new file mode 100644 index 000000000..5ce77a9d0 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/glossy_sun_light_true_4_usda-704837282362091e-1.image @@ -0,0 +1 @@ +16x16 16spp clamp-off e6550243a82e0188 diff --git a/crates/crust-core/tests/data/import_baselines/glossy_sun_power_false_1_usda-b16be3e51935cdad-1.digest b/crates/crust-core/tests/data/import_baselines/glossy_sun_power_false_1_usda-b16be3e51935cdad-1.digest new file mode 100644 index 000000000..26c7b25be --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/glossy_sun_power_false_1_usda-b16be3e51935cdad-1.digest @@ -0,0 +1,25 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/World/Cam") +camera: Camera { origin: Vec3A(0.0, 5.0, 6.0), lower_left_corner: Vec3A(-2.0000002, -2.9376645, -0.40261602), horizontal: Vec3A(4.0000005, -0.0, 0.0), vertical: Vec3A(0.0, 3.0731347, -2.560439), u: Vec3A(1.0, -0.0, 0.0), v: Vec3A(0.0, 0.76828355, -0.6401097), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: Some("/Render/settings") +settings: RenderSettings { samples_per_pixel: 64, max_depth: 2, width: 16, height: 16, region: PixelRect { x0: 0, y0: 0, x1: 16, y1: 16 }, min_samples_per_pixel: 64, variance_threshold: 0.0, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: None, light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 50.0, aperture: [20.0, 20.0], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 10.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/glossy_sun_power_false_1.usda"], invisible_overrides: Some(0) } +layer: $DIR/glossy_sun_power_false_1.usda +lights: 1 +light 0: distant name Some("/World/Key") lpe None pmf 1.0 shadow RayMask(2) restricted true nee-only false twinned true gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 2 geometries, PrimitiveBreakdown { triangles: 2, spheres: 1, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 2, spheres: 1, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:e6e23411748a6d98 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=1:e6e23411748a6d98 +geom 1: material #1 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:fce6de5b675a55c5 camera=2:fce6de5b675a55c5 shadow=2:fce6de5b675a55c5 indirect=2:fce6de5b675a55c5 +provenance material /World/Metal: MaterialOrigin { slots: [1], displaced: false } +provenance light /World/Key: LightOrigin { index: 0, geoms: 1..1 } +provenance geometry 0..1: /World/Blocker +provenance geometry 1..2: /World/Floor +provenance mesh: MeshOrigin { geom_id: 1, slot: 0, baked: true, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 14903623499644419787, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [0] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/World/Cam"), cameras: ["/World/Cam"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/World/Cam"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/glossy_sun_power_false_1_usda-b16be3e51935cdad-1.image b/crates/crust-core/tests/data/import_baselines/glossy_sun_power_false_1_usda-b16be3e51935cdad-1.image new file mode 100644 index 000000000..93053830d --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/glossy_sun_power_false_1_usda-b16be3e51935cdad-1.image @@ -0,0 +1 @@ +16x16 16spp clamp-off 7965ffd2d7800ef8 diff --git a/crates/crust-core/tests/data/import_baselines/glossy_sun_power_false_2_usda-9bd601062d2922a2-1.digest b/crates/crust-core/tests/data/import_baselines/glossy_sun_power_false_2_usda-9bd601062d2922a2-1.digest new file mode 100644 index 000000000..92359b486 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/glossy_sun_power_false_2_usda-9bd601062d2922a2-1.digest @@ -0,0 +1,25 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/World/Cam") +camera: Camera { origin: Vec3A(0.0, 5.0, 6.0), lower_left_corner: Vec3A(-2.0000002, -2.9376645, -0.40261602), horizontal: Vec3A(4.0000005, -0.0, 0.0), vertical: Vec3A(0.0, 3.0731347, -2.560439), u: Vec3A(1.0, -0.0, 0.0), v: Vec3A(0.0, 0.76828355, -0.6401097), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: Some("/Render/settings") +settings: RenderSettings { samples_per_pixel: 64, max_depth: 2, width: 16, height: 16, region: PixelRect { x0: 0, y0: 0, x1: 16, y1: 16 }, min_samples_per_pixel: 64, variance_threshold: 0.0, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: None, light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 50.0, aperture: [20.0, 20.0], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 10.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/glossy_sun_power_false_2.usda"], invisible_overrides: Some(0) } +layer: $DIR/glossy_sun_power_false_2.usda +lights: 1 +light 0: distant name Some("/World/Key") lpe None pmf 1.0 shadow RayMask(2) restricted true nee-only false twinned true gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 2 geometries, PrimitiveBreakdown { triangles: 2, spheres: 1, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 2, spheres: 1, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:e6e23411748a6d98 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=1:e6e23411748a6d98 +geom 1: material #1 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:fce6de5b675a55c5 camera=2:fce6de5b675a55c5 shadow=2:fce6de5b675a55c5 indirect=2:fce6de5b675a55c5 +provenance material /World/Metal: MaterialOrigin { slots: [1], displaced: false } +provenance light /World/Key: LightOrigin { index: 0, geoms: 1..1 } +provenance geometry 0..1: /World/Blocker +provenance geometry 1..2: /World/Floor +provenance mesh: MeshOrigin { geom_id: 1, slot: 0, baked: true, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 14903623499644419787, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [0] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/World/Cam"), cameras: ["/World/Cam"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/World/Cam"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/glossy_sun_power_false_2_usda-9bd601062d2922a2-1.image b/crates/crust-core/tests/data/import_baselines/glossy_sun_power_false_2_usda-9bd601062d2922a2-1.image new file mode 100644 index 000000000..93053830d --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/glossy_sun_power_false_2_usda-9bd601062d2922a2-1.image @@ -0,0 +1 @@ +16x16 16spp clamp-off 7965ffd2d7800ef8 diff --git a/crates/crust-core/tests/data/import_baselines/glossy_sun_power_false_3_usda-af38f2deac1db5db-1.digest b/crates/crust-core/tests/data/import_baselines/glossy_sun_power_false_3_usda-af38f2deac1db5db-1.digest new file mode 100644 index 000000000..f6de94a87 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/glossy_sun_power_false_3_usda-af38f2deac1db5db-1.digest @@ -0,0 +1,25 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/World/Cam") +camera: Camera { origin: Vec3A(0.0, 5.0, 6.0), lower_left_corner: Vec3A(-2.0000002, -2.9376645, -0.40261602), horizontal: Vec3A(4.0000005, -0.0, 0.0), vertical: Vec3A(0.0, 3.0731347, -2.560439), u: Vec3A(1.0, -0.0, 0.0), v: Vec3A(0.0, 0.76828355, -0.6401097), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: Some("/Render/settings") +settings: RenderSettings { samples_per_pixel: 64, max_depth: 2, width: 16, height: 16, region: PixelRect { x0: 0, y0: 0, x1: 16, y1: 16 }, min_samples_per_pixel: 64, variance_threshold: 0.0, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: None, light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 50.0, aperture: [20.0, 20.0], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 10.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/glossy_sun_power_false_3.usda"], invisible_overrides: Some(0) } +layer: $DIR/glossy_sun_power_false_3.usda +lights: 1 +light 0: distant name Some("/World/Key") lpe None pmf 1.0 shadow RayMask(2) restricted true nee-only false twinned true gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 2 geometries, PrimitiveBreakdown { triangles: 2, spheres: 1, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 2, spheres: 1, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:e6e23411748a6d98 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=1:e6e23411748a6d98 +geom 1: material #1 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:fce6de5b675a55c5 camera=2:fce6de5b675a55c5 shadow=2:fce6de5b675a55c5 indirect=2:fce6de5b675a55c5 +provenance material /World/Metal: MaterialOrigin { slots: [1], displaced: false } +provenance light /World/Key: LightOrigin { index: 0, geoms: 1..1 } +provenance geometry 0..1: /World/Blocker +provenance geometry 1..2: /World/Floor +provenance mesh: MeshOrigin { geom_id: 1, slot: 0, baked: true, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 14903623499644419787, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [0] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/World/Cam"), cameras: ["/World/Cam"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/World/Cam"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/glossy_sun_power_false_3_usda-af38f2deac1db5db-1.image b/crates/crust-core/tests/data/import_baselines/glossy_sun_power_false_3_usda-af38f2deac1db5db-1.image new file mode 100644 index 000000000..93053830d --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/glossy_sun_power_false_3_usda-af38f2deac1db5db-1.image @@ -0,0 +1 @@ +16x16 16spp clamp-off 7965ffd2d7800ef8 diff --git a/crates/crust-core/tests/data/import_baselines/glossy_sun_power_false_4_usda-e07f6fc2b4bb4c68-1.digest b/crates/crust-core/tests/data/import_baselines/glossy_sun_power_false_4_usda-e07f6fc2b4bb4c68-1.digest new file mode 100644 index 000000000..8882259ba --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/glossy_sun_power_false_4_usda-e07f6fc2b4bb4c68-1.digest @@ -0,0 +1,25 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/World/Cam") +camera: Camera { origin: Vec3A(0.0, 5.0, 6.0), lower_left_corner: Vec3A(-2.0000002, -2.9376645, -0.40261602), horizontal: Vec3A(4.0000005, -0.0, 0.0), vertical: Vec3A(0.0, 3.0731347, -2.560439), u: Vec3A(1.0, -0.0, 0.0), v: Vec3A(0.0, 0.76828355, -0.6401097), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: Some("/Render/settings") +settings: RenderSettings { samples_per_pixel: 64, max_depth: 2, width: 16, height: 16, region: PixelRect { x0: 0, y0: 0, x1: 16, y1: 16 }, min_samples_per_pixel: 64, variance_threshold: 0.0, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: None, light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 50.0, aperture: [20.0, 20.0], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 10.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/glossy_sun_power_false_4.usda"], invisible_overrides: Some(0) } +layer: $DIR/glossy_sun_power_false_4.usda +lights: 1 +light 0: distant name Some("/World/Key") lpe None pmf 1.0 shadow RayMask(2) restricted true nee-only false twinned true gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 2 geometries, PrimitiveBreakdown { triangles: 2, spheres: 1, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 2, spheres: 1, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:e6e23411748a6d98 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=1:e6e23411748a6d98 +geom 1: material #1 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:fce6de5b675a55c5 camera=2:fce6de5b675a55c5 shadow=2:fce6de5b675a55c5 indirect=2:fce6de5b675a55c5 +provenance material /World/Metal: MaterialOrigin { slots: [1], displaced: false } +provenance light /World/Key: LightOrigin { index: 0, geoms: 1..1 } +provenance geometry 0..1: /World/Blocker +provenance geometry 1..2: /World/Floor +provenance mesh: MeshOrigin { geom_id: 1, slot: 0, baked: true, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 14903623499644419787, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [0] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/World/Cam"), cameras: ["/World/Cam"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/World/Cam"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/glossy_sun_power_false_4_usda-e07f6fc2b4bb4c68-1.image b/crates/crust-core/tests/data/import_baselines/glossy_sun_power_false_4_usda-e07f6fc2b4bb4c68-1.image new file mode 100644 index 000000000..93053830d --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/glossy_sun_power_false_4_usda-e07f6fc2b4bb4c68-1.image @@ -0,0 +1 @@ +16x16 16spp clamp-off 7965ffd2d7800ef8 diff --git a/crates/crust-core/tests/data/import_baselines/glossy_var_light_1_usda-950756ddd9a80314-1.digest b/crates/crust-core/tests/data/import_baselines/glossy_var_light_1_usda-950756ddd9a80314-1.digest new file mode 100644 index 000000000..2075e4909 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/glossy_var_light_1_usda-950756ddd9a80314-1.digest @@ -0,0 +1,27 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/World/Cam") +camera: Camera { origin: Vec3A(0.0, 5.0, 6.0), lower_left_corner: Vec3A(-2.0000002, -2.9376645, -0.40261602), horizontal: Vec3A(4.0000005, -0.0, 0.0), vertical: Vec3A(0.0, 3.0731347, -2.560439), u: Vec3A(1.0, -0.0, 0.0), v: Vec3A(0.0, 0.76828355, -0.6401097), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: Some("/Render/settings") +settings: RenderSettings { samples_per_pixel: 64, max_depth: 2, width: 16, height: 16, region: PixelRect { x0: 0, y0: 0, x1: 16, y1: 16 }, min_samples_per_pixel: 64, variance_threshold: 0.0, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: LightOnly, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: None, light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 50.0, aperture: [20.0, 20.0], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 10.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/glossy_var_light_1.usda"], invisible_overrides: Some(0) } +layer: $DIR/glossy_var_light_1.usda +lights: 1 +light 0: area name Some("/World/Key") lpe None pmf 1.0 shadow RayMask(2) restricted true nee-only false twinned true gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 3 geometries, PrimitiveBreakdown { triangles: 2, spheres: 2, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 2, spheres: 2, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:e6e23411748a6d98 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=1:e6e23411748a6d98 +geom 1: material #1 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:ca080854f0bf27b5 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=1:ca080854f0bf27b5 +geom 2: material #2 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:fce6de5b675a55c5 camera=2:fce6de5b675a55c5 shadow=2:fce6de5b675a55c5 indirect=2:fce6de5b675a55c5 +provenance material /World/Metal: MaterialOrigin { slots: [2], displaced: false } +provenance light /World/Key: LightOrigin { index: 0, geoms: 1..2 } +provenance geometry 0..1: /World/Blocker +provenance geometry 1..2: /World/Key +provenance geometry 2..3: /World/Floor +provenance mesh: MeshOrigin { geom_id: 2, slot: 0, baked: true, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 14903623499644419787, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [0] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/World/Cam"), cameras: ["/World/Cam"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/World/Cam"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/glossy_var_light_1_usda-950756ddd9a80314-1.image b/crates/crust-core/tests/data/import_baselines/glossy_var_light_1_usda-950756ddd9a80314-1.image new file mode 100644 index 000000000..2aeb04a01 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/glossy_var_light_1_usda-950756ddd9a80314-1.image @@ -0,0 +1 @@ +16x16 16spp clamp-off f994e3bc623bc22a diff --git a/crates/crust-core/tests/data/import_baselines/glossy_var_light_2_usda-6aede4cf281248af-1.digest b/crates/crust-core/tests/data/import_baselines/glossy_var_light_2_usda-6aede4cf281248af-1.digest new file mode 100644 index 000000000..30167b086 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/glossy_var_light_2_usda-6aede4cf281248af-1.digest @@ -0,0 +1,27 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/World/Cam") +camera: Camera { origin: Vec3A(0.0, 5.0, 6.0), lower_left_corner: Vec3A(-2.0000002, -2.9376645, -0.40261602), horizontal: Vec3A(4.0000005, -0.0, 0.0), vertical: Vec3A(0.0, 3.0731347, -2.560439), u: Vec3A(1.0, -0.0, 0.0), v: Vec3A(0.0, 0.76828355, -0.6401097), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: Some("/Render/settings") +settings: RenderSettings { samples_per_pixel: 64, max_depth: 2, width: 16, height: 16, region: PixelRect { x0: 0, y0: 0, x1: 16, y1: 16 }, min_samples_per_pixel: 64, variance_threshold: 0.0, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: LightOnly, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: None, light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 50.0, aperture: [20.0, 20.0], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 10.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/glossy_var_light_2.usda"], invisible_overrides: Some(0) } +layer: $DIR/glossy_var_light_2.usda +lights: 1 +light 0: area name Some("/World/Key") lpe None pmf 1.0 shadow RayMask(2) restricted true nee-only false twinned true gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 3 geometries, PrimitiveBreakdown { triangles: 2, spheres: 2, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 2, spheres: 2, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:e6e23411748a6d98 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=1:e6e23411748a6d98 +geom 1: material #1 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:ca080854f0bf27b5 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=1:ca080854f0bf27b5 +geom 2: material #2 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:fce6de5b675a55c5 camera=2:fce6de5b675a55c5 shadow=2:fce6de5b675a55c5 indirect=2:fce6de5b675a55c5 +provenance material /World/Metal: MaterialOrigin { slots: [2], displaced: false } +provenance light /World/Key: LightOrigin { index: 0, geoms: 1..2 } +provenance geometry 0..1: /World/Blocker +provenance geometry 1..2: /World/Key +provenance geometry 2..3: /World/Floor +provenance mesh: MeshOrigin { geom_id: 2, slot: 0, baked: true, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 14903623499644419787, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [0] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/World/Cam"), cameras: ["/World/Cam"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/World/Cam"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/glossy_var_light_2_usda-6aede4cf281248af-1.image b/crates/crust-core/tests/data/import_baselines/glossy_var_light_2_usda-6aede4cf281248af-1.image new file mode 100644 index 000000000..2aeb04a01 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/glossy_var_light_2_usda-6aede4cf281248af-1.image @@ -0,0 +1 @@ +16x16 16spp clamp-off f994e3bc623bc22a diff --git a/crates/crust-core/tests/data/import_baselines/glossy_var_power_1_usda-712adb9891f33818-1.digest b/crates/crust-core/tests/data/import_baselines/glossy_var_power_1_usda-712adb9891f33818-1.digest new file mode 100644 index 000000000..7b1e58073 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/glossy_var_power_1_usda-712adb9891f33818-1.digest @@ -0,0 +1,27 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/World/Cam") +camera: Camera { origin: Vec3A(0.0, 5.0, 6.0), lower_left_corner: Vec3A(-2.0000002, -2.9376645, -0.40261602), horizontal: Vec3A(4.0000005, -0.0, 0.0), vertical: Vec3A(0.0, 3.0731347, -2.560439), u: Vec3A(1.0, -0.0, 0.0), v: Vec3A(0.0, 0.76828355, -0.6401097), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: Some("/Render/settings") +settings: RenderSettings { samples_per_pixel: 64, max_depth: 2, width: 16, height: 16, region: PixelRect { x0: 0, y0: 0, x1: 16, y1: 16 }, min_samples_per_pixel: 64, variance_threshold: 0.0, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: None, light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 50.0, aperture: [20.0, 20.0], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 10.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/glossy_var_power_1.usda"], invisible_overrides: Some(0) } +layer: $DIR/glossy_var_power_1.usda +lights: 1 +light 0: area name Some("/World/Key") lpe None pmf 1.0 shadow RayMask(2) restricted true nee-only false twinned true gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 3 geometries, PrimitiveBreakdown { triangles: 2, spheres: 2, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 2, spheres: 2, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:e6e23411748a6d98 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=1:e6e23411748a6d98 +geom 1: material #1 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:ca080854f0bf27b5 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=1:ca080854f0bf27b5 +geom 2: material #2 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:fce6de5b675a55c5 camera=2:fce6de5b675a55c5 shadow=2:fce6de5b675a55c5 indirect=2:fce6de5b675a55c5 +provenance material /World/Metal: MaterialOrigin { slots: [2], displaced: false } +provenance light /World/Key: LightOrigin { index: 0, geoms: 1..2 } +provenance geometry 0..1: /World/Blocker +provenance geometry 1..2: /World/Key +provenance geometry 2..3: /World/Floor +provenance mesh: MeshOrigin { geom_id: 2, slot: 0, baked: true, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 14903623499644419787, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [0] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/World/Cam"), cameras: ["/World/Cam"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/World/Cam"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/glossy_var_power_1_usda-712adb9891f33818-1.image b/crates/crust-core/tests/data/import_baselines/glossy_var_power_1_usda-712adb9891f33818-1.image new file mode 100644 index 000000000..11aff8e3f --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/glossy_var_power_1_usda-712adb9891f33818-1.image @@ -0,0 +1 @@ +16x16 16spp clamp-off 284a0fc522983440 diff --git a/crates/crust-core/tests/data/import_baselines/glossy_var_power_2_usda-ccbbda539b6109ff-1.digest b/crates/crust-core/tests/data/import_baselines/glossy_var_power_2_usda-ccbbda539b6109ff-1.digest new file mode 100644 index 000000000..3a56a2537 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/glossy_var_power_2_usda-ccbbda539b6109ff-1.digest @@ -0,0 +1,27 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/World/Cam") +camera: Camera { origin: Vec3A(0.0, 5.0, 6.0), lower_left_corner: Vec3A(-2.0000002, -2.9376645, -0.40261602), horizontal: Vec3A(4.0000005, -0.0, 0.0), vertical: Vec3A(0.0, 3.0731347, -2.560439), u: Vec3A(1.0, -0.0, 0.0), v: Vec3A(0.0, 0.76828355, -0.6401097), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: Some("/Render/settings") +settings: RenderSettings { samples_per_pixel: 64, max_depth: 2, width: 16, height: 16, region: PixelRect { x0: 0, y0: 0, x1: 16, y1: 16 }, min_samples_per_pixel: 64, variance_threshold: 0.0, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: None, light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 50.0, aperture: [20.0, 20.0], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 10.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/glossy_var_power_2.usda"], invisible_overrides: Some(0) } +layer: $DIR/glossy_var_power_2.usda +lights: 1 +light 0: area name Some("/World/Key") lpe None pmf 1.0 shadow RayMask(2) restricted true nee-only false twinned true gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 3 geometries, PrimitiveBreakdown { triangles: 2, spheres: 2, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 2, spheres: 2, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:e6e23411748a6d98 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=1:e6e23411748a6d98 +geom 1: material #1 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:ca080854f0bf27b5 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=1:ca080854f0bf27b5 +geom 2: material #2 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:fce6de5b675a55c5 camera=2:fce6de5b675a55c5 shadow=2:fce6de5b675a55c5 indirect=2:fce6de5b675a55c5 +provenance material /World/Metal: MaterialOrigin { slots: [2], displaced: false } +provenance light /World/Key: LightOrigin { index: 0, geoms: 1..2 } +provenance geometry 0..1: /World/Blocker +provenance geometry 1..2: /World/Key +provenance geometry 2..3: /World/Floor +provenance mesh: MeshOrigin { geom_id: 2, slot: 0, baked: true, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 14903623499644419787, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [0] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/World/Cam"), cameras: ["/World/Cam"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/World/Cam"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/glossy_var_power_2_usda-ccbbda539b6109ff-1.image b/crates/crust-core/tests/data/import_baselines/glossy_var_power_2_usda-ccbbda539b6109ff-1.image new file mode 100644 index 000000000..11aff8e3f --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/glossy_var_power_2_usda-ccbbda539b6109ff-1.image @@ -0,0 +1 @@ +16x16 16spp clamp-off 284a0fc522983440 diff --git a/crates/crust-core/tests/data/import_baselines/hair_usda-541c95fb5b2e8895-1.digest b/crates/crust-core/tests/data/import_baselines/hair_usda-541c95fb5b2e8895-1.digest new file mode 100644 index 000000000..f30fa8623 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/hair_usda-541c95fb5b2e8895-1.digest @@ -0,0 +1,53 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/World/Cam") +camera: Camera { origin: Vec3A(0.0, 1.1, 9.0), lower_left_corner: Vec3A(-6.5532, -1.4320642, -0.9176731), horizontal: Vec3A(13.1064, -0.0, 0.0), vertical: Vec3A(0.0, 4.3661385, -0.15246892), u: Vec3A(1.0, -0.0, 0.0), v: Vec3A(0.0, 0.9993908, -0.034899496), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: Some("/Render/settings") +settings: RenderSettings { samples_per_pixel: 16, max_depth: 8, width: 192, height: 64, region: PixelRect { x0: 0, y0: 0, x1: 192, y1: 64 }, min_samples_per_pixel: 8, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 35.0, aperture: [36.0, 15.2908], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 10.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/hair.usda"], invisible_overrides: Some(0) } +layer: $DIR/hair.usda +warning: Warning { code: AssetUnsupportedByHost, kind: Skipped, count: 1, prims: [], message: "No asset loader: environment map $DIR/sky_gradient.exr ignored — the dome falls back to its uniform colour. Use Scene::from_usd_with_assets to supply one." } +lights: 3 +light 0: area name Some("/World/Back") lpe None pmf 0.33333334 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 1: area name Some("/World/Key") lpe None pmf 0.33333334 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 2: dome name Some("/World/Sky") lpe None pmf 0.33333334 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 10 geometries, PrimitiveBreakdown { triangles: 4, spheres: 1, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 7 } top level, PrimitiveBreakdown { triangles: 4, spheres: 1, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 672, instances: 7 } unique, motion false +geom 0: material #0 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:2db093b27e835741 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=1:2db093b27e835741 +geom 1: material #1 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:533cf986f15c8cee camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=2:533cf986f15c8cee +geom 2: material #2 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:9626b0f2f3e041c5 camera=2:9626b0f2f3e041c5 shadow=2:9626b0f2f3e041c5 indirect=2:9626b0f2f3e041c5 +geom 3: material #3 Signature { kind: "MaterialX", cutout: false, straight: false, boundary: false, emits: false, uv: true, uv_primvar: None, face_texture: None, curve: Some((false, false, [])), primvars: None } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves true scale 1.0 motion [] pieces all=96:fd556c69aea7816a camera=96:fd556c69aea7816a shadow=96:fd556c69aea7816a indirect=96:fd556c69aea7816a +geom 4: material #4 Signature { kind: "MaterialX", cutout: false, straight: false, boundary: false, emits: false, uv: true, uv_primvar: None, face_texture: None, curve: Some((false, false, [])), primvars: None } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves true scale 1.0 motion [] pieces all=96:5db2875e1dc27b25 camera=96:5db2875e1dc27b25 shadow=96:5db2875e1dc27b25 indirect=96:5db2875e1dc27b25 +geom 5: material #5 Signature { kind: "MaterialX", cutout: false, straight: false, boundary: false, emits: false, uv: true, uv_primvar: None, face_texture: None, curve: Some((false, false, [])), primvars: None } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves true scale 1.0 motion [] pieces all=96:8e8b8e2abe070c9e camera=96:8e8b8e2abe070c9e shadow=96:8e8b8e2abe070c9e indirect=96:8e8b8e2abe070c9e +geom 6: material #6 Signature { kind: "MaterialX", cutout: false, straight: false, boundary: false, emits: false, uv: true, uv_primvar: None, face_texture: None, curve: Some((false, false, [])), primvars: None } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves true scale 1.0 motion [] pieces all=96:668f59dd29ce5a6e camera=96:668f59dd29ce5a6e shadow=96:668f59dd29ce5a6e indirect=96:668f59dd29ce5a6e +geom 7: material #7 Signature { kind: "MaterialX", cutout: false, straight: false, boundary: false, emits: false, uv: true, uv_primvar: None, face_texture: None, curve: Some((false, false, [])), primvars: None } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves true scale 1.0 motion [] pieces all=96:5125d392763dd912 camera=96:5125d392763dd912 shadow=96:5125d392763dd912 indirect=96:5125d392763dd912 +geom 8: material #8 Signature { kind: "MaterialX", cutout: false, straight: false, boundary: false, emits: false, uv: true, uv_primvar: None, face_texture: None, curve: Some((false, false, [])), primvars: None } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves true scale 1.0 motion [] pieces all=96:b682384aae38cba1 camera=96:b682384aae38cba1 shadow=96:b682384aae38cba1 indirect=96:b682384aae38cba1 +geom 9: material #9 Signature { kind: "MaterialX", cutout: false, straight: false, boundary: false, emits: false, uv: true, uv_primvar: None, face_texture: None, curve: Some((false, false, [])), primvars: None } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves true scale 1.0 motion [] pieces all=96:231e5f4733f3e2de camera=96:231e5f4733f3e2de shadow=96:231e5f4733f3e2de indirect=96:231e5f4733f3e2de +provenance material /World/Looks/Floor: MaterialOrigin { slots: [2], displaced: false } +provenance material /World/Looks/mtlx_diffuse_twin: MaterialOrigin { slots: [3], displaced: false } +provenance material /World/Looks/mtlx_hair_bare: MaterialOrigin { slots: [9], displaced: false } +provenance material /World/Looks/mtlx_hair_clear: MaterialOrigin { slots: [4], displaced: false } +provenance material /World/Looks/mtlx_hair_color: MaterialOrigin { slots: [7], displaced: false } +provenance material /World/Looks/mtlx_hair_melanin: MaterialOrigin { slots: [6], displaced: false } +provenance material /World/Looks/mtlx_hair_mix: MaterialOrigin { slots: [5], displaced: false } +provenance material /World/Looks/mtlx_hair_roughness: MaterialOrigin { slots: [8], displaced: false } +provenance light /World/Back: LightOrigin { index: 0, geoms: 0..1 } +provenance light /World/Key: LightOrigin { index: 1, geoms: 1..2 } +provenance light /World/Sky: LightOrigin { index: 2, geoms: 2..2 } +provenance geometry 0..1: /World/Back +provenance geometry 1..2: /World/Key +provenance geometry 2..3: /World/Floor +provenance geometry 3..4: /World/DiffuseTwin +provenance geometry 4..5: /World/Clear +provenance geometry 5..6: /World/Mix +provenance geometry 6..7: /World/Melanin +provenance geometry 7..8: /World/Color +provenance geometry 8..9: /World/Roughness +provenance geometry 9..10: /World/Bare +provenance mesh: MeshOrigin { geom_id: 2, slot: 0, baked: true, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 14002714535549629103, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/World/Cam"), cameras: ["/World/Cam"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/World/Cam"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/hair_usda-541c95fb5b2e8895-1.image b/crates/crust-core/tests/data/import_baselines/hair_usda-541c95fb5b2e8895-1.image new file mode 100644 index 000000000..1e2bfedfa --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/hair_usda-541c95fb5b2e8895-1.image @@ -0,0 +1 @@ +192x64 16spp clamp-off 535052872f2730e9 diff --git a/crates/crust-core/tests/data/import_baselines/hair_usda-541c95fb5b2e8895-2.digest b/crates/crust-core/tests/data/import_baselines/hair_usda-541c95fb5b2e8895-2.digest new file mode 100644 index 000000000..f30fa8623 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/hair_usda-541c95fb5b2e8895-2.digest @@ -0,0 +1,53 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/World/Cam") +camera: Camera { origin: Vec3A(0.0, 1.1, 9.0), lower_left_corner: Vec3A(-6.5532, -1.4320642, -0.9176731), horizontal: Vec3A(13.1064, -0.0, 0.0), vertical: Vec3A(0.0, 4.3661385, -0.15246892), u: Vec3A(1.0, -0.0, 0.0), v: Vec3A(0.0, 0.9993908, -0.034899496), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: Some("/Render/settings") +settings: RenderSettings { samples_per_pixel: 16, max_depth: 8, width: 192, height: 64, region: PixelRect { x0: 0, y0: 0, x1: 192, y1: 64 }, min_samples_per_pixel: 8, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 35.0, aperture: [36.0, 15.2908], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 10.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/hair.usda"], invisible_overrides: Some(0) } +layer: $DIR/hair.usda +warning: Warning { code: AssetUnsupportedByHost, kind: Skipped, count: 1, prims: [], message: "No asset loader: environment map $DIR/sky_gradient.exr ignored — the dome falls back to its uniform colour. Use Scene::from_usd_with_assets to supply one." } +lights: 3 +light 0: area name Some("/World/Back") lpe None pmf 0.33333334 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 1: area name Some("/World/Key") lpe None pmf 0.33333334 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 2: dome name Some("/World/Sky") lpe None pmf 0.33333334 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 10 geometries, PrimitiveBreakdown { triangles: 4, spheres: 1, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 7 } top level, PrimitiveBreakdown { triangles: 4, spheres: 1, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 672, instances: 7 } unique, motion false +geom 0: material #0 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:2db093b27e835741 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=1:2db093b27e835741 +geom 1: material #1 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:533cf986f15c8cee camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=2:533cf986f15c8cee +geom 2: material #2 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:9626b0f2f3e041c5 camera=2:9626b0f2f3e041c5 shadow=2:9626b0f2f3e041c5 indirect=2:9626b0f2f3e041c5 +geom 3: material #3 Signature { kind: "MaterialX", cutout: false, straight: false, boundary: false, emits: false, uv: true, uv_primvar: None, face_texture: None, curve: Some((false, false, [])), primvars: None } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves true scale 1.0 motion [] pieces all=96:fd556c69aea7816a camera=96:fd556c69aea7816a shadow=96:fd556c69aea7816a indirect=96:fd556c69aea7816a +geom 4: material #4 Signature { kind: "MaterialX", cutout: false, straight: false, boundary: false, emits: false, uv: true, uv_primvar: None, face_texture: None, curve: Some((false, false, [])), primvars: None } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves true scale 1.0 motion [] pieces all=96:5db2875e1dc27b25 camera=96:5db2875e1dc27b25 shadow=96:5db2875e1dc27b25 indirect=96:5db2875e1dc27b25 +geom 5: material #5 Signature { kind: "MaterialX", cutout: false, straight: false, boundary: false, emits: false, uv: true, uv_primvar: None, face_texture: None, curve: Some((false, false, [])), primvars: None } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves true scale 1.0 motion [] pieces all=96:8e8b8e2abe070c9e camera=96:8e8b8e2abe070c9e shadow=96:8e8b8e2abe070c9e indirect=96:8e8b8e2abe070c9e +geom 6: material #6 Signature { kind: "MaterialX", cutout: false, straight: false, boundary: false, emits: false, uv: true, uv_primvar: None, face_texture: None, curve: Some((false, false, [])), primvars: None } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves true scale 1.0 motion [] pieces all=96:668f59dd29ce5a6e camera=96:668f59dd29ce5a6e shadow=96:668f59dd29ce5a6e indirect=96:668f59dd29ce5a6e +geom 7: material #7 Signature { kind: "MaterialX", cutout: false, straight: false, boundary: false, emits: false, uv: true, uv_primvar: None, face_texture: None, curve: Some((false, false, [])), primvars: None } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves true scale 1.0 motion [] pieces all=96:5125d392763dd912 camera=96:5125d392763dd912 shadow=96:5125d392763dd912 indirect=96:5125d392763dd912 +geom 8: material #8 Signature { kind: "MaterialX", cutout: false, straight: false, boundary: false, emits: false, uv: true, uv_primvar: None, face_texture: None, curve: Some((false, false, [])), primvars: None } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves true scale 1.0 motion [] pieces all=96:b682384aae38cba1 camera=96:b682384aae38cba1 shadow=96:b682384aae38cba1 indirect=96:b682384aae38cba1 +geom 9: material #9 Signature { kind: "MaterialX", cutout: false, straight: false, boundary: false, emits: false, uv: true, uv_primvar: None, face_texture: None, curve: Some((false, false, [])), primvars: None } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves true scale 1.0 motion [] pieces all=96:231e5f4733f3e2de camera=96:231e5f4733f3e2de shadow=96:231e5f4733f3e2de indirect=96:231e5f4733f3e2de +provenance material /World/Looks/Floor: MaterialOrigin { slots: [2], displaced: false } +provenance material /World/Looks/mtlx_diffuse_twin: MaterialOrigin { slots: [3], displaced: false } +provenance material /World/Looks/mtlx_hair_bare: MaterialOrigin { slots: [9], displaced: false } +provenance material /World/Looks/mtlx_hair_clear: MaterialOrigin { slots: [4], displaced: false } +provenance material /World/Looks/mtlx_hair_color: MaterialOrigin { slots: [7], displaced: false } +provenance material /World/Looks/mtlx_hair_melanin: MaterialOrigin { slots: [6], displaced: false } +provenance material /World/Looks/mtlx_hair_mix: MaterialOrigin { slots: [5], displaced: false } +provenance material /World/Looks/mtlx_hair_roughness: MaterialOrigin { slots: [8], displaced: false } +provenance light /World/Back: LightOrigin { index: 0, geoms: 0..1 } +provenance light /World/Key: LightOrigin { index: 1, geoms: 1..2 } +provenance light /World/Sky: LightOrigin { index: 2, geoms: 2..2 } +provenance geometry 0..1: /World/Back +provenance geometry 1..2: /World/Key +provenance geometry 2..3: /World/Floor +provenance geometry 3..4: /World/DiffuseTwin +provenance geometry 4..5: /World/Clear +provenance geometry 5..6: /World/Mix +provenance geometry 6..7: /World/Melanin +provenance geometry 7..8: /World/Color +provenance geometry 8..9: /World/Roughness +provenance geometry 9..10: /World/Bare +provenance mesh: MeshOrigin { geom_id: 2, slot: 0, baked: true, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 14002714535549629103, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/World/Cam"), cameras: ["/World/Cam"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/World/Cam"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/hair_usda-541c95fb5b2e8895-2.image b/crates/crust-core/tests/data/import_baselines/hair_usda-541c95fb5b2e8895-2.image new file mode 100644 index 000000000..1e2bfedfa --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/hair_usda-541c95fb5b2e8895-2.image @@ -0,0 +1 @@ +192x64 16spp clamp-off 535052872f2730e9 diff --git a/crates/crust-core/tests/data/import_baselines/hair_usda-65dd84de0e473f00-1.digest b/crates/crust-core/tests/data/import_baselines/hair_usda-65dd84de0e473f00-1.digest new file mode 100644 index 000000000..c9508ef36 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/hair_usda-65dd84de0e473f00-1.digest @@ -0,0 +1,52 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/World/Cam") +camera: Camera { origin: Vec3A(0.0, 1.1, 9.0), lower_left_corner: Vec3A(-6.5532, -1.4320642, -0.9176731), horizontal: Vec3A(13.1064, -0.0, 0.0), vertical: Vec3A(0.0, 4.3661385, -0.15246892), u: Vec3A(1.0, -0.0, 0.0), v: Vec3A(0.0, 0.9993908, -0.034899496), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: Some("/Render/settings") +settings: RenderSettings { samples_per_pixel: 16, max_depth: 8, width: 192, height: 64, region: PixelRect { x0: 0, y0: 0, x1: 192, y1: 64 }, min_samples_per_pixel: 8, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 35.0, aperture: [36.0, 15.2908], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 10.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/hair.usda"], invisible_overrides: Some(0) } +layer: $DIR/hair.usda +lights: 3 +light 0: area name Some("/World/Back") lpe None pmf 0.33333334 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 1: area name Some("/World/Key") lpe None pmf 0.33333334 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 2: dome name Some("/World/Sky") lpe None pmf 0.33333334 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 10 geometries, PrimitiveBreakdown { triangles: 4, spheres: 1, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 7 } top level, PrimitiveBreakdown { triangles: 4, spheres: 1, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 672, instances: 7 } unique, motion false +geom 0: material #0 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:2db093b27e835741 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=1:2db093b27e835741 +geom 1: material #1 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:533cf986f15c8cee camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=2:533cf986f15c8cee +geom 2: material #2 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:9626b0f2f3e041c5 camera=2:9626b0f2f3e041c5 shadow=2:9626b0f2f3e041c5 indirect=2:9626b0f2f3e041c5 +geom 3: material #3 Signature { kind: "MaterialX", cutout: false, straight: false, boundary: false, emits: false, uv: true, uv_primvar: None, face_texture: None, curve: Some((false, false, [])), primvars: None } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves true scale 1.0 motion [] pieces all=96:fd556c69aea7816a camera=96:fd556c69aea7816a shadow=96:fd556c69aea7816a indirect=96:fd556c69aea7816a +geom 4: material #4 Signature { kind: "MaterialX", cutout: false, straight: false, boundary: false, emits: false, uv: true, uv_primvar: None, face_texture: None, curve: Some((false, false, [])), primvars: None } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves true scale 1.0 motion [] pieces all=96:5db2875e1dc27b25 camera=96:5db2875e1dc27b25 shadow=96:5db2875e1dc27b25 indirect=96:5db2875e1dc27b25 +geom 5: material #5 Signature { kind: "MaterialX", cutout: false, straight: false, boundary: false, emits: false, uv: true, uv_primvar: None, face_texture: None, curve: Some((false, false, [])), primvars: None } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves true scale 1.0 motion [] pieces all=96:8e8b8e2abe070c9e camera=96:8e8b8e2abe070c9e shadow=96:8e8b8e2abe070c9e indirect=96:8e8b8e2abe070c9e +geom 6: material #6 Signature { kind: "MaterialX", cutout: false, straight: false, boundary: false, emits: false, uv: true, uv_primvar: None, face_texture: None, curve: Some((false, false, [])), primvars: None } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves true scale 1.0 motion [] pieces all=96:668f59dd29ce5a6e camera=96:668f59dd29ce5a6e shadow=96:668f59dd29ce5a6e indirect=96:668f59dd29ce5a6e +geom 7: material #7 Signature { kind: "MaterialX", cutout: false, straight: false, boundary: false, emits: false, uv: true, uv_primvar: None, face_texture: None, curve: Some((false, false, [])), primvars: None } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves true scale 1.0 motion [] pieces all=96:5125d392763dd912 camera=96:5125d392763dd912 shadow=96:5125d392763dd912 indirect=96:5125d392763dd912 +geom 8: material #8 Signature { kind: "MaterialX", cutout: false, straight: false, boundary: false, emits: false, uv: true, uv_primvar: None, face_texture: None, curve: Some((false, false, [])), primvars: None } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves true scale 1.0 motion [] pieces all=96:b682384aae38cba1 camera=96:b682384aae38cba1 shadow=96:b682384aae38cba1 indirect=96:b682384aae38cba1 +geom 9: material #9 Signature { kind: "MaterialX", cutout: false, straight: false, boundary: false, emits: false, uv: true, uv_primvar: None, face_texture: None, curve: Some((false, false, [])), primvars: None } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves true scale 1.0 motion [] pieces all=96:231e5f4733f3e2de camera=96:231e5f4733f3e2de shadow=96:231e5f4733f3e2de indirect=96:231e5f4733f3e2de +provenance material /World/Looks/Floor: MaterialOrigin { slots: [2], displaced: false } +provenance material /World/Looks/mtlx_diffuse_twin: MaterialOrigin { slots: [3], displaced: false } +provenance material /World/Looks/mtlx_hair_bare: MaterialOrigin { slots: [9], displaced: false } +provenance material /World/Looks/mtlx_hair_clear: MaterialOrigin { slots: [4], displaced: false } +provenance material /World/Looks/mtlx_hair_color: MaterialOrigin { slots: [7], displaced: false } +provenance material /World/Looks/mtlx_hair_melanin: MaterialOrigin { slots: [6], displaced: false } +provenance material /World/Looks/mtlx_hair_mix: MaterialOrigin { slots: [5], displaced: false } +provenance material /World/Looks/mtlx_hair_roughness: MaterialOrigin { slots: [8], displaced: false } +provenance light /World/Back: LightOrigin { index: 0, geoms: 0..1 } +provenance light /World/Key: LightOrigin { index: 1, geoms: 1..2 } +provenance light /World/Sky: LightOrigin { index: 2, geoms: 2..2 } +provenance geometry 0..1: /World/Back +provenance geometry 1..2: /World/Key +provenance geometry 2..3: /World/Floor +provenance geometry 3..4: /World/DiffuseTwin +provenance geometry 4..5: /World/Clear +provenance geometry 5..6: /World/Mix +provenance geometry 6..7: /World/Melanin +provenance geometry 7..8: /World/Color +provenance geometry 8..9: /World/Roughness +provenance geometry 9..10: /World/Bare +provenance mesh: MeshOrigin { geom_id: 2, slot: 0, baked: true, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 14002714535549629103, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: true, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/World/Cam"), cameras: ["/World/Cam"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/World/Cam"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/hair_usda-65dd84de0e473f00-1.image b/crates/crust-core/tests/data/import_baselines/hair_usda-65dd84de0e473f00-1.image new file mode 100644 index 000000000..dd573d8a2 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/hair_usda-65dd84de0e473f00-1.image @@ -0,0 +1 @@ +192x64 16spp clamp-off fee0a8f83dd924af diff --git a/crates/crust-core/tests/data/import_baselines/hair_variation_usda-4ab3c7f511466a98-1.digest b/crates/crust-core/tests/data/import_baselines/hair_variation_usda-4ab3c7f511466a98-1.digest new file mode 100644 index 000000000..b0e4d7803 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/hair_variation_usda-4ab3c7f511466a98-1.digest @@ -0,0 +1,35 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/World/Cam") +camera: Camera { origin: Vec3A(0.0, 1.1, 9.0), lower_left_corner: Vec3A(-5.142858, -1.8188573, -0.9041662), horizontal: Vec3A(10.285716, -0.0, 0.0), vertical: Vec3A(0.0, 5.1397247, -0.17948315), u: Vec3A(1.0, -0.0, 0.0), v: Vec3A(0.0, 0.9993908, -0.034899496), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: Some("/Render/settings") +settings: RenderSettings { samples_per_pixel: 16, max_depth: 8, width: 320, height: 160, region: PixelRect { x0: 0, y0: 0, x1: 320, y1: 160 }, min_samples_per_pixel: 8, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 35.0, aperture: [36.0, 15.2908], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 10.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/hair_variation.usda"], invisible_overrides: Some(0) } +layer: $DIR/hair_variation.usda +warning: Warning { code: AssetUnsupportedByHost, kind: Skipped, count: 1, prims: [], message: "No asset loader: environment map $DIR/sky_gradient.exr ignored — the dome falls back to its uniform colour. Use Scene::from_usd_with_assets to supply one." } +lights: 3 +light 0: area name Some("/World/Back") lpe None pmf 0.33333334 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 1: area name Some("/World/Key") lpe None pmf 0.33333334 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 2: dome name Some("/World/Sky") lpe None pmf 0.33333334 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 4 geometries, PrimitiveBreakdown { triangles: 4, spheres: 1, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 1 } top level, PrimitiveBreakdown { triangles: 4, spheres: 1, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 240, instances: 1 } unique, motion false +geom 0: material #0 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:2db093b27e835741 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=1:2db093b27e835741 +geom 1: material #1 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:533cf986f15c8cee camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=2:533cf986f15c8cee +geom 2: material #2 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:9626b0f2f3e041c5 camera=2:9626b0f2f3e041c5 shadow=2:9626b0f2f3e041c5 indirect=2:9626b0f2f3e041c5 +geom 3: material #3 Signature { kind: "MaterialX", cutout: false, straight: false, boundary: false, emits: false, uv: true, uv_primvar: None, face_texture: None, curve: Some((false, true, ["rootColor"])), primvars: None } class 65535 holdout false transparent false map None uv None shading None strands Some(0) aov None swapped false curves true scale 1.0 motion [] pieces all=240:0c261c5aaf779f46 camera=240:0c261c5aaf779f46 shadow=240:0c261c5aaf779f46 indirect=240:0c261c5aaf779f46 +provenance material /World/Looks/Floor: MaterialOrigin { slots: [2], displaced: false } +provenance material /World/Looks/mtlx_hair_variation: MaterialOrigin { slots: [3], displaced: false } +provenance light /World/Back: LightOrigin { index: 0, geoms: 0..1 } +provenance light /World/Key: LightOrigin { index: 1, geoms: 1..2 } +provenance light /World/Sky: LightOrigin { index: 2, geoms: 2..2 } +provenance geometry 0..1: /World/Back +provenance geometry 1..2: /World/Key +provenance geometry 2..3: /World/Floor +provenance geometry 3..4: /World/Groom +provenance mesh: MeshOrigin { geom_id: 2, slot: 0, baked: true, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 14002714535549629103, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/World/Cam"), cameras: ["/World/Cam"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/World/Cam"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/hair_variation_usda-4ab3c7f511466a98-1.image b/crates/crust-core/tests/data/import_baselines/hair_variation_usda-4ab3c7f511466a98-1.image new file mode 100644 index 000000000..f8dec34f4 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/hair_variation_usda-4ab3c7f511466a98-1.image @@ -0,0 +1 @@ +320x160 16spp clamp-off 1c7bbba8fff23870 diff --git a/crates/crust-core/tests/data/import_baselines/hair_variation_usda-921fbdca7fd9bc69-1.digest b/crates/crust-core/tests/data/import_baselines/hair_variation_usda-921fbdca7fd9bc69-1.digest new file mode 100644 index 000000000..b0e4d7803 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/hair_variation_usda-921fbdca7fd9bc69-1.digest @@ -0,0 +1,35 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/World/Cam") +camera: Camera { origin: Vec3A(0.0, 1.1, 9.0), lower_left_corner: Vec3A(-5.142858, -1.8188573, -0.9041662), horizontal: Vec3A(10.285716, -0.0, 0.0), vertical: Vec3A(0.0, 5.1397247, -0.17948315), u: Vec3A(1.0, -0.0, 0.0), v: Vec3A(0.0, 0.9993908, -0.034899496), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: Some("/Render/settings") +settings: RenderSettings { samples_per_pixel: 16, max_depth: 8, width: 320, height: 160, region: PixelRect { x0: 0, y0: 0, x1: 320, y1: 160 }, min_samples_per_pixel: 8, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 35.0, aperture: [36.0, 15.2908], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 10.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/hair_variation.usda"], invisible_overrides: Some(0) } +layer: $DIR/hair_variation.usda +warning: Warning { code: AssetUnsupportedByHost, kind: Skipped, count: 1, prims: [], message: "No asset loader: environment map $DIR/sky_gradient.exr ignored — the dome falls back to its uniform colour. Use Scene::from_usd_with_assets to supply one." } +lights: 3 +light 0: area name Some("/World/Back") lpe None pmf 0.33333334 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 1: area name Some("/World/Key") lpe None pmf 0.33333334 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 2: dome name Some("/World/Sky") lpe None pmf 0.33333334 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 4 geometries, PrimitiveBreakdown { triangles: 4, spheres: 1, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 1 } top level, PrimitiveBreakdown { triangles: 4, spheres: 1, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 240, instances: 1 } unique, motion false +geom 0: material #0 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:2db093b27e835741 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=1:2db093b27e835741 +geom 1: material #1 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:533cf986f15c8cee camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=2:533cf986f15c8cee +geom 2: material #2 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:9626b0f2f3e041c5 camera=2:9626b0f2f3e041c5 shadow=2:9626b0f2f3e041c5 indirect=2:9626b0f2f3e041c5 +geom 3: material #3 Signature { kind: "MaterialX", cutout: false, straight: false, boundary: false, emits: false, uv: true, uv_primvar: None, face_texture: None, curve: Some((false, true, ["rootColor"])), primvars: None } class 65535 holdout false transparent false map None uv None shading None strands Some(0) aov None swapped false curves true scale 1.0 motion [] pieces all=240:0c261c5aaf779f46 camera=240:0c261c5aaf779f46 shadow=240:0c261c5aaf779f46 indirect=240:0c261c5aaf779f46 +provenance material /World/Looks/Floor: MaterialOrigin { slots: [2], displaced: false } +provenance material /World/Looks/mtlx_hair_variation: MaterialOrigin { slots: [3], displaced: false } +provenance light /World/Back: LightOrigin { index: 0, geoms: 0..1 } +provenance light /World/Key: LightOrigin { index: 1, geoms: 1..2 } +provenance light /World/Sky: LightOrigin { index: 2, geoms: 2..2 } +provenance geometry 0..1: /World/Back +provenance geometry 1..2: /World/Key +provenance geometry 2..3: /World/Floor +provenance geometry 3..4: /World/Groom +provenance mesh: MeshOrigin { geom_id: 2, slot: 0, baked: true, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 14002714535549629103, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/World/Cam"), cameras: ["/World/Cam"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/World/Cam"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/hair_variation_usda-921fbdca7fd9bc69-1.image b/crates/crust-core/tests/data/import_baselines/hair_variation_usda-921fbdca7fd9bc69-1.image new file mode 100644 index 000000000..f8dec34f4 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/hair_variation_usda-921fbdca7fd9bc69-1.image @@ -0,0 +1 @@ +320x160 16spp clamp-off 1c7bbba8fff23870 diff --git a/crates/crust-core/tests/data/import_baselines/hair_variation_usda-921fbdca7fd9bc69-2.digest b/crates/crust-core/tests/data/import_baselines/hair_variation_usda-921fbdca7fd9bc69-2.digest new file mode 100644 index 000000000..b0e4d7803 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/hair_variation_usda-921fbdca7fd9bc69-2.digest @@ -0,0 +1,35 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/World/Cam") +camera: Camera { origin: Vec3A(0.0, 1.1, 9.0), lower_left_corner: Vec3A(-5.142858, -1.8188573, -0.9041662), horizontal: Vec3A(10.285716, -0.0, 0.0), vertical: Vec3A(0.0, 5.1397247, -0.17948315), u: Vec3A(1.0, -0.0, 0.0), v: Vec3A(0.0, 0.9993908, -0.034899496), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: Some("/Render/settings") +settings: RenderSettings { samples_per_pixel: 16, max_depth: 8, width: 320, height: 160, region: PixelRect { x0: 0, y0: 0, x1: 320, y1: 160 }, min_samples_per_pixel: 8, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 35.0, aperture: [36.0, 15.2908], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 10.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/hair_variation.usda"], invisible_overrides: Some(0) } +layer: $DIR/hair_variation.usda +warning: Warning { code: AssetUnsupportedByHost, kind: Skipped, count: 1, prims: [], message: "No asset loader: environment map $DIR/sky_gradient.exr ignored — the dome falls back to its uniform colour. Use Scene::from_usd_with_assets to supply one." } +lights: 3 +light 0: area name Some("/World/Back") lpe None pmf 0.33333334 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 1: area name Some("/World/Key") lpe None pmf 0.33333334 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 2: dome name Some("/World/Sky") lpe None pmf 0.33333334 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 4 geometries, PrimitiveBreakdown { triangles: 4, spheres: 1, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 1 } top level, PrimitiveBreakdown { triangles: 4, spheres: 1, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 240, instances: 1 } unique, motion false +geom 0: material #0 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:2db093b27e835741 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=1:2db093b27e835741 +geom 1: material #1 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:533cf986f15c8cee camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=2:533cf986f15c8cee +geom 2: material #2 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:9626b0f2f3e041c5 camera=2:9626b0f2f3e041c5 shadow=2:9626b0f2f3e041c5 indirect=2:9626b0f2f3e041c5 +geom 3: material #3 Signature { kind: "MaterialX", cutout: false, straight: false, boundary: false, emits: false, uv: true, uv_primvar: None, face_texture: None, curve: Some((false, true, ["rootColor"])), primvars: None } class 65535 holdout false transparent false map None uv None shading None strands Some(0) aov None swapped false curves true scale 1.0 motion [] pieces all=240:0c261c5aaf779f46 camera=240:0c261c5aaf779f46 shadow=240:0c261c5aaf779f46 indirect=240:0c261c5aaf779f46 +provenance material /World/Looks/Floor: MaterialOrigin { slots: [2], displaced: false } +provenance material /World/Looks/mtlx_hair_variation: MaterialOrigin { slots: [3], displaced: false } +provenance light /World/Back: LightOrigin { index: 0, geoms: 0..1 } +provenance light /World/Key: LightOrigin { index: 1, geoms: 1..2 } +provenance light /World/Sky: LightOrigin { index: 2, geoms: 2..2 } +provenance geometry 0..1: /World/Back +provenance geometry 1..2: /World/Key +provenance geometry 2..3: /World/Floor +provenance geometry 3..4: /World/Groom +provenance mesh: MeshOrigin { geom_id: 2, slot: 0, baked: true, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 14002714535549629103, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/World/Cam"), cameras: ["/World/Cam"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/World/Cam"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/hair_variation_usda-921fbdca7fd9bc69-2.image b/crates/crust-core/tests/data/import_baselines/hair_variation_usda-921fbdca7fd9bc69-2.image new file mode 100644 index 000000000..f8dec34f4 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/hair_variation_usda-921fbdca7fd9bc69-2.image @@ -0,0 +1 @@ +320x160 16spp clamp-off 1c7bbba8fff23870 diff --git a/crates/crust-core/tests/data/import_baselines/hair_variation_usda-aa2b773ff3d2e5c2-1.digest b/crates/crust-core/tests/data/import_baselines/hair_variation_usda-aa2b773ff3d2e5c2-1.digest new file mode 100644 index 000000000..5aa7fbcf9 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/hair_variation_usda-aa2b773ff3d2e5c2-1.digest @@ -0,0 +1,34 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/World/Cam") +camera: Camera { origin: Vec3A(0.0, 1.1, 9.0), lower_left_corner: Vec3A(-5.142858, -1.8188573, -0.9041662), horizontal: Vec3A(10.285716, -0.0, 0.0), vertical: Vec3A(0.0, 5.1397247, -0.17948315), u: Vec3A(1.0, -0.0, 0.0), v: Vec3A(0.0, 0.9993908, -0.034899496), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: Some("/Render/settings") +settings: RenderSettings { samples_per_pixel: 16, max_depth: 8, width: 320, height: 160, region: PixelRect { x0: 0, y0: 0, x1: 320, y1: 160 }, min_samples_per_pixel: 8, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 35.0, aperture: [36.0, 15.2908], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 10.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/hair_variation.usda"], invisible_overrides: Some(0) } +layer: $DIR/hair_variation.usda +lights: 3 +light 0: area name Some("/World/Back") lpe None pmf 0.33333334 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 1: area name Some("/World/Key") lpe None pmf 0.33333334 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 2: dome name Some("/World/Sky") lpe None pmf 0.33333334 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 4 geometries, PrimitiveBreakdown { triangles: 4, spheres: 1, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 1 } top level, PrimitiveBreakdown { triangles: 4, spheres: 1, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 240, instances: 1 } unique, motion false +geom 0: material #0 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:2db093b27e835741 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=1:2db093b27e835741 +geom 1: material #1 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:533cf986f15c8cee camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=2:533cf986f15c8cee +geom 2: material #2 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:9626b0f2f3e041c5 camera=2:9626b0f2f3e041c5 shadow=2:9626b0f2f3e041c5 indirect=2:9626b0f2f3e041c5 +geom 3: material #3 Signature { kind: "MaterialX", cutout: false, straight: false, boundary: false, emits: false, uv: true, uv_primvar: None, face_texture: None, curve: Some((false, true, ["rootColor"])), primvars: None } class 65535 holdout false transparent false map None uv None shading None strands Some(0) aov None swapped false curves true scale 1.0 motion [] pieces all=240:0c261c5aaf779f46 camera=240:0c261c5aaf779f46 shadow=240:0c261c5aaf779f46 indirect=240:0c261c5aaf779f46 +provenance material /World/Looks/Floor: MaterialOrigin { slots: [2], displaced: false } +provenance material /World/Looks/mtlx_hair_variation: MaterialOrigin { slots: [3], displaced: false } +provenance light /World/Back: LightOrigin { index: 0, geoms: 0..1 } +provenance light /World/Key: LightOrigin { index: 1, geoms: 1..2 } +provenance light /World/Sky: LightOrigin { index: 2, geoms: 2..2 } +provenance geometry 0..1: /World/Back +provenance geometry 1..2: /World/Key +provenance geometry 2..3: /World/Floor +provenance geometry 3..4: /World/Groom +provenance mesh: MeshOrigin { geom_id: 2, slot: 0, baked: true, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 14002714535549629103, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: true, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/World/Cam"), cameras: ["/World/Cam"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/World/Cam"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/hair_variation_usda-aa2b773ff3d2e5c2-1.image b/crates/crust-core/tests/data/import_baselines/hair_variation_usda-aa2b773ff3d2e5c2-1.image new file mode 100644 index 000000000..ba1e08e31 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/hair_variation_usda-aa2b773ff3d2e5c2-1.image @@ -0,0 +1 @@ +320x160 16spp clamp-off 1f935ae560cf3730 diff --git a/crates/crust-core/tests/data/import_baselines/hidden_source_classes_usda-a9259268854e750e-1.digest b/crates/crust-core/tests/data/import_baselines/hidden_source_classes_usda-a9259268854e750e-1.digest new file mode 100644 index 000000000..8b4e3c5d0 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/hidden_source_classes_usda-a9259268854e750e-1.digest @@ -0,0 +1,37 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: None +camera: Camera { origin: Vec3A(15.0, 3.0, 3.0), lower_left_corner: Vec3A(4.8863316, -0.044797063, 4.174048), horizontal: Vec3A(1.2295314, 0.0, -6.147657), vertical: Vec3A(-0.44830504, 3.4967792, -0.08966101), u: Vec3A(0.19611613, 0.0, -0.9805807), v: Vec3A(-0.1271232, 0.991561, -0.02542464), lens_radius: 0.05, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: None +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 640, height: 360, region: PixelRect { x0: 0, y0: 0, x1: 640, y1: 360 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: None, depth_of_field: true, motion_blur: false, layer_stack: ["$DIR/hidden_source_classes.usda"], invisible_overrides: Some(0) } +layer: $DIR/hidden_source_classes.usda +warning: Warning { code: CameraMissing, kind: Skipped, count: 1, prims: [], message: "USD stage has no UsdGeomCamera — falling back to world::get_settings camera" } +lights: 4 +light 0: area name Some("/World/Restricted") lpe None pmf 0.25 shadow RayMask(2) restricted true nee-only false twinned true gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 1: area name Some("/World/Free") lpe None pmf 0.25 shadow RayMask(4294967290) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 2: area name Some("/World/Hidden") lpe None pmf 0.25 shadow RayMask(4294967290) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 3: area name Some("/World/Visible") lpe None pmf 0.25 shadow RayMask(4294967290) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 6 geometries, PrimitiveBreakdown { triangles: 0, spheres: 6, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 0, spheres: 6, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:beb3542d35af08b9 camera=1:beb3542d35af08b9 shadow=1:beb3542d35af08b9 indirect=1:beb3542d35af08b9 +geom 1: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:100347b17cae42f5 camera=1:100347b17cae42f5 shadow=0:cbf29ce484222325 indirect=1:100347b17cae42f5 +geom 2: material #1 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:e8c481bd5fb0dad3 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=1:e8c481bd5fb0dad3 +geom 3: material #2 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:4e54bfce8bcfbcfa camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=1:4e54bfce8bcfbcfa +geom 4: material #3 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:41af89000f14f1d5 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=1:41af89000f14f1d5 +geom 5: material #4 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:b766321c6a421f75 camera=1:b766321c6a421f75 shadow=1:b766321c6a421f75 indirect=1:b766321c6a421f75 +provenance light /World/Free: LightOrigin { index: 1, geoms: 3..4 } +provenance light /World/Hidden: LightOrigin { index: 2, geoms: 4..5 } +provenance light /World/Restricted: LightOrigin { index: 0, geoms: 2..3 } +provenance light /World/Visible: LightOrigin { index: 3, geoms: 5..6 } +provenance geometry 0..1: /World/Kept +provenance geometry 1..2: /World/Dropped +provenance geometry 2..3: /World/Restricted +provenance geometry 3..4: /World/Free +provenance geometry 4..5: /World/Hidden +provenance geometry 5..6: /World/Visible +provenance spheres: [0, 1] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: None, cameras: [], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: None, offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/hidden_source_classes_usda-a9259268854e750e-1.image b/crates/crust-core/tests/data/import_baselines/hidden_source_classes_usda-a9259268854e750e-1.image new file mode 100644 index 000000000..c734c5b1d --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/hidden_source_classes_usda-a9259268854e750e-1.image @@ -0,0 +1 @@ +640x360 16spp clamp-off a04a09c0d4b5e325 diff --git a/crates/crust-core/tests/data/import_baselines/hidden_usda-9a2924a818f3fb98-1.digest b/crates/crust-core/tests/data/import_baselines/hidden_usda-9a2924a818f3fb98-1.digest new file mode 100644 index 000000000..1a95340ae --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/hidden_usda-9a2924a818f3fb98-1.digest @@ -0,0 +1,90 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: None +camera: Camera { origin: Vec3A(15.0, 3.0, 3.0), lower_left_corner: Vec3A(4.8863316, -0.044797063, 4.174048), horizontal: Vec3A(1.2295314, 0.0, -6.147657), vertical: Vec3A(-0.44830504, 3.4967792, -0.08966101), u: Vec3A(0.19611613, 0.0, -0.9805807), v: Vec3A(-0.1271232, 0.991561, -0.02542464), lens_radius: 0.05, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: None +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 640, height: 360, region: PixelRect { x0: 0, y0: 0, x1: 640, y1: 360 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: None, depth_of_field: true, motion_blur: false, layer_stack: ["$DIR/hidden.usda"], invisible_overrides: Some(0) } +layer: $DIR/hidden.usda +warning: Warning { code: CameraMissing, kind: Skipped, count: 1, prims: [], message: "USD stage has no UsdGeomCamera — falling back to world::get_settings camera" } +lights: 0 +volumes: 0 +world: 2 geometries, PrimitiveBreakdown { triangles: 0, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 2 } top level, PrimitiveBreakdown { triangles: 0, spheres: 1, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 3 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:475def39fc9d6a51 camera=1:475def39fc9d6a51 shadow=1:475def39fc9d6a51 indirect=1:475def39fc9d6a51 +geom 1: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:1b55130c56fba621 camera=1:1b55130c56fba621 shadow=1:1b55130c56fba621 indirect=1:1b55130c56fba621 +provenance geometry 0..2: /W/Groves +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 9983431792377398331, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 0 }), placements: 0, shared: true, displaced: false } +provenance mesh slot 1: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 445393997096090275, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 1 }), placements: 0, shared: true, displaced: false } +provenance mesh slot 2: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 12530787508316231193, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 0 }), placements: 0, shared: true, displaced: false } +provenance mesh slot 3: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 2003607608452276953, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 1 }), placements: 0, shared: true, displaced: false } +provenance mesh slot 4: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 14655719404458108924, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 0 }), placements: 0, shared: true, displaced: false } +provenance mesh slot 5: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 8197086280809854330, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 1 }), placements: 0, shared: true, displaced: false } +provenance mesh slot 6: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 15226241633731644800, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 0 }), placements: 0, shared: true, displaced: false } +provenance mesh slot 7: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 1220030663393014154, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 1 }), placements: 0, shared: true, displaced: false } +provenance mesh slot 8: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 9671416021768249711, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 0 }), placements: 0, shared: true, displaced: false } +provenance mesh slot 9: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 713395937854610793, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 1 }), placements: 0, shared: true, displaced: false } +provenance mesh slot 10: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 9015895206046420096, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 0 }), placements: 0, shared: true, displaced: false } +provenance mesh slot 11: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 6053246308793941277, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 1 }), placements: 0, shared: true, displaced: false } +provenance mesh slot 12: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 3354812878111187853, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 0 }), placements: 0, shared: true, displaced: false } +provenance mesh slot 13: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 2143590123543198581, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 1 }), placements: 0, shared: true, displaced: false } +provenance mesh slot 14: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 12825708062627280916, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 0 }), placements: 0, shared: true, displaced: false } +provenance mesh slot 15: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 17390326888399512289, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 1 }), placements: 0, shared: true, displaced: false } +provenance mesh slot 16: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 5167343440688746005, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 0 }), placements: 0, shared: true, displaced: false } +provenance mesh slot 17: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 6431256199563153267, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 1 }), placements: 0, shared: true, displaced: false } +provenance mesh slot 18: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 17938759324587019490, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 0 }), placements: 0, shared: true, displaced: false } +provenance mesh slot 19: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 9338845809469782352, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 1 }), placements: 0, shared: true, displaced: false } +provenance mesh slot 20: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 5016274748741901678, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 0 }), placements: 0, shared: true, displaced: false } +provenance mesh slot 21: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 18148940518120066603, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 1 }), placements: 0, shared: true, displaced: false } +provenance mesh slot 22: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 4830200885891814983, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 0 }), placements: 0, shared: true, displaced: false } +provenance mesh slot 23: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 15766972410381609041, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 1 }), placements: 0, shared: true, displaced: false } +provenance mesh slot 24: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 9472872301105672276, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 0 }), placements: 0, shared: true, displaced: false } +provenance mesh slot 25: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 11414915196367845650, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 1 }), placements: 0, shared: true, displaced: false } +provenance mesh slot 26: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 9269437264134878215, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 0 }), placements: 0, shared: true, displaced: false } +provenance mesh slot 27: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 10241772988455119680, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 1 }), placements: 0, shared: true, displaced: false } +provenance mesh slot 28: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 6287388440238275734, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 0 }), placements: 0, shared: true, displaced: false } +provenance mesh slot 29: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 16540043469967507742, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 1 }), placements: 0, shared: true, displaced: false } +provenance mesh slot 30: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 12273703647221078853, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 0 }), placements: 0, shared: true, displaced: false } +provenance mesh slot 31: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 14885684870811093431, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 1 }), placements: 0, shared: true, displaced: false } +provenance mesh slot 32: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 11612700176135259559, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 0 }), placements: 0, shared: true, displaced: false } +provenance mesh slot 33: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 18124134558096145620, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 1 }), placements: 0, shared: true, displaced: false } +provenance mesh slot 34: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 1547305282937345631, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 0 }), placements: 0, shared: true, displaced: false } +provenance mesh slot 35: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 14319513361325090922, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 1 }), placements: 0, shared: true, displaced: false } +provenance mesh slot 36: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 12743050219495799660, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 0 }), placements: 0, shared: true, displaced: false } +provenance mesh slot 37: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 14564807414974621182, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 1 }), placements: 0, shared: true, displaced: false } +provenance mesh slot 38: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 15128490494491982350, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 0 }), placements: 0, shared: true, displaced: false } +provenance mesh slot 39: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 11141992223073874788, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 1 }), placements: 0, shared: true, displaced: false } +provenance mesh slot 40: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 2187686032361564554, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 0 }), placements: 0, shared: true, displaced: false } +provenance mesh slot 41: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 9703725567598092252, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 1 }), placements: 0, shared: true, displaced: false } +provenance mesh slot 42: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 6913685974256867465, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 0 }), placements: 0, shared: true, displaced: false } +provenance mesh slot 43: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 3100222640867777022, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 1 }), placements: 0, shared: true, displaced: false } +provenance mesh slot 44: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 5554913372606825388, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 0 }), placements: 0, shared: true, displaced: false } +provenance mesh slot 45: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 16649324141060687540, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 1 }), placements: 0, shared: true, displaced: false } +provenance mesh slot 46: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 2737295392186472633, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 0 }), placements: 0, shared: true, displaced: false } +provenance mesh slot 47: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 303054490942377425, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 1 }), placements: 0, shared: true, displaced: false } +provenance mesh slot 48: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 9767880336714203685, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 0 }), placements: 0, shared: true, displaced: false } +provenance mesh slot 49: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 6412687190128267277, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 1 }), placements: 0, shared: true, displaced: false } +provenance mesh slot 50: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 8058819299735866700, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 0 }), placements: 0, shared: true, displaced: false } +provenance mesh slot 51: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 11805635118953593289, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 1 }), placements: 0, shared: true, displaced: false } +provenance mesh slot 52: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 10587302289040357906, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 0 }), placements: 0, shared: true, displaced: false } +provenance mesh slot 53: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 915626683743930737, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 1 }), placements: 0, shared: true, displaced: false } +provenance mesh slot 54: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 2011260152324884985, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 0 }), placements: 0, shared: true, displaced: false } +provenance mesh slot 55: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 15004083201484757820, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 1 }), placements: 0, shared: true, displaced: false } +provenance mesh slot 56: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 4492824581372515845, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 0 }), placements: 0, shared: true, displaced: false } +provenance mesh slot 57: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 1556962713607594861, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 1 }), placements: 0, shared: true, displaced: false } +provenance mesh slot 58: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 13700768547374211392, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 0 }), placements: 0, shared: true, displaced: false } +provenance mesh slot 59: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 1736609624654126323, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 1 }), placements: 0, shared: true, displaced: false } +provenance mesh slot 60: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 7314348300970154562, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 0 }), placements: 0, shared: true, displaced: false } +provenance mesh slot 61: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 16137632259568160912, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 1 }), placements: 0, shared: true, displaced: false } +provenance mesh slot 62: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 5302950127304504092, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 0 }), placements: 0, shared: true, displaced: false } +provenance mesh slot 63: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 11033842897036242693, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 1 }), placements: 0, shared: true, displaced: false } +provenance mesh slot 64: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 1432794855324975849, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 0 }), placements: 0, shared: true, displaced: false } +provenance mesh slot 65: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 6417092498626891774, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 1 }), placements: 0, shared: true, displaced: false } +provenance mesh slot 66: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 15417142670901525198, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 0 }), placements: 0, shared: true, displaced: false } +provenance mesh slot 67: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 1660923941246006929, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 1 }), placements: 0, shared: true, displaced: false } +provenance mesh slot 68: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 7728745279061195760, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 0 }), placements: 0, shared: true, displaced: false } +provenance mesh slot 69: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 12950018545620570054, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 1 }), placements: 0, shared: true, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: None, cameras: [], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: None, offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/hidden_usda-9a2924a818f3fb98-1.image b/crates/crust-core/tests/data/import_baselines/hidden_usda-9a2924a818f3fb98-1.image new file mode 100644 index 000000000..c734c5b1d --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/hidden_usda-9a2924a818f3fb98-1.image @@ -0,0 +1 @@ +640x360 16spp clamp-off a04a09c0d4b5e325 diff --git a/crates/crust-core/tests/data/import_baselines/hidden_zero_scale_usda-a4193f9a6324f7d0-1.digest b/crates/crust-core/tests/data/import_baselines/hidden_zero_scale_usda-a4193f9a6324f7d0-1.digest new file mode 100644 index 000000000..0e93e9032 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/hidden_zero_scale_usda-a4193f9a6324f7d0-1.digest @@ -0,0 +1,19 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/W/Cam") +camera: Camera { origin: Vec3A(0.0, 0.0, 0.0), lower_left_corner: Vec3A(-2.0955, -1.1787187, -10.0), horizontal: Vec3A(4.191, 0.0, 0.0), vertical: Vec3A(0.0, 2.3574374, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: Some("/Render/settings") +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 640, height: 360, region: PixelRect { x0: 0, y0: 0, x1: 640, y1: 360 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 50.0, aperture: [20.955, 11.787188], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 10.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/hidden_zero_scale.usda"], invisible_overrides: Some(0) } +layer: $DIR/hidden_zero_scale.usda +lights: 0 +volumes: 0 +world: 1 geometries, PrimitiveBreakdown { triangles: 0, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 1 } top level, PrimitiveBreakdown { triangles: 768, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 1 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=768:bb9aeaae01563c51 camera=768:bb9aeaae01563c51 shadow=768:bb9aeaae01563c51 indirect=768:bb9aeaae01563c51 +provenance geometry 0..1: /W/Scatter +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 13487480004083563611, n_points: 386, n_indices: 2304, n_uvs: None, smooth: true, material: 0 }), placements: 0, shared: true, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: Some(ScreenKey([0, 0, 0, 1153360542, 0, 0, 0, 3212836864, 0, 3193345094, 1065353216, 0, 3193345094, 0, 3212836864, 3186714319, 0, 1065353216, 3186714319, 0, 0, 3212836864, 1073741824, 3])), domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/W/Cam"), cameras: ["/W/Cam"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/W/Cam"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/hidden_zero_scale_usda-a4193f9a6324f7d0-1.image b/crates/crust-core/tests/data/import_baselines/hidden_zero_scale_usda-a4193f9a6324f7d0-1.image new file mode 100644 index 000000000..c734c5b1d --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/hidden_zero_scale_usda-a4193f9a6324f7d0-1.image @@ -0,0 +1 @@ +640x360 16spp clamp-off a04a09c0d4b5e325 diff --git a/crates/crust-core/tests/data/import_baselines/high_bits_usda-276acbda2859c899-1.digest b/crates/crust-core/tests/data/import_baselines/high_bits_usda-276acbda2859c899-1.digest new file mode 100644 index 000000000..738067748 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/high_bits_usda-276acbda2859c899-1.digest @@ -0,0 +1,19 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: None +camera: Camera { origin: Vec3A(15.0, 3.0, 3.0), lower_left_corner: Vec3A(4.8863316, -0.044797063, 4.174048), horizontal: Vec3A(1.2295314, 0.0, -6.147657), vertical: Vec3A(-0.44830504, 3.4967792, -0.08966101), u: Vec3A(0.19611613, 0.0, -0.9805807), v: Vec3A(-0.1271232, 0.991561, -0.02542464), lens_radius: 0.05, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: None +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 640, height: 360, region: PixelRect { x0: 0, y0: 0, x1: 640, y1: 360 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: None, depth_of_field: true, motion_blur: false, layer_stack: ["$DIR/high_bits.usda"], invisible_overrides: Some(0) } +layer: $DIR/high_bits.usda +warning: Warning { code: CameraMissing, kind: Skipped, count: 1, prims: [], message: "USD stage has no UsdGeomCamera — falling back to world::get_settings camera" } +lights: 0 +volumes: 0 +world: 1 geometries, PrimitiveBreakdown { triangles: 0, spheres: 1, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 0, spheres: 1, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:984632b55acb5495 camera=0:cbf29ce484222325 shadow=1:984632b55acb5495 indirect=1:984632b55acb5495 +provenance geometry 0..1: /World/Ball +provenance spheres: [0] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: None, cameras: [], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: None, offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/high_bits_usda-276acbda2859c899-1.image b/crates/crust-core/tests/data/import_baselines/high_bits_usda-276acbda2859c899-1.image new file mode 100644 index 000000000..c734c5b1d --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/high_bits_usda-276acbda2859c899-1.image @@ -0,0 +1 @@ +640x360 16spp clamp-off a04a09c0d4b5e325 diff --git a/crates/crust-core/tests/data/import_baselines/holdout_usda-fcfa139ef12785fd-1.digest b/crates/crust-core/tests/data/import_baselines/holdout_usda-fcfa139ef12785fd-1.digest new file mode 100644 index 000000000..30ebc7c70 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/holdout_usda-fcfa139ef12785fd-1.digest @@ -0,0 +1,26 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/World/cam") +camera: Camera { origin: Vec3A(0.0, 0.0, 0.0), lower_left_corner: Vec3A(-5.0, -3.75, -10.0), horizontal: Vec3A(10.0, 0.0, 0.0), vertical: Vec3A(0.0, 7.5, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: Some("/Render/settings") +settings: RenderSettings { samples_per_pixel: 16, max_depth: 2, width: 32, height: 24, region: PixelRect { x0: 0, y0: 0, x1: 32, y1: 24 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [AovProduct { prim_path: "/Render/p", name: "p.exr", vars: [AovVar { prim_path: "/Render/C", name: "C", channel_prefix: None, source: Color, components: 3, precision: Float, accumulation: Filtered, clear: 0.0, expression: None, raw: false, variance: false }, AovVar { prim_path: "/Render/matte", name: "matte", channel_prefix: None, source: Primvar(PrimvarSource { index: 0, components: 1, role: Float }), components: 1, precision: Float, accumulation: Filtered, clear: 0.0, expression: None, raw: false, variance: false }, AovVar { prim_path: "/Render/depth", name: "depth", channel_prefix: None, source: Depth, components: 1, precision: Float, accumulation: Closest, clear: inf, expression: None, raw: false, variance: false }, AovVar { prim_path: "/Render/depth_filtered", name: "depth_filtered", channel_prefix: None, source: Depth, components: 1, precision: Float, accumulation: Filtered, clear: inf, expression: None, raw: false, variance: false }, AovVar { prim_path: "/Render/variance", name: "variance", channel_prefix: None, source: Variance, components: 1, precision: Float, accumulation: Filtered, clear: 0.0, expression: None, raw: false, variance: false }, AovVar { prim_path: "/Render/look_out", name: "look_out", channel_prefix: None, source: Filter(FilterSource { display: false, filter: 0, output: 0, components: 3, radiance: true }), components: 3, precision: Float, accumulation: Filtered, clear: 0.0, expression: None, raw: false, variance: false }], attributes: [] }], precomp: Some(Precomp { sample_filters: ["/Render/look"], display_filters: [], display: "beauty" }) } +pass: Some(PassSummary { path: "/Render/hold", holdouts: 1, camera_hidden: 0 }) +source: Source { lens: Some(Lens { focal_length: 24.0, aperture: [24.0, 18.0], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 10.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/holdout.usda"], invisible_overrides: Some(0) } +layer: $DIR/holdout.usda +lights: 1 +light 0: dome name Some("/World/sky") lpe None pmf 1.0 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 2 geometries, PrimitiveBreakdown { triangles: 4, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 4, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout true transparent false map None uv None shading None strands None aov Some((Some(0), false)) swapped false curves false scale 1.0 motion [] pieces all=2:2a13523c8e09c13d camera=2:2a13523c8e09c13d shadow=2:2a13523c8e09c13d indirect=2:2a13523c8e09c13d +geom 1: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:31db52e4afd4a225 camera=2:31db52e4afd4a225 shadow=2:31db52e4afd4a225 indirect=2:31db52e4afd4a225 +provenance light /World/sky: LightOrigin { index: 0, geoms: 0..0 } +provenance geometry 0..1: /World/Card +provenance geometry 1..2: /World/Wall +provenance mesh: MeshOrigin { geom_id: 0, slot: 0, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 1, slot: 1, baked: true, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 3430351340666728903, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 1: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 13118596165941616386, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: Some("/Render/hold"), keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: true, working: None, camera: Some("/World/cam"), cameras: ["/World/cam"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [("matte", 1)], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/World/cam"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/holdout_usda-fcfa139ef12785fd-1.image b/crates/crust-core/tests/data/import_baselines/holdout_usda-fcfa139ef12785fd-1.image new file mode 100644 index 000000000..343b5cb98 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/holdout_usda-fcfa139ef12785fd-1.image @@ -0,0 +1 @@ +32x24 16spp clamp-off b101099529f8e6cb diff --git a/crates/crust-core/tests/data/import_baselines/houdini_var_usda-c716d987aba001e4-1.digest b/crates/crust-core/tests/data/import_baselines/houdini_var_usda-c716d987aba001e4-1.digest new file mode 100644 index 000000000..ce7255a44 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/houdini_var_usda-c716d987aba001e4-1.digest @@ -0,0 +1,18 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/World/other") +camera: Camera { origin: Vec3A(0.0, 0.0, 0.0), lower_left_corner: Vec3A(-2.7183647, -1.5290802, -10.0), horizontal: Vec3A(5.4367294, 0.0, 0.0), vertical: Vec3A(0.0, 3.0581603, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: Some("/Render/settings") +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 640, height: 360, region: PixelRect { x0: 0, y0: 0, x1: 640, y1: 360 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [AovProduct { prim_path: "/Render/Products/aovs", name: "aovs.exr", vars: [AovVar { prim_path: "/Render/Products/Vars/Z", name: "depth", channel_prefix: None, source: Depth, components: 1, precision: Float, accumulation: Closest, clear: 0.0, expression: None, raw: false, variance: false }, AovVar { prim_path: "/Render/Products/Vars/N", name: "N", channel_prefix: None, source: Normal, components: 3, precision: Half, accumulation: Filtered, clear: 0.0, expression: None, raw: false, variance: false }], attributes: [("artist", "someone"), ("comment", "a comment")] }], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 50.0, aperture: [20.955, 15.2908], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 10.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/houdini_var.usda"], invisible_overrides: Some(0) } +layer: $DIR/houdini_var.usda +lights: 0 +volumes: 0 +world: 1 geometries, PrimitiveBreakdown { triangles: 0, spheres: 1, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 0, spheres: 1, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:fb1e7d48790aec95 camera=1:fb1e7d48790aec95 shadow=1:fb1e7d48790aec95 indirect=1:fb1e7d48790aec95 +provenance geometry 0..1: /World/ball +provenance spheres: [0] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/World/other"), cameras: ["/World/other", "/World/cam"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/World/other"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/houdini_var_usda-c716d987aba001e4-1.image b/crates/crust-core/tests/data/import_baselines/houdini_var_usda-c716d987aba001e4-1.image new file mode 100644 index 000000000..c734c5b1d --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/houdini_var_usda-c716d987aba001e4-1.image @@ -0,0 +1 @@ +640x360 16spp clamp-off a04a09c0d4b5e325 diff --git a/crates/crust-core/tests/data/import_baselines/huge_blur_usda-2cc6d64af71f20b3-1.digest b/crates/crust-core/tests/data/import_baselines/huge_blur_usda-2cc6d64af71f20b3-1.digest new file mode 100644 index 000000000..369be51df --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/huge_blur_usda-2cc6d64af71f20b3-1.digest @@ -0,0 +1,27 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/World/cam") +camera: Camera { origin: Vec3A(0.0, 0.0, 0.0), lower_left_corner: Vec3A(-5.0, -3.75, -10.0), horizontal: Vec3A(10.0, 0.0, 0.0), vertical: Vec3A(0.0, 7.5, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: Some("/Render/settings") +settings: RenderSettings { samples_per_pixel: 16, max_depth: 2, width: 32, height: 24, region: PixelRect { x0: 0, y0: 0, x1: 32, y1: 24 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [AovProduct { prim_path: "/Render/p", name: "p.exr", vars: [AovVar { prim_path: "/Render/C", name: "C", channel_prefix: None, source: Color, components: 3, precision: Float, accumulation: Filtered, clear: 0.0, expression: None, raw: false, variance: false }, AovVar { prim_path: "/Render/matte", name: "matte", channel_prefix: None, source: Primvar(PrimvarSource { index: 0, components: 1, role: Float }), components: 1, precision: Float, accumulation: Filtered, clear: 0.0, expression: None, raw: false, variance: false }, AovVar { prim_path: "/Render/depth", name: "depth", channel_prefix: None, source: Depth, components: 1, precision: Float, accumulation: Closest, clear: inf, expression: None, raw: false, variance: false }, AovVar { prim_path: "/Render/depth_filtered", name: "depth_filtered", channel_prefix: None, source: Depth, components: 1, precision: Float, accumulation: Filtered, clear: inf, expression: None, raw: false, variance: false }, AovVar { prim_path: "/Render/variance", name: "variance", channel_prefix: None, source: Variance, components: 1, precision: Float, accumulation: Filtered, clear: 0.0, expression: None, raw: false, variance: false }, AovVar { prim_path: "/Render/wide_out", name: "wide_out", channel_prefix: None, source: Filter(FilterSource { display: true, filter: 0, output: 0, components: 1, radiance: false }), components: 1, precision: Float, accumulation: Filtered, clear: 0.0, expression: None, raw: false, variance: false }], attributes: [] }], precomp: Some(Precomp { sample_filters: [], display_filters: ["/Render/wide"], display: "beauty" }) } +pass: None +source: Source { lens: Some(Lens { focal_length: 24.0, aperture: [24.0, 18.0], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 10.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/huge_blur.usda"], invisible_overrides: Some(0) } +layer: $DIR/huge_blur.usda +warning: Warning { code: PrecompInvalidValue, kind: Refused, count: 1, prims: ["/Render/wide"], message: "/Render/wide: crust:blur radius 1000000000 is past 1024 pixels; the filter passes its input through" } +lights: 1 +light 0: dome name Some("/World/sky") lpe None pmf 1.0 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 2 geometries, PrimitiveBreakdown { triangles: 4, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 4, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov Some((Some(0), false)) swapped false curves false scale 1.0 motion [] pieces all=2:2a13523c8e09c13d camera=2:2a13523c8e09c13d shadow=2:2a13523c8e09c13d indirect=2:2a13523c8e09c13d +geom 1: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:31db52e4afd4a225 camera=2:31db52e4afd4a225 shadow=2:31db52e4afd4a225 indirect=2:31db52e4afd4a225 +provenance light /World/sky: LightOrigin { index: 0, geoms: 0..0 } +provenance geometry 0..1: /World/Card +provenance geometry 1..2: /World/Wall +provenance mesh: MeshOrigin { geom_id: 0, slot: 0, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 1, slot: 1, baked: true, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 3430351340666728903, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 1: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 13118596165941616386, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: true, working: None, camera: Some("/World/cam"), cameras: ["/World/cam"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [("matte", 1)], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/World/cam"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/huge_blur_usda-2cc6d64af71f20b3-1.image b/crates/crust-core/tests/data/import_baselines/huge_blur_usda-2cc6d64af71f20b3-1.image new file mode 100644 index 000000000..f08c49d36 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/huge_blur_usda-2cc6d64af71f20b3-1.image @@ -0,0 +1 @@ +32x24 16spp clamp-off e72b7b7cff87e77d diff --git a/crates/crust-core/tests/data/import_baselines/huge_kernel_usda-a515683f6e1b404a-1.digest b/crates/crust-core/tests/data/import_baselines/huge_kernel_usda-a515683f6e1b404a-1.digest new file mode 100644 index 000000000..329891ad6 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/huge_kernel_usda-a515683f6e1b404a-1.digest @@ -0,0 +1,27 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/World/cam") +camera: Camera { origin: Vec3A(0.0, 0.0, 0.0), lower_left_corner: Vec3A(-5.0, -3.75, -10.0), horizontal: Vec3A(10.0, 0.0, 0.0), vertical: Vec3A(0.0, 7.5, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: Some("/Render/settings") +settings: RenderSettings { samples_per_pixel: 16, max_depth: 2, width: 32, height: 24, region: PixelRect { x0: 0, y0: 0, x1: 32, y1: 24 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [AovProduct { prim_path: "/Render/p", name: "p.exr", vars: [AovVar { prim_path: "/Render/C", name: "C", channel_prefix: None, source: Color, components: 3, precision: Float, accumulation: Filtered, clear: 0.0, expression: None, raw: false, variance: false }, AovVar { prim_path: "/Render/matte", name: "matte", channel_prefix: None, source: Primvar(PrimvarSource { index: 0, components: 1, role: Float }), components: 1, precision: Float, accumulation: Filtered, clear: 0.0, expression: None, raw: false, variance: false }, AovVar { prim_path: "/Render/depth", name: "depth", channel_prefix: None, source: Depth, components: 1, precision: Float, accumulation: Closest, clear: inf, expression: None, raw: false, variance: false }, AovVar { prim_path: "/Render/depth_filtered", name: "depth_filtered", channel_prefix: None, source: Depth, components: 1, precision: Float, accumulation: Filtered, clear: inf, expression: None, raw: false, variance: false }, AovVar { prim_path: "/Render/variance", name: "variance", channel_prefix: None, source: Variance, components: 1, precision: Float, accumulation: Filtered, clear: 0.0, expression: None, raw: false, variance: false }, AovVar { prim_path: "/Render/soft_out", name: "soft_out", channel_prefix: None, source: Filter(FilterSource { display: true, filter: 0, output: 0, components: 1, radiance: false }), components: 1, precision: Float, accumulation: Filtered, clear: 0.0, expression: None, raw: false, variance: false }], attributes: [] }], precomp: Some(Precomp { sample_filters: [], display_filters: ["/Render/soft"], display: "beauty" }) } +pass: None +source: Source { lens: Some(Lens { focal_length: 24.0, aperture: [24.0, 18.0], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 10.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/huge_kernel.usda"], invisible_overrides: Some(0) } +layer: $DIR/huge_kernel.usda +warning: Warning { code: PrecompInvalidValue, kind: Refused, count: 1, prims: ["/Render/soft"], message: "/Render/soft: kernel $DIR/box.exr (3x1) at kernelScale 1000000 covers more than 255 pixels a side; the filter passes its input through" } +lights: 1 +light 0: dome name Some("/World/sky") lpe None pmf 1.0 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 2 geometries, PrimitiveBreakdown { triangles: 4, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 4, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov Some((Some(0), false)) swapped false curves false scale 1.0 motion [] pieces all=2:2a13523c8e09c13d camera=2:2a13523c8e09c13d shadow=2:2a13523c8e09c13d indirect=2:2a13523c8e09c13d +geom 1: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:31db52e4afd4a225 camera=2:31db52e4afd4a225 shadow=2:31db52e4afd4a225 indirect=2:31db52e4afd4a225 +provenance light /World/sky: LightOrigin { index: 0, geoms: 0..0 } +provenance geometry 0..1: /World/Card +provenance geometry 1..2: /World/Wall +provenance mesh: MeshOrigin { geom_id: 0, slot: 0, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 1, slot: 1, baked: true, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 3430351340666728903, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 1: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 13118596165941616386, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: true, working: None, camera: Some("/World/cam"), cameras: ["/World/cam"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [("matte", 1)], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/World/cam"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/huge_kernel_usda-a515683f6e1b404a-1.image b/crates/crust-core/tests/data/import_baselines/huge_kernel_usda-a515683f6e1b404a-1.image new file mode 100644 index 000000000..f08c49d36 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/huge_kernel_usda-a515683f6e1b404a-1.image @@ -0,0 +1 @@ +32x24 16spp clamp-off e72b7b7cff87e77d diff --git a/crates/crust-core/tests/data/import_baselines/ies_light_usda-9afaa60e27f14926-1.digest b/crates/crust-core/tests/data/import_baselines/ies_light_usda-9afaa60e27f14926-1.digest new file mode 100644 index 000000000..2b07825a8 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/ies_light_usda-9afaa60e27f14926-1.digest @@ -0,0 +1,21 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: None +camera: Camera { origin: Vec3A(15.0, 3.0, 3.0), lower_left_corner: Vec3A(4.8863316, -0.044797063, 4.174048), horizontal: Vec3A(1.2295314, 0.0, -6.147657), vertical: Vec3A(-0.44830504, 3.4967792, -0.08966101), u: Vec3A(0.19611613, 0.0, -0.9805807), v: Vec3A(-0.1271232, 0.991561, -0.02542464), lens_radius: 0.05, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: None +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 640, height: 360, region: PixelRect { x0: 0, y0: 0, x1: 640, y1: 360 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: None, depth_of_field: true, motion_blur: false, layer_stack: ["$DIR/ies_light.usda"], invisible_overrides: Some(0) } +layer: $DIR/ies_light.usda +warning: Warning { code: CameraMissing, kind: Skipped, count: 1, prims: [], message: "USD stage has no UsdGeomCamera — falling back to world::get_settings camera" } +lights: 1 +light 0: area name Some("/Spot") lpe None pmf 1.0 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 1 geometries, PrimitiveBreakdown { triangles: 0, spheres: 0, disks: 1, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 0, spheres: 0, disks: 1, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +geom 0: material #0 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:ff1577ffaf887d11 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=1:ff1577ffaf887d11 +provenance light /Spot: LightOrigin { index: 0, geoms: 0..1 } +provenance geometry 0..1: /Spot +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: None, cameras: [], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: None, offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/ies_light_usda-9afaa60e27f14926-1.image b/crates/crust-core/tests/data/import_baselines/ies_light_usda-9afaa60e27f14926-1.image new file mode 100644 index 000000000..c734c5b1d --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/ies_light_usda-9afaa60e27f14926-1.image @@ -0,0 +1 @@ +640x360 16spp clamp-off a04a09c0d4b5e325 diff --git a/crates/crust-core/tests/data/import_baselines/ignored_curves_usda-d8234281140f3b7d-1.digest b/crates/crust-core/tests/data/import_baselines/ignored_curves_usda-d8234281140f3b7d-1.digest new file mode 100644 index 000000000..6503f664b --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/ignored_curves_usda-d8234281140f3b7d-1.digest @@ -0,0 +1,19 @@ +time: Some(5.0) +working space: Linear Rec.709 (sRGB) +camera path: Some("/World/cam") +camera: Camera { origin: Vec3A(0.0, 0.0, 8.0), lower_left_corner: Vec3A(-2.7183647, -1.5290802, -2.0), horizontal: Vec3A(5.4367294, 0.0, 0.0), vertical: Vec3A(0.0, 3.0581603, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: Some("/Render/settings") +settings: RenderSettings { samples_per_pixel: 16, max_depth: 2, width: 64, height: 36, region: PixelRect { x0: 0, y0: 0, x1: 64, y1: 36 }, min_samples_per_pixel: 16, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 5, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 50.0, aperture: [20.955, 15.2908], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 10.0 }), depth_of_field: false, motion_blur: true, layer_stack: ["$DIR/ignored_curves.usda"], invisible_overrides: Some(0) } +layer: $DIR/ignored_curves.usda +warning: Warning { code: XformMotionIgnored, kind: Skipped, count: 1, prims: ["/World/Hair"], message: "1 prim whose transform moves over the shutter gets no motion (curves, lights, volumes, prims inside a prototype and baked non-invertible meshes are not moved); it renders at shutter open (the first at /World/Hair)" } +lights: 0 +volumes: 0 +world: 1 geometries, PrimitiveBreakdown { triangles: 0, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 1 } top level, PrimitiveBreakdown { triangles: 0, spheres: 0, disks: 0, cylinders: 0, curve_segments: 1, cubic_curve_spans: 0, instances: 1 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: Some((false, false, [])), primvars: None } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves true scale 1.0 motion [] pieces all=1:598f37c01518952d camera=1:598f37c01518952d shadow=1:598f37c01518952d indirect=1:598f37c01518952d +provenance geometry 0..1: /World/Hair +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: Some(5.0), camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/World/cam"), cameras: ["/World/cam"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/World/cam"), offsets: [0, 4607182418800017408], interval: Some([4617315517961601024, 4618441417868443648]), query: true, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/ignored_curves_usda-d8234281140f3b7d-1.image b/crates/crust-core/tests/data/import_baselines/ignored_curves_usda-d8234281140f3b7d-1.image new file mode 100644 index 000000000..f4ebc1648 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/ignored_curves_usda-d8234281140f3b7d-1.image @@ -0,0 +1 @@ +64x36 16spp clamp-off 1028d44458cc9325 diff --git a/crates/crust-core/tests/data/import_baselines/ignored_light_usda-26909110fbe92be4-1.digest b/crates/crust-core/tests/data/import_baselines/ignored_light_usda-26909110fbe92be4-1.digest new file mode 100644 index 000000000..814638aac --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/ignored_light_usda-26909110fbe92be4-1.digest @@ -0,0 +1,21 @@ +time: Some(5.0) +working space: Linear Rec.709 (sRGB) +camera path: Some("/World/cam") +camera: Camera { origin: Vec3A(0.0, 0.0, 8.0), lower_left_corner: Vec3A(-2.7183647, -1.5290802, -2.0), horizontal: Vec3A(5.4367294, 0.0, 0.0), vertical: Vec3A(0.0, 3.0581603, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: Some("/Render/settings") +settings: RenderSettings { samples_per_pixel: 16, max_depth: 2, width: 64, height: 36, region: PixelRect { x0: 0, y0: 0, x1: 64, y1: 36 }, min_samples_per_pixel: 16, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 5, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 50.0, aperture: [20.955, 15.2908], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 10.0 }), depth_of_field: false, motion_blur: true, layer_stack: ["$DIR/ignored_light.usda"], invisible_overrides: Some(0) } +layer: $DIR/ignored_light.usda +warning: Warning { code: XformMotionIgnored, kind: Skipped, count: 1, prims: ["/World/Lamp"], message: "1 prim whose transform moves over the shutter gets no motion (curves, lights, volumes, prims inside a prototype and baked non-invertible meshes are not moved); it renders at shutter open (the first at /World/Lamp)" } +lights: 1 +light 0: area name Some("/World/Lamp") lpe None pmf 1.0 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 1 geometries, PrimitiveBreakdown { triangles: 0, spheres: 1, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 0, spheres: 1, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +geom 0: material #0 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:182863594c30eabb camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=1:182863594c30eabb +provenance light /World/Lamp: LightOrigin { index: 0, geoms: 0..1 } +provenance geometry 0..1: /World/Lamp +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: Some(5.0), camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/World/cam"), cameras: ["/World/cam"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/World/cam"), offsets: [0, 4607182418800017408], interval: Some([4617315517961601024, 4618441417868443648]), query: true, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/ignored_light_usda-26909110fbe92be4-1.image b/crates/crust-core/tests/data/import_baselines/ignored_light_usda-26909110fbe92be4-1.image new file mode 100644 index 000000000..f4ebc1648 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/ignored_light_usda-26909110fbe92be4-1.image @@ -0,0 +1 @@ +64x36 16spp clamp-off 1028d44458cc9325 diff --git a/crates/crust-core/tests/data/import_baselines/ignored_prototype_usda-f94b3942ea16e527-1.digest b/crates/crust-core/tests/data/import_baselines/ignored_prototype_usda-f94b3942ea16e527-1.digest new file mode 100644 index 000000000..847594123 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/ignored_prototype_usda-f94b3942ea16e527-1.digest @@ -0,0 +1,21 @@ +time: Some(5.0) +working space: Linear Rec.709 (sRGB) +camera path: Some("/World/cam") +camera: Camera { origin: Vec3A(0.0, 0.0, 8.0), lower_left_corner: Vec3A(-2.7183647, -1.5290802, -2.0), horizontal: Vec3A(5.4367294, 0.0, 0.0), vertical: Vec3A(0.0, 3.0581603, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: Some("/Render/settings") +settings: RenderSettings { samples_per_pixel: 16, max_depth: 2, width: 64, height: 36, region: PixelRect { x0: 0, y0: 0, x1: 64, y1: 36 }, min_samples_per_pixel: 16, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 5, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 50.0, aperture: [20.955, 15.2908], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 10.0 }), depth_of_field: false, motion_blur: true, layer_stack: ["$DIR/ignored_prototype.usda"], invisible_overrides: Some(0) } +layer: $DIR/ignored_prototype.usda +warning: Warning { code: XformMotionIgnored, kind: Skipped, count: 1, prims: ["/__Prototype_0/Spin"], message: "1 prim whose transform moves over the shutter gets no motion (curves, lights, volumes, prims inside a prototype and baked non-invertible meshes are not moved); it renders at shutter open (the first at /__Prototype_0/Spin)" } +lights: 0 +volumes: 0 +world: 1 geometries, PrimitiveBreakdown { triangles: 0, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 1 } top level, PrimitiveBreakdown { triangles: 2, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 1 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:8f5d9187c4202473 camera=2:8f5d9187c4202473 shadow=2:8f5d9187c4202473 indirect=2:8f5d9187c4202473 +provenance material /World/Glow: MaterialOrigin { slots: [0], displaced: false } +provenance geometry 0..1: /World/Copy +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 18250419415378433236, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 0 }), placements: 0, shared: true, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: Some(5.0), camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/World/cam"), cameras: ["/World/cam"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/World/cam"), offsets: [0, 4607182418800017408], interval: Some([4617315517961601024, 4618441417868443648]), query: true, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/ignored_prototype_usda-f94b3942ea16e527-1.image b/crates/crust-core/tests/data/import_baselines/ignored_prototype_usda-f94b3942ea16e527-1.image new file mode 100644 index 000000000..0e8a4d39e --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/ignored_prototype_usda-f94b3942ea16e527-1.image @@ -0,0 +1 @@ +64x36 16spp clamp-off 51c3405b7660a8ac diff --git a/crates/crust-core/tests/data/import_baselines/ignored_volume_usda-32845f161c65c4a9-1.digest b/crates/crust-core/tests/data/import_baselines/ignored_volume_usda-32845f161c65c4a9-1.digest new file mode 100644 index 000000000..6c44a8f64 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/ignored_volume_usda-32845f161c65c4a9-1.digest @@ -0,0 +1,18 @@ +time: Some(5.0) +working space: Linear Rec.709 (sRGB) +camera path: Some("/World/cam") +camera: Camera { origin: Vec3A(0.0, 0.0, 8.0), lower_left_corner: Vec3A(-2.7183647, -1.5290802, -2.0), horizontal: Vec3A(5.4367294, 0.0, 0.0), vertical: Vec3A(0.0, 3.0581603, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: Some("/Render/settings") +settings: RenderSettings { samples_per_pixel: 16, max_depth: 2, width: 64, height: 36, region: PixelRect { x0: 0, y0: 0, x1: 64, y1: 36 }, min_samples_per_pixel: 16, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 5, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 50.0, aperture: [20.955, 15.2908], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 10.0 }), depth_of_field: false, motion_blur: true, layer_stack: ["$DIR/ignored_volume.usda"], invisible_overrides: Some(0) } +layer: $DIR/ignored_volume.usda +warning: Warning { code: XformMotionIgnored, kind: Skipped, count: 1, prims: ["/World/Fog"], message: "1 prim whose transform moves over the shutter gets no motion (curves, lights, volumes, prims inside a prototype and baked non-invertible meshes are not moved); it renders at shutter open (the first at /World/Fog)" } +lights: 0 +volumes: 1 +volume 0: sigma_s Vec3A(0.1, 0.1, 0.1) sigma_a Vec3A(0.0, 0.0, 0.0) g 0.0 emission Vec3A(0.0, 0.0, 0.0) mask RayMask(4294967295) class 65535 homogeneous true +world: 0 geometries, PrimitiveBreakdown { triangles: 0, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 0, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +provenance spheres: [] +provenance volumes: ["/World/Fog"] +provenance stage: StageFacts { options: UsdImportOptions { frame: Some(5.0), camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/World/cam"), cameras: ["/World/cam"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/World/cam"), offsets: [0, 4607182418800017408], interval: Some([4617315517961601024, 4618441417868443648]), query: true, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/ignored_volume_usda-32845f161c65c4a9-1.image b/crates/crust-core/tests/data/import_baselines/ignored_volume_usda-32845f161c65c4a9-1.image new file mode 100644 index 000000000..f4ebc1648 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/ignored_volume_usda-32845f161c65c4a9-1.image @@ -0,0 +1 @@ +64x36 16spp clamp-off 1028d44458cc9325 diff --git a/crates/crust-core/tests/data/import_baselines/implicit_Capsule_1_usda-751cd07d979a4d81-1.digest b/crates/crust-core/tests/data/import_baselines/implicit_Capsule_1_usda-751cd07d979a4d81-1.digest new file mode 100644 index 000000000..8b2872c79 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/implicit_Capsule_1_usda-751cd07d979a4d81-1.digest @@ -0,0 +1,21 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: None +camera: Camera { origin: Vec3A(15.0, 3.0, 3.0), lower_left_corner: Vec3A(4.8863316, -0.044797063, 4.174048), horizontal: Vec3A(1.2295314, 0.0, -6.147657), vertical: Vec3A(-0.44830504, 3.4967792, -0.08966101), u: Vec3A(0.19611613, 0.0, -0.9805807), v: Vec3A(-0.1271232, 0.991561, -0.02542464), lens_radius: 0.05, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: None +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 640, height: 360, region: PixelRect { x0: 0, y0: 0, x1: 640, y1: 360 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: None, depth_of_field: true, motion_blur: false, layer_stack: ["$DIR/implicit_Capsule_1.usda"], invisible_overrides: Some(0) } +layer: $DIR/implicit_Capsule_1.usda +warning: Warning { code: CameraMissing, kind: Skipped, count: 1, prims: [], message: "USD stage has no UsdGeomCamera — falling back to world::get_settings camera" } +lights: 0 +volumes: 0 +world: 1 geometries, PrimitiveBreakdown { triangles: 2304, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 2304, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2304:435cb039f3ccd77d camera=2304:435cb039f3ccd77d shadow=2304:435cb039f3ccd77d indirect=2304:435cb039f3ccd77d +provenance geometry 0..1: /World/Shape +provenance mesh: MeshOrigin { geom_id: 0, slot: 0, baked: true, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 3706818291284699303, n_points: 1154, n_indices: 4704, n_uvs: None, smooth: true, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: None, cameras: [], dicing: None, on_screen_shapes: None, unsized_shapes: true, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: None, offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/implicit_Capsule_1_usda-751cd07d979a4d81-1.image b/crates/crust-core/tests/data/import_baselines/implicit_Capsule_1_usda-751cd07d979a4d81-1.image new file mode 100644 index 000000000..c734c5b1d --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/implicit_Capsule_1_usda-751cd07d979a4d81-1.image @@ -0,0 +1 @@ +640x360 16spp clamp-off a04a09c0d4b5e325 diff --git a/crates/crust-core/tests/data/import_baselines/implicit_Capsule_usda-3ad3fb7cdd9a1902-1.digest b/crates/crust-core/tests/data/import_baselines/implicit_Capsule_usda-3ad3fb7cdd9a1902-1.digest new file mode 100644 index 000000000..8bd809d5f --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/implicit_Capsule_usda-3ad3fb7cdd9a1902-1.digest @@ -0,0 +1,21 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: None +camera: Camera { origin: Vec3A(15.0, 3.0, 3.0), lower_left_corner: Vec3A(4.8863316, -0.044797063, 4.174048), horizontal: Vec3A(1.2295314, 0.0, -6.147657), vertical: Vec3A(-0.44830504, 3.4967792, -0.08966101), u: Vec3A(0.19611613, 0.0, -0.9805807), v: Vec3A(-0.1271232, 0.991561, -0.02542464), lens_radius: 0.05, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: None +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 640, height: 360, region: PixelRect { x0: 0, y0: 0, x1: 640, y1: 360 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: None, depth_of_field: true, motion_blur: false, layer_stack: ["$DIR/implicit_Capsule.usda"], invisible_overrides: Some(0) } +layer: $DIR/implicit_Capsule.usda +warning: Warning { code: CameraMissing, kind: Skipped, count: 1, prims: [], message: "USD stage has no UsdGeomCamera — falling back to world::get_settings camera" } +lights: 0 +volumes: 0 +world: 1 geometries, PrimitiveBreakdown { triangles: 2304, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 2304, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2304:ed03a97ba251327d camera=2304:ed03a97ba251327d shadow=2304:ed03a97ba251327d indirect=2304:ed03a97ba251327d +provenance geometry 0..1: /World/Shape +provenance mesh: MeshOrigin { geom_id: 0, slot: 0, baked: true, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 5116155558073966183, n_points: 1154, n_indices: 4704, n_uvs: None, smooth: true, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: None, cameras: [], dicing: None, on_screen_shapes: None, unsized_shapes: true, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: None, offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/implicit_Capsule_usda-3ad3fb7cdd9a1902-1.image b/crates/crust-core/tests/data/import_baselines/implicit_Capsule_usda-3ad3fb7cdd9a1902-1.image new file mode 100644 index 000000000..c734c5b1d --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/implicit_Capsule_usda-3ad3fb7cdd9a1902-1.image @@ -0,0 +1 @@ +640x360 16spp clamp-off a04a09c0d4b5e325 diff --git a/crates/crust-core/tests/data/import_baselines/implicit_Cone_usda-024380e72d6d34a7-1.digest b/crates/crust-core/tests/data/import_baselines/implicit_Cone_usda-024380e72d6d34a7-1.digest new file mode 100644 index 000000000..56f860efd --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/implicit_Cone_usda-024380e72d6d34a7-1.digest @@ -0,0 +1,21 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: None +camera: Camera { origin: Vec3A(15.0, 3.0, 3.0), lower_left_corner: Vec3A(4.8863316, -0.044797063, 4.174048), horizontal: Vec3A(1.2295314, 0.0, -6.147657), vertical: Vec3A(-0.44830504, 3.4967792, -0.08966101), u: Vec3A(0.19611613, 0.0, -0.9805807), v: Vec3A(-0.1271232, 0.991561, -0.02542464), lens_radius: 0.05, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: None +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 640, height: 360, region: PixelRect { x0: 0, y0: 0, x1: 640, y1: 360 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: None, depth_of_field: true, motion_blur: false, layer_stack: ["$DIR/implicit_Cone.usda"], invisible_overrides: Some(0) } +layer: $DIR/implicit_Cone.usda +warning: Warning { code: CameraMissing, kind: Skipped, count: 1, prims: [], message: "USD stage has no UsdGeomCamera — falling back to world::get_settings camera" } +lights: 0 +volumes: 0 +world: 1 geometries, PrimitiveBreakdown { triangles: 144, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 144, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=144:820f813a06be123f camera=144:820f813a06be123f shadow=144:820f813a06be123f indirect=144:820f813a06be123f +provenance geometry 0..1: /World/Shape +provenance mesh: MeshOrigin { geom_id: 0, slot: 0, baked: true, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 8087259199450112797, n_points: 145, n_indices: 336, n_uvs: None, smooth: true, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: None, cameras: [], dicing: None, on_screen_shapes: None, unsized_shapes: true, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: None, offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/implicit_Cone_usda-024380e72d6d34a7-1.image b/crates/crust-core/tests/data/import_baselines/implicit_Cone_usda-024380e72d6d34a7-1.image new file mode 100644 index 000000000..c734c5b1d --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/implicit_Cone_usda-024380e72d6d34a7-1.image @@ -0,0 +1 @@ +640x360 16spp clamp-off a04a09c0d4b5e325 diff --git a/crates/crust-core/tests/data/import_baselines/implicit_Cube_usda-4bb89de99da949b6-1.digest b/crates/crust-core/tests/data/import_baselines/implicit_Cube_usda-4bb89de99da949b6-1.digest new file mode 100644 index 000000000..2c0be1db2 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/implicit_Cube_usda-4bb89de99da949b6-1.digest @@ -0,0 +1,21 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: None +camera: Camera { origin: Vec3A(15.0, 3.0, 3.0), lower_left_corner: Vec3A(4.8863316, -0.044797063, 4.174048), horizontal: Vec3A(1.2295314, 0.0, -6.147657), vertical: Vec3A(-0.44830504, 3.4967792, -0.08966101), u: Vec3A(0.19611613, 0.0, -0.9805807), v: Vec3A(-0.1271232, 0.991561, -0.02542464), lens_radius: 0.05, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: None +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 640, height: 360, region: PixelRect { x0: 0, y0: 0, x1: 640, y1: 360 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: None, depth_of_field: true, motion_blur: false, layer_stack: ["$DIR/implicit_Cube.usda"], invisible_overrides: Some(0) } +layer: $DIR/implicit_Cube.usda +warning: Warning { code: CameraMissing, kind: Skipped, count: 1, prims: [], message: "USD stage has no UsdGeomCamera — falling back to world::get_settings camera" } +lights: 0 +volumes: 0 +world: 1 geometries, PrimitiveBreakdown { triangles: 12, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 12, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=12:2a7455d8f895f705 camera=12:2a7455d8f895f705 shadow=12:2a7455d8f895f705 indirect=12:2a7455d8f895f705 +provenance geometry 0..1: /World/Shape +provenance mesh: MeshOrigin { geom_id: 0, slot: 0, baked: true, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 8921584896192100385, n_points: 8, n_indices: 24, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: None, cameras: [], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: None, offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/implicit_Cube_usda-4bb89de99da949b6-1.image b/crates/crust-core/tests/data/import_baselines/implicit_Cube_usda-4bb89de99da949b6-1.image new file mode 100644 index 000000000..c734c5b1d --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/implicit_Cube_usda-4bb89de99da949b6-1.image @@ -0,0 +1 @@ +640x360 16spp clamp-off a04a09c0d4b5e325 diff --git a/crates/crust-core/tests/data/import_baselines/implicit_Cylinder_1_usda-9964aa85919856f9-1.digest b/crates/crust-core/tests/data/import_baselines/implicit_Cylinder_1_usda-9964aa85919856f9-1.digest new file mode 100644 index 000000000..2bc44f4b2 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/implicit_Cylinder_1_usda-9964aa85919856f9-1.digest @@ -0,0 +1,21 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: None +camera: Camera { origin: Vec3A(15.0, 3.0, 3.0), lower_left_corner: Vec3A(4.8863316, -0.044797063, 4.174048), horizontal: Vec3A(1.2295314, 0.0, -6.147657), vertical: Vec3A(-0.44830504, 3.4967792, -0.08966101), u: Vec3A(0.19611613, 0.0, -0.9805807), v: Vec3A(-0.1271232, 0.991561, -0.02542464), lens_radius: 0.05, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: None +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 640, height: 360, region: PixelRect { x0: 0, y0: 0, x1: 640, y1: 360 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: None, depth_of_field: true, motion_blur: false, layer_stack: ["$DIR/implicit_Cylinder_1.usda"], invisible_overrides: Some(0) } +layer: $DIR/implicit_Cylinder_1.usda +warning: Warning { code: CameraMissing, kind: Skipped, count: 1, prims: [], message: "USD stage has no UsdGeomCamera — falling back to world::get_settings camera" } +lights: 0 +volumes: 0 +world: 1 geometries, PrimitiveBreakdown { triangles: 192, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 192, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=192:573b993ae799d70d camera=192:573b993ae799d70d shadow=192:573b993ae799d70d indirect=192:573b993ae799d70d +provenance geometry 0..1: /World/Shape +provenance mesh: MeshOrigin { geom_id: 0, slot: 0, baked: true, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 7979101772752456078, n_points: 194, n_indices: 480, n_uvs: None, smooth: true, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: None, cameras: [], dicing: None, on_screen_shapes: None, unsized_shapes: true, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: None, offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/implicit_Cylinder_1_usda-9964aa85919856f9-1.image b/crates/crust-core/tests/data/import_baselines/implicit_Cylinder_1_usda-9964aa85919856f9-1.image new file mode 100644 index 000000000..c734c5b1d --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/implicit_Cylinder_1_usda-9964aa85919856f9-1.image @@ -0,0 +1 @@ +640x360 16spp clamp-off a04a09c0d4b5e325 diff --git a/crates/crust-core/tests/data/import_baselines/implicit_Cylinder_usda-bee0e5841f0acf39-1.digest b/crates/crust-core/tests/data/import_baselines/implicit_Cylinder_usda-bee0e5841f0acf39-1.digest new file mode 100644 index 000000000..065e2bbea --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/implicit_Cylinder_usda-bee0e5841f0acf39-1.digest @@ -0,0 +1,21 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: None +camera: Camera { origin: Vec3A(15.0, 3.0, 3.0), lower_left_corner: Vec3A(4.8863316, -0.044797063, 4.174048), horizontal: Vec3A(1.2295314, 0.0, -6.147657), vertical: Vec3A(-0.44830504, 3.4967792, -0.08966101), u: Vec3A(0.19611613, 0.0, -0.9805807), v: Vec3A(-0.1271232, 0.991561, -0.02542464), lens_radius: 0.05, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: None +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 640, height: 360, region: PixelRect { x0: 0, y0: 0, x1: 640, y1: 360 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: None, depth_of_field: true, motion_blur: false, layer_stack: ["$DIR/implicit_Cylinder.usda"], invisible_overrides: Some(0) } +layer: $DIR/implicit_Cylinder.usda +warning: Warning { code: CameraMissing, kind: Skipped, count: 1, prims: [], message: "USD stage has no UsdGeomCamera — falling back to world::get_settings camera" } +lights: 0 +volumes: 0 +world: 1 geometries, PrimitiveBreakdown { triangles: 192, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 192, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=192:f86dabad57ed0719 camera=192:f86dabad57ed0719 shadow=192:f86dabad57ed0719 indirect=192:f86dabad57ed0719 +provenance geometry 0..1: /World/Shape +provenance mesh: MeshOrigin { geom_id: 0, slot: 0, baked: true, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 18025274944887440505, n_points: 194, n_indices: 480, n_uvs: None, smooth: true, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: None, cameras: [], dicing: None, on_screen_shapes: None, unsized_shapes: true, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: None, offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/implicit_Cylinder_usda-bee0e5841f0acf39-1.image b/crates/crust-core/tests/data/import_baselines/implicit_Cylinder_usda-bee0e5841f0acf39-1.image new file mode 100644 index 000000000..c734c5b1d --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/implicit_Cylinder_usda-bee0e5841f0acf39-1.image @@ -0,0 +1 @@ +640x360 16spp clamp-off a04a09c0d4b5e325 diff --git a/crates/crust-core/tests/data/import_baselines/implicit_Plane_usda-77823213740cc6c2-1.digest b/crates/crust-core/tests/data/import_baselines/implicit_Plane_usda-77823213740cc6c2-1.digest new file mode 100644 index 000000000..f732001ad --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/implicit_Plane_usda-77823213740cc6c2-1.digest @@ -0,0 +1,21 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: None +camera: Camera { origin: Vec3A(15.0, 3.0, 3.0), lower_left_corner: Vec3A(4.8863316, -0.044797063, 4.174048), horizontal: Vec3A(1.2295314, 0.0, -6.147657), vertical: Vec3A(-0.44830504, 3.4967792, -0.08966101), u: Vec3A(0.19611613, 0.0, -0.9805807), v: Vec3A(-0.1271232, 0.991561, -0.02542464), lens_radius: 0.05, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: None +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 640, height: 360, region: PixelRect { x0: 0, y0: 0, x1: 640, y1: 360 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: None, depth_of_field: true, motion_blur: false, layer_stack: ["$DIR/implicit_Plane.usda"], invisible_overrides: Some(0) } +layer: $DIR/implicit_Plane.usda +warning: Warning { code: CameraMissing, kind: Skipped, count: 1, prims: [], message: "USD stage has no UsdGeomCamera — falling back to world::get_settings camera" } +lights: 0 +volumes: 0 +world: 1 geometries, PrimitiveBreakdown { triangles: 2, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 2, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:4793349518d03985 camera=2:4793349518d03985 shadow=2:4793349518d03985 indirect=2:4793349518d03985 +provenance geometry 0..1: /World/Shape +provenance mesh: MeshOrigin { geom_id: 0, slot: 0, baked: true, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 714069445534044474, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: None, cameras: [], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: None, offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/implicit_Plane_usda-77823213740cc6c2-1.image b/crates/crust-core/tests/data/import_baselines/implicit_Plane_usda-77823213740cc6c2-1.image new file mode 100644 index 000000000..c734c5b1d --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/implicit_Plane_usda-77823213740cc6c2-1.image @@ -0,0 +1 @@ +640x360 16spp clamp-off a04a09c0d4b5e325 diff --git a/crates/crust-core/tests/data/import_baselines/implicit_displaced_usda-395a4477685bb193-1.digest b/crates/crust-core/tests/data/import_baselines/implicit_displaced_usda-395a4477685bb193-1.digest new file mode 100644 index 000000000..ab5a1ae6d --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/implicit_displaced_usda-395a4477685bb193-1.digest @@ -0,0 +1,23 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: None +camera: Camera { origin: Vec3A(15.0, 3.0, 3.0), lower_left_corner: Vec3A(4.8863316, -0.044797063, 4.174048), horizontal: Vec3A(1.2295314, 0.0, -6.147657), vertical: Vec3A(-0.44830504, 3.4967792, -0.08966101), u: Vec3A(0.19611613, 0.0, -0.9805807), v: Vec3A(-0.1271232, 0.991561, -0.02542464), lens_radius: 0.05, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: None +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 640, height: 360, region: PixelRect { x0: 0, y0: 0, x1: 640, y1: 360 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: None, depth_of_field: true, motion_blur: false, layer_stack: ["$DIR/implicit_displaced.usda"], invisible_overrides: Some(0) } +layer: $DIR/implicit_displaced.usda +warning: Warning { code: GeomImplicitDisplacement, kind: Skipped, count: 1, prims: ["/World/Box"], message: "/World/Box is an implicit shape: its material's displacement is not applied" } +warning: Warning { code: CameraMissing, kind: Skipped, count: 1, prims: [], message: "USD stage has no UsdGeomCamera — falling back to world::get_settings camera" } +lights: 0 +volumes: 0 +world: 1 geometries, PrimitiveBreakdown { triangles: 12, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 12, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=12:d3f93325e3445105 camera=12:d3f93325e3445105 shadow=12:d3f93325e3445105 indirect=12:d3f93325e3445105 +provenance material /World/Puffed: MaterialOrigin { slots: [0], displaced: true } +provenance geometry 0..1: /World/Box +provenance mesh: MeshOrigin { geom_id: 0, slot: 0, baked: true, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 9204403525635746283, n_points: 8, n_indices: 24, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: None, cameras: [], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: None, offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/implicit_displaced_usda-395a4477685bb193-1.image b/crates/crust-core/tests/data/import_baselines/implicit_displaced_usda-395a4477685bb193-1.image new file mode 100644 index 000000000..c734c5b1d --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/implicit_displaced_usda-395a4477685bb193-1.image @@ -0,0 +1 @@ +640x360 16spp clamp-off a04a09c0d4b5e325 diff --git a/crates/crust-core/tests/data/import_baselines/implicit_level_usda-e441bb0a849304c5-1.digest b/crates/crust-core/tests/data/import_baselines/implicit_level_usda-e441bb0a849304c5-1.digest new file mode 100644 index 000000000..a9c9bdc1e --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/implicit_level_usda-e441bb0a849304c5-1.digest @@ -0,0 +1,21 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: None +camera: Camera { origin: Vec3A(15.0, 3.0, 3.0), lower_left_corner: Vec3A(4.8863316, -0.044797063, 4.174048), horizontal: Vec3A(1.2295314, 0.0, -6.147657), vertical: Vec3A(-0.44830504, 3.4967792, -0.08966101), u: Vec3A(0.19611613, 0.0, -0.9805807), v: Vec3A(-0.1271232, 0.991561, -0.02542464), lens_radius: 0.05, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: None +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 640, height: 360, region: PixelRect { x0: 0, y0: 0, x1: 640, y1: 360 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: None, depth_of_field: true, motion_blur: false, layer_stack: ["$DIR/implicit_level.usda"], invisible_overrides: Some(0) } +layer: $DIR/implicit_level.usda +warning: Warning { code: CameraMissing, kind: Skipped, count: 1, prims: [], message: "USD stage has no UsdGeomCamera — falling back to world::get_settings camera" } +lights: 0 +volumes: 0 +world: 1 geometries, PrimitiveBreakdown { triangles: 192, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 192, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=192:417dbfabd3a17585 camera=192:417dbfabd3a17585 shadow=192:417dbfabd3a17585 indirect=192:417dbfabd3a17585 +provenance geometry 0..1: /World/C +provenance mesh: MeshOrigin { geom_id: 0, slot: 0, baked: true, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 6877125351767401758, n_points: 194, n_indices: 480, n_uvs: None, smooth: true, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: Some(2), subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 2, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: None, cameras: [], dicing: None, on_screen_shapes: None, unsized_shapes: true, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: None, offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/implicit_level_usda-e441bb0a849304c5-1.image b/crates/crust-core/tests/data/import_baselines/implicit_level_usda-e441bb0a849304c5-1.image new file mode 100644 index 000000000..c734c5b1d --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/implicit_level_usda-e441bb0a849304c5-1.image @@ -0,0 +1 @@ +640x360 16spp clamp-off a04a09c0d4b5e325 diff --git a/crates/crust-core/tests/data/import_baselines/implicit_lone_usda-8c73fbc5c6234554-1.digest b/crates/crust-core/tests/data/import_baselines/implicit_lone_usda-8c73fbc5c6234554-1.digest new file mode 100644 index 000000000..fe30f720c --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/implicit_lone_usda-8c73fbc5c6234554-1.digest @@ -0,0 +1,21 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: None +camera: Camera { origin: Vec3A(15.0, 3.0, 3.0), lower_left_corner: Vec3A(4.8863316, -0.044797063, 4.174048), horizontal: Vec3A(1.2295314, 0.0, -6.147657), vertical: Vec3A(-0.44830504, 3.4967792, -0.08966101), u: Vec3A(0.19611613, 0.0, -0.9805807), v: Vec3A(-0.1271232, 0.991561, -0.02542464), lens_radius: 0.05, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: None +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 640, height: 360, region: PixelRect { x0: 0, y0: 0, x1: 640, y1: 360 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: None, depth_of_field: true, motion_blur: false, layer_stack: ["$DIR/implicit_lone.usda"], invisible_overrides: Some(0) } +layer: $DIR/implicit_lone.usda +warning: Warning { code: CameraMissing, kind: Skipped, count: 1, prims: [], message: "USD stage has no UsdGeomCamera — falling back to world::get_settings camera" } +lights: 0 +volumes: 0 +world: 1 geometries, PrimitiveBreakdown { triangles: 192, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 192, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=192:417dbfabd3a17585 camera=192:417dbfabd3a17585 shadow=192:417dbfabd3a17585 indirect=192:417dbfabd3a17585 +provenance geometry 0..1: /World/A +provenance mesh: MeshOrigin { geom_id: 0, slot: 0, baked: true, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 6877125351767401758, n_points: 194, n_indices: 480, n_uvs: None, smooth: true, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: None, cameras: [], dicing: None, on_screen_shapes: None, unsized_shapes: true, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: None, offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/implicit_lone_usda-8c73fbc5c6234554-1.image b/crates/crust-core/tests/data/import_baselines/implicit_lone_usda-8c73fbc5c6234554-1.image new file mode 100644 index 000000000..c734c5b1d --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/implicit_lone_usda-8c73fbc5c6234554-1.image @@ -0,0 +1 @@ +640x360 16spp clamp-off a04a09c0d4b5e325 diff --git a/crates/crust-core/tests/data/import_baselines/implicit_moving_usda-2b9c98847f8ffdc5-1.digest b/crates/crust-core/tests/data/import_baselines/implicit_moving_usda-2b9c98847f8ffdc5-1.digest new file mode 100644 index 000000000..e9912634d --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/implicit_moving_usda-2b9c98847f8ffdc5-1.digest @@ -0,0 +1,21 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: None +camera: Camera { origin: Vec3A(15.0, 3.0, 3.0), lower_left_corner: Vec3A(4.8863316, -0.044797063, 4.174048), horizontal: Vec3A(1.2295314, 0.0, -6.147657), vertical: Vec3A(-0.44830504, 3.4967792, -0.08966101), u: Vec3A(0.19611613, 0.0, -0.9805807), v: Vec3A(-0.1271232, 0.991561, -0.02542464), lens_radius: 0.05, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: None +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 640, height: 360, region: PixelRect { x0: 0, y0: 0, x1: 640, y1: 360 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: None, depth_of_field: true, motion_blur: false, layer_stack: ["$DIR/implicit_moving.usda"], invisible_overrides: Some(0) } +layer: $DIR/implicit_moving.usda +warning: Warning { code: CameraMissing, kind: Skipped, count: 1, prims: [], message: "USD stage has no UsdGeomCamera — falling back to world::get_settings camera" } +lights: 0 +volumes: 0 +world: 1 geometries, PrimitiveBreakdown { triangles: 0, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 1 } top level, PrimitiveBreakdown { triangles: 12, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 1 } unique, motion true +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [Translation(Vec3A(1.0, 0.0, 0.0))] pieces all=12:d3f93325e3445105 camera=12:d3f93325e3445105 shadow=12:d3f93325e3445105 indirect=12:d3f93325e3445105 +provenance geometry 0..1: /World/Mover +provenance mesh: MeshOrigin { geom_id: 0, slot: 0, baked: false, moving: true } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 9204403525635746283, n_points: 8, n_indices: 24, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: None, cameras: [], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: None, offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/implicit_moving_usda-2b9c98847f8ffdc5-1.image b/crates/crust-core/tests/data/import_baselines/implicit_moving_usda-2b9c98847f8ffdc5-1.image new file mode 100644 index 000000000..c734c5b1d --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/implicit_moving_usda-2b9c98847f8ffdc5-1.image @@ -0,0 +1 @@ +640x360 16spp clamp-off a04a09c0d4b5e325 diff --git a/crates/crust-core/tests/data/import_baselines/implicit_prototypes_usda-754c2247d4091e78-1.digest b/crates/crust-core/tests/data/import_baselines/implicit_prototypes_usda-754c2247d4091e78-1.digest new file mode 100644 index 000000000..eb95a2262 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/implicit_prototypes_usda-754c2247d4091e78-1.digest @@ -0,0 +1,26 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: None +camera: Camera { origin: Vec3A(15.0, 3.0, 3.0), lower_left_corner: Vec3A(4.8863316, -0.044797063, 4.174048), horizontal: Vec3A(1.2295314, 0.0, -6.147657), vertical: Vec3A(-0.44830504, 3.4967792, -0.08966101), u: Vec3A(0.19611613, 0.0, -0.9805807), v: Vec3A(-0.1271232, 0.991561, -0.02542464), lens_radius: 0.05, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: None +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 640, height: 360, region: PixelRect { x0: 0, y0: 0, x1: 640, y1: 360 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: None, depth_of_field: true, motion_blur: false, layer_stack: ["$DIR/implicit_prototypes.usda"], invisible_overrides: Some(0) } +layer: $DIR/implicit_prototypes.usda +warning: Warning { code: CameraMissing, kind: Skipped, count: 1, prims: [], message: "USD stage has no UsdGeomCamera — falling back to world::get_settings camera" } +lights: 0 +volumes: 0 +world: 4 geometries, PrimitiveBreakdown { triangles: 0, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 4 } top level, PrimitiveBreakdown { triangles: 2316, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 4 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2304:17370cf5722a3e3d camera=2304:17370cf5722a3e3d shadow=2304:17370cf5722a3e3d indirect=2304:17370cf5722a3e3d +geom 1: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2304:dec2890a21f8d9f9 camera=2304:dec2890a21f8d9f9 shadow=2304:dec2890a21f8d9f9 indirect=2304:dec2890a21f8d9f9 +geom 2: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=12:e079a866710c0905 camera=12:e079a866710c0905 shadow=12:e079a866710c0905 indirect=12:e079a866710c0905 +geom 3: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=12:1c73a13c3299aa75 camera=12:1c73a13c3299aa75 shadow=12:1c73a13c3299aa75 indirect=12:1c73a13c3299aa75 +provenance geometry 0..1: /World/A +provenance geometry 1..2: /World/B +provenance geometry 2..4: /World/Boxes +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 16627206856379785010, n_points: 1154, n_indices: 4704, n_uvs: None, smooth: true, material: 0 }), placements: 0, shared: true, displaced: false } +provenance mesh slot 1: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 8382128429536916275, n_points: 8, n_indices: 24, n_uvs: None, smooth: false, material: 0 }), placements: 0, shared: true, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: None, cameras: [], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: None, offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/implicit_prototypes_usda-754c2247d4091e78-1.image b/crates/crust-core/tests/data/import_baselines/implicit_prototypes_usda-754c2247d4091e78-1.image new file mode 100644 index 000000000..c734c5b1d --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/implicit_prototypes_usda-754c2247d4091e78-1.image @@ -0,0 +1 @@ +640x360 16spp clamp-off a04a09c0d4b5e325 diff --git a/crates/crust-core/tests/data/import_baselines/implicit_scaled_usda-5918722b7152b9f3-1.digest b/crates/crust-core/tests/data/import_baselines/implicit_scaled_usda-5918722b7152b9f3-1.digest new file mode 100644 index 000000000..e3255b0a7 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/implicit_scaled_usda-5918722b7152b9f3-1.digest @@ -0,0 +1,21 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: None +camera: Camera { origin: Vec3A(15.0, 3.0, 3.0), lower_left_corner: Vec3A(4.8863316, -0.044797063, 4.174048), horizontal: Vec3A(1.2295314, 0.0, -6.147657), vertical: Vec3A(-0.44830504, 3.4967792, -0.08966101), u: Vec3A(0.19611613, 0.0, -0.9805807), v: Vec3A(-0.1271232, 0.991561, -0.02542464), lens_radius: 0.05, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: None +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 640, height: 360, region: PixelRect { x0: 0, y0: 0, x1: 640, y1: 360 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: None, depth_of_field: true, motion_blur: false, layer_stack: ["$DIR/implicit_scaled.usda"], invisible_overrides: Some(0) } +layer: $DIR/implicit_scaled.usda +warning: Warning { code: CameraMissing, kind: Skipped, count: 1, prims: [], message: "USD stage has no UsdGeomCamera — falling back to world::get_settings camera" } +lights: 0 +volumes: 0 +world: 1 geometries, PrimitiveBreakdown { triangles: 12, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 12, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=12:0853f21676163da5 camera=12:0853f21676163da5 shadow=12:0853f21676163da5 indirect=12:0853f21676163da5 +provenance geometry 0..1: /World/Box +provenance mesh: MeshOrigin { geom_id: 0, slot: 0, baked: true, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 9204403525635746283, n_points: 8, n_indices: 24, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: None, cameras: [], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: None, offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/implicit_scaled_usda-5918722b7152b9f3-1.image b/crates/crust-core/tests/data/import_baselines/implicit_scaled_usda-5918722b7152b9f3-1.image new file mode 100644 index 000000000..c734c5b1d --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/implicit_scaled_usda-5918722b7152b9f3-1.image @@ -0,0 +1 @@ +640x360 16spp clamp-off a04a09c0d4b5e325 diff --git a/crates/crust-core/tests/data/import_baselines/implicit_shading_usda-b3809be67678f20f-1.digest b/crates/crust-core/tests/data/import_baselines/implicit_shading_usda-b3809be67678f20f-1.digest new file mode 100644 index 000000000..4e6d819b8 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/implicit_shading_usda-b3809be67678f20f-1.digest @@ -0,0 +1,21 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: None +camera: Camera { origin: Vec3A(15.0, 3.0, 3.0), lower_left_corner: Vec3A(4.8863316, -0.044797063, 4.174048), horizontal: Vec3A(1.2295314, 0.0, -6.147657), vertical: Vec3A(-0.44830504, 3.4967792, -0.08966101), u: Vec3A(0.19611613, 0.0, -0.9805807), v: Vec3A(-0.1271232, 0.991561, -0.02542464), lens_radius: 0.05, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: None +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 640, height: 360, region: PixelRect { x0: 0, y0: 0, x1: 640, y1: 360 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: None, depth_of_field: true, motion_blur: false, layer_stack: ["$DIR/implicit_shading.usda"], invisible_overrides: Some(0) } +layer: $DIR/implicit_shading.usda +warning: Warning { code: CameraMissing, kind: Skipped, count: 1, prims: [], message: "USD stage has no UsdGeomCamera — falling back to world::get_settings camera" } +lights: 0 +volumes: 0 +world: 1 geometries, PrimitiveBreakdown { triangles: 192, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 192, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=192:417dbfabd3a17585 camera=192:417dbfabd3a17585 shadow=192:417dbfabd3a17585 indirect=192:417dbfabd3a17585 +provenance geometry 0..1: /World/C +provenance mesh: MeshOrigin { geom_id: 0, slot: 0, baked: true, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 6877125351767401758, n_points: 194, n_indices: 480, n_uvs: None, smooth: true, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: None, cameras: [], dicing: None, on_screen_shapes: None, unsized_shapes: true, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: None, offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/implicit_shading_usda-b3809be67678f20f-1.image b/crates/crust-core/tests/data/import_baselines/implicit_shading_usda-b3809be67678f20f-1.image new file mode 100644 index 000000000..c734c5b1d --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/implicit_shading_usda-b3809be67678f20f-1.image @@ -0,0 +1 @@ +640x360 16spp clamp-off a04a09c0d4b5e325 diff --git a/crates/crust-core/tests/data/import_baselines/implicit_shapes_usda-180b516d9253da53-1.digest b/crates/crust-core/tests/data/import_baselines/implicit_shapes_usda-180b516d9253da53-1.digest new file mode 100644 index 000000000..f939dc1ee --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/implicit_shapes_usda-180b516d9253da53-1.digest @@ -0,0 +1,68 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/World/Cam") +camera: Camera { origin: Vec3A(0.0, 2.4, 8.5), lower_left_corner: Vec3A(-5.6632595, -2.6351454, -0.7084341), horizontal: Vec3A(11.326519, -0.0, 0.0), vertical: Vec3A(0.0, 6.254111, -1.2156761), u: Vec3A(1.0, -0.0, 0.0), v: Vec3A(0.0, 0.98162717, -0.19080901), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: Some("/Render/settings") +settings: RenderSettings { samples_per_pixel: 64, max_depth: 32, width: 960, height: 540, region: PixelRect { x0: 0, y0: 0, x1: 960, y1: 540 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 24.0, aperture: [20.955, 15.2908], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 10.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/implicit_shapes.usda"], invisible_overrides: Some(0) } +layer: $DIR/implicit_shapes.usda +lights: 2 +light 0: distant name Some("/World/Sun") lpe None pmf 0.5 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 1: dome name Some("/World/Sky") lpe None pmf 0.5 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 11 geometries, PrimitiveBreakdown { triangles: 1403, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 1403, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=380:885adf075f52175a camera=380:885adf075f52175a shadow=380:885adf075f52175a indirect=380:885adf075f52175a +geom 1: material #1 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=256:b301ba5859c3ec21 camera=256:b301ba5859c3ec21 shadow=256:b301ba5859c3ec21 indirect=256:b301ba5859c3ec21 +geom 2: material #2 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=54:05aae0ee5542efae camera=54:05aae0ee5542efae shadow=54:05aae0ee5542efae indirect=54:05aae0ee5542efae +geom 3: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=68:5712bb2e9c20938d camera=68:5712bb2e9c20938d shadow=68:5712bb2e9c20938d indirect=68:5712bb2e9c20938d +geom 4: material #1 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=92:60fd3b5d633608aa camera=92:60fd3b5d633608aa shadow=92:60fd3b5d633608aa indirect=92:60fd3b5d633608aa +geom 5: material #2 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=380:c1baaae2e9a57c00 camera=380:c1baaae2e9a57c00 shadow=380:c1baaae2e9a57c00 indirect=380:c1baaae2e9a57c00 +geom 6: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=69:7cda91fd97a28a69 camera=69:7cda91fd97a28a69 shadow=69:7cda91fd97a28a69 indirect=69:7cda91fd97a28a69 +geom 7: material #1 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=88:393a7515190ea8e5 camera=88:393a7515190ea8e5 shadow=88:393a7515190ea8e5 indirect=88:393a7515190ea8e5 +geom 8: material #2 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=12:aed60d32b622d9ad camera=12:aed60d32b622d9ad shadow=12:aed60d32b622d9ad indirect=12:aed60d32b622d9ad +geom 9: material #3 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:52e7bea0692cc322 camera=2:52e7bea0692cc322 shadow=2:52e7bea0692cc322 indirect=2:52e7bea0692cc322 +geom 10: material #3 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:525ac1a79196bfc5 camera=2:525ac1a79196bfc5 shadow=2:525ac1a79196bfc5 indirect=2:525ac1a79196bfc5 +provenance material /World/Looks/Brass: MaterialOrigin { slots: [0, 3, 6], displaced: false } +provenance material /World/Looks/Clay: MaterialOrigin { slots: [2, 5, 8], displaced: false } +provenance material /World/Looks/Ground: MaterialOrigin { slots: [9, 10], displaced: false } +provenance material /World/Looks/Teal: MaterialOrigin { slots: [1, 4, 7], displaced: false } +provenance light /World/Sky: LightOrigin { index: 1, geoms: 11..11 } +provenance light /World/Sun: LightOrigin { index: 0, geoms: 11..11 } +provenance geometry 0..1: /World/Drop +provenance geometry 1..2: /World/Pill +provenance geometry 2..3: /World/Spike +provenance geometry 3..4: /World/Log +provenance geometry 4..5: /World/Frustum +provenance geometry 5..6: /World/Capsule +provenance geometry 6..7: /World/Cone +provenance geometry 7..8: /World/Cylinder +provenance geometry 8..9: /World/Cube +provenance geometry 9..10: /World/Backdrop +provenance geometry 10..11: /World/Ground +provenance mesh: MeshOrigin { geom_id: 0, slot: 0, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 1, slot: 1, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 2, slot: 2, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 3, slot: 3, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 4, slot: 4, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 5, slot: 5, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 6, slot: 6, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 7, slot: 7, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 8, slot: 8, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 9, slot: 9, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 10, slot: 10, baked: true, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 3350102790202927374, n_points: 192, n_indices: 798, n_uvs: None, smooth: true, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 1: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 842475585675173290, n_points: 130, n_indices: 544, n_uvs: None, smooth: true, material: 1 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 2: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 8155579581791176547, n_points: 55, n_indices: 126, n_uvs: None, smooth: true, material: 2 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 3: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 9836686556183882764, n_points: 70, n_indices: 170, n_uvs: None, smooth: true, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 4: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 888819108523624605, n_points: 94, n_indices: 230, n_uvs: None, smooth: true, material: 1 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 5: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 15637138769175292785, n_points: 192, n_indices: 798, n_uvs: None, smooth: true, material: 2 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 6: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 12949292162655400582, n_points: 70, n_indices: 161, n_uvs: None, smooth: true, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 7: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 9655652409059035238, n_points: 90, n_indices: 220, n_uvs: None, smooth: true, material: 1 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 8: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 18161012096923765881, n_points: 8, n_indices: 24, n_uvs: None, smooth: false, material: 2 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 9: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 10327073002095181176, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 3 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 10: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 11540092840794327159, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 3 }), placements: 1, shared: false, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/World/Cam"), cameras: ["/World/Cam"], dicing: None, on_screen_shapes: Some(ScreenKey([0, 1075419546, 1091043328, 1146348642, 0, 1075419546, 1091043328, 3212836864, 3185397406, 3205386455, 1065353216, 3185397406, 3205386455, 0, 3213192633, 3187254502, 0, 1064025188, 3204507220, 0, 3192087409, 3212528621])), unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/World/Cam"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/implicit_shapes_usda-180b516d9253da53-1.image b/crates/crust-core/tests/data/import_baselines/implicit_shapes_usda-180b516d9253da53-1.image new file mode 100644 index 000000000..1052e31af --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/implicit_shapes_usda-180b516d9253da53-1.image @@ -0,0 +1 @@ +960x540 16spp clamp-off ec5ed4015bdead61 diff --git a/crates/crust-core/tests/data/import_baselines/implicit_shapes_usda-180b516d9253da53-2.digest b/crates/crust-core/tests/data/import_baselines/implicit_shapes_usda-180b516d9253da53-2.digest new file mode 100644 index 000000000..f939dc1ee --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/implicit_shapes_usda-180b516d9253da53-2.digest @@ -0,0 +1,68 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/World/Cam") +camera: Camera { origin: Vec3A(0.0, 2.4, 8.5), lower_left_corner: Vec3A(-5.6632595, -2.6351454, -0.7084341), horizontal: Vec3A(11.326519, -0.0, 0.0), vertical: Vec3A(0.0, 6.254111, -1.2156761), u: Vec3A(1.0, -0.0, 0.0), v: Vec3A(0.0, 0.98162717, -0.19080901), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: Some("/Render/settings") +settings: RenderSettings { samples_per_pixel: 64, max_depth: 32, width: 960, height: 540, region: PixelRect { x0: 0, y0: 0, x1: 960, y1: 540 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 24.0, aperture: [20.955, 15.2908], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 10.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/implicit_shapes.usda"], invisible_overrides: Some(0) } +layer: $DIR/implicit_shapes.usda +lights: 2 +light 0: distant name Some("/World/Sun") lpe None pmf 0.5 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 1: dome name Some("/World/Sky") lpe None pmf 0.5 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 11 geometries, PrimitiveBreakdown { triangles: 1403, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 1403, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=380:885adf075f52175a camera=380:885adf075f52175a shadow=380:885adf075f52175a indirect=380:885adf075f52175a +geom 1: material #1 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=256:b301ba5859c3ec21 camera=256:b301ba5859c3ec21 shadow=256:b301ba5859c3ec21 indirect=256:b301ba5859c3ec21 +geom 2: material #2 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=54:05aae0ee5542efae camera=54:05aae0ee5542efae shadow=54:05aae0ee5542efae indirect=54:05aae0ee5542efae +geom 3: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=68:5712bb2e9c20938d camera=68:5712bb2e9c20938d shadow=68:5712bb2e9c20938d indirect=68:5712bb2e9c20938d +geom 4: material #1 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=92:60fd3b5d633608aa camera=92:60fd3b5d633608aa shadow=92:60fd3b5d633608aa indirect=92:60fd3b5d633608aa +geom 5: material #2 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=380:c1baaae2e9a57c00 camera=380:c1baaae2e9a57c00 shadow=380:c1baaae2e9a57c00 indirect=380:c1baaae2e9a57c00 +geom 6: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=69:7cda91fd97a28a69 camera=69:7cda91fd97a28a69 shadow=69:7cda91fd97a28a69 indirect=69:7cda91fd97a28a69 +geom 7: material #1 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=88:393a7515190ea8e5 camera=88:393a7515190ea8e5 shadow=88:393a7515190ea8e5 indirect=88:393a7515190ea8e5 +geom 8: material #2 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=12:aed60d32b622d9ad camera=12:aed60d32b622d9ad shadow=12:aed60d32b622d9ad indirect=12:aed60d32b622d9ad +geom 9: material #3 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:52e7bea0692cc322 camera=2:52e7bea0692cc322 shadow=2:52e7bea0692cc322 indirect=2:52e7bea0692cc322 +geom 10: material #3 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:525ac1a79196bfc5 camera=2:525ac1a79196bfc5 shadow=2:525ac1a79196bfc5 indirect=2:525ac1a79196bfc5 +provenance material /World/Looks/Brass: MaterialOrigin { slots: [0, 3, 6], displaced: false } +provenance material /World/Looks/Clay: MaterialOrigin { slots: [2, 5, 8], displaced: false } +provenance material /World/Looks/Ground: MaterialOrigin { slots: [9, 10], displaced: false } +provenance material /World/Looks/Teal: MaterialOrigin { slots: [1, 4, 7], displaced: false } +provenance light /World/Sky: LightOrigin { index: 1, geoms: 11..11 } +provenance light /World/Sun: LightOrigin { index: 0, geoms: 11..11 } +provenance geometry 0..1: /World/Drop +provenance geometry 1..2: /World/Pill +provenance geometry 2..3: /World/Spike +provenance geometry 3..4: /World/Log +provenance geometry 4..5: /World/Frustum +provenance geometry 5..6: /World/Capsule +provenance geometry 6..7: /World/Cone +provenance geometry 7..8: /World/Cylinder +provenance geometry 8..9: /World/Cube +provenance geometry 9..10: /World/Backdrop +provenance geometry 10..11: /World/Ground +provenance mesh: MeshOrigin { geom_id: 0, slot: 0, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 1, slot: 1, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 2, slot: 2, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 3, slot: 3, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 4, slot: 4, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 5, slot: 5, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 6, slot: 6, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 7, slot: 7, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 8, slot: 8, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 9, slot: 9, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 10, slot: 10, baked: true, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 3350102790202927374, n_points: 192, n_indices: 798, n_uvs: None, smooth: true, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 1: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 842475585675173290, n_points: 130, n_indices: 544, n_uvs: None, smooth: true, material: 1 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 2: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 8155579581791176547, n_points: 55, n_indices: 126, n_uvs: None, smooth: true, material: 2 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 3: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 9836686556183882764, n_points: 70, n_indices: 170, n_uvs: None, smooth: true, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 4: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 888819108523624605, n_points: 94, n_indices: 230, n_uvs: None, smooth: true, material: 1 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 5: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 15637138769175292785, n_points: 192, n_indices: 798, n_uvs: None, smooth: true, material: 2 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 6: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 12949292162655400582, n_points: 70, n_indices: 161, n_uvs: None, smooth: true, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 7: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 9655652409059035238, n_points: 90, n_indices: 220, n_uvs: None, smooth: true, material: 1 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 8: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 18161012096923765881, n_points: 8, n_indices: 24, n_uvs: None, smooth: false, material: 2 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 9: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 10327073002095181176, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 3 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 10: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 11540092840794327159, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 3 }), placements: 1, shared: false, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/World/Cam"), cameras: ["/World/Cam"], dicing: None, on_screen_shapes: Some(ScreenKey([0, 1075419546, 1091043328, 1146348642, 0, 1075419546, 1091043328, 3212836864, 3185397406, 3205386455, 1065353216, 3185397406, 3205386455, 0, 3213192633, 3187254502, 0, 1064025188, 3204507220, 0, 3192087409, 3212528621])), unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/World/Cam"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/implicit_shapes_usda-180b516d9253da53-2.image b/crates/crust-core/tests/data/import_baselines/implicit_shapes_usda-180b516d9253da53-2.image new file mode 100644 index 000000000..1052e31af --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/implicit_shapes_usda-180b516d9253da53-2.image @@ -0,0 +1 @@ +960x540 16spp clamp-off ec5ed4015bdead61 diff --git a/crates/crust-core/tests/data/import_baselines/implicit_shapes_usda-30852d50af72eb96-1.digest b/crates/crust-core/tests/data/import_baselines/implicit_shapes_usda-30852d50af72eb96-1.digest new file mode 100644 index 000000000..f939dc1ee --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/implicit_shapes_usda-30852d50af72eb96-1.digest @@ -0,0 +1,68 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/World/Cam") +camera: Camera { origin: Vec3A(0.0, 2.4, 8.5), lower_left_corner: Vec3A(-5.6632595, -2.6351454, -0.7084341), horizontal: Vec3A(11.326519, -0.0, 0.0), vertical: Vec3A(0.0, 6.254111, -1.2156761), u: Vec3A(1.0, -0.0, 0.0), v: Vec3A(0.0, 0.98162717, -0.19080901), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: Some("/Render/settings") +settings: RenderSettings { samples_per_pixel: 64, max_depth: 32, width: 960, height: 540, region: PixelRect { x0: 0, y0: 0, x1: 960, y1: 540 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 24.0, aperture: [20.955, 15.2908], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 10.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/implicit_shapes.usda"], invisible_overrides: Some(0) } +layer: $DIR/implicit_shapes.usda +lights: 2 +light 0: distant name Some("/World/Sun") lpe None pmf 0.5 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 1: dome name Some("/World/Sky") lpe None pmf 0.5 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 11 geometries, PrimitiveBreakdown { triangles: 1403, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 1403, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=380:885adf075f52175a camera=380:885adf075f52175a shadow=380:885adf075f52175a indirect=380:885adf075f52175a +geom 1: material #1 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=256:b301ba5859c3ec21 camera=256:b301ba5859c3ec21 shadow=256:b301ba5859c3ec21 indirect=256:b301ba5859c3ec21 +geom 2: material #2 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=54:05aae0ee5542efae camera=54:05aae0ee5542efae shadow=54:05aae0ee5542efae indirect=54:05aae0ee5542efae +geom 3: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=68:5712bb2e9c20938d camera=68:5712bb2e9c20938d shadow=68:5712bb2e9c20938d indirect=68:5712bb2e9c20938d +geom 4: material #1 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=92:60fd3b5d633608aa camera=92:60fd3b5d633608aa shadow=92:60fd3b5d633608aa indirect=92:60fd3b5d633608aa +geom 5: material #2 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=380:c1baaae2e9a57c00 camera=380:c1baaae2e9a57c00 shadow=380:c1baaae2e9a57c00 indirect=380:c1baaae2e9a57c00 +geom 6: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=69:7cda91fd97a28a69 camera=69:7cda91fd97a28a69 shadow=69:7cda91fd97a28a69 indirect=69:7cda91fd97a28a69 +geom 7: material #1 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=88:393a7515190ea8e5 camera=88:393a7515190ea8e5 shadow=88:393a7515190ea8e5 indirect=88:393a7515190ea8e5 +geom 8: material #2 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=12:aed60d32b622d9ad camera=12:aed60d32b622d9ad shadow=12:aed60d32b622d9ad indirect=12:aed60d32b622d9ad +geom 9: material #3 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:52e7bea0692cc322 camera=2:52e7bea0692cc322 shadow=2:52e7bea0692cc322 indirect=2:52e7bea0692cc322 +geom 10: material #3 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:525ac1a79196bfc5 camera=2:525ac1a79196bfc5 shadow=2:525ac1a79196bfc5 indirect=2:525ac1a79196bfc5 +provenance material /World/Looks/Brass: MaterialOrigin { slots: [0, 3, 6], displaced: false } +provenance material /World/Looks/Clay: MaterialOrigin { slots: [2, 5, 8], displaced: false } +provenance material /World/Looks/Ground: MaterialOrigin { slots: [9, 10], displaced: false } +provenance material /World/Looks/Teal: MaterialOrigin { slots: [1, 4, 7], displaced: false } +provenance light /World/Sky: LightOrigin { index: 1, geoms: 11..11 } +provenance light /World/Sun: LightOrigin { index: 0, geoms: 11..11 } +provenance geometry 0..1: /World/Drop +provenance geometry 1..2: /World/Pill +provenance geometry 2..3: /World/Spike +provenance geometry 3..4: /World/Log +provenance geometry 4..5: /World/Frustum +provenance geometry 5..6: /World/Capsule +provenance geometry 6..7: /World/Cone +provenance geometry 7..8: /World/Cylinder +provenance geometry 8..9: /World/Cube +provenance geometry 9..10: /World/Backdrop +provenance geometry 10..11: /World/Ground +provenance mesh: MeshOrigin { geom_id: 0, slot: 0, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 1, slot: 1, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 2, slot: 2, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 3, slot: 3, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 4, slot: 4, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 5, slot: 5, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 6, slot: 6, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 7, slot: 7, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 8, slot: 8, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 9, slot: 9, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 10, slot: 10, baked: true, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 3350102790202927374, n_points: 192, n_indices: 798, n_uvs: None, smooth: true, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 1: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 842475585675173290, n_points: 130, n_indices: 544, n_uvs: None, smooth: true, material: 1 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 2: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 8155579581791176547, n_points: 55, n_indices: 126, n_uvs: None, smooth: true, material: 2 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 3: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 9836686556183882764, n_points: 70, n_indices: 170, n_uvs: None, smooth: true, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 4: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 888819108523624605, n_points: 94, n_indices: 230, n_uvs: None, smooth: true, material: 1 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 5: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 15637138769175292785, n_points: 192, n_indices: 798, n_uvs: None, smooth: true, material: 2 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 6: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 12949292162655400582, n_points: 70, n_indices: 161, n_uvs: None, smooth: true, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 7: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 9655652409059035238, n_points: 90, n_indices: 220, n_uvs: None, smooth: true, material: 1 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 8: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 18161012096923765881, n_points: 8, n_indices: 24, n_uvs: None, smooth: false, material: 2 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 9: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 10327073002095181176, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 3 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 10: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 11540092840794327159, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 3 }), placements: 1, shared: false, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/World/Cam"), cameras: ["/World/Cam"], dicing: None, on_screen_shapes: Some(ScreenKey([0, 1075419546, 1091043328, 1146348642, 0, 1075419546, 1091043328, 3212836864, 3185397406, 3205386455, 1065353216, 3185397406, 3205386455, 0, 3213192633, 3187254502, 0, 1064025188, 3204507220, 0, 3192087409, 3212528621])), unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/World/Cam"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/implicit_shapes_usda-30852d50af72eb96-1.image b/crates/crust-core/tests/data/import_baselines/implicit_shapes_usda-30852d50af72eb96-1.image new file mode 100644 index 000000000..1052e31af --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/implicit_shapes_usda-30852d50af72eb96-1.image @@ -0,0 +1 @@ +960x540 16spp clamp-off ec5ed4015bdead61 diff --git a/crates/crust-core/tests/data/import_baselines/implicit_shapes_usda-41169aa3c303f69f-1.digest b/crates/crust-core/tests/data/import_baselines/implicit_shapes_usda-41169aa3c303f69f-1.digest new file mode 100644 index 000000000..ba33bf450 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/implicit_shapes_usda-41169aa3c303f69f-1.digest @@ -0,0 +1,68 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/World/Cam") +camera: Camera { origin: Vec3A(0.0, 2.4, 8.5), lower_left_corner: Vec3A(-5.6632595, -2.6351454, -0.7084341), horizontal: Vec3A(11.326519, -0.0, 0.0), vertical: Vec3A(0.0, 6.254111, -1.2156761), u: Vec3A(1.0, -0.0, 0.0), v: Vec3A(0.0, 0.98162717, -0.19080901), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: Some("/Render/settings") +settings: RenderSettings { samples_per_pixel: 64, max_depth: 32, width: 960, height: 540, region: PixelRect { x0: 0, y0: 0, x1: 960, y1: 540 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 24.0, aperture: [20.955, 15.2908], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 10.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/implicit_shapes.usda"], invisible_overrides: Some(0) } +layer: $DIR/implicit_shapes.usda +lights: 2 +light 0: distant name Some("/World/Sun") lpe None pmf 0.5 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 1: dome name Some("/World/Sky") lpe None pmf 0.5 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 11 geometries, PrimitiveBreakdown { triangles: 1403, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 1403, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=380:885adf075f52175a camera=380:885adf075f52175a shadow=380:885adf075f52175a indirect=380:885adf075f52175a +geom 1: material #1 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=256:b301ba5859c3ec21 camera=256:b301ba5859c3ec21 shadow=256:b301ba5859c3ec21 indirect=256:b301ba5859c3ec21 +geom 2: material #2 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=54:05aae0ee5542efae camera=54:05aae0ee5542efae shadow=54:05aae0ee5542efae indirect=54:05aae0ee5542efae +geom 3: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=68:5712bb2e9c20938d camera=68:5712bb2e9c20938d shadow=68:5712bb2e9c20938d indirect=68:5712bb2e9c20938d +geom 4: material #1 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=92:60fd3b5d633608aa camera=92:60fd3b5d633608aa shadow=92:60fd3b5d633608aa indirect=92:60fd3b5d633608aa +geom 5: material #2 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=380:c1baaae2e9a57c00 camera=380:c1baaae2e9a57c00 shadow=380:c1baaae2e9a57c00 indirect=380:c1baaae2e9a57c00 +geom 6: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=69:7cda91fd97a28a69 camera=69:7cda91fd97a28a69 shadow=69:7cda91fd97a28a69 indirect=69:7cda91fd97a28a69 +geom 7: material #1 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=88:393a7515190ea8e5 camera=88:393a7515190ea8e5 shadow=88:393a7515190ea8e5 indirect=88:393a7515190ea8e5 +geom 8: material #2 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=12:aed60d32b622d9ad camera=12:aed60d32b622d9ad shadow=12:aed60d32b622d9ad indirect=12:aed60d32b622d9ad +geom 9: material #3 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:52e7bea0692cc322 camera=2:52e7bea0692cc322 shadow=2:52e7bea0692cc322 indirect=2:52e7bea0692cc322 +geom 10: material #3 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:525ac1a79196bfc5 camera=2:525ac1a79196bfc5 shadow=2:525ac1a79196bfc5 indirect=2:525ac1a79196bfc5 +provenance material /World/Looks/Brass: MaterialOrigin { slots: [0, 3, 6], displaced: false } +provenance material /World/Looks/Clay: MaterialOrigin { slots: [2, 5, 8], displaced: false } +provenance material /World/Looks/Ground: MaterialOrigin { slots: [9, 10], displaced: false } +provenance material /World/Looks/Teal: MaterialOrigin { slots: [1, 4, 7], displaced: false } +provenance light /World/Sky: LightOrigin { index: 1, geoms: 11..11 } +provenance light /World/Sun: LightOrigin { index: 0, geoms: 11..11 } +provenance geometry 0..1: /World/Drop +provenance geometry 1..2: /World/Pill +provenance geometry 2..3: /World/Spike +provenance geometry 3..4: /World/Log +provenance geometry 4..5: /World/Frustum +provenance geometry 5..6: /World/Capsule +provenance geometry 6..7: /World/Cone +provenance geometry 7..8: /World/Cylinder +provenance geometry 8..9: /World/Cube +provenance geometry 9..10: /World/Backdrop +provenance geometry 10..11: /World/Ground +provenance mesh: MeshOrigin { geom_id: 0, slot: 0, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 1, slot: 1, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 2, slot: 2, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 3, slot: 3, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 4, slot: 4, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 5, slot: 5, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 6, slot: 6, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 7, slot: 7, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 8, slot: 8, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 9, slot: 9, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 10, slot: 10, baked: true, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 3350102790202927374, n_points: 192, n_indices: 798, n_uvs: None, smooth: true, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 1: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 842475585675173290, n_points: 130, n_indices: 544, n_uvs: None, smooth: true, material: 1 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 2: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 8155579581791176547, n_points: 55, n_indices: 126, n_uvs: None, smooth: true, material: 2 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 3: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 9836686556183882764, n_points: 70, n_indices: 170, n_uvs: None, smooth: true, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 4: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 888819108523624605, n_points: 94, n_indices: 230, n_uvs: None, smooth: true, material: 1 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 5: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 15637138769175292785, n_points: 192, n_indices: 798, n_uvs: None, smooth: true, material: 2 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 6: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 12949292162655400582, n_points: 70, n_indices: 161, n_uvs: None, smooth: true, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 7: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 9655652409059035238, n_points: 90, n_indices: 220, n_uvs: None, smooth: true, material: 1 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 8: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 18161012096923765881, n_points: 8, n_indices: 24, n_uvs: None, smooth: false, material: 2 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 9: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 10327073002095181176, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 3 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 10: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 11540092840794327159, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 3 }), placements: 1, shared: false, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: true, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/World/Cam"), cameras: ["/World/Cam"], dicing: None, on_screen_shapes: Some(ScreenKey([0, 1075419546, 1091043328, 1146348642, 0, 1075419546, 1091043328, 3212836864, 3185397406, 3205386455, 1065353216, 3185397406, 3205386455, 0, 3213192633, 3187254502, 0, 1064025188, 3204507220, 0, 3192087409, 3212528621])), unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/World/Cam"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/implicit_shapes_usda-41169aa3c303f69f-1.image b/crates/crust-core/tests/data/import_baselines/implicit_shapes_usda-41169aa3c303f69f-1.image new file mode 100644 index 000000000..1052e31af --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/implicit_shapes_usda-41169aa3c303f69f-1.image @@ -0,0 +1 @@ +960x540 16spp clamp-off ec5ed4015bdead61 diff --git a/crates/crust-core/tests/data/import_baselines/implicit_twins_usda-925c195d8a7f5a5c-1.digest b/crates/crust-core/tests/data/import_baselines/implicit_twins_usda-925c195d8a7f5a5c-1.digest new file mode 100644 index 000000000..8ffc6ca06 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/implicit_twins_usda-925c195d8a7f5a5c-1.digest @@ -0,0 +1,24 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: None +camera: Camera { origin: Vec3A(15.0, 3.0, 3.0), lower_left_corner: Vec3A(4.8863316, -0.044797063, 4.174048), horizontal: Vec3A(1.2295314, 0.0, -6.147657), vertical: Vec3A(-0.44830504, 3.4967792, -0.08966101), u: Vec3A(0.19611613, 0.0, -0.9805807), v: Vec3A(-0.1271232, 0.991561, -0.02542464), lens_radius: 0.05, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: None +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 640, height: 360, region: PixelRect { x0: 0, y0: 0, x1: 640, y1: 360 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: None, depth_of_field: true, motion_blur: false, layer_stack: ["$DIR/implicit_twins.usda"], invisible_overrides: Some(0) } +layer: $DIR/implicit_twins.usda +warning: Warning { code: CameraMissing, kind: Skipped, count: 1, prims: [], message: "USD stage has no UsdGeomCamera — falling back to world::get_settings camera" } +lights: 0 +volumes: 0 +world: 2 geometries, PrimitiveBreakdown { triangles: 0, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 2 } top level, PrimitiveBreakdown { triangles: 192, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 2 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=192:ac14f8c4cdc97059 camera=192:ac14f8c4cdc97059 shadow=192:ac14f8c4cdc97059 indirect=192:ac14f8c4cdc97059 +geom 1: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=192:888de211ce609fe9 camera=192:888de211ce609fe9 shadow=192:888de211ce609fe9 indirect=192:888de211ce609fe9 +provenance geometry 0..1: /World/B +provenance geometry 1..2: /World/A +provenance mesh: MeshOrigin { geom_id: 0, slot: 0, baked: false, moving: false } +provenance mesh: MeshOrigin { geom_id: 1, slot: 0, baked: false, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 16571705108045419501, n_points: 194, n_indices: 480, n_uvs: None, smooth: true, material: 0 }), placements: 2, shared: false, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: None, cameras: [], dicing: None, on_screen_shapes: None, unsized_shapes: true, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: None, offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/implicit_twins_usda-925c195d8a7f5a5c-1.image b/crates/crust-core/tests/data/import_baselines/implicit_twins_usda-925c195d8a7f5a5c-1.image new file mode 100644 index 000000000..c734c5b1d --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/implicit_twins_usda-925c195d8a7f5a5c-1.image @@ -0,0 +1 @@ +640x360 16spp clamp-off a04a09c0d4b5e325 diff --git a/crates/crust-core/tests/data/import_baselines/import_plain_usda-37ba4c8eb30aefb6-1.digest b/crates/crust-core/tests/data/import_baselines/import_plain_usda-37ba4c8eb30aefb6-1.digest new file mode 100644 index 000000000..0fa932abc --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/import_plain_usda-37ba4c8eb30aefb6-1.digest @@ -0,0 +1,27 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/World/Cam") +camera: Camera { origin: Vec3A(0.0, 5.0, 6.0), lower_left_corner: Vec3A(-2.0000002, -2.9376645, -0.40261602), horizontal: Vec3A(4.0000005, -0.0, 0.0), vertical: Vec3A(0.0, 3.0731347, -2.560439), u: Vec3A(1.0, -0.0, 0.0), v: Vec3A(0.0, 0.76828355, -0.6401097), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: Some("/Render/settings") +settings: RenderSettings { samples_per_pixel: 16, max_depth: 2, width: 16, height: 16, region: PixelRect { x0: 0, y0: 0, x1: 16, y1: 16 }, min_samples_per_pixel: 16, variance_threshold: 0.0, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: None, light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 50.0, aperture: [20.0, 20.0], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 10.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/import_plain.usda"], invisible_overrides: Some(0) } +layer: $DIR/import_plain.usda +lights: 2 +light 0: distant name Some("/World/Sun") lpe None pmf 0.5 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 1: area name Some("/World/Key") lpe None pmf 0.5 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 2 geometries, PrimitiveBreakdown { triangles: 2, spheres: 1, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 2, spheres: 1, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +geom 0: material #0 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:ca080854f0bf27b5 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=1:ca080854f0bf27b5 +geom 1: material #1 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:fce6de5b675a55c5 camera=2:fce6de5b675a55c5 shadow=2:fce6de5b675a55c5 indirect=2:fce6de5b675a55c5 +provenance material /World/M: MaterialOrigin { slots: [1], displaced: false } +provenance light /World/Key: LightOrigin { index: 1, geoms: 0..1 } +provenance light /World/Sun: LightOrigin { index: 0, geoms: 0..0 } +provenance geometry 0..1: /World/Key +provenance geometry 1..2: /World/Floor +provenance mesh: MeshOrigin { geom_id: 1, slot: 0, baked: true, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 14903623499644419787, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/World/Cam"), cameras: ["/World/Cam"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/World/Cam"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/import_plain_usda-37ba4c8eb30aefb6-1.image b/crates/crust-core/tests/data/import_baselines/import_plain_usda-37ba4c8eb30aefb6-1.image new file mode 100644 index 000000000..431de6ffe --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/import_plain_usda-37ba4c8eb30aefb6-1.image @@ -0,0 +1 @@ +16x16 16spp clamp-off 8fe84ece808596b4 diff --git a/crates/crust-core/tests/data/import_baselines/import_usda-a114cca514b1e2e9-1.digest b/crates/crust-core/tests/data/import_baselines/import_usda-a114cca514b1e2e9-1.digest new file mode 100644 index 000000000..d348dd3cc --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/import_usda-a114cca514b1e2e9-1.digest @@ -0,0 +1,27 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/World/Cam") +camera: Camera { origin: Vec3A(0.0, 5.0, 6.0), lower_left_corner: Vec3A(-2.0000002, -2.9376645, -0.40261602), horizontal: Vec3A(4.0000005, -0.0, 0.0), vertical: Vec3A(0.0, 3.0731347, -2.560439), u: Vec3A(1.0, -0.0, 0.0), v: Vec3A(0.0, 0.76828355, -0.6401097), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: Some("/Render/settings") +settings: RenderSettings { samples_per_pixel: 16, max_depth: 2, width: 16, height: 16, region: PixelRect { x0: 0, y0: 0, x1: 16, y1: 16 }, min_samples_per_pixel: 16, variance_threshold: 0.0, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: None, light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 50.0, aperture: [20.0, 20.0], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 10.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/import.usda"], invisible_overrides: Some(0) } +layer: $DIR/import.usda +lights: 2 +light 0: distant name Some("/World/Sun") lpe None pmf 0.5 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 0.25, specular: 3.0 } +light 1: area name Some("/World/Key") lpe None pmf 0.5 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 0.25, specular: 3.0 } +volumes: 0 +world: 2 geometries, PrimitiveBreakdown { triangles: 2, spheres: 1, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 2, spheres: 1, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +geom 0: material #0 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:ca080854f0bf27b5 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=1:ca080854f0bf27b5 +geom 1: material #1 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:fce6de5b675a55c5 camera=2:fce6de5b675a55c5 shadow=2:fce6de5b675a55c5 indirect=2:fce6de5b675a55c5 +provenance material /World/M: MaterialOrigin { slots: [1], displaced: false } +provenance light /World/Key: LightOrigin { index: 1, geoms: 0..1 } +provenance light /World/Sun: LightOrigin { index: 0, geoms: 0..0 } +provenance geometry 0..1: /World/Key +provenance geometry 1..2: /World/Floor +provenance mesh: MeshOrigin { geom_id: 1, slot: 0, baked: true, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 14903623499644419787, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/World/Cam"), cameras: ["/World/Cam"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/World/Cam"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/import_usda-a114cca514b1e2e9-1.image b/crates/crust-core/tests/data/import_baselines/import_usda-a114cca514b1e2e9-1.image new file mode 100644 index 000000000..b01e6071e --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/import_usda-a114cca514b1e2e9-1.image @@ -0,0 +1 @@ +16x16 16spp clamp-off bbc4bce34628e579 diff --git a/crates/crust-core/tests/data/import_baselines/imported_motion_usda-98baf8cfec165d96-1.digest b/crates/crust-core/tests/data/import_baselines/imported_motion_usda-98baf8cfec165d96-1.digest new file mode 100644 index 000000000..3871b6125 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/imported_motion_usda-98baf8cfec165d96-1.digest @@ -0,0 +1,29 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: None +camera: Camera { origin: Vec3A(15.0, 3.0, 3.0), lower_left_corner: Vec3A(4.8863316, -0.044797063, 4.174048), horizontal: Vec3A(1.2295314, 0.0, -6.147657), vertical: Vec3A(-0.44830504, 3.4967792, -0.08966101), u: Vec3A(0.19611613, 0.0, -0.9805807), v: Vec3A(-0.1271232, 0.991561, -0.02542464), lens_radius: 0.05, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: None +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 640, height: 360, region: PixelRect { x0: 0, y0: 0, x1: 640, y1: 360 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: None, depth_of_field: true, motion_blur: false, layer_stack: ["$DIR/imported_motion.usda"], invisible_overrides: Some(0) } +layer: $DIR/imported_motion.usda +warning: Warning { code: MeshNonInvertibleTransform, kind: Approximated, count: 1, prims: ["/World/Flat"], message: "Mesh at /World/Flat has a non-invertible transform — baking instead of instancing" } +warning: Warning { code: MeshMotionIgnored, kind: Skipped, count: 1, prims: ["/World/Flat"], message: "Mesh at /World/Flat: crust:motion:translate is ignored on baked (non-invertible) geometry" } +warning: Warning { code: CameraMissing, kind: Skipped, count: 1, prims: [], message: "USD stage has no UsdGeomCamera — falling back to world::get_settings camera" } +lights: 0 +volumes: 0 +world: 4 geometries, PrimitiveBreakdown { triangles: 2, spheres: 1, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 2 } top level, PrimitiveBreakdown { triangles: 4, spheres: 2, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 2 } unique, motion true +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [Translation(Vec3A(0.7, 0.0, 0.0))] pieces all=1:39345aa200c2bfe5 camera=1:39345aa200c2bfe5 shadow=1:39345aa200c2bfe5 indirect=1:39345aa200c2bfe5 +geom 1: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.2599211 motion [Translation(Vec3A(0.0, 0.5, 0.25))] pieces all=2:bb1528be251a1de5 camera=2:bb1528be251a1de5 shadow=2:bb1528be251a1de5 indirect=2:bb1528be251a1de5 +geom 2: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:b4dfc0dd30bb66e5 camera=1:b4dfc0dd30bb66e5 shadow=1:b4dfc0dd30bb66e5 indirect=1:b4dfc0dd30bb66e5 +geom 3: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:1805dc7df3d30cb5 camera=2:1805dc7df3d30cb5 shadow=2:1805dc7df3d30cb5 indirect=2:1805dc7df3d30cb5 +provenance geometry 0..1: /World/Mover +provenance geometry 1..2: /World/Riser +provenance geometry 2..3: /World/Still +provenance geometry 3..4: /World/Flat +provenance mesh: MeshOrigin { geom_id: 1, slot: 0, baked: false, moving: true } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 7377966807836294734, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [2] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: None, cameras: [], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: None, offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/imported_motion_usda-98baf8cfec165d96-1.image b/crates/crust-core/tests/data/import_baselines/imported_motion_usda-98baf8cfec165d96-1.image new file mode 100644 index 000000000..c734c5b1d --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/imported_motion_usda-98baf8cfec165d96-1.image @@ -0,0 +1 @@ +640x360 16spp clamp-off a04a09c0d4b5e325 diff --git a/crates/crust-core/tests/data/import_baselines/inexact_shutter_usda-eaa1e924cd3a23ce-1.digest b/crates/crust-core/tests/data/import_baselines/inexact_shutter_usda-eaa1e924cd3a23ce-1.digest new file mode 100644 index 000000000..fd701b52a --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/inexact_shutter_usda-eaa1e924cd3a23ce-1.digest @@ -0,0 +1,21 @@ +time: Some(5.0) +working space: Linear Rec.709 (sRGB) +camera path: Some("/World/cam") +camera: Camera { origin: Vec3A(0.0, 0.0, 8.0), lower_left_corner: Vec3A(-2.7183647, -1.5290802, -2.0), horizontal: Vec3A(5.4367294, 0.0, 0.0), vertical: Vec3A(0.0, 3.0581603, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: Some("/Render/settings") +settings: RenderSettings { samples_per_pixel: 16, max_depth: 2, width: 64, height: 36, region: PixelRect { x0: 0, y0: 0, x1: 64, y1: 36 }, min_samples_per_pixel: 16, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 5, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 50.0, aperture: [20.955, 15.2908], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 10.0 }), depth_of_field: false, motion_blur: true, layer_stack: ["$DIR/inexact_shutter.usda"], invisible_overrides: Some(0) } +layer: $DIR/inexact_shutter.usda +lights: 0 +volumes: 0 +world: 1 geometries, PrimitiveBreakdown { triangles: 0, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 1 } top level, PrimitiveBreakdown { triangles: 2, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 1 } unique, motion true +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [Translation(Vec3A(0.4, 0.0, 0.0))] pieces all=2:148e5bbd2dcaa342 camera=2:148e5bbd2dcaa342 shadow=2:148e5bbd2dcaa342 indirect=2:148e5bbd2dcaa342 +provenance material /World/Glow: MaterialOrigin { slots: [0], displaced: false } +provenance geometry 0..1: /World/Card +provenance mesh: MeshOrigin { geom_id: 0, slot: 0, baked: false, moving: true } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 7296987149454137707, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: Some(5.0), camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/World/cam"), cameras: ["/World/cam"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/World/cam"), offsets: [13815242216921733530, 4599075939470750515], interval: Some([4617202927970916762, 4617653287933653811]), query: true, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/inexact_shutter_usda-eaa1e924cd3a23ce-1.f32-shutter.digest b/crates/crust-core/tests/data/import_baselines/inexact_shutter_usda-eaa1e924cd3a23ce-1.f32-shutter.digest new file mode 100644 index 000000000..cdae5d9fe --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/inexact_shutter_usda-eaa1e924cd3a23ce-1.f32-shutter.digest @@ -0,0 +1,21 @@ +time: Some(5.0) +working space: Linear Rec.709 (sRGB) +camera path: Some("/World/cam") +camera: Camera { origin: Vec3A(0.0, 0.0, 8.0), lower_left_corner: Vec3A(-2.7183647, -1.5290802, -2.0), horizontal: Vec3A(5.4367294, 0.0, 0.0), vertical: Vec3A(0.0, 3.0581603, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: Some("/Render/settings") +settings: RenderSettings { samples_per_pixel: 16, max_depth: 2, width: 64, height: 36, region: PixelRect { x0: 0, y0: 0, x1: 64, y1: 36 }, min_samples_per_pixel: 16, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 5, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 50.0, aperture: [20.955, 15.2908], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 10.0 }), depth_of_field: false, motion_blur: true, layer_stack: ["$DIR/inexact_shutter.usda"], invisible_overrides: Some(0) } +layer: $DIR/inexact_shutter.usda +lights: 0 +volumes: 0 +world: 1 geometries, PrimitiveBreakdown { triangles: 0, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 1 } top level, PrimitiveBreakdown { triangles: 2, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 1 } unique, motion true +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [Translation(Vec3A(0.4, 0.0, 0.0))] pieces all=2:c4164dc6690b8664 camera=2:c4164dc6690b8664 shadow=2:c4164dc6690b8664 indirect=2:c4164dc6690b8664 +provenance material /World/Glow: MaterialOrigin { slots: [0], displaced: false } +provenance geometry 0..1: /World/Card +provenance mesh: MeshOrigin { geom_id: 0, slot: 0, baked: false, moving: true } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 7296987149454137707, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: Some(5.0), camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/World/cam"), cameras: ["/World/cam"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/World/cam"), offsets: [13815242216921733530, 4599075939470750515], interval: Some([4617202927970916762, 4617653287933653811]), query: true, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/inexact_shutter_usda-eaa1e924cd3a23ce-1.f32-shutter.image b/crates/crust-core/tests/data/import_baselines/inexact_shutter_usda-eaa1e924cd3a23ce-1.f32-shutter.image new file mode 100644 index 000000000..14acb739a --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/inexact_shutter_usda-eaa1e924cd3a23ce-1.f32-shutter.image @@ -0,0 +1 @@ +64x36 16spp clamp-off 8575cdc6c3771589 diff --git a/crates/crust-core/tests/data/import_baselines/inexact_shutter_usda-eaa1e924cd3a23ce-1.image b/crates/crust-core/tests/data/import_baselines/inexact_shutter_usda-eaa1e924cd3a23ce-1.image new file mode 100644 index 000000000..14acb739a --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/inexact_shutter_usda-eaa1e924cd3a23ce-1.image @@ -0,0 +1 @@ +64x36 16spp clamp-off 8575cdc6c3771589 diff --git a/crates/crust-core/tests/data/import_baselines/inf_light_usda-fd28273b2a9da24d-1.digest b/crates/crust-core/tests/data/import_baselines/inf_light_usda-fd28273b2a9da24d-1.digest new file mode 100644 index 000000000..7c87dec0b --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/inf_light_usda-fd28273b2a9da24d-1.digest @@ -0,0 +1,21 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/World/cam") +camera: Camera { origin: Vec3A(0.0, 0.0, 0.0), lower_left_corner: Vec3A(-2.7183647, -1.5290802, -10.0), horizontal: Vec3A(5.4367294, 0.0, 0.0), vertical: Vec3A(0.0, 3.0581603, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: None +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 640, height: 360, region: PixelRect { x0: 0, y0: 0, x1: 640, y1: 360 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 50.0, aperture: [20.955, 15.2908], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 10.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/inf_light.usda"], invisible_overrides: Some(0) } +layer: $DIR/inf_light.usda +warning: Warning { code: LightNonFiniteInput, kind: Refused, count: 1, prims: ["/World/hot"], message: "/World/hot: inputs:intensity = inf is not finite — using its fallback 1" } +lights: 1 +light 0: area name Some("/World/hot") lpe None pmf 1.0 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 1 geometries, PrimitiveBreakdown { triangles: 0, spheres: 1, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 0, spheres: 1, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +geom 0: material #0 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:984632b55acb5495 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=1:984632b55acb5495 +provenance light /World/hot: LightOrigin { index: 0, geoms: 0..1 } +provenance geometry 0..1: /World/hot +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/World/cam"), cameras: ["/World/cam"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/World/cam"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/inf_light_usda-fd28273b2a9da24d-1.image b/crates/crust-core/tests/data/import_baselines/inf_light_usda-fd28273b2a9da24d-1.image new file mode 100644 index 000000000..c734c5b1d --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/inf_light_usda-fd28273b2a9da24d-1.image @@ -0,0 +1 @@ +640x360 16spp clamp-off a04a09c0d4b5e325 diff --git a/crates/crust-core/tests/data/import_baselines/infinite_usda-6e15312bf55ca148-1.digest b/crates/crust-core/tests/data/import_baselines/infinite_usda-6e15312bf55ca148-1.digest new file mode 100644 index 000000000..e9e278f04 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/infinite_usda-6e15312bf55ca148-1.digest @@ -0,0 +1,21 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: None +camera: Camera { origin: Vec3A(15.0, 3.0, 3.0), lower_left_corner: Vec3A(4.8863316, -0.044797063, 4.174048), horizontal: Vec3A(1.2295314, 0.0, -6.147657), vertical: Vec3A(-0.44830504, 3.4967792, -0.08966101), u: Vec3A(0.19611613, 0.0, -0.9805807), v: Vec3A(-0.1271232, 0.991561, -0.02542464), lens_radius: 0.05, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: None +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 640, height: 360, region: PixelRect { x0: 0, y0: 0, x1: 640, y1: 360 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: None, depth_of_field: true, motion_blur: false, layer_stack: ["$DIR/infinite.usda"], invisible_overrides: Some(0) } +layer: $DIR/infinite.usda +warning: Warning { code: CameraMissing, kind: Skipped, count: 1, prims: [], message: "USD stage has no UsdGeomCamera — falling back to world::get_settings camera" } +lights: 2 +light 0: dome name Some("/World/Sky") lpe None pmf 0.5 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 1: distant name Some("/World/Sun") lpe None pmf 0.5 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 0 geometries, PrimitiveBreakdown { triangles: 0, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 0, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +provenance light /World/Sky: LightOrigin { index: 0, geoms: 0..0 } +provenance light /World/Sun: LightOrigin { index: 1, geoms: 0..0 } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: None, cameras: [], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: None, offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/infinite_usda-6e15312bf55ca148-1.image b/crates/crust-core/tests/data/import_baselines/infinite_usda-6e15312bf55ca148-1.image new file mode 100644 index 000000000..e764f739a --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/infinite_usda-6e15312bf55ca148-1.image @@ -0,0 +1 @@ +640x360 16spp clamp-off 143f59da8403ab25 diff --git a/crates/crust-core/tests/data/import_baselines/inherits_usda-946600d02d8755e0-1.digest b/crates/crust-core/tests/data/import_baselines/inherits_usda-946600d02d8755e0-1.digest new file mode 100644 index 000000000..78e780c03 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/inherits_usda-946600d02d8755e0-1.digest @@ -0,0 +1,18 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/World/cam") +camera: Camera { origin: Vec3A(0.0, 0.0, 5.0), lower_left_corner: Vec3A(-2.7183647, -1.5290802, -5.0), horizontal: Vec3A(5.4367294, 0.0, 0.0), vertical: Vec3A(0.0, 3.0581603, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: Some("/Render/settings") +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 64, height: 36, region: PixelRect { x0: 0, y0: 0, x1: 64, y1: 36 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [AovProduct { prim_path: "/Render/beauty", name: "renders/beauty.exr", vars: [AovVar { prim_path: "/Render/beauty_var", name: "beauty_var", channel_prefix: None, source: Color, components: 4, precision: Float, accumulation: Filtered, clear: 0.0, expression: None, raw: false, variance: false }], attributes: [] }], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 50.0, aperture: [20.955, 15.2908], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 10.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/inherits.usda"], invisible_overrides: Some(0) } +layer: $DIR/inherits.usda +lights: 0 +volumes: 0 +world: 1 geometries, PrimitiveBreakdown { triangles: 0, spheres: 1, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 0, spheres: 1, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:fb1e7d48790aec95 camera=1:fb1e7d48790aec95 shadow=1:fb1e7d48790aec95 indirect=1:fb1e7d48790aec95 +provenance geometry 0..1: /World/ball +provenance spheres: [0] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/World/cam"), cameras: ["/World/other", "/World/cam"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/World/cam"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/inherits_usda-946600d02d8755e0-1.image b/crates/crust-core/tests/data/import_baselines/inherits_usda-946600d02d8755e0-1.image new file mode 100644 index 000000000..f4ebc1648 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/inherits_usda-946600d02d8755e0-1.image @@ -0,0 +1 @@ +64x36 16spp clamp-off 1028d44458cc9325 diff --git a/crates/crust-core/tests/data/import_baselines/input_usda-39af7a7dd8ccc053-1.digest b/crates/crust-core/tests/data/import_baselines/input_usda-39af7a7dd8ccc053-1.digest new file mode 100644 index 000000000..48bb6fdb1 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/input_usda-39af7a7dd8ccc053-1.digest @@ -0,0 +1,22 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/World/Cam") +camera: Camera { origin: Vec3A(0.0, 0.0, 6.0), lower_left_corner: Vec3A(-1.3761721, -0.91744804, 0.0), horizontal: Vec3A(2.7523441, 0.0, 0.0), vertical: Vec3A(0.0, 1.8348961, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0125, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: Some("/Render/settings") +settings: RenderSettings { samples_per_pixel: 16, max_depth: 2, width: 48, height: 32, region: PixelRect { x0: 0, y0: 0, x1: 48, y1: 32 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 50.0, aperture: [20.955, 15.2908], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 2.0, focus_distance: 6.0 }), depth_of_field: true, motion_blur: false, layer_stack: ["$DIR/input.usda"], invisible_overrides: Some(0) } +layer: $DIR/input.usda +lights: 1 +light 0: distant name Some("/World/Sun") lpe None pmf 1.0 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 2 geometries, PrimitiveBreakdown { triangles: 0, spheres: 2, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 0, spheres: 2, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:1cd1488d041dfcdb camera=1:1cd1488d041dfcdb shadow=1:1cd1488d041dfcdb indirect=1:1cd1488d041dfcdb +geom 1: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:2d90e22d27992fa5 camera=1:2d90e22d27992fa5 shadow=1:2d90e22d27992fa5 indirect=1:2d90e22d27992fa5 +provenance light /World/Sun: LightOrigin { index: 0, geoms: 2..2 } +provenance geometry 0..1: /World/Far +provenance geometry 1..2: /World/Near +provenance spheres: [0, 1] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: true, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/World/Cam"), cameras: ["/World/Cam"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/World/Cam"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/input_usda-39af7a7dd8ccc053-1.image b/crates/crust-core/tests/data/import_baselines/input_usda-39af7a7dd8ccc053-1.image new file mode 100644 index 000000000..51107fcdd --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/input_usda-39af7a7dd8ccc053-1.image @@ -0,0 +1 @@ +48x32 16spp clamp-off fbca99e6d6c9aaa1 diff --git a/crates/crust-core/tests/data/import_baselines/instanced_curves_usda-4486def29adfc50e-1.digest b/crates/crust-core/tests/data/import_baselines/instanced_curves_usda-4486def29adfc50e-1.digest new file mode 100644 index 000000000..eb02048c8 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/instanced_curves_usda-4486def29adfc50e-1.digest @@ -0,0 +1,20 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: None +camera: Camera { origin: Vec3A(15.0, 3.0, 3.0), lower_left_corner: Vec3A(4.8863316, -0.044797063, 4.174048), horizontal: Vec3A(1.2295314, 0.0, -6.147657), vertical: Vec3A(-0.44830504, 3.4967792, -0.08966101), u: Vec3A(0.19611613, 0.0, -0.9805807), v: Vec3A(-0.1271232, 0.991561, -0.02542464), lens_radius: 0.05, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: None +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 640, height: 360, region: PixelRect { x0: 0, y0: 0, x1: 640, y1: 360 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: None, depth_of_field: true, motion_blur: false, layer_stack: ["$DIR/instanced_curves.usda"], invisible_overrides: Some(0) } +layer: $DIR/instanced_curves.usda +warning: Warning { code: CameraMissing, kind: Skipped, count: 1, prims: [], message: "USD stage has no UsdGeomCamera — falling back to world::get_settings camera" } +lights: 0 +volumes: 0 +world: 2 geometries, PrimitiveBreakdown { triangles: 0, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 2 } top level, PrimitiveBreakdown { triangles: 0, spheres: 0, disks: 0, cylinders: 0, curve_segments: 1, cubic_curve_spans: 0, instances: 2 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: Some((false, false, [])), primvars: None } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves true scale 1.0 motion [] pieces all=1:662a7d01a2f8c859 camera=1:662a7d01a2f8c859 shadow=1:662a7d01a2f8c859 indirect=1:662a7d01a2f8c859 +geom 1: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: Some((false, false, [])), primvars: None } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves true scale 0.99999994 motion [] pieces all=1:0fb0956567e3c37e camera=1:0fb0956567e3c37e shadow=1:0fb0956567e3c37e indirect=1:0fb0956567e3c37e +provenance geometry 0..2: /World/Fur +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: None, cameras: [], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: None, offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/instanced_curves_usda-4486def29adfc50e-1.image b/crates/crust-core/tests/data/import_baselines/instanced_curves_usda-4486def29adfc50e-1.image new file mode 100644 index 000000000..c734c5b1d --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/instanced_curves_usda-4486def29adfc50e-1.image @@ -0,0 +1 @@ +640x360 16spp clamp-off a04a09c0d4b5e325 diff --git a/crates/crust-core/tests/data/import_baselines/instanced_prototype_usda-a6e21e932b375f53-1.digest b/crates/crust-core/tests/data/import_baselines/instanced_prototype_usda-a6e21e932b375f53-1.digest new file mode 100644 index 000000000..fe83f4ee0 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/instanced_prototype_usda-a6e21e932b375f53-1.digest @@ -0,0 +1,24 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/World/Cam") +camera: Camera { origin: Vec3A(1.0, 0.0, 10.0), lower_left_corner: Vec3A(-1.7183647, -1.5290802, 0.0), horizontal: Vec3A(5.4367294, 0.0, 0.0), vertical: Vec3A(0.0, 3.0581603, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: None +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 640, height: 360, region: PixelRect { x0: 0, y0: 0, x1: 640, y1: 360 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 50.0, aperture: [20.955, 15.2908], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 10.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/instanced_prototype.usda"], invisible_overrides: Some(0) } +layer: $DIR/instanced_prototype.usda +lights: 0 +volumes: 0 +world: 4 geometries, PrimitiveBreakdown { triangles: 0, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 4 } top level, PrimitiveBreakdown { triangles: 2, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 4 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:61e4350a67ec8255 camera=2:61e4350a67ec8255 shadow=2:61e4350a67ec8255 indirect=2:61e4350a67ec8255 +geom 1: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:802f8cea72d34ba8 camera=2:802f8cea72d34ba8 shadow=2:802f8cea72d34ba8 indirect=2:802f8cea72d34ba8 +geom 2: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:6b2659e60b0616d8 camera=2:6b2659e60b0616d8 shadow=2:6b2659e60b0616d8 indirect=2:6b2659e60b0616d8 +geom 3: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:61e4350a67ec8255 camera=2:61e4350a67ec8255 shadow=2:61e4350a67ec8255 indirect=2:61e4350a67ec8255 +provenance geometry 0..3: /World/Leaves +provenance geometry 3..4: /LeafAsset/Geo +provenance mesh: MeshOrigin { geom_id: 3, slot: 0, baked: false, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 11573210918765220906, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: true, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/World/Cam"), cameras: ["/World/Cam"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/World/Cam"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/instanced_prototype_usda-a6e21e932b375f53-1.image b/crates/crust-core/tests/data/import_baselines/instanced_prototype_usda-a6e21e932b375f53-1.image new file mode 100644 index 000000000..c734c5b1d --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/instanced_prototype_usda-a6e21e932b375f53-1.image @@ -0,0 +1 @@ +640x360 16spp clamp-off a04a09c0d4b5e325 diff --git a/crates/crust-core/tests/data/import_baselines/instancer_primvar_usda-6d97a3b7a8db1d2d-1.digest b/crates/crust-core/tests/data/import_baselines/instancer_primvar_usda-6d97a3b7a8db1d2d-1.digest new file mode 100644 index 000000000..2cf1dde9e --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/instancer_primvar_usda-6d97a3b7a8db1d2d-1.digest @@ -0,0 +1,26 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/World/cam") +camera: Camera { origin: Vec3A(0.0, 0.0, 10.0), lower_left_corner: Vec3A(-2.0955, -1.5716249, 0.0), horizontal: Vec3A(4.191, 0.0, 0.0), vertical: Vec3A(0.0, 3.1432498, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: Some("/Render/settings") +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 48, height: 36, region: PixelRect { x0: 0, y0: 0, x1: 48, y1: 36 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [AovProduct { prim_path: "/Render/p", name: "p.exr", vars: [AovVar { prim_path: "/Render/P", name: "P", channel_prefix: None, source: P, components: 3, precision: Float, accumulation: Closest, clear: 0.0, expression: None, raw: false, variance: false }, AovVar { prim_path: "/Render/objectId", name: "objectId", channel_prefix: None, source: Primvar(PrimvarSource { index: 0, components: 1, role: Integer }), components: 1, precision: Uint, accumulation: Closest, clear: 0.0, expression: None, raw: false, variance: false }], attributes: [] }], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 50.0, aperture: [20.955, 15.2908], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 10.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/instancer_primvar.usda"], invisible_overrides: Some(0) } +layer: $DIR/instancer_primvar.usda +warning: Warning { code: PrimvarNotInherited, kind: Skipped, count: 1, prims: ["/World/scatter"], message: "/Render/objectId asks for primvar \"objectId\", which the PointInstancer authors on /World/scatter; crust does not inherit primvars yet, so the prims it would reach read the clear value" } +lights: 1 +light 0: dome name Some("/World/dome") lpe None pmf 1.0 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 4 geometries, PrimitiveBreakdown { triangles: 0, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 4 } top level, PrimitiveBreakdown { triangles: 4, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 4 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:6af591a28dce38d4 camera=2:6af591a28dce38d4 shadow=2:6af591a28dce38d4 indirect=2:6af591a28dce38d4 +geom 1: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:f13fac7f14521ab4 camera=2:f13fac7f14521ab4 shadow=2:f13fac7f14521ab4 indirect=2:f13fac7f14521ab4 +geom 2: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:34dcfd9ad33939f4 camera=2:34dcfd9ad33939f4 shadow=2:34dcfd9ad33939f4 indirect=2:34dcfd9ad33939f4 +geom 3: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:0896fdd98cec0018 camera=2:0896fdd98cec0018 shadow=2:0896fdd98cec0018 indirect=2:0896fdd98cec0018 +provenance light /World/dome: LightOrigin { index: 0, geoms: 4..4 } +provenance geometry 0..4: /World/scatter +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 11528131988013333682, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 0 }), placements: 0, shared: true, displaced: false } +provenance mesh slot 1: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 14255589192073905558, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 0 }), placements: 0, shared: true, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/World/cam"), cameras: ["/World/cam"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [("objectId", 1)], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/World/cam"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/instancer_primvar_usda-6d97a3b7a8db1d2d-1.image b/crates/crust-core/tests/data/import_baselines/instancer_primvar_usda-6d97a3b7a8db1d2d-1.image new file mode 100644 index 000000000..021b4dafa --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/instancer_primvar_usda-6d97a3b7a8db1d2d-1.image @@ -0,0 +1 @@ +48x36 16spp clamp-off ada8400952cd475b diff --git a/crates/crust-core/tests/data/import_baselines/instancer_proto_root_reset_child_usda-327d10b931ee4635-1.digest b/crates/crust-core/tests/data/import_baselines/instancer_proto_root_reset_child_usda-327d10b931ee4635-1.digest new file mode 100644 index 000000000..bdde6b57b --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/instancer_proto_root_reset_child_usda-327d10b931ee4635-1.digest @@ -0,0 +1,21 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: None +camera: Camera { origin: Vec3A(15.0, 3.0, 3.0), lower_left_corner: Vec3A(4.8863316, -0.044797063, 4.174048), horizontal: Vec3A(1.2295314, 0.0, -6.147657), vertical: Vec3A(-0.44830504, 3.4967792, -0.08966101), u: Vec3A(0.19611613, 0.0, -0.9805807), v: Vec3A(-0.1271232, 0.991561, -0.02542464), lens_radius: 0.05, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: None +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 640, height: 360, region: PixelRect { x0: 0, y0: 0, x1: 640, y1: 360 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: None, depth_of_field: true, motion_blur: false, layer_stack: ["$DIR/instancer_proto_root_reset_child.usda"], invisible_overrides: Some(0) } +layer: $DIR/instancer_proto_root_reset_child.usda +warning: Warning { code: CameraMissing, kind: Skipped, count: 1, prims: [], message: "USD stage has no UsdGeomCamera — falling back to world::get_settings camera" } +lights: 0 +volumes: 0 +world: 3 geometries, PrimitiveBreakdown { triangles: 0, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 3 } top level, PrimitiveBreakdown { triangles: 0, spheres: 3, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 3 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:d23ac7aa026facc8 camera=1:d23ac7aa026facc8 shadow=1:d23ac7aa026facc8 indirect=1:d23ac7aa026facc8 +geom 1: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:a1a131ee378392f8 camera=1:a1a131ee378392f8 shadow=1:a1a131ee378392f8 indirect=1:a1a131ee378392f8 +geom 2: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:9c525b0d1818d4a8 camera=1:9c525b0d1818d4a8 shadow=1:9c525b0d1818d4a8 indirect=1:9c525b0d1818d4a8 +provenance geometry 0..3: /World/Scatter +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: None, cameras: [], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: None, offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/instancer_proto_root_reset_child_usda-327d10b931ee4635-1.image b/crates/crust-core/tests/data/import_baselines/instancer_proto_root_reset_child_usda-327d10b931ee4635-1.image new file mode 100644 index 000000000..c734c5b1d --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/instancer_proto_root_reset_child_usda-327d10b931ee4635-1.image @@ -0,0 +1 @@ +640x360 16spp clamp-off a04a09c0d4b5e325 diff --git a/crates/crust-core/tests/data/import_baselines/instancer_proto_root_xform_usda-824b2432496695f2-1.digest b/crates/crust-core/tests/data/import_baselines/instancer_proto_root_xform_usda-824b2432496695f2-1.digest new file mode 100644 index 000000000..64af82cac --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/instancer_proto_root_xform_usda-824b2432496695f2-1.digest @@ -0,0 +1,20 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: None +camera: Camera { origin: Vec3A(15.0, 3.0, 3.0), lower_left_corner: Vec3A(4.8863316, -0.044797063, 4.174048), horizontal: Vec3A(1.2295314, 0.0, -6.147657), vertical: Vec3A(-0.44830504, 3.4967792, -0.08966101), u: Vec3A(0.19611613, 0.0, -0.9805807), v: Vec3A(-0.1271232, 0.991561, -0.02542464), lens_radius: 0.05, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: None +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 640, height: 360, region: PixelRect { x0: 0, y0: 0, x1: 640, y1: 360 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: None, depth_of_field: true, motion_blur: false, layer_stack: ["$DIR/instancer_proto_root_xform.usda"], invisible_overrides: Some(0) } +layer: $DIR/instancer_proto_root_xform.usda +warning: Warning { code: CameraMissing, kind: Skipped, count: 1, prims: [], message: "USD stage has no UsdGeomCamera — falling back to world::get_settings camera" } +lights: 0 +volumes: 0 +world: 2 geometries, PrimitiveBreakdown { triangles: 0, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 2 } top level, PrimitiveBreakdown { triangles: 0, spheres: 1, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 2 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.2599211 motion [] pieces all=1:c639212ee48875b8 camera=1:c639212ee48875b8 shadow=1:c639212ee48875b8 indirect=1:c639212ee48875b8 +geom 1: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.2599211 motion [] pieces all=1:850833f17b12a908 camera=1:850833f17b12a908 shadow=1:850833f17b12a908 indirect=1:850833f17b12a908 +provenance geometry 0..2: /World/Scatter +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: None, cameras: [], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: None, offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/instancer_proto_root_xform_usda-824b2432496695f2-1.image b/crates/crust-core/tests/data/import_baselines/instancer_proto_root_xform_usda-824b2432496695f2-1.image new file mode 100644 index 000000000..c734c5b1d --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/instancer_proto_root_xform_usda-824b2432496695f2-1.image @@ -0,0 +1 @@ +640x360 16spp clamp-off a04a09c0d4b5e325 diff --git a/crates/crust-core/tests/data/import_baselines/instancer_usda-24b4955bd587b7fc-1.digest b/crates/crust-core/tests/data/import_baselines/instancer_usda-24b4955bd587b7fc-1.digest new file mode 100644 index 000000000..69fc132cf --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/instancer_usda-24b4955bd587b7fc-1.digest @@ -0,0 +1,27 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/W/Cam") +camera: Camera { origin: Vec3A(0.0, 0.0, 0.0), lower_left_corner: Vec3A(-2.0955, -1.1787187, -10.0), horizontal: Vec3A(4.191, 0.0, 0.0), vertical: Vec3A(0.0, 2.3574374, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: Some("/Render/settings") +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 640, height: 360, region: PixelRect { x0: 0, y0: 0, x1: 640, y1: 360 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 50.0, aperture: [20.955, 11.787188], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 10.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/instancer.usda"], invisible_overrides: Some(0) } +layer: $DIR/instancer.usda +lights: 0 +volumes: 0 +world: 6 geometries, PrimitiveBreakdown { triangles: 0, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 6 } top level, PrimitiveBreakdown { triangles: 24, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 6 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=12:7ec094e756691da5 camera=12:7ec094e756691da5 shadow=12:7ec094e756691da5 indirect=12:7ec094e756691da5 +geom 1: material #1 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=12:beee3a8e41a91045 camera=12:beee3a8e41a91045 shadow=12:beee3a8e41a91045 indirect=12:beee3a8e41a91045 +geom 2: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=12:93c29f7becbb926d camera=12:93c29f7becbb926d shadow=12:93c29f7becbb926d indirect=12:93c29f7becbb926d +geom 3: material #1 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=12:10969363fd2b6f51 camera=12:10969363fd2b6f51 shadow=12:10969363fd2b6f51 indirect=12:10969363fd2b6f51 +geom 4: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=12:5b3e0087dda92511 camera=12:5b3e0087dda92511 shadow=12:5b3e0087dda92511 indirect=12:5b3e0087dda92511 +geom 5: material #1 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=12:a9208ad63c62a98d camera=12:a9208ad63c62a98d shadow=12:a9208ad63c62a98d indirect=12:a9208ad63c62a98d +provenance material /W/Looks/Blue: MaterialOrigin { slots: [0, 2, 4], displaced: false } +provenance material /W/Looks/Red: MaterialOrigin { slots: [1, 3, 5], displaced: false } +provenance geometry 0..6: /W/Scatter +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 14289806633734265804, n_points: 8, n_indices: 24, n_uvs: None, smooth: true, material: 0 }), placements: 0, shared: true, displaced: false } +provenance mesh slot 1: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 14289806633734265804, n_points: 8, n_indices: 24, n_uvs: None, smooth: true, material: 1 }), placements: 0, shared: true, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: Some(ScreenKey([0, 0, 0, 1153360542, 0, 0, 0, 3212836864, 0, 3193345094, 1065353216, 0, 3193345094, 0, 3212836864, 3186714319, 0, 1065353216, 3186714319, 0, 0, 3212836864, 1073741824, 3])), domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/W/Cam"), cameras: ["/W/Cam"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/W/Cam"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/instancer_usda-24b4955bd587b7fc-1.image b/crates/crust-core/tests/data/import_baselines/instancer_usda-24b4955bd587b7fc-1.image new file mode 100644 index 000000000..c734c5b1d --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/instancer_usda-24b4955bd587b7fc-1.image @@ -0,0 +1 @@ +640x360 16spp clamp-off a04a09c0d4b5e325 diff --git a/crates/crust-core/tests/data/import_baselines/instancer_usda-b5460e79ed990f95-1.digest b/crates/crust-core/tests/data/import_baselines/instancer_usda-b5460e79ed990f95-1.digest new file mode 100644 index 000000000..4c56169ea --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/instancer_usda-b5460e79ed990f95-1.digest @@ -0,0 +1,17 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/World/cam") +camera: Camera { origin: Vec3A(0.0, 0.0, 0.0), lower_left_corner: Vec3A(-2.7183647, -1.5290802, -10.0), horizontal: Vec3A(5.4367294, 0.0, 0.0), vertical: Vec3A(0.0, 3.0581603, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: None +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 640, height: 360, region: PixelRect { x0: 0, y0: 0, x1: 640, y1: 360 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 50.0, aperture: [20.955, 15.2908], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 10.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/instancer.usda"], invisible_overrides: Some(0) } +layer: $DIR/instancer.usda +warning: Warning { code: InstancingNoPrototypes, kind: Skipped, count: 1, prims: ["/World/scatter"], message: "PointInstancer at /World/scatter has no `prototypes` targets — skipped" } +lights: 0 +volumes: 0 +world: 0 geometries, PrimitiveBreakdown { triangles: 0, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 0, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/World/cam"), cameras: ["/World/cam"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/World/cam"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/instancer_usda-b5460e79ed990f95-1.image b/crates/crust-core/tests/data/import_baselines/instancer_usda-b5460e79ed990f95-1.image new file mode 100644 index 000000000..c734c5b1d --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/instancer_usda-b5460e79ed990f95-1.image @@ -0,0 +1 @@ +640x360 16spp clamp-off a04a09c0d4b5e325 diff --git a/crates/crust-core/tests/data/import_baselines/instancer_usda-c51fcdc4de98cc87-1.digest b/crates/crust-core/tests/data/import_baselines/instancer_usda-c51fcdc4de98cc87-1.digest new file mode 100644 index 000000000..0e42a41aa --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/instancer_usda-c51fcdc4de98cc87-1.digest @@ -0,0 +1,21 @@ +time: Some(5.0) +working space: Linear Rec.709 (sRGB) +camera path: Some("/World/cam") +camera: Camera { origin: Vec3A(0.0, 0.0, 8.0), lower_left_corner: Vec3A(-2.7183647, -1.5290802, -2.0), horizontal: Vec3A(5.4367294, 0.0, 0.0), vertical: Vec3A(0.0, 3.0581603, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: Some("/Render/settings") +settings: RenderSettings { samples_per_pixel: 16, max_depth: 2, width: 64, height: 36, region: PixelRect { x0: 0, y0: 0, x1: 64, y1: 36 }, min_samples_per_pixel: 16, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 5, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 50.0, aperture: [20.955, 15.2908], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 10.0 }), depth_of_field: false, motion_blur: true, layer_stack: ["$DIR/instancer.usda"], invisible_overrides: Some(0) } +layer: $DIR/instancer.usda +lights: 0 +volumes: 0 +world: 3 geometries, PrimitiveBreakdown { triangles: 0, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 3 } top level, PrimitiveBreakdown { triangles: 0, spheres: 1, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 3 } unique, motion true +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [Translation(Vec3A(1.0, 0.0, 0.0))] pieces all=1:da7e4116d4399824 camera=1:da7e4116d4399824 shadow=1:da7e4116d4399824 indirect=1:da7e4116d4399824 +geom 1: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [Translation(Vec3A(1.0, 0.0, 0.0))] pieces all=1:f548d1d419575bc7 camera=1:f548d1d419575bc7 shadow=1:f548d1d419575bc7 indirect=1:f548d1d419575bc7 +geom 2: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [Translation(Vec3A(1.0, 0.0, 0.0))] pieces all=1:fa370466341ccf24 camera=1:fa370466341ccf24 shadow=1:fa370466341ccf24 indirect=1:fa370466341ccf24 +provenance material /World/Glow: MaterialOrigin { slots: [0, 1, 2], displaced: false } +provenance geometry 0..3: /World/Scatter +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: Some(5.0), camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/World/cam"), cameras: ["/World/cam"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/World/cam"), offsets: [0, 4607182418800017408], interval: Some([4617315517961601024, 4618441417868443648]), query: true, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/instancer_usda-c51fcdc4de98cc87-1.image b/crates/crust-core/tests/data/import_baselines/instancer_usda-c51fcdc4de98cc87-1.image new file mode 100644 index 000000000..ac69a0ea7 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/instancer_usda-c51fcdc4de98cc87-1.image @@ -0,0 +1 @@ +64x36 16spp clamp-off d91f257cb13c42d9 diff --git a/crates/crust-core/tests/data/import_baselines/instances_usda-0e86a3f92c8bc5d3-1.digest b/crates/crust-core/tests/data/import_baselines/instances_usda-0e86a3f92c8bc5d3-1.digest new file mode 100644 index 000000000..d0e7a2361 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/instances_usda-0e86a3f92c8bc5d3-1.digest @@ -0,0 +1,22 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: None +camera: Camera { origin: Vec3A(15.0, 3.0, 3.0), lower_left_corner: Vec3A(4.8863316, -0.044797063, 4.174048), horizontal: Vec3A(1.2295314, 0.0, -6.147657), vertical: Vec3A(-0.44830504, 3.4967792, -0.08966101), u: Vec3A(0.19611613, 0.0, -0.9805807), v: Vec3A(-0.1271232, 0.991561, -0.02542464), lens_radius: 0.05, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: Some("/Render/settings") +settings: RenderSettings { samples_per_pixel: 3, max_depth: 32, width: 8, height: 8, region: PixelRect { x0: 0, y0: 0, x1: 8, y1: 8 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: Some(PassSummary { path: "/Render/Passes/scatter", holdouts: 1, camera_hidden: 0 }) +source: Source { lens: None, depth_of_field: true, motion_blur: false, layer_stack: ["$DIR/instances.usda"], invisible_overrides: Some(0) } +layer: $DIR/instances.usda +warning: Warning { code: CameraMissing, kind: Skipped, count: 1, prims: [], message: "USD stage has no UsdGeomCamera — falling back to world::get_settings camera" } +lights: 0 +volumes: 0 +world: 3 geometries, PrimitiveBreakdown { triangles: 0, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 3 } top level, PrimitiveBreakdown { triangles: 0, spheres: 2, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 3 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout true transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:468da3d80ce34d98 camera=1:468da3d80ce34d98 shadow=1:468da3d80ce34d98 indirect=1:468da3d80ce34d98 +geom 1: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout true transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:d51ecb642f0c8e15 camera=1:d51ecb642f0c8e15 shadow=1:d51ecb642f0c8e15 indirect=1:d51ecb642f0c8e15 +geom 2: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:d23ac7aa026facc8 camera=1:d23ac7aa026facc8 shadow=1:d23ac7aa026facc8 indirect=1:d23ac7aa026facc8 +provenance geometry 0..2: /World/Scatter +provenance geometry 2..3: /World/Rock +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: Some("/Render/Passes/scatter"), keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: None, cameras: [], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: None, offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/instances_usda-0e86a3f92c8bc5d3-1.image b/crates/crust-core/tests/data/import_baselines/instances_usda-0e86a3f92c8bc5d3-1.image new file mode 100644 index 000000000..8aad9360c --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/instances_usda-0e86a3f92c8bc5d3-1.image @@ -0,0 +1 @@ +8x8 16spp clamp-off 9fa9e040e0eedf25 diff --git a/crates/crust-core/tests/data/import_baselines/instances_usda-6d1637bb6898476d-1.digest b/crates/crust-core/tests/data/import_baselines/instances_usda-6d1637bb6898476d-1.digest new file mode 100644 index 000000000..d0e7a2361 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/instances_usda-6d1637bb6898476d-1.digest @@ -0,0 +1,22 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: None +camera: Camera { origin: Vec3A(15.0, 3.0, 3.0), lower_left_corner: Vec3A(4.8863316, -0.044797063, 4.174048), horizontal: Vec3A(1.2295314, 0.0, -6.147657), vertical: Vec3A(-0.44830504, 3.4967792, -0.08966101), u: Vec3A(0.19611613, 0.0, -0.9805807), v: Vec3A(-0.1271232, 0.991561, -0.02542464), lens_radius: 0.05, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: Some("/Render/settings") +settings: RenderSettings { samples_per_pixel: 3, max_depth: 32, width: 8, height: 8, region: PixelRect { x0: 0, y0: 0, x1: 8, y1: 8 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: Some(PassSummary { path: "/Render/Passes/scatter", holdouts: 1, camera_hidden: 0 }) +source: Source { lens: None, depth_of_field: true, motion_blur: false, layer_stack: ["$DIR/instances.usda"], invisible_overrides: Some(0) } +layer: $DIR/instances.usda +warning: Warning { code: CameraMissing, kind: Skipped, count: 1, prims: [], message: "USD stage has no UsdGeomCamera — falling back to world::get_settings camera" } +lights: 0 +volumes: 0 +world: 3 geometries, PrimitiveBreakdown { triangles: 0, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 3 } top level, PrimitiveBreakdown { triangles: 0, spheres: 2, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 3 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout true transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:468da3d80ce34d98 camera=1:468da3d80ce34d98 shadow=1:468da3d80ce34d98 indirect=1:468da3d80ce34d98 +geom 1: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout true transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:d51ecb642f0c8e15 camera=1:d51ecb642f0c8e15 shadow=1:d51ecb642f0c8e15 indirect=1:d51ecb642f0c8e15 +geom 2: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:d23ac7aa026facc8 camera=1:d23ac7aa026facc8 shadow=1:d23ac7aa026facc8 indirect=1:d23ac7aa026facc8 +provenance geometry 0..2: /World/Scatter +provenance geometry 2..3: /World/Rock +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: Some("/Render/Passes/scatter"), keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: None, cameras: [], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: None, offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/instances_usda-6d1637bb6898476d-1.image b/crates/crust-core/tests/data/import_baselines/instances_usda-6d1637bb6898476d-1.image new file mode 100644 index 000000000..8aad9360c --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/instances_usda-6d1637bb6898476d-1.image @@ -0,0 +1 @@ +8x8 16spp clamp-off 9fa9e040e0eedf25 diff --git a/crates/crust-core/tests/data/import_baselines/instances_usda-cff29432af1ee61b-1.digest b/crates/crust-core/tests/data/import_baselines/instances_usda-cff29432af1ee61b-1.digest new file mode 100644 index 000000000..8246ad853 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/instances_usda-cff29432af1ee61b-1.digest @@ -0,0 +1,23 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: None +camera: Camera { origin: Vec3A(15.0, 3.0, 3.0), lower_left_corner: Vec3A(4.8863316, -0.044797063, 4.174048), horizontal: Vec3A(1.2295314, 0.0, -6.147657), vertical: Vec3A(-0.44830504, 3.4967792, -0.08966101), u: Vec3A(0.19611613, 0.0, -0.9805807), v: Vec3A(-0.1271232, 0.991561, -0.02542464), lens_radius: 0.05, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: Some("/Render/settings") +settings: RenderSettings { samples_per_pixel: 3, max_depth: 32, width: 8, height: 8, region: PixelRect { x0: 0, y0: 0, x1: 8, y1: 8 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: Some(PassSummary { path: "/Render/Passes/inside", holdouts: 1, camera_hidden: 0 }) +source: Source { lens: None, depth_of_field: true, motion_blur: false, layer_stack: ["$DIR/instances.usda"], invisible_overrides: Some(0) } +layer: $DIR/instances.usda +warning: Warning { code: RenderPassTargetInInstance, kind: Approximated, count: 1, prims: ["/Render/Passes/inside"], message: "/Render/Passes/inside: collection:matte targets /World/Rock/Body, inside an instance — membership is judged on the instance, so the target cannot be told apart from its siblings" } +warning: Warning { code: CameraMissing, kind: Skipped, count: 1, prims: [], message: "USD stage has no UsdGeomCamera — falling back to world::get_settings camera" } +lights: 0 +volumes: 0 +world: 3 geometries, PrimitiveBreakdown { triangles: 0, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 3 } top level, PrimitiveBreakdown { triangles: 0, spheres: 2, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 3 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:468da3d80ce34d98 camera=1:468da3d80ce34d98 shadow=1:468da3d80ce34d98 indirect=1:468da3d80ce34d98 +geom 1: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:d51ecb642f0c8e15 camera=1:d51ecb642f0c8e15 shadow=1:d51ecb642f0c8e15 indirect=1:d51ecb642f0c8e15 +geom 2: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout true transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:d23ac7aa026facc8 camera=1:d23ac7aa026facc8 shadow=1:d23ac7aa026facc8 indirect=1:d23ac7aa026facc8 +provenance geometry 0..2: /World/Scatter +provenance geometry 2..3: /World/Rock +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: Some("/Render/Passes/inside"), keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: None, cameras: [], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: None, offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/instances_usda-cff29432af1ee61b-1.image b/crates/crust-core/tests/data/import_baselines/instances_usda-cff29432af1ee61b-1.image new file mode 100644 index 000000000..8aad9360c --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/instances_usda-cff29432af1ee61b-1.image @@ -0,0 +1 @@ +8x8 16spp clamp-off 9fa9e040e0eedf25 diff --git a/crates/crust-core/tests/data/import_baselines/instances_usda-dd5f31a7c4515489-1.digest b/crates/crust-core/tests/data/import_baselines/instances_usda-dd5f31a7c4515489-1.digest new file mode 100644 index 000000000..8246ad853 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/instances_usda-dd5f31a7c4515489-1.digest @@ -0,0 +1,23 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: None +camera: Camera { origin: Vec3A(15.0, 3.0, 3.0), lower_left_corner: Vec3A(4.8863316, -0.044797063, 4.174048), horizontal: Vec3A(1.2295314, 0.0, -6.147657), vertical: Vec3A(-0.44830504, 3.4967792, -0.08966101), u: Vec3A(0.19611613, 0.0, -0.9805807), v: Vec3A(-0.1271232, 0.991561, -0.02542464), lens_radius: 0.05, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: Some("/Render/settings") +settings: RenderSettings { samples_per_pixel: 3, max_depth: 32, width: 8, height: 8, region: PixelRect { x0: 0, y0: 0, x1: 8, y1: 8 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: Some(PassSummary { path: "/Render/Passes/inside", holdouts: 1, camera_hidden: 0 }) +source: Source { lens: None, depth_of_field: true, motion_blur: false, layer_stack: ["$DIR/instances.usda"], invisible_overrides: Some(0) } +layer: $DIR/instances.usda +warning: Warning { code: RenderPassTargetInInstance, kind: Approximated, count: 1, prims: ["/Render/Passes/inside"], message: "/Render/Passes/inside: collection:matte targets /World/Rock/Body, inside an instance — membership is judged on the instance, so the target cannot be told apart from its siblings" } +warning: Warning { code: CameraMissing, kind: Skipped, count: 1, prims: [], message: "USD stage has no UsdGeomCamera — falling back to world::get_settings camera" } +lights: 0 +volumes: 0 +world: 3 geometries, PrimitiveBreakdown { triangles: 0, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 3 } top level, PrimitiveBreakdown { triangles: 0, spheres: 2, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 3 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:468da3d80ce34d98 camera=1:468da3d80ce34d98 shadow=1:468da3d80ce34d98 indirect=1:468da3d80ce34d98 +geom 1: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:d51ecb642f0c8e15 camera=1:d51ecb642f0c8e15 shadow=1:d51ecb642f0c8e15 indirect=1:d51ecb642f0c8e15 +geom 2: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout true transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:d23ac7aa026facc8 camera=1:d23ac7aa026facc8 shadow=1:d23ac7aa026facc8 indirect=1:d23ac7aa026facc8 +provenance geometry 0..2: /World/Scatter +provenance geometry 2..3: /World/Rock +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: Some("/Render/Passes/inside"), keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: None, cameras: [], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: None, offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/instances_usda-dd5f31a7c4515489-1.image b/crates/crust-core/tests/data/import_baselines/instances_usda-dd5f31a7c4515489-1.image new file mode 100644 index 000000000..8aad9360c --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/instances_usda-dd5f31a7c4515489-1.image @@ -0,0 +1 @@ +8x8 16spp clamp-off 9fa9e040e0eedf25 diff --git a/crates/crust-core/tests/data/import_baselines/instancing_usda-046f52337fabb1a4-1.digest b/crates/crust-core/tests/data/import_baselines/instancing_usda-046f52337fabb1a4-1.digest new file mode 100644 index 000000000..f32db1622 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/instancing_usda-046f52337fabb1a4-1.digest @@ -0,0 +1,48 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/World/Cam") +camera: Camera { origin: Vec3A(0.0, 3.2, 13.0), lower_left_corner: Vec3A(-5.6632595, -1.346313, 3.5406666), horizontal: Vec3A(11.326519, -0.0, 0.0), vertical: Vec3A(0.0, 6.3091636, -0.8866952), u: Vec3A(1.0, -0.0, 0.0), v: Vec3A(0.0, 0.9902681, -0.13917312), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: Some("/Render/settings") +settings: RenderSettings { samples_per_pixel: 48, max_depth: 8, width: 480, height: 270, region: PixelRect { x0: 0, y0: 0, x1: 480, y1: 270 }, min_samples_per_pixel: 16, variance_threshold: 0.02, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 24.0, aperture: [20.955, 15.2908], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 10.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/instancing.usda"], invisible_overrides: Some(0) } +layer: $DIR/instancing.usda +warning: Warning { code: AssetUnsupportedByHost, kind: Skipped, count: 1, prims: [], message: "No asset loader: environment map $DIR/sky_gradient.exr ignored — the dome falls back to its uniform colour. Use Scene::from_usd_with_assets to supply one." } +lights: 2 +light 0: area name Some("/World/Key") lpe None pmf 0.5 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 1: dome name Some("/World/Sky") lpe None pmf 0.5 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 13 geometries, PrimitiveBreakdown { triangles: 4, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 11 } top level, PrimitiveBreakdown { triangles: 36, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 11 } unique, motion false +geom 0: material #0 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:32b8fc7fab01f734 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=2:32b8fc7fab01f734 +geom 1: material #1 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:58d360c7905fa0c5 camera=2:58d360c7905fa0c5 shadow=2:58d360c7905fa0c5 indirect=2:58d360c7905fa0c5 +geom 2: material #2 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.2599211 motion [] pieces all=8:cb8213f19e1889e5 camera=8:cb8213f19e1889e5 shadow=8:cb8213f19e1889e5 indirect=8:cb8213f19e1889e5 +geom 3: material #2 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0079368 motion [] pieces all=8:9f690ca55fcd34b1 camera=8:9f690ca55fcd34b1 shadow=8:9f690ca55fcd34b1 indirect=8:9f690ca55fcd34b1 +geom 4: material #2 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.6378974 motion [] pieces all=8:bf00f68921a1ff6d camera=8:bf00f68921a1ff6d shadow=8:bf00f68921a1ff6d indirect=8:bf00f68921a1ff6d +geom 5: material #2 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.1370313 motion [] pieces all=8:d86fbb7901e66cf5 camera=8:d86fbb7901e66cf5 shadow=8:d86fbb7901e66cf5 indirect=8:d86fbb7901e66cf5 +geom 6: material #2 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.2962416 motion [] pieces all=8:100fb1034ea0bf45 camera=8:100fb1034ea0bf45 shadow=8:100fb1034ea0bf45 indirect=8:100fb1034ea0bf45 +geom 7: material #2 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.7958115 motion [] pieces all=12:01961e1714f11539 camera=12:01961e1714f11539 shadow=12:01961e1714f11539 indirect=12:01961e1714f11539 +geom 8: material #3 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.7958115 motion [] pieces all=12:94d0d184098e3ffd camera=12:94d0d184098e3ffd shadow=12:94d0d184098e3ffd indirect=12:94d0d184098e3ffd +geom 9: material #2 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=12:d4ab18518f82edfd camera=12:d4ab18518f82edfd shadow=12:d4ab18518f82edfd indirect=12:d4ab18518f82edfd +geom 10: material #3 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=12:83f43ac124235a31 camera=12:83f43ac124235a31 shadow=12:83f43ac124235a31 indirect=12:83f43ac124235a31 +geom 11: material #2 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=12:295cfa9554179a8d camera=12:295cfa9554179a8d shadow=12:295cfa9554179a8d indirect=12:295cfa9554179a8d +geom 12: material #3 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=12:3ea47e28253b632d camera=12:3ea47e28253b632d shadow=12:3ea47e28253b632d indirect=12:3ea47e28253b632d +provenance material /World/Looks/Copper: MaterialOrigin { slots: [8, 10, 12], displaced: false } +provenance material /World/Looks/Emerald: MaterialOrigin { slots: [2, 3, 4, 5, 6, 7, 9, 11], displaced: false } +provenance material /World/Looks/Grey: MaterialOrigin { slots: [1], displaced: false } +provenance light /World/Key: LightOrigin { index: 0, geoms: 0..1 } +provenance light /World/Sky: LightOrigin { index: 1, geoms: 13..13 } +provenance geometry 0..1: /World/Key +provenance geometry 1..2: /World/Floor +provenance geometry 2..7: /World/Scatter +provenance geometry 7..9: /World/TowerC +provenance geometry 9..11: /World/TowerB +provenance geometry 11..13: /World/TowerA +provenance mesh: MeshOrigin { geom_id: 1, slot: 0, baked: true, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 6334356113930313994, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 1: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 6822106956337694752, n_points: 6, n_indices: 24, n_uvs: None, smooth: false, material: 1 }), placements: 0, shared: true, displaced: false } +provenance mesh slot 2: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 2005039782605831059, n_points: 8, n_indices: 24, n_uvs: None, smooth: false, material: 1 }), placements: 0, shared: true, displaced: false } +provenance mesh slot 3: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 2103454763208511752, n_points: 8, n_indices: 24, n_uvs: None, smooth: false, material: 2 }), placements: 0, shared: true, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/World/Cam"), cameras: ["/World/Cam"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/World/Cam"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/instancing_usda-046f52337fabb1a4-1.image b/crates/crust-core/tests/data/import_baselines/instancing_usda-046f52337fabb1a4-1.image new file mode 100644 index 000000000..04f5b4e66 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/instancing_usda-046f52337fabb1a4-1.image @@ -0,0 +1 @@ +480x270 16spp clamp-off bc733f3dea963f51 diff --git a/crates/crust-core/tests/data/import_baselines/instancing_usda-1b870942bf28e01d-1.digest b/crates/crust-core/tests/data/import_baselines/instancing_usda-1b870942bf28e01d-1.digest new file mode 100644 index 000000000..f32db1622 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/instancing_usda-1b870942bf28e01d-1.digest @@ -0,0 +1,48 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/World/Cam") +camera: Camera { origin: Vec3A(0.0, 3.2, 13.0), lower_left_corner: Vec3A(-5.6632595, -1.346313, 3.5406666), horizontal: Vec3A(11.326519, -0.0, 0.0), vertical: Vec3A(0.0, 6.3091636, -0.8866952), u: Vec3A(1.0, -0.0, 0.0), v: Vec3A(0.0, 0.9902681, -0.13917312), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: Some("/Render/settings") +settings: RenderSettings { samples_per_pixel: 48, max_depth: 8, width: 480, height: 270, region: PixelRect { x0: 0, y0: 0, x1: 480, y1: 270 }, min_samples_per_pixel: 16, variance_threshold: 0.02, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 24.0, aperture: [20.955, 15.2908], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 10.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/instancing.usda"], invisible_overrides: Some(0) } +layer: $DIR/instancing.usda +warning: Warning { code: AssetUnsupportedByHost, kind: Skipped, count: 1, prims: [], message: "No asset loader: environment map $DIR/sky_gradient.exr ignored — the dome falls back to its uniform colour. Use Scene::from_usd_with_assets to supply one." } +lights: 2 +light 0: area name Some("/World/Key") lpe None pmf 0.5 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 1: dome name Some("/World/Sky") lpe None pmf 0.5 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 13 geometries, PrimitiveBreakdown { triangles: 4, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 11 } top level, PrimitiveBreakdown { triangles: 36, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 11 } unique, motion false +geom 0: material #0 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:32b8fc7fab01f734 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=2:32b8fc7fab01f734 +geom 1: material #1 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:58d360c7905fa0c5 camera=2:58d360c7905fa0c5 shadow=2:58d360c7905fa0c5 indirect=2:58d360c7905fa0c5 +geom 2: material #2 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.2599211 motion [] pieces all=8:cb8213f19e1889e5 camera=8:cb8213f19e1889e5 shadow=8:cb8213f19e1889e5 indirect=8:cb8213f19e1889e5 +geom 3: material #2 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0079368 motion [] pieces all=8:9f690ca55fcd34b1 camera=8:9f690ca55fcd34b1 shadow=8:9f690ca55fcd34b1 indirect=8:9f690ca55fcd34b1 +geom 4: material #2 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.6378974 motion [] pieces all=8:bf00f68921a1ff6d camera=8:bf00f68921a1ff6d shadow=8:bf00f68921a1ff6d indirect=8:bf00f68921a1ff6d +geom 5: material #2 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.1370313 motion [] pieces all=8:d86fbb7901e66cf5 camera=8:d86fbb7901e66cf5 shadow=8:d86fbb7901e66cf5 indirect=8:d86fbb7901e66cf5 +geom 6: material #2 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.2962416 motion [] pieces all=8:100fb1034ea0bf45 camera=8:100fb1034ea0bf45 shadow=8:100fb1034ea0bf45 indirect=8:100fb1034ea0bf45 +geom 7: material #2 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.7958115 motion [] pieces all=12:01961e1714f11539 camera=12:01961e1714f11539 shadow=12:01961e1714f11539 indirect=12:01961e1714f11539 +geom 8: material #3 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.7958115 motion [] pieces all=12:94d0d184098e3ffd camera=12:94d0d184098e3ffd shadow=12:94d0d184098e3ffd indirect=12:94d0d184098e3ffd +geom 9: material #2 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=12:d4ab18518f82edfd camera=12:d4ab18518f82edfd shadow=12:d4ab18518f82edfd indirect=12:d4ab18518f82edfd +geom 10: material #3 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=12:83f43ac124235a31 camera=12:83f43ac124235a31 shadow=12:83f43ac124235a31 indirect=12:83f43ac124235a31 +geom 11: material #2 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=12:295cfa9554179a8d camera=12:295cfa9554179a8d shadow=12:295cfa9554179a8d indirect=12:295cfa9554179a8d +geom 12: material #3 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=12:3ea47e28253b632d camera=12:3ea47e28253b632d shadow=12:3ea47e28253b632d indirect=12:3ea47e28253b632d +provenance material /World/Looks/Copper: MaterialOrigin { slots: [8, 10, 12], displaced: false } +provenance material /World/Looks/Emerald: MaterialOrigin { slots: [2, 3, 4, 5, 6, 7, 9, 11], displaced: false } +provenance material /World/Looks/Grey: MaterialOrigin { slots: [1], displaced: false } +provenance light /World/Key: LightOrigin { index: 0, geoms: 0..1 } +provenance light /World/Sky: LightOrigin { index: 1, geoms: 13..13 } +provenance geometry 0..1: /World/Key +provenance geometry 1..2: /World/Floor +provenance geometry 2..7: /World/Scatter +provenance geometry 7..9: /World/TowerC +provenance geometry 9..11: /World/TowerB +provenance geometry 11..13: /World/TowerA +provenance mesh: MeshOrigin { geom_id: 1, slot: 0, baked: true, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 6334356113930313994, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 1: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 6822106956337694752, n_points: 6, n_indices: 24, n_uvs: None, smooth: false, material: 1 }), placements: 0, shared: true, displaced: false } +provenance mesh slot 2: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 2005039782605831059, n_points: 8, n_indices: 24, n_uvs: None, smooth: false, material: 1 }), placements: 0, shared: true, displaced: false } +provenance mesh slot 3: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 2103454763208511752, n_points: 8, n_indices: 24, n_uvs: None, smooth: false, material: 2 }), placements: 0, shared: true, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/World/Cam"), cameras: ["/World/Cam"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/World/Cam"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/instancing_usda-1b870942bf28e01d-1.image b/crates/crust-core/tests/data/import_baselines/instancing_usda-1b870942bf28e01d-1.image new file mode 100644 index 000000000..04f5b4e66 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/instancing_usda-1b870942bf28e01d-1.image @@ -0,0 +1 @@ +480x270 16spp clamp-off bc733f3dea963f51 diff --git a/crates/crust-core/tests/data/import_baselines/instancing_usda-37ed91a3e61701fe-1.digest b/crates/crust-core/tests/data/import_baselines/instancing_usda-37ed91a3e61701fe-1.digest new file mode 100644 index 000000000..f32db1622 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/instancing_usda-37ed91a3e61701fe-1.digest @@ -0,0 +1,48 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/World/Cam") +camera: Camera { origin: Vec3A(0.0, 3.2, 13.0), lower_left_corner: Vec3A(-5.6632595, -1.346313, 3.5406666), horizontal: Vec3A(11.326519, -0.0, 0.0), vertical: Vec3A(0.0, 6.3091636, -0.8866952), u: Vec3A(1.0, -0.0, 0.0), v: Vec3A(0.0, 0.9902681, -0.13917312), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: Some("/Render/settings") +settings: RenderSettings { samples_per_pixel: 48, max_depth: 8, width: 480, height: 270, region: PixelRect { x0: 0, y0: 0, x1: 480, y1: 270 }, min_samples_per_pixel: 16, variance_threshold: 0.02, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 24.0, aperture: [20.955, 15.2908], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 10.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/instancing.usda"], invisible_overrides: Some(0) } +layer: $DIR/instancing.usda +warning: Warning { code: AssetUnsupportedByHost, kind: Skipped, count: 1, prims: [], message: "No asset loader: environment map $DIR/sky_gradient.exr ignored — the dome falls back to its uniform colour. Use Scene::from_usd_with_assets to supply one." } +lights: 2 +light 0: area name Some("/World/Key") lpe None pmf 0.5 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 1: dome name Some("/World/Sky") lpe None pmf 0.5 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 13 geometries, PrimitiveBreakdown { triangles: 4, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 11 } top level, PrimitiveBreakdown { triangles: 36, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 11 } unique, motion false +geom 0: material #0 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:32b8fc7fab01f734 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=2:32b8fc7fab01f734 +geom 1: material #1 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:58d360c7905fa0c5 camera=2:58d360c7905fa0c5 shadow=2:58d360c7905fa0c5 indirect=2:58d360c7905fa0c5 +geom 2: material #2 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.2599211 motion [] pieces all=8:cb8213f19e1889e5 camera=8:cb8213f19e1889e5 shadow=8:cb8213f19e1889e5 indirect=8:cb8213f19e1889e5 +geom 3: material #2 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0079368 motion [] pieces all=8:9f690ca55fcd34b1 camera=8:9f690ca55fcd34b1 shadow=8:9f690ca55fcd34b1 indirect=8:9f690ca55fcd34b1 +geom 4: material #2 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.6378974 motion [] pieces all=8:bf00f68921a1ff6d camera=8:bf00f68921a1ff6d shadow=8:bf00f68921a1ff6d indirect=8:bf00f68921a1ff6d +geom 5: material #2 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.1370313 motion [] pieces all=8:d86fbb7901e66cf5 camera=8:d86fbb7901e66cf5 shadow=8:d86fbb7901e66cf5 indirect=8:d86fbb7901e66cf5 +geom 6: material #2 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.2962416 motion [] pieces all=8:100fb1034ea0bf45 camera=8:100fb1034ea0bf45 shadow=8:100fb1034ea0bf45 indirect=8:100fb1034ea0bf45 +geom 7: material #2 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.7958115 motion [] pieces all=12:01961e1714f11539 camera=12:01961e1714f11539 shadow=12:01961e1714f11539 indirect=12:01961e1714f11539 +geom 8: material #3 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.7958115 motion [] pieces all=12:94d0d184098e3ffd camera=12:94d0d184098e3ffd shadow=12:94d0d184098e3ffd indirect=12:94d0d184098e3ffd +geom 9: material #2 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=12:d4ab18518f82edfd camera=12:d4ab18518f82edfd shadow=12:d4ab18518f82edfd indirect=12:d4ab18518f82edfd +geom 10: material #3 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=12:83f43ac124235a31 camera=12:83f43ac124235a31 shadow=12:83f43ac124235a31 indirect=12:83f43ac124235a31 +geom 11: material #2 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=12:295cfa9554179a8d camera=12:295cfa9554179a8d shadow=12:295cfa9554179a8d indirect=12:295cfa9554179a8d +geom 12: material #3 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=12:3ea47e28253b632d camera=12:3ea47e28253b632d shadow=12:3ea47e28253b632d indirect=12:3ea47e28253b632d +provenance material /World/Looks/Copper: MaterialOrigin { slots: [8, 10, 12], displaced: false } +provenance material /World/Looks/Emerald: MaterialOrigin { slots: [2, 3, 4, 5, 6, 7, 9, 11], displaced: false } +provenance material /World/Looks/Grey: MaterialOrigin { slots: [1], displaced: false } +provenance light /World/Key: LightOrigin { index: 0, geoms: 0..1 } +provenance light /World/Sky: LightOrigin { index: 1, geoms: 13..13 } +provenance geometry 0..1: /World/Key +provenance geometry 1..2: /World/Floor +provenance geometry 2..7: /World/Scatter +provenance geometry 7..9: /World/TowerC +provenance geometry 9..11: /World/TowerB +provenance geometry 11..13: /World/TowerA +provenance mesh: MeshOrigin { geom_id: 1, slot: 0, baked: true, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 6334356113930313994, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 1: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 6822106956337694752, n_points: 6, n_indices: 24, n_uvs: None, smooth: false, material: 1 }), placements: 0, shared: true, displaced: false } +provenance mesh slot 2: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 2005039782605831059, n_points: 8, n_indices: 24, n_uvs: None, smooth: false, material: 1 }), placements: 0, shared: true, displaced: false } +provenance mesh slot 3: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 2103454763208511752, n_points: 8, n_indices: 24, n_uvs: None, smooth: false, material: 2 }), placements: 0, shared: true, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/World/Cam"), cameras: ["/World/Cam"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/World/Cam"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/instancing_usda-37ed91a3e61701fe-1.image b/crates/crust-core/tests/data/import_baselines/instancing_usda-37ed91a3e61701fe-1.image new file mode 100644 index 000000000..04f5b4e66 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/instancing_usda-37ed91a3e61701fe-1.image @@ -0,0 +1 @@ +480x270 16spp clamp-off bc733f3dea963f51 diff --git a/crates/crust-core/tests/data/import_baselines/instancing_usda-3bde40325dcc4104-1.digest b/crates/crust-core/tests/data/import_baselines/instancing_usda-3bde40325dcc4104-1.digest new file mode 100644 index 000000000..5b4e2e4e2 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/instancing_usda-3bde40325dcc4104-1.digest @@ -0,0 +1,49 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/World/Cam") +camera: Camera { origin: Vec3A(0.0, 3.2, 13.0), lower_left_corner: Vec3A(-5.6632595, -1.346313, 3.5406666), horizontal: Vec3A(11.326519, -0.0, 0.0), vertical: Vec3A(0.0, 6.3091636, -0.8866952), u: Vec3A(1.0, -0.0, 0.0), v: Vec3A(0.0, 0.9902681, -0.13917312), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: Some("/Render/settings") +settings: RenderSettings { samples_per_pixel: 48, max_depth: 8, width: 480, height: 270, region: PixelRect { x0: 0, y0: 0, x1: 480, y1: 270 }, min_samples_per_pixel: 16, variance_threshold: 0.02, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 24.0, aperture: [20.955, 15.2908], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 10.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/instancing.usda"], invisible_overrides: Some(0) } +layer: $DIR/instancing.usda +warning: Warning { code: SubdivAdaptiveNeedsCamera, kind: Approximated, count: 1, prims: [], message: "Adaptive subdivision (2 px) needs the render camera before the stage is read — name it with --camera or RenderSettings.camera, or a dicing camera with crust:dicingCamera. Using the uniform level 0" } +warning: Warning { code: AssetUnsupportedByHost, kind: Skipped, count: 1, prims: [], message: "No asset loader: environment map $DIR/sky_gradient.exr ignored — the dome falls back to its uniform colour. Use Scene::from_usd_with_assets to supply one." } +lights: 2 +light 0: area name Some("/World/Key") lpe None pmf 0.5 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 1: dome name Some("/World/Sky") lpe None pmf 0.5 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 13 geometries, PrimitiveBreakdown { triangles: 4, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 11 } top level, PrimitiveBreakdown { triangles: 36, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 11 } unique, motion false +geom 0: material #0 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:32b8fc7fab01f734 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=2:32b8fc7fab01f734 +geom 1: material #1 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:58d360c7905fa0c5 camera=2:58d360c7905fa0c5 shadow=2:58d360c7905fa0c5 indirect=2:58d360c7905fa0c5 +geom 2: material #2 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.2599211 motion [] pieces all=8:cb8213f19e1889e5 camera=8:cb8213f19e1889e5 shadow=8:cb8213f19e1889e5 indirect=8:cb8213f19e1889e5 +geom 3: material #2 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0079368 motion [] pieces all=8:9f690ca55fcd34b1 camera=8:9f690ca55fcd34b1 shadow=8:9f690ca55fcd34b1 indirect=8:9f690ca55fcd34b1 +geom 4: material #2 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.6378974 motion [] pieces all=8:bf00f68921a1ff6d camera=8:bf00f68921a1ff6d shadow=8:bf00f68921a1ff6d indirect=8:bf00f68921a1ff6d +geom 5: material #2 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.1370313 motion [] pieces all=8:d86fbb7901e66cf5 camera=8:d86fbb7901e66cf5 shadow=8:d86fbb7901e66cf5 indirect=8:d86fbb7901e66cf5 +geom 6: material #2 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.2962416 motion [] pieces all=8:100fb1034ea0bf45 camera=8:100fb1034ea0bf45 shadow=8:100fb1034ea0bf45 indirect=8:100fb1034ea0bf45 +geom 7: material #2 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.7958115 motion [] pieces all=12:01961e1714f11539 camera=12:01961e1714f11539 shadow=12:01961e1714f11539 indirect=12:01961e1714f11539 +geom 8: material #3 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.7958115 motion [] pieces all=12:94d0d184098e3ffd camera=12:94d0d184098e3ffd shadow=12:94d0d184098e3ffd indirect=12:94d0d184098e3ffd +geom 9: material #2 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=12:d4ab18518f82edfd camera=12:d4ab18518f82edfd shadow=12:d4ab18518f82edfd indirect=12:d4ab18518f82edfd +geom 10: material #3 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=12:83f43ac124235a31 camera=12:83f43ac124235a31 shadow=12:83f43ac124235a31 indirect=12:83f43ac124235a31 +geom 11: material #2 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=12:295cfa9554179a8d camera=12:295cfa9554179a8d shadow=12:295cfa9554179a8d indirect=12:295cfa9554179a8d +geom 12: material #3 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=12:3ea47e28253b632d camera=12:3ea47e28253b632d shadow=12:3ea47e28253b632d indirect=12:3ea47e28253b632d +provenance material /World/Looks/Copper: MaterialOrigin { slots: [8, 10, 12], displaced: false } +provenance material /World/Looks/Emerald: MaterialOrigin { slots: [2, 3, 4, 5, 6, 7, 9, 11], displaced: false } +provenance material /World/Looks/Grey: MaterialOrigin { slots: [1], displaced: false } +provenance light /World/Key: LightOrigin { index: 0, geoms: 0..1 } +provenance light /World/Sky: LightOrigin { index: 1, geoms: 13..13 } +provenance geometry 0..1: /World/Key +provenance geometry 1..2: /World/Floor +provenance geometry 2..7: /World/Scatter +provenance geometry 7..9: /World/TowerC +provenance geometry 9..11: /World/TowerB +provenance geometry 11..13: /World/TowerA +provenance mesh: MeshOrigin { geom_id: 1, slot: 0, baked: true, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 6334356113930313994, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 1: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 6822106956337694752, n_points: 6, n_indices: 24, n_uvs: None, smooth: false, material: 1 }), placements: 0, shared: true, displaced: false } +provenance mesh slot 2: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 2005039782605831059, n_points: 8, n_indices: 24, n_uvs: None, smooth: false, material: 1 }), placements: 0, shared: true, displaced: false } +provenance mesh slot 3: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 2103454763208511752, n_points: 8, n_indices: 24, n_uvs: None, smooth: false, material: 2 }), placements: 0, shared: true, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: Some(2.0), skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/World/Cam"), cameras: ["/World/Cam"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/World/Cam"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/instancing_usda-3bde40325dcc4104-1.image b/crates/crust-core/tests/data/import_baselines/instancing_usda-3bde40325dcc4104-1.image new file mode 100644 index 000000000..04f5b4e66 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/instancing_usda-3bde40325dcc4104-1.image @@ -0,0 +1 @@ +480x270 16spp clamp-off bc733f3dea963f51 diff --git a/crates/crust-core/tests/data/import_baselines/instancing_usda-3c5cc93e1666982d-1.digest b/crates/crust-core/tests/data/import_baselines/instancing_usda-3c5cc93e1666982d-1.digest new file mode 100644 index 000000000..f32db1622 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/instancing_usda-3c5cc93e1666982d-1.digest @@ -0,0 +1,48 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/World/Cam") +camera: Camera { origin: Vec3A(0.0, 3.2, 13.0), lower_left_corner: Vec3A(-5.6632595, -1.346313, 3.5406666), horizontal: Vec3A(11.326519, -0.0, 0.0), vertical: Vec3A(0.0, 6.3091636, -0.8866952), u: Vec3A(1.0, -0.0, 0.0), v: Vec3A(0.0, 0.9902681, -0.13917312), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: Some("/Render/settings") +settings: RenderSettings { samples_per_pixel: 48, max_depth: 8, width: 480, height: 270, region: PixelRect { x0: 0, y0: 0, x1: 480, y1: 270 }, min_samples_per_pixel: 16, variance_threshold: 0.02, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 24.0, aperture: [20.955, 15.2908], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 10.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/instancing.usda"], invisible_overrides: Some(0) } +layer: $DIR/instancing.usda +warning: Warning { code: AssetUnsupportedByHost, kind: Skipped, count: 1, prims: [], message: "No asset loader: environment map $DIR/sky_gradient.exr ignored — the dome falls back to its uniform colour. Use Scene::from_usd_with_assets to supply one." } +lights: 2 +light 0: area name Some("/World/Key") lpe None pmf 0.5 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 1: dome name Some("/World/Sky") lpe None pmf 0.5 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 13 geometries, PrimitiveBreakdown { triangles: 4, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 11 } top level, PrimitiveBreakdown { triangles: 36, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 11 } unique, motion false +geom 0: material #0 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:32b8fc7fab01f734 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=2:32b8fc7fab01f734 +geom 1: material #1 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:58d360c7905fa0c5 camera=2:58d360c7905fa0c5 shadow=2:58d360c7905fa0c5 indirect=2:58d360c7905fa0c5 +geom 2: material #2 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.2599211 motion [] pieces all=8:cb8213f19e1889e5 camera=8:cb8213f19e1889e5 shadow=8:cb8213f19e1889e5 indirect=8:cb8213f19e1889e5 +geom 3: material #2 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0079368 motion [] pieces all=8:9f690ca55fcd34b1 camera=8:9f690ca55fcd34b1 shadow=8:9f690ca55fcd34b1 indirect=8:9f690ca55fcd34b1 +geom 4: material #2 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.6378974 motion [] pieces all=8:bf00f68921a1ff6d camera=8:bf00f68921a1ff6d shadow=8:bf00f68921a1ff6d indirect=8:bf00f68921a1ff6d +geom 5: material #2 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.1370313 motion [] pieces all=8:d86fbb7901e66cf5 camera=8:d86fbb7901e66cf5 shadow=8:d86fbb7901e66cf5 indirect=8:d86fbb7901e66cf5 +geom 6: material #2 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.2962416 motion [] pieces all=8:100fb1034ea0bf45 camera=8:100fb1034ea0bf45 shadow=8:100fb1034ea0bf45 indirect=8:100fb1034ea0bf45 +geom 7: material #2 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.7958115 motion [] pieces all=12:01961e1714f11539 camera=12:01961e1714f11539 shadow=12:01961e1714f11539 indirect=12:01961e1714f11539 +geom 8: material #3 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.7958115 motion [] pieces all=12:94d0d184098e3ffd camera=12:94d0d184098e3ffd shadow=12:94d0d184098e3ffd indirect=12:94d0d184098e3ffd +geom 9: material #2 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=12:d4ab18518f82edfd camera=12:d4ab18518f82edfd shadow=12:d4ab18518f82edfd indirect=12:d4ab18518f82edfd +geom 10: material #3 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=12:83f43ac124235a31 camera=12:83f43ac124235a31 shadow=12:83f43ac124235a31 indirect=12:83f43ac124235a31 +geom 11: material #2 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=12:295cfa9554179a8d camera=12:295cfa9554179a8d shadow=12:295cfa9554179a8d indirect=12:295cfa9554179a8d +geom 12: material #3 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=12:3ea47e28253b632d camera=12:3ea47e28253b632d shadow=12:3ea47e28253b632d indirect=12:3ea47e28253b632d +provenance material /World/Looks/Copper: MaterialOrigin { slots: [8, 10, 12], displaced: false } +provenance material /World/Looks/Emerald: MaterialOrigin { slots: [2, 3, 4, 5, 6, 7, 9, 11], displaced: false } +provenance material /World/Looks/Grey: MaterialOrigin { slots: [1], displaced: false } +provenance light /World/Key: LightOrigin { index: 0, geoms: 0..1 } +provenance light /World/Sky: LightOrigin { index: 1, geoms: 13..13 } +provenance geometry 0..1: /World/Key +provenance geometry 1..2: /World/Floor +provenance geometry 2..7: /World/Scatter +provenance geometry 7..9: /World/TowerC +provenance geometry 9..11: /World/TowerB +provenance geometry 11..13: /World/TowerA +provenance mesh: MeshOrigin { geom_id: 1, slot: 0, baked: true, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 6334356113930313994, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 1: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 6822106956337694752, n_points: 6, n_indices: 24, n_uvs: None, smooth: false, material: 1 }), placements: 0, shared: true, displaced: false } +provenance mesh slot 2: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 2005039782605831059, n_points: 8, n_indices: 24, n_uvs: None, smooth: false, material: 1 }), placements: 0, shared: true, displaced: false } +provenance mesh slot 3: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 2103454763208511752, n_points: 8, n_indices: 24, n_uvs: None, smooth: false, material: 2 }), placements: 0, shared: true, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/World/Cam"), cameras: ["/World/Cam"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/World/Cam"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/instancing_usda-3c5cc93e1666982d-1.image b/crates/crust-core/tests/data/import_baselines/instancing_usda-3c5cc93e1666982d-1.image new file mode 100644 index 000000000..04f5b4e66 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/instancing_usda-3c5cc93e1666982d-1.image @@ -0,0 +1 @@ +480x270 16spp clamp-off bc733f3dea963f51 diff --git a/crates/crust-core/tests/data/import_baselines/instancing_usda-3c5cc93e1666982d-2.digest b/crates/crust-core/tests/data/import_baselines/instancing_usda-3c5cc93e1666982d-2.digest new file mode 100644 index 000000000..f32db1622 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/instancing_usda-3c5cc93e1666982d-2.digest @@ -0,0 +1,48 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/World/Cam") +camera: Camera { origin: Vec3A(0.0, 3.2, 13.0), lower_left_corner: Vec3A(-5.6632595, -1.346313, 3.5406666), horizontal: Vec3A(11.326519, -0.0, 0.0), vertical: Vec3A(0.0, 6.3091636, -0.8866952), u: Vec3A(1.0, -0.0, 0.0), v: Vec3A(0.0, 0.9902681, -0.13917312), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: Some("/Render/settings") +settings: RenderSettings { samples_per_pixel: 48, max_depth: 8, width: 480, height: 270, region: PixelRect { x0: 0, y0: 0, x1: 480, y1: 270 }, min_samples_per_pixel: 16, variance_threshold: 0.02, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 24.0, aperture: [20.955, 15.2908], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 10.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/instancing.usda"], invisible_overrides: Some(0) } +layer: $DIR/instancing.usda +warning: Warning { code: AssetUnsupportedByHost, kind: Skipped, count: 1, prims: [], message: "No asset loader: environment map $DIR/sky_gradient.exr ignored — the dome falls back to its uniform colour. Use Scene::from_usd_with_assets to supply one." } +lights: 2 +light 0: area name Some("/World/Key") lpe None pmf 0.5 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 1: dome name Some("/World/Sky") lpe None pmf 0.5 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 13 geometries, PrimitiveBreakdown { triangles: 4, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 11 } top level, PrimitiveBreakdown { triangles: 36, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 11 } unique, motion false +geom 0: material #0 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:32b8fc7fab01f734 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=2:32b8fc7fab01f734 +geom 1: material #1 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:58d360c7905fa0c5 camera=2:58d360c7905fa0c5 shadow=2:58d360c7905fa0c5 indirect=2:58d360c7905fa0c5 +geom 2: material #2 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.2599211 motion [] pieces all=8:cb8213f19e1889e5 camera=8:cb8213f19e1889e5 shadow=8:cb8213f19e1889e5 indirect=8:cb8213f19e1889e5 +geom 3: material #2 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0079368 motion [] pieces all=8:9f690ca55fcd34b1 camera=8:9f690ca55fcd34b1 shadow=8:9f690ca55fcd34b1 indirect=8:9f690ca55fcd34b1 +geom 4: material #2 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.6378974 motion [] pieces all=8:bf00f68921a1ff6d camera=8:bf00f68921a1ff6d shadow=8:bf00f68921a1ff6d indirect=8:bf00f68921a1ff6d +geom 5: material #2 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.1370313 motion [] pieces all=8:d86fbb7901e66cf5 camera=8:d86fbb7901e66cf5 shadow=8:d86fbb7901e66cf5 indirect=8:d86fbb7901e66cf5 +geom 6: material #2 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.2962416 motion [] pieces all=8:100fb1034ea0bf45 camera=8:100fb1034ea0bf45 shadow=8:100fb1034ea0bf45 indirect=8:100fb1034ea0bf45 +geom 7: material #2 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.7958115 motion [] pieces all=12:01961e1714f11539 camera=12:01961e1714f11539 shadow=12:01961e1714f11539 indirect=12:01961e1714f11539 +geom 8: material #3 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.7958115 motion [] pieces all=12:94d0d184098e3ffd camera=12:94d0d184098e3ffd shadow=12:94d0d184098e3ffd indirect=12:94d0d184098e3ffd +geom 9: material #2 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=12:d4ab18518f82edfd camera=12:d4ab18518f82edfd shadow=12:d4ab18518f82edfd indirect=12:d4ab18518f82edfd +geom 10: material #3 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=12:83f43ac124235a31 camera=12:83f43ac124235a31 shadow=12:83f43ac124235a31 indirect=12:83f43ac124235a31 +geom 11: material #2 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=12:295cfa9554179a8d camera=12:295cfa9554179a8d shadow=12:295cfa9554179a8d indirect=12:295cfa9554179a8d +geom 12: material #3 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=12:3ea47e28253b632d camera=12:3ea47e28253b632d shadow=12:3ea47e28253b632d indirect=12:3ea47e28253b632d +provenance material /World/Looks/Copper: MaterialOrigin { slots: [8, 10, 12], displaced: false } +provenance material /World/Looks/Emerald: MaterialOrigin { slots: [2, 3, 4, 5, 6, 7, 9, 11], displaced: false } +provenance material /World/Looks/Grey: MaterialOrigin { slots: [1], displaced: false } +provenance light /World/Key: LightOrigin { index: 0, geoms: 0..1 } +provenance light /World/Sky: LightOrigin { index: 1, geoms: 13..13 } +provenance geometry 0..1: /World/Key +provenance geometry 1..2: /World/Floor +provenance geometry 2..7: /World/Scatter +provenance geometry 7..9: /World/TowerC +provenance geometry 9..11: /World/TowerB +provenance geometry 11..13: /World/TowerA +provenance mesh: MeshOrigin { geom_id: 1, slot: 0, baked: true, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 6334356113930313994, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 1: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 6822106956337694752, n_points: 6, n_indices: 24, n_uvs: None, smooth: false, material: 1 }), placements: 0, shared: true, displaced: false } +provenance mesh slot 2: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 2005039782605831059, n_points: 8, n_indices: 24, n_uvs: None, smooth: false, material: 1 }), placements: 0, shared: true, displaced: false } +provenance mesh slot 3: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 2103454763208511752, n_points: 8, n_indices: 24, n_uvs: None, smooth: false, material: 2 }), placements: 0, shared: true, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/World/Cam"), cameras: ["/World/Cam"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/World/Cam"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/instancing_usda-3c5cc93e1666982d-2.image b/crates/crust-core/tests/data/import_baselines/instancing_usda-3c5cc93e1666982d-2.image new file mode 100644 index 000000000..04f5b4e66 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/instancing_usda-3c5cc93e1666982d-2.image @@ -0,0 +1 @@ +480x270 16spp clamp-off bc733f3dea963f51 diff --git a/crates/crust-core/tests/data/import_baselines/instancing_usda-4c123aa1f400f41f-1.digest b/crates/crust-core/tests/data/import_baselines/instancing_usda-4c123aa1f400f41f-1.digest new file mode 100644 index 000000000..f32db1622 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/instancing_usda-4c123aa1f400f41f-1.digest @@ -0,0 +1,48 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/World/Cam") +camera: Camera { origin: Vec3A(0.0, 3.2, 13.0), lower_left_corner: Vec3A(-5.6632595, -1.346313, 3.5406666), horizontal: Vec3A(11.326519, -0.0, 0.0), vertical: Vec3A(0.0, 6.3091636, -0.8866952), u: Vec3A(1.0, -0.0, 0.0), v: Vec3A(0.0, 0.9902681, -0.13917312), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: Some("/Render/settings") +settings: RenderSettings { samples_per_pixel: 48, max_depth: 8, width: 480, height: 270, region: PixelRect { x0: 0, y0: 0, x1: 480, y1: 270 }, min_samples_per_pixel: 16, variance_threshold: 0.02, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 24.0, aperture: [20.955, 15.2908], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 10.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/instancing.usda"], invisible_overrides: Some(0) } +layer: $DIR/instancing.usda +warning: Warning { code: AssetUnsupportedByHost, kind: Skipped, count: 1, prims: [], message: "No asset loader: environment map $DIR/sky_gradient.exr ignored — the dome falls back to its uniform colour. Use Scene::from_usd_with_assets to supply one." } +lights: 2 +light 0: area name Some("/World/Key") lpe None pmf 0.5 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 1: dome name Some("/World/Sky") lpe None pmf 0.5 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 13 geometries, PrimitiveBreakdown { triangles: 4, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 11 } top level, PrimitiveBreakdown { triangles: 36, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 11 } unique, motion false +geom 0: material #0 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:32b8fc7fab01f734 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=2:32b8fc7fab01f734 +geom 1: material #1 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:58d360c7905fa0c5 camera=2:58d360c7905fa0c5 shadow=2:58d360c7905fa0c5 indirect=2:58d360c7905fa0c5 +geom 2: material #2 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.2599211 motion [] pieces all=8:cb8213f19e1889e5 camera=8:cb8213f19e1889e5 shadow=8:cb8213f19e1889e5 indirect=8:cb8213f19e1889e5 +geom 3: material #2 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0079368 motion [] pieces all=8:9f690ca55fcd34b1 camera=8:9f690ca55fcd34b1 shadow=8:9f690ca55fcd34b1 indirect=8:9f690ca55fcd34b1 +geom 4: material #2 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.6378974 motion [] pieces all=8:bf00f68921a1ff6d camera=8:bf00f68921a1ff6d shadow=8:bf00f68921a1ff6d indirect=8:bf00f68921a1ff6d +geom 5: material #2 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.1370313 motion [] pieces all=8:d86fbb7901e66cf5 camera=8:d86fbb7901e66cf5 shadow=8:d86fbb7901e66cf5 indirect=8:d86fbb7901e66cf5 +geom 6: material #2 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.2962416 motion [] pieces all=8:100fb1034ea0bf45 camera=8:100fb1034ea0bf45 shadow=8:100fb1034ea0bf45 indirect=8:100fb1034ea0bf45 +geom 7: material #2 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.7958115 motion [] pieces all=12:01961e1714f11539 camera=12:01961e1714f11539 shadow=12:01961e1714f11539 indirect=12:01961e1714f11539 +geom 8: material #3 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.7958115 motion [] pieces all=12:94d0d184098e3ffd camera=12:94d0d184098e3ffd shadow=12:94d0d184098e3ffd indirect=12:94d0d184098e3ffd +geom 9: material #2 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=12:d4ab18518f82edfd camera=12:d4ab18518f82edfd shadow=12:d4ab18518f82edfd indirect=12:d4ab18518f82edfd +geom 10: material #3 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=12:83f43ac124235a31 camera=12:83f43ac124235a31 shadow=12:83f43ac124235a31 indirect=12:83f43ac124235a31 +geom 11: material #2 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=12:295cfa9554179a8d camera=12:295cfa9554179a8d shadow=12:295cfa9554179a8d indirect=12:295cfa9554179a8d +geom 12: material #3 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=12:3ea47e28253b632d camera=12:3ea47e28253b632d shadow=12:3ea47e28253b632d indirect=12:3ea47e28253b632d +provenance material /World/Looks/Copper: MaterialOrigin { slots: [8, 10, 12], displaced: false } +provenance material /World/Looks/Emerald: MaterialOrigin { slots: [2, 3, 4, 5, 6, 7, 9, 11], displaced: false } +provenance material /World/Looks/Grey: MaterialOrigin { slots: [1], displaced: false } +provenance light /World/Key: LightOrigin { index: 0, geoms: 0..1 } +provenance light /World/Sky: LightOrigin { index: 1, geoms: 13..13 } +provenance geometry 0..1: /World/Key +provenance geometry 1..2: /World/Floor +provenance geometry 2..7: /World/Scatter +provenance geometry 7..9: /World/TowerC +provenance geometry 9..11: /World/TowerB +provenance geometry 11..13: /World/TowerA +provenance mesh: MeshOrigin { geom_id: 1, slot: 0, baked: true, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 6334356113930313994, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 1: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 6822106956337694752, n_points: 6, n_indices: 24, n_uvs: None, smooth: false, material: 1 }), placements: 0, shared: true, displaced: false } +provenance mesh slot 2: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 2005039782605831059, n_points: 8, n_indices: 24, n_uvs: None, smooth: false, material: 1 }), placements: 0, shared: true, displaced: false } +provenance mesh slot 3: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 2103454763208511752, n_points: 8, n_indices: 24, n_uvs: None, smooth: false, material: 2 }), placements: 0, shared: true, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/World/Cam"), cameras: ["/World/Cam"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/World/Cam"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/instancing_usda-4c123aa1f400f41f-1.image b/crates/crust-core/tests/data/import_baselines/instancing_usda-4c123aa1f400f41f-1.image new file mode 100644 index 000000000..04f5b4e66 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/instancing_usda-4c123aa1f400f41f-1.image @@ -0,0 +1 @@ +480x270 16spp clamp-off bc733f3dea963f51 diff --git a/crates/crust-core/tests/data/import_baselines/instancing_usda-4d15fe3f4f1fa7d2-1.digest b/crates/crust-core/tests/data/import_baselines/instancing_usda-4d15fe3f4f1fa7d2-1.digest new file mode 100644 index 000000000..f32db1622 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/instancing_usda-4d15fe3f4f1fa7d2-1.digest @@ -0,0 +1,48 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/World/Cam") +camera: Camera { origin: Vec3A(0.0, 3.2, 13.0), lower_left_corner: Vec3A(-5.6632595, -1.346313, 3.5406666), horizontal: Vec3A(11.326519, -0.0, 0.0), vertical: Vec3A(0.0, 6.3091636, -0.8866952), u: Vec3A(1.0, -0.0, 0.0), v: Vec3A(0.0, 0.9902681, -0.13917312), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: Some("/Render/settings") +settings: RenderSettings { samples_per_pixel: 48, max_depth: 8, width: 480, height: 270, region: PixelRect { x0: 0, y0: 0, x1: 480, y1: 270 }, min_samples_per_pixel: 16, variance_threshold: 0.02, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 24.0, aperture: [20.955, 15.2908], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 10.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/instancing.usda"], invisible_overrides: Some(0) } +layer: $DIR/instancing.usda +warning: Warning { code: AssetUnsupportedByHost, kind: Skipped, count: 1, prims: [], message: "No asset loader: environment map $DIR/sky_gradient.exr ignored — the dome falls back to its uniform colour. Use Scene::from_usd_with_assets to supply one." } +lights: 2 +light 0: area name Some("/World/Key") lpe None pmf 0.5 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 1: dome name Some("/World/Sky") lpe None pmf 0.5 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 13 geometries, PrimitiveBreakdown { triangles: 4, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 11 } top level, PrimitiveBreakdown { triangles: 36, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 11 } unique, motion false +geom 0: material #0 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:32b8fc7fab01f734 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=2:32b8fc7fab01f734 +geom 1: material #1 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:58d360c7905fa0c5 camera=2:58d360c7905fa0c5 shadow=2:58d360c7905fa0c5 indirect=2:58d360c7905fa0c5 +geom 2: material #2 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.2599211 motion [] pieces all=8:cb8213f19e1889e5 camera=8:cb8213f19e1889e5 shadow=8:cb8213f19e1889e5 indirect=8:cb8213f19e1889e5 +geom 3: material #2 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0079368 motion [] pieces all=8:9f690ca55fcd34b1 camera=8:9f690ca55fcd34b1 shadow=8:9f690ca55fcd34b1 indirect=8:9f690ca55fcd34b1 +geom 4: material #2 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.6378974 motion [] pieces all=8:bf00f68921a1ff6d camera=8:bf00f68921a1ff6d shadow=8:bf00f68921a1ff6d indirect=8:bf00f68921a1ff6d +geom 5: material #2 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.1370313 motion [] pieces all=8:d86fbb7901e66cf5 camera=8:d86fbb7901e66cf5 shadow=8:d86fbb7901e66cf5 indirect=8:d86fbb7901e66cf5 +geom 6: material #2 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.2962416 motion [] pieces all=8:100fb1034ea0bf45 camera=8:100fb1034ea0bf45 shadow=8:100fb1034ea0bf45 indirect=8:100fb1034ea0bf45 +geom 7: material #2 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.7958115 motion [] pieces all=12:01961e1714f11539 camera=12:01961e1714f11539 shadow=12:01961e1714f11539 indirect=12:01961e1714f11539 +geom 8: material #3 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.7958115 motion [] pieces all=12:94d0d184098e3ffd camera=12:94d0d184098e3ffd shadow=12:94d0d184098e3ffd indirect=12:94d0d184098e3ffd +geom 9: material #2 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=12:d4ab18518f82edfd camera=12:d4ab18518f82edfd shadow=12:d4ab18518f82edfd indirect=12:d4ab18518f82edfd +geom 10: material #3 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=12:83f43ac124235a31 camera=12:83f43ac124235a31 shadow=12:83f43ac124235a31 indirect=12:83f43ac124235a31 +geom 11: material #2 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=12:295cfa9554179a8d camera=12:295cfa9554179a8d shadow=12:295cfa9554179a8d indirect=12:295cfa9554179a8d +geom 12: material #3 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=12:3ea47e28253b632d camera=12:3ea47e28253b632d shadow=12:3ea47e28253b632d indirect=12:3ea47e28253b632d +provenance material /World/Looks/Copper: MaterialOrigin { slots: [8, 10, 12], displaced: false } +provenance material /World/Looks/Emerald: MaterialOrigin { slots: [2, 3, 4, 5, 6, 7, 9, 11], displaced: false } +provenance material /World/Looks/Grey: MaterialOrigin { slots: [1], displaced: false } +provenance light /World/Key: LightOrigin { index: 0, geoms: 0..1 } +provenance light /World/Sky: LightOrigin { index: 1, geoms: 13..13 } +provenance geometry 0..1: /World/Key +provenance geometry 1..2: /World/Floor +provenance geometry 2..7: /World/Scatter +provenance geometry 7..9: /World/TowerC +provenance geometry 9..11: /World/TowerB +provenance geometry 11..13: /World/TowerA +provenance mesh: MeshOrigin { geom_id: 1, slot: 0, baked: true, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 6334356113930313994, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 1: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 6822106956337694752, n_points: 6, n_indices: 24, n_uvs: None, smooth: false, material: 1 }), placements: 0, shared: true, displaced: false } +provenance mesh slot 2: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 2005039782605831059, n_points: 8, n_indices: 24, n_uvs: None, smooth: false, material: 1 }), placements: 0, shared: true, displaced: false } +provenance mesh slot 3: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 2103454763208511752, n_points: 8, n_indices: 24, n_uvs: None, smooth: false, material: 2 }), placements: 0, shared: true, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/World/Cam"), cameras: ["/World/Cam"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/World/Cam"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/instancing_usda-4d15fe3f4f1fa7d2-1.image b/crates/crust-core/tests/data/import_baselines/instancing_usda-4d15fe3f4f1fa7d2-1.image new file mode 100644 index 000000000..04f5b4e66 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/instancing_usda-4d15fe3f4f1fa7d2-1.image @@ -0,0 +1 @@ +480x270 16spp clamp-off bc733f3dea963f51 diff --git a/crates/crust-core/tests/data/import_baselines/instancing_usda-5aa111b242f25730-1.digest b/crates/crust-core/tests/data/import_baselines/instancing_usda-5aa111b242f25730-1.digest new file mode 100644 index 000000000..6b9eaee23 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/instancing_usda-5aa111b242f25730-1.digest @@ -0,0 +1,47 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/World/Cam") +camera: Camera { origin: Vec3A(0.0, 3.2, 13.0), lower_left_corner: Vec3A(-5.6632595, -1.346313, 3.5406666), horizontal: Vec3A(11.326519, -0.0, 0.0), vertical: Vec3A(0.0, 6.3091636, -0.8866952), u: Vec3A(1.0, -0.0, 0.0), v: Vec3A(0.0, 0.9902681, -0.13917312), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: Some("/Render/settings") +settings: RenderSettings { samples_per_pixel: 48, max_depth: 8, width: 480, height: 270, region: PixelRect { x0: 0, y0: 0, x1: 480, y1: 270 }, min_samples_per_pixel: 16, variance_threshold: 0.02, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 24.0, aperture: [20.955, 15.2908], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 10.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/instancing.usda"], invisible_overrides: Some(0) } +layer: $DIR/instancing.usda +lights: 2 +light 0: area name Some("/World/Key") lpe None pmf 0.5 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 1: dome name Some("/World/Sky") lpe None pmf 0.5 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 13 geometries, PrimitiveBreakdown { triangles: 4, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 11 } top level, PrimitiveBreakdown { triangles: 36, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 11 } unique, motion false +geom 0: material #0 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:32b8fc7fab01f734 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=2:32b8fc7fab01f734 +geom 1: material #1 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:58d360c7905fa0c5 camera=2:58d360c7905fa0c5 shadow=2:58d360c7905fa0c5 indirect=2:58d360c7905fa0c5 +geom 2: material #2 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.2599211 motion [] pieces all=8:cb8213f19e1889e5 camera=8:cb8213f19e1889e5 shadow=8:cb8213f19e1889e5 indirect=8:cb8213f19e1889e5 +geom 3: material #2 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0079368 motion [] pieces all=8:9f690ca55fcd34b1 camera=8:9f690ca55fcd34b1 shadow=8:9f690ca55fcd34b1 indirect=8:9f690ca55fcd34b1 +geom 4: material #2 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.6378974 motion [] pieces all=8:bf00f68921a1ff6d camera=8:bf00f68921a1ff6d shadow=8:bf00f68921a1ff6d indirect=8:bf00f68921a1ff6d +geom 5: material #2 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.1370313 motion [] pieces all=8:d86fbb7901e66cf5 camera=8:d86fbb7901e66cf5 shadow=8:d86fbb7901e66cf5 indirect=8:d86fbb7901e66cf5 +geom 6: material #2 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.2962416 motion [] pieces all=8:100fb1034ea0bf45 camera=8:100fb1034ea0bf45 shadow=8:100fb1034ea0bf45 indirect=8:100fb1034ea0bf45 +geom 7: material #2 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.7958115 motion [] pieces all=12:01961e1714f11539 camera=12:01961e1714f11539 shadow=12:01961e1714f11539 indirect=12:01961e1714f11539 +geom 8: material #3 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.7958115 motion [] pieces all=12:94d0d184098e3ffd camera=12:94d0d184098e3ffd shadow=12:94d0d184098e3ffd indirect=12:94d0d184098e3ffd +geom 9: material #2 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=12:d4ab18518f82edfd camera=12:d4ab18518f82edfd shadow=12:d4ab18518f82edfd indirect=12:d4ab18518f82edfd +geom 10: material #3 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=12:83f43ac124235a31 camera=12:83f43ac124235a31 shadow=12:83f43ac124235a31 indirect=12:83f43ac124235a31 +geom 11: material #2 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=12:295cfa9554179a8d camera=12:295cfa9554179a8d shadow=12:295cfa9554179a8d indirect=12:295cfa9554179a8d +geom 12: material #3 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=12:3ea47e28253b632d camera=12:3ea47e28253b632d shadow=12:3ea47e28253b632d indirect=12:3ea47e28253b632d +provenance material /World/Looks/Copper: MaterialOrigin { slots: [8, 10, 12], displaced: false } +provenance material /World/Looks/Emerald: MaterialOrigin { slots: [2, 3, 4, 5, 6, 7, 9, 11], displaced: false } +provenance material /World/Looks/Grey: MaterialOrigin { slots: [1], displaced: false } +provenance light /World/Key: LightOrigin { index: 0, geoms: 0..1 } +provenance light /World/Sky: LightOrigin { index: 1, geoms: 13..13 } +provenance geometry 0..1: /World/Key +provenance geometry 1..2: /World/Floor +provenance geometry 2..7: /World/Scatter +provenance geometry 7..9: /World/TowerC +provenance geometry 9..11: /World/TowerB +provenance geometry 11..13: /World/TowerA +provenance mesh: MeshOrigin { geom_id: 1, slot: 0, baked: true, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 6334356113930313994, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 1: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 6822106956337694752, n_points: 6, n_indices: 24, n_uvs: None, smooth: false, material: 1 }), placements: 0, shared: true, displaced: false } +provenance mesh slot 2: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 2005039782605831059, n_points: 8, n_indices: 24, n_uvs: None, smooth: false, material: 1 }), placements: 0, shared: true, displaced: false } +provenance mesh slot 3: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 2103454763208511752, n_points: 8, n_indices: 24, n_uvs: None, smooth: false, material: 2 }), placements: 0, shared: true, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: true, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/World/Cam"), cameras: ["/World/Cam"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/World/Cam"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/instancing_usda-5aa111b242f25730-1.image b/crates/crust-core/tests/data/import_baselines/instancing_usda-5aa111b242f25730-1.image new file mode 100644 index 000000000..7bccda95e --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/instancing_usda-5aa111b242f25730-1.image @@ -0,0 +1 @@ +480x270 16spp clamp-off f5b219db6d0d9155 diff --git a/crates/crust-core/tests/data/import_baselines/instancing_usda-8afb1b2336afd39d-1.digest b/crates/crust-core/tests/data/import_baselines/instancing_usda-8afb1b2336afd39d-1.digest new file mode 100644 index 000000000..f32db1622 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/instancing_usda-8afb1b2336afd39d-1.digest @@ -0,0 +1,48 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/World/Cam") +camera: Camera { origin: Vec3A(0.0, 3.2, 13.0), lower_left_corner: Vec3A(-5.6632595, -1.346313, 3.5406666), horizontal: Vec3A(11.326519, -0.0, 0.0), vertical: Vec3A(0.0, 6.3091636, -0.8866952), u: Vec3A(1.0, -0.0, 0.0), v: Vec3A(0.0, 0.9902681, -0.13917312), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: Some("/Render/settings") +settings: RenderSettings { samples_per_pixel: 48, max_depth: 8, width: 480, height: 270, region: PixelRect { x0: 0, y0: 0, x1: 480, y1: 270 }, min_samples_per_pixel: 16, variance_threshold: 0.02, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 24.0, aperture: [20.955, 15.2908], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 10.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/instancing.usda"], invisible_overrides: Some(0) } +layer: $DIR/instancing.usda +warning: Warning { code: AssetUnsupportedByHost, kind: Skipped, count: 1, prims: [], message: "No asset loader: environment map $DIR/sky_gradient.exr ignored — the dome falls back to its uniform colour. Use Scene::from_usd_with_assets to supply one." } +lights: 2 +light 0: area name Some("/World/Key") lpe None pmf 0.5 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 1: dome name Some("/World/Sky") lpe None pmf 0.5 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 13 geometries, PrimitiveBreakdown { triangles: 4, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 11 } top level, PrimitiveBreakdown { triangles: 36, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 11 } unique, motion false +geom 0: material #0 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:32b8fc7fab01f734 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=2:32b8fc7fab01f734 +geom 1: material #1 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:58d360c7905fa0c5 camera=2:58d360c7905fa0c5 shadow=2:58d360c7905fa0c5 indirect=2:58d360c7905fa0c5 +geom 2: material #2 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.2599211 motion [] pieces all=8:cb8213f19e1889e5 camera=8:cb8213f19e1889e5 shadow=8:cb8213f19e1889e5 indirect=8:cb8213f19e1889e5 +geom 3: material #2 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0079368 motion [] pieces all=8:9f690ca55fcd34b1 camera=8:9f690ca55fcd34b1 shadow=8:9f690ca55fcd34b1 indirect=8:9f690ca55fcd34b1 +geom 4: material #2 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.6378974 motion [] pieces all=8:bf00f68921a1ff6d camera=8:bf00f68921a1ff6d shadow=8:bf00f68921a1ff6d indirect=8:bf00f68921a1ff6d +geom 5: material #2 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.1370313 motion [] pieces all=8:d86fbb7901e66cf5 camera=8:d86fbb7901e66cf5 shadow=8:d86fbb7901e66cf5 indirect=8:d86fbb7901e66cf5 +geom 6: material #2 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.2962416 motion [] pieces all=8:100fb1034ea0bf45 camera=8:100fb1034ea0bf45 shadow=8:100fb1034ea0bf45 indirect=8:100fb1034ea0bf45 +geom 7: material #2 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.7958115 motion [] pieces all=12:01961e1714f11539 camera=12:01961e1714f11539 shadow=12:01961e1714f11539 indirect=12:01961e1714f11539 +geom 8: material #3 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.7958115 motion [] pieces all=12:94d0d184098e3ffd camera=12:94d0d184098e3ffd shadow=12:94d0d184098e3ffd indirect=12:94d0d184098e3ffd +geom 9: material #2 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=12:d4ab18518f82edfd camera=12:d4ab18518f82edfd shadow=12:d4ab18518f82edfd indirect=12:d4ab18518f82edfd +geom 10: material #3 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=12:83f43ac124235a31 camera=12:83f43ac124235a31 shadow=12:83f43ac124235a31 indirect=12:83f43ac124235a31 +geom 11: material #2 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=12:295cfa9554179a8d camera=12:295cfa9554179a8d shadow=12:295cfa9554179a8d indirect=12:295cfa9554179a8d +geom 12: material #3 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=12:3ea47e28253b632d camera=12:3ea47e28253b632d shadow=12:3ea47e28253b632d indirect=12:3ea47e28253b632d +provenance material /World/Looks/Copper: MaterialOrigin { slots: [8, 10, 12], displaced: false } +provenance material /World/Looks/Emerald: MaterialOrigin { slots: [2, 3, 4, 5, 6, 7, 9, 11], displaced: false } +provenance material /World/Looks/Grey: MaterialOrigin { slots: [1], displaced: false } +provenance light /World/Key: LightOrigin { index: 0, geoms: 0..1 } +provenance light /World/Sky: LightOrigin { index: 1, geoms: 13..13 } +provenance geometry 0..1: /World/Key +provenance geometry 1..2: /World/Floor +provenance geometry 2..7: /World/Scatter +provenance geometry 7..9: /World/TowerC +provenance geometry 9..11: /World/TowerB +provenance geometry 11..13: /World/TowerA +provenance mesh: MeshOrigin { geom_id: 1, slot: 0, baked: true, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 6334356113930313994, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 1: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 6822106956337694752, n_points: 6, n_indices: 24, n_uvs: None, smooth: false, material: 1 }), placements: 0, shared: true, displaced: false } +provenance mesh slot 2: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 2005039782605831059, n_points: 8, n_indices: 24, n_uvs: None, smooth: false, material: 1 }), placements: 0, shared: true, displaced: false } +provenance mesh slot 3: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 2103454763208511752, n_points: 8, n_indices: 24, n_uvs: None, smooth: false, material: 2 }), placements: 0, shared: true, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/World/Cam"), cameras: ["/World/Cam"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/World/Cam"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/instancing_usda-8afb1b2336afd39d-1.image b/crates/crust-core/tests/data/import_baselines/instancing_usda-8afb1b2336afd39d-1.image new file mode 100644 index 000000000..04f5b4e66 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/instancing_usda-8afb1b2336afd39d-1.image @@ -0,0 +1 @@ +480x270 16spp clamp-off bc733f3dea963f51 diff --git a/crates/crust-core/tests/data/import_baselines/instancing_usda-8afb1b2336afd39d-2.digest b/crates/crust-core/tests/data/import_baselines/instancing_usda-8afb1b2336afd39d-2.digest new file mode 100644 index 000000000..f32db1622 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/instancing_usda-8afb1b2336afd39d-2.digest @@ -0,0 +1,48 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/World/Cam") +camera: Camera { origin: Vec3A(0.0, 3.2, 13.0), lower_left_corner: Vec3A(-5.6632595, -1.346313, 3.5406666), horizontal: Vec3A(11.326519, -0.0, 0.0), vertical: Vec3A(0.0, 6.3091636, -0.8866952), u: Vec3A(1.0, -0.0, 0.0), v: Vec3A(0.0, 0.9902681, -0.13917312), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: Some("/Render/settings") +settings: RenderSettings { samples_per_pixel: 48, max_depth: 8, width: 480, height: 270, region: PixelRect { x0: 0, y0: 0, x1: 480, y1: 270 }, min_samples_per_pixel: 16, variance_threshold: 0.02, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 24.0, aperture: [20.955, 15.2908], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 10.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/instancing.usda"], invisible_overrides: Some(0) } +layer: $DIR/instancing.usda +warning: Warning { code: AssetUnsupportedByHost, kind: Skipped, count: 1, prims: [], message: "No asset loader: environment map $DIR/sky_gradient.exr ignored — the dome falls back to its uniform colour. Use Scene::from_usd_with_assets to supply one." } +lights: 2 +light 0: area name Some("/World/Key") lpe None pmf 0.5 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 1: dome name Some("/World/Sky") lpe None pmf 0.5 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 13 geometries, PrimitiveBreakdown { triangles: 4, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 11 } top level, PrimitiveBreakdown { triangles: 36, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 11 } unique, motion false +geom 0: material #0 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:32b8fc7fab01f734 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=2:32b8fc7fab01f734 +geom 1: material #1 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:58d360c7905fa0c5 camera=2:58d360c7905fa0c5 shadow=2:58d360c7905fa0c5 indirect=2:58d360c7905fa0c5 +geom 2: material #2 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.2599211 motion [] pieces all=8:cb8213f19e1889e5 camera=8:cb8213f19e1889e5 shadow=8:cb8213f19e1889e5 indirect=8:cb8213f19e1889e5 +geom 3: material #2 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0079368 motion [] pieces all=8:9f690ca55fcd34b1 camera=8:9f690ca55fcd34b1 shadow=8:9f690ca55fcd34b1 indirect=8:9f690ca55fcd34b1 +geom 4: material #2 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.6378974 motion [] pieces all=8:bf00f68921a1ff6d camera=8:bf00f68921a1ff6d shadow=8:bf00f68921a1ff6d indirect=8:bf00f68921a1ff6d +geom 5: material #2 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.1370313 motion [] pieces all=8:d86fbb7901e66cf5 camera=8:d86fbb7901e66cf5 shadow=8:d86fbb7901e66cf5 indirect=8:d86fbb7901e66cf5 +geom 6: material #2 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.2962416 motion [] pieces all=8:100fb1034ea0bf45 camera=8:100fb1034ea0bf45 shadow=8:100fb1034ea0bf45 indirect=8:100fb1034ea0bf45 +geom 7: material #2 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.7958115 motion [] pieces all=12:01961e1714f11539 camera=12:01961e1714f11539 shadow=12:01961e1714f11539 indirect=12:01961e1714f11539 +geom 8: material #3 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.7958115 motion [] pieces all=12:94d0d184098e3ffd camera=12:94d0d184098e3ffd shadow=12:94d0d184098e3ffd indirect=12:94d0d184098e3ffd +geom 9: material #2 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=12:d4ab18518f82edfd camera=12:d4ab18518f82edfd shadow=12:d4ab18518f82edfd indirect=12:d4ab18518f82edfd +geom 10: material #3 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=12:83f43ac124235a31 camera=12:83f43ac124235a31 shadow=12:83f43ac124235a31 indirect=12:83f43ac124235a31 +geom 11: material #2 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=12:295cfa9554179a8d camera=12:295cfa9554179a8d shadow=12:295cfa9554179a8d indirect=12:295cfa9554179a8d +geom 12: material #3 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=12:3ea47e28253b632d camera=12:3ea47e28253b632d shadow=12:3ea47e28253b632d indirect=12:3ea47e28253b632d +provenance material /World/Looks/Copper: MaterialOrigin { slots: [8, 10, 12], displaced: false } +provenance material /World/Looks/Emerald: MaterialOrigin { slots: [2, 3, 4, 5, 6, 7, 9, 11], displaced: false } +provenance material /World/Looks/Grey: MaterialOrigin { slots: [1], displaced: false } +provenance light /World/Key: LightOrigin { index: 0, geoms: 0..1 } +provenance light /World/Sky: LightOrigin { index: 1, geoms: 13..13 } +provenance geometry 0..1: /World/Key +provenance geometry 1..2: /World/Floor +provenance geometry 2..7: /World/Scatter +provenance geometry 7..9: /World/TowerC +provenance geometry 9..11: /World/TowerB +provenance geometry 11..13: /World/TowerA +provenance mesh: MeshOrigin { geom_id: 1, slot: 0, baked: true, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 6334356113930313994, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 1: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 6822106956337694752, n_points: 6, n_indices: 24, n_uvs: None, smooth: false, material: 1 }), placements: 0, shared: true, displaced: false } +provenance mesh slot 2: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 2005039782605831059, n_points: 8, n_indices: 24, n_uvs: None, smooth: false, material: 1 }), placements: 0, shared: true, displaced: false } +provenance mesh slot 3: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 2103454763208511752, n_points: 8, n_indices: 24, n_uvs: None, smooth: false, material: 2 }), placements: 0, shared: true, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/World/Cam"), cameras: ["/World/Cam"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/World/Cam"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/instancing_usda-8afb1b2336afd39d-2.image b/crates/crust-core/tests/data/import_baselines/instancing_usda-8afb1b2336afd39d-2.image new file mode 100644 index 000000000..04f5b4e66 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/instancing_usda-8afb1b2336afd39d-2.image @@ -0,0 +1 @@ +480x270 16spp clamp-off bc733f3dea963f51 diff --git a/crates/crust-core/tests/data/import_baselines/instancing_usda-bee611607d893be7-1.digest b/crates/crust-core/tests/data/import_baselines/instancing_usda-bee611607d893be7-1.digest new file mode 100644 index 000000000..f32db1622 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/instancing_usda-bee611607d893be7-1.digest @@ -0,0 +1,48 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/World/Cam") +camera: Camera { origin: Vec3A(0.0, 3.2, 13.0), lower_left_corner: Vec3A(-5.6632595, -1.346313, 3.5406666), horizontal: Vec3A(11.326519, -0.0, 0.0), vertical: Vec3A(0.0, 6.3091636, -0.8866952), u: Vec3A(1.0, -0.0, 0.0), v: Vec3A(0.0, 0.9902681, -0.13917312), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: Some("/Render/settings") +settings: RenderSettings { samples_per_pixel: 48, max_depth: 8, width: 480, height: 270, region: PixelRect { x0: 0, y0: 0, x1: 480, y1: 270 }, min_samples_per_pixel: 16, variance_threshold: 0.02, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 24.0, aperture: [20.955, 15.2908], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 10.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/instancing.usda"], invisible_overrides: Some(0) } +layer: $DIR/instancing.usda +warning: Warning { code: AssetUnsupportedByHost, kind: Skipped, count: 1, prims: [], message: "No asset loader: environment map $DIR/sky_gradient.exr ignored — the dome falls back to its uniform colour. Use Scene::from_usd_with_assets to supply one." } +lights: 2 +light 0: area name Some("/World/Key") lpe None pmf 0.5 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 1: dome name Some("/World/Sky") lpe None pmf 0.5 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 13 geometries, PrimitiveBreakdown { triangles: 4, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 11 } top level, PrimitiveBreakdown { triangles: 36, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 11 } unique, motion false +geom 0: material #0 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:32b8fc7fab01f734 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=2:32b8fc7fab01f734 +geom 1: material #1 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:58d360c7905fa0c5 camera=2:58d360c7905fa0c5 shadow=2:58d360c7905fa0c5 indirect=2:58d360c7905fa0c5 +geom 2: material #2 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.2599211 motion [] pieces all=8:cb8213f19e1889e5 camera=8:cb8213f19e1889e5 shadow=8:cb8213f19e1889e5 indirect=8:cb8213f19e1889e5 +geom 3: material #2 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0079368 motion [] pieces all=8:9f690ca55fcd34b1 camera=8:9f690ca55fcd34b1 shadow=8:9f690ca55fcd34b1 indirect=8:9f690ca55fcd34b1 +geom 4: material #2 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.6378974 motion [] pieces all=8:bf00f68921a1ff6d camera=8:bf00f68921a1ff6d shadow=8:bf00f68921a1ff6d indirect=8:bf00f68921a1ff6d +geom 5: material #2 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.1370313 motion [] pieces all=8:d86fbb7901e66cf5 camera=8:d86fbb7901e66cf5 shadow=8:d86fbb7901e66cf5 indirect=8:d86fbb7901e66cf5 +geom 6: material #2 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.2962416 motion [] pieces all=8:100fb1034ea0bf45 camera=8:100fb1034ea0bf45 shadow=8:100fb1034ea0bf45 indirect=8:100fb1034ea0bf45 +geom 7: material #2 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.7958115 motion [] pieces all=12:01961e1714f11539 camera=12:01961e1714f11539 shadow=12:01961e1714f11539 indirect=12:01961e1714f11539 +geom 8: material #3 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.7958115 motion [] pieces all=12:94d0d184098e3ffd camera=12:94d0d184098e3ffd shadow=12:94d0d184098e3ffd indirect=12:94d0d184098e3ffd +geom 9: material #2 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=12:d4ab18518f82edfd camera=12:d4ab18518f82edfd shadow=12:d4ab18518f82edfd indirect=12:d4ab18518f82edfd +geom 10: material #3 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=12:83f43ac124235a31 camera=12:83f43ac124235a31 shadow=12:83f43ac124235a31 indirect=12:83f43ac124235a31 +geom 11: material #2 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=12:295cfa9554179a8d camera=12:295cfa9554179a8d shadow=12:295cfa9554179a8d indirect=12:295cfa9554179a8d +geom 12: material #3 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=12:3ea47e28253b632d camera=12:3ea47e28253b632d shadow=12:3ea47e28253b632d indirect=12:3ea47e28253b632d +provenance material /World/Looks/Copper: MaterialOrigin { slots: [8, 10, 12], displaced: false } +provenance material /World/Looks/Emerald: MaterialOrigin { slots: [2, 3, 4, 5, 6, 7, 9, 11], displaced: false } +provenance material /World/Looks/Grey: MaterialOrigin { slots: [1], displaced: false } +provenance light /World/Key: LightOrigin { index: 0, geoms: 0..1 } +provenance light /World/Sky: LightOrigin { index: 1, geoms: 13..13 } +provenance geometry 0..1: /World/Key +provenance geometry 1..2: /World/Floor +provenance geometry 2..7: /World/Scatter +provenance geometry 7..9: /World/TowerC +provenance geometry 9..11: /World/TowerB +provenance geometry 11..13: /World/TowerA +provenance mesh: MeshOrigin { geom_id: 1, slot: 0, baked: true, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 6334356113930313994, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 1: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 6822106956337694752, n_points: 6, n_indices: 24, n_uvs: None, smooth: false, material: 1 }), placements: 0, shared: true, displaced: false } +provenance mesh slot 2: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 2005039782605831059, n_points: 8, n_indices: 24, n_uvs: None, smooth: false, material: 1 }), placements: 0, shared: true, displaced: false } +provenance mesh slot 3: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 2103454763208511752, n_points: 8, n_indices: 24, n_uvs: None, smooth: false, material: 2 }), placements: 0, shared: true, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/World/Cam"), cameras: ["/World/Cam"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/World/Cam"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/instancing_usda-bee611607d893be7-1.image b/crates/crust-core/tests/data/import_baselines/instancing_usda-bee611607d893be7-1.image new file mode 100644 index 000000000..04f5b4e66 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/instancing_usda-bee611607d893be7-1.image @@ -0,0 +1 @@ +480x270 16spp clamp-off bc733f3dea963f51 diff --git a/crates/crust-core/tests/data/import_baselines/instancing_usda-c51a6942a8212cb9-1.digest b/crates/crust-core/tests/data/import_baselines/instancing_usda-c51a6942a8212cb9-1.digest new file mode 100644 index 000000000..f32db1622 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/instancing_usda-c51a6942a8212cb9-1.digest @@ -0,0 +1,48 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/World/Cam") +camera: Camera { origin: Vec3A(0.0, 3.2, 13.0), lower_left_corner: Vec3A(-5.6632595, -1.346313, 3.5406666), horizontal: Vec3A(11.326519, -0.0, 0.0), vertical: Vec3A(0.0, 6.3091636, -0.8866952), u: Vec3A(1.0, -0.0, 0.0), v: Vec3A(0.0, 0.9902681, -0.13917312), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: Some("/Render/settings") +settings: RenderSettings { samples_per_pixel: 48, max_depth: 8, width: 480, height: 270, region: PixelRect { x0: 0, y0: 0, x1: 480, y1: 270 }, min_samples_per_pixel: 16, variance_threshold: 0.02, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 24.0, aperture: [20.955, 15.2908], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 10.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/instancing.usda"], invisible_overrides: Some(0) } +layer: $DIR/instancing.usda +warning: Warning { code: AssetUnsupportedByHost, kind: Skipped, count: 1, prims: [], message: "No asset loader: environment map $DIR/sky_gradient.exr ignored — the dome falls back to its uniform colour. Use Scene::from_usd_with_assets to supply one." } +lights: 2 +light 0: area name Some("/World/Key") lpe None pmf 0.5 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 1: dome name Some("/World/Sky") lpe None pmf 0.5 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 13 geometries, PrimitiveBreakdown { triangles: 4, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 11 } top level, PrimitiveBreakdown { triangles: 36, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 11 } unique, motion false +geom 0: material #0 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:32b8fc7fab01f734 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=2:32b8fc7fab01f734 +geom 1: material #1 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:58d360c7905fa0c5 camera=2:58d360c7905fa0c5 shadow=2:58d360c7905fa0c5 indirect=2:58d360c7905fa0c5 +geom 2: material #2 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.2599211 motion [] pieces all=8:cb8213f19e1889e5 camera=8:cb8213f19e1889e5 shadow=8:cb8213f19e1889e5 indirect=8:cb8213f19e1889e5 +geom 3: material #2 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0079368 motion [] pieces all=8:9f690ca55fcd34b1 camera=8:9f690ca55fcd34b1 shadow=8:9f690ca55fcd34b1 indirect=8:9f690ca55fcd34b1 +geom 4: material #2 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.6378974 motion [] pieces all=8:bf00f68921a1ff6d camera=8:bf00f68921a1ff6d shadow=8:bf00f68921a1ff6d indirect=8:bf00f68921a1ff6d +geom 5: material #2 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.1370313 motion [] pieces all=8:d86fbb7901e66cf5 camera=8:d86fbb7901e66cf5 shadow=8:d86fbb7901e66cf5 indirect=8:d86fbb7901e66cf5 +geom 6: material #2 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.2962416 motion [] pieces all=8:100fb1034ea0bf45 camera=8:100fb1034ea0bf45 shadow=8:100fb1034ea0bf45 indirect=8:100fb1034ea0bf45 +geom 7: material #2 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.7958115 motion [] pieces all=12:01961e1714f11539 camera=12:01961e1714f11539 shadow=12:01961e1714f11539 indirect=12:01961e1714f11539 +geom 8: material #3 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.7958115 motion [] pieces all=12:94d0d184098e3ffd camera=12:94d0d184098e3ffd shadow=12:94d0d184098e3ffd indirect=12:94d0d184098e3ffd +geom 9: material #2 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=12:d4ab18518f82edfd camera=12:d4ab18518f82edfd shadow=12:d4ab18518f82edfd indirect=12:d4ab18518f82edfd +geom 10: material #3 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=12:83f43ac124235a31 camera=12:83f43ac124235a31 shadow=12:83f43ac124235a31 indirect=12:83f43ac124235a31 +geom 11: material #2 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=12:295cfa9554179a8d camera=12:295cfa9554179a8d shadow=12:295cfa9554179a8d indirect=12:295cfa9554179a8d +geom 12: material #3 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=12:3ea47e28253b632d camera=12:3ea47e28253b632d shadow=12:3ea47e28253b632d indirect=12:3ea47e28253b632d +provenance material /World/Looks/Copper: MaterialOrigin { slots: [8, 10, 12], displaced: false } +provenance material /World/Looks/Emerald: MaterialOrigin { slots: [2, 3, 4, 5, 6, 7, 9, 11], displaced: false } +provenance material /World/Looks/Grey: MaterialOrigin { slots: [1], displaced: false } +provenance light /World/Key: LightOrigin { index: 0, geoms: 0..1 } +provenance light /World/Sky: LightOrigin { index: 1, geoms: 13..13 } +provenance geometry 0..1: /World/Key +provenance geometry 1..2: /World/Floor +provenance geometry 2..7: /World/Scatter +provenance geometry 7..9: /World/TowerC +provenance geometry 9..11: /World/TowerB +provenance geometry 11..13: /World/TowerA +provenance mesh: MeshOrigin { geom_id: 1, slot: 0, baked: true, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 6334356113930313994, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 1: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 6822106956337694752, n_points: 6, n_indices: 24, n_uvs: None, smooth: false, material: 1 }), placements: 0, shared: true, displaced: false } +provenance mesh slot 2: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 2005039782605831059, n_points: 8, n_indices: 24, n_uvs: None, smooth: false, material: 1 }), placements: 0, shared: true, displaced: false } +provenance mesh slot 3: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 2103454763208511752, n_points: 8, n_indices: 24, n_uvs: None, smooth: false, material: 2 }), placements: 0, shared: true, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/World/Cam"), cameras: ["/World/Cam"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/World/Cam"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/instancing_usda-c51a6942a8212cb9-1.image b/crates/crust-core/tests/data/import_baselines/instancing_usda-c51a6942a8212cb9-1.image new file mode 100644 index 000000000..04f5b4e66 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/instancing_usda-c51a6942a8212cb9-1.image @@ -0,0 +1 @@ +480x270 16spp clamp-off bc733f3dea963f51 diff --git a/crates/crust-core/tests/data/import_baselines/instantaneous_usda-3e155a939a6cc6cd-1.digest b/crates/crust-core/tests/data/import_baselines/instantaneous_usda-3e155a939a6cc6cd-1.digest new file mode 100644 index 000000000..025ee853d --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/instantaneous_usda-3e155a939a6cc6cd-1.digest @@ -0,0 +1,35 @@ +time: Some(5.0) +working space: Linear Rec.709 (sRGB) +camera path: Some("/World/Cam") +camera: Camera { origin: Vec3A(0.0, 1.5, 7.0), lower_left_corner: Vec3A(-5.6632595, -1.6855836, -3.0), horizontal: Vec3A(11.326519, 0.0, 0.0), vertical: Vec3A(0.0, 6.371167, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: Some("/Render/settings") +settings: RenderSettings { samples_per_pixel: 16, max_depth: 4, width: 96, height: 54, region: PixelRect { x0: 0, y0: 0, x1: 96, y1: 54 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 5, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [AovProduct { prim_path: "/Render/comp", name: "instant.exr", vars: [AovVar { prim_path: "/Render/comp/C", name: "C", channel_prefix: None, source: Color, components: 3, precision: Float, accumulation: Filtered, clear: 0.0, expression: None, raw: false, variance: false }, AovVar { prim_path: "/Render/comp/forward", name: "forward", channel_prefix: None, source: MotionVector, components: 2, precision: Float, accumulation: Closest, clear: 0.0, expression: None, raw: false, variance: false }], attributes: [] }], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 24.0, aperture: [20.955, 15.2908], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 10.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/instantaneous.usda", "$ROOT/samples/animation.usda"], invisible_overrides: Some(0) } +layer: $ROOT/samples/animation.usda +layer: $DIR/instantaneous.usda +warning: Warning { code: AssetUnsupportedByHost, kind: Skipped, count: 1, prims: [], message: "No asset loader: environment map $ROOT/samples/sky_gradient.exr ignored — the dome falls back to its uniform colour. Use Scene::from_usd_with_assets to supply one." } +warning: Warning { code: CameraShutterInstantaneous, kind: Approximated, count: 1, prims: ["/World/Mover"], message: "A motionvector var is requested, but the camera's shutter is instantaneous: the time-sampled transforms of 1 drawn prim's move nothing and their vectors read zero (the first at /World/Mover). Author the camera's shutter:open / shutter:close to measure them" } +lights: 2 +light 0: area name Some("/World/KeyLight") lpe None pmf 0.5 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 1: dome name Some("/World/Sky") lpe None pmf 0.5 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 4 geometries, PrimitiveBreakdown { triangles: 6, spheres: 1, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 6, spheres: 1, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +geom 0: material #0 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:9de8214b59f6ec57 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=2:9de8214b59f6ec57 +geom 1: material #1 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:be0b97004c4d3e85 camera=2:be0b97004c4d3e85 shadow=2:be0b97004c4d3e85 indirect=2:be0b97004c4d3e85 +geom 2: material #1 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:04a229f6b721d5f0 camera=2:04a229f6b721d5f0 shadow=2:04a229f6b721d5f0 indirect=2:04a229f6b721d5f0 +geom 3: material #1 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:eca0c2f96d67613b camera=1:eca0c2f96d67613b shadow=1:eca0c2f96d67613b indirect=1:eca0c2f96d67613b +provenance light /World/KeyLight: LightOrigin { index: 0, geoms: 0..1 } +provenance light /World/Sky: LightOrigin { index: 1, geoms: 4..4 } +provenance geometry 0..1: /World/KeyLight +provenance geometry 1..2: /World/Floor +provenance geometry 2..3: /World/Card +provenance geometry 3..4: /World/Mover +provenance mesh: MeshOrigin { geom_id: 1, slot: 0, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 2, slot: 1, baked: true, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 8416296582947184296, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 1: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 16680805309457723353, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [3] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: Some(5.0), camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/World/Cam"), cameras: ["/World/Cam"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/World/Cam"), offsets: [0, 0], interval: None, query: true, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/instantaneous_usda-3e155a939a6cc6cd-1.image b/crates/crust-core/tests/data/import_baselines/instantaneous_usda-3e155a939a6cc6cd-1.image new file mode 100644 index 000000000..4860355dc --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/instantaneous_usda-3e155a939a6cc6cd-1.image @@ -0,0 +1 @@ +96x54 16spp clamp-off 2dca5e2412c55c50 diff --git a/crates/crust-core/tests/data/import_baselines/int_id_usda-520c4dc179153d4f-1.digest b/crates/crust-core/tests/data/import_baselines/int_id_usda-520c4dc179153d4f-1.digest new file mode 100644 index 000000000..cf0cf338f --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/int_id_usda-520c4dc179153d4f-1.digest @@ -0,0 +1,22 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/World/cam") +camera: Camera { origin: Vec3A(0.0, 0.0, 10.0), lower_left_corner: Vec3A(-2.0955, -1.5716249, 0.0), horizontal: Vec3A(4.191, 0.0, 0.0), vertical: Vec3A(0.0, 3.1432498, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: Some("/Render/settings") +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 48, height: 36, region: PixelRect { x0: 0, y0: 0, x1: 48, y1: 36 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [AovProduct { prim_path: "/Render/p", name: "p.exr", vars: [AovVar { prim_path: "/Render/P", name: "P", channel_prefix: None, source: P, components: 3, precision: Float, accumulation: Closest, clear: 0.0, expression: None, raw: false, variance: false }, AovVar { prim_path: "/Render/objectId", name: "objectId", channel_prefix: None, source: Primvar(PrimvarSource { index: 0, components: 1, role: Integer }), components: 1, precision: Uint, accumulation: Closest, clear: 0.0, expression: None, raw: false, variance: false }], attributes: [] }], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 50.0, aperture: [20.955, 15.2908], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 10.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/int_id.usda"], invisible_overrides: Some(0) } +layer: $DIR/int_id.usda +lights: 1 +light 0: dome name Some("/World/dome") lpe None pmf 1.0 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 1 geometries, PrimitiveBreakdown { triangles: 2, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 2, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov Some((Some(0), false)) swapped false curves false scale 1.0 motion [] pieces all=2:32f1a52c797bfee5 camera=2:32f1a52c797bfee5 shadow=2:32f1a52c797bfee5 indirect=2:32f1a52c797bfee5 +provenance light /World/dome: LightOrigin { index: 0, geoms: 1..1 } +provenance geometry 0..1: /World/mesh +provenance mesh: MeshOrigin { geom_id: 0, slot: 0, baked: true, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 18307585920983551366, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/World/cam"), cameras: ["/World/cam"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [("objectId", 1)], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/World/cam"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/int_id_usda-520c4dc179153d4f-1.image b/crates/crust-core/tests/data/import_baselines/int_id_usda-520c4dc179153d4f-1.image new file mode 100644 index 000000000..648a9f248 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/int_id_usda-520c4dc179153d4f-1.image @@ -0,0 +1 @@ +48x36 16spp clamp-off 54407d51eeed59ca diff --git a/crates/crust-core/tests/data/import_baselines/invalid_light_sizes_usda-9c386d5a319bfe23-1.digest b/crates/crust-core/tests/data/import_baselines/invalid_light_sizes_usda-9c386d5a319bfe23-1.digest new file mode 100644 index 000000000..374ec438d --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/invalid_light_sizes_usda-9c386d5a319bfe23-1.digest @@ -0,0 +1,22 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: None +camera: Camera { origin: Vec3A(15.0, 3.0, 3.0), lower_left_corner: Vec3A(4.8863316, -0.044797063, 4.174048), horizontal: Vec3A(1.2295314, 0.0, -6.147657), vertical: Vec3A(-0.44830504, 3.4967792, -0.08966101), u: Vec3A(0.19611613, 0.0, -0.9805807), v: Vec3A(-0.1271232, 0.991561, -0.02542464), lens_radius: 0.05, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: None +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 640, height: 360, region: PixelRect { x0: 0, y0: 0, x1: 640, y1: 360 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: None, depth_of_field: true, motion_blur: false, layer_stack: ["$DIR/invalid_light_sizes.usda"], invisible_overrides: Some(0) } +layer: $DIR/invalid_light_sizes.usda +warning: Warning { code: LightDegenerateShape, kind: Skipped, count: 4, prims: ["/World/NegativeDisk", "/World/ZeroTube", "/World/ZeroSphere", "/World/FlatRect"], message: "/World/NegativeDisk: Disk light radius -1 must be finite and positive — skipped" } +warning: Warning { code: CameraMissing, kind: Skipped, count: 1, prims: [], message: "USD stage has no UsdGeomCamera — falling back to world::get_settings camera" } +lights: 1 +light 0: area name Some("/World/Fine") lpe None pmf 1.0 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 1 geometries, PrimitiveBreakdown { triangles: 0, spheres: 0, disks: 1, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 0, spheres: 0, disks: 1, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +geom 0: material #0 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:81f922b1ea201c01 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=1:81f922b1ea201c01 +provenance light /World/Fine: LightOrigin { index: 0, geoms: 0..1 } +provenance geometry 0..1: /World/Fine +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: None, cameras: [], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: None, offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/invalid_light_sizes_usda-9c386d5a319bfe23-1.image b/crates/crust-core/tests/data/import_baselines/invalid_light_sizes_usda-9c386d5a319bfe23-1.image new file mode 100644 index 000000000..c734c5b1d --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/invalid_light_sizes_usda-9c386d5a319bfe23-1.image @@ -0,0 +1 @@ +640x360 16spp clamp-off a04a09c0d4b5e325 diff --git a/crates/crust-core/tests/data/import_baselines/invalid_usda-d575a3c70872d8d6-1.digest b/crates/crust-core/tests/data/import_baselines/invalid_usda-d575a3c70872d8d6-1.digest new file mode 100644 index 000000000..8f1d08709 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/invalid_usda-d575a3c70872d8d6-1.digest @@ -0,0 +1,19 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/World/Cam") +camera: Camera { origin: Vec3A(0.0, 0.0, 5.0), lower_left_corner: Vec3A(-0.27183646, -0.15290801, -5.0), horizontal: Vec3A(0.5436729, 0.0, 0.0), vertical: Vec3A(0.0, 0.30581602, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: None +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 640, height: 360, region: PixelRect { x0: 0, y0: 0, x1: 640, y1: 360 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 500.0, aperture: [20.955, 15.2908], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 10.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/invalid.usda"], invisible_overrides: Some(0) } +layer: $DIR/invalid.usda +warning: Warning { code: CameraInvalidClipping, kind: Refused, count: 1, prims: ["/World/Cam"], message: "/World/Cam: clippingRange = (10, 2) is not 0 <= near < far; the camera clips to no range" } +lights: 0 +volumes: 0 +world: 1 geometries, PrimitiveBreakdown { triangles: 0, spheres: 1, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 0, spheres: 1, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:d5fa2ac5108a1585 camera=1:d5fa2ac5108a1585 shadow=1:d5fa2ac5108a1585 indirect=1:d5fa2ac5108a1585 +provenance geometry 0..1: /World/Ball +provenance spheres: [0] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/World/Cam"), cameras: ["/World/Cam"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/World/Cam"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/invalid_usda-d575a3c70872d8d6-1.image b/crates/crust-core/tests/data/import_baselines/invalid_usda-d575a3c70872d8d6-1.image new file mode 100644 index 000000000..c734c5b1d --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/invalid_usda-d575a3c70872d8d6-1.image @@ -0,0 +1 @@ +640x360 16spp clamp-off a04a09c0d4b5e325 diff --git a/crates/crust-core/tests/data/import_baselines/invariant_0_05_usda-adfdce9489c2fe04-1.digest b/crates/crust-core/tests/data/import_baselines/invariant_0_05_usda-adfdce9489c2fe04-1.digest new file mode 100644 index 000000000..9585caf43 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/invariant_0_05_usda-adfdce9489c2fe04-1.digest @@ -0,0 +1,26 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/World/cam") +camera: Camera { origin: Vec3A(0.0, 0.0, 0.0), lower_left_corner: Vec3A(-5.0, -3.75, -10.0), horizontal: Vec3A(10.0, 0.0, 0.0), vertical: Vec3A(0.0, 7.5, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: Some("/Render/settings") +settings: RenderSettings { samples_per_pixel: 16, max_depth: 2, width: 32, height: 24, region: PixelRect { x0: 0, y0: 0, x1: 32, y1: 24 }, min_samples_per_pixel: 4, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [AovProduct { prim_path: "/Render/p", name: "p.exr", vars: [AovVar { prim_path: "/Render/C", name: "C", channel_prefix: None, source: Color, components: 3, precision: Float, accumulation: Filtered, clear: 0.0, expression: None, raw: false, variance: false }, AovVar { prim_path: "/Render/matte", name: "matte", channel_prefix: None, source: Primvar(PrimvarSource { index: 0, components: 1, role: Float }), components: 1, precision: Float, accumulation: Filtered, clear: 0.0, expression: None, raw: false, variance: false }, AovVar { prim_path: "/Render/depth", name: "depth", channel_prefix: None, source: Depth, components: 1, precision: Float, accumulation: Closest, clear: inf, expression: None, raw: false, variance: false }, AovVar { prim_path: "/Render/depth_filtered", name: "depth_filtered", channel_prefix: None, source: Depth, components: 1, precision: Float, accumulation: Filtered, clear: inf, expression: None, raw: false, variance: false }, AovVar { prim_path: "/Render/variance", name: "variance", channel_prefix: None, source: Variance, components: 1, precision: Float, accumulation: Filtered, clear: 0.0, expression: None, raw: false, variance: false }, AovVar { prim_path: "/Render/look_out", name: "look_out", channel_prefix: None, source: Filter(FilterSource { display: false, filter: 0, output: 0, components: 3, radiance: true }), components: 3, precision: Float, accumulation: Filtered, clear: 0.0, expression: None, raw: false, variance: false }, AovVar { prim_path: "/Render/final", name: "final", channel_prefix: None, source: Filter(FilterSource { display: true, filter: 1, output: 0, components: 3, radiance: false }), components: 3, precision: Float, accumulation: Filtered, clear: 0.0, expression: None, raw: false, variance: false }], attributes: [] }], precomp: Some(Precomp { sample_filters: ["/Render/look"], display_filters: ["/Render/soft", "/Render/graded"], display: "final" }) } +pass: None +source: Source { lens: Some(Lens { focal_length: 24.0, aperture: [24.0, 18.0], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 10.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/invariant_0.05.usda"], invisible_overrides: Some(0) } +layer: $DIR/invariant_0.05.usda +lights: 1 +light 0: dome name Some("/World/sky") lpe None pmf 1.0 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 2 geometries, PrimitiveBreakdown { triangles: 4, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 4, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov Some((Some(0), false)) swapped false curves false scale 1.0 motion [] pieces all=2:2a13523c8e09c13d camera=2:2a13523c8e09c13d shadow=2:2a13523c8e09c13d indirect=2:2a13523c8e09c13d +geom 1: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:31db52e4afd4a225 camera=2:31db52e4afd4a225 shadow=2:31db52e4afd4a225 indirect=2:31db52e4afd4a225 +provenance light /World/sky: LightOrigin { index: 0, geoms: 0..0 } +provenance geometry 0..1: /World/Card +provenance geometry 1..2: /World/Wall +provenance mesh: MeshOrigin { geom_id: 0, slot: 0, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 1, slot: 1, baked: true, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 3430351340666728903, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 1: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 13118596165941616386, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: true, working: None, camera: Some("/World/cam"), cameras: ["/World/cam"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [("matte", 1)], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/World/cam"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/invariant_0_05_usda-adfdce9489c2fe04-1.image b/crates/crust-core/tests/data/import_baselines/invariant_0_05_usda-adfdce9489c2fe04-1.image new file mode 100644 index 000000000..d5b7dcc3f --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/invariant_0_05_usda-adfdce9489c2fe04-1.image @@ -0,0 +1 @@ +32x24 16spp clamp-off b7d3d9dfd985022e diff --git a/crates/crust-core/tests/data/import_baselines/invariant_0_usda-4ea5be31deb326f6-1.digest b/crates/crust-core/tests/data/import_baselines/invariant_0_usda-4ea5be31deb326f6-1.digest new file mode 100644 index 000000000..0ccae4fdb --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/invariant_0_usda-4ea5be31deb326f6-1.digest @@ -0,0 +1,26 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/World/cam") +camera: Camera { origin: Vec3A(0.0, 0.0, 0.0), lower_left_corner: Vec3A(-5.0, -3.75, -10.0), horizontal: Vec3A(10.0, 0.0, 0.0), vertical: Vec3A(0.0, 7.5, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: Some("/Render/settings") +settings: RenderSettings { samples_per_pixel: 16, max_depth: 2, width: 32, height: 24, region: PixelRect { x0: 0, y0: 0, x1: 32, y1: 24 }, min_samples_per_pixel: 4, variance_threshold: 0.0, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [AovProduct { prim_path: "/Render/p", name: "p.exr", vars: [AovVar { prim_path: "/Render/C", name: "C", channel_prefix: None, source: Color, components: 3, precision: Float, accumulation: Filtered, clear: 0.0, expression: None, raw: false, variance: false }, AovVar { prim_path: "/Render/matte", name: "matte", channel_prefix: None, source: Primvar(PrimvarSource { index: 0, components: 1, role: Float }), components: 1, precision: Float, accumulation: Filtered, clear: 0.0, expression: None, raw: false, variance: false }, AovVar { prim_path: "/Render/depth", name: "depth", channel_prefix: None, source: Depth, components: 1, precision: Float, accumulation: Closest, clear: inf, expression: None, raw: false, variance: false }, AovVar { prim_path: "/Render/depth_filtered", name: "depth_filtered", channel_prefix: None, source: Depth, components: 1, precision: Float, accumulation: Filtered, clear: inf, expression: None, raw: false, variance: false }, AovVar { prim_path: "/Render/variance", name: "variance", channel_prefix: None, source: Variance, components: 1, precision: Float, accumulation: Filtered, clear: 0.0, expression: None, raw: false, variance: false }, AovVar { prim_path: "/Render/look_out", name: "look_out", channel_prefix: None, source: Filter(FilterSource { display: false, filter: 0, output: 0, components: 3, radiance: true }), components: 3, precision: Float, accumulation: Filtered, clear: 0.0, expression: None, raw: false, variance: false }, AovVar { prim_path: "/Render/final", name: "final", channel_prefix: None, source: Filter(FilterSource { display: true, filter: 1, output: 0, components: 3, radiance: false }), components: 3, precision: Float, accumulation: Filtered, clear: 0.0, expression: None, raw: false, variance: false }], attributes: [] }], precomp: Some(Precomp { sample_filters: ["/Render/look"], display_filters: ["/Render/soft", "/Render/graded"], display: "final" }) } +pass: None +source: Source { lens: Some(Lens { focal_length: 24.0, aperture: [24.0, 18.0], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 10.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/invariant_0.usda"], invisible_overrides: Some(0) } +layer: $DIR/invariant_0.usda +lights: 1 +light 0: dome name Some("/World/sky") lpe None pmf 1.0 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 2 geometries, PrimitiveBreakdown { triangles: 4, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 4, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov Some((Some(0), false)) swapped false curves false scale 1.0 motion [] pieces all=2:2a13523c8e09c13d camera=2:2a13523c8e09c13d shadow=2:2a13523c8e09c13d indirect=2:2a13523c8e09c13d +geom 1: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:31db52e4afd4a225 camera=2:31db52e4afd4a225 shadow=2:31db52e4afd4a225 indirect=2:31db52e4afd4a225 +provenance light /World/sky: LightOrigin { index: 0, geoms: 0..0 } +provenance geometry 0..1: /World/Card +provenance geometry 1..2: /World/Wall +provenance mesh: MeshOrigin { geom_id: 0, slot: 0, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 1, slot: 1, baked: true, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 3430351340666728903, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 1: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 13118596165941616386, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: true, working: None, camera: Some("/World/cam"), cameras: ["/World/cam"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [("matte", 1)], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/World/cam"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/invariant_0_usda-4ea5be31deb326f6-1.image b/crates/crust-core/tests/data/import_baselines/invariant_0_usda-4ea5be31deb326f6-1.image new file mode 100644 index 000000000..f08c49d36 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/invariant_0_usda-4ea5be31deb326f6-1.image @@ -0,0 +1 @@ +32x24 16spp clamp-off e72b7b7cff87e77d diff --git a/crates/crust-core/tests/data/import_baselines/leaf_usda-be27c43b70391f12-1.digest b/crates/crust-core/tests/data/import_baselines/leaf_usda-be27c43b70391f12-1.digest new file mode 100644 index 000000000..fbe1322a0 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/leaf_usda-be27c43b70391f12-1.digest @@ -0,0 +1,22 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: None +camera: Camera { origin: Vec3A(15.0, 3.0, 3.0), lower_left_corner: Vec3A(4.8863316, -0.044797063, 4.174048), horizontal: Vec3A(1.2295314, 0.0, -6.147657), vertical: Vec3A(-0.44830504, 3.4967792, -0.08966101), u: Vec3A(0.19611613, 0.0, -0.9805807), v: Vec3A(-0.1271232, 0.991561, -0.02542464), lens_radius: 0.05, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: None +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 640, height: 360, region: PixelRect { x0: 0, y0: 0, x1: 640, y1: 360 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: None, depth_of_field: true, motion_blur: false, layer_stack: ["$DIR/leaf.usda"], invisible_overrides: Some(0) } +layer: $DIR/leaf.usda +warning: Warning { code: CameraMissing, kind: Skipped, count: 1, prims: [], message: "USD stage has no UsdGeomCamera — falling back to world::get_settings camera" } +lights: 0 +volumes: 0 +world: 1 geometries, PrimitiveBreakdown { triangles: 2, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 2, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +geom 0: material #0 Signature { kind: "UsdPreviewSurface (textured)", cutout: true, straight: false, boundary: false, emits: false, uv: true, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv Some(0) shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:02ff87c392969355 camera=2:02ff87c392969355 shadow=2:02ff87c392969355 indirect=2:02ff87c392969355 +provenance material /World/Asset/Leaf: MaterialOrigin { slots: [0], displaced: false } +provenance geometry 0..1: /World/Card +provenance mesh: MeshOrigin { geom_id: 0, slot: 0, baked: true, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 17822791014403781691, n_points: 4, n_indices: 4, n_uvs: Some(4), smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: None, cameras: [], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: None, offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/leaf_usda-be27c43b70391f12-1.image b/crates/crust-core/tests/data/import_baselines/leaf_usda-be27c43b70391f12-1.image new file mode 100644 index 000000000..c734c5b1d --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/leaf_usda-be27c43b70391f12-1.image @@ -0,0 +1 @@ +640x360 16spp clamp-off a04a09c0d4b5e325 diff --git a/crates/crust-core/tests/data/import_baselines/leaf_usda-be27c43b70391f12-2.digest b/crates/crust-core/tests/data/import_baselines/leaf_usda-be27c43b70391f12-2.digest new file mode 100644 index 000000000..fbe1322a0 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/leaf_usda-be27c43b70391f12-2.digest @@ -0,0 +1,22 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: None +camera: Camera { origin: Vec3A(15.0, 3.0, 3.0), lower_left_corner: Vec3A(4.8863316, -0.044797063, 4.174048), horizontal: Vec3A(1.2295314, 0.0, -6.147657), vertical: Vec3A(-0.44830504, 3.4967792, -0.08966101), u: Vec3A(0.19611613, 0.0, -0.9805807), v: Vec3A(-0.1271232, 0.991561, -0.02542464), lens_radius: 0.05, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: None +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 640, height: 360, region: PixelRect { x0: 0, y0: 0, x1: 640, y1: 360 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: None, depth_of_field: true, motion_blur: false, layer_stack: ["$DIR/leaf.usda"], invisible_overrides: Some(0) } +layer: $DIR/leaf.usda +warning: Warning { code: CameraMissing, kind: Skipped, count: 1, prims: [], message: "USD stage has no UsdGeomCamera — falling back to world::get_settings camera" } +lights: 0 +volumes: 0 +world: 1 geometries, PrimitiveBreakdown { triangles: 2, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 2, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +geom 0: material #0 Signature { kind: "UsdPreviewSurface (textured)", cutout: true, straight: false, boundary: false, emits: false, uv: true, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv Some(0) shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:02ff87c392969355 camera=2:02ff87c392969355 shadow=2:02ff87c392969355 indirect=2:02ff87c392969355 +provenance material /World/Asset/Leaf: MaterialOrigin { slots: [0], displaced: false } +provenance geometry 0..1: /World/Card +provenance mesh: MeshOrigin { geom_id: 0, slot: 0, baked: true, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 17822791014403781691, n_points: 4, n_indices: 4, n_uvs: Some(4), smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: None, cameras: [], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: None, offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/leaf_usda-be27c43b70391f12-2.image b/crates/crust-core/tests/data/import_baselines/leaf_usda-be27c43b70391f12-2.image new file mode 100644 index 000000000..c734c5b1d --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/leaf_usda-be27c43b70391f12-2.image @@ -0,0 +1 @@ +640x360 16spp clamp-off a04a09c0d4b5e325 diff --git a/crates/crust-core/tests/data/import_baselines/leaf_usda-c026046b07c5fbb8-1.digest b/crates/crust-core/tests/data/import_baselines/leaf_usda-c026046b07c5fbb8-1.digest new file mode 100644 index 000000000..fbe1322a0 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/leaf_usda-c026046b07c5fbb8-1.digest @@ -0,0 +1,22 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: None +camera: Camera { origin: Vec3A(15.0, 3.0, 3.0), lower_left_corner: Vec3A(4.8863316, -0.044797063, 4.174048), horizontal: Vec3A(1.2295314, 0.0, -6.147657), vertical: Vec3A(-0.44830504, 3.4967792, -0.08966101), u: Vec3A(0.19611613, 0.0, -0.9805807), v: Vec3A(-0.1271232, 0.991561, -0.02542464), lens_radius: 0.05, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: None +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 640, height: 360, region: PixelRect { x0: 0, y0: 0, x1: 640, y1: 360 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: None, depth_of_field: true, motion_blur: false, layer_stack: ["$DIR/leaf.usda"], invisible_overrides: Some(0) } +layer: $DIR/leaf.usda +warning: Warning { code: CameraMissing, kind: Skipped, count: 1, prims: [], message: "USD stage has no UsdGeomCamera — falling back to world::get_settings camera" } +lights: 0 +volumes: 0 +world: 1 geometries, PrimitiveBreakdown { triangles: 2, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 2, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +geom 0: material #0 Signature { kind: "UsdPreviewSurface (textured)", cutout: true, straight: false, boundary: false, emits: false, uv: true, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv Some(0) shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:02ff87c392969355 camera=2:02ff87c392969355 shadow=2:02ff87c392969355 indirect=2:02ff87c392969355 +provenance material /World/Asset/Leaf: MaterialOrigin { slots: [0], displaced: false } +provenance geometry 0..1: /World/Card +provenance mesh: MeshOrigin { geom_id: 0, slot: 0, baked: true, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 17822791014403781691, n_points: 4, n_indices: 4, n_uvs: Some(4), smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: None, cameras: [], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: None, offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/leaf_usda-c026046b07c5fbb8-1.image b/crates/crust-core/tests/data/import_baselines/leaf_usda-c026046b07c5fbb8-1.image new file mode 100644 index 000000000..c734c5b1d --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/leaf_usda-c026046b07c5fbb8-1.image @@ -0,0 +1 @@ +640x360 16spp clamp-off a04a09c0d4b5e325 diff --git a/crates/crust-core/tests/data/import_baselines/leaf_usda-d886c4e05035aaa7-1.digest b/crates/crust-core/tests/data/import_baselines/leaf_usda-d886c4e05035aaa7-1.digest new file mode 100644 index 000000000..fbe1322a0 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/leaf_usda-d886c4e05035aaa7-1.digest @@ -0,0 +1,22 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: None +camera: Camera { origin: Vec3A(15.0, 3.0, 3.0), lower_left_corner: Vec3A(4.8863316, -0.044797063, 4.174048), horizontal: Vec3A(1.2295314, 0.0, -6.147657), vertical: Vec3A(-0.44830504, 3.4967792, -0.08966101), u: Vec3A(0.19611613, 0.0, -0.9805807), v: Vec3A(-0.1271232, 0.991561, -0.02542464), lens_radius: 0.05, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: None +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 640, height: 360, region: PixelRect { x0: 0, y0: 0, x1: 640, y1: 360 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: None, depth_of_field: true, motion_blur: false, layer_stack: ["$DIR/leaf.usda"], invisible_overrides: Some(0) } +layer: $DIR/leaf.usda +warning: Warning { code: CameraMissing, kind: Skipped, count: 1, prims: [], message: "USD stage has no UsdGeomCamera — falling back to world::get_settings camera" } +lights: 0 +volumes: 0 +world: 1 geometries, PrimitiveBreakdown { triangles: 2, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 2, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +geom 0: material #0 Signature { kind: "UsdPreviewSurface (textured)", cutout: true, straight: false, boundary: false, emits: false, uv: true, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv Some(0) shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:02ff87c392969355 camera=2:02ff87c392969355 shadow=2:02ff87c392969355 indirect=2:02ff87c392969355 +provenance material /World/Asset/Leaf: MaterialOrigin { slots: [0], displaced: false } +provenance geometry 0..1: /World/Card +provenance mesh: MeshOrigin { geom_id: 0, slot: 0, baked: true, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 17822791014403781691, n_points: 4, n_indices: 4, n_uvs: Some(4), smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: None, cameras: [], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: None, offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/leaf_usda-d886c4e05035aaa7-1.image b/crates/crust-core/tests/data/import_baselines/leaf_usda-d886c4e05035aaa7-1.image new file mode 100644 index 000000000..c734c5b1d --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/leaf_usda-d886c4e05035aaa7-1.image @@ -0,0 +1 @@ +640x360 16spp clamp-off a04a09c0d4b5e325 diff --git a/crates/crust-core/tests/data/import_baselines/leaf_usda-e14e254e24f8bc2e-1.digest b/crates/crust-core/tests/data/import_baselines/leaf_usda-e14e254e24f8bc2e-1.digest new file mode 100644 index 000000000..fbe1322a0 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/leaf_usda-e14e254e24f8bc2e-1.digest @@ -0,0 +1,22 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: None +camera: Camera { origin: Vec3A(15.0, 3.0, 3.0), lower_left_corner: Vec3A(4.8863316, -0.044797063, 4.174048), horizontal: Vec3A(1.2295314, 0.0, -6.147657), vertical: Vec3A(-0.44830504, 3.4967792, -0.08966101), u: Vec3A(0.19611613, 0.0, -0.9805807), v: Vec3A(-0.1271232, 0.991561, -0.02542464), lens_radius: 0.05, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: None +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 640, height: 360, region: PixelRect { x0: 0, y0: 0, x1: 640, y1: 360 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: None, depth_of_field: true, motion_blur: false, layer_stack: ["$DIR/leaf.usda"], invisible_overrides: Some(0) } +layer: $DIR/leaf.usda +warning: Warning { code: CameraMissing, kind: Skipped, count: 1, prims: [], message: "USD stage has no UsdGeomCamera — falling back to world::get_settings camera" } +lights: 0 +volumes: 0 +world: 1 geometries, PrimitiveBreakdown { triangles: 2, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 2, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +geom 0: material #0 Signature { kind: "UsdPreviewSurface (textured)", cutout: true, straight: false, boundary: false, emits: false, uv: true, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv Some(0) shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:02ff87c392969355 camera=2:02ff87c392969355 shadow=2:02ff87c392969355 indirect=2:02ff87c392969355 +provenance material /World/Asset/Leaf: MaterialOrigin { slots: [0], displaced: false } +provenance geometry 0..1: /World/Card +provenance mesh: MeshOrigin { geom_id: 0, slot: 0, baked: true, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 17822791014403781691, n_points: 4, n_indices: 4, n_uvs: Some(4), smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: None, cameras: [], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: None, offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/leaf_usda-e14e254e24f8bc2e-1.image b/crates/crust-core/tests/data/import_baselines/leaf_usda-e14e254e24f8bc2e-1.image new file mode 100644 index 000000000..c734c5b1d --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/leaf_usda-e14e254e24f8bc2e-1.image @@ -0,0 +1 @@ +640x360 16spp clamp-off a04a09c0d4b5e325 diff --git a/crates/crust-core/tests/data/import_baselines/left_handed_baked_usda-9363c3fa472cdcde-1.digest b/crates/crust-core/tests/data/import_baselines/left_handed_baked_usda-9363c3fa472cdcde-1.digest new file mode 100644 index 000000000..07dc11f34 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/left_handed_baked_usda-9363c3fa472cdcde-1.digest @@ -0,0 +1,21 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: None +camera: Camera { origin: Vec3A(15.0, 3.0, 3.0), lower_left_corner: Vec3A(4.8863316, -0.044797063, 4.174048), horizontal: Vec3A(1.2295314, 0.0, -6.147657), vertical: Vec3A(-0.44830504, 3.4967792, -0.08966101), u: Vec3A(0.19611613, 0.0, -0.9805807), v: Vec3A(-0.1271232, 0.991561, -0.02542464), lens_radius: 0.05, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: None +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 640, height: 360, region: PixelRect { x0: 0, y0: 0, x1: 640, y1: 360 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: None, depth_of_field: true, motion_blur: false, layer_stack: ["$DIR/left_handed_baked.usda"], invisible_overrides: Some(0) } +layer: $DIR/left_handed_baked.usda +warning: Warning { code: CameraMissing, kind: Skipped, count: 1, prims: [], message: "USD stage has no UsdGeomCamera — falling back to world::get_settings camera" } +lights: 0 +volumes: 0 +world: 1 geometries, PrimitiveBreakdown { triangles: 2, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 2, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:86c6f40691773ee5 camera=2:86c6f40691773ee5 shadow=2:86c6f40691773ee5 indirect=2:86c6f40691773ee5 +provenance geometry 0..1: /World/A/Quad +provenance mesh: MeshOrigin { geom_id: 0, slot: 0, baked: true, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 12696385469104175492, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: None, cameras: [], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: None, offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/left_handed_baked_usda-9363c3fa472cdcde-1.image b/crates/crust-core/tests/data/import_baselines/left_handed_baked_usda-9363c3fa472cdcde-1.image new file mode 100644 index 000000000..c734c5b1d --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/left_handed_baked_usda-9363c3fa472cdcde-1.image @@ -0,0 +1 @@ +640x360 16spp clamp-off a04a09c0d4b5e325 diff --git a/crates/crust-core/tests/data/import_baselines/left_handed_instanced_usda-f9d8d0fbabf00605-1.digest b/crates/crust-core/tests/data/import_baselines/left_handed_instanced_usda-f9d8d0fbabf00605-1.digest new file mode 100644 index 000000000..2d9a77793 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/left_handed_instanced_usda-f9d8d0fbabf00605-1.digest @@ -0,0 +1,24 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: None +camera: Camera { origin: Vec3A(15.0, 3.0, 3.0), lower_left_corner: Vec3A(4.8863316, -0.044797063, 4.174048), horizontal: Vec3A(1.2295314, 0.0, -6.147657), vertical: Vec3A(-0.44830504, 3.4967792, -0.08966101), u: Vec3A(0.19611613, 0.0, -0.9805807), v: Vec3A(-0.1271232, 0.991561, -0.02542464), lens_radius: 0.05, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: None +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 640, height: 360, region: PixelRect { x0: 0, y0: 0, x1: 640, y1: 360 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: None, depth_of_field: true, motion_blur: false, layer_stack: ["$DIR/left_handed_instanced.usda"], invisible_overrides: Some(0) } +layer: $DIR/left_handed_instanced.usda +warning: Warning { code: CameraMissing, kind: Skipped, count: 1, prims: [], message: "USD stage has no UsdGeomCamera — falling back to world::get_settings camera" } +lights: 0 +volumes: 0 +world: 2 geometries, PrimitiveBreakdown { triangles: 0, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 2 } top level, PrimitiveBreakdown { triangles: 2, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 2 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:a7251036e0a63935 camera=2:a7251036e0a63935 shadow=2:a7251036e0a63935 indirect=2:a7251036e0a63935 +geom 1: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:86c6f40691773ee5 camera=2:86c6f40691773ee5 shadow=2:86c6f40691773ee5 indirect=2:86c6f40691773ee5 +provenance geometry 0..1: /World/B/Quad +provenance geometry 1..2: /World/A/Quad +provenance mesh: MeshOrigin { geom_id: 0, slot: 0, baked: false, moving: false } +provenance mesh: MeshOrigin { geom_id: 1, slot: 0, baked: false, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 12696385469104175492, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 0 }), placements: 2, shared: false, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: None, cameras: [], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: None, offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/left_handed_instanced_usda-f9d8d0fbabf00605-1.image b/crates/crust-core/tests/data/import_baselines/left_handed_instanced_usda-f9d8d0fbabf00605-1.image new file mode 100644 index 000000000..c734c5b1d --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/left_handed_instanced_usda-f9d8d0fbabf00605-1.image @@ -0,0 +1 @@ +640x360 16spp clamp-off a04a09c0d4b5e325 diff --git a/crates/crust-core/tests/data/import_baselines/left_handed_mirrored_usda-b73e3433c9e6bccf-1.digest b/crates/crust-core/tests/data/import_baselines/left_handed_mirrored_usda-b73e3433c9e6bccf-1.digest new file mode 100644 index 000000000..888ef6323 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/left_handed_mirrored_usda-b73e3433c9e6bccf-1.digest @@ -0,0 +1,21 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: None +camera: Camera { origin: Vec3A(15.0, 3.0, 3.0), lower_left_corner: Vec3A(4.8863316, -0.044797063, 4.174048), horizontal: Vec3A(1.2295314, 0.0, -6.147657), vertical: Vec3A(-0.44830504, 3.4967792, -0.08966101), u: Vec3A(0.19611613, 0.0, -0.9805807), v: Vec3A(-0.1271232, 0.991561, -0.02542464), lens_radius: 0.05, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: None +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 640, height: 360, region: PixelRect { x0: 0, y0: 0, x1: 640, y1: 360 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: None, depth_of_field: true, motion_blur: false, layer_stack: ["$DIR/left_handed_mirrored.usda"], invisible_overrides: Some(0) } +layer: $DIR/left_handed_mirrored.usda +warning: Warning { code: CameraMissing, kind: Skipped, count: 1, prims: [], message: "USD stage has no UsdGeomCamera — falling back to world::get_settings camera" } +lights: 0 +volumes: 0 +world: 1 geometries, PrimitiveBreakdown { triangles: 2, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 2, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:bf8483ca0aa0dce5 camera=2:bf8483ca0aa0dce5 shadow=2:bf8483ca0aa0dce5 indirect=2:bf8483ca0aa0dce5 +provenance geometry 0..1: /World/M/Quad +provenance mesh: MeshOrigin { geom_id: 0, slot: 0, baked: true, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 12696385469104175492, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: None, cameras: [], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: None, offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/left_handed_mirrored_usda-b73e3433c9e6bccf-1.image b/crates/crust-core/tests/data/import_baselines/left_handed_mirrored_usda-b73e3433c9e6bccf-1.image new file mode 100644 index 000000000..c734c5b1d --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/left_handed_mirrored_usda-b73e3433c9e6bccf-1.image @@ -0,0 +1 @@ +640x360 16spp clamp-off a04a09c0d4b5e325 diff --git a/crates/crust-core/tests/data/import_baselines/left_handed_subdivided_usda-bd37842befe48e18-1.digest b/crates/crust-core/tests/data/import_baselines/left_handed_subdivided_usda-bd37842befe48e18-1.digest new file mode 100644 index 000000000..ee1d59a46 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/left_handed_subdivided_usda-bd37842befe48e18-1.digest @@ -0,0 +1,21 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: None +camera: Camera { origin: Vec3A(15.0, 3.0, 3.0), lower_left_corner: Vec3A(4.8863316, -0.044797063, 4.174048), horizontal: Vec3A(1.2295314, 0.0, -6.147657), vertical: Vec3A(-0.44830504, 3.4967792, -0.08966101), u: Vec3A(0.19611613, 0.0, -0.9805807), v: Vec3A(-0.1271232, 0.991561, -0.02542464), lens_radius: 0.05, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: None +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 640, height: 360, region: PixelRect { x0: 0, y0: 0, x1: 640, y1: 360 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: None, depth_of_field: true, motion_blur: false, layer_stack: ["$DIR/left_handed_subdivided.usda"], invisible_overrides: Some(0) } +layer: $DIR/left_handed_subdivided.usda +warning: Warning { code: CameraMissing, kind: Skipped, count: 1, prims: [], message: "USD stage has no UsdGeomCamera — falling back to world::get_settings camera" } +lights: 0 +volumes: 0 +world: 1 geometries, PrimitiveBreakdown { triangles: 32, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 32, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=32:66fc8b710415fb25 camera=32:66fc8b710415fb25 shadow=32:66fc8b710415fb25 indirect=32:66fc8b710415fb25 +provenance geometry 0..1: /World/Quad +provenance mesh: MeshOrigin { geom_id: 0, slot: 0, baked: true, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 1634387286851437130, n_points: 25, n_indices: 64, n_uvs: None, smooth: true, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: Some(2), subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 2, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: None, cameras: [], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: None, offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/left_handed_subdivided_usda-bd37842befe48e18-1.image b/crates/crust-core/tests/data/import_baselines/left_handed_subdivided_usda-bd37842befe48e18-1.image new file mode 100644 index 000000000..c734c5b1d --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/left_handed_subdivided_usda-bd37842befe48e18-1.image @@ -0,0 +1 @@ +640x360 16spp clamp-off a04a09c0d4b5e325 diff --git a/crates/crust-core/tests/data/import_baselines/left_handed_tri_usda-ba795e2eb1c56aef-1.digest b/crates/crust-core/tests/data/import_baselines/left_handed_tri_usda-ba795e2eb1c56aef-1.digest new file mode 100644 index 000000000..2989f157b --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/left_handed_tri_usda-ba795e2eb1c56aef-1.digest @@ -0,0 +1,21 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: None +camera: Camera { origin: Vec3A(15.0, 3.0, 3.0), lower_left_corner: Vec3A(4.8863316, -0.044797063, 4.174048), horizontal: Vec3A(1.2295314, 0.0, -6.147657), vertical: Vec3A(-0.44830504, 3.4967792, -0.08966101), u: Vec3A(0.19611613, 0.0, -0.9805807), v: Vec3A(-0.1271232, 0.991561, -0.02542464), lens_radius: 0.05, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: None +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 640, height: 360, region: PixelRect { x0: 0, y0: 0, x1: 640, y1: 360 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: None, depth_of_field: true, motion_blur: false, layer_stack: ["$DIR/left_handed_tri.usda"], invisible_overrides: Some(0) } +layer: $DIR/left_handed_tri.usda +warning: Warning { code: CameraMissing, kind: Skipped, count: 1, prims: [], message: "USD stage has no UsdGeomCamera — falling back to world::get_settings camera" } +lights: 0 +volumes: 0 +world: 1 geometries, PrimitiveBreakdown { triangles: 1, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 1, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:7d46b655e85855d5 camera=1:7d46b655e85855d5 shadow=1:7d46b655e85855d5 indirect=1:7d46b655e85855d5 +provenance geometry 0..1: /World/Tri +provenance mesh: MeshOrigin { geom_id: 0, slot: 0, baked: true, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 4650619398470359651, n_points: 3, n_indices: 3, n_uvs: None, smooth: true, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: None, cameras: [], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: None, offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/left_handed_tri_usda-ba795e2eb1c56aef-1.image b/crates/crust-core/tests/data/import_baselines/left_handed_tri_usda-ba795e2eb1c56aef-1.image new file mode 100644 index 000000000..c734c5b1d --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/left_handed_tri_usda-ba795e2eb1c56aef-1.image @@ -0,0 +1 @@ +640x360 16spp clamp-off a04a09c0d4b5e325 diff --git a/crates/crust-core/tests/data/import_baselines/lens_cm_usda-73dbd961c243712e-1.digest b/crates/crust-core/tests/data/import_baselines/lens_cm_usda-73dbd961c243712e-1.digest new file mode 100644 index 000000000..c14e04888 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/lens_cm_usda-73dbd961c243712e-1.digest @@ -0,0 +1,16 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/World/Cam") +camera: Camera { origin: Vec3A(0.0, 0.0, 0.0), lower_left_corner: Vec3A(-135.91823, -76.454, -500.0), horizontal: Vec3A(271.83646, 0.0, 0.0), vertical: Vec3A(0.0, 152.908, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 1.25, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: None +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 640, height: 360, region: PixelRect { x0: 0, y0: 0, x1: 640, y1: 360 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 50.0, aperture: [20.955, 15.2908], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 2.0, focus_distance: 500.0 }), depth_of_field: true, motion_blur: false, layer_stack: ["$DIR/lens_cm.usda"], invisible_overrides: Some(0) } +layer: $DIR/lens_cm.usda +lights: 0 +volumes: 0 +world: 0 geometries, PrimitiveBreakdown { triangles: 0, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 0, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/World/Cam"), cameras: ["/World/Cam"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/World/Cam"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/lens_cm_usda-73dbd961c243712e-1.image b/crates/crust-core/tests/data/import_baselines/lens_cm_usda-73dbd961c243712e-1.image new file mode 100644 index 000000000..c734c5b1d --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/lens_cm_usda-73dbd961c243712e-1.image @@ -0,0 +1 @@ +640x360 16spp clamp-off a04a09c0d4b5e325 diff --git a/crates/crust-core/tests/data/import_baselines/lens_fstop_usda-da4d1cf71564d625-1.digest b/crates/crust-core/tests/data/import_baselines/lens_fstop_usda-da4d1cf71564d625-1.digest new file mode 100644 index 000000000..b316aad64 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/lens_fstop_usda-da4d1cf71564d625-1.digest @@ -0,0 +1,16 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/cam") +camera: Camera { origin: Vec3A(0.0, 0.0, 0.0), lower_left_corner: Vec3A(-2.7183647, -1.5290802, -10.0), horizontal: Vec3A(5.4367294, 0.0, 0.0), vertical: Vec3A(0.0, 3.0581603, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.625, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: None +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 640, height: 360, region: PixelRect { x0: 0, y0: 0, x1: 640, y1: 360 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 50.0, aperture: [20.955, 15.2908], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 4.0, focus_distance: 10.0 }), depth_of_field: true, motion_blur: false, layer_stack: ["$DIR/lens_fstop.usda"], invisible_overrides: Some(0) } +layer: $DIR/lens_fstop.usda +lights: 0 +volumes: 0 +world: 0 geometries, PrimitiveBreakdown { triangles: 0, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 0, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/cam"), cameras: ["/cam"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/cam"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/lens_fstop_usda-da4d1cf71564d625-1.image b/crates/crust-core/tests/data/import_baselines/lens_fstop_usda-da4d1cf71564d625-1.image new file mode 100644 index 000000000..c734c5b1d --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/lens_fstop_usda-da4d1cf71564d625-1.image @@ -0,0 +1 @@ +640x360 16spp clamp-off a04a09c0d4b5e325 diff --git a/crates/crust-core/tests/data/import_baselines/lens_m_usda-983a5a6e5f39e694-1.digest b/crates/crust-core/tests/data/import_baselines/lens_m_usda-983a5a6e5f39e694-1.digest new file mode 100644 index 000000000..f9cc719f6 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/lens_m_usda-983a5a6e5f39e694-1.digest @@ -0,0 +1,16 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/World/Cam") +camera: Camera { origin: Vec3A(0.0, 0.0, 0.0), lower_left_corner: Vec3A(-2.7183647, -1.5290802, -10.0), horizontal: Vec3A(5.4367294, 0.0, 0.0), vertical: Vec3A(0.0, 3.0581603, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0125, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: None +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 640, height: 360, region: PixelRect { x0: 0, y0: 0, x1: 640, y1: 360 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 50.0, aperture: [20.955, 15.2908], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 2.0, focus_distance: 10.0 }), depth_of_field: true, motion_blur: false, layer_stack: ["$DIR/lens_m.usda"], invisible_overrides: Some(0) } +layer: $DIR/lens_m.usda +lights: 0 +volumes: 0 +world: 0 geometries, PrimitiveBreakdown { triangles: 0, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 0, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/World/Cam"), cameras: ["/World/Cam"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/World/Cam"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/lens_m_usda-983a5a6e5f39e694-1.image b/crates/crust-core/tests/data/import_baselines/lens_m_usda-983a5a6e5f39e694-1.image new file mode 100644 index 000000000..c734c5b1d --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/lens_m_usda-983a5a6e5f39e694-1.image @@ -0,0 +1 @@ +640x360 16spp clamp-off a04a09c0d4b5e325 diff --git a/crates/crust-core/tests/data/import_baselines/lens_unauthored_usda-24a6800a9f22c131-1.digest b/crates/crust-core/tests/data/import_baselines/lens_unauthored_usda-24a6800a9f22c131-1.digest new file mode 100644 index 000000000..5a44150ec --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/lens_unauthored_usda-24a6800a9f22c131-1.digest @@ -0,0 +1,16 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/World/Cam") +camera: Camera { origin: Vec3A(0.0, 0.0, 0.0), lower_left_corner: Vec3A(-2.7183647, -1.5290802, -10.0), horizontal: Vec3A(5.4367294, 0.0, 0.0), vertical: Vec3A(0.0, 3.0581603, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 1.25, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: None +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 640, height: 360, region: PixelRect { x0: 0, y0: 0, x1: 640, y1: 360 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 50.0, aperture: [20.955, 15.2908], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 2.0, focus_distance: 10.0 }), depth_of_field: true, motion_blur: false, layer_stack: ["$DIR/lens_unauthored.usda"], invisible_overrides: Some(0) } +layer: $DIR/lens_unauthored.usda +lights: 0 +volumes: 0 +world: 0 geometries, PrimitiveBreakdown { triangles: 0, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 0, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/World/Cam"), cameras: ["/World/Cam"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/World/Cam"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/lens_unauthored_usda-24a6800a9f22c131-1.image b/crates/crust-core/tests/data/import_baselines/lens_unauthored_usda-24a6800a9f22c131-1.image new file mode 100644 index 000000000..c734c5b1d --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/lens_unauthored_usda-24a6800a9f22c131-1.image @@ -0,0 +1 @@ +640x360 16spp clamp-off a04a09c0d4b5e325 diff --git a/crates/crust-core/tests/data/import_baselines/level_two_usda-9004a66abae4e107-1.digest b/crates/crust-core/tests/data/import_baselines/level_two_usda-9004a66abae4e107-1.digest new file mode 100644 index 000000000..d08f5daea --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/level_two_usda-9004a66abae4e107-1.digest @@ -0,0 +1,24 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/W/Cam") +camera: Camera { origin: Vec3A(0.0, 0.0, 0.0), lower_left_corner: Vec3A(-2.0955, -1.1787187, -10.0), horizontal: Vec3A(4.191, 0.0, 0.0), vertical: Vec3A(0.0, 2.3574374, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: Some("/Render/settings") +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 640, height: 360, region: PixelRect { x0: 0, y0: 0, x1: 640, y1: 360 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 50.0, aperture: [20.955, 11.787188], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 10.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/level_two.usda"], invisible_overrides: Some(0) } +layer: $DIR/level_two.usda +lights: 0 +volumes: 0 +world: 3 geometries, PrimitiveBreakdown { triangles: 192, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 2 } top level, PrimitiveBreakdown { triangles: 384, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 2 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=192:949758d384b32209 camera=192:949758d384b32209 shadow=192:949758d384b32209 indirect=192:949758d384b32209 +geom 1: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=192:5cc397e9d90a8ef9 camera=192:5cc397e9d90a8ef9 shadow=192:5cc397e9d90a8ef9 indirect=192:5cc397e9d90a8ef9 +geom 2: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=192:1eae59518f3f3e89 camera=192:1eae59518f3f3e89 shadow=192:1eae59518f3f3e89 indirect=192:1eae59518f3f3e89 +provenance geometry 0..2: /W/Scatter +provenance geometry 2..3: /W/Near +provenance mesh: MeshOrigin { geom_id: 2, slot: 1, baked: true, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 5789864894772039601, n_points: 98, n_indices: 384, n_uvs: None, smooth: true, material: 0 }), placements: 0, shared: true, displaced: false } +provenance mesh slot 1: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 5078605137533740532, n_points: 98, n_indices: 576, n_uvs: None, smooth: true, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: Some(2), subdivision_edge_length: Some(2.0), skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 2, adaptive: Some(ScreenKey([0, 0, 0, 1153360542, 0, 0, 0, 3212836864, 0, 3193345094, 1065353216, 0, 3193345094, 0, 3212836864, 3186714319, 0, 1065353216, 3186714319, 0, 0, 3212836864, 1073741824, 2])), domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/W/Cam"), cameras: ["/W/Cam"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/W/Cam"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/level_two_usda-9004a66abae4e107-1.image b/crates/crust-core/tests/data/import_baselines/level_two_usda-9004a66abae4e107-1.image new file mode 100644 index 000000000..c734c5b1d --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/level_two_usda-9004a66abae4e107-1.image @@ -0,0 +1 @@ +640x360 16spp clamp-off a04a09c0d4b5e325 diff --git a/crates/crust-core/tests/data/import_baselines/light_linking_usda-0a7e4d5176bc2b33-1.digest b/crates/crust-core/tests/data/import_baselines/light_linking_usda-0a7e4d5176bc2b33-1.digest new file mode 100644 index 000000000..a2d5f6e6d --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/light_linking_usda-0a7e4d5176bc2b33-1.digest @@ -0,0 +1,42 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/World/Cam") +camera: Camera { origin: Vec3A(0.0, 3.0, 9.0), lower_left_corner: Vec3A(-5.6632595, -2.195088, -0.119155884), horizontal: Vec3A(11.326519, -0.0, 0.0), vertical: Vec3A(0.0, 6.231942, -1.3246402), u: Vec3A(1.0, -0.0, 0.0), v: Vec3A(0.0, 0.9781476, -0.20791169), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: Some("/Render/settings") +settings: RenderSettings { samples_per_pixel: 64, max_depth: 4, width: 160, height: 90, region: PixelRect { x0: 0, y0: 0, x1: 160, y1: 90 }, min_samples_per_pixel: 16, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 24.0, aperture: [20.955, 15.2908], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 10.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/light_linking.usda"], invisible_overrides: Some(0) } +layer: $DIR/light_linking.usda +lights: 3 +light 0: area name Some("/World/Rim") lpe None pmf 0.33333334 shadow RayMask(4294967290) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 1: area name Some("/World/Fill") lpe None pmf 0.33333334 shadow RayMask(4294967290) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 2: area name Some("/World/Key") lpe None pmf 0.33333334 shadow RayMask(2) restricted true nee-only false twinned true gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 8 geometries, PrimitiveBreakdown { triangles: 14, spheres: 6, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 14, spheres: 6, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +geom 0: material #0 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 0 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:147e304cdaa43315 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=1:147e304cdaa43315 +geom 1: material #1 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 0 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:3bb65d4d618d300f camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=1:3bb65d4d618d300f +geom 2: material #2 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 0 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:414b9060aeb9fa5b camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=1:414b9060aeb9fa5b +geom 3: material #3 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 0 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=12:66555abe449aad95 camera=12:66555abe449aad95 shadow=0:cbf29ce484222325 indirect=12:66555abe449aad95 +geom 4: material #3 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 0 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:d864e332b6f2885f camera=1:d864e332b6f2885f shadow=1:d864e332b6f2885f indirect=1:d864e332b6f2885f +geom 5: material #3 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 1 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:b3ac5caa5601a5fa camera=1:b3ac5caa5601a5fa shadow=1:b3ac5caa5601a5fa indirect=1:b3ac5caa5601a5fa +geom 6: material #3 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 0 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:3fd5e7ad4a18db8b camera=1:3fd5e7ad4a18db8b shadow=1:3fd5e7ad4a18db8b indirect=1:3fd5e7ad4a18db8b +geom 7: material #3 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 2 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:be0b97004c4d3e85 camera=2:be0b97004c4d3e85 shadow=2:be0b97004c4d3e85 indirect=2:be0b97004c4d3e85 +provenance light /World/Fill: LightOrigin { index: 1, geoms: 1..2 } +provenance light /World/Key: LightOrigin { index: 2, geoms: 2..3 } +provenance light /World/Rim: LightOrigin { index: 0, geoms: 0..1 } +provenance geometry 0..1: /World/Rim +provenance geometry 1..2: /World/Fill +provenance geometry 2..3: /World/Key +provenance geometry 3..4: /World/Pillar +provenance geometry 4..5: /World/Right +provenance geometry 5..6: /World/Hero +provenance geometry 6..7: /World/Left +provenance geometry 7..8: /World/Floor +provenance mesh: MeshOrigin { geom_id: 3, slot: 0, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 7, slot: 1, baked: true, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 8639962265279651952, n_points: 8, n_indices: 24, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 1: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 8416296582947184296, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [4, 5, 6] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/World/Cam"), cameras: ["/World/Cam"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/World/Cam"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/light_linking_usda-0a7e4d5176bc2b33-1.image b/crates/crust-core/tests/data/import_baselines/light_linking_usda-0a7e4d5176bc2b33-1.image new file mode 100644 index 000000000..a37e43eea --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/light_linking_usda-0a7e4d5176bc2b33-1.image @@ -0,0 +1 @@ +160x90 16spp clamp-off 8ff86f8441e722fd diff --git a/crates/crust-core/tests/data/import_baselines/light_linking_usda-0a7e4d5176bc2b33-2.digest b/crates/crust-core/tests/data/import_baselines/light_linking_usda-0a7e4d5176bc2b33-2.digest new file mode 100644 index 000000000..a2d5f6e6d --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/light_linking_usda-0a7e4d5176bc2b33-2.digest @@ -0,0 +1,42 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/World/Cam") +camera: Camera { origin: Vec3A(0.0, 3.0, 9.0), lower_left_corner: Vec3A(-5.6632595, -2.195088, -0.119155884), horizontal: Vec3A(11.326519, -0.0, 0.0), vertical: Vec3A(0.0, 6.231942, -1.3246402), u: Vec3A(1.0, -0.0, 0.0), v: Vec3A(0.0, 0.9781476, -0.20791169), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: Some("/Render/settings") +settings: RenderSettings { samples_per_pixel: 64, max_depth: 4, width: 160, height: 90, region: PixelRect { x0: 0, y0: 0, x1: 160, y1: 90 }, min_samples_per_pixel: 16, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 24.0, aperture: [20.955, 15.2908], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 10.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/light_linking.usda"], invisible_overrides: Some(0) } +layer: $DIR/light_linking.usda +lights: 3 +light 0: area name Some("/World/Rim") lpe None pmf 0.33333334 shadow RayMask(4294967290) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 1: area name Some("/World/Fill") lpe None pmf 0.33333334 shadow RayMask(4294967290) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 2: area name Some("/World/Key") lpe None pmf 0.33333334 shadow RayMask(2) restricted true nee-only false twinned true gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 8 geometries, PrimitiveBreakdown { triangles: 14, spheres: 6, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 14, spheres: 6, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +geom 0: material #0 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 0 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:147e304cdaa43315 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=1:147e304cdaa43315 +geom 1: material #1 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 0 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:3bb65d4d618d300f camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=1:3bb65d4d618d300f +geom 2: material #2 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 0 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:414b9060aeb9fa5b camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=1:414b9060aeb9fa5b +geom 3: material #3 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 0 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=12:66555abe449aad95 camera=12:66555abe449aad95 shadow=0:cbf29ce484222325 indirect=12:66555abe449aad95 +geom 4: material #3 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 0 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:d864e332b6f2885f camera=1:d864e332b6f2885f shadow=1:d864e332b6f2885f indirect=1:d864e332b6f2885f +geom 5: material #3 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 1 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:b3ac5caa5601a5fa camera=1:b3ac5caa5601a5fa shadow=1:b3ac5caa5601a5fa indirect=1:b3ac5caa5601a5fa +geom 6: material #3 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 0 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:3fd5e7ad4a18db8b camera=1:3fd5e7ad4a18db8b shadow=1:3fd5e7ad4a18db8b indirect=1:3fd5e7ad4a18db8b +geom 7: material #3 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 2 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:be0b97004c4d3e85 camera=2:be0b97004c4d3e85 shadow=2:be0b97004c4d3e85 indirect=2:be0b97004c4d3e85 +provenance light /World/Fill: LightOrigin { index: 1, geoms: 1..2 } +provenance light /World/Key: LightOrigin { index: 2, geoms: 2..3 } +provenance light /World/Rim: LightOrigin { index: 0, geoms: 0..1 } +provenance geometry 0..1: /World/Rim +provenance geometry 1..2: /World/Fill +provenance geometry 2..3: /World/Key +provenance geometry 3..4: /World/Pillar +provenance geometry 4..5: /World/Right +provenance geometry 5..6: /World/Hero +provenance geometry 6..7: /World/Left +provenance geometry 7..8: /World/Floor +provenance mesh: MeshOrigin { geom_id: 3, slot: 0, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 7, slot: 1, baked: true, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 8639962265279651952, n_points: 8, n_indices: 24, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 1: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 8416296582947184296, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [4, 5, 6] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/World/Cam"), cameras: ["/World/Cam"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/World/Cam"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/light_linking_usda-0a7e4d5176bc2b33-2.image b/crates/crust-core/tests/data/import_baselines/light_linking_usda-0a7e4d5176bc2b33-2.image new file mode 100644 index 000000000..a37e43eea --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/light_linking_usda-0a7e4d5176bc2b33-2.image @@ -0,0 +1 @@ +160x90 16spp clamp-off 8ff86f8441e722fd diff --git a/crates/crust-core/tests/data/import_baselines/light_linking_usda-0df578a9208fb7cf-1.digest b/crates/crust-core/tests/data/import_baselines/light_linking_usda-0df578a9208fb7cf-1.digest new file mode 100644 index 000000000..a2d5f6e6d --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/light_linking_usda-0df578a9208fb7cf-1.digest @@ -0,0 +1,42 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/World/Cam") +camera: Camera { origin: Vec3A(0.0, 3.0, 9.0), lower_left_corner: Vec3A(-5.6632595, -2.195088, -0.119155884), horizontal: Vec3A(11.326519, -0.0, 0.0), vertical: Vec3A(0.0, 6.231942, -1.3246402), u: Vec3A(1.0, -0.0, 0.0), v: Vec3A(0.0, 0.9781476, -0.20791169), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: Some("/Render/settings") +settings: RenderSettings { samples_per_pixel: 64, max_depth: 4, width: 160, height: 90, region: PixelRect { x0: 0, y0: 0, x1: 160, y1: 90 }, min_samples_per_pixel: 16, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 24.0, aperture: [20.955, 15.2908], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 10.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/light_linking.usda"], invisible_overrides: Some(0) } +layer: $DIR/light_linking.usda +lights: 3 +light 0: area name Some("/World/Rim") lpe None pmf 0.33333334 shadow RayMask(4294967290) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 1: area name Some("/World/Fill") lpe None pmf 0.33333334 shadow RayMask(4294967290) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 2: area name Some("/World/Key") lpe None pmf 0.33333334 shadow RayMask(2) restricted true nee-only false twinned true gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 8 geometries, PrimitiveBreakdown { triangles: 14, spheres: 6, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 14, spheres: 6, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +geom 0: material #0 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 0 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:147e304cdaa43315 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=1:147e304cdaa43315 +geom 1: material #1 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 0 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:3bb65d4d618d300f camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=1:3bb65d4d618d300f +geom 2: material #2 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 0 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:414b9060aeb9fa5b camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=1:414b9060aeb9fa5b +geom 3: material #3 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 0 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=12:66555abe449aad95 camera=12:66555abe449aad95 shadow=0:cbf29ce484222325 indirect=12:66555abe449aad95 +geom 4: material #3 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 0 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:d864e332b6f2885f camera=1:d864e332b6f2885f shadow=1:d864e332b6f2885f indirect=1:d864e332b6f2885f +geom 5: material #3 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 1 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:b3ac5caa5601a5fa camera=1:b3ac5caa5601a5fa shadow=1:b3ac5caa5601a5fa indirect=1:b3ac5caa5601a5fa +geom 6: material #3 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 0 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:3fd5e7ad4a18db8b camera=1:3fd5e7ad4a18db8b shadow=1:3fd5e7ad4a18db8b indirect=1:3fd5e7ad4a18db8b +geom 7: material #3 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 2 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:be0b97004c4d3e85 camera=2:be0b97004c4d3e85 shadow=2:be0b97004c4d3e85 indirect=2:be0b97004c4d3e85 +provenance light /World/Fill: LightOrigin { index: 1, geoms: 1..2 } +provenance light /World/Key: LightOrigin { index: 2, geoms: 2..3 } +provenance light /World/Rim: LightOrigin { index: 0, geoms: 0..1 } +provenance geometry 0..1: /World/Rim +provenance geometry 1..2: /World/Fill +provenance geometry 2..3: /World/Key +provenance geometry 3..4: /World/Pillar +provenance geometry 4..5: /World/Right +provenance geometry 5..6: /World/Hero +provenance geometry 6..7: /World/Left +provenance geometry 7..8: /World/Floor +provenance mesh: MeshOrigin { geom_id: 3, slot: 0, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 7, slot: 1, baked: true, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 8639962265279651952, n_points: 8, n_indices: 24, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 1: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 8416296582947184296, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [4, 5, 6] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/World/Cam"), cameras: ["/World/Cam"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/World/Cam"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/light_linking_usda-0df578a9208fb7cf-1.image b/crates/crust-core/tests/data/import_baselines/light_linking_usda-0df578a9208fb7cf-1.image new file mode 100644 index 000000000..a37e43eea --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/light_linking_usda-0df578a9208fb7cf-1.image @@ -0,0 +1 @@ +160x90 16spp clamp-off 8ff86f8441e722fd diff --git a/crates/crust-core/tests/data/import_baselines/light_linking_usda-84012730e231d407-1.digest b/crates/crust-core/tests/data/import_baselines/light_linking_usda-84012730e231d407-1.digest new file mode 100644 index 000000000..a2d5f6e6d --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/light_linking_usda-84012730e231d407-1.digest @@ -0,0 +1,42 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/World/Cam") +camera: Camera { origin: Vec3A(0.0, 3.0, 9.0), lower_left_corner: Vec3A(-5.6632595, -2.195088, -0.119155884), horizontal: Vec3A(11.326519, -0.0, 0.0), vertical: Vec3A(0.0, 6.231942, -1.3246402), u: Vec3A(1.0, -0.0, 0.0), v: Vec3A(0.0, 0.9781476, -0.20791169), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: Some("/Render/settings") +settings: RenderSettings { samples_per_pixel: 64, max_depth: 4, width: 160, height: 90, region: PixelRect { x0: 0, y0: 0, x1: 160, y1: 90 }, min_samples_per_pixel: 16, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 24.0, aperture: [20.955, 15.2908], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 10.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/light_linking.usda"], invisible_overrides: Some(0) } +layer: $DIR/light_linking.usda +lights: 3 +light 0: area name Some("/World/Rim") lpe None pmf 0.33333334 shadow RayMask(4294967290) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 1: area name Some("/World/Fill") lpe None pmf 0.33333334 shadow RayMask(4294967290) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 2: area name Some("/World/Key") lpe None pmf 0.33333334 shadow RayMask(2) restricted true nee-only false twinned true gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 8 geometries, PrimitiveBreakdown { triangles: 14, spheres: 6, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 14, spheres: 6, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +geom 0: material #0 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 0 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:147e304cdaa43315 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=1:147e304cdaa43315 +geom 1: material #1 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 0 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:3bb65d4d618d300f camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=1:3bb65d4d618d300f +geom 2: material #2 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 0 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:414b9060aeb9fa5b camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=1:414b9060aeb9fa5b +geom 3: material #3 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 0 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=12:66555abe449aad95 camera=12:66555abe449aad95 shadow=0:cbf29ce484222325 indirect=12:66555abe449aad95 +geom 4: material #3 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 0 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:d864e332b6f2885f camera=1:d864e332b6f2885f shadow=1:d864e332b6f2885f indirect=1:d864e332b6f2885f +geom 5: material #3 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 1 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:b3ac5caa5601a5fa camera=1:b3ac5caa5601a5fa shadow=1:b3ac5caa5601a5fa indirect=1:b3ac5caa5601a5fa +geom 6: material #3 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 0 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:3fd5e7ad4a18db8b camera=1:3fd5e7ad4a18db8b shadow=1:3fd5e7ad4a18db8b indirect=1:3fd5e7ad4a18db8b +geom 7: material #3 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 2 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:be0b97004c4d3e85 camera=2:be0b97004c4d3e85 shadow=2:be0b97004c4d3e85 indirect=2:be0b97004c4d3e85 +provenance light /World/Fill: LightOrigin { index: 1, geoms: 1..2 } +provenance light /World/Key: LightOrigin { index: 2, geoms: 2..3 } +provenance light /World/Rim: LightOrigin { index: 0, geoms: 0..1 } +provenance geometry 0..1: /World/Rim +provenance geometry 1..2: /World/Fill +provenance geometry 2..3: /World/Key +provenance geometry 3..4: /World/Pillar +provenance geometry 4..5: /World/Right +provenance geometry 5..6: /World/Hero +provenance geometry 6..7: /World/Left +provenance geometry 7..8: /World/Floor +provenance mesh: MeshOrigin { geom_id: 3, slot: 0, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 7, slot: 1, baked: true, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 8639962265279651952, n_points: 8, n_indices: 24, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 1: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 8416296582947184296, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [4, 5, 6] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/World/Cam"), cameras: ["/World/Cam"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/World/Cam"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/light_linking_usda-84012730e231d407-1.image b/crates/crust-core/tests/data/import_baselines/light_linking_usda-84012730e231d407-1.image new file mode 100644 index 000000000..a37e43eea --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/light_linking_usda-84012730e231d407-1.image @@ -0,0 +1 @@ +160x90 16spp clamp-off 8ff86f8441e722fd diff --git a/crates/crust-core/tests/data/import_baselines/light_linking_usda-a83ba5cc073d5f22-1.digest b/crates/crust-core/tests/data/import_baselines/light_linking_usda-a83ba5cc073d5f22-1.digest new file mode 100644 index 000000000..eee1625dd --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/light_linking_usda-a83ba5cc073d5f22-1.digest @@ -0,0 +1,42 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/World/Cam") +camera: Camera { origin: Vec3A(0.0, 3.0, 9.0), lower_left_corner: Vec3A(-5.6632595, -2.195088, -0.119155884), horizontal: Vec3A(11.326519, -0.0, 0.0), vertical: Vec3A(0.0, 6.231942, -1.3246402), u: Vec3A(1.0, -0.0, 0.0), v: Vec3A(0.0, 0.9781476, -0.20791169), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: Some("/Render/settings") +settings: RenderSettings { samples_per_pixel: 64, max_depth: 4, width: 160, height: 90, region: PixelRect { x0: 0, y0: 0, x1: 160, y1: 90 }, min_samples_per_pixel: 16, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 24.0, aperture: [20.955, 15.2908], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 10.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/light_linking.usda"], invisible_overrides: Some(0) } +layer: $DIR/light_linking.usda +lights: 3 +light 0: area name Some("/World/Rim") lpe None pmf 0.33333334 shadow RayMask(4294967290) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 1: area name Some("/World/Fill") lpe None pmf 0.33333334 shadow RayMask(4294967290) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 2: area name Some("/World/Key") lpe None pmf 0.33333334 shadow RayMask(2) restricted true nee-only false twinned true gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 8 geometries, PrimitiveBreakdown { triangles: 14, spheres: 6, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 14, spheres: 6, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +geom 0: material #0 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 0 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:147e304cdaa43315 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=1:147e304cdaa43315 +geom 1: material #1 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 0 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:3bb65d4d618d300f camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=1:3bb65d4d618d300f +geom 2: material #2 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 0 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:414b9060aeb9fa5b camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=1:414b9060aeb9fa5b +geom 3: material #3 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 0 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=12:66555abe449aad95 camera=12:66555abe449aad95 shadow=0:cbf29ce484222325 indirect=12:66555abe449aad95 +geom 4: material #3 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 0 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:d864e332b6f2885f camera=1:d864e332b6f2885f shadow=1:d864e332b6f2885f indirect=1:d864e332b6f2885f +geom 5: material #3 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 1 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:b3ac5caa5601a5fa camera=1:b3ac5caa5601a5fa shadow=1:b3ac5caa5601a5fa indirect=1:b3ac5caa5601a5fa +geom 6: material #3 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 0 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:3fd5e7ad4a18db8b camera=1:3fd5e7ad4a18db8b shadow=1:3fd5e7ad4a18db8b indirect=1:3fd5e7ad4a18db8b +geom 7: material #3 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 2 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:be0b97004c4d3e85 camera=2:be0b97004c4d3e85 shadow=2:be0b97004c4d3e85 indirect=2:be0b97004c4d3e85 +provenance light /World/Fill: LightOrigin { index: 1, geoms: 1..2 } +provenance light /World/Key: LightOrigin { index: 2, geoms: 2..3 } +provenance light /World/Rim: LightOrigin { index: 0, geoms: 0..1 } +provenance geometry 0..1: /World/Rim +provenance geometry 1..2: /World/Fill +provenance geometry 2..3: /World/Key +provenance geometry 3..4: /World/Pillar +provenance geometry 4..5: /World/Right +provenance geometry 5..6: /World/Hero +provenance geometry 6..7: /World/Left +provenance geometry 7..8: /World/Floor +provenance mesh: MeshOrigin { geom_id: 3, slot: 0, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 7, slot: 1, baked: true, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 8639962265279651952, n_points: 8, n_indices: 24, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 1: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 8416296582947184296, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [4, 5, 6] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: true, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/World/Cam"), cameras: ["/World/Cam"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/World/Cam"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/light_linking_usda-a83ba5cc073d5f22-1.image b/crates/crust-core/tests/data/import_baselines/light_linking_usda-a83ba5cc073d5f22-1.image new file mode 100644 index 000000000..a37e43eea --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/light_linking_usda-a83ba5cc073d5f22-1.image @@ -0,0 +1 @@ +160x90 16spp clamp-off 8ff86f8441e722fd diff --git a/crates/crust-core/tests/data/import_baselines/light_samples_default_usda-6242aa388fa102a1-1.digest b/crates/crust-core/tests/data/import_baselines/light_samples_default_usda-6242aa388fa102a1-1.digest new file mode 100644 index 000000000..f6a19d439 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/light_samples_default_usda-6242aa388fa102a1-1.digest @@ -0,0 +1,17 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: None +camera: Camera { origin: Vec3A(15.0, 3.0, 3.0), lower_left_corner: Vec3A(4.8863316, -0.044797063, 4.174048), horizontal: Vec3A(1.2295314, 0.0, -6.147657), vertical: Vec3A(-0.44830504, 3.4967792, -0.08966101), u: Vec3A(0.19611613, 0.0, -0.9805807), v: Vec3A(-0.1271232, 0.991561, -0.02542464), lens_radius: 0.05, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: None +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 640, height: 360, region: PixelRect { x0: 0, y0: 0, x1: 640, y1: 360 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: None, depth_of_field: true, motion_blur: false, layer_stack: ["$DIR/light_samples_default.usda"], invisible_overrides: Some(0) } +layer: $DIR/light_samples_default.usda +warning: Warning { code: CameraMissing, kind: Skipped, count: 1, prims: [], message: "USD stage has no UsdGeomCamera — falling back to world::get_settings camera" } +lights: 0 +volumes: 0 +world: 0 geometries, PrimitiveBreakdown { triangles: 0, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 0, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: None, cameras: [], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: None, offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/light_samples_default_usda-6242aa388fa102a1-1.image b/crates/crust-core/tests/data/import_baselines/light_samples_default_usda-6242aa388fa102a1-1.image new file mode 100644 index 000000000..c734c5b1d --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/light_samples_default_usda-6242aa388fa102a1-1.image @@ -0,0 +1 @@ +640x360 16spp clamp-off a04a09c0d4b5e325 diff --git a/crates/crust-core/tests/data/import_baselines/light_samples_huge_usda-128d1881332e6fff-1.digest b/crates/crust-core/tests/data/import_baselines/light_samples_huge_usda-128d1881332e6fff-1.digest new file mode 100644 index 000000000..e43357683 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/light_samples_huge_usda-128d1881332e6fff-1.digest @@ -0,0 +1,18 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: None +camera: Camera { origin: Vec3A(15.0, 3.0, 3.0), lower_left_corner: Vec3A(4.8863316, -0.044797063, 4.174048), horizontal: Vec3A(1.2295314, 0.0, -6.147657), vertical: Vec3A(-0.44830504, 3.4967792, -0.08966101), u: Vec3A(0.19611613, 0.0, -0.9805807), v: Vec3A(-0.1271232, 0.991561, -0.02542464), lens_radius: 0.05, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: Some("/Render/settings") +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 640, height: 360, region: PixelRect { x0: 0, y0: 0, x1: 640, y1: 360 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1024, light_samples_indirect: 1024, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: None, depth_of_field: true, motion_blur: false, layer_stack: ["$DIR/light_samples_huge.usda"], invisible_overrides: Some(0) } +layer: $DIR/light_samples_huge.usda +warning: Warning { code: SettingsLightSamplesClamped, kind: Approximated, count: 1, prims: ["/Render/settings"], message: "crust:lightSamples = 1000000000 is above 1024 — taking 1024" } +warning: Warning { code: CameraMissing, kind: Skipped, count: 1, prims: [], message: "USD stage has no UsdGeomCamera — falling back to world::get_settings camera" } +lights: 0 +volumes: 0 +world: 0 geometries, PrimitiveBreakdown { triangles: 0, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 0, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: None, cameras: [], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: None, offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/light_samples_huge_usda-128d1881332e6fff-1.image b/crates/crust-core/tests/data/import_baselines/light_samples_huge_usda-128d1881332e6fff-1.image new file mode 100644 index 000000000..c734c5b1d --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/light_samples_huge_usda-128d1881332e6fff-1.image @@ -0,0 +1 @@ +640x360 16spp clamp-off a04a09c0d4b5e325 diff --git a/crates/crust-core/tests/data/import_baselines/light_samples_zero_usda-516355bd0568c89e-1.digest b/crates/crust-core/tests/data/import_baselines/light_samples_zero_usda-516355bd0568c89e-1.digest new file mode 100644 index 000000000..8c73cc245 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/light_samples_zero_usda-516355bd0568c89e-1.digest @@ -0,0 +1,18 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: None +camera: Camera { origin: Vec3A(15.0, 3.0, 3.0), lower_left_corner: Vec3A(4.8863316, -0.044797063, 4.174048), horizontal: Vec3A(1.2295314, 0.0, -6.147657), vertical: Vec3A(-0.44830504, 3.4967792, -0.08966101), u: Vec3A(0.19611613, 0.0, -0.9805807), v: Vec3A(-0.1271232, 0.991561, -0.02542464), lens_radius: 0.05, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: Some("/Render/settings") +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 640, height: 360, region: PixelRect { x0: 0, y0: 0, x1: 640, y1: 360 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: None, depth_of_field: true, motion_blur: false, layer_stack: ["$DIR/light_samples_zero.usda"], invisible_overrides: Some(0) } +layer: $DIR/light_samples_zero.usda +warning: Warning { code: SettingsInvalidValue, kind: Refused, count: 2, prims: ["/Render/settings"], message: "crust:lightSamples = 0 is below 1 — taking 1" } +warning: Warning { code: CameraMissing, kind: Skipped, count: 1, prims: [], message: "USD stage has no UsdGeomCamera — falling back to world::get_settings camera" } +lights: 0 +volumes: 0 +world: 0 geometries, PrimitiveBreakdown { triangles: 0, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 0, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: None, cameras: [], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: None, offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/light_samples_zero_usda-516355bd0568c89e-1.image b/crates/crust-core/tests/data/import_baselines/light_samples_zero_usda-516355bd0568c89e-1.image new file mode 100644 index 000000000..c734c5b1d --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/light_samples_zero_usda-516355bd0568c89e-1.image @@ -0,0 +1 @@ +640x360 16spp clamp-off a04a09c0d4b5e325 diff --git a/crates/crust-core/tests/data/import_baselines/light_visibility_usda-01977678b305c007-1.digest b/crates/crust-core/tests/data/import_baselines/light_visibility_usda-01977678b305c007-1.digest new file mode 100644 index 000000000..64f31fa30 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/light_visibility_usda-01977678b305c007-1.digest @@ -0,0 +1,32 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/World/Cam") +camera: Camera { origin: Vec3A(0.0, 2.0, 8.0), lower_left_corner: Vec3A(-4.365625, -2.365625, -2.0), horizontal: Vec3A(8.73125, 0.0, 0.0), vertical: Vec3A(0.0, 8.73125, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: Some("/Render/settings") +settings: RenderSettings { samples_per_pixel: 8, max_depth: 4, width: 64, height: 64, region: PixelRect { x0: 0, y0: 0, x1: 64, y1: 64 }, min_samples_per_pixel: 4, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 24.0, aperture: [20.955, 15.2908], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 10.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/light_visibility.usda"], invisible_overrides: Some(0) } +layer: $DIR/light_visibility.usda +lights: 3 +light 0: area name Some("/World/Masked") lpe None pmf 0.33333334 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 1: area name Some("/World/Visible") lpe None pmf 0.33333334 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 2: area name Some("/World/Default") lpe None pmf 0.33333334 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 4 geometries, PrimitiveBreakdown { triangles: 2, spheres: 3, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 2, spheres: 3, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +geom 0: material #0 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:fca091c7590bdfb8 camera=1:fca091c7590bdfb8 shadow=1:fca091c7590bdfb8 indirect=1:fca091c7590bdfb8 +geom 1: material #1 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:ea8cf4535fd53b08 camera=1:ea8cf4535fd53b08 shadow=1:ea8cf4535fd53b08 indirect=1:ea8cf4535fd53b08 +geom 2: material #2 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:d2febdc7836711b8 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=1:d2febdc7836711b8 +geom 3: material #3 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:be0b97004c4d3e85 camera=2:be0b97004c4d3e85 shadow=2:be0b97004c4d3e85 indirect=2:be0b97004c4d3e85 +provenance light /World/Default: LightOrigin { index: 2, geoms: 2..3 } +provenance light /World/Masked: LightOrigin { index: 0, geoms: 0..1 } +provenance light /World/Visible: LightOrigin { index: 1, geoms: 1..2 } +provenance geometry 0..1: /World/Masked +provenance geometry 1..2: /World/Visible +provenance geometry 2..3: /World/Default +provenance geometry 3..4: /World/Floor +provenance mesh: MeshOrigin { geom_id: 3, slot: 0, baked: true, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 8416296582947184296, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/World/Cam"), cameras: ["/World/Cam"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/World/Cam"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/light_visibility_usda-01977678b305c007-1.image b/crates/crust-core/tests/data/import_baselines/light_visibility_usda-01977678b305c007-1.image new file mode 100644 index 000000000..78d3a71c1 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/light_visibility_usda-01977678b305c007-1.image @@ -0,0 +1 @@ +64x64 16spp clamp-off 65db7ee51a453b8d diff --git a/crates/crust-core/tests/data/import_baselines/light_visibility_usda-01977678b305c007-2.digest b/crates/crust-core/tests/data/import_baselines/light_visibility_usda-01977678b305c007-2.digest new file mode 100644 index 000000000..64f31fa30 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/light_visibility_usda-01977678b305c007-2.digest @@ -0,0 +1,32 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/World/Cam") +camera: Camera { origin: Vec3A(0.0, 2.0, 8.0), lower_left_corner: Vec3A(-4.365625, -2.365625, -2.0), horizontal: Vec3A(8.73125, 0.0, 0.0), vertical: Vec3A(0.0, 8.73125, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: Some("/Render/settings") +settings: RenderSettings { samples_per_pixel: 8, max_depth: 4, width: 64, height: 64, region: PixelRect { x0: 0, y0: 0, x1: 64, y1: 64 }, min_samples_per_pixel: 4, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 24.0, aperture: [20.955, 15.2908], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 10.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/light_visibility.usda"], invisible_overrides: Some(0) } +layer: $DIR/light_visibility.usda +lights: 3 +light 0: area name Some("/World/Masked") lpe None pmf 0.33333334 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 1: area name Some("/World/Visible") lpe None pmf 0.33333334 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 2: area name Some("/World/Default") lpe None pmf 0.33333334 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 4 geometries, PrimitiveBreakdown { triangles: 2, spheres: 3, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 2, spheres: 3, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +geom 0: material #0 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:fca091c7590bdfb8 camera=1:fca091c7590bdfb8 shadow=1:fca091c7590bdfb8 indirect=1:fca091c7590bdfb8 +geom 1: material #1 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:ea8cf4535fd53b08 camera=1:ea8cf4535fd53b08 shadow=1:ea8cf4535fd53b08 indirect=1:ea8cf4535fd53b08 +geom 2: material #2 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:d2febdc7836711b8 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=1:d2febdc7836711b8 +geom 3: material #3 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:be0b97004c4d3e85 camera=2:be0b97004c4d3e85 shadow=2:be0b97004c4d3e85 indirect=2:be0b97004c4d3e85 +provenance light /World/Default: LightOrigin { index: 2, geoms: 2..3 } +provenance light /World/Masked: LightOrigin { index: 0, geoms: 0..1 } +provenance light /World/Visible: LightOrigin { index: 1, geoms: 1..2 } +provenance geometry 0..1: /World/Masked +provenance geometry 1..2: /World/Visible +provenance geometry 2..3: /World/Default +provenance geometry 3..4: /World/Floor +provenance mesh: MeshOrigin { geom_id: 3, slot: 0, baked: true, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 8416296582947184296, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/World/Cam"), cameras: ["/World/Cam"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/World/Cam"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/light_visibility_usda-01977678b305c007-2.image b/crates/crust-core/tests/data/import_baselines/light_visibility_usda-01977678b305c007-2.image new file mode 100644 index 000000000..78d3a71c1 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/light_visibility_usda-01977678b305c007-2.image @@ -0,0 +1 @@ +64x64 16spp clamp-off 65db7ee51a453b8d diff --git a/crates/crust-core/tests/data/import_baselines/light_visibility_usda-2b8ba6eb3030d1ec-1.digest b/crates/crust-core/tests/data/import_baselines/light_visibility_usda-2b8ba6eb3030d1ec-1.digest new file mode 100644 index 000000000..64f31fa30 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/light_visibility_usda-2b8ba6eb3030d1ec-1.digest @@ -0,0 +1,32 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/World/Cam") +camera: Camera { origin: Vec3A(0.0, 2.0, 8.0), lower_left_corner: Vec3A(-4.365625, -2.365625, -2.0), horizontal: Vec3A(8.73125, 0.0, 0.0), vertical: Vec3A(0.0, 8.73125, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: Some("/Render/settings") +settings: RenderSettings { samples_per_pixel: 8, max_depth: 4, width: 64, height: 64, region: PixelRect { x0: 0, y0: 0, x1: 64, y1: 64 }, min_samples_per_pixel: 4, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 24.0, aperture: [20.955, 15.2908], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 10.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/light_visibility.usda"], invisible_overrides: Some(0) } +layer: $DIR/light_visibility.usda +lights: 3 +light 0: area name Some("/World/Masked") lpe None pmf 0.33333334 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 1: area name Some("/World/Visible") lpe None pmf 0.33333334 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 2: area name Some("/World/Default") lpe None pmf 0.33333334 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 4 geometries, PrimitiveBreakdown { triangles: 2, spheres: 3, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 2, spheres: 3, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +geom 0: material #0 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:fca091c7590bdfb8 camera=1:fca091c7590bdfb8 shadow=1:fca091c7590bdfb8 indirect=1:fca091c7590bdfb8 +geom 1: material #1 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:ea8cf4535fd53b08 camera=1:ea8cf4535fd53b08 shadow=1:ea8cf4535fd53b08 indirect=1:ea8cf4535fd53b08 +geom 2: material #2 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:d2febdc7836711b8 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=1:d2febdc7836711b8 +geom 3: material #3 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:be0b97004c4d3e85 camera=2:be0b97004c4d3e85 shadow=2:be0b97004c4d3e85 indirect=2:be0b97004c4d3e85 +provenance light /World/Default: LightOrigin { index: 2, geoms: 2..3 } +provenance light /World/Masked: LightOrigin { index: 0, geoms: 0..1 } +provenance light /World/Visible: LightOrigin { index: 1, geoms: 1..2 } +provenance geometry 0..1: /World/Masked +provenance geometry 1..2: /World/Visible +provenance geometry 2..3: /World/Default +provenance geometry 3..4: /World/Floor +provenance mesh: MeshOrigin { geom_id: 3, slot: 0, baked: true, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 8416296582947184296, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/World/Cam"), cameras: ["/World/Cam"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/World/Cam"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/light_visibility_usda-2b8ba6eb3030d1ec-1.image b/crates/crust-core/tests/data/import_baselines/light_visibility_usda-2b8ba6eb3030d1ec-1.image new file mode 100644 index 000000000..78d3a71c1 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/light_visibility_usda-2b8ba6eb3030d1ec-1.image @@ -0,0 +1 @@ +64x64 16spp clamp-off 65db7ee51a453b8d diff --git a/crates/crust-core/tests/data/import_baselines/light_visibility_usda-3ea0aa2435326544-1.digest b/crates/crust-core/tests/data/import_baselines/light_visibility_usda-3ea0aa2435326544-1.digest new file mode 100644 index 000000000..9b3600838 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/light_visibility_usda-3ea0aa2435326544-1.digest @@ -0,0 +1,32 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/World/Cam") +camera: Camera { origin: Vec3A(0.0, 2.0, 8.0), lower_left_corner: Vec3A(-4.365625, -2.365625, -2.0), horizontal: Vec3A(8.73125, 0.0, 0.0), vertical: Vec3A(0.0, 8.73125, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: Some("/Render/settings") +settings: RenderSettings { samples_per_pixel: 8, max_depth: 4, width: 64, height: 64, region: PixelRect { x0: 0, y0: 0, x1: 64, y1: 64 }, min_samples_per_pixel: 4, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 24.0, aperture: [20.955, 15.2908], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 10.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/light_visibility.usda"], invisible_overrides: Some(0) } +layer: $DIR/light_visibility.usda +lights: 3 +light 0: area name Some("/World/Masked") lpe None pmf 0.33333334 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 1: area name Some("/World/Visible") lpe None pmf 0.33333334 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 2: area name Some("/World/Default") lpe None pmf 0.33333334 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 4 geometries, PrimitiveBreakdown { triangles: 2, spheres: 3, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 2, spheres: 3, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +geom 0: material #0 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:fca091c7590bdfb8 camera=1:fca091c7590bdfb8 shadow=1:fca091c7590bdfb8 indirect=1:fca091c7590bdfb8 +geom 1: material #1 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:ea8cf4535fd53b08 camera=1:ea8cf4535fd53b08 shadow=1:ea8cf4535fd53b08 indirect=1:ea8cf4535fd53b08 +geom 2: material #2 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:d2febdc7836711b8 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=1:d2febdc7836711b8 +geom 3: material #3 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:be0b97004c4d3e85 camera=2:be0b97004c4d3e85 shadow=2:be0b97004c4d3e85 indirect=2:be0b97004c4d3e85 +provenance light /World/Default: LightOrigin { index: 2, geoms: 2..3 } +provenance light /World/Masked: LightOrigin { index: 0, geoms: 0..1 } +provenance light /World/Visible: LightOrigin { index: 1, geoms: 1..2 } +provenance geometry 0..1: /World/Masked +provenance geometry 1..2: /World/Visible +provenance geometry 2..3: /World/Default +provenance geometry 3..4: /World/Floor +provenance mesh: MeshOrigin { geom_id: 3, slot: 0, baked: true, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 8416296582947184296, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: true, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/World/Cam"), cameras: ["/World/Cam"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/World/Cam"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/light_visibility_usda-3ea0aa2435326544-1.image b/crates/crust-core/tests/data/import_baselines/light_visibility_usda-3ea0aa2435326544-1.image new file mode 100644 index 000000000..78d3a71c1 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/light_visibility_usda-3ea0aa2435326544-1.image @@ -0,0 +1 @@ +64x64 16spp clamp-off 65db7ee51a453b8d diff --git a/crates/crust-core/tests/data/import_baselines/linked_bsdf_1024_usda-00c8472dfa9bd263-1.digest b/crates/crust-core/tests/data/import_baselines/linked_bsdf_1024_usda-00c8472dfa9bd263-1.digest new file mode 100644 index 000000000..2705a9eec --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/linked_bsdf_1024_usda-00c8472dfa9bd263-1.digest @@ -0,0 +1,26 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/World/Cam") +camera: Camera { origin: Vec3A(0.0, 6.0, 0.0), lower_left_corner: Vec3A(-5.142858, -4.0, 5.142858), horizontal: Vec3A(10.285716, -0.0, 0.0), vertical: Vec3A(0.0, 2.2838878e-15, -10.285716), u: Vec3A(1.0, -0.0, 0.0), v: Vec3A(0.0, 2.220446e-16, -1.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: Some("/Render/settings") +settings: RenderSettings { samples_per_pixel: 1024, max_depth: 1, width: 16, height: 16, region: PixelRect { x0: 0, y0: 0, x1: 16, y1: 16 }, min_samples_per_pixel: 1024, variance_threshold: 0.0, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: BsdfOnly, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: None, light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 35.0, aperture: [36.0, 36.0], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 10.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/linked_bsdf_1024.usda"], invisible_overrides: Some(0) } +layer: $DIR/linked_bsdf_1024.usda +lights: 1 +light 0: area name Some("/World/Key") lpe None pmf 1.0 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 3 geometries, PrimitiveBreakdown { triangles: 2, spheres: 2, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 2, spheres: 2, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +geom 0: material #0 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 0 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:330029d7b0dd8ea5 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=1:330029d7b0dd8ea5 +geom 1: material #1 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 1 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:ee76fd7ed45c4a85 camera=1:ee76fd7ed45c4a85 shadow=1:ee76fd7ed45c4a85 indirect=1:ee76fd7ed45c4a85 +geom 2: material #1 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 0 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:fce6de5b675a55c5 camera=2:fce6de5b675a55c5 shadow=2:fce6de5b675a55c5 indirect=2:fce6de5b675a55c5 +provenance light /World/Key: LightOrigin { index: 0, geoms: 0..1 } +provenance geometry 0..1: /World/Key +provenance geometry 1..2: /World/Hero +provenance geometry 2..3: /World/Floor +provenance mesh: MeshOrigin { geom_id: 2, slot: 0, baked: true, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 14903623499644419787, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [1] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/World/Cam"), cameras: ["/World/Cam"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/World/Cam"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/linked_bsdf_1024_usda-00c8472dfa9bd263-1.image b/crates/crust-core/tests/data/import_baselines/linked_bsdf_1024_usda-00c8472dfa9bd263-1.image new file mode 100644 index 000000000..16afd794b --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/linked_bsdf_1024_usda-00c8472dfa9bd263-1.image @@ -0,0 +1 @@ +16x16 16spp clamp-off 5ed6956114dfde57 diff --git a/crates/crust-core/tests/data/import_baselines/linked_bsdf_16_usda-f488614962bd77c6-1.digest b/crates/crust-core/tests/data/import_baselines/linked_bsdf_16_usda-f488614962bd77c6-1.digest new file mode 100644 index 000000000..aa1e6a582 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/linked_bsdf_16_usda-f488614962bd77c6-1.digest @@ -0,0 +1,26 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/World/Cam") +camera: Camera { origin: Vec3A(0.0, 6.0, 0.0), lower_left_corner: Vec3A(-5.142858, -4.0, 5.142858), horizontal: Vec3A(10.285716, -0.0, 0.0), vertical: Vec3A(0.0, 2.2838878e-15, -10.285716), u: Vec3A(1.0, -0.0, 0.0), v: Vec3A(0.0, 2.220446e-16, -1.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: Some("/Render/settings") +settings: RenderSettings { samples_per_pixel: 16, max_depth: 1, width: 16, height: 16, region: PixelRect { x0: 0, y0: 0, x1: 16, y1: 16 }, min_samples_per_pixel: 16, variance_threshold: 0.0, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: BsdfOnly, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: None, light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 35.0, aperture: [36.0, 36.0], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 10.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/linked_bsdf_16.usda"], invisible_overrides: Some(0) } +layer: $DIR/linked_bsdf_16.usda +lights: 1 +light 0: area name Some("/World/Key") lpe None pmf 1.0 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 3 geometries, PrimitiveBreakdown { triangles: 2, spheres: 2, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 2, spheres: 2, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +geom 0: material #0 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 0 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:330029d7b0dd8ea5 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=1:330029d7b0dd8ea5 +geom 1: material #1 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 1 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:ee76fd7ed45c4a85 camera=1:ee76fd7ed45c4a85 shadow=1:ee76fd7ed45c4a85 indirect=1:ee76fd7ed45c4a85 +geom 2: material #1 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 0 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:fce6de5b675a55c5 camera=2:fce6de5b675a55c5 shadow=2:fce6de5b675a55c5 indirect=2:fce6de5b675a55c5 +provenance light /World/Key: LightOrigin { index: 0, geoms: 0..1 } +provenance geometry 0..1: /World/Key +provenance geometry 1..2: /World/Hero +provenance geometry 2..3: /World/Floor +provenance mesh: MeshOrigin { geom_id: 2, slot: 0, baked: true, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 14903623499644419787, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [1] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/World/Cam"), cameras: ["/World/Cam"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/World/Cam"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/linked_bsdf_16_usda-f488614962bd77c6-1.image b/crates/crust-core/tests/data/import_baselines/linked_bsdf_16_usda-f488614962bd77c6-1.image new file mode 100644 index 000000000..16afd794b --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/linked_bsdf_16_usda-f488614962bd77c6-1.image @@ -0,0 +1 @@ +16x16 16spp clamp-off 5ed6956114dfde57 diff --git a/crates/crust-core/tests/data/import_baselines/linked_light_1024_usda-42bcc0ce33e153f3-1.digest b/crates/crust-core/tests/data/import_baselines/linked_light_1024_usda-42bcc0ce33e153f3-1.digest new file mode 100644 index 000000000..0023fe246 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/linked_light_1024_usda-42bcc0ce33e153f3-1.digest @@ -0,0 +1,26 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/World/Cam") +camera: Camera { origin: Vec3A(0.0, 6.0, 0.0), lower_left_corner: Vec3A(-5.142858, -4.0, 5.142858), horizontal: Vec3A(10.285716, -0.0, 0.0), vertical: Vec3A(0.0, 2.2838878e-15, -10.285716), u: Vec3A(1.0, -0.0, 0.0), v: Vec3A(0.0, 2.220446e-16, -1.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: Some("/Render/settings") +settings: RenderSettings { samples_per_pixel: 1024, max_depth: 1, width: 16, height: 16, region: PixelRect { x0: 0, y0: 0, x1: 16, y1: 16 }, min_samples_per_pixel: 1024, variance_threshold: 0.0, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: LightOnly, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: None, light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 35.0, aperture: [36.0, 36.0], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 10.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/linked_light_1024.usda"], invisible_overrides: Some(0) } +layer: $DIR/linked_light_1024.usda +lights: 1 +light 0: area name Some("/World/Key") lpe None pmf 1.0 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 3 geometries, PrimitiveBreakdown { triangles: 2, spheres: 2, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 2, spheres: 2, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +geom 0: material #0 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 0 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:330029d7b0dd8ea5 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=1:330029d7b0dd8ea5 +geom 1: material #1 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 1 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:ee76fd7ed45c4a85 camera=1:ee76fd7ed45c4a85 shadow=1:ee76fd7ed45c4a85 indirect=1:ee76fd7ed45c4a85 +geom 2: material #1 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 0 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:fce6de5b675a55c5 camera=2:fce6de5b675a55c5 shadow=2:fce6de5b675a55c5 indirect=2:fce6de5b675a55c5 +provenance light /World/Key: LightOrigin { index: 0, geoms: 0..1 } +provenance geometry 0..1: /World/Key +provenance geometry 1..2: /World/Hero +provenance geometry 2..3: /World/Floor +provenance mesh: MeshOrigin { geom_id: 2, slot: 0, baked: true, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 14903623499644419787, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [1] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/World/Cam"), cameras: ["/World/Cam"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/World/Cam"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/linked_light_1024_usda-42bcc0ce33e153f3-1.image b/crates/crust-core/tests/data/import_baselines/linked_light_1024_usda-42bcc0ce33e153f3-1.image new file mode 100644 index 000000000..5c5e8a595 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/linked_light_1024_usda-42bcc0ce33e153f3-1.image @@ -0,0 +1 @@ +16x16 16spp clamp-off 55a5f110a4a9a6e4 diff --git a/crates/crust-core/tests/data/import_baselines/linked_light_16_usda-94637210b45ab59a-1.digest b/crates/crust-core/tests/data/import_baselines/linked_light_16_usda-94637210b45ab59a-1.digest new file mode 100644 index 000000000..e5a24c29b --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/linked_light_16_usda-94637210b45ab59a-1.digest @@ -0,0 +1,26 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/World/Cam") +camera: Camera { origin: Vec3A(0.0, 6.0, 0.0), lower_left_corner: Vec3A(-5.142858, -4.0, 5.142858), horizontal: Vec3A(10.285716, -0.0, 0.0), vertical: Vec3A(0.0, 2.2838878e-15, -10.285716), u: Vec3A(1.0, -0.0, 0.0), v: Vec3A(0.0, 2.220446e-16, -1.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: Some("/Render/settings") +settings: RenderSettings { samples_per_pixel: 16, max_depth: 1, width: 16, height: 16, region: PixelRect { x0: 0, y0: 0, x1: 16, y1: 16 }, min_samples_per_pixel: 16, variance_threshold: 0.0, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: LightOnly, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: None, light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 35.0, aperture: [36.0, 36.0], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 10.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/linked_light_16.usda"], invisible_overrides: Some(0) } +layer: $DIR/linked_light_16.usda +lights: 1 +light 0: area name Some("/World/Key") lpe None pmf 1.0 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 3 geometries, PrimitiveBreakdown { triangles: 2, spheres: 2, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 2, spheres: 2, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +geom 0: material #0 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 0 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:330029d7b0dd8ea5 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=1:330029d7b0dd8ea5 +geom 1: material #1 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 1 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:ee76fd7ed45c4a85 camera=1:ee76fd7ed45c4a85 shadow=1:ee76fd7ed45c4a85 indirect=1:ee76fd7ed45c4a85 +geom 2: material #1 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 0 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:fce6de5b675a55c5 camera=2:fce6de5b675a55c5 shadow=2:fce6de5b675a55c5 indirect=2:fce6de5b675a55c5 +provenance light /World/Key: LightOrigin { index: 0, geoms: 0..1 } +provenance geometry 0..1: /World/Key +provenance geometry 1..2: /World/Hero +provenance geometry 2..3: /World/Floor +provenance mesh: MeshOrigin { geom_id: 2, slot: 0, baked: true, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 14903623499644419787, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [1] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/World/Cam"), cameras: ["/World/Cam"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/World/Cam"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/linked_light_16_usda-94637210b45ab59a-1.image b/crates/crust-core/tests/data/import_baselines/linked_light_16_usda-94637210b45ab59a-1.image new file mode 100644 index 000000000..5c5e8a595 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/linked_light_16_usda-94637210b45ab59a-1.image @@ -0,0 +1 @@ +16x16 16spp clamp-off 55a5f110a4a9a6e4 diff --git a/crates/crust-core/tests/data/import_baselines/linked_power_16_usda-eebb6febe29b133c-1.digest b/crates/crust-core/tests/data/import_baselines/linked_power_16_usda-eebb6febe29b133c-1.digest new file mode 100644 index 000000000..5136f5dac --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/linked_power_16_usda-eebb6febe29b133c-1.digest @@ -0,0 +1,26 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/World/Cam") +camera: Camera { origin: Vec3A(0.0, 6.0, 0.0), lower_left_corner: Vec3A(-5.142858, -4.0, 5.142858), horizontal: Vec3A(10.285716, -0.0, 0.0), vertical: Vec3A(0.0, 2.2838878e-15, -10.285716), u: Vec3A(1.0, -0.0, 0.0), v: Vec3A(0.0, 2.220446e-16, -1.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: Some("/Render/settings") +settings: RenderSettings { samples_per_pixel: 16, max_depth: 1, width: 16, height: 16, region: PixelRect { x0: 0, y0: 0, x1: 16, y1: 16 }, min_samples_per_pixel: 16, variance_threshold: 0.0, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: None, light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 35.0, aperture: [36.0, 36.0], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 10.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/linked_power_16.usda"], invisible_overrides: Some(0) } +layer: $DIR/linked_power_16.usda +lights: 1 +light 0: area name Some("/World/Key") lpe None pmf 1.0 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 3 geometries, PrimitiveBreakdown { triangles: 2, spheres: 2, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 2, spheres: 2, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +geom 0: material #0 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 0 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:330029d7b0dd8ea5 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=1:330029d7b0dd8ea5 +geom 1: material #1 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 1 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:ee76fd7ed45c4a85 camera=1:ee76fd7ed45c4a85 shadow=1:ee76fd7ed45c4a85 indirect=1:ee76fd7ed45c4a85 +geom 2: material #1 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 0 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:fce6de5b675a55c5 camera=2:fce6de5b675a55c5 shadow=2:fce6de5b675a55c5 indirect=2:fce6de5b675a55c5 +provenance light /World/Key: LightOrigin { index: 0, geoms: 0..1 } +provenance geometry 0..1: /World/Key +provenance geometry 1..2: /World/Hero +provenance geometry 2..3: /World/Floor +provenance mesh: MeshOrigin { geom_id: 2, slot: 0, baked: true, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 14903623499644419787, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [1] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/World/Cam"), cameras: ["/World/Cam"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/World/Cam"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/linked_power_16_usda-eebb6febe29b133c-1.image b/crates/crust-core/tests/data/import_baselines/linked_power_16_usda-eebb6febe29b133c-1.image new file mode 100644 index 000000000..c43ce0e50 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/linked_power_16_usda-eebb6febe29b133c-1.image @@ -0,0 +1 @@ +16x16 16spp clamp-off 8bb3154eaa69676f diff --git a/crates/crust-core/tests/data/import_baselines/links_usda-a0d7e6d1bd9f74ab-1.digest b/crates/crust-core/tests/data/import_baselines/links_usda-a0d7e6d1bd9f74ab-1.digest new file mode 100644 index 000000000..e8175c4b6 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/links_usda-a0d7e6d1bd9f74ab-1.digest @@ -0,0 +1,39 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: None +camera: Camera { origin: Vec3A(15.0, 3.0, 3.0), lower_left_corner: Vec3A(4.8863316, -0.044797063, 4.174048), horizontal: Vec3A(1.2295314, 0.0, -6.147657), vertical: Vec3A(-0.44830504, 3.4967792, -0.08966101), u: Vec3A(0.19611613, 0.0, -0.9805807), v: Vec3A(-0.1271232, 0.991561, -0.02542464), lens_radius: 0.05, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: None +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 640, height: 360, region: PixelRect { x0: 0, y0: 0, x1: 640, y1: 360 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: None, depth_of_field: true, motion_blur: false, layer_stack: ["$DIR/links.usda"], invisible_overrides: Some(0) } +layer: $DIR/links.usda +warning: Warning { code: CameraMissing, kind: Skipped, count: 1, prims: [], message: "USD stage has no UsdGeomCamera — falling back to world::get_settings camera" } +lights: 2 +light 0: distant name Some("/World/Lights/fill") lpe None pmf 0.5 shadow RayMask(4294967290) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 1: area name Some("/World/Lights/key") lpe None pmf 0.5 shadow RayMask(2) restricted true nee-only false twinned true gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 5 geometries, PrimitiveBreakdown { triangles: 10, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 10, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +geom 0: material #0 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 0 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:849b8165921146b8 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=2:849b8165921146b8 +geom 1: material #1 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 1 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:658935472ec9d838 camera=2:658935472ec9d838 shadow=2:658935472ec9d838 indirect=2:658935472ec9d838 +geom 2: material #1 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 0 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:71682785a2d90a85 camera=2:71682785a2d90a85 shadow=0:cbf29ce484222325 indirect=2:71682785a2d90a85 +geom 3: material #1 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 1 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:7f0030950a4845b8 camera=2:7f0030950a4845b8 shadow=2:7f0030950a4845b8 indirect=2:7f0030950a4845b8 +geom 4: material #1 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 0 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:e52d9a39978026c5 camera=2:e52d9a39978026c5 shadow=2:e52d9a39978026c5 indirect=2:e52d9a39978026c5 +provenance light /World/Lights/fill: LightOrigin { index: 0, geoms: 0..0 } +provenance light /World/Lights/key: LightOrigin { index: 1, geoms: 0..1 } +provenance geometry 0..1: /World/Lights/key +provenance geometry 1..2: /World/A/M +provenance geometry 2..3: /World/B/M +provenance geometry 3..4: /World/C/Inner/M +provenance geometry 4..5: /World/C/M +provenance mesh: MeshOrigin { geom_id: 1, slot: 0, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 2, slot: 1, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 3, slot: 2, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 4, slot: 3, baked: true, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 5062424276489054560, n_points: 4, n_indices: 4, n_uvs: None, smooth: true, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 1: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 9056688765093257811, n_points: 4, n_indices: 4, n_uvs: None, smooth: true, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 2: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 10907505002769619754, n_points: 4, n_indices: 4, n_uvs: None, smooth: true, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 3: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 204846636954257726, n_points: 4, n_indices: 4, n_uvs: None, smooth: true, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: None, cameras: [], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: None, offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/links_usda-a0d7e6d1bd9f74ab-1.image b/crates/crust-core/tests/data/import_baselines/links_usda-a0d7e6d1bd9f74ab-1.image new file mode 100644 index 000000000..f5df3ca85 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/links_usda-a0d7e6d1bd9f74ab-1.image @@ -0,0 +1 @@ +640x360 16spp clamp-off 80a07529e19ced64 diff --git a/crates/crust-core/tests/data/import_baselines/listing_usda-3efcced39a72eaa9-1.digest b/crates/crust-core/tests/data/import_baselines/listing_usda-3efcced39a72eaa9-1.digest new file mode 100644 index 000000000..85354656b --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/listing_usda-3efcced39a72eaa9-1.digest @@ -0,0 +1,24 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/W/Main") +camera: Camera { origin: Vec3A(0.0, 0.0, 0.0), lower_left_corner: Vec3A(-2.7183647, -1.5290802, -10.0), horizontal: Vec3A(5.4367294, 0.0, 0.0), vertical: Vec3A(0.0, 3.0581603, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: None +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 640, height: 360, region: PixelRect { x0: 0, y0: 0, x1: 640, y1: 360 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 50.0, aperture: [20.955, 15.2908], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 10.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/listing.usda"], invisible_overrides: Some(0) } +layer: $DIR/listing.usda +warning: Warning { code: LightDegenerateShape, kind: Skipped, count: 1, prims: ["/W/Degenerate"], message: "/W/Degenerate: Sphere light radius 0 must be finite and positive — skipped" } +warning: Warning { code: InstancingEmptyPrototype, kind: Skipped, count: 2, prims: ["/W/Scatter/P", "/__Prototype_0"], message: "Prototype /W/Scatter/P contributed no geometry" } +lights: 2 +light 0: dome name Some("/W/Sky") lpe None pmf 0.5 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 1: area name Some("/W/Key") lpe None pmf 0.5 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 1 geometries, PrimitiveBreakdown { triangles: 2, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 2, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +geom 0: material #0 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:cb23190431d38ee5 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=2:cb23190431d38ee5 +provenance light /W/Key: LightOrigin { index: 1, geoms: 0..1 } +provenance light /W/Sky: LightOrigin { index: 0, geoms: 0..0 } +provenance geometry 0..1: /W/Key +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: Some("/W/Main"), subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/W/Main"), cameras: ["/W/Last", "/W/Hidden/Witness", "/W/Main"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/W/Main"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/listing_usda-3efcced39a72eaa9-1.image b/crates/crust-core/tests/data/import_baselines/listing_usda-3efcced39a72eaa9-1.image new file mode 100644 index 000000000..b1fb14759 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/listing_usda-3efcced39a72eaa9-1.image @@ -0,0 +1 @@ +640x360 16spp clamp-off 1e3a61612e840325 diff --git a/crates/crust-core/tests/data/import_baselines/listing_usda-488ac4c542f2b8d8-1.digest b/crates/crust-core/tests/data/import_baselines/listing_usda-488ac4c542f2b8d8-1.digest new file mode 100644 index 000000000..8f010715a --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/listing_usda-488ac4c542f2b8d8-1.digest @@ -0,0 +1,24 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/W/Last") +camera: Camera { origin: Vec3A(0.0, 0.0, 0.0), lower_left_corner: Vec3A(-2.7183647, -1.5290802, -10.0), horizontal: Vec3A(5.4367294, 0.0, 0.0), vertical: Vec3A(0.0, 3.0581603, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: None +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 640, height: 360, region: PixelRect { x0: 0, y0: 0, x1: 640, y1: 360 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 50.0, aperture: [20.955, 15.2908], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 10.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/listing.usda"], invisible_overrides: Some(0) } +layer: $DIR/listing.usda +warning: Warning { code: LightDegenerateShape, kind: Skipped, count: 1, prims: ["/W/Degenerate"], message: "/W/Degenerate: Sphere light radius 0 must be finite and positive — skipped" } +warning: Warning { code: InstancingEmptyPrototype, kind: Skipped, count: 2, prims: ["/W/Scatter/P", "/__Prototype_0"], message: "Prototype /W/Scatter/P contributed no geometry" } +lights: 2 +light 0: dome name Some("/W/Sky") lpe None pmf 0.5 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 1: area name Some("/W/Key") lpe None pmf 0.5 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 1 geometries, PrimitiveBreakdown { triangles: 2, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 2, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +geom 0: material #0 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:cb23190431d38ee5 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=2:cb23190431d38ee5 +provenance light /W/Key: LightOrigin { index: 1, geoms: 0..1 } +provenance light /W/Sky: LightOrigin { index: 0, geoms: 0..0 } +provenance geometry 0..1: /W/Key +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/W/Last"), cameras: ["/W/Last", "/W/Hidden/Witness", "/W/Main"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/W/Last"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/listing_usda-488ac4c542f2b8d8-1.image b/crates/crust-core/tests/data/import_baselines/listing_usda-488ac4c542f2b8d8-1.image new file mode 100644 index 000000000..b1fb14759 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/listing_usda-488ac4c542f2b8d8-1.image @@ -0,0 +1 @@ +640x360 16spp clamp-off 1e3a61612e840325 diff --git a/crates/crust-core/tests/data/import_baselines/listing_usda-f960655cad0d43f4-1.digest b/crates/crust-core/tests/data/import_baselines/listing_usda-f960655cad0d43f4-1.digest new file mode 100644 index 000000000..fa0a2bf25 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/listing_usda-f960655cad0d43f4-1.digest @@ -0,0 +1,24 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/W/Hidden/Witness") +camera: Camera { origin: Vec3A(0.0, 0.0, 0.0), lower_left_corner: Vec3A(-2.7183647, -1.5290802, -10.0), horizontal: Vec3A(5.4367294, 0.0, 0.0), vertical: Vec3A(0.0, 3.0581603, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: None +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 640, height: 360, region: PixelRect { x0: 0, y0: 0, x1: 640, y1: 360 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 50.0, aperture: [20.955, 15.2908], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 10.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/listing.usda"], invisible_overrides: Some(0) } +layer: $DIR/listing.usda +warning: Warning { code: LightDegenerateShape, kind: Skipped, count: 1, prims: ["/W/Degenerate"], message: "/W/Degenerate: Sphere light radius 0 must be finite and positive — skipped" } +warning: Warning { code: InstancingEmptyPrototype, kind: Skipped, count: 2, prims: ["/W/Scatter/P", "/__Prototype_0"], message: "Prototype /W/Scatter/P contributed no geometry" } +lights: 2 +light 0: dome name Some("/W/Sky") lpe None pmf 0.5 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 1: area name Some("/W/Key") lpe None pmf 0.5 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 1 geometries, PrimitiveBreakdown { triangles: 2, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 2, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +geom 0: material #0 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:cb23190431d38ee5 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=2:cb23190431d38ee5 +provenance light /W/Key: LightOrigin { index: 1, geoms: 0..1 } +provenance light /W/Sky: LightOrigin { index: 0, geoms: 0..0 } +provenance geometry 0..1: /W/Key +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: Some("/W/Hidden/Witness"), subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/W/Hidden/Witness"), cameras: ["/W/Last", "/W/Hidden/Witness", "/W/Main"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/W/Hidden/Witness"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/listing_usda-f960655cad0d43f4-1.image b/crates/crust-core/tests/data/import_baselines/listing_usda-f960655cad0d43f4-1.image new file mode 100644 index 000000000..b1fb14759 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/listing_usda-f960655cad0d43f4-1.image @@ -0,0 +1 @@ +640x360 16spp clamp-off 1e3a61612e840325 diff --git a/crates/crust-core/tests/data/import_baselines/listing_usda-fd4c266bcdd26a9c-1.digest b/crates/crust-core/tests/data/import_baselines/listing_usda-fd4c266bcdd26a9c-1.digest new file mode 100644 index 000000000..502030976 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/listing_usda-fd4c266bcdd26a9c-1.digest @@ -0,0 +1,24 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/W/Last") +camera: Camera { origin: Vec3A(0.0, 0.0, 0.0), lower_left_corner: Vec3A(-2.7183647, -1.5290802, -10.0), horizontal: Vec3A(5.4367294, 0.0, 0.0), vertical: Vec3A(0.0, 3.0581603, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: None +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 640, height: 360, region: PixelRect { x0: 0, y0: 0, x1: 640, y1: 360 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 50.0, aperture: [20.955, 15.2908], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 10.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/listing.usda"], invisible_overrides: Some(0) } +layer: $DIR/listing.usda +warning: Warning { code: LightDegenerateShape, kind: Skipped, count: 1, prims: ["/W/Degenerate"], message: "/W/Degenerate: Sphere light radius 0 must be finite and positive — skipped" } +warning: Warning { code: InstancingEmptyPrototype, kind: Skipped, count: 2, prims: ["/W/Scatter/P", "/__Prototype_0"], message: "Prototype /W/Scatter/P contributed no geometry" } +lights: 2 +light 0: dome name Some("/W/Sky") lpe None pmf 0.5 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 1: area name Some("/W/Key") lpe None pmf 0.5 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 1 geometries, PrimitiveBreakdown { triangles: 2, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 2, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +geom 0: material #0 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:cb23190431d38ee5 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=2:cb23190431d38ee5 +provenance light /W/Key: LightOrigin { index: 1, geoms: 0..1 } +provenance light /W/Sky: LightOrigin { index: 0, geoms: 0..0 } +provenance geometry 0..1: /W/Key +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: Some("/W/Last"), subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/W/Last"), cameras: ["/W/Last", "/W/Hidden/Witness", "/W/Main"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/W/Last"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/listing_usda-fd4c266bcdd26a9c-1.image b/crates/crust-core/tests/data/import_baselines/listing_usda-fd4c266bcdd26a9c-1.image new file mode 100644 index 000000000..b1fb14759 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/listing_usda-fd4c266bcdd26a9c-1.image @@ -0,0 +1 @@ +640x360 16spp clamp-off 1e3a61612e840325 diff --git a/crates/crust-core/tests/data/import_baselines/live_cube_usda-4cf5f22f20fef745-1.digest b/crates/crust-core/tests/data/import_baselines/live_cube_usda-4cf5f22f20fef745-1.digest new file mode 100644 index 000000000..d6c877c5b --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/live_cube_usda-4cf5f22f20fef745-1.digest @@ -0,0 +1,20 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/W/Cam") +camera: Camera { origin: Vec3A(0.0, 0.0, 10.0), lower_left_corner: Vec3A(-3.0581603, -1.5290802, 0.0), horizontal: Vec3A(6.1163206, 0.0, 0.0), vertical: Vec3A(0.0, 3.0581603, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: Some("/Render/settings") +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 64, height: 32, region: PixelRect { x0: 0, y0: 0, x1: 64, y1: 32 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 50.0, aperture: [20.955, 15.2908], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 10.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/live_cube.usda"], invisible_overrides: Some(0) } +layer: $DIR/live_cube.usda +lights: 0 +volumes: 0 +world: 1 geometries, PrimitiveBreakdown { triangles: 12, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 12, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=12:d3f93325e3445105 camera=12:d3f93325e3445105 shadow=12:d3f93325e3445105 indirect=12:d3f93325e3445105 +provenance geometry 0..1: /W/Shape +provenance mesh: MeshOrigin { geom_id: 0, slot: 0, baked: true, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 9204403525635746283, n_points: 8, n_indices: 24, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/W/Cam"), cameras: ["/W/Cam"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/W/Cam"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/live_cube_usda-4cf5f22f20fef745-1.image b/crates/crust-core/tests/data/import_baselines/live_cube_usda-4cf5f22f20fef745-1.image new file mode 100644 index 000000000..e2bb5fad9 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/live_cube_usda-4cf5f22f20fef745-1.image @@ -0,0 +1 @@ +64x32 16spp clamp-off 332fc06af0b9a325 diff --git a/crates/crust-core/tests/data/import_baselines/live_cylinder_unnamed_usda-7b7e7a1709504194-1.digest b/crates/crust-core/tests/data/import_baselines/live_cylinder_unnamed_usda-7b7e7a1709504194-1.digest new file mode 100644 index 000000000..c5f62472b --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/live_cylinder_unnamed_usda-7b7e7a1709504194-1.digest @@ -0,0 +1,20 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/W/Cam") +camera: Camera { origin: Vec3A(0.0, 0.0, 10.0), lower_left_corner: Vec3A(-3.0581603, -1.5290802, 0.0), horizontal: Vec3A(6.1163206, 0.0, 0.0), vertical: Vec3A(0.0, 3.0581603, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: Some("/Render/settings") +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 64, height: 32, region: PixelRect { x0: 0, y0: 0, x1: 64, y1: 32 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 50.0, aperture: [20.955, 15.2908], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 10.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/live_cylinder_unnamed.usda"], invisible_overrides: Some(0) } +layer: $DIR/live_cylinder_unnamed.usda +lights: 0 +volumes: 0 +world: 1 geometries, PrimitiveBreakdown { triangles: 192, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 192, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=192:417dbfabd3a17585 camera=192:417dbfabd3a17585 shadow=192:417dbfabd3a17585 indirect=192:417dbfabd3a17585 +provenance geometry 0..1: /W/Shape +provenance mesh: MeshOrigin { geom_id: 0, slot: 0, baked: true, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 6877125351767401758, n_points: 194, n_indices: 480, n_uvs: None, smooth: true, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/W/Cam"), cameras: ["/W/Cam"], dicing: None, on_screen_shapes: None, unsized_shapes: true, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/W/Cam"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/live_cylinder_unnamed_usda-7b7e7a1709504194-1.image b/crates/crust-core/tests/data/import_baselines/live_cylinder_unnamed_usda-7b7e7a1709504194-1.image new file mode 100644 index 000000000..e2bb5fad9 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/live_cylinder_unnamed_usda-7b7e7a1709504194-1.image @@ -0,0 +1 @@ +64x32 16spp clamp-off 332fc06af0b9a325 diff --git a/crates/crust-core/tests/data/import_baselines/live_cylinder_usda-07218dcdd495ca91-1.digest b/crates/crust-core/tests/data/import_baselines/live_cylinder_usda-07218dcdd495ca91-1.digest new file mode 100644 index 000000000..af464f03c --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/live_cylinder_usda-07218dcdd495ca91-1.digest @@ -0,0 +1,20 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/W/Cam") +camera: Camera { origin: Vec3A(0.0, 0.0, 10.0), lower_left_corner: Vec3A(-3.0581603, -1.5290802, 0.0), horizontal: Vec3A(6.1163206, 0.0, 0.0), vertical: Vec3A(0.0, 3.0581603, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: Some("/Render/settings") +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 64, height: 32, region: PixelRect { x0: 0, y0: 0, x1: 64, y1: 32 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 50.0, aperture: [20.955, 15.2908], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 10.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/live_cylinder.usda"], invisible_overrides: Some(0) } +layer: $DIR/live_cylinder.usda +lights: 0 +volumes: 0 +world: 1 geometries, PrimitiveBreakdown { triangles: 64, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 64, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=64:5f84dcb3c52b7405 camera=64:5f84dcb3c52b7405 shadow=64:5f84dcb3c52b7405 indirect=64:5f84dcb3c52b7405 +provenance geometry 0..1: /W/Shape +provenance mesh: MeshOrigin { geom_id: 0, slot: 0, baked: true, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 13212365895451826409, n_points: 66, n_indices: 160, n_uvs: None, smooth: true, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/W/Cam"), cameras: ["/W/Cam"], dicing: None, on_screen_shapes: Some(ScreenKey([0, 0, 1092616192, 1121011379, 0, 0, 1092616192, 3212836864, 0, 3197932522, 1065353216, 0, 3197932522, 0, 3212836864, 3189543914, 0, 1065353216, 3189543914, 0, 0, 3212836864])), unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/W/Cam"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/live_cylinder_usda-07218dcdd495ca91-1.image b/crates/crust-core/tests/data/import_baselines/live_cylinder_usda-07218dcdd495ca91-1.image new file mode 100644 index 000000000..e2bb5fad9 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/live_cylinder_usda-07218dcdd495ca91-1.image @@ -0,0 +1 @@ +64x32 16spp clamp-off 332fc06af0b9a325 diff --git a/crates/crust-core/tests/data/import_baselines/live_demoted_light_usda-16477f127e75566e-1.digest b/crates/crust-core/tests/data/import_baselines/live_demoted_light_usda-16477f127e75566e-1.digest new file mode 100644 index 000000000..8d74f6522 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/live_demoted_light_usda-16477f127e75566e-1.digest @@ -0,0 +1,39 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: None +camera: Camera { origin: Vec3A(15.0, 3.0, 3.0), lower_left_corner: Vec3A(4.8863316, -0.044797063, 4.174048), horizontal: Vec3A(1.2295314, 0.0, -6.147657), vertical: Vec3A(-0.44830504, 3.4967792, -0.08966101), u: Vec3A(0.19611613, 0.0, -0.9805807), v: Vec3A(-0.1271232, 0.991561, -0.02542464), lens_radius: 0.05, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: None +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 640, height: 360, region: PixelRect { x0: 0, y0: 0, x1: 640, y1: 360 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: None, depth_of_field: true, motion_blur: false, layer_stack: ["$DIR/live_demoted_light.usda"], invisible_overrides: Some(0) } +layer: $DIR/live_demoted_light.usda +warning: Warning { code: CameraMissing, kind: Skipped, count: 1, prims: [], message: "USD stage has no UsdGeomCamera — falling back to world::get_settings camera" } +lights: 4 +light 0: area name Some("/W/K1") lpe None pmf 0.25 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 1: area name Some("/W/K2") lpe None pmf 0.25 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 2: area name Some("/W/K3") lpe None pmf 0.25 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 3: area name Some("/W/K4") lpe None pmf 0.25 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 6 geometries, PrimitiveBreakdown { triangles: 2, spheres: 5, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 2, spheres: 5, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +geom 0: material #0 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:ee57dfea4661cce3 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=1:ee57dfea4661cce3 +geom 1: material #1 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:15501014f6ccffa4 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=1:15501014f6ccffa4 +geom 2: material #2 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=0:cbf29ce484222325 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=0:cbf29ce484222325 +geom 3: material #3 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:a357e5efbc0c08cc camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=1:a357e5efbc0c08cc +geom 4: material #4 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:18dc8de5ad9d8317 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=1:18dc8de5ad9d8317 +geom 5: material #5 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:6787da8eacebee45 camera=2:6787da8eacebee45 shadow=2:6787da8eacebee45 indirect=2:6787da8eacebee45 +provenance light /W/K1: LightOrigin { index: 0, geoms: 0..1 } +provenance light /W/K2: LightOrigin { index: 1, geoms: 1..2 } +provenance light /W/K3: LightOrigin { index: 2, geoms: 3..4 } +provenance light /W/K4: LightOrigin { index: 3, geoms: 4..5 } +provenance geometry 0..1: /W/K1 +provenance geometry 1..2: /W/K2 +provenance geometry 2..3: /W/Dead +provenance geometry 3..4: /W/K3 +provenance geometry 4..5: /W/K4 +provenance geometry 5..6: /W/Floor +provenance mesh: MeshOrigin { geom_id: 5, slot: 0, baked: true, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 800109031887815527, n_points: 4, n_indices: 4, n_uvs: None, smooth: true, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: None, cameras: [], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: None, offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/live_demoted_light_usda-16477f127e75566e-1.image b/crates/crust-core/tests/data/import_baselines/live_demoted_light_usda-16477f127e75566e-1.image new file mode 100644 index 000000000..214b67818 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/live_demoted_light_usda-16477f127e75566e-1.image @@ -0,0 +1 @@ +640x360 16spp clamp-off a042bfcc25c9e880 diff --git a/crates/crust-core/tests/data/import_baselines/live_demoted_light_usda-16477f127e75566e-2.digest b/crates/crust-core/tests/data/import_baselines/live_demoted_light_usda-16477f127e75566e-2.digest new file mode 100644 index 000000000..8d74f6522 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/live_demoted_light_usda-16477f127e75566e-2.digest @@ -0,0 +1,39 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: None +camera: Camera { origin: Vec3A(15.0, 3.0, 3.0), lower_left_corner: Vec3A(4.8863316, -0.044797063, 4.174048), horizontal: Vec3A(1.2295314, 0.0, -6.147657), vertical: Vec3A(-0.44830504, 3.4967792, -0.08966101), u: Vec3A(0.19611613, 0.0, -0.9805807), v: Vec3A(-0.1271232, 0.991561, -0.02542464), lens_radius: 0.05, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: None +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 640, height: 360, region: PixelRect { x0: 0, y0: 0, x1: 640, y1: 360 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: None, depth_of_field: true, motion_blur: false, layer_stack: ["$DIR/live_demoted_light.usda"], invisible_overrides: Some(0) } +layer: $DIR/live_demoted_light.usda +warning: Warning { code: CameraMissing, kind: Skipped, count: 1, prims: [], message: "USD stage has no UsdGeomCamera — falling back to world::get_settings camera" } +lights: 4 +light 0: area name Some("/W/K1") lpe None pmf 0.25 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 1: area name Some("/W/K2") lpe None pmf 0.25 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 2: area name Some("/W/K3") lpe None pmf 0.25 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 3: area name Some("/W/K4") lpe None pmf 0.25 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 6 geometries, PrimitiveBreakdown { triangles: 2, spheres: 5, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 2, spheres: 5, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +geom 0: material #0 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:ee57dfea4661cce3 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=1:ee57dfea4661cce3 +geom 1: material #1 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:15501014f6ccffa4 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=1:15501014f6ccffa4 +geom 2: material #2 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=0:cbf29ce484222325 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=0:cbf29ce484222325 +geom 3: material #3 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:a357e5efbc0c08cc camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=1:a357e5efbc0c08cc +geom 4: material #4 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:18dc8de5ad9d8317 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=1:18dc8de5ad9d8317 +geom 5: material #5 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:6787da8eacebee45 camera=2:6787da8eacebee45 shadow=2:6787da8eacebee45 indirect=2:6787da8eacebee45 +provenance light /W/K1: LightOrigin { index: 0, geoms: 0..1 } +provenance light /W/K2: LightOrigin { index: 1, geoms: 1..2 } +provenance light /W/K3: LightOrigin { index: 2, geoms: 3..4 } +provenance light /W/K4: LightOrigin { index: 3, geoms: 4..5 } +provenance geometry 0..1: /W/K1 +provenance geometry 1..2: /W/K2 +provenance geometry 2..3: /W/Dead +provenance geometry 3..4: /W/K3 +provenance geometry 4..5: /W/K4 +provenance geometry 5..6: /W/Floor +provenance mesh: MeshOrigin { geom_id: 5, slot: 0, baked: true, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 800109031887815527, n_points: 4, n_indices: 4, n_uvs: None, smooth: true, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: None, cameras: [], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: None, offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/live_demoted_light_usda-16477f127e75566e-2.image b/crates/crust-core/tests/data/import_baselines/live_demoted_light_usda-16477f127e75566e-2.image new file mode 100644 index 000000000..214b67818 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/live_demoted_light_usda-16477f127e75566e-2.image @@ -0,0 +1 @@ +640x360 16spp clamp-off a042bfcc25c9e880 diff --git a/crates/crust-core/tests/data/import_baselines/live_dicing_none_usda-fde7cae55b0adc90-1.digest b/crates/crust-core/tests/data/import_baselines/live_dicing_none_usda-fde7cae55b0adc90-1.digest new file mode 100644 index 000000000..13451c4ca --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/live_dicing_none_usda-fde7cae55b0adc90-1.digest @@ -0,0 +1,24 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/W/Cam") +camera: Camera { origin: Vec3A(0.0, 0.0, 10.0), lower_left_corner: Vec3A(-4.8, -2.4, 0.0), horizontal: Vec3A(9.6, 0.0, 0.0), vertical: Vec3A(0.0, 4.8, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: Some("/Render/settings") +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 64, height: 32, region: PixelRect { x0: 0, y0: 0, x1: 64, y1: 32 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 50.0, aperture: [36.0, 24.0], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 10.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/live_dicing_none.usda"], invisible_overrides: Some(0) } +layer: $DIR/live_dicing_none.usda +lights: 1 +light 0: dome name Some("/W/Sky") lpe None pmf 1.0 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 2 geometries, PrimitiveBreakdown { triangles: 714, spheres: 1, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 714, spheres: 1, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=714:3e4f5ff3a9a07f75 camera=714:3e4f5ff3a9a07f75 shadow=714:3e4f5ff3a9a07f75 indirect=714:3e4f5ff3a9a07f75 +geom 1: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:fb1e7d48790aec95 camera=1:fb1e7d48790aec95 shadow=1:fb1e7d48790aec95 indirect=1:fb1e7d48790aec95 +provenance light /W/Sky: LightOrigin { index: 0, geoms: 1..1 } +provenance geometry 0..1: /W/Cage +provenance geometry 1..2: /W/Ball +provenance mesh: MeshOrigin { geom_id: 0, slot: 0, baked: true, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 2684244338757133449, n_points: 359, n_indices: 2142, n_uvs: None, smooth: true, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [1] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: Some(ScreenKey([0, 0, 1092616192, 1116034389, 0, 0, 1092616192, 3212836864, 0, 3203777167, 1065353216, 0, 3203777167, 0, 3212836864, 3195388559, 0, 1065353216, 3195388559, 0, 0, 3212836864, 1073741824, 3])), domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/W/Cam"), cameras: ["/W/Dicer", "/W/Cam"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/W/Cam"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/live_dicing_none_usda-fde7cae55b0adc90-1.image b/crates/crust-core/tests/data/import_baselines/live_dicing_none_usda-fde7cae55b0adc90-1.image new file mode 100644 index 000000000..135f05865 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/live_dicing_none_usda-fde7cae55b0adc90-1.image @@ -0,0 +1 @@ +64x32 16spp clamp-off 65508cb8ca4e0eda diff --git a/crates/crust-core/tests/data/import_baselines/live_dicing_retarget_usda-682d6c0fca1a4c12-1.digest b/crates/crust-core/tests/data/import_baselines/live_dicing_retarget_usda-682d6c0fca1a4c12-1.digest new file mode 100644 index 000000000..745d9d482 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/live_dicing_retarget_usda-682d6c0fca1a4c12-1.digest @@ -0,0 +1,24 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/W/Cam") +camera: Camera { origin: Vec3A(0.0, 0.0, 10.0), lower_left_corner: Vec3A(-4.8, -2.4, 0.0), horizontal: Vec3A(9.6, 0.0, 0.0), vertical: Vec3A(0.0, 4.8, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: Some("/Render/settings") +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 64, height: 32, region: PixelRect { x0: 0, y0: 0, x1: 64, y1: 32 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 50.0, aperture: [36.0, 24.0], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 10.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/live_dicing_retarget.usda"], invisible_overrides: Some(0) } +layer: $DIR/live_dicing_retarget.usda +lights: 1 +light 0: dome name Some("/W/Sky") lpe None pmf 1.0 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 2 geometries, PrimitiveBreakdown { triangles: 502, spheres: 1, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 502, spheres: 1, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=502:6396f027b367ad8a camera=502:6396f027b367ad8a shadow=502:6396f027b367ad8a indirect=502:6396f027b367ad8a +geom 1: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:fb1e7d48790aec95 camera=1:fb1e7d48790aec95 shadow=1:fb1e7d48790aec95 indirect=1:fb1e7d48790aec95 +provenance light /W/Sky: LightOrigin { index: 0, geoms: 1..1 } +provenance geometry 0..1: /W/Cage +provenance geometry 1..2: /W/Ball +provenance mesh: MeshOrigin { geom_id: 0, slot: 0, baked: true, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 9653551266655765309, n_points: 253, n_indices: 1506, n_uvs: None, smooth: true, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [1] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: Some(ScreenKey([0, 1065353216, 1094713344, 1116034389, 0, 1065353216, 1094713344, 3212836864, 0, 3203777167, 1065353216, 0, 3203777167, 0, 3212836864, 3195388559, 0, 1065353216, 3195388559, 0, 0, 3212836864, 1073741824, 3])), domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/W/Cam"), cameras: ["/W/Dicer", "/W/Cam"], dicing: Some("/W/Dicer"), on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/W/Cam"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/live_dicing_retarget_usda-682d6c0fca1a4c12-1.image b/crates/crust-core/tests/data/import_baselines/live_dicing_retarget_usda-682d6c0fca1a4c12-1.image new file mode 100644 index 000000000..dda883b77 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/live_dicing_retarget_usda-682d6c0fca1a4c12-1.image @@ -0,0 +1 @@ +64x32 16spp clamp-off 70bad9e32c7499c8 diff --git a/crates/crust-core/tests/data/import_baselines/live_dicing_usda-8bb261767fad5d1d-1.digest b/crates/crust-core/tests/data/import_baselines/live_dicing_usda-8bb261767fad5d1d-1.digest new file mode 100644 index 000000000..aac88a44a --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/live_dicing_usda-8bb261767fad5d1d-1.digest @@ -0,0 +1,24 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/W/Cam") +camera: Camera { origin: Vec3A(0.0, 0.0, 10.0), lower_left_corner: Vec3A(-4.8, -2.4, 0.0), horizontal: Vec3A(9.6, 0.0, 0.0), vertical: Vec3A(0.0, 4.8, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: Some("/Render/settings") +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 64, height: 32, region: PixelRect { x0: 0, y0: 0, x1: 64, y1: 32 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 50.0, aperture: [36.0, 24.0], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 10.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/live_dicing.usda"], invisible_overrides: Some(0) } +layer: $DIR/live_dicing.usda +lights: 1 +light 0: dome name Some("/W/Sky") lpe None pmf 1.0 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 2 geometries, PrimitiveBreakdown { triangles: 502, spheres: 1, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 502, spheres: 1, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=502:6396f027b367ad8a camera=502:6396f027b367ad8a shadow=502:6396f027b367ad8a indirect=502:6396f027b367ad8a +geom 1: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:fb1e7d48790aec95 camera=1:fb1e7d48790aec95 shadow=1:fb1e7d48790aec95 indirect=1:fb1e7d48790aec95 +provenance light /W/Sky: LightOrigin { index: 0, geoms: 1..1 } +provenance geometry 0..1: /W/Cage +provenance geometry 1..2: /W/Ball +provenance mesh: MeshOrigin { geom_id: 0, slot: 0, baked: true, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 9653551266655765309, n_points: 253, n_indices: 1506, n_uvs: None, smooth: true, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [1] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: Some(ScreenKey([0, 1065353216, 1094713344, 1116034389, 0, 1065353216, 1094713344, 3212836864, 0, 3203777167, 1065353216, 0, 3203777167, 0, 3212836864, 3195388559, 0, 1065353216, 3195388559, 0, 0, 3212836864, 1073741824, 3])), domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/W/Cam"), cameras: ["/W/Dicer", "/W/Cam"], dicing: Some("/W/Dicer"), on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/W/Cam"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/live_dicing_usda-8bb261767fad5d1d-1.image b/crates/crust-core/tests/data/import_baselines/live_dicing_usda-8bb261767fad5d1d-1.image new file mode 100644 index 000000000..dda883b77 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/live_dicing_usda-8bb261767fad5d1d-1.image @@ -0,0 +1 @@ +64x32 16spp clamp-off 70bad9e32c7499c8 diff --git a/crates/crust-core/tests/data/import_baselines/live_dicing_usda-c3c9ffc84677f809-1.digest b/crates/crust-core/tests/data/import_baselines/live_dicing_usda-c3c9ffc84677f809-1.digest new file mode 100644 index 000000000..a1f947e76 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/live_dicing_usda-c3c9ffc84677f809-1.digest @@ -0,0 +1,24 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/W/Cam") +camera: Camera { origin: Vec3A(0.0, 0.0, 7.0), lower_left_corner: Vec3A(-4.8, -2.4, -3.0), horizontal: Vec3A(9.6, 0.0, 0.0), vertical: Vec3A(0.0, 4.8, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: Some("/Render/settings") +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 64, height: 32, region: PixelRect { x0: 0, y0: 0, x1: 64, y1: 32 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 50.0, aperture: [36.0, 24.0], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 10.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/live_dicing.usda"], invisible_overrides: Some(0) } +layer: $DIR/live_dicing.usda +lights: 1 +light 0: dome name Some("/W/Sky") lpe None pmf 1.0 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 2 geometries, PrimitiveBreakdown { triangles: 502, spheres: 1, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 502, spheres: 1, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=502:6396f027b367ad8a camera=502:6396f027b367ad8a shadow=502:6396f027b367ad8a indirect=502:6396f027b367ad8a +geom 1: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:fb1e7d48790aec95 camera=1:fb1e7d48790aec95 shadow=1:fb1e7d48790aec95 indirect=1:fb1e7d48790aec95 +provenance light /W/Sky: LightOrigin { index: 0, geoms: 1..1 } +provenance geometry 0..1: /W/Cage +provenance geometry 1..2: /W/Ball +provenance mesh: MeshOrigin { geom_id: 0, slot: 0, baked: true, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 9653551266655765309, n_points: 253, n_indices: 1506, n_uvs: None, smooth: true, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [1] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: Some(ScreenKey([0, 1065353216, 1094713344, 1116034389, 0, 1065353216, 1094713344, 3212836864, 0, 3203777167, 1065353216, 0, 3203777167, 0, 3212836864, 3195388559, 0, 1065353216, 3195388559, 0, 0, 3212836864, 1073741824, 3])), domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/W/Cam"), cameras: ["/W/Dicer", "/W/Cam"], dicing: Some("/W/Dicer"), on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/W/Cam"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/live_dicing_usda-c3c9ffc84677f809-1.image b/crates/crust-core/tests/data/import_baselines/live_dicing_usda-c3c9ffc84677f809-1.image new file mode 100644 index 000000000..4fbdb33d2 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/live_dicing_usda-c3c9ffc84677f809-1.image @@ -0,0 +1 @@ +64x32 16spp clamp-off 42720b5aadcdbe76 diff --git a/crates/crust-core/tests/data/import_baselines/live_framing_adaptive_usda-264a6722f87e2488-1.digest b/crates/crust-core/tests/data/import_baselines/live_framing_adaptive_usda-264a6722f87e2488-1.digest new file mode 100644 index 000000000..82d741dfd --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/live_framing_adaptive_usda-264a6722f87e2488-1.digest @@ -0,0 +1,24 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/W/Cam") +camera: Camera { origin: Vec3A(0.0, 0.0, 10.0), lower_left_corner: Vec3A(-4.8, -2.4, 0.0), horizontal: Vec3A(9.6, 0.0, 0.0), vertical: Vec3A(0.0, 4.8, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: Some("/Render/settings") +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 64, height: 32, region: PixelRect { x0: 0, y0: 0, x1: 64, y1: 32 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 50.0, aperture: [36.0, 24.0], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 10.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/live_framing_adaptive.usda"], invisible_overrides: Some(0) } +layer: $DIR/live_framing_adaptive.usda +lights: 1 +light 0: dome name Some("/W/Sky") lpe None pmf 1.0 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 2 geometries, PrimitiveBreakdown { triangles: 714, spheres: 1, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 714, spheres: 1, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=714:3e4f5ff3a9a07f75 camera=714:3e4f5ff3a9a07f75 shadow=714:3e4f5ff3a9a07f75 indirect=714:3e4f5ff3a9a07f75 +geom 1: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:fb1e7d48790aec95 camera=1:fb1e7d48790aec95 shadow=1:fb1e7d48790aec95 indirect=1:fb1e7d48790aec95 +provenance light /W/Sky: LightOrigin { index: 0, geoms: 1..1 } +provenance geometry 0..1: /W/Cage +provenance geometry 1..2: /W/Ball +provenance mesh: MeshOrigin { geom_id: 0, slot: 0, baked: true, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 2684244338757133449, n_points: 359, n_indices: 2142, n_uvs: None, smooth: true, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [1] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: Some(ScreenKey([0, 0, 1092616192, 1116034389, 0, 0, 1092616192, 3212836864, 0, 3203777167, 1065353216, 0, 3203777167, 0, 3212836864, 3195388559, 0, 1065353216, 3195388559, 0, 0, 3212836864, 1073741824, 3])), domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/W/Cam"), cameras: ["/W/Cam"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/W/Cam"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/live_framing_adaptive_usda-264a6722f87e2488-1.image b/crates/crust-core/tests/data/import_baselines/live_framing_adaptive_usda-264a6722f87e2488-1.image new file mode 100644 index 000000000..135f05865 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/live_framing_adaptive_usda-264a6722f87e2488-1.image @@ -0,0 +1 @@ +64x32 16spp clamp-off 65508cb8ca4e0eda diff --git a/crates/crust-core/tests/data/import_baselines/live_framing_usda-21ec0fb4edc0e3e0-1.digest b/crates/crust-core/tests/data/import_baselines/live_framing_usda-21ec0fb4edc0e3e0-1.digest new file mode 100644 index 000000000..354d9d63e --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/live_framing_usda-21ec0fb4edc0e3e0-1.digest @@ -0,0 +1,20 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/W/Cam") +camera: Camera { origin: Vec3A(0.0, 0.0, 10.0), lower_left_corner: Vec3A(-3.6000001, -1.8000001, 0.0), horizontal: Vec3A(7.2000003, 0.0, 0.0), vertical: Vec3A(0.0, 3.6000001, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: Some("/Render/settings") +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 64, height: 32, region: PixelRect { x0: 0, y0: 0, x1: 64, y1: 32 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 50.0, aperture: [36.0, 24.0], aperture_offset: [0.0, 0.0], conform: "adjustApertureHeight", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 10.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/live_framing.usda"], invisible_overrides: Some(0) } +layer: $DIR/live_framing.usda +lights: 1 +light 0: dome name Some("/W/Sky") lpe None pmf 1.0 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 1 geometries, PrimitiveBreakdown { triangles: 0, spheres: 1, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 0, spheres: 1, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:fb1e7d48790aec95 camera=1:fb1e7d48790aec95 shadow=1:fb1e7d48790aec95 indirect=1:fb1e7d48790aec95 +provenance light /W/Sky: LightOrigin { index: 0, geoms: 0..0 } +provenance geometry 0..1: /W/Ball +provenance spheres: [0] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/W/Cam"), cameras: ["/W/Cam"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/W/Cam"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/live_framing_usda-21ec0fb4edc0e3e0-1.image b/crates/crust-core/tests/data/import_baselines/live_framing_usda-21ec0fb4edc0e3e0-1.image new file mode 100644 index 000000000..49b1a16bb --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/live_framing_usda-21ec0fb4edc0e3e0-1.image @@ -0,0 +1 @@ +64x32 16spp clamp-off 3e487c20041ed425 diff --git a/crates/crust-core/tests/data/import_baselines/live_framing_usda-6d7a1bccee33c035-1.digest b/crates/crust-core/tests/data/import_baselines/live_framing_usda-6d7a1bccee33c035-1.digest new file mode 100644 index 000000000..8ae25dc21 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/live_framing_usda-6d7a1bccee33c035-1.digest @@ -0,0 +1,20 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/W/Cam") +camera: Camera { origin: Vec3A(0.0, 0.0, 10.0), lower_left_corner: Vec3A(-4.8, -2.4, 0.0), horizontal: Vec3A(9.6, 0.0, 0.0), vertical: Vec3A(0.0, 4.8, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: Some("/Render/settings") +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 64, height: 32, region: PixelRect { x0: 0, y0: 0, x1: 64, y1: 32 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 50.0, aperture: [36.0, 24.0], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 10.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/live_framing.usda"], invisible_overrides: Some(0) } +layer: $DIR/live_framing.usda +lights: 1 +light 0: dome name Some("/W/Sky") lpe None pmf 1.0 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 1 geometries, PrimitiveBreakdown { triangles: 0, spheres: 1, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 0, spheres: 1, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:fb1e7d48790aec95 camera=1:fb1e7d48790aec95 shadow=1:fb1e7d48790aec95 indirect=1:fb1e7d48790aec95 +provenance light /W/Sky: LightOrigin { index: 0, geoms: 0..0 } +provenance geometry 0..1: /W/Ball +provenance spheres: [0] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/W/Cam"), cameras: ["/W/Cam"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/W/Cam"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/live_framing_usda-6d7a1bccee33c035-1.image b/crates/crust-core/tests/data/import_baselines/live_framing_usda-6d7a1bccee33c035-1.image new file mode 100644 index 000000000..a9f73b500 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/live_framing_usda-6d7a1bccee33c035-1.image @@ -0,0 +1 @@ +64x32 16spp clamp-off f928cebc00d34ba3 diff --git a/crates/crust-core/tests/data/import_baselines/live_framing_usda-6d7a1bccee33c035-2.digest b/crates/crust-core/tests/data/import_baselines/live_framing_usda-6d7a1bccee33c035-2.digest new file mode 100644 index 000000000..8ae25dc21 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/live_framing_usda-6d7a1bccee33c035-2.digest @@ -0,0 +1,20 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/W/Cam") +camera: Camera { origin: Vec3A(0.0, 0.0, 10.0), lower_left_corner: Vec3A(-4.8, -2.4, 0.0), horizontal: Vec3A(9.6, 0.0, 0.0), vertical: Vec3A(0.0, 4.8, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: Some("/Render/settings") +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 64, height: 32, region: PixelRect { x0: 0, y0: 0, x1: 64, y1: 32 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 50.0, aperture: [36.0, 24.0], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 10.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/live_framing.usda"], invisible_overrides: Some(0) } +layer: $DIR/live_framing.usda +lights: 1 +light 0: dome name Some("/W/Sky") lpe None pmf 1.0 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 1 geometries, PrimitiveBreakdown { triangles: 0, spheres: 1, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 0, spheres: 1, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:fb1e7d48790aec95 camera=1:fb1e7d48790aec95 shadow=1:fb1e7d48790aec95 indirect=1:fb1e7d48790aec95 +provenance light /W/Sky: LightOrigin { index: 0, geoms: 0..0 } +provenance geometry 0..1: /W/Ball +provenance spheres: [0] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/W/Cam"), cameras: ["/W/Cam"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/W/Cam"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/live_framing_usda-6d7a1bccee33c035-2.image b/crates/crust-core/tests/data/import_baselines/live_framing_usda-6d7a1bccee33c035-2.image new file mode 100644 index 000000000..a9f73b500 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/live_framing_usda-6d7a1bccee33c035-2.image @@ -0,0 +1 @@ +64x32 16spp clamp-off f928cebc00d34ba3 diff --git a/crates/crust-core/tests/data/import_baselines/live_primvar_warnings_usda-bb9c911d0ed38f94-1.digest b/crates/crust-core/tests/data/import_baselines/live_primvar_warnings_usda-bb9c911d0ed38f94-1.digest new file mode 100644 index 000000000..62ed5bb64 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/live_primvar_warnings_usda-bb9c911d0ed38f94-1.digest @@ -0,0 +1,26 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/W/Cam") +camera: Camera { origin: Vec3A(0.0, 0.0, 10.0), lower_left_corner: Vec3A(-2.0954998, -2.0954998, 0.0), horizontal: Vec3A(4.1909995, 0.0, 0.0), vertical: Vec3A(0.0, 4.1909995, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: Some("/Render/settings") +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 32, height: 32, region: PixelRect { x0: 0, y0: 0, x1: 32, y1: 32 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [AovProduct { prim_path: "/Render/withRest", name: "rest.exr", vars: [AovVar { prim_path: "/Render/depth", name: "depth", channel_prefix: None, source: Depth, components: 1, precision: Float, accumulation: Closest, clear: inf, expression: None, raw: false, variance: false }, AovVar { prim_path: "/Render/Pref", name: "Pref", channel_prefix: None, source: Primvar(PrimvarSource { index: 0, components: 3, role: Vector }), components: 3, precision: Float, accumulation: Closest, clear: 0.0, expression: None, raw: false, variance: false }], attributes: [] }], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 50.0, aperture: [20.955, 15.2908], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 10.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/live_primvar_warnings.usda"], invisible_overrides: Some(0) } +layer: $DIR/live_primvar_warnings.usda +warning: Warning { code: PrimvarNotInherited, kind: Skipped, count: 1, prims: ["/W"], message: "/Render/Pref asks for primvar \"rest\", which an ancestor authors on /W above /W/M; crust does not inherit primvars yet, so the prims it would reach read the clear value" } +warning: Warning { code: PrimvarMismatch, kind: Skipped, count: 1, prims: ["/W/N"], message: "/Render/Pref asks for primvar \"rest\" as 3 component(s), but /W/N authors it as float2[] (2 component(s)); that prim reads the clear value" } +lights: 0 +volumes: 0 +world: 2 geometries, PrimitiveBreakdown { triangles: 3, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 3, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:32f1a52c797bfee5 camera=2:32f1a52c797bfee5 shadow=2:32f1a52c797bfee5 indirect=2:32f1a52c797bfee5 +geom 1: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:f5cbcc0cc135c768 camera=1:f5cbcc0cc135c768 shadow=1:f5cbcc0cc135c768 indirect=1:f5cbcc0cc135c768 +provenance geometry 0..1: /W/M +provenance geometry 1..2: /W/N +provenance mesh: MeshOrigin { geom_id: 0, slot: 0, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 1, slot: 1, baked: true, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 16756132900457544540, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 1: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 12220295910520633268, n_points: 3, n_indices: 3, n_uvs: None, smooth: true, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/W/Cam"), cameras: ["/W/Cam"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [("rest", 3)], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/W/Cam"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/live_primvar_warnings_usda-bb9c911d0ed38f94-1.image b/crates/crust-core/tests/data/import_baselines/live_primvar_warnings_usda-bb9c911d0ed38f94-1.image new file mode 100644 index 000000000..361b4195c --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/live_primvar_warnings_usda-bb9c911d0ed38f94-1.image @@ -0,0 +1 @@ +32x32 16spp clamp-off 6e431751526de325 diff --git a/crates/crust-core/tests/data/import_baselines/live_primvars_retarget_usda-59fb6cd49cb76e6b-1.digest b/crates/crust-core/tests/data/import_baselines/live_primvars_retarget_usda-59fb6cd49cb76e6b-1.digest new file mode 100644 index 000000000..09ae180bc --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/live_primvars_retarget_usda-59fb6cd49cb76e6b-1.digest @@ -0,0 +1,20 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/W/Cam") +camera: Camera { origin: Vec3A(0.0, 0.0, 10.0), lower_left_corner: Vec3A(-2.0954998, -2.0954998, 0.0), horizontal: Vec3A(4.1909995, 0.0, 0.0), vertical: Vec3A(0.0, 4.1909995, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: Some("/Render/settings") +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 32, height: 32, region: PixelRect { x0: 0, y0: 0, x1: 32, y1: 32 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [AovProduct { prim_path: "/Render/plain", name: "plain.exr", vars: [AovVar { prim_path: "/Render/depth", name: "depth", channel_prefix: None, source: Depth, components: 1, precision: Float, accumulation: Closest, clear: inf, expression: None, raw: false, variance: false }], attributes: [] }], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 50.0, aperture: [20.955, 15.2908], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 10.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/live_primvars_retarget.usda"], invisible_overrides: Some(0) } +layer: $DIR/live_primvars_retarget.usda +lights: 0 +volumes: 0 +world: 1 geometries, PrimitiveBreakdown { triangles: 2, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 2, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:32f1a52c797bfee5 camera=2:32f1a52c797bfee5 shadow=2:32f1a52c797bfee5 indirect=2:32f1a52c797bfee5 +provenance geometry 0..1: /W/M +provenance mesh: MeshOrigin { geom_id: 0, slot: 0, baked: true, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 14414187199170096052, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/W/Cam"), cameras: ["/W/Cam"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/W/Cam"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/live_primvars_retarget_usda-59fb6cd49cb76e6b-1.image b/crates/crust-core/tests/data/import_baselines/live_primvars_retarget_usda-59fb6cd49cb76e6b-1.image new file mode 100644 index 000000000..361b4195c --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/live_primvars_retarget_usda-59fb6cd49cb76e6b-1.image @@ -0,0 +1 @@ +32x32 16spp clamp-off 6e431751526de325 diff --git a/crates/crust-core/tests/data/import_baselines/live_primvars_retarget_usda-f4742b8648291059-1.digest b/crates/crust-core/tests/data/import_baselines/live_primvars_retarget_usda-f4742b8648291059-1.digest new file mode 100644 index 000000000..3eb34779c --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/live_primvars_retarget_usda-f4742b8648291059-1.digest @@ -0,0 +1,20 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/W/Cam") +camera: Camera { origin: Vec3A(0.0, 0.0, 10.0), lower_left_corner: Vec3A(-2.0954998, -2.0954998, 0.0), horizontal: Vec3A(4.1909995, 0.0, 0.0), vertical: Vec3A(0.0, 4.1909995, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: Some("/Render/settings") +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 32, height: 32, region: PixelRect { x0: 0, y0: 0, x1: 32, y1: 32 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [AovProduct { prim_path: "/Render/withRest", name: "rest.exr", vars: [AovVar { prim_path: "/Render/depth", name: "depth", channel_prefix: None, source: Depth, components: 1, precision: Float, accumulation: Closest, clear: inf, expression: None, raw: false, variance: false }, AovVar { prim_path: "/Render/Pref", name: "Pref", channel_prefix: None, source: Primvar(PrimvarSource { index: 0, components: 3, role: Vector }), components: 3, precision: Float, accumulation: Closest, clear: 0.0, expression: None, raw: false, variance: false }], attributes: [] }], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 50.0, aperture: [20.955, 15.2908], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 10.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/live_primvars_retarget.usda"], invisible_overrides: Some(0) } +layer: $DIR/live_primvars_retarget.usda +lights: 0 +volumes: 0 +world: 1 geometries, PrimitiveBreakdown { triangles: 2, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 2, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov Some((Some(0), false)) swapped false curves false scale 1.0 motion [] pieces all=2:32f1a52c797bfee5 camera=2:32f1a52c797bfee5 shadow=2:32f1a52c797bfee5 indirect=2:32f1a52c797bfee5 +provenance geometry 0..1: /W/M +provenance mesh: MeshOrigin { geom_id: 0, slot: 0, baked: true, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 11801363609627443368, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/W/Cam"), cameras: ["/W/Cam"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [("rest", 3)], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/W/Cam"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/live_primvars_retarget_usda-f4742b8648291059-1.image b/crates/crust-core/tests/data/import_baselines/live_primvars_retarget_usda-f4742b8648291059-1.image new file mode 100644 index 000000000..361b4195c --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/live_primvars_retarget_usda-f4742b8648291059-1.image @@ -0,0 +1 @@ +32x32 16spp clamp-off 6e431751526de325 diff --git a/crates/crust-core/tests/data/import_baselines/live_retarget_adaptive_usda-df276969e17c075b-1.digest b/crates/crust-core/tests/data/import_baselines/live_retarget_adaptive_usda-df276969e17c075b-1.digest new file mode 100644 index 000000000..25f11b5d5 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/live_retarget_adaptive_usda-df276969e17c075b-1.digest @@ -0,0 +1,28 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/W/Cam") +camera: Camera { origin: Vec3A(0.0, 0.0, 10.0), lower_left_corner: Vec3A(-4.8, -2.4, 0.0), horizontal: Vec3A(9.6, 0.0, 0.0), vertical: Vec3A(0.0, 4.8, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: Some("/Render/settings") +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 64, height: 32, region: PixelRect { x0: 0, y0: 0, x1: 64, y1: 32 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 50.0, aperture: [36.0, 24.0], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 10.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/live_retarget_adaptive.usda"], invisible_overrides: Some(0) } +layer: $DIR/live_retarget_adaptive.usda +lights: 1 +light 0: dome name Some("/W/Sky") lpe None pmf 1.0 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 3 geometries, PrimitiveBreakdown { triangles: 715, spheres: 1, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 715, spheres: 1, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=714:3e4f5ff3a9a07f75 camera=714:3e4f5ff3a9a07f75 shadow=714:3e4f5ff3a9a07f75 indirect=714:3e4f5ff3a9a07f75 +geom 1: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:fb1e7d48790aec95 camera=1:fb1e7d48790aec95 shadow=1:fb1e7d48790aec95 indirect=1:fb1e7d48790aec95 +geom 2: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:e04af0df4b5b5022 camera=1:e04af0df4b5b5022 shadow=1:e04af0df4b5b5022 indirect=1:e04af0df4b5b5022 +provenance light /W/Sky: LightOrigin { index: 0, geoms: 1..1 } +provenance geometry 0..1: /W/Cage +provenance geometry 1..2: /W/Ball +provenance geometry 2..3: /W/Rig/Badge +provenance mesh: MeshOrigin { geom_id: 0, slot: 0, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 2, slot: 1, baked: true, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 2684244338757133449, n_points: 359, n_indices: 2142, n_uvs: None, smooth: true, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 1: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 7930610974440722833, n_points: 3, n_indices: 3, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [1] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: Some(ScreenKey([0, 0, 1092616192, 1116034389, 0, 0, 1092616192, 3212836864, 0, 3203777167, 1065353216, 0, 3203777167, 0, 3212836864, 3195388559, 0, 1065353216, 3195388559, 0, 0, 3212836864, 1073741824, 3])), domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/W/Cam"), cameras: ["/W/Slow", "/W/Rig", "/W/Dicer", "/W/Cam2", "/W/Cam"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/W/Cam"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/live_retarget_adaptive_usda-df276969e17c075b-1.image b/crates/crust-core/tests/data/import_baselines/live_retarget_adaptive_usda-df276969e17c075b-1.image new file mode 100644 index 000000000..cf93613f9 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/live_retarget_adaptive_usda-df276969e17c075b-1.image @@ -0,0 +1 @@ +64x32 16spp clamp-off 16e836a303211e0c diff --git a/crates/crust-core/tests/data/import_baselines/live_retarget_diced_usda-68dfaa2802aa4ba4-1.digest b/crates/crust-core/tests/data/import_baselines/live_retarget_diced_usda-68dfaa2802aa4ba4-1.digest new file mode 100644 index 000000000..0ea50b590 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/live_retarget_diced_usda-68dfaa2802aa4ba4-1.digest @@ -0,0 +1,28 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/W/Cam") +camera: Camera { origin: Vec3A(0.0, 0.0, 10.0), lower_left_corner: Vec3A(-4.8, -2.4, 0.0), horizontal: Vec3A(9.6, 0.0, 0.0), vertical: Vec3A(0.0, 4.8, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: Some("/Render/settings") +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 64, height: 32, region: PixelRect { x0: 0, y0: 0, x1: 64, y1: 32 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 50.0, aperture: [36.0, 24.0], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 10.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/live_retarget_diced.usda"], invisible_overrides: Some(0) } +layer: $DIR/live_retarget_diced.usda +lights: 1 +light 0: dome name Some("/W/Sky") lpe None pmf 1.0 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 3 geometries, PrimitiveBreakdown { triangles: 503, spheres: 1, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 503, spheres: 1, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=502:6396f027b367ad8a camera=502:6396f027b367ad8a shadow=502:6396f027b367ad8a indirect=502:6396f027b367ad8a +geom 1: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:fb1e7d48790aec95 camera=1:fb1e7d48790aec95 shadow=1:fb1e7d48790aec95 indirect=1:fb1e7d48790aec95 +geom 2: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:e04af0df4b5b5022 camera=1:e04af0df4b5b5022 shadow=1:e04af0df4b5b5022 indirect=1:e04af0df4b5b5022 +provenance light /W/Sky: LightOrigin { index: 0, geoms: 1..1 } +provenance geometry 0..1: /W/Cage +provenance geometry 1..2: /W/Ball +provenance geometry 2..3: /W/Rig/Badge +provenance mesh: MeshOrigin { geom_id: 0, slot: 0, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 2, slot: 1, baked: true, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 9653551266655765309, n_points: 253, n_indices: 1506, n_uvs: None, smooth: true, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 1: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 7930610974440722833, n_points: 3, n_indices: 3, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [1] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: Some(ScreenKey([0, 1065353216, 1094713344, 1116034389, 0, 1065353216, 1094713344, 3213490716, 0, 3196448852, 1063312268, 0, 3207424912, 3175899824, 3212836864, 3195036602, 3175899824, 1065353216, 3195036602, 3193235149, 0, 3212470242, 1073741824, 3])), domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/W/Cam"), cameras: ["/W/Slow", "/W/Rig", "/W/Dicer", "/W/Cam2", "/W/Cam"], dicing: Some("/W/Dicer"), on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/W/Cam"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/live_retarget_diced_usda-68dfaa2802aa4ba4-1.image b/crates/crust-core/tests/data/import_baselines/live_retarget_diced_usda-68dfaa2802aa4ba4-1.image new file mode 100644 index 000000000..d552ea83e --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/live_retarget_diced_usda-68dfaa2802aa4ba4-1.image @@ -0,0 +1 @@ +64x32 16spp clamp-off 109520ee84a77282 diff --git a/crates/crust-core/tests/data/import_baselines/live_retarget_diced_usda-91fe8df867e8f0cc-1.digest b/crates/crust-core/tests/data/import_baselines/live_retarget_diced_usda-91fe8df867e8f0cc-1.digest new file mode 100644 index 000000000..93d3c699f --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/live_retarget_diced_usda-91fe8df867e8f0cc-1.digest @@ -0,0 +1,28 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/W/Cam2") +camera: Camera { origin: Vec3A(1.5, 0.5, 9.0), lower_left_corner: Vec3A(-5.2742257, -1.9000003, 0.21650028), horizontal: Vec3A(9.390218, 0.0, -1.9959522), vertical: Vec3A(-0.0, 4.8000007, 0.0), u: Vec3A(0.9781476, 0.0, -0.20791169), v: Vec3A(-0.0, 1.0000001, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: Some("/Render/settings") +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 64, height: 32, region: PixelRect { x0: 0, y0: 0, x1: 64, y1: 32 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 50.0, aperture: [36.0, 24.0], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 10.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/live_retarget_diced.usda"], invisible_overrides: Some(0) } +layer: $DIR/live_retarget_diced.usda +lights: 1 +light 0: dome name Some("/W/Sky") lpe None pmf 1.0 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 3 geometries, PrimitiveBreakdown { triangles: 503, spheres: 1, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 503, spheres: 1, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=502:6396f027b367ad8a camera=502:6396f027b367ad8a shadow=502:6396f027b367ad8a indirect=502:6396f027b367ad8a +geom 1: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:fb1e7d48790aec95 camera=1:fb1e7d48790aec95 shadow=1:fb1e7d48790aec95 indirect=1:fb1e7d48790aec95 +geom 2: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:e04af0df4b5b5022 camera=1:e04af0df4b5b5022 shadow=1:e04af0df4b5b5022 indirect=1:e04af0df4b5b5022 +provenance light /W/Sky: LightOrigin { index: 0, geoms: 1..1 } +provenance geometry 0..1: /W/Cage +provenance geometry 1..2: /W/Ball +provenance geometry 2..3: /W/Rig/Badge +provenance mesh: MeshOrigin { geom_id: 0, slot: 0, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 2, slot: 1, baked: true, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 9653551266655765309, n_points: 253, n_indices: 1506, n_uvs: None, smooth: true, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 1: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 7930610974440722833, n_points: 3, n_indices: 3, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [1] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: Some(ScreenKey([0, 1065353216, 1094713344, 1116034389, 0, 1065353216, 1094713344, 3213490716, 0, 3196448852, 1063312268, 0, 3207424912, 3175899824, 3212836864, 3195036602, 3175899824, 1065353216, 3195036602, 3193235149, 0, 3212470242, 1073741824, 3])), domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/W/Cam2"), cameras: ["/W/Slow", "/W/Rig", "/W/Dicer", "/W/Cam2", "/W/Cam"], dicing: Some("/W/Dicer"), on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/W/Cam2"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/live_retarget_diced_usda-91fe8df867e8f0cc-1.image b/crates/crust-core/tests/data/import_baselines/live_retarget_diced_usda-91fe8df867e8f0cc-1.image new file mode 100644 index 000000000..9c870aab2 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/live_retarget_diced_usda-91fe8df867e8f0cc-1.image @@ -0,0 +1 @@ +64x32 16spp clamp-off 139f317474d7c86a diff --git a/crates/crust-core/tests/data/import_baselines/live_retarget_empty_usda-6f96b70b05bd5238-1.digest b/crates/crust-core/tests/data/import_baselines/live_retarget_empty_usda-6f96b70b05bd5238-1.digest new file mode 100644 index 000000000..5de7f519d --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/live_retarget_empty_usda-6f96b70b05bd5238-1.digest @@ -0,0 +1,24 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/W/Cam") +camera: Camera { origin: Vec3A(0.0, 0.0, 10.0), lower_left_corner: Vec3A(-4.8, -2.4, 0.0), horizontal: Vec3A(9.6, 0.0, 0.0), vertical: Vec3A(0.0, 4.8, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: Some("/Render/settings") +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 64, height: 32, region: PixelRect { x0: 0, y0: 0, x1: 64, y1: 32 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 50.0, aperture: [36.0, 24.0], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 10.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/live_retarget_empty.usda"], invisible_overrides: Some(0) } +layer: $DIR/live_retarget_empty.usda +lights: 1 +light 0: dome name Some("/W/Sky") lpe None pmf 1.0 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 2 geometries, PrimitiveBreakdown { triangles: 1, spheres: 1, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 1, spheres: 1, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:fb1e7d48790aec95 camera=1:fb1e7d48790aec95 shadow=1:fb1e7d48790aec95 indirect=1:fb1e7d48790aec95 +geom 1: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:e04af0df4b5b5022 camera=1:e04af0df4b5b5022 shadow=1:e04af0df4b5b5022 indirect=1:e04af0df4b5b5022 +provenance light /W/Sky: LightOrigin { index: 0, geoms: 0..0 } +provenance geometry 0..1: /W/Ball +provenance geometry 1..2: /W/Rig/Badge +provenance mesh: MeshOrigin { geom_id: 1, slot: 0, baked: true, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 7930610974440722833, n_points: 3, n_indices: 3, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [0] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/W/Cam"), cameras: ["/W/Slow", "/W/Rig", "/W/Dicer", "/W/Cam2", "/W/Cam"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/W/Cam"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/live_retarget_empty_usda-6f96b70b05bd5238-1.image b/crates/crust-core/tests/data/import_baselines/live_retarget_empty_usda-6f96b70b05bd5238-1.image new file mode 100644 index 000000000..93a93b942 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/live_retarget_empty_usda-6f96b70b05bd5238-1.image @@ -0,0 +1 @@ +64x32 16spp clamp-off 0f74b9a35dc0bedd diff --git a/crates/crust-core/tests/data/import_baselines/live_retarget_rig_usda-c517fabd0cfe3025-1.digest b/crates/crust-core/tests/data/import_baselines/live_retarget_rig_usda-c517fabd0cfe3025-1.digest new file mode 100644 index 000000000..6fe45c5bc --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/live_retarget_rig_usda-c517fabd0cfe3025-1.digest @@ -0,0 +1,24 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/W/Cam") +camera: Camera { origin: Vec3A(0.0, 0.0, 10.0), lower_left_corner: Vec3A(-4.8, -2.4, 0.0), horizontal: Vec3A(9.6, 0.0, 0.0), vertical: Vec3A(0.0, 4.8, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: Some("/Render/settings") +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 64, height: 32, region: PixelRect { x0: 0, y0: 0, x1: 64, y1: 32 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 50.0, aperture: [36.0, 24.0], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 10.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/live_retarget_rig.usda"], invisible_overrides: Some(0) } +layer: $DIR/live_retarget_rig.usda +lights: 1 +light 0: dome name Some("/W/Sky") lpe None pmf 1.0 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 2 geometries, PrimitiveBreakdown { triangles: 1, spheres: 1, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 1, spheres: 1, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:fb1e7d48790aec95 camera=1:fb1e7d48790aec95 shadow=1:fb1e7d48790aec95 indirect=1:fb1e7d48790aec95 +geom 1: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:e04af0df4b5b5022 camera=1:e04af0df4b5b5022 shadow=1:e04af0df4b5b5022 indirect=1:e04af0df4b5b5022 +provenance light /W/Sky: LightOrigin { index: 0, geoms: 0..0 } +provenance geometry 0..1: /W/Ball +provenance geometry 1..2: /W/Rig/Badge +provenance mesh: MeshOrigin { geom_id: 1, slot: 0, baked: true, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 7930610974440722833, n_points: 3, n_indices: 3, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [0] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/W/Cam"), cameras: ["/W/Slow", "/W/Rig", "/W/Dicer", "/W/Cam2", "/W/Cam"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/W/Cam"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/live_retarget_rig_usda-c517fabd0cfe3025-1.image b/crates/crust-core/tests/data/import_baselines/live_retarget_rig_usda-c517fabd0cfe3025-1.image new file mode 100644 index 000000000..93a93b942 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/live_retarget_rig_usda-c517fabd0cfe3025-1.image @@ -0,0 +1 @@ +64x32 16spp clamp-off 0f74b9a35dc0bedd diff --git a/crates/crust-core/tests/data/import_baselines/live_retarget_slow_usda-abb2313197b2f2f6-1.digest b/crates/crust-core/tests/data/import_baselines/live_retarget_slow_usda-abb2313197b2f2f6-1.digest new file mode 100644 index 000000000..32f7b1d19 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/live_retarget_slow_usda-abb2313197b2f2f6-1.digest @@ -0,0 +1,24 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/W/Cam") +camera: Camera { origin: Vec3A(0.0, 0.0, 10.0), lower_left_corner: Vec3A(-4.8, -2.4, 0.0), horizontal: Vec3A(9.6, 0.0, 0.0), vertical: Vec3A(0.0, 4.8, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: Some("/Render/settings") +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 64, height: 32, region: PixelRect { x0: 0, y0: 0, x1: 64, y1: 32 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 50.0, aperture: [36.0, 24.0], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 10.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/live_retarget_slow.usda"], invisible_overrides: Some(0) } +layer: $DIR/live_retarget_slow.usda +lights: 1 +light 0: dome name Some("/W/Sky") lpe None pmf 1.0 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 2 geometries, PrimitiveBreakdown { triangles: 1, spheres: 1, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 1, spheres: 1, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:fb1e7d48790aec95 camera=1:fb1e7d48790aec95 shadow=1:fb1e7d48790aec95 indirect=1:fb1e7d48790aec95 +geom 1: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:e04af0df4b5b5022 camera=1:e04af0df4b5b5022 shadow=1:e04af0df4b5b5022 indirect=1:e04af0df4b5b5022 +provenance light /W/Sky: LightOrigin { index: 0, geoms: 0..0 } +provenance geometry 0..1: /W/Ball +provenance geometry 1..2: /W/Rig/Badge +provenance mesh: MeshOrigin { geom_id: 1, slot: 0, baked: true, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 7930610974440722833, n_points: 3, n_indices: 3, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [0] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/W/Cam"), cameras: ["/W/Slow", "/W/Rig", "/W/Dicer", "/W/Cam2", "/W/Cam"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/W/Cam"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/live_retarget_slow_usda-abb2313197b2f2f6-1.image b/crates/crust-core/tests/data/import_baselines/live_retarget_slow_usda-abb2313197b2f2f6-1.image new file mode 100644 index 000000000..93a93b942 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/live_retarget_slow_usda-abb2313197b2f2f6-1.image @@ -0,0 +1 @@ +64x32 16spp clamp-off 0f74b9a35dc0bedd diff --git a/crates/crust-core/tests/data/import_baselines/live_retarget_unnamed_usda-11fb9c8dd8a6685f-1.digest b/crates/crust-core/tests/data/import_baselines/live_retarget_unnamed_usda-11fb9c8dd8a6685f-1.digest new file mode 100644 index 000000000..fe60a7ac5 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/live_retarget_unnamed_usda-11fb9c8dd8a6685f-1.digest @@ -0,0 +1,24 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/W/Cam") +camera: Camera { origin: Vec3A(0.0, 0.0, 10.0), lower_left_corner: Vec3A(-4.8, -2.4, 0.0), horizontal: Vec3A(9.6, 0.0, 0.0), vertical: Vec3A(0.0, 4.8, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: Some("/Render/settings") +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 64, height: 32, region: PixelRect { x0: 0, y0: 0, x1: 64, y1: 32 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 50.0, aperture: [36.0, 24.0], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 10.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/live_retarget_unnamed.usda"], invisible_overrides: Some(0) } +layer: $DIR/live_retarget_unnamed.usda +lights: 1 +light 0: dome name Some("/W/Sky") lpe None pmf 1.0 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 2 geometries, PrimitiveBreakdown { triangles: 1, spheres: 1, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 1, spheres: 1, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:fb1e7d48790aec95 camera=1:fb1e7d48790aec95 shadow=1:fb1e7d48790aec95 indirect=1:fb1e7d48790aec95 +geom 1: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:e04af0df4b5b5022 camera=1:e04af0df4b5b5022 shadow=1:e04af0df4b5b5022 indirect=1:e04af0df4b5b5022 +provenance light /W/Sky: LightOrigin { index: 0, geoms: 0..0 } +provenance geometry 0..1: /W/Ball +provenance geometry 1..2: /W/Rig/Badge +provenance mesh: MeshOrigin { geom_id: 1, slot: 0, baked: true, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 7930610974440722833, n_points: 3, n_indices: 3, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [0] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/W/Cam"), cameras: ["/W/Slow", "/W/Rig", "/W/Dicer", "/W/Cam2", "/W/Cam"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/W/Cam"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/live_retarget_unnamed_usda-11fb9c8dd8a6685f-1.image b/crates/crust-core/tests/data/import_baselines/live_retarget_unnamed_usda-11fb9c8dd8a6685f-1.image new file mode 100644 index 000000000..93a93b942 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/live_retarget_unnamed_usda-11fb9c8dd8a6685f-1.image @@ -0,0 +1 @@ +64x32 16spp clamp-off 0f74b9a35dc0bedd diff --git a/crates/crust-core/tests/data/import_baselines/live_retarget_usda-443a3934a068f8e2-1.digest b/crates/crust-core/tests/data/import_baselines/live_retarget_usda-443a3934a068f8e2-1.digest new file mode 100644 index 000000000..e0a70e655 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/live_retarget_usda-443a3934a068f8e2-1.digest @@ -0,0 +1,24 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/W/Cam2") +camera: Camera { origin: Vec3A(1.5, 0.5, 9.0), lower_left_corner: Vec3A(-5.2742257, -1.9000003, 0.21650028), horizontal: Vec3A(9.390218, 0.0, -1.9959522), vertical: Vec3A(-0.0, 4.8000007, 0.0), u: Vec3A(0.9781476, 0.0, -0.20791169), v: Vec3A(-0.0, 1.0000001, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: Some("/Render/settings") +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 64, height: 32, region: PixelRect { x0: 0, y0: 0, x1: 64, y1: 32 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 50.0, aperture: [36.0, 24.0], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 10.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/live_retarget.usda"], invisible_overrides: Some(0) } +layer: $DIR/live_retarget.usda +lights: 1 +light 0: dome name Some("/W/Sky") lpe None pmf 1.0 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 2 geometries, PrimitiveBreakdown { triangles: 1, spheres: 1, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 1, spheres: 1, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:fb1e7d48790aec95 camera=1:fb1e7d48790aec95 shadow=1:fb1e7d48790aec95 indirect=1:fb1e7d48790aec95 +geom 1: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:e04af0df4b5b5022 camera=1:e04af0df4b5b5022 shadow=1:e04af0df4b5b5022 indirect=1:e04af0df4b5b5022 +provenance light /W/Sky: LightOrigin { index: 0, geoms: 0..0 } +provenance geometry 0..1: /W/Ball +provenance geometry 1..2: /W/Rig/Badge +provenance mesh: MeshOrigin { geom_id: 1, slot: 0, baked: true, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 7930610974440722833, n_points: 3, n_indices: 3, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [0] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/W/Cam2"), cameras: ["/W/Slow", "/W/Rig", "/W/Dicer", "/W/Cam2", "/W/Cam"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/W/Cam2"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/live_retarget_usda-443a3934a068f8e2-1.image b/crates/crust-core/tests/data/import_baselines/live_retarget_usda-443a3934a068f8e2-1.image new file mode 100644 index 000000000..5a223d639 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/live_retarget_usda-443a3934a068f8e2-1.image @@ -0,0 +1 @@ +64x32 16spp clamp-off 6451e8d1d0169b9e diff --git a/crates/crust-core/tests/data/import_baselines/live_retarget_usda-de7ad4a8e0eab00a-1.digest b/crates/crust-core/tests/data/import_baselines/live_retarget_usda-de7ad4a8e0eab00a-1.digest new file mode 100644 index 000000000..62209cd30 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/live_retarget_usda-de7ad4a8e0eab00a-1.digest @@ -0,0 +1,24 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/W/Cam") +camera: Camera { origin: Vec3A(0.0, 0.0, 10.0), lower_left_corner: Vec3A(-4.8, -2.4, 0.0), horizontal: Vec3A(9.6, 0.0, 0.0), vertical: Vec3A(0.0, 4.8, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: Some("/Render/settings") +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 64, height: 32, region: PixelRect { x0: 0, y0: 0, x1: 64, y1: 32 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 50.0, aperture: [36.0, 24.0], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 10.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/live_retarget.usda"], invisible_overrides: Some(0) } +layer: $DIR/live_retarget.usda +lights: 1 +light 0: dome name Some("/W/Sky") lpe None pmf 1.0 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 2 geometries, PrimitiveBreakdown { triangles: 1, spheres: 1, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 1, spheres: 1, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:fb1e7d48790aec95 camera=1:fb1e7d48790aec95 shadow=1:fb1e7d48790aec95 indirect=1:fb1e7d48790aec95 +geom 1: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:e04af0df4b5b5022 camera=1:e04af0df4b5b5022 shadow=1:e04af0df4b5b5022 indirect=1:e04af0df4b5b5022 +provenance light /W/Sky: LightOrigin { index: 0, geoms: 0..0 } +provenance geometry 0..1: /W/Ball +provenance geometry 1..2: /W/Rig/Badge +provenance mesh: MeshOrigin { geom_id: 1, slot: 0, baked: true, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 7930610974440722833, n_points: 3, n_indices: 3, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [0] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/W/Cam"), cameras: ["/W/Slow", "/W/Rig", "/W/Dicer", "/W/Cam2", "/W/Cam"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/W/Cam"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/live_retarget_usda-de7ad4a8e0eab00a-1.image b/crates/crust-core/tests/data/import_baselines/live_retarget_usda-de7ad4a8e0eab00a-1.image new file mode 100644 index 000000000..93a93b942 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/live_retarget_usda-de7ad4a8e0eab00a-1.image @@ -0,0 +1 @@ +64x32 16spp clamp-off 0f74b9a35dc0bedd diff --git a/crates/crust-core/tests/data/import_baselines/live_retarget_usda-de7ad4a8e0eab00a-2.digest b/crates/crust-core/tests/data/import_baselines/live_retarget_usda-de7ad4a8e0eab00a-2.digest new file mode 100644 index 000000000..62209cd30 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/live_retarget_usda-de7ad4a8e0eab00a-2.digest @@ -0,0 +1,24 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/W/Cam") +camera: Camera { origin: Vec3A(0.0, 0.0, 10.0), lower_left_corner: Vec3A(-4.8, -2.4, 0.0), horizontal: Vec3A(9.6, 0.0, 0.0), vertical: Vec3A(0.0, 4.8, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: Some("/Render/settings") +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 64, height: 32, region: PixelRect { x0: 0, y0: 0, x1: 64, y1: 32 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 50.0, aperture: [36.0, 24.0], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 10.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/live_retarget.usda"], invisible_overrides: Some(0) } +layer: $DIR/live_retarget.usda +lights: 1 +light 0: dome name Some("/W/Sky") lpe None pmf 1.0 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 2 geometries, PrimitiveBreakdown { triangles: 1, spheres: 1, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 1, spheres: 1, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:fb1e7d48790aec95 camera=1:fb1e7d48790aec95 shadow=1:fb1e7d48790aec95 indirect=1:fb1e7d48790aec95 +geom 1: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:e04af0df4b5b5022 camera=1:e04af0df4b5b5022 shadow=1:e04af0df4b5b5022 indirect=1:e04af0df4b5b5022 +provenance light /W/Sky: LightOrigin { index: 0, geoms: 0..0 } +provenance geometry 0..1: /W/Ball +provenance geometry 1..2: /W/Rig/Badge +provenance mesh: MeshOrigin { geom_id: 1, slot: 0, baked: true, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 7930610974440722833, n_points: 3, n_indices: 3, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [0] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/W/Cam"), cameras: ["/W/Slow", "/W/Rig", "/W/Dicer", "/W/Cam2", "/W/Cam"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/W/Cam"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/live_retarget_usda-de7ad4a8e0eab00a-2.image b/crates/crust-core/tests/data/import_baselines/live_retarget_usda-de7ad4a8e0eab00a-2.image new file mode 100644 index 000000000..93a93b942 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/live_retarget_usda-de7ad4a8e0eab00a-2.image @@ -0,0 +1 @@ +64x32 16spp clamp-off 0f74b9a35dc0bedd diff --git a/crates/crust-core/tests/data/import_baselines/live_retarget_usda-de7ad4a8e0eab00a-3.digest b/crates/crust-core/tests/data/import_baselines/live_retarget_usda-de7ad4a8e0eab00a-3.digest new file mode 100644 index 000000000..62209cd30 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/live_retarget_usda-de7ad4a8e0eab00a-3.digest @@ -0,0 +1,24 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/W/Cam") +camera: Camera { origin: Vec3A(0.0, 0.0, 10.0), lower_left_corner: Vec3A(-4.8, -2.4, 0.0), horizontal: Vec3A(9.6, 0.0, 0.0), vertical: Vec3A(0.0, 4.8, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: Some("/Render/settings") +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 64, height: 32, region: PixelRect { x0: 0, y0: 0, x1: 64, y1: 32 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 50.0, aperture: [36.0, 24.0], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 10.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/live_retarget.usda"], invisible_overrides: Some(0) } +layer: $DIR/live_retarget.usda +lights: 1 +light 0: dome name Some("/W/Sky") lpe None pmf 1.0 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 2 geometries, PrimitiveBreakdown { triangles: 1, spheres: 1, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 1, spheres: 1, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:fb1e7d48790aec95 camera=1:fb1e7d48790aec95 shadow=1:fb1e7d48790aec95 indirect=1:fb1e7d48790aec95 +geom 1: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:e04af0df4b5b5022 camera=1:e04af0df4b5b5022 shadow=1:e04af0df4b5b5022 indirect=1:e04af0df4b5b5022 +provenance light /W/Sky: LightOrigin { index: 0, geoms: 0..0 } +provenance geometry 0..1: /W/Ball +provenance geometry 1..2: /W/Rig/Badge +provenance mesh: MeshOrigin { geom_id: 1, slot: 0, baked: true, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 7930610974440722833, n_points: 3, n_indices: 3, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [0] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/W/Cam"), cameras: ["/W/Slow", "/W/Rig", "/W/Dicer", "/W/Cam2", "/W/Cam"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/W/Cam"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/live_retarget_usda-de7ad4a8e0eab00a-3.image b/crates/crust-core/tests/data/import_baselines/live_retarget_usda-de7ad4a8e0eab00a-3.image new file mode 100644 index 000000000..93a93b942 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/live_retarget_usda-de7ad4a8e0eab00a-3.image @@ -0,0 +1 @@ +64x32 16spp clamp-off 0f74b9a35dc0bedd diff --git a/crates/crust-core/tests/data/import_baselines/live_retarget_usda-de7ad4a8e0eab00a-4.digest b/crates/crust-core/tests/data/import_baselines/live_retarget_usda-de7ad4a8e0eab00a-4.digest new file mode 100644 index 000000000..62209cd30 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/live_retarget_usda-de7ad4a8e0eab00a-4.digest @@ -0,0 +1,24 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/W/Cam") +camera: Camera { origin: Vec3A(0.0, 0.0, 10.0), lower_left_corner: Vec3A(-4.8, -2.4, 0.0), horizontal: Vec3A(9.6, 0.0, 0.0), vertical: Vec3A(0.0, 4.8, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: Some("/Render/settings") +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 64, height: 32, region: PixelRect { x0: 0, y0: 0, x1: 64, y1: 32 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 50.0, aperture: [36.0, 24.0], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 10.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/live_retarget.usda"], invisible_overrides: Some(0) } +layer: $DIR/live_retarget.usda +lights: 1 +light 0: dome name Some("/W/Sky") lpe None pmf 1.0 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 2 geometries, PrimitiveBreakdown { triangles: 1, spheres: 1, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 1, spheres: 1, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:fb1e7d48790aec95 camera=1:fb1e7d48790aec95 shadow=1:fb1e7d48790aec95 indirect=1:fb1e7d48790aec95 +geom 1: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:e04af0df4b5b5022 camera=1:e04af0df4b5b5022 shadow=1:e04af0df4b5b5022 indirect=1:e04af0df4b5b5022 +provenance light /W/Sky: LightOrigin { index: 0, geoms: 0..0 } +provenance geometry 0..1: /W/Ball +provenance geometry 1..2: /W/Rig/Badge +provenance mesh: MeshOrigin { geom_id: 1, slot: 0, baked: true, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 7930610974440722833, n_points: 3, n_indices: 3, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [0] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/W/Cam"), cameras: ["/W/Slow", "/W/Rig", "/W/Dicer", "/W/Cam2", "/W/Cam"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/W/Cam"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/live_retarget_usda-de7ad4a8e0eab00a-4.image b/crates/crust-core/tests/data/import_baselines/live_retarget_usda-de7ad4a8e0eab00a-4.image new file mode 100644 index 000000000..93a93b942 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/live_retarget_usda-de7ad4a8e0eab00a-4.image @@ -0,0 +1 @@ +64x32 16spp clamp-off 0f74b9a35dc0bedd diff --git a/crates/crust-core/tests/data/import_baselines/live_usda-99c94ab20e276ccd-1.digest b/crates/crust-core/tests/data/import_baselines/live_usda-99c94ab20e276ccd-1.digest new file mode 100644 index 000000000..5cd5e2da4 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/live_usda-99c94ab20e276ccd-1.digest @@ -0,0 +1,27 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/World/Cam") +camera: Camera { origin: Vec3A(0.0, 5.0, 6.0), lower_left_corner: Vec3A(-2.0000002, -2.9376645, -0.40261602), horizontal: Vec3A(4.0000005, -0.0, 0.0), vertical: Vec3A(0.0, 3.0731347, -2.560439), u: Vec3A(1.0, -0.0, 0.0), v: Vec3A(0.0, 0.76828355, -0.6401097), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: Some("/Render/settings") +settings: RenderSettings { samples_per_pixel: 16, max_depth: 2, width: 16, height: 16, region: PixelRect { x0: 0, y0: 0, x1: 16, y1: 16 }, min_samples_per_pixel: 16, variance_threshold: 0.0, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: None, light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 50.0, aperture: [20.0, 20.0], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 10.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/live.usda"], invisible_overrides: Some(0) } +layer: $DIR/live.usda +lights: 2 +light 0: distant name Some("/World/Sun") lpe None pmf 0.5 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 1: area name Some("/World/Key") lpe None pmf 0.5 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 2 geometries, PrimitiveBreakdown { triangles: 2, spheres: 1, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 2, spheres: 1, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +geom 0: material #0 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:ca080854f0bf27b5 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=1:ca080854f0bf27b5 +geom 1: material #1 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:fce6de5b675a55c5 camera=2:fce6de5b675a55c5 shadow=2:fce6de5b675a55c5 indirect=2:fce6de5b675a55c5 +provenance material /World/M: MaterialOrigin { slots: [1], displaced: false } +provenance light /World/Key: LightOrigin { index: 1, geoms: 0..1 } +provenance light /World/Sun: LightOrigin { index: 0, geoms: 0..0 } +provenance geometry 0..1: /World/Key +provenance geometry 1..2: /World/Floor +provenance mesh: MeshOrigin { geom_id: 1, slot: 0, baked: true, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 14903623499644419787, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/World/Cam"), cameras: ["/World/Cam"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/World/Cam"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/live_usda-99c94ab20e276ccd-1.image b/crates/crust-core/tests/data/import_baselines/live_usda-99c94ab20e276ccd-1.image new file mode 100644 index 000000000..431de6ffe --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/live_usda-99c94ab20e276ccd-1.image @@ -0,0 +1 @@ +16x16 16spp clamp-off 8fe84ece808596b4 diff --git a/crates/crust-core/tests/data/import_baselines/live_usda-99c94ab20e276ccd-2.digest b/crates/crust-core/tests/data/import_baselines/live_usda-99c94ab20e276ccd-2.digest new file mode 100644 index 000000000..5cd5e2da4 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/live_usda-99c94ab20e276ccd-2.digest @@ -0,0 +1,27 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/World/Cam") +camera: Camera { origin: Vec3A(0.0, 5.0, 6.0), lower_left_corner: Vec3A(-2.0000002, -2.9376645, -0.40261602), horizontal: Vec3A(4.0000005, -0.0, 0.0), vertical: Vec3A(0.0, 3.0731347, -2.560439), u: Vec3A(1.0, -0.0, 0.0), v: Vec3A(0.0, 0.76828355, -0.6401097), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: Some("/Render/settings") +settings: RenderSettings { samples_per_pixel: 16, max_depth: 2, width: 16, height: 16, region: PixelRect { x0: 0, y0: 0, x1: 16, y1: 16 }, min_samples_per_pixel: 16, variance_threshold: 0.0, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: None, light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 50.0, aperture: [20.0, 20.0], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 10.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/live.usda"], invisible_overrides: Some(0) } +layer: $DIR/live.usda +lights: 2 +light 0: distant name Some("/World/Sun") lpe None pmf 0.5 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 1: area name Some("/World/Key") lpe None pmf 0.5 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 2 geometries, PrimitiveBreakdown { triangles: 2, spheres: 1, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 2, spheres: 1, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +geom 0: material #0 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:ca080854f0bf27b5 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=1:ca080854f0bf27b5 +geom 1: material #1 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:fce6de5b675a55c5 camera=2:fce6de5b675a55c5 shadow=2:fce6de5b675a55c5 indirect=2:fce6de5b675a55c5 +provenance material /World/M: MaterialOrigin { slots: [1], displaced: false } +provenance light /World/Key: LightOrigin { index: 1, geoms: 0..1 } +provenance light /World/Sun: LightOrigin { index: 0, geoms: 0..0 } +provenance geometry 0..1: /World/Key +provenance geometry 1..2: /World/Floor +provenance mesh: MeshOrigin { geom_id: 1, slot: 0, baked: true, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 14903623499644419787, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/World/Cam"), cameras: ["/World/Cam"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/World/Cam"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/live_usda-99c94ab20e276ccd-2.image b/crates/crust-core/tests/data/import_baselines/live_usda-99c94ab20e276ccd-2.image new file mode 100644 index 000000000..431de6ffe --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/live_usda-99c94ab20e276ccd-2.image @@ -0,0 +1 @@ +16x16 16spp clamp-off 8fe84ece808596b4 diff --git a/crates/crust-core/tests/data/import_baselines/live_usda-b329c13621e10111-1.digest b/crates/crust-core/tests/data/import_baselines/live_usda-b329c13621e10111-1.digest new file mode 100644 index 000000000..325ef2f2f --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/live_usda-b329c13621e10111-1.digest @@ -0,0 +1,27 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/World/Cam") +camera: Camera { origin: Vec3A(0.0, 5.0, 6.0), lower_left_corner: Vec3A(-2.0000002, -2.9376645, -0.40261602), horizontal: Vec3A(4.0000005, -0.0, 0.0), vertical: Vec3A(0.0, 3.0731347, -2.560439), u: Vec3A(1.0, -0.0, 0.0), v: Vec3A(0.0, 0.76828355, -0.6401097), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: Some("/Render/settings") +settings: RenderSettings { samples_per_pixel: 16, max_depth: 2, width: 16, height: 16, region: PixelRect { x0: 0, y0: 0, x1: 16, y1: 16 }, min_samples_per_pixel: 16, variance_threshold: 0.0, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: None, light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 50.0, aperture: [20.0, 20.0], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 10.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/live.usda"], invisible_overrides: Some(0) } +layer: $DIR/live.usda +lights: 2 +light 0: distant name Some("/World/Sun") lpe None pmf 0.5 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 0.25, specular: 3.0 } +light 1: area name Some("/World/Key") lpe None pmf 0.5 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 0.25, specular: 3.0 } +volumes: 0 +world: 2 geometries, PrimitiveBreakdown { triangles: 2, spheres: 1, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 2, spheres: 1, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +geom 0: material #0 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:ca080854f0bf27b5 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=1:ca080854f0bf27b5 +geom 1: material #1 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:fce6de5b675a55c5 camera=2:fce6de5b675a55c5 shadow=2:fce6de5b675a55c5 indirect=2:fce6de5b675a55c5 +provenance material /World/M: MaterialOrigin { slots: [1], displaced: false } +provenance light /World/Key: LightOrigin { index: 1, geoms: 0..1 } +provenance light /World/Sun: LightOrigin { index: 0, geoms: 0..0 } +provenance geometry 0..1: /World/Key +provenance geometry 1..2: /World/Floor +provenance mesh: MeshOrigin { geom_id: 1, slot: 0, baked: true, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 14903623499644419787, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/World/Cam"), cameras: ["/World/Cam"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/World/Cam"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/live_usda-b329c13621e10111-1.image b/crates/crust-core/tests/data/import_baselines/live_usda-b329c13621e10111-1.image new file mode 100644 index 000000000..b01e6071e --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/live_usda-b329c13621e10111-1.image @@ -0,0 +1 @@ +16x16 16spp clamp-off bbc4bce34628e579 diff --git a/crates/crust-core/tests/data/import_baselines/lookdev_usda-168fe99d44c7fbd8-1.digest b/crates/crust-core/tests/data/import_baselines/lookdev_usda-168fe99d44c7fbd8-1.digest new file mode 100644 index 000000000..5fb585ba4 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/lookdev_usda-168fe99d44c7fbd8-1.digest @@ -0,0 +1,30 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/World/Cam") +camera: Camera { origin: Vec3A(0.0, 1.2, 6.0), lower_left_corner: Vec3A(-5.6632595, -1.9855835, -4.0), horizontal: Vec3A(11.326519, 0.0, 0.0), vertical: Vec3A(0.0, 6.371167, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: Some("/Render/settings") +settings: RenderSettings { samples_per_pixel: 16, max_depth: 4, width: 160, height: 90, region: PixelRect { x0: 0, y0: 0, x1: 160, y1: 90 }, min_samples_per_pixel: 8, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [AovProduct { prim_path: "/Render/Products/beauty", name: "renders/aovs_beauty.exr", vars: [AovVar { prim_path: "/Render/Products/Vars/C", name: "C", channel_prefix: None, source: Color, components: 4, precision: Float, accumulation: Filtered, clear: 0.0, expression: None, raw: false, variance: false }, AovVar { prim_path: "/Render/Products/Vars/sampleCount", name: "sampleCount", channel_prefix: None, source: SampleCount, components: 1, precision: Float, accumulation: Filtered, clear: 0.0, expression: None, raw: false, variance: false }, AovVar { prim_path: "/Render/Products/Vars/variance", name: "variance", channel_prefix: None, source: Variance, components: 1, precision: Float, accumulation: Filtered, clear: 0.0, expression: None, raw: false, variance: false }], attributes: [("artist", "crust samples")] }, AovProduct { prim_path: "/Render/Products/data", name: "renders/aovs_data.exr", vars: [AovVar { prim_path: "/Render/Products/Vars/Z", name: "Z", channel_prefix: None, source: Depth, components: 1, precision: Float, accumulation: Closest, clear: inf, expression: None, raw: false, variance: false }, AovVar { prim_path: "/Render/Products/Vars/distance", name: "distance", channel_prefix: None, source: Distance, components: 1, precision: Float, accumulation: Closest, clear: inf, expression: None, raw: false, variance: false }, AovVar { prim_path: "/Render/Products/Vars/P", name: "P", channel_prefix: None, source: P, components: 3, precision: Float, accumulation: Closest, clear: 0.0, expression: None, raw: false, variance: false }, AovVar { prim_path: "/Render/Products/Vars/Peye", name: "Peye", channel_prefix: None, source: Peye, components: 3, precision: Float, accumulation: Closest, clear: 0.0, expression: None, raw: false, variance: false }, AovVar { prim_path: "/Render/Products/Vars/N", name: "N", channel_prefix: None, source: Normal, components: 3, precision: Half, accumulation: Filtered, clear: 0.0, expression: None, raw: false, variance: false }, AovVar { prim_path: "/Render/Products/Vars/Neye", name: "Neye", channel_prefix: None, source: Neye, components: 3, precision: Float, accumulation: Filtered, clear: 0.0, expression: None, raw: false, variance: false }, AovVar { prim_path: "/Render/Products/Vars/st", name: "st", channel_prefix: None, source: St, components: 2, precision: Float, accumulation: Filtered, clear: 0.0, expression: None, raw: false, variance: false }, AovVar { prim_path: "/Render/Products/Vars/alpha", name: "alpha", channel_prefix: None, source: Alpha, components: 1, precision: Float, accumulation: Filtered, clear: 0.0, expression: None, raw: false, variance: false }], attributes: [] }], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 24.0, aperture: [20.955, 15.2908], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 10.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/lookdev.usda", "$ROOT/samples/aovs.usda"], invisible_overrides: Some(0) } +layer: $ROOT/samples/aovs.usda +layer: $DIR/lookdev.usda +warning: Warning { code: AovUnknownSource, kind: Skipped, count: 1, prims: ["/Render/Products/Vars/diffuse_direct"], message: "/Render/Products/Vars/diffuse_direct: unknown raw source \"diffuse_direct\"; no channel written (crust's AOV names are listed in the user documentation, usd/aovs)" } +lights: 2 +light 0: dome name Some("/World/Sky") lpe None pmf 0.5 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 1: area name Some("/World/KeyLight") lpe None pmf 0.5 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 3 geometries, PrimitiveBreakdown { triangles: 4, spheres: 1, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 4, spheres: 1, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +geom 0: material #0 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:e8a5ea9ee1d32838 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=2:e8a5ea9ee1d32838 +geom 1: material #1 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:cadf82024fa5b745 camera=2:cadf82024fa5b745 shadow=2:cadf82024fa5b745 indirect=2:cadf82024fa5b745 +geom 2: material #1 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:ee76fd7ed45c4a85 camera=1:ee76fd7ed45c4a85 shadow=1:ee76fd7ed45c4a85 indirect=1:ee76fd7ed45c4a85 +provenance light /World/KeyLight: LightOrigin { index: 1, geoms: 0..1 } +provenance light /World/Sky: LightOrigin { index: 0, geoms: 0..0 } +provenance geometry 0..1: /World/KeyLight +provenance geometry 1..2: /World/Floor +provenance geometry 2..3: /World/Ball +provenance mesh: MeshOrigin { geom_id: 1, slot: 0, baked: true, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 12300483381263303556, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [2] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: true }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/World/Cam"), cameras: ["/World/Cam"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/World/Cam"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/lookdev_usda-168fe99d44c7fbd8-1.image b/crates/crust-core/tests/data/import_baselines/lookdev_usda-168fe99d44c7fbd8-1.image new file mode 100644 index 000000000..6d0c7cc68 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/lookdev_usda-168fe99d44c7fbd8-1.image @@ -0,0 +1 @@ +160x90 16spp clamp-off 6d657218ffac01a2 diff --git a/crates/crust-core/tests/data/import_baselines/lookdev_usda-17804c08eb02feff-1.digest b/crates/crust-core/tests/data/import_baselines/lookdev_usda-17804c08eb02feff-1.digest new file mode 100644 index 000000000..2e4648805 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/lookdev_usda-17804c08eb02feff-1.digest @@ -0,0 +1,35 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/World/Cam") +camera: Camera { origin: Vec3A(0.0, 1.0, 6.0), lower_left_corner: Vec3A(-4.7783756, -2.1855836, -4.0), horizontal: Vec3A(9.556751, 0.0, 0.0), vertical: Vec3A(0.0, 6.371167, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: Some("/Render/settings") +settings: RenderSettings { samples_per_pixel: 128, max_depth: 4, width: 48, height: 32, region: PixelRect { x0: 0, y0: 0, x1: 48, y1: 32 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 24.0, aperture: [20.955, 15.2908], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 10.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/lookdev.usda", "$DIR/shot.usda", "$DIR/lights.usda"], invisible_overrides: Some(0) } +layer: $DIR/lights.usda +layer: $DIR/lookdev.usda +layer: $DIR/pay.usda +layer: $DIR/prop.usda +layer: $DIR/shot.usda +lights: 2 +light 0: dome name Some("/World/Sky") lpe None pmf 0.5 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 1: area name Some("/World/Key") lpe None pmf 0.5 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 3 geometries, PrimitiveBreakdown { triangles: 2, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 2 } top level, PrimitiveBreakdown { triangles: 4, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 2 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:6f550ecd4f901d05 camera=2:6f550ecd4f901d05 shadow=2:6f550ecd4f901d05 indirect=2:6f550ecd4f901d05 +geom 1: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:6f550ecd4f901d05 camera=2:6f550ecd4f901d05 shadow=2:6f550ecd4f901d05 indirect=2:6f550ecd4f901d05 +geom 2: material #1 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:7812e24c7b4d4335 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=2:7812e24c7b4d4335 +provenance arc source: /Pay +provenance arc source: /Prop +provenance light /World/Key: LightOrigin { index: 1, geoms: 2..3 } +provenance light /World/Sky: LightOrigin { index: 0, geoms: 2..2 } +provenance geometry 0..1: /World/Heavy +provenance geometry 1..2: /World/Prop +provenance geometry 2..3: /World/Key +provenance mesh: MeshOrigin { geom_id: 0, slot: 0, baked: false, moving: false } +provenance mesh: MeshOrigin { geom_id: 1, slot: 0, baked: false, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 6610719295604273699, n_points: 4, n_indices: 4, n_uvs: None, smooth: true, material: 0 }), placements: 2, shared: false, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: true }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/World/Cam"), cameras: ["/World/Cam"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/World/Cam"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/lookdev_usda-17804c08eb02feff-1.image b/crates/crust-core/tests/data/import_baselines/lookdev_usda-17804c08eb02feff-1.image new file mode 100644 index 000000000..afc2d921e --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/lookdev_usda-17804c08eb02feff-1.image @@ -0,0 +1 @@ +48x32 16spp clamp-off 2caa34772f5d6a86 diff --git a/crates/crust-core/tests/data/import_baselines/lookdev_usda-17804c08eb02feff-2.digest b/crates/crust-core/tests/data/import_baselines/lookdev_usda-17804c08eb02feff-2.digest new file mode 100644 index 000000000..2e4648805 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/lookdev_usda-17804c08eb02feff-2.digest @@ -0,0 +1,35 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/World/Cam") +camera: Camera { origin: Vec3A(0.0, 1.0, 6.0), lower_left_corner: Vec3A(-4.7783756, -2.1855836, -4.0), horizontal: Vec3A(9.556751, 0.0, 0.0), vertical: Vec3A(0.0, 6.371167, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: Some("/Render/settings") +settings: RenderSettings { samples_per_pixel: 128, max_depth: 4, width: 48, height: 32, region: PixelRect { x0: 0, y0: 0, x1: 48, y1: 32 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 24.0, aperture: [20.955, 15.2908], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 10.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/lookdev.usda", "$DIR/shot.usda", "$DIR/lights.usda"], invisible_overrides: Some(0) } +layer: $DIR/lights.usda +layer: $DIR/lookdev.usda +layer: $DIR/pay.usda +layer: $DIR/prop.usda +layer: $DIR/shot.usda +lights: 2 +light 0: dome name Some("/World/Sky") lpe None pmf 0.5 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 1: area name Some("/World/Key") lpe None pmf 0.5 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 3 geometries, PrimitiveBreakdown { triangles: 2, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 2 } top level, PrimitiveBreakdown { triangles: 4, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 2 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:6f550ecd4f901d05 camera=2:6f550ecd4f901d05 shadow=2:6f550ecd4f901d05 indirect=2:6f550ecd4f901d05 +geom 1: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:6f550ecd4f901d05 camera=2:6f550ecd4f901d05 shadow=2:6f550ecd4f901d05 indirect=2:6f550ecd4f901d05 +geom 2: material #1 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:7812e24c7b4d4335 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=2:7812e24c7b4d4335 +provenance arc source: /Pay +provenance arc source: /Prop +provenance light /World/Key: LightOrigin { index: 1, geoms: 2..3 } +provenance light /World/Sky: LightOrigin { index: 0, geoms: 2..2 } +provenance geometry 0..1: /World/Heavy +provenance geometry 1..2: /World/Prop +provenance geometry 2..3: /World/Key +provenance mesh: MeshOrigin { geom_id: 0, slot: 0, baked: false, moving: false } +provenance mesh: MeshOrigin { geom_id: 1, slot: 0, baked: false, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 6610719295604273699, n_points: 4, n_indices: 4, n_uvs: None, smooth: true, material: 0 }), placements: 2, shared: false, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: true }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/World/Cam"), cameras: ["/World/Cam"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/World/Cam"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/lookdev_usda-17804c08eb02feff-2.image b/crates/crust-core/tests/data/import_baselines/lookdev_usda-17804c08eb02feff-2.image new file mode 100644 index 000000000..afc2d921e --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/lookdev_usda-17804c08eb02feff-2.image @@ -0,0 +1 @@ +48x32 16spp clamp-off 2caa34772f5d6a86 diff --git a/crates/crust-core/tests/data/import_baselines/lookdev_usda-2df588e196076e2d-1.digest b/crates/crust-core/tests/data/import_baselines/lookdev_usda-2df588e196076e2d-1.digest new file mode 100644 index 000000000..1a4ddb459 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/lookdev_usda-2df588e196076e2d-1.digest @@ -0,0 +1,40 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/World/Cam") +camera: Camera { origin: Vec3A(0.0, 1.1, 7.0), lower_left_corner: Vec3A(-4.8542223, -2.660827, -2.6598039), horizontal: Vec3A(9.708445, -0.0, 0.0), vertical: Vec3A(0.0, 5.4310846, -0.57083), u: Vec3A(1.0, -0.0, 0.0), v: Vec3A(0.0, 0.9945219, -0.104528464), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: Some("/Render/settings") +settings: RenderSettings { samples_per_pixel: 16, max_depth: 4, width: 320, height: 180, region: PixelRect { x0: 0, y0: 0, x1: 320, y1: 180 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: false, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [AovProduct { prim_path: "/Render/Products/precomp", name: "renders/precomp.exr", vars: [AovVar { prim_path: "/Render/Products/Vars/C", name: "C", channel_prefix: None, source: Color, components: 3, precision: Float, accumulation: Filtered, clear: 0.0, expression: None, raw: false, variance: false }, AovVar { prim_path: "/Render/Products/Vars/key", name: "key", channel_prefix: None, source: Lpe, components: 3, precision: Float, accumulation: Filtered, clear: 0.0, expression: Some("C.*"), raw: false, variance: false }, AovVar { prim_path: "/Render/Products/Vars/fill", name: "fill", channel_prefix: None, source: Lpe, components: 3, precision: Float, accumulation: Filtered, clear: 0.0, expression: Some("C.*"), raw: false, variance: false }, AovVar { prim_path: "/Render/Products/Vars/rim", name: "rim", channel_prefix: None, source: Lpe, components: 3, precision: Float, accumulation: Filtered, clear: 0.0, expression: Some("C.*"), raw: false, variance: false }, AovVar { prim_path: "/Render/Products/Vars/matte", name: "matte", channel_prefix: None, source: Primvar(PrimvarSource { index: 0, components: 1, role: Float }), components: 1, precision: Float, accumulation: Filtered, clear: 0.0, expression: None, raw: false, variance: false }, AovVar { prim_path: "/Render/Products/Vars/motion", name: "motion", channel_prefix: None, source: MotionVector, components: 2, precision: Float, accumulation: Closest, clear: 0.0, expression: None, raw: false, variance: false }, AovVar { prim_path: "/Render/Products/Vars/look", name: "look", channel_prefix: None, source: Filter(FilterSource { display: false, filter: 0, output: 0, components: 3, radiance: true }), components: 3, precision: Float, accumulation: Filtered, clear: 0.0, expression: None, raw: false, variance: false }, AovVar { prim_path: "/Render/Products/Vars/look_final", name: "look_final", channel_prefix: None, source: Filter(FilterSource { display: true, filter: 2, output: 0, components: 3, radiance: false }), components: 3, precision: Float, accumulation: Filtered, clear: 0.0, expression: None, raw: false, variance: false }], attributes: [] }], precomp: Some(Precomp { sample_filters: ["/Render/Precomp/look"], display_filters: ["/Render/Precomp/glow", "/Render/Precomp/bloom", "/Render/Precomp/speed"], display: "look_final" }) } +pass: None +source: Source { lens: Some(Lens { focal_length: 28.0, aperture: [20.955, 15.2908], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 10.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/lookdev.usda", "$ROOT/samples/precomp.usda"], invisible_overrides: Some(0) } +layer: $ROOT/samples/precomp.usda +layer: $DIR/lookdev.usda +lights: 3 +light 0: area name Some("/World/Rim") lpe Some("rim") pmf 0.33333334 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 1: area name Some("/World/Fill") lpe Some("fill") pmf 0.33333334 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 2: area name Some("/World/Key") lpe Some("key") pmf 0.33333334 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 6 geometries, PrimitiveBreakdown { triangles: 6, spheres: 1, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 2 } top level, PrimitiveBreakdown { triangles: 774, spheres: 1, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 2 } unique, motion true +geom 0: material #0 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:4aada018ed0727e5 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=2:4aada018ed0727e5 +geom 1: material #1 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:1552f6dd41ffc0c8 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=1:1552f6dd41ffc0c8 +geom 2: material #2 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:832c8ed52d67b0f9 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=2:832c8ed52d67b0f9 +geom 3: material #3 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:6e02baf63b264ec5 camera=2:6e02baf63b264ec5 shadow=2:6e02baf63b264ec5 indirect=2:6e02baf63b264ec5 +geom 4: material #3 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov Some((Some(0), false)) swapped false curves false scale 0.5 motion [Translation(Vec3A(1.3999999, 0.0, 0.0))] pieces all=768:dcf5d265b8c6f519 camera=768:dcf5d265b8c6f519 shadow=768:dcf5d265b8c6f519 indirect=768:dcf5d265b8c6f519 +geom 5: material #3 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov Some((Some(0), false)) swapped false curves false scale 0.75 motion [] pieces all=768:47a45983717bb5f1 camera=768:47a45983717bb5f1 shadow=768:47a45983717bb5f1 indirect=768:47a45983717bb5f1 +provenance light /World/Fill: LightOrigin { index: 1, geoms: 1..2 } +provenance light /World/Key: LightOrigin { index: 2, geoms: 2..3 } +provenance light /World/Rim: LightOrigin { index: 0, geoms: 0..1 } +provenance geometry 0..1: /World/Rim +provenance geometry 1..2: /World/Fill +provenance geometry 2..3: /World/Key +provenance geometry 3..4: /World/Floor +provenance geometry 4..5: /World/Runner +provenance geometry 5..6: /World/Hero +provenance mesh: MeshOrigin { geom_id: 3, slot: 0, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 4, slot: 1, baked: false, moving: true } +provenance mesh: MeshOrigin { geom_id: 5, slot: 1, baked: false, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 3036384043218918496, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 1: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 16146526048079508977, n_points: 386, n_indices: 1536, n_uvs: None, smooth: true, material: 0 }), placements: 2, shared: false, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: true }, render_settings: Some("/Render/settings"), subdiv_level: 3, adaptive: None, domes_seen_by_camera: true, precomp: true, working: None, camera: Some("/World/Cam"), cameras: ["/World/Cam"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [("matte", 1)], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/World/Cam"), offsets: [0, 0], interval: None, query: true, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/lookdev_usda-2df588e196076e2d-1.image b/crates/crust-core/tests/data/import_baselines/lookdev_usda-2df588e196076e2d-1.image new file mode 100644 index 000000000..f5a40b79c --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/lookdev_usda-2df588e196076e2d-1.image @@ -0,0 +1 @@ +320x180 16spp clamp-off 7fc2a052099963ae diff --git a/crates/crust-core/tests/data/import_baselines/lookdev_usda-37661541bc721de0-1.digest b/crates/crust-core/tests/data/import_baselines/lookdev_usda-37661541bc721de0-1.digest new file mode 100644 index 000000000..ba4d3bc16 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/lookdev_usda-37661541bc721de0-1.digest @@ -0,0 +1,41 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/World/Cam") +camera: Camera { origin: Vec3A(0.0, 1.0, 6.0), lower_left_corner: Vec3A(-4.7783756, -2.1855836, -4.0), horizontal: Vec3A(9.556751, 0.0, 0.0), vertical: Vec3A(0.0, 6.371167, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: Some("/Render/settings") +settings: RenderSettings { samples_per_pixel: 128, max_depth: 4, width: 48, height: 32, region: PixelRect { x0: 0, y0: 0, x1: 48, y1: 32 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 24.0, aperture: [20.955, 15.2908], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 10.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/lookdev.usda", "$DIR/stage.usda"], invisible_overrides: Some(0) } +layer: $DIR/lookdev.usda +layer: $DIR/stage.usda +lights: 2 +light 0: area name Some("/World/Key") lpe None pmf 0.5 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 1: dome name Some("/World/Sky") lpe None pmf 0.5 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 5 geometries, PrimitiveBreakdown { triangles: 4, spheres: 3, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 4, spheres: 3, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +geom 0: material #0 Signature { kind: "MaterialX", cutout: false, straight: false, boundary: false, emits: false, uv: true, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:ba01d90e2cc0d4f5 camera=1:ba01d90e2cc0d4f5 shadow=1:ba01d90e2cc0d4f5 indirect=1:ba01d90e2cc0d4f5 +geom 1: material #1 Signature { kind: "MaterialX", cutout: false, straight: false, boundary: false, emits: false, uv: true, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:910eeb9b40238145 camera=1:910eeb9b40238145 shadow=1:910eeb9b40238145 indirect=1:910eeb9b40238145 +geom 2: material #2 Signature { kind: "MaterialX", cutout: false, straight: false, boundary: false, emits: false, uv: true, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:ee76fd7ed45c4a85 camera=1:ee76fd7ed45c4a85 shadow=1:ee76fd7ed45c4a85 indirect=1:ee76fd7ed45c4a85 +geom 3: material #3 Signature { kind: "UsdPreviewSurface (textured)", cutout: false, straight: false, boundary: false, emits: false, uv: true, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv Some(0) shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:6787da8eacebee45 camera=2:6787da8eacebee45 shadow=2:6787da8eacebee45 indirect=2:6787da8eacebee45 +geom 4: material #4 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:7812e24c7b4d4335 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=2:7812e24c7b4d4335 +provenance material /World/Looks/Base: MaterialOrigin { slots: [1], displaced: false } +provenance material /World/Looks/Derived: MaterialOrigin { slots: [0], displaced: false } +provenance material /World/Looks/Std: MaterialOrigin { slots: [2], displaced: false } +provenance material /World/Looks/Tex: MaterialOrigin { slots: [3], displaced: false } +provenance material read: ("/World/Looks/Base", "/World/Looks/Derived") +provenance material read: ("/World/Looks/Base/Surface", "/World/Looks/Derived") +provenance arc source: /World/Looks/Base +provenance arc source: /World/Looks/Base/Surface +provenance light /World/Key: LightOrigin { index: 0, geoms: 4..5 } +provenance light /World/Sky: LightOrigin { index: 1, geoms: 5..5 } +provenance geometry 0..1: /World/Right +provenance geometry 1..2: /World/Left +provenance geometry 2..3: /World/Ball +provenance geometry 3..4: /World/Floor +provenance geometry 4..5: /World/Key +provenance mesh: MeshOrigin { geom_id: 3, slot: 0, baked: true, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 9851181043634021438, n_points: 4, n_indices: 4, n_uvs: Some(4), smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [0, 1, 2] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: true }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/World/Cam"), cameras: ["/World/Cam"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/World/Cam"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/lookdev_usda-37661541bc721de0-1.image b/crates/crust-core/tests/data/import_baselines/lookdev_usda-37661541bc721de0-1.image new file mode 100644 index 000000000..79ca9c1a0 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/lookdev_usda-37661541bc721de0-1.image @@ -0,0 +1 @@ +48x32 16spp clamp-off 6673c392f1d4262b diff --git a/crates/crust-core/tests/data/import_baselines/lookdev_usda-451cadfaa7f8e528-1.digest b/crates/crust-core/tests/data/import_baselines/lookdev_usda-451cadfaa7f8e528-1.digest new file mode 100644 index 000000000..ac6db9fbb --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/lookdev_usda-451cadfaa7f8e528-1.digest @@ -0,0 +1,40 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/scene/camera1") +camera: Camera { origin: Vec3A(0.0074343784, 1.9913422, 4.0133057), lower_left_corner: Vec3A(-8.881443, -3.0086517, -0.98669434), horizontal: Vec3A(17.777756, 0.0, 0.0), vertical: Vec3A(0.0, 9.999988, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: Some(Vec4(0.0, 0.0, -1.0, 3.9133058)), far: Some(Vec4(0.0, 0.0, 1.0, 9995.986)), planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: None +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 640, height: 360, region: PixelRect { x0: 0, y0: 0, x1: 640, y1: 360 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 12.700017, aperture: [25.4, 25.4], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 5.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/lookdev.usda", "$ROOT/samples/cornellbox.usda"], invisible_overrides: Some(0) } +layer: $ROOT/samples/cornellbox.usda +layer: $DIR/lookdev.usda +warning: Warning { code: MaterialFallbackDefault, kind: Skipped, count: 1, prims: ["/scene/Looks/initialShadingGroup"], message: "Material /scene/Looks/initialShadingGroup has no surface shader — using default grey OpenPBR" } +lights: 1 +light 0: dome name Some("/scene/Sky") lpe None pmf 1.0 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 5 geometries, PrimitiveBreakdown { triangles: 822, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 2 } top level, PrimitiveBreakdown { triangles: 1582, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 2 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 4.0 motion [] pieces all=10:88b22fc3345d5b05 camera=10:88b22fc3345d5b05 shadow=10:88b22fc3345d5b05 indirect=10:88b22fc3345d5b05 +geom 1: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.2 motion [] pieces all=760:c2b60a75c52c78b9 camera=760:c2b60a75c52c78b9 shadow=760:c2b60a75c52c78b9 indirect=760:c2b60a75c52c78b9 +geom 2: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=12:94a297badef437e1 camera=12:94a297badef437e1 shadow=12:94a297badef437e1 indirect=12:94a297badef437e1 +geom 3: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.25 motion [] pieces all=800:4a8c9f44d777e131 camera=800:4a8c9f44d777e131 shadow=800:4a8c9f44d777e131 indirect=800:4a8c9f44d777e131 +geom 4: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.3585339 motion [] pieces all=760:2344ecf63e12c441 camera=760:2344ecf63e12c441 shadow=760:2344ecf63e12c441 indirect=760:2344ecf63e12c441 +provenance material /scene/Looks/initialShadingGroup: MaterialOrigin { slots: [0, 1, 2, 3, 4], displaced: false } +provenance light /scene/Sky: LightOrigin { index: 0, geoms: 0..0 } +provenance geometry 0..1: /scene/pCube1 +provenance geometry 1..2: /scene/pSphere1 +provenance geometry 2..3: /scene/pCube2 +provenance geometry 3..4: /scene/pTorus1 +provenance geometry 4..5: /scene/pSphere2 +provenance mesh: MeshOrigin { geom_id: 0, slot: 0, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 1, slot: 1, baked: false, moving: false } +provenance mesh: MeshOrigin { geom_id: 2, slot: 2, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 3, slot: 3, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 4, slot: 1, baked: false, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 12343188411137242430, n_points: 8, n_indices: 20, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 1: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 17119738035130870988, n_points: 382, n_indices: 1560, n_uvs: None, smooth: false, material: 0 }), placements: 2, shared: false, displaced: false } +provenance mesh slot 2: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 1739488954094729910, n_points: 8, n_indices: 24, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 3: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 6096447469814747168, n_points: 400, n_indices: 1600, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: true }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/scene/camera1"), cameras: ["/scene/camera1"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/scene/camera1"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/lookdev_usda-451cadfaa7f8e528-1.image b/crates/crust-core/tests/data/import_baselines/lookdev_usda-451cadfaa7f8e528-1.image new file mode 100644 index 000000000..7172edbfe --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/lookdev_usda-451cadfaa7f8e528-1.image @@ -0,0 +1 @@ +640x360 16spp clamp-off 64ede904b11bab22 diff --git a/crates/crust-core/tests/data/import_baselines/lookdev_usda-4e0b53f3e573c0d5-1.digest b/crates/crust-core/tests/data/import_baselines/lookdev_usda-4e0b53f3e573c0d5-1.digest new file mode 100644 index 000000000..ba4d3bc16 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/lookdev_usda-4e0b53f3e573c0d5-1.digest @@ -0,0 +1,41 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/World/Cam") +camera: Camera { origin: Vec3A(0.0, 1.0, 6.0), lower_left_corner: Vec3A(-4.7783756, -2.1855836, -4.0), horizontal: Vec3A(9.556751, 0.0, 0.0), vertical: Vec3A(0.0, 6.371167, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: Some("/Render/settings") +settings: RenderSettings { samples_per_pixel: 128, max_depth: 4, width: 48, height: 32, region: PixelRect { x0: 0, y0: 0, x1: 48, y1: 32 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 24.0, aperture: [20.955, 15.2908], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 10.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/lookdev.usda", "$DIR/stage.usda"], invisible_overrides: Some(0) } +layer: $DIR/lookdev.usda +layer: $DIR/stage.usda +lights: 2 +light 0: area name Some("/World/Key") lpe None pmf 0.5 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 1: dome name Some("/World/Sky") lpe None pmf 0.5 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 5 geometries, PrimitiveBreakdown { triangles: 4, spheres: 3, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 4, spheres: 3, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +geom 0: material #0 Signature { kind: "MaterialX", cutout: false, straight: false, boundary: false, emits: false, uv: true, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:ba01d90e2cc0d4f5 camera=1:ba01d90e2cc0d4f5 shadow=1:ba01d90e2cc0d4f5 indirect=1:ba01d90e2cc0d4f5 +geom 1: material #1 Signature { kind: "MaterialX", cutout: false, straight: false, boundary: false, emits: false, uv: true, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:910eeb9b40238145 camera=1:910eeb9b40238145 shadow=1:910eeb9b40238145 indirect=1:910eeb9b40238145 +geom 2: material #2 Signature { kind: "MaterialX", cutout: false, straight: false, boundary: false, emits: false, uv: true, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:ee76fd7ed45c4a85 camera=1:ee76fd7ed45c4a85 shadow=1:ee76fd7ed45c4a85 indirect=1:ee76fd7ed45c4a85 +geom 3: material #3 Signature { kind: "UsdPreviewSurface (textured)", cutout: false, straight: false, boundary: false, emits: false, uv: true, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv Some(0) shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:6787da8eacebee45 camera=2:6787da8eacebee45 shadow=2:6787da8eacebee45 indirect=2:6787da8eacebee45 +geom 4: material #4 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:7812e24c7b4d4335 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=2:7812e24c7b4d4335 +provenance material /World/Looks/Base: MaterialOrigin { slots: [1], displaced: false } +provenance material /World/Looks/Derived: MaterialOrigin { slots: [0], displaced: false } +provenance material /World/Looks/Std: MaterialOrigin { slots: [2], displaced: false } +provenance material /World/Looks/Tex: MaterialOrigin { slots: [3], displaced: false } +provenance material read: ("/World/Looks/Base", "/World/Looks/Derived") +provenance material read: ("/World/Looks/Base/Surface", "/World/Looks/Derived") +provenance arc source: /World/Looks/Base +provenance arc source: /World/Looks/Base/Surface +provenance light /World/Key: LightOrigin { index: 0, geoms: 4..5 } +provenance light /World/Sky: LightOrigin { index: 1, geoms: 5..5 } +provenance geometry 0..1: /World/Right +provenance geometry 1..2: /World/Left +provenance geometry 2..3: /World/Ball +provenance geometry 3..4: /World/Floor +provenance geometry 4..5: /World/Key +provenance mesh: MeshOrigin { geom_id: 3, slot: 0, baked: true, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 9851181043634021438, n_points: 4, n_indices: 4, n_uvs: Some(4), smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [0, 1, 2] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: true }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/World/Cam"), cameras: ["/World/Cam"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/World/Cam"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/lookdev_usda-4e0b53f3e573c0d5-1.image b/crates/crust-core/tests/data/import_baselines/lookdev_usda-4e0b53f3e573c0d5-1.image new file mode 100644 index 000000000..5e92756f1 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/lookdev_usda-4e0b53f3e573c0d5-1.image @@ -0,0 +1 @@ +48x32 16spp clamp-off 3dd1fad54766a614 diff --git a/crates/crust-core/tests/data/import_baselines/lookdev_usda-5b22641b5a20aa26-1.digest b/crates/crust-core/tests/data/import_baselines/lookdev_usda-5b22641b5a20aa26-1.digest new file mode 100644 index 000000000..2e4648805 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/lookdev_usda-5b22641b5a20aa26-1.digest @@ -0,0 +1,35 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/World/Cam") +camera: Camera { origin: Vec3A(0.0, 1.0, 6.0), lower_left_corner: Vec3A(-4.7783756, -2.1855836, -4.0), horizontal: Vec3A(9.556751, 0.0, 0.0), vertical: Vec3A(0.0, 6.371167, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: Some("/Render/settings") +settings: RenderSettings { samples_per_pixel: 128, max_depth: 4, width: 48, height: 32, region: PixelRect { x0: 0, y0: 0, x1: 48, y1: 32 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 24.0, aperture: [20.955, 15.2908], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 10.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/lookdev.usda", "$DIR/shot.usda", "$DIR/lights.usda"], invisible_overrides: Some(0) } +layer: $DIR/lights.usda +layer: $DIR/lookdev.usda +layer: $DIR/pay.usda +layer: $DIR/prop.usda +layer: $DIR/shot.usda +lights: 2 +light 0: dome name Some("/World/Sky") lpe None pmf 0.5 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 1: area name Some("/World/Key") lpe None pmf 0.5 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 3 geometries, PrimitiveBreakdown { triangles: 2, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 2 } top level, PrimitiveBreakdown { triangles: 4, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 2 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:6f550ecd4f901d05 camera=2:6f550ecd4f901d05 shadow=2:6f550ecd4f901d05 indirect=2:6f550ecd4f901d05 +geom 1: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:6f550ecd4f901d05 camera=2:6f550ecd4f901d05 shadow=2:6f550ecd4f901d05 indirect=2:6f550ecd4f901d05 +geom 2: material #1 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:7812e24c7b4d4335 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=2:7812e24c7b4d4335 +provenance arc source: /Pay +provenance arc source: /Prop +provenance light /World/Key: LightOrigin { index: 1, geoms: 2..3 } +provenance light /World/Sky: LightOrigin { index: 0, geoms: 2..2 } +provenance geometry 0..1: /World/Heavy +provenance geometry 1..2: /World/Prop +provenance geometry 2..3: /World/Key +provenance mesh: MeshOrigin { geom_id: 0, slot: 0, baked: false, moving: false } +provenance mesh: MeshOrigin { geom_id: 1, slot: 0, baked: false, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 6610719295604273699, n_points: 4, n_indices: 4, n_uvs: None, smooth: true, material: 0 }), placements: 2, shared: false, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: true }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/World/Cam"), cameras: ["/World/Cam"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/World/Cam"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/lookdev_usda-5b22641b5a20aa26-1.image b/crates/crust-core/tests/data/import_baselines/lookdev_usda-5b22641b5a20aa26-1.image new file mode 100644 index 000000000..afc2d921e --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/lookdev_usda-5b22641b5a20aa26-1.image @@ -0,0 +1 @@ +48x32 16spp clamp-off 2caa34772f5d6a86 diff --git a/crates/crust-core/tests/data/import_baselines/lookdev_usda-5b22641b5a20aa26-2.digest b/crates/crust-core/tests/data/import_baselines/lookdev_usda-5b22641b5a20aa26-2.digest new file mode 100644 index 000000000..2e4648805 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/lookdev_usda-5b22641b5a20aa26-2.digest @@ -0,0 +1,35 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/World/Cam") +camera: Camera { origin: Vec3A(0.0, 1.0, 6.0), lower_left_corner: Vec3A(-4.7783756, -2.1855836, -4.0), horizontal: Vec3A(9.556751, 0.0, 0.0), vertical: Vec3A(0.0, 6.371167, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: Some("/Render/settings") +settings: RenderSettings { samples_per_pixel: 128, max_depth: 4, width: 48, height: 32, region: PixelRect { x0: 0, y0: 0, x1: 48, y1: 32 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 24.0, aperture: [20.955, 15.2908], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 10.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/lookdev.usda", "$DIR/shot.usda", "$DIR/lights.usda"], invisible_overrides: Some(0) } +layer: $DIR/lights.usda +layer: $DIR/lookdev.usda +layer: $DIR/pay.usda +layer: $DIR/prop.usda +layer: $DIR/shot.usda +lights: 2 +light 0: dome name Some("/World/Sky") lpe None pmf 0.5 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 1: area name Some("/World/Key") lpe None pmf 0.5 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 3 geometries, PrimitiveBreakdown { triangles: 2, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 2 } top level, PrimitiveBreakdown { triangles: 4, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 2 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:6f550ecd4f901d05 camera=2:6f550ecd4f901d05 shadow=2:6f550ecd4f901d05 indirect=2:6f550ecd4f901d05 +geom 1: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:6f550ecd4f901d05 camera=2:6f550ecd4f901d05 shadow=2:6f550ecd4f901d05 indirect=2:6f550ecd4f901d05 +geom 2: material #1 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:7812e24c7b4d4335 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=2:7812e24c7b4d4335 +provenance arc source: /Pay +provenance arc source: /Prop +provenance light /World/Key: LightOrigin { index: 1, geoms: 2..3 } +provenance light /World/Sky: LightOrigin { index: 0, geoms: 2..2 } +provenance geometry 0..1: /World/Heavy +provenance geometry 1..2: /World/Prop +provenance geometry 2..3: /World/Key +provenance mesh: MeshOrigin { geom_id: 0, slot: 0, baked: false, moving: false } +provenance mesh: MeshOrigin { geom_id: 1, slot: 0, baked: false, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 6610719295604273699, n_points: 4, n_indices: 4, n_uvs: None, smooth: true, material: 0 }), placements: 2, shared: false, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: true }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/World/Cam"), cameras: ["/World/Cam"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/World/Cam"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/lookdev_usda-5b22641b5a20aa26-2.image b/crates/crust-core/tests/data/import_baselines/lookdev_usda-5b22641b5a20aa26-2.image new file mode 100644 index 000000000..afc2d921e --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/lookdev_usda-5b22641b5a20aa26-2.image @@ -0,0 +1 @@ +48x32 16spp clamp-off 2caa34772f5d6a86 diff --git a/crates/crust-core/tests/data/import_baselines/lookdev_usda-619dbb27dff03edb-1.digest b/crates/crust-core/tests/data/import_baselines/lookdev_usda-619dbb27dff03edb-1.digest new file mode 100644 index 000000000..ac6db9fbb --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/lookdev_usda-619dbb27dff03edb-1.digest @@ -0,0 +1,40 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/scene/camera1") +camera: Camera { origin: Vec3A(0.0074343784, 1.9913422, 4.0133057), lower_left_corner: Vec3A(-8.881443, -3.0086517, -0.98669434), horizontal: Vec3A(17.777756, 0.0, 0.0), vertical: Vec3A(0.0, 9.999988, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: Some(Vec4(0.0, 0.0, -1.0, 3.9133058)), far: Some(Vec4(0.0, 0.0, 1.0, 9995.986)), planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: None +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 640, height: 360, region: PixelRect { x0: 0, y0: 0, x1: 640, y1: 360 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 12.700017, aperture: [25.4, 25.4], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 5.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/lookdev.usda", "$ROOT/samples/cornellbox.usda"], invisible_overrides: Some(0) } +layer: $ROOT/samples/cornellbox.usda +layer: $DIR/lookdev.usda +warning: Warning { code: MaterialFallbackDefault, kind: Skipped, count: 1, prims: ["/scene/Looks/initialShadingGroup"], message: "Material /scene/Looks/initialShadingGroup has no surface shader — using default grey OpenPBR" } +lights: 1 +light 0: dome name Some("/scene/Sky") lpe None pmf 1.0 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 5 geometries, PrimitiveBreakdown { triangles: 822, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 2 } top level, PrimitiveBreakdown { triangles: 1582, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 2 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 4.0 motion [] pieces all=10:88b22fc3345d5b05 camera=10:88b22fc3345d5b05 shadow=10:88b22fc3345d5b05 indirect=10:88b22fc3345d5b05 +geom 1: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.2 motion [] pieces all=760:c2b60a75c52c78b9 camera=760:c2b60a75c52c78b9 shadow=760:c2b60a75c52c78b9 indirect=760:c2b60a75c52c78b9 +geom 2: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=12:94a297badef437e1 camera=12:94a297badef437e1 shadow=12:94a297badef437e1 indirect=12:94a297badef437e1 +geom 3: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.25 motion [] pieces all=800:4a8c9f44d777e131 camera=800:4a8c9f44d777e131 shadow=800:4a8c9f44d777e131 indirect=800:4a8c9f44d777e131 +geom 4: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.3585339 motion [] pieces all=760:2344ecf63e12c441 camera=760:2344ecf63e12c441 shadow=760:2344ecf63e12c441 indirect=760:2344ecf63e12c441 +provenance material /scene/Looks/initialShadingGroup: MaterialOrigin { slots: [0, 1, 2, 3, 4], displaced: false } +provenance light /scene/Sky: LightOrigin { index: 0, geoms: 0..0 } +provenance geometry 0..1: /scene/pCube1 +provenance geometry 1..2: /scene/pSphere1 +provenance geometry 2..3: /scene/pCube2 +provenance geometry 3..4: /scene/pTorus1 +provenance geometry 4..5: /scene/pSphere2 +provenance mesh: MeshOrigin { geom_id: 0, slot: 0, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 1, slot: 1, baked: false, moving: false } +provenance mesh: MeshOrigin { geom_id: 2, slot: 2, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 3, slot: 3, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 4, slot: 1, baked: false, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 12343188411137242430, n_points: 8, n_indices: 20, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 1: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 17119738035130870988, n_points: 382, n_indices: 1560, n_uvs: None, smooth: false, material: 0 }), placements: 2, shared: false, displaced: false } +provenance mesh slot 2: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 1739488954094729910, n_points: 8, n_indices: 24, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 3: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 6096447469814747168, n_points: 400, n_indices: 1600, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: true }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/scene/camera1"), cameras: ["/scene/camera1"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/scene/camera1"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/lookdev_usda-619dbb27dff03edb-1.image b/crates/crust-core/tests/data/import_baselines/lookdev_usda-619dbb27dff03edb-1.image new file mode 100644 index 000000000..7172edbfe --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/lookdev_usda-619dbb27dff03edb-1.image @@ -0,0 +1 @@ +640x360 16spp clamp-off 64ede904b11bab22 diff --git a/crates/crust-core/tests/data/import_baselines/lookdev_usda-6332af41b2f94037-1.digest b/crates/crust-core/tests/data/import_baselines/lookdev_usda-6332af41b2f94037-1.digest new file mode 100644 index 000000000..ba4d3bc16 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/lookdev_usda-6332af41b2f94037-1.digest @@ -0,0 +1,41 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/World/Cam") +camera: Camera { origin: Vec3A(0.0, 1.0, 6.0), lower_left_corner: Vec3A(-4.7783756, -2.1855836, -4.0), horizontal: Vec3A(9.556751, 0.0, 0.0), vertical: Vec3A(0.0, 6.371167, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: Some("/Render/settings") +settings: RenderSettings { samples_per_pixel: 128, max_depth: 4, width: 48, height: 32, region: PixelRect { x0: 0, y0: 0, x1: 48, y1: 32 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 24.0, aperture: [20.955, 15.2908], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 10.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/lookdev.usda", "$DIR/stage.usda"], invisible_overrides: Some(0) } +layer: $DIR/lookdev.usda +layer: $DIR/stage.usda +lights: 2 +light 0: area name Some("/World/Key") lpe None pmf 0.5 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 1: dome name Some("/World/Sky") lpe None pmf 0.5 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 5 geometries, PrimitiveBreakdown { triangles: 4, spheres: 3, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 4, spheres: 3, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +geom 0: material #0 Signature { kind: "MaterialX", cutout: false, straight: false, boundary: false, emits: false, uv: true, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:ba01d90e2cc0d4f5 camera=1:ba01d90e2cc0d4f5 shadow=1:ba01d90e2cc0d4f5 indirect=1:ba01d90e2cc0d4f5 +geom 1: material #1 Signature { kind: "MaterialX", cutout: false, straight: false, boundary: false, emits: false, uv: true, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:910eeb9b40238145 camera=1:910eeb9b40238145 shadow=1:910eeb9b40238145 indirect=1:910eeb9b40238145 +geom 2: material #2 Signature { kind: "MaterialX", cutout: false, straight: false, boundary: false, emits: false, uv: true, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:ee76fd7ed45c4a85 camera=1:ee76fd7ed45c4a85 shadow=1:ee76fd7ed45c4a85 indirect=1:ee76fd7ed45c4a85 +geom 3: material #3 Signature { kind: "UsdPreviewSurface (textured)", cutout: false, straight: false, boundary: false, emits: false, uv: true, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv Some(0) shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:6787da8eacebee45 camera=2:6787da8eacebee45 shadow=2:6787da8eacebee45 indirect=2:6787da8eacebee45 +geom 4: material #4 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:7812e24c7b4d4335 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=2:7812e24c7b4d4335 +provenance material /World/Looks/Base: MaterialOrigin { slots: [1], displaced: false } +provenance material /World/Looks/Derived: MaterialOrigin { slots: [0], displaced: false } +provenance material /World/Looks/Std: MaterialOrigin { slots: [2], displaced: false } +provenance material /World/Looks/Tex: MaterialOrigin { slots: [3], displaced: false } +provenance material read: ("/World/Looks/Base", "/World/Looks/Derived") +provenance material read: ("/World/Looks/Base/Surface", "/World/Looks/Derived") +provenance arc source: /World/Looks/Base +provenance arc source: /World/Looks/Base/Surface +provenance light /World/Key: LightOrigin { index: 0, geoms: 4..5 } +provenance light /World/Sky: LightOrigin { index: 1, geoms: 5..5 } +provenance geometry 0..1: /World/Right +provenance geometry 1..2: /World/Left +provenance geometry 2..3: /World/Ball +provenance geometry 3..4: /World/Floor +provenance geometry 4..5: /World/Key +provenance mesh: MeshOrigin { geom_id: 3, slot: 0, baked: true, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 9851181043634021438, n_points: 4, n_indices: 4, n_uvs: Some(4), smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [0, 1, 2] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: true }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/World/Cam"), cameras: ["/World/Cam"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/World/Cam"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/lookdev_usda-6332af41b2f94037-1.image b/crates/crust-core/tests/data/import_baselines/lookdev_usda-6332af41b2f94037-1.image new file mode 100644 index 000000000..11828d811 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/lookdev_usda-6332af41b2f94037-1.image @@ -0,0 +1 @@ +48x32 16spp clamp-off a22f3882aa730ddf diff --git a/crates/crust-core/tests/data/import_baselines/lookdev_usda-66e64ab7da1be7a8-1.digest b/crates/crust-core/tests/data/import_baselines/lookdev_usda-66e64ab7da1be7a8-1.digest new file mode 100644 index 000000000..2e4648805 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/lookdev_usda-66e64ab7da1be7a8-1.digest @@ -0,0 +1,35 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/World/Cam") +camera: Camera { origin: Vec3A(0.0, 1.0, 6.0), lower_left_corner: Vec3A(-4.7783756, -2.1855836, -4.0), horizontal: Vec3A(9.556751, 0.0, 0.0), vertical: Vec3A(0.0, 6.371167, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: Some("/Render/settings") +settings: RenderSettings { samples_per_pixel: 128, max_depth: 4, width: 48, height: 32, region: PixelRect { x0: 0, y0: 0, x1: 48, y1: 32 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 24.0, aperture: [20.955, 15.2908], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 10.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/lookdev.usda", "$DIR/shot.usda", "$DIR/lights.usda"], invisible_overrides: Some(0) } +layer: $DIR/lights.usda +layer: $DIR/lookdev.usda +layer: $DIR/pay.usda +layer: $DIR/prop.usda +layer: $DIR/shot.usda +lights: 2 +light 0: dome name Some("/World/Sky") lpe None pmf 0.5 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 1: area name Some("/World/Key") lpe None pmf 0.5 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 3 geometries, PrimitiveBreakdown { triangles: 2, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 2 } top level, PrimitiveBreakdown { triangles: 4, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 2 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:6f550ecd4f901d05 camera=2:6f550ecd4f901d05 shadow=2:6f550ecd4f901d05 indirect=2:6f550ecd4f901d05 +geom 1: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:6f550ecd4f901d05 camera=2:6f550ecd4f901d05 shadow=2:6f550ecd4f901d05 indirect=2:6f550ecd4f901d05 +geom 2: material #1 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:7812e24c7b4d4335 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=2:7812e24c7b4d4335 +provenance arc source: /Pay +provenance arc source: /Prop +provenance light /World/Key: LightOrigin { index: 1, geoms: 2..3 } +provenance light /World/Sky: LightOrigin { index: 0, geoms: 2..2 } +provenance geometry 0..1: /World/Heavy +provenance geometry 1..2: /World/Prop +provenance geometry 2..3: /World/Key +provenance mesh: MeshOrigin { geom_id: 0, slot: 0, baked: false, moving: false } +provenance mesh: MeshOrigin { geom_id: 1, slot: 0, baked: false, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 6610719295604273699, n_points: 4, n_indices: 4, n_uvs: None, smooth: true, material: 0 }), placements: 2, shared: false, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: true }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/World/Cam"), cameras: ["/World/Cam"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/World/Cam"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/lookdev_usda-66e64ab7da1be7a8-1.image b/crates/crust-core/tests/data/import_baselines/lookdev_usda-66e64ab7da1be7a8-1.image new file mode 100644 index 000000000..afc2d921e --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/lookdev_usda-66e64ab7da1be7a8-1.image @@ -0,0 +1 @@ +48x32 16spp clamp-off 2caa34772f5d6a86 diff --git a/crates/crust-core/tests/data/import_baselines/lookdev_usda-675a4c56d7da2e1a-1.digest b/crates/crust-core/tests/data/import_baselines/lookdev_usda-675a4c56d7da2e1a-1.digest new file mode 100644 index 000000000..f31570c9b --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/lookdev_usda-675a4c56d7da2e1a-1.digest @@ -0,0 +1,40 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/scene/camera1") +camera: Camera { origin: Vec3A(0.0074343784, 1.9913422, 4.0133057), lower_left_corner: Vec3A(-8.881443, -3.0086517, -0.98669434), horizontal: Vec3A(17.777756, 0.0, 0.0), vertical: Vec3A(0.0, 9.999988, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: Some(Vec4(0.0, 0.0, -1.0, 3.9133058)), far: Some(Vec4(0.0, 0.0, 1.0, 9995.986)), planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: None +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 640, height: 360, region: PixelRect { x0: 0, y0: 0, x1: 640, y1: 360 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 12.700017, aperture: [25.4, 25.4], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 5.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/lookdev.usda", "$ROOT/samples/cornellbox.usda"], invisible_overrides: Some(0) } +layer: $ROOT/samples/cornellbox.usda +layer: $DIR/lookdev.usda +warning: Warning { code: MaterialFallbackDefault, kind: Skipped, count: 1, prims: ["/scene/Looks/initialShadingGroup"], message: "Material /scene/Looks/initialShadingGroup has no surface shader — using default grey OpenPBR" } +lights: 1 +light 0: dome name Some("/scene/Sky") lpe None pmf 1.0 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 5 geometries, PrimitiveBreakdown { triangles: 822, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 2 } top level, PrimitiveBreakdown { triangles: 1582, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 2 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 4.0 motion [] pieces all=10:88b22fc3345d5b05 camera=10:88b22fc3345d5b05 shadow=10:88b22fc3345d5b05 indirect=10:88b22fc3345d5b05 +geom 1: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.2 motion [] pieces all=760:c2b60a75c52c78b9 camera=760:c2b60a75c52c78b9 shadow=760:c2b60a75c52c78b9 indirect=760:c2b60a75c52c78b9 +geom 2: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=12:94a297badef437e1 camera=12:94a297badef437e1 shadow=12:94a297badef437e1 indirect=12:94a297badef437e1 +geom 3: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.25 motion [] pieces all=800:4a8c9f44d777e131 camera=800:4a8c9f44d777e131 shadow=800:4a8c9f44d777e131 indirect=800:4a8c9f44d777e131 +geom 4: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.3585339 motion [] pieces all=760:2344ecf63e12c441 camera=760:2344ecf63e12c441 shadow=760:2344ecf63e12c441 indirect=760:2344ecf63e12c441 +provenance material /scene/Looks/initialShadingGroup: MaterialOrigin { slots: [0, 1, 2, 3, 4], displaced: false } +provenance light /scene/Sky: LightOrigin { index: 0, geoms: 0..0 } +provenance geometry 0..1: /scene/pCube1 +provenance geometry 1..2: /scene/pSphere1 +provenance geometry 2..3: /scene/pCube2 +provenance geometry 3..4: /scene/pTorus1 +provenance geometry 4..5: /scene/pSphere2 +provenance mesh: MeshOrigin { geom_id: 0, slot: 0, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 1, slot: 1, baked: false, moving: false } +provenance mesh: MeshOrigin { geom_id: 2, slot: 2, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 3, slot: 3, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 4, slot: 1, baked: false, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 12343188411137242430, n_points: 8, n_indices: 20, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 1: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 17119738035130870988, n_points: 382, n_indices: 1560, n_uvs: None, smooth: false, material: 0 }), placements: 2, shared: false, displaced: false } +provenance mesh slot 2: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 1739488954094729910, n_points: 8, n_indices: 24, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 3: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 6096447469814747168, n_points: 400, n_indices: 1600, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: true, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/scene/camera1"), cameras: ["/scene/camera1"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/scene/camera1"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/lookdev_usda-675a4c56d7da2e1a-1.image b/crates/crust-core/tests/data/import_baselines/lookdev_usda-675a4c56d7da2e1a-1.image new file mode 100644 index 000000000..7172edbfe --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/lookdev_usda-675a4c56d7da2e1a-1.image @@ -0,0 +1 @@ +640x360 16spp clamp-off 64ede904b11bab22 diff --git a/crates/crust-core/tests/data/import_baselines/lookdev_usda-6a91390c6e2e8f32-1.digest b/crates/crust-core/tests/data/import_baselines/lookdev_usda-6a91390c6e2e8f32-1.digest new file mode 100644 index 000000000..ba4d3bc16 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/lookdev_usda-6a91390c6e2e8f32-1.digest @@ -0,0 +1,41 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/World/Cam") +camera: Camera { origin: Vec3A(0.0, 1.0, 6.0), lower_left_corner: Vec3A(-4.7783756, -2.1855836, -4.0), horizontal: Vec3A(9.556751, 0.0, 0.0), vertical: Vec3A(0.0, 6.371167, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: Some("/Render/settings") +settings: RenderSettings { samples_per_pixel: 128, max_depth: 4, width: 48, height: 32, region: PixelRect { x0: 0, y0: 0, x1: 48, y1: 32 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 24.0, aperture: [20.955, 15.2908], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 10.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/lookdev.usda", "$DIR/stage.usda"], invisible_overrides: Some(0) } +layer: $DIR/lookdev.usda +layer: $DIR/stage.usda +lights: 2 +light 0: area name Some("/World/Key") lpe None pmf 0.5 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 1: dome name Some("/World/Sky") lpe None pmf 0.5 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 5 geometries, PrimitiveBreakdown { triangles: 4, spheres: 3, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 4, spheres: 3, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +geom 0: material #0 Signature { kind: "MaterialX", cutout: false, straight: false, boundary: false, emits: false, uv: true, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:ba01d90e2cc0d4f5 camera=1:ba01d90e2cc0d4f5 shadow=1:ba01d90e2cc0d4f5 indirect=1:ba01d90e2cc0d4f5 +geom 1: material #1 Signature { kind: "MaterialX", cutout: false, straight: false, boundary: false, emits: false, uv: true, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:910eeb9b40238145 camera=1:910eeb9b40238145 shadow=1:910eeb9b40238145 indirect=1:910eeb9b40238145 +geom 2: material #2 Signature { kind: "MaterialX", cutout: false, straight: false, boundary: false, emits: false, uv: true, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:ee76fd7ed45c4a85 camera=1:ee76fd7ed45c4a85 shadow=1:ee76fd7ed45c4a85 indirect=1:ee76fd7ed45c4a85 +geom 3: material #3 Signature { kind: "UsdPreviewSurface (textured)", cutout: false, straight: false, boundary: false, emits: false, uv: true, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv Some(0) shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:6787da8eacebee45 camera=2:6787da8eacebee45 shadow=2:6787da8eacebee45 indirect=2:6787da8eacebee45 +geom 4: material #4 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:7812e24c7b4d4335 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=2:7812e24c7b4d4335 +provenance material /World/Looks/Base: MaterialOrigin { slots: [1], displaced: false } +provenance material /World/Looks/Derived: MaterialOrigin { slots: [0], displaced: false } +provenance material /World/Looks/Std: MaterialOrigin { slots: [2], displaced: false } +provenance material /World/Looks/Tex: MaterialOrigin { slots: [3], displaced: false } +provenance material read: ("/World/Looks/Base", "/World/Looks/Derived") +provenance material read: ("/World/Looks/Base/Surface", "/World/Looks/Derived") +provenance arc source: /World/Looks/Base +provenance arc source: /World/Looks/Base/Surface +provenance light /World/Key: LightOrigin { index: 0, geoms: 4..5 } +provenance light /World/Sky: LightOrigin { index: 1, geoms: 5..5 } +provenance geometry 0..1: /World/Right +provenance geometry 1..2: /World/Left +provenance geometry 2..3: /World/Ball +provenance geometry 3..4: /World/Floor +provenance geometry 4..5: /World/Key +provenance mesh: MeshOrigin { geom_id: 3, slot: 0, baked: true, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 9851181043634021438, n_points: 4, n_indices: 4, n_uvs: Some(4), smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [0, 1, 2] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: true }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/World/Cam"), cameras: ["/World/Cam"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/World/Cam"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/lookdev_usda-6a91390c6e2e8f32-1.image b/crates/crust-core/tests/data/import_baselines/lookdev_usda-6a91390c6e2e8f32-1.image new file mode 100644 index 000000000..11828d811 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/lookdev_usda-6a91390c6e2e8f32-1.image @@ -0,0 +1 @@ +48x32 16spp clamp-off a22f3882aa730ddf diff --git a/crates/crust-core/tests/data/import_baselines/lookdev_usda-75d1c7f90fc366b6-1.digest b/crates/crust-core/tests/data/import_baselines/lookdev_usda-75d1c7f90fc366b6-1.digest new file mode 100644 index 000000000..1c96acd8b --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/lookdev_usda-75d1c7f90fc366b6-1.digest @@ -0,0 +1,41 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/World/Cam") +camera: Camera { origin: Vec3A(0.0, 1.0, 6.0), lower_left_corner: Vec3A(-4.7783756, -2.1855836, -4.0), horizontal: Vec3A(9.556751, 0.0, 0.0), vertical: Vec3A(0.0, 6.371167, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: Some("/Render/settings") +settings: RenderSettings { samples_per_pixel: 128, max_depth: 4, width: 48, height: 32, region: PixelRect { x0: 0, y0: 0, x1: 48, y1: 32 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 24.0, aperture: [20.955, 15.2908], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 10.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/lookdev.usda", "$DIR/stage.usda"], invisible_overrides: Some(0) } +layer: $DIR/lookdev.usda +layer: $DIR/stage.usda +lights: 2 +light 0: area name Some("/World/Key") lpe None pmf 0.5 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 1: dome name Some("/World/Sky") lpe None pmf 0.5 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 5 geometries, PrimitiveBreakdown { triangles: 4, spheres: 3, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 4, spheres: 3, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +geom 0: material #0 Signature { kind: "MaterialX", cutout: false, straight: false, boundary: false, emits: false, uv: true, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:ba01d90e2cc0d4f5 camera=1:ba01d90e2cc0d4f5 shadow=1:ba01d90e2cc0d4f5 indirect=1:ba01d90e2cc0d4f5 +geom 1: material #1 Signature { kind: "MaterialX", cutout: false, straight: false, boundary: false, emits: false, uv: true, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:910eeb9b40238145 camera=1:910eeb9b40238145 shadow=1:910eeb9b40238145 indirect=1:910eeb9b40238145 +geom 2: material #2 Signature { kind: "MaterialX", cutout: false, straight: false, boundary: false, emits: false, uv: true, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:a718186db3bab648 camera=1:a718186db3bab648 shadow=1:a718186db3bab648 indirect=1:a718186db3bab648 +geom 3: material #3 Signature { kind: "UsdPreviewSurface (textured)", cutout: false, straight: false, boundary: false, emits: false, uv: true, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv Some(0) shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:6787da8eacebee45 camera=2:6787da8eacebee45 shadow=2:6787da8eacebee45 indirect=2:6787da8eacebee45 +geom 4: material #4 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:7812e24c7b4d4335 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=2:7812e24c7b4d4335 +provenance material /World/Looks/Base: MaterialOrigin { slots: [1], displaced: false } +provenance material /World/Looks/Derived: MaterialOrigin { slots: [0], displaced: false } +provenance material /World/Looks/Std: MaterialOrigin { slots: [2], displaced: false } +provenance material /World/Looks/Tex: MaterialOrigin { slots: [3], displaced: false } +provenance material read: ("/World/Looks/Base", "/World/Looks/Derived") +provenance material read: ("/World/Looks/Base/Surface", "/World/Looks/Derived") +provenance arc source: /World/Looks/Base +provenance arc source: /World/Looks/Base/Surface +provenance light /World/Key: LightOrigin { index: 0, geoms: 4..5 } +provenance light /World/Sky: LightOrigin { index: 1, geoms: 5..5 } +provenance geometry 0..1: /World/Right +provenance geometry 1..2: /World/Left +provenance geometry 2..3: /World/Ball +provenance geometry 3..4: /World/Floor +provenance geometry 4..5: /World/Key +provenance mesh: MeshOrigin { geom_id: 3, slot: 0, baked: true, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 9851181043634021438, n_points: 4, n_indices: 4, n_uvs: Some(4), smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [0, 1, 2] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: true }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/World/Cam"), cameras: ["/World/Cam"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/World/Cam"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/lookdev_usda-75d1c7f90fc366b6-1.image b/crates/crust-core/tests/data/import_baselines/lookdev_usda-75d1c7f90fc366b6-1.image new file mode 100644 index 000000000..cc6b70dc4 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/lookdev_usda-75d1c7f90fc366b6-1.image @@ -0,0 +1 @@ +48x32 16spp clamp-off 41504af5265577be diff --git a/crates/crust-core/tests/data/import_baselines/lookdev_usda-7ce0ae0f49d396d8-1.digest b/crates/crust-core/tests/data/import_baselines/lookdev_usda-7ce0ae0f49d396d8-1.digest new file mode 100644 index 000000000..2e4648805 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/lookdev_usda-7ce0ae0f49d396d8-1.digest @@ -0,0 +1,35 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/World/Cam") +camera: Camera { origin: Vec3A(0.0, 1.0, 6.0), lower_left_corner: Vec3A(-4.7783756, -2.1855836, -4.0), horizontal: Vec3A(9.556751, 0.0, 0.0), vertical: Vec3A(0.0, 6.371167, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: Some("/Render/settings") +settings: RenderSettings { samples_per_pixel: 128, max_depth: 4, width: 48, height: 32, region: PixelRect { x0: 0, y0: 0, x1: 48, y1: 32 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 24.0, aperture: [20.955, 15.2908], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 10.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/lookdev.usda", "$DIR/shot.usda", "$DIR/lights.usda"], invisible_overrides: Some(0) } +layer: $DIR/lights.usda +layer: $DIR/lookdev.usda +layer: $DIR/pay.usda +layer: $DIR/prop.usda +layer: $DIR/shot.usda +lights: 2 +light 0: dome name Some("/World/Sky") lpe None pmf 0.5 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 1: area name Some("/World/Key") lpe None pmf 0.5 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 3 geometries, PrimitiveBreakdown { triangles: 2, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 2 } top level, PrimitiveBreakdown { triangles: 4, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 2 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:6f550ecd4f901d05 camera=2:6f550ecd4f901d05 shadow=2:6f550ecd4f901d05 indirect=2:6f550ecd4f901d05 +geom 1: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:6f550ecd4f901d05 camera=2:6f550ecd4f901d05 shadow=2:6f550ecd4f901d05 indirect=2:6f550ecd4f901d05 +geom 2: material #1 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:7812e24c7b4d4335 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=2:7812e24c7b4d4335 +provenance arc source: /Pay +provenance arc source: /Prop +provenance light /World/Key: LightOrigin { index: 1, geoms: 2..3 } +provenance light /World/Sky: LightOrigin { index: 0, geoms: 2..2 } +provenance geometry 0..1: /World/Heavy +provenance geometry 1..2: /World/Prop +provenance geometry 2..3: /World/Key +provenance mesh: MeshOrigin { geom_id: 0, slot: 0, baked: false, moving: false } +provenance mesh: MeshOrigin { geom_id: 1, slot: 0, baked: false, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 6610719295604273699, n_points: 4, n_indices: 4, n_uvs: None, smooth: true, material: 0 }), placements: 2, shared: false, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: true }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/World/Cam"), cameras: ["/World/Cam"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/World/Cam"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/lookdev_usda-7ce0ae0f49d396d8-1.image b/crates/crust-core/tests/data/import_baselines/lookdev_usda-7ce0ae0f49d396d8-1.image new file mode 100644 index 000000000..e14303a7e --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/lookdev_usda-7ce0ae0f49d396d8-1.image @@ -0,0 +1 @@ +48x32 16spp clamp-off 55db275bd8392d23 diff --git a/crates/crust-core/tests/data/import_baselines/lookdev_usda-7ed4ae42b2f80bd6-1.digest b/crates/crust-core/tests/data/import_baselines/lookdev_usda-7ed4ae42b2f80bd6-1.digest new file mode 100644 index 000000000..6bf98b0ce --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/lookdev_usda-7ed4ae42b2f80bd6-1.digest @@ -0,0 +1,35 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/World/Cam") +camera: Camera { origin: Vec3A(0.0, 1.0, 6.0), lower_left_corner: Vec3A(-4.7783756, -2.1855836, -4.0), horizontal: Vec3A(9.556751, 0.0, 0.0), vertical: Vec3A(0.0, 6.371167, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: Some("/Render/settings") +settings: RenderSettings { samples_per_pixel: 128, max_depth: 4, width: 48, height: 32, region: PixelRect { x0: 0, y0: 0, x1: 48, y1: 32 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 24.0, aperture: [20.955, 15.2908], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 10.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/lookdev.usda", "$DIR/shot.usda", "$DIR/lights.usda"], invisible_overrides: Some(0) } +layer: $DIR/lights.usda +layer: $DIR/lookdev.usda +layer: $DIR/pay.usda +layer: $DIR/prop.usda +layer: $DIR/shot.usda +lights: 2 +light 0: dome name Some("/World/Sky") lpe None pmf 0.5 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 1: area name Some("/World/Key") lpe None pmf 0.5 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 3 geometries, PrimitiveBreakdown { triangles: 2, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 2 } top level, PrimitiveBreakdown { triangles: 4, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 2 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:8881e041bbb32975 camera=2:8881e041bbb32975 shadow=2:8881e041bbb32975 indirect=2:8881e041bbb32975 +geom 1: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:6f550ecd4f901d05 camera=2:6f550ecd4f901d05 shadow=2:6f550ecd4f901d05 indirect=2:6f550ecd4f901d05 +geom 2: material #1 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:7812e24c7b4d4335 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=2:7812e24c7b4d4335 +provenance arc source: /Pay +provenance arc source: /Prop +provenance light /World/Key: LightOrigin { index: 1, geoms: 2..3 } +provenance light /World/Sky: LightOrigin { index: 0, geoms: 2..2 } +provenance geometry 0..1: /World/Heavy +provenance geometry 1..2: /World/Prop +provenance geometry 2..3: /World/Key +provenance mesh: MeshOrigin { geom_id: 0, slot: 0, baked: false, moving: false } +provenance mesh: MeshOrigin { geom_id: 1, slot: 0, baked: false, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 6610719295604273699, n_points: 4, n_indices: 4, n_uvs: None, smooth: true, material: 0 }), placements: 2, shared: false, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: true }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/World/Cam"), cameras: ["/World/Cam"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/World/Cam"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/lookdev_usda-7ed4ae42b2f80bd6-1.image b/crates/crust-core/tests/data/import_baselines/lookdev_usda-7ed4ae42b2f80bd6-1.image new file mode 100644 index 000000000..2fbdc9344 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/lookdev_usda-7ed4ae42b2f80bd6-1.image @@ -0,0 +1 @@ +48x32 16spp clamp-off 4c86d9fc0259a5fb diff --git a/crates/crust-core/tests/data/import_baselines/lookdev_usda-83b2bc40e66e8d90-1.digest b/crates/crust-core/tests/data/import_baselines/lookdev_usda-83b2bc40e66e8d90-1.digest new file mode 100644 index 000000000..ac6db9fbb --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/lookdev_usda-83b2bc40e66e8d90-1.digest @@ -0,0 +1,40 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/scene/camera1") +camera: Camera { origin: Vec3A(0.0074343784, 1.9913422, 4.0133057), lower_left_corner: Vec3A(-8.881443, -3.0086517, -0.98669434), horizontal: Vec3A(17.777756, 0.0, 0.0), vertical: Vec3A(0.0, 9.999988, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: Some(Vec4(0.0, 0.0, -1.0, 3.9133058)), far: Some(Vec4(0.0, 0.0, 1.0, 9995.986)), planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: None +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 640, height: 360, region: PixelRect { x0: 0, y0: 0, x1: 640, y1: 360 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 12.700017, aperture: [25.4, 25.4], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 5.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/lookdev.usda", "$ROOT/samples/cornellbox.usda"], invisible_overrides: Some(0) } +layer: $ROOT/samples/cornellbox.usda +layer: $DIR/lookdev.usda +warning: Warning { code: MaterialFallbackDefault, kind: Skipped, count: 1, prims: ["/scene/Looks/initialShadingGroup"], message: "Material /scene/Looks/initialShadingGroup has no surface shader — using default grey OpenPBR" } +lights: 1 +light 0: dome name Some("/scene/Sky") lpe None pmf 1.0 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 5 geometries, PrimitiveBreakdown { triangles: 822, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 2 } top level, PrimitiveBreakdown { triangles: 1582, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 2 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 4.0 motion [] pieces all=10:88b22fc3345d5b05 camera=10:88b22fc3345d5b05 shadow=10:88b22fc3345d5b05 indirect=10:88b22fc3345d5b05 +geom 1: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.2 motion [] pieces all=760:c2b60a75c52c78b9 camera=760:c2b60a75c52c78b9 shadow=760:c2b60a75c52c78b9 indirect=760:c2b60a75c52c78b9 +geom 2: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=12:94a297badef437e1 camera=12:94a297badef437e1 shadow=12:94a297badef437e1 indirect=12:94a297badef437e1 +geom 3: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.25 motion [] pieces all=800:4a8c9f44d777e131 camera=800:4a8c9f44d777e131 shadow=800:4a8c9f44d777e131 indirect=800:4a8c9f44d777e131 +geom 4: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.3585339 motion [] pieces all=760:2344ecf63e12c441 camera=760:2344ecf63e12c441 shadow=760:2344ecf63e12c441 indirect=760:2344ecf63e12c441 +provenance material /scene/Looks/initialShadingGroup: MaterialOrigin { slots: [0, 1, 2, 3, 4], displaced: false } +provenance light /scene/Sky: LightOrigin { index: 0, geoms: 0..0 } +provenance geometry 0..1: /scene/pCube1 +provenance geometry 1..2: /scene/pSphere1 +provenance geometry 2..3: /scene/pCube2 +provenance geometry 3..4: /scene/pTorus1 +provenance geometry 4..5: /scene/pSphere2 +provenance mesh: MeshOrigin { geom_id: 0, slot: 0, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 1, slot: 1, baked: false, moving: false } +provenance mesh: MeshOrigin { geom_id: 2, slot: 2, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 3, slot: 3, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 4, slot: 1, baked: false, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 12343188411137242430, n_points: 8, n_indices: 20, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 1: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 17119738035130870988, n_points: 382, n_indices: 1560, n_uvs: None, smooth: false, material: 0 }), placements: 2, shared: false, displaced: false } +provenance mesh slot 2: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 1739488954094729910, n_points: 8, n_indices: 24, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 3: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 6096447469814747168, n_points: 400, n_indices: 1600, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: true }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/scene/camera1"), cameras: ["/scene/camera1"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/scene/camera1"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/lookdev_usda-83b2bc40e66e8d90-1.image b/crates/crust-core/tests/data/import_baselines/lookdev_usda-83b2bc40e66e8d90-1.image new file mode 100644 index 000000000..7172edbfe --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/lookdev_usda-83b2bc40e66e8d90-1.image @@ -0,0 +1 @@ +640x360 16spp clamp-off 64ede904b11bab22 diff --git a/crates/crust-core/tests/data/import_baselines/lookdev_usda-84687138ca39f6d2-1.digest b/crates/crust-core/tests/data/import_baselines/lookdev_usda-84687138ca39f6d2-1.digest new file mode 100644 index 000000000..ba4d3bc16 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/lookdev_usda-84687138ca39f6d2-1.digest @@ -0,0 +1,41 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/World/Cam") +camera: Camera { origin: Vec3A(0.0, 1.0, 6.0), lower_left_corner: Vec3A(-4.7783756, -2.1855836, -4.0), horizontal: Vec3A(9.556751, 0.0, 0.0), vertical: Vec3A(0.0, 6.371167, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: Some("/Render/settings") +settings: RenderSettings { samples_per_pixel: 128, max_depth: 4, width: 48, height: 32, region: PixelRect { x0: 0, y0: 0, x1: 48, y1: 32 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 24.0, aperture: [20.955, 15.2908], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 10.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/lookdev.usda", "$DIR/stage.usda"], invisible_overrides: Some(0) } +layer: $DIR/lookdev.usda +layer: $DIR/stage.usda +lights: 2 +light 0: area name Some("/World/Key") lpe None pmf 0.5 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 1: dome name Some("/World/Sky") lpe None pmf 0.5 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 5 geometries, PrimitiveBreakdown { triangles: 4, spheres: 3, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 4, spheres: 3, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +geom 0: material #0 Signature { kind: "MaterialX", cutout: false, straight: false, boundary: false, emits: false, uv: true, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:ba01d90e2cc0d4f5 camera=1:ba01d90e2cc0d4f5 shadow=1:ba01d90e2cc0d4f5 indirect=1:ba01d90e2cc0d4f5 +geom 1: material #1 Signature { kind: "MaterialX", cutout: false, straight: false, boundary: false, emits: false, uv: true, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:910eeb9b40238145 camera=1:910eeb9b40238145 shadow=1:910eeb9b40238145 indirect=1:910eeb9b40238145 +geom 2: material #2 Signature { kind: "MaterialX", cutout: false, straight: false, boundary: false, emits: false, uv: true, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:ee76fd7ed45c4a85 camera=1:ee76fd7ed45c4a85 shadow=1:ee76fd7ed45c4a85 indirect=1:ee76fd7ed45c4a85 +geom 3: material #3 Signature { kind: "UsdPreviewSurface (textured)", cutout: false, straight: false, boundary: false, emits: false, uv: true, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv Some(0) shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:6787da8eacebee45 camera=2:6787da8eacebee45 shadow=2:6787da8eacebee45 indirect=2:6787da8eacebee45 +geom 4: material #4 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:7812e24c7b4d4335 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=2:7812e24c7b4d4335 +provenance material /World/Looks/Base: MaterialOrigin { slots: [1], displaced: false } +provenance material /World/Looks/Derived: MaterialOrigin { slots: [0], displaced: false } +provenance material /World/Looks/Std: MaterialOrigin { slots: [2], displaced: false } +provenance material /World/Looks/Tex: MaterialOrigin { slots: [3], displaced: false } +provenance material read: ("/World/Looks/Base", "/World/Looks/Derived") +provenance material read: ("/World/Looks/Base/Surface", "/World/Looks/Derived") +provenance arc source: /World/Looks/Base +provenance arc source: /World/Looks/Base/Surface +provenance light /World/Key: LightOrigin { index: 0, geoms: 4..5 } +provenance light /World/Sky: LightOrigin { index: 1, geoms: 5..5 } +provenance geometry 0..1: /World/Right +provenance geometry 1..2: /World/Left +provenance geometry 2..3: /World/Ball +provenance geometry 3..4: /World/Floor +provenance geometry 4..5: /World/Key +provenance mesh: MeshOrigin { geom_id: 3, slot: 0, baked: true, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 9851181043634021438, n_points: 4, n_indices: 4, n_uvs: Some(4), smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [0, 1, 2] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: true }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/World/Cam"), cameras: ["/World/Cam"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/World/Cam"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/lookdev_usda-84687138ca39f6d2-1.image b/crates/crust-core/tests/data/import_baselines/lookdev_usda-84687138ca39f6d2-1.image new file mode 100644 index 000000000..11828d811 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/lookdev_usda-84687138ca39f6d2-1.image @@ -0,0 +1 @@ +48x32 16spp clamp-off a22f3882aa730ddf diff --git a/crates/crust-core/tests/data/import_baselines/lookdev_usda-889e2ebeaf6f6f43-1.digest b/crates/crust-core/tests/data/import_baselines/lookdev_usda-889e2ebeaf6f6f43-1.digest new file mode 100644 index 000000000..e50e9dc04 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/lookdev_usda-889e2ebeaf6f6f43-1.digest @@ -0,0 +1,50 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/World/Cam") +camera: Camera { origin: Vec3A(0.0, 3.2, 13.0), lower_left_corner: Vec3A(-5.6632595, -1.346313, 3.5406666), horizontal: Vec3A(11.326519, -0.0, 0.0), vertical: Vec3A(0.0, 6.3091636, -0.8866952), u: Vec3A(1.0, -0.0, 0.0), v: Vec3A(0.0, 0.9902681, -0.13917312), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: Some("/Render/settings") +settings: RenderSettings { samples_per_pixel: 48, max_depth: 8, width: 480, height: 270, region: PixelRect { x0: 0, y0: 0, x1: 480, y1: 270 }, min_samples_per_pixel: 16, variance_threshold: 0.02, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 24.0, aperture: [20.955, 15.2908], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 10.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/lookdev.usda", "$ROOT/samples/instancing.usda"], invisible_overrides: Some(0) } +layer: $ROOT/samples/instancing.usda +layer: $DIR/lookdev.usda +lights: 2 +light 0: area name Some("/World/Key") lpe None pmf 0.5 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 1: dome name Some("/World/Sky") lpe None pmf 0.5 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 13 geometries, PrimitiveBreakdown { triangles: 4, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 11 } top level, PrimitiveBreakdown { triangles: 36, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 11 } unique, motion false +geom 0: material #0 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:32b8fc7fab01f734 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=2:32b8fc7fab01f734 +geom 1: material #1 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:58d360c7905fa0c5 camera=2:58d360c7905fa0c5 shadow=2:58d360c7905fa0c5 indirect=2:58d360c7905fa0c5 +geom 2: material #2 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.2599211 motion [] pieces all=8:cb8213f19e1889e5 camera=8:cb8213f19e1889e5 shadow=8:cb8213f19e1889e5 indirect=8:cb8213f19e1889e5 +geom 3: material #2 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0079368 motion [] pieces all=8:9f690ca55fcd34b1 camera=8:9f690ca55fcd34b1 shadow=8:9f690ca55fcd34b1 indirect=8:9f690ca55fcd34b1 +geom 4: material #2 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.6378974 motion [] pieces all=8:bf00f68921a1ff6d camera=8:bf00f68921a1ff6d shadow=8:bf00f68921a1ff6d indirect=8:bf00f68921a1ff6d +geom 5: material #2 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.1370313 motion [] pieces all=8:d86fbb7901e66cf5 camera=8:d86fbb7901e66cf5 shadow=8:d86fbb7901e66cf5 indirect=8:d86fbb7901e66cf5 +geom 6: material #2 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.2962416 motion [] pieces all=8:100fb1034ea0bf45 camera=8:100fb1034ea0bf45 shadow=8:100fb1034ea0bf45 indirect=8:100fb1034ea0bf45 +geom 7: material #2 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.7958115 motion [] pieces all=12:01961e1714f11539 camera=12:01961e1714f11539 shadow=12:01961e1714f11539 indirect=12:01961e1714f11539 +geom 8: material #3 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.7958115 motion [] pieces all=12:94d0d184098e3ffd camera=12:94d0d184098e3ffd shadow=12:94d0d184098e3ffd indirect=12:94d0d184098e3ffd +geom 9: material #2 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=12:d4ab18518f82edfd camera=12:d4ab18518f82edfd shadow=12:d4ab18518f82edfd indirect=12:d4ab18518f82edfd +geom 10: material #3 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=12:83f43ac124235a31 camera=12:83f43ac124235a31 shadow=12:83f43ac124235a31 indirect=12:83f43ac124235a31 +geom 11: material #2 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=12:295cfa9554179a8d camera=12:295cfa9554179a8d shadow=12:295cfa9554179a8d indirect=12:295cfa9554179a8d +geom 12: material #3 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=12:3ea47e28253b632d camera=12:3ea47e28253b632d shadow=12:3ea47e28253b632d indirect=12:3ea47e28253b632d +provenance material /World/Looks/Copper: MaterialOrigin { slots: [8, 10, 12], displaced: false } +provenance material /World/Looks/Emerald: MaterialOrigin { slots: [2, 3, 4, 5, 6, 7, 9, 11], displaced: false } +provenance material /World/Looks/Grey: MaterialOrigin { slots: [1], displaced: false } +provenance arc source: /World/Scatter/Protos/Gem +provenance arc source: /World/_Tower +provenance light /World/Key: LightOrigin { index: 0, geoms: 0..1 } +provenance light /World/Sky: LightOrigin { index: 1, geoms: 13..13 } +provenance geometry 0..1: /World/Key +provenance geometry 1..2: /World/Floor +provenance geometry 2..7: /World/Scatter +provenance geometry 7..9: /World/TowerC +provenance geometry 9..11: /World/TowerB +provenance geometry 11..13: /World/TowerA +provenance mesh: MeshOrigin { geom_id: 1, slot: 0, baked: true, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 6334356113930313994, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 1: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 6822106956337694752, n_points: 6, n_indices: 24, n_uvs: None, smooth: false, material: 1 }), placements: 0, shared: true, displaced: false } +provenance mesh slot 2: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 2005039782605831059, n_points: 8, n_indices: 24, n_uvs: None, smooth: false, material: 1 }), placements: 0, shared: true, displaced: false } +provenance mesh slot 3: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 2103454763208511752, n_points: 8, n_indices: 24, n_uvs: None, smooth: false, material: 2 }), placements: 0, shared: true, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: true }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/World/Cam"), cameras: ["/World/Cam"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/World/Cam"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/lookdev_usda-889e2ebeaf6f6f43-1.image b/crates/crust-core/tests/data/import_baselines/lookdev_usda-889e2ebeaf6f6f43-1.image new file mode 100644 index 000000000..7bccda95e --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/lookdev_usda-889e2ebeaf6f6f43-1.image @@ -0,0 +1 @@ +480x270 16spp clamp-off f5b219db6d0d9155 diff --git a/crates/crust-core/tests/data/import_baselines/lookdev_usda-8bccb97f1cea35ce-1.digest b/crates/crust-core/tests/data/import_baselines/lookdev_usda-8bccb97f1cea35ce-1.digest new file mode 100644 index 000000000..2e4648805 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/lookdev_usda-8bccb97f1cea35ce-1.digest @@ -0,0 +1,35 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/World/Cam") +camera: Camera { origin: Vec3A(0.0, 1.0, 6.0), lower_left_corner: Vec3A(-4.7783756, -2.1855836, -4.0), horizontal: Vec3A(9.556751, 0.0, 0.0), vertical: Vec3A(0.0, 6.371167, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: Some("/Render/settings") +settings: RenderSettings { samples_per_pixel: 128, max_depth: 4, width: 48, height: 32, region: PixelRect { x0: 0, y0: 0, x1: 48, y1: 32 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 24.0, aperture: [20.955, 15.2908], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 10.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/lookdev.usda", "$DIR/shot.usda", "$DIR/lights.usda"], invisible_overrides: Some(0) } +layer: $DIR/lights.usda +layer: $DIR/lookdev.usda +layer: $DIR/pay.usda +layer: $DIR/prop.usda +layer: $DIR/shot.usda +lights: 2 +light 0: dome name Some("/World/Sky") lpe None pmf 0.5 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 1: area name Some("/World/Key") lpe None pmf 0.5 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 3 geometries, PrimitiveBreakdown { triangles: 2, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 2 } top level, PrimitiveBreakdown { triangles: 4, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 2 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:6f550ecd4f901d05 camera=2:6f550ecd4f901d05 shadow=2:6f550ecd4f901d05 indirect=2:6f550ecd4f901d05 +geom 1: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:6f550ecd4f901d05 camera=2:6f550ecd4f901d05 shadow=2:6f550ecd4f901d05 indirect=2:6f550ecd4f901d05 +geom 2: material #1 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:7812e24c7b4d4335 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=2:7812e24c7b4d4335 +provenance arc source: /Pay +provenance arc source: /Prop +provenance light /World/Key: LightOrigin { index: 1, geoms: 2..3 } +provenance light /World/Sky: LightOrigin { index: 0, geoms: 2..2 } +provenance geometry 0..1: /World/Heavy +provenance geometry 1..2: /World/Prop +provenance geometry 2..3: /World/Key +provenance mesh: MeshOrigin { geom_id: 0, slot: 0, baked: false, moving: false } +provenance mesh: MeshOrigin { geom_id: 1, slot: 0, baked: false, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 6610719295604273699, n_points: 4, n_indices: 4, n_uvs: None, smooth: true, material: 0 }), placements: 2, shared: false, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: true }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/World/Cam"), cameras: ["/World/Cam"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/World/Cam"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/lookdev_usda-8bccb97f1cea35ce-1.image b/crates/crust-core/tests/data/import_baselines/lookdev_usda-8bccb97f1cea35ce-1.image new file mode 100644 index 000000000..afc2d921e --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/lookdev_usda-8bccb97f1cea35ce-1.image @@ -0,0 +1 @@ +48x32 16spp clamp-off 2caa34772f5d6a86 diff --git a/crates/crust-core/tests/data/import_baselines/lookdev_usda-8bccb97f1cea35ce-2.digest b/crates/crust-core/tests/data/import_baselines/lookdev_usda-8bccb97f1cea35ce-2.digest new file mode 100644 index 000000000..2e4648805 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/lookdev_usda-8bccb97f1cea35ce-2.digest @@ -0,0 +1,35 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/World/Cam") +camera: Camera { origin: Vec3A(0.0, 1.0, 6.0), lower_left_corner: Vec3A(-4.7783756, -2.1855836, -4.0), horizontal: Vec3A(9.556751, 0.0, 0.0), vertical: Vec3A(0.0, 6.371167, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: Some("/Render/settings") +settings: RenderSettings { samples_per_pixel: 128, max_depth: 4, width: 48, height: 32, region: PixelRect { x0: 0, y0: 0, x1: 48, y1: 32 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 24.0, aperture: [20.955, 15.2908], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 10.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/lookdev.usda", "$DIR/shot.usda", "$DIR/lights.usda"], invisible_overrides: Some(0) } +layer: $DIR/lights.usda +layer: $DIR/lookdev.usda +layer: $DIR/pay.usda +layer: $DIR/prop.usda +layer: $DIR/shot.usda +lights: 2 +light 0: dome name Some("/World/Sky") lpe None pmf 0.5 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 1: area name Some("/World/Key") lpe None pmf 0.5 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 3 geometries, PrimitiveBreakdown { triangles: 2, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 2 } top level, PrimitiveBreakdown { triangles: 4, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 2 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:6f550ecd4f901d05 camera=2:6f550ecd4f901d05 shadow=2:6f550ecd4f901d05 indirect=2:6f550ecd4f901d05 +geom 1: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:6f550ecd4f901d05 camera=2:6f550ecd4f901d05 shadow=2:6f550ecd4f901d05 indirect=2:6f550ecd4f901d05 +geom 2: material #1 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:7812e24c7b4d4335 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=2:7812e24c7b4d4335 +provenance arc source: /Pay +provenance arc source: /Prop +provenance light /World/Key: LightOrigin { index: 1, geoms: 2..3 } +provenance light /World/Sky: LightOrigin { index: 0, geoms: 2..2 } +provenance geometry 0..1: /World/Heavy +provenance geometry 1..2: /World/Prop +provenance geometry 2..3: /World/Key +provenance mesh: MeshOrigin { geom_id: 0, slot: 0, baked: false, moving: false } +provenance mesh: MeshOrigin { geom_id: 1, slot: 0, baked: false, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 6610719295604273699, n_points: 4, n_indices: 4, n_uvs: None, smooth: true, material: 0 }), placements: 2, shared: false, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: true }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/World/Cam"), cameras: ["/World/Cam"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/World/Cam"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/lookdev_usda-8bccb97f1cea35ce-2.image b/crates/crust-core/tests/data/import_baselines/lookdev_usda-8bccb97f1cea35ce-2.image new file mode 100644 index 000000000..afc2d921e --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/lookdev_usda-8bccb97f1cea35ce-2.image @@ -0,0 +1 @@ +48x32 16spp clamp-off 2caa34772f5d6a86 diff --git a/crates/crust-core/tests/data/import_baselines/lookdev_usda-8e1d5d176c63c934-1.digest b/crates/crust-core/tests/data/import_baselines/lookdev_usda-8e1d5d176c63c934-1.digest new file mode 100644 index 000000000..ba4d3bc16 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/lookdev_usda-8e1d5d176c63c934-1.digest @@ -0,0 +1,41 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/World/Cam") +camera: Camera { origin: Vec3A(0.0, 1.0, 6.0), lower_left_corner: Vec3A(-4.7783756, -2.1855836, -4.0), horizontal: Vec3A(9.556751, 0.0, 0.0), vertical: Vec3A(0.0, 6.371167, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: Some("/Render/settings") +settings: RenderSettings { samples_per_pixel: 128, max_depth: 4, width: 48, height: 32, region: PixelRect { x0: 0, y0: 0, x1: 48, y1: 32 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 24.0, aperture: [20.955, 15.2908], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 10.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/lookdev.usda", "$DIR/stage.usda"], invisible_overrides: Some(0) } +layer: $DIR/lookdev.usda +layer: $DIR/stage.usda +lights: 2 +light 0: area name Some("/World/Key") lpe None pmf 0.5 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 1: dome name Some("/World/Sky") lpe None pmf 0.5 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 5 geometries, PrimitiveBreakdown { triangles: 4, spheres: 3, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 4, spheres: 3, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +geom 0: material #0 Signature { kind: "MaterialX", cutout: false, straight: false, boundary: false, emits: false, uv: true, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:ba01d90e2cc0d4f5 camera=1:ba01d90e2cc0d4f5 shadow=1:ba01d90e2cc0d4f5 indirect=1:ba01d90e2cc0d4f5 +geom 1: material #1 Signature { kind: "MaterialX", cutout: false, straight: false, boundary: false, emits: false, uv: true, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:910eeb9b40238145 camera=1:910eeb9b40238145 shadow=1:910eeb9b40238145 indirect=1:910eeb9b40238145 +geom 2: material #2 Signature { kind: "MaterialX", cutout: false, straight: false, boundary: false, emits: false, uv: true, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:ee76fd7ed45c4a85 camera=1:ee76fd7ed45c4a85 shadow=1:ee76fd7ed45c4a85 indirect=1:ee76fd7ed45c4a85 +geom 3: material #3 Signature { kind: "UsdPreviewSurface (textured)", cutout: false, straight: false, boundary: false, emits: false, uv: true, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv Some(0) shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:6787da8eacebee45 camera=2:6787da8eacebee45 shadow=2:6787da8eacebee45 indirect=2:6787da8eacebee45 +geom 4: material #4 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:7812e24c7b4d4335 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=2:7812e24c7b4d4335 +provenance material /World/Looks/Base: MaterialOrigin { slots: [1], displaced: false } +provenance material /World/Looks/Derived: MaterialOrigin { slots: [0], displaced: false } +provenance material /World/Looks/Std: MaterialOrigin { slots: [2], displaced: false } +provenance material /World/Looks/Tex: MaterialOrigin { slots: [3], displaced: false } +provenance material read: ("/World/Looks/Base", "/World/Looks/Derived") +provenance material read: ("/World/Looks/Base/Surface", "/World/Looks/Derived") +provenance arc source: /World/Looks/Base +provenance arc source: /World/Looks/Base/Surface +provenance light /World/Key: LightOrigin { index: 0, geoms: 4..5 } +provenance light /World/Sky: LightOrigin { index: 1, geoms: 5..5 } +provenance geometry 0..1: /World/Right +provenance geometry 1..2: /World/Left +provenance geometry 2..3: /World/Ball +provenance geometry 3..4: /World/Floor +provenance geometry 4..5: /World/Key +provenance mesh: MeshOrigin { geom_id: 3, slot: 0, baked: true, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 9851181043634021438, n_points: 4, n_indices: 4, n_uvs: Some(4), smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [0, 1, 2] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: true }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/World/Cam"), cameras: ["/World/Cam"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/World/Cam"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/lookdev_usda-8e1d5d176c63c934-1.image b/crates/crust-core/tests/data/import_baselines/lookdev_usda-8e1d5d176c63c934-1.image new file mode 100644 index 000000000..11828d811 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/lookdev_usda-8e1d5d176c63c934-1.image @@ -0,0 +1 @@ +48x32 16spp clamp-off a22f3882aa730ddf diff --git a/crates/crust-core/tests/data/import_baselines/lookdev_usda-96a10d1a1b799db6-1.digest b/crates/crust-core/tests/data/import_baselines/lookdev_usda-96a10d1a1b799db6-1.digest new file mode 100644 index 000000000..ba4d3bc16 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/lookdev_usda-96a10d1a1b799db6-1.digest @@ -0,0 +1,41 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/World/Cam") +camera: Camera { origin: Vec3A(0.0, 1.0, 6.0), lower_left_corner: Vec3A(-4.7783756, -2.1855836, -4.0), horizontal: Vec3A(9.556751, 0.0, 0.0), vertical: Vec3A(0.0, 6.371167, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: Some("/Render/settings") +settings: RenderSettings { samples_per_pixel: 128, max_depth: 4, width: 48, height: 32, region: PixelRect { x0: 0, y0: 0, x1: 48, y1: 32 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 24.0, aperture: [20.955, 15.2908], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 10.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/lookdev.usda", "$DIR/stage.usda"], invisible_overrides: Some(0) } +layer: $DIR/lookdev.usda +layer: $DIR/stage.usda +lights: 2 +light 0: area name Some("/World/Key") lpe None pmf 0.5 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 1: dome name Some("/World/Sky") lpe None pmf 0.5 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 5 geometries, PrimitiveBreakdown { triangles: 4, spheres: 3, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 4, spheres: 3, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +geom 0: material #0 Signature { kind: "MaterialX", cutout: false, straight: false, boundary: false, emits: false, uv: true, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:ba01d90e2cc0d4f5 camera=1:ba01d90e2cc0d4f5 shadow=1:ba01d90e2cc0d4f5 indirect=1:ba01d90e2cc0d4f5 +geom 1: material #1 Signature { kind: "MaterialX", cutout: false, straight: false, boundary: false, emits: false, uv: true, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:910eeb9b40238145 camera=1:910eeb9b40238145 shadow=1:910eeb9b40238145 indirect=1:910eeb9b40238145 +geom 2: material #2 Signature { kind: "MaterialX", cutout: false, straight: false, boundary: false, emits: false, uv: true, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:ee76fd7ed45c4a85 camera=1:ee76fd7ed45c4a85 shadow=1:ee76fd7ed45c4a85 indirect=1:ee76fd7ed45c4a85 +geom 3: material #3 Signature { kind: "UsdPreviewSurface (textured)", cutout: false, straight: false, boundary: false, emits: false, uv: true, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv Some(0) shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:6787da8eacebee45 camera=2:6787da8eacebee45 shadow=2:6787da8eacebee45 indirect=2:6787da8eacebee45 +geom 4: material #4 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:7812e24c7b4d4335 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=2:7812e24c7b4d4335 +provenance material /World/Looks/Base: MaterialOrigin { slots: [1], displaced: false } +provenance material /World/Looks/Derived: MaterialOrigin { slots: [0], displaced: false } +provenance material /World/Looks/Std: MaterialOrigin { slots: [2], displaced: false } +provenance material /World/Looks/Tex: MaterialOrigin { slots: [3], displaced: false } +provenance material read: ("/World/Looks/Base", "/World/Looks/Derived") +provenance material read: ("/World/Looks/Base/Surface", "/World/Looks/Derived") +provenance arc source: /World/Looks/Base +provenance arc source: /World/Looks/Base/Surface +provenance light /World/Key: LightOrigin { index: 0, geoms: 4..5 } +provenance light /World/Sky: LightOrigin { index: 1, geoms: 5..5 } +provenance geometry 0..1: /World/Right +provenance geometry 1..2: /World/Left +provenance geometry 2..3: /World/Ball +provenance geometry 3..4: /World/Floor +provenance geometry 4..5: /World/Key +provenance mesh: MeshOrigin { geom_id: 3, slot: 0, baked: true, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 9851181043634021438, n_points: 4, n_indices: 4, n_uvs: Some(4), smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [0, 1, 2] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: true }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/World/Cam"), cameras: ["/World/Cam"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/World/Cam"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/lookdev_usda-96a10d1a1b799db6-1.image b/crates/crust-core/tests/data/import_baselines/lookdev_usda-96a10d1a1b799db6-1.image new file mode 100644 index 000000000..4b9a46633 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/lookdev_usda-96a10d1a1b799db6-1.image @@ -0,0 +1 @@ +48x32 16spp clamp-off 878a44fd0e7d2b84 diff --git a/crates/crust-core/tests/data/import_baselines/lookdev_usda-96b32b9e68a1ec9a-1.digest b/crates/crust-core/tests/data/import_baselines/lookdev_usda-96b32b9e68a1ec9a-1.digest new file mode 100644 index 000000000..ba4d3bc16 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/lookdev_usda-96b32b9e68a1ec9a-1.digest @@ -0,0 +1,41 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/World/Cam") +camera: Camera { origin: Vec3A(0.0, 1.0, 6.0), lower_left_corner: Vec3A(-4.7783756, -2.1855836, -4.0), horizontal: Vec3A(9.556751, 0.0, 0.0), vertical: Vec3A(0.0, 6.371167, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: Some("/Render/settings") +settings: RenderSettings { samples_per_pixel: 128, max_depth: 4, width: 48, height: 32, region: PixelRect { x0: 0, y0: 0, x1: 48, y1: 32 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 24.0, aperture: [20.955, 15.2908], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 10.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/lookdev.usda", "$DIR/stage.usda"], invisible_overrides: Some(0) } +layer: $DIR/lookdev.usda +layer: $DIR/stage.usda +lights: 2 +light 0: area name Some("/World/Key") lpe None pmf 0.5 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 1: dome name Some("/World/Sky") lpe None pmf 0.5 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 5 geometries, PrimitiveBreakdown { triangles: 4, spheres: 3, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 4, spheres: 3, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +geom 0: material #0 Signature { kind: "MaterialX", cutout: false, straight: false, boundary: false, emits: false, uv: true, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:ba01d90e2cc0d4f5 camera=1:ba01d90e2cc0d4f5 shadow=1:ba01d90e2cc0d4f5 indirect=1:ba01d90e2cc0d4f5 +geom 1: material #1 Signature { kind: "MaterialX", cutout: false, straight: false, boundary: false, emits: false, uv: true, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:910eeb9b40238145 camera=1:910eeb9b40238145 shadow=1:910eeb9b40238145 indirect=1:910eeb9b40238145 +geom 2: material #2 Signature { kind: "MaterialX", cutout: false, straight: false, boundary: false, emits: false, uv: true, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:ee76fd7ed45c4a85 camera=1:ee76fd7ed45c4a85 shadow=1:ee76fd7ed45c4a85 indirect=1:ee76fd7ed45c4a85 +geom 3: material #3 Signature { kind: "UsdPreviewSurface (textured)", cutout: false, straight: false, boundary: false, emits: false, uv: true, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv Some(0) shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:6787da8eacebee45 camera=2:6787da8eacebee45 shadow=2:6787da8eacebee45 indirect=2:6787da8eacebee45 +geom 4: material #4 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:7812e24c7b4d4335 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=2:7812e24c7b4d4335 +provenance material /World/Looks/Base: MaterialOrigin { slots: [1], displaced: false } +provenance material /World/Looks/Derived: MaterialOrigin { slots: [0], displaced: false } +provenance material /World/Looks/Std: MaterialOrigin { slots: [2], displaced: false } +provenance material /World/Looks/Tex: MaterialOrigin { slots: [3], displaced: false } +provenance material read: ("/World/Looks/Base", "/World/Looks/Derived") +provenance material read: ("/World/Looks/Base/Surface", "/World/Looks/Derived") +provenance arc source: /World/Looks/Base +provenance arc source: /World/Looks/Base/Surface +provenance light /World/Key: LightOrigin { index: 0, geoms: 4..5 } +provenance light /World/Sky: LightOrigin { index: 1, geoms: 5..5 } +provenance geometry 0..1: /World/Right +provenance geometry 1..2: /World/Left +provenance geometry 2..3: /World/Ball +provenance geometry 3..4: /World/Floor +provenance geometry 4..5: /World/Key +provenance mesh: MeshOrigin { geom_id: 3, slot: 0, baked: true, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 9851181043634021438, n_points: 4, n_indices: 4, n_uvs: Some(4), smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [0, 1, 2] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: true }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/World/Cam"), cameras: ["/World/Cam"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/World/Cam"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/lookdev_usda-96b32b9e68a1ec9a-1.image b/crates/crust-core/tests/data/import_baselines/lookdev_usda-96b32b9e68a1ec9a-1.image new file mode 100644 index 000000000..11828d811 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/lookdev_usda-96b32b9e68a1ec9a-1.image @@ -0,0 +1 @@ +48x32 16spp clamp-off a22f3882aa730ddf diff --git a/crates/crust-core/tests/data/import_baselines/lookdev_usda-9b73e2f3385f85a2-1.digest b/crates/crust-core/tests/data/import_baselines/lookdev_usda-9b73e2f3385f85a2-1.digest new file mode 100644 index 000000000..2e4648805 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/lookdev_usda-9b73e2f3385f85a2-1.digest @@ -0,0 +1,35 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/World/Cam") +camera: Camera { origin: Vec3A(0.0, 1.0, 6.0), lower_left_corner: Vec3A(-4.7783756, -2.1855836, -4.0), horizontal: Vec3A(9.556751, 0.0, 0.0), vertical: Vec3A(0.0, 6.371167, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: Some("/Render/settings") +settings: RenderSettings { samples_per_pixel: 128, max_depth: 4, width: 48, height: 32, region: PixelRect { x0: 0, y0: 0, x1: 48, y1: 32 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 24.0, aperture: [20.955, 15.2908], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 10.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/lookdev.usda", "$DIR/shot.usda", "$DIR/lights.usda"], invisible_overrides: Some(0) } +layer: $DIR/lights.usda +layer: $DIR/lookdev.usda +layer: $DIR/pay.usda +layer: $DIR/prop.usda +layer: $DIR/shot.usda +lights: 2 +light 0: dome name Some("/World/Sky") lpe None pmf 0.5 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 1: area name Some("/World/Key") lpe None pmf 0.5 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 3 geometries, PrimitiveBreakdown { triangles: 2, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 2 } top level, PrimitiveBreakdown { triangles: 4, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 2 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:6f550ecd4f901d05 camera=2:6f550ecd4f901d05 shadow=2:6f550ecd4f901d05 indirect=2:6f550ecd4f901d05 +geom 1: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:6f550ecd4f901d05 camera=2:6f550ecd4f901d05 shadow=2:6f550ecd4f901d05 indirect=2:6f550ecd4f901d05 +geom 2: material #1 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:7812e24c7b4d4335 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=2:7812e24c7b4d4335 +provenance arc source: /Pay +provenance arc source: /Prop +provenance light /World/Key: LightOrigin { index: 1, geoms: 2..3 } +provenance light /World/Sky: LightOrigin { index: 0, geoms: 2..2 } +provenance geometry 0..1: /World/Heavy +provenance geometry 1..2: /World/Prop +provenance geometry 2..3: /World/Key +provenance mesh: MeshOrigin { geom_id: 0, slot: 0, baked: false, moving: false } +provenance mesh: MeshOrigin { geom_id: 1, slot: 0, baked: false, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 6610719295604273699, n_points: 4, n_indices: 4, n_uvs: None, smooth: true, material: 0 }), placements: 2, shared: false, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: true }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/World/Cam"), cameras: ["/World/Cam"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/World/Cam"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/lookdev_usda-9b73e2f3385f85a2-1.image b/crates/crust-core/tests/data/import_baselines/lookdev_usda-9b73e2f3385f85a2-1.image new file mode 100644 index 000000000..afc2d921e --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/lookdev_usda-9b73e2f3385f85a2-1.image @@ -0,0 +1 @@ +48x32 16spp clamp-off 2caa34772f5d6a86 diff --git a/crates/crust-core/tests/data/import_baselines/lookdev_usda-a96810dec00d46d8-1.digest b/crates/crust-core/tests/data/import_baselines/lookdev_usda-a96810dec00d46d8-1.digest new file mode 100644 index 000000000..a8c9bc6ae --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/lookdev_usda-a96810dec00d46d8-1.digest @@ -0,0 +1,40 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/World/Cam") +camera: Camera { origin: Vec3A(0.0, 1.0, 6.0), lower_left_corner: Vec3A(-4.7783756, -2.1855836, -4.0), horizontal: Vec3A(9.556751, 0.0, 0.0), vertical: Vec3A(0.0, 6.371167, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: Some("/Render/settings") +settings: RenderSettings { samples_per_pixel: 128, max_depth: 4, width: 48, height: 32, region: PixelRect { x0: 0, y0: 0, x1: 48, y1: 32 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 24.0, aperture: [20.955, 15.2908], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 10.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/lookdev.usda", "$DIR/stage.usda"], invisible_overrides: Some(0) } +layer: $DIR/lookdev.usda +layer: $DIR/stage.usda +lights: 2 +light 0: area name Some("/World/Key") lpe None pmf 0.5 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 1: dome name Some("/World/Sky") lpe None pmf 0.5 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 5 geometries, PrimitiveBreakdown { triangles: 4, spheres: 3, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 4, spheres: 3, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +geom 0: material #0 Signature { kind: "MaterialX", cutout: false, straight: false, boundary: false, emits: false, uv: true, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:ba01d90e2cc0d4f5 camera=1:ba01d90e2cc0d4f5 shadow=1:ba01d90e2cc0d4f5 indirect=1:ba01d90e2cc0d4f5 +geom 1: material #1 Signature { kind: "MaterialX", cutout: false, straight: false, boundary: false, emits: false, uv: true, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:910eeb9b40238145 camera=1:910eeb9b40238145 shadow=1:910eeb9b40238145 indirect=1:910eeb9b40238145 +geom 2: material #2 Signature { kind: "UsdPreviewSurface (textured)", cutout: false, straight: false, boundary: false, emits: false, uv: true, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:ee76fd7ed45c4a85 camera=1:ee76fd7ed45c4a85 shadow=1:ee76fd7ed45c4a85 indirect=1:ee76fd7ed45c4a85 +geom 3: material #2 Signature { kind: "UsdPreviewSurface (textured)", cutout: false, straight: false, boundary: false, emits: false, uv: true, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv Some(0) shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:6787da8eacebee45 camera=2:6787da8eacebee45 shadow=2:6787da8eacebee45 indirect=2:6787da8eacebee45 +geom 4: material #3 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:7812e24c7b4d4335 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=2:7812e24c7b4d4335 +provenance material /World/Looks/Base: MaterialOrigin { slots: [1], displaced: false } +provenance material /World/Looks/Derived: MaterialOrigin { slots: [0], displaced: false } +provenance material /World/Looks/Tex: MaterialOrigin { slots: [2, 3], displaced: false } +provenance material read: ("/World/Looks/Base", "/World/Looks/Derived") +provenance material read: ("/World/Looks/Base/Surface", "/World/Looks/Derived") +provenance arc source: /World/Looks/Base +provenance arc source: /World/Looks/Base/Surface +provenance light /World/Key: LightOrigin { index: 0, geoms: 4..5 } +provenance light /World/Sky: LightOrigin { index: 1, geoms: 5..5 } +provenance geometry 0..1: /World/Right +provenance geometry 1..2: /World/Left +provenance geometry 2..3: /World/Ball +provenance geometry 3..4: /World/Floor +provenance geometry 4..5: /World/Key +provenance mesh: MeshOrigin { geom_id: 3, slot: 0, baked: true, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 9851181043634021438, n_points: 4, n_indices: 4, n_uvs: Some(4), smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [0, 1, 2] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: true }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/World/Cam"), cameras: ["/World/Cam"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/World/Cam"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/lookdev_usda-a96810dec00d46d8-1.image b/crates/crust-core/tests/data/import_baselines/lookdev_usda-a96810dec00d46d8-1.image new file mode 100644 index 000000000..84d1067ee --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/lookdev_usda-a96810dec00d46d8-1.image @@ -0,0 +1 @@ +48x32 16spp clamp-off 5a2933f6e5a6c553 diff --git a/crates/crust-core/tests/data/import_baselines/lookdev_usda-ad6a0ecf2cf3c658-1.digest b/crates/crust-core/tests/data/import_baselines/lookdev_usda-ad6a0ecf2cf3c658-1.digest new file mode 100644 index 000000000..a832226e6 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/lookdev_usda-ad6a0ecf2cf3c658-1.digest @@ -0,0 +1,41 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/World/Cam") +camera: Camera { origin: Vec3A(0.0, 1.0, 6.0), lower_left_corner: Vec3A(-4.7783756, -2.1855836, -4.0), horizontal: Vec3A(9.556751, 0.0, 0.0), vertical: Vec3A(0.0, 6.371167, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: Some("/Render/settings") +settings: RenderSettings { samples_per_pixel: 128, max_depth: 4, width: 48, height: 32, region: PixelRect { x0: 0, y0: 0, x1: 48, y1: 32 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 24.0, aperture: [20.955, 15.2908], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 10.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/lookdev.usda", "$DIR/stage.usda"], invisible_overrides: Some(0) } +layer: $DIR/lookdev.usda +layer: $DIR/stage.usda +lights: 2 +light 0: area name Some("/World/Key") lpe None pmf 0.5 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 1: dome name Some("/World/Sky") lpe None pmf 0.5 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 5 geometries, PrimitiveBreakdown { triangles: 4, spheres: 3, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 4, spheres: 3, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +geom 0: material #0 Signature { kind: "MaterialX", cutout: false, straight: false, boundary: false, emits: false, uv: true, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:ba01d90e2cc0d4f5 camera=1:ba01d90e2cc0d4f5 shadow=1:ba01d90e2cc0d4f5 indirect=1:ba01d90e2cc0d4f5 +geom 1: material #1 Signature { kind: "MaterialX", cutout: false, straight: false, boundary: false, emits: false, uv: true, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:910eeb9b40238145 camera=1:910eeb9b40238145 shadow=1:910eeb9b40238145 indirect=1:910eeb9b40238145 +geom 2: material #2 Signature { kind: "MaterialX", cutout: false, straight: false, boundary: false, emits: true, uv: true, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:ee76fd7ed45c4a85 camera=1:ee76fd7ed45c4a85 shadow=1:ee76fd7ed45c4a85 indirect=1:ee76fd7ed45c4a85 +geom 3: material #3 Signature { kind: "UsdPreviewSurface (textured)", cutout: false, straight: false, boundary: false, emits: false, uv: true, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv Some(0) shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:6787da8eacebee45 camera=2:6787da8eacebee45 shadow=2:6787da8eacebee45 indirect=2:6787da8eacebee45 +geom 4: material #4 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:7812e24c7b4d4335 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=2:7812e24c7b4d4335 +provenance material /World/Looks/Base: MaterialOrigin { slots: [1], displaced: false } +provenance material /World/Looks/Derived: MaterialOrigin { slots: [0], displaced: false } +provenance material /World/Looks/Std: MaterialOrigin { slots: [2], displaced: false } +provenance material /World/Looks/Tex: MaterialOrigin { slots: [3], displaced: false } +provenance material read: ("/World/Looks/Base", "/World/Looks/Derived") +provenance material read: ("/World/Looks/Base/Surface", "/World/Looks/Derived") +provenance arc source: /World/Looks/Base +provenance arc source: /World/Looks/Base/Surface +provenance light /World/Key: LightOrigin { index: 0, geoms: 4..5 } +provenance light /World/Sky: LightOrigin { index: 1, geoms: 5..5 } +provenance geometry 0..1: /World/Right +provenance geometry 1..2: /World/Left +provenance geometry 2..3: /World/Ball +provenance geometry 3..4: /World/Floor +provenance geometry 4..5: /World/Key +provenance mesh: MeshOrigin { geom_id: 3, slot: 0, baked: true, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 9851181043634021438, n_points: 4, n_indices: 4, n_uvs: Some(4), smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [0, 1, 2] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: true }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/World/Cam"), cameras: ["/World/Cam"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/World/Cam"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/lookdev_usda-ad6a0ecf2cf3c658-1.image b/crates/crust-core/tests/data/import_baselines/lookdev_usda-ad6a0ecf2cf3c658-1.image new file mode 100644 index 000000000..317a333b8 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/lookdev_usda-ad6a0ecf2cf3c658-1.image @@ -0,0 +1 @@ +48x32 16spp clamp-off 19468fbea2a3acfc diff --git a/crates/crust-core/tests/data/import_baselines/lookdev_usda-b139810cbe0eac4c-1.digest b/crates/crust-core/tests/data/import_baselines/lookdev_usda-b139810cbe0eac4c-1.digest new file mode 100644 index 000000000..2e4648805 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/lookdev_usda-b139810cbe0eac4c-1.digest @@ -0,0 +1,35 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/World/Cam") +camera: Camera { origin: Vec3A(0.0, 1.0, 6.0), lower_left_corner: Vec3A(-4.7783756, -2.1855836, -4.0), horizontal: Vec3A(9.556751, 0.0, 0.0), vertical: Vec3A(0.0, 6.371167, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: Some("/Render/settings") +settings: RenderSettings { samples_per_pixel: 128, max_depth: 4, width: 48, height: 32, region: PixelRect { x0: 0, y0: 0, x1: 48, y1: 32 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 24.0, aperture: [20.955, 15.2908], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 10.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/lookdev.usda", "$DIR/shot.usda", "$DIR/lights.usda"], invisible_overrides: Some(0) } +layer: $DIR/lights.usda +layer: $DIR/lookdev.usda +layer: $DIR/pay.usda +layer: $DIR/prop.usda +layer: $DIR/shot.usda +lights: 2 +light 0: dome name Some("/World/Sky") lpe None pmf 0.5 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 1: area name Some("/World/Key") lpe None pmf 0.5 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 3 geometries, PrimitiveBreakdown { triangles: 2, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 2 } top level, PrimitiveBreakdown { triangles: 4, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 2 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:6f550ecd4f901d05 camera=2:6f550ecd4f901d05 shadow=2:6f550ecd4f901d05 indirect=2:6f550ecd4f901d05 +geom 1: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:6f550ecd4f901d05 camera=2:6f550ecd4f901d05 shadow=2:6f550ecd4f901d05 indirect=2:6f550ecd4f901d05 +geom 2: material #1 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:7812e24c7b4d4335 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=2:7812e24c7b4d4335 +provenance arc source: /Pay +provenance arc source: /Prop +provenance light /World/Key: LightOrigin { index: 1, geoms: 2..3 } +provenance light /World/Sky: LightOrigin { index: 0, geoms: 2..2 } +provenance geometry 0..1: /World/Heavy +provenance geometry 1..2: /World/Prop +provenance geometry 2..3: /World/Key +provenance mesh: MeshOrigin { geom_id: 0, slot: 0, baked: false, moving: false } +provenance mesh: MeshOrigin { geom_id: 1, slot: 0, baked: false, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 6610719295604273699, n_points: 4, n_indices: 4, n_uvs: None, smooth: true, material: 0 }), placements: 2, shared: false, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: true }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/World/Cam"), cameras: ["/World/Cam"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/World/Cam"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/lookdev_usda-b139810cbe0eac4c-1.image b/crates/crust-core/tests/data/import_baselines/lookdev_usda-b139810cbe0eac4c-1.image new file mode 100644 index 000000000..569cd2ee9 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/lookdev_usda-b139810cbe0eac4c-1.image @@ -0,0 +1 @@ +48x32 16spp clamp-off 0a5bf65444923e88 diff --git a/crates/crust-core/tests/data/import_baselines/lookdev_usda-b1d2ea509cf7ee23-1.digest b/crates/crust-core/tests/data/import_baselines/lookdev_usda-b1d2ea509cf7ee23-1.digest new file mode 100644 index 000000000..95022e327 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/lookdev_usda-b1d2ea509cf7ee23-1.digest @@ -0,0 +1,42 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/World/Cam") +camera: Camera { origin: Vec3A(0.0, 1.0, 6.0), lower_left_corner: Vec3A(-4.7783756, -2.1855836, -4.0), horizontal: Vec3A(9.556751, 0.0, 0.0), vertical: Vec3A(0.0, 6.371167, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: Some("/Render/settings") +settings: RenderSettings { samples_per_pixel: 128, max_depth: 4, width: 48, height: 32, region: PixelRect { x0: 0, y0: 0, x1: 48, y1: 32 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 24.0, aperture: [20.955, 15.2908], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 10.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/lookdev.usda", "$DIR/stage.usda"], invisible_overrides: Some(0) } +layer: $DIR/lookdev.usda +layer: $DIR/stage.usda +lights: 2 +light 0: area name Some("/World/Key") lpe None pmf 0.5 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 1: dome name Some("/World/Sky") lpe None pmf 0.5 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 6 geometries, PrimitiveBreakdown { triangles: 4, spheres: 4, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 4, spheres: 4, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:fb1e7d48790aec95 camera=1:fb1e7d48790aec95 shadow=1:fb1e7d48790aec95 indirect=1:fb1e7d48790aec95 +geom 1: material #1 Signature { kind: "MaterialX", cutout: false, straight: false, boundary: false, emits: false, uv: true, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:ba01d90e2cc0d4f5 camera=1:ba01d90e2cc0d4f5 shadow=1:ba01d90e2cc0d4f5 indirect=1:ba01d90e2cc0d4f5 +geom 2: material #2 Signature { kind: "MaterialX", cutout: false, straight: false, boundary: false, emits: false, uv: true, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:910eeb9b40238145 camera=1:910eeb9b40238145 shadow=1:910eeb9b40238145 indirect=1:910eeb9b40238145 +geom 3: material #3 Signature { kind: "UsdPreviewSurface (textured)", cutout: false, straight: false, boundary: false, emits: false, uv: true, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:ee76fd7ed45c4a85 camera=1:ee76fd7ed45c4a85 shadow=1:ee76fd7ed45c4a85 indirect=1:ee76fd7ed45c4a85 +geom 4: material #3 Signature { kind: "UsdPreviewSurface (textured)", cutout: false, straight: false, boundary: false, emits: false, uv: true, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv Some(0) shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:6787da8eacebee45 camera=2:6787da8eacebee45 shadow=2:6787da8eacebee45 indirect=2:6787da8eacebee45 +geom 5: material #4 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:7812e24c7b4d4335 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=2:7812e24c7b4d4335 +provenance material /World/Looks/Base: MaterialOrigin { slots: [2], displaced: false } +provenance material /World/Looks/Derived: MaterialOrigin { slots: [1], displaced: false } +provenance material /World/Looks/Tex: MaterialOrigin { slots: [3, 4], displaced: false } +provenance material read: ("/World/Looks/Base", "/World/Looks/Derived") +provenance material read: ("/World/Looks/Base/Surface", "/World/Looks/Derived") +provenance arc source: /World/Looks/Base +provenance arc source: /World/Looks/Base/Surface +provenance light /World/Key: LightOrigin { index: 0, geoms: 5..6 } +provenance light /World/Sky: LightOrigin { index: 1, geoms: 6..6 } +provenance geometry 0..1: /World/Other +provenance geometry 1..2: /World/Right +provenance geometry 2..3: /World/Left +provenance geometry 3..4: /World/Ball +provenance geometry 4..5: /World/Floor +provenance geometry 5..6: /World/Key +provenance mesh: MeshOrigin { geom_id: 4, slot: 0, baked: true, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 9851181043634021438, n_points: 4, n_indices: 4, n_uvs: Some(4), smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [0, 1, 2, 3] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: true }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/World/Cam"), cameras: ["/World/Cam"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/World/Cam"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/lookdev_usda-b1d2ea509cf7ee23-1.image b/crates/crust-core/tests/data/import_baselines/lookdev_usda-b1d2ea509cf7ee23-1.image new file mode 100644 index 000000000..17db6ed7e --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/lookdev_usda-b1d2ea509cf7ee23-1.image @@ -0,0 +1 @@ +48x32 16spp clamp-off 85590c18f0470a9c diff --git a/crates/crust-core/tests/data/import_baselines/lookdev_usda-b23ccdb4706d3d98-1.digest b/crates/crust-core/tests/data/import_baselines/lookdev_usda-b23ccdb4706d3d98-1.digest new file mode 100644 index 000000000..5b0096ff7 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/lookdev_usda-b23ccdb4706d3d98-1.digest @@ -0,0 +1,43 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/World/Cam") +camera: Camera { origin: Vec3A(0.0, 1.0, 6.0), lower_left_corner: Vec3A(-4.7783756, -2.1855836, -4.0), horizontal: Vec3A(9.556751, 0.0, 0.0), vertical: Vec3A(0.0, 6.371167, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: Some("/Render/settings") +settings: RenderSettings { samples_per_pixel: 128, max_depth: 4, width: 48, height: 32, region: PixelRect { x0: 0, y0: 0, x1: 48, y1: 32 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 24.0, aperture: [20.955, 15.2908], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 10.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/lookdev.usda", "$DIR/stage.usda"], invisible_overrides: Some(0) } +layer: $DIR/lookdev.usda +layer: $DIR/stage.usda +lights: 2 +light 0: area name Some("/World/Key") lpe None pmf 0.5 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 1: dome name Some("/World/Sky") lpe None pmf 0.5 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 6 geometries, PrimitiveBreakdown { triangles: 4, spheres: 4, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 4, spheres: 4, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:fb1e7d48790aec95 camera=1:fb1e7d48790aec95 shadow=1:fb1e7d48790aec95 indirect=1:fb1e7d48790aec95 +geom 1: material #1 Signature { kind: "MaterialX", cutout: false, straight: false, boundary: false, emits: false, uv: true, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:ba01d90e2cc0d4f5 camera=1:ba01d90e2cc0d4f5 shadow=1:ba01d90e2cc0d4f5 indirect=1:ba01d90e2cc0d4f5 +geom 2: material #2 Signature { kind: "MaterialX", cutout: false, straight: false, boundary: false, emits: false, uv: true, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:910eeb9b40238145 camera=1:910eeb9b40238145 shadow=1:910eeb9b40238145 indirect=1:910eeb9b40238145 +geom 3: material #3 Signature { kind: "MaterialX", cutout: false, straight: false, boundary: false, emits: true, uv: true, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:ee76fd7ed45c4a85 camera=1:ee76fd7ed45c4a85 shadow=1:ee76fd7ed45c4a85 indirect=1:ee76fd7ed45c4a85 +geom 4: material #4 Signature { kind: "UsdPreviewSurface (textured)", cutout: false, straight: false, boundary: false, emits: false, uv: true, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv Some(0) shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:6787da8eacebee45 camera=2:6787da8eacebee45 shadow=2:6787da8eacebee45 indirect=2:6787da8eacebee45 +geom 5: material #5 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:7812e24c7b4d4335 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=2:7812e24c7b4d4335 +provenance material /World/Looks/Base: MaterialOrigin { slots: [2], displaced: false } +provenance material /World/Looks/Derived: MaterialOrigin { slots: [1], displaced: false } +provenance material /World/Looks/Std: MaterialOrigin { slots: [3], displaced: false } +provenance material /World/Looks/Tex: MaterialOrigin { slots: [4], displaced: false } +provenance material read: ("/World/Looks/Base", "/World/Looks/Derived") +provenance material read: ("/World/Looks/Base/Surface", "/World/Looks/Derived") +provenance arc source: /World/Looks/Base +provenance arc source: /World/Looks/Base/Surface +provenance light /World/Key: LightOrigin { index: 0, geoms: 5..6 } +provenance light /World/Sky: LightOrigin { index: 1, geoms: 6..6 } +provenance geometry 0..1: /World/Other +provenance geometry 1..2: /World/Right +provenance geometry 2..3: /World/Left +provenance geometry 3..4: /World/Ball +provenance geometry 4..5: /World/Floor +provenance geometry 5..6: /World/Key +provenance mesh: MeshOrigin { geom_id: 4, slot: 0, baked: true, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 9851181043634021438, n_points: 4, n_indices: 4, n_uvs: Some(4), smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [0, 1, 2, 3] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: true }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/World/Cam"), cameras: ["/World/Cam"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/World/Cam"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/lookdev_usda-b23ccdb4706d3d98-1.image b/crates/crust-core/tests/data/import_baselines/lookdev_usda-b23ccdb4706d3d98-1.image new file mode 100644 index 000000000..a8f7340dc --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/lookdev_usda-b23ccdb4706d3d98-1.image @@ -0,0 +1 @@ +48x32 16spp clamp-off 28c076e202f42a8b diff --git a/crates/crust-core/tests/data/import_baselines/lookdev_usda-bdef936e454d02c5-1.digest b/crates/crust-core/tests/data/import_baselines/lookdev_usda-bdef936e454d02c5-1.digest new file mode 100644 index 000000000..ba4d3bc16 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/lookdev_usda-bdef936e454d02c5-1.digest @@ -0,0 +1,41 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/World/Cam") +camera: Camera { origin: Vec3A(0.0, 1.0, 6.0), lower_left_corner: Vec3A(-4.7783756, -2.1855836, -4.0), horizontal: Vec3A(9.556751, 0.0, 0.0), vertical: Vec3A(0.0, 6.371167, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: Some("/Render/settings") +settings: RenderSettings { samples_per_pixel: 128, max_depth: 4, width: 48, height: 32, region: PixelRect { x0: 0, y0: 0, x1: 48, y1: 32 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 24.0, aperture: [20.955, 15.2908], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 10.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/lookdev.usda", "$DIR/stage.usda"], invisible_overrides: Some(0) } +layer: $DIR/lookdev.usda +layer: $DIR/stage.usda +lights: 2 +light 0: area name Some("/World/Key") lpe None pmf 0.5 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 1: dome name Some("/World/Sky") lpe None pmf 0.5 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 5 geometries, PrimitiveBreakdown { triangles: 4, spheres: 3, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 4, spheres: 3, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +geom 0: material #0 Signature { kind: "MaterialX", cutout: false, straight: false, boundary: false, emits: false, uv: true, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:ba01d90e2cc0d4f5 camera=1:ba01d90e2cc0d4f5 shadow=1:ba01d90e2cc0d4f5 indirect=1:ba01d90e2cc0d4f5 +geom 1: material #1 Signature { kind: "MaterialX", cutout: false, straight: false, boundary: false, emits: false, uv: true, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:910eeb9b40238145 camera=1:910eeb9b40238145 shadow=1:910eeb9b40238145 indirect=1:910eeb9b40238145 +geom 2: material #2 Signature { kind: "MaterialX", cutout: false, straight: false, boundary: false, emits: false, uv: true, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:ee76fd7ed45c4a85 camera=1:ee76fd7ed45c4a85 shadow=1:ee76fd7ed45c4a85 indirect=1:ee76fd7ed45c4a85 +geom 3: material #3 Signature { kind: "UsdPreviewSurface (textured)", cutout: false, straight: false, boundary: false, emits: false, uv: true, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv Some(0) shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:6787da8eacebee45 camera=2:6787da8eacebee45 shadow=2:6787da8eacebee45 indirect=2:6787da8eacebee45 +geom 4: material #4 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:7812e24c7b4d4335 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=2:7812e24c7b4d4335 +provenance material /World/Looks/Base: MaterialOrigin { slots: [1], displaced: false } +provenance material /World/Looks/Derived: MaterialOrigin { slots: [0], displaced: false } +provenance material /World/Looks/Std: MaterialOrigin { slots: [2], displaced: false } +provenance material /World/Looks/Tex: MaterialOrigin { slots: [3], displaced: false } +provenance material read: ("/World/Looks/Base", "/World/Looks/Derived") +provenance material read: ("/World/Looks/Base/Surface", "/World/Looks/Derived") +provenance arc source: /World/Looks/Base +provenance arc source: /World/Looks/Base/Surface +provenance light /World/Key: LightOrigin { index: 0, geoms: 4..5 } +provenance light /World/Sky: LightOrigin { index: 1, geoms: 5..5 } +provenance geometry 0..1: /World/Right +provenance geometry 1..2: /World/Left +provenance geometry 2..3: /World/Ball +provenance geometry 3..4: /World/Floor +provenance geometry 4..5: /World/Key +provenance mesh: MeshOrigin { geom_id: 3, slot: 0, baked: true, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 9851181043634021438, n_points: 4, n_indices: 4, n_uvs: Some(4), smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [0, 1, 2] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: true }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/World/Cam"), cameras: ["/World/Cam"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/World/Cam"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/lookdev_usda-bdef936e454d02c5-1.image b/crates/crust-core/tests/data/import_baselines/lookdev_usda-bdef936e454d02c5-1.image new file mode 100644 index 000000000..11828d811 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/lookdev_usda-bdef936e454d02c5-1.image @@ -0,0 +1 @@ +48x32 16spp clamp-off a22f3882aa730ddf diff --git a/crates/crust-core/tests/data/import_baselines/lookdev_usda-c088c49aaf559905-1.digest b/crates/crust-core/tests/data/import_baselines/lookdev_usda-c088c49aaf559905-1.digest new file mode 100644 index 000000000..2e4648805 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/lookdev_usda-c088c49aaf559905-1.digest @@ -0,0 +1,35 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/World/Cam") +camera: Camera { origin: Vec3A(0.0, 1.0, 6.0), lower_left_corner: Vec3A(-4.7783756, -2.1855836, -4.0), horizontal: Vec3A(9.556751, 0.0, 0.0), vertical: Vec3A(0.0, 6.371167, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: Some("/Render/settings") +settings: RenderSettings { samples_per_pixel: 128, max_depth: 4, width: 48, height: 32, region: PixelRect { x0: 0, y0: 0, x1: 48, y1: 32 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 24.0, aperture: [20.955, 15.2908], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 10.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/lookdev.usda", "$DIR/shot.usda", "$DIR/lights.usda"], invisible_overrides: Some(0) } +layer: $DIR/lights.usda +layer: $DIR/lookdev.usda +layer: $DIR/pay.usda +layer: $DIR/prop.usda +layer: $DIR/shot.usda +lights: 2 +light 0: dome name Some("/World/Sky") lpe None pmf 0.5 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 1: area name Some("/World/Key") lpe None pmf 0.5 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 3 geometries, PrimitiveBreakdown { triangles: 2, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 2 } top level, PrimitiveBreakdown { triangles: 4, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 2 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:6f550ecd4f901d05 camera=2:6f550ecd4f901d05 shadow=2:6f550ecd4f901d05 indirect=2:6f550ecd4f901d05 +geom 1: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:6f550ecd4f901d05 camera=2:6f550ecd4f901d05 shadow=2:6f550ecd4f901d05 indirect=2:6f550ecd4f901d05 +geom 2: material #1 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:7812e24c7b4d4335 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=2:7812e24c7b4d4335 +provenance arc source: /Pay +provenance arc source: /Prop +provenance light /World/Key: LightOrigin { index: 1, geoms: 2..3 } +provenance light /World/Sky: LightOrigin { index: 0, geoms: 2..2 } +provenance geometry 0..1: /World/Heavy +provenance geometry 1..2: /World/Prop +provenance geometry 2..3: /World/Key +provenance mesh: MeshOrigin { geom_id: 0, slot: 0, baked: false, moving: false } +provenance mesh: MeshOrigin { geom_id: 1, slot: 0, baked: false, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 6610719295604273699, n_points: 4, n_indices: 4, n_uvs: None, smooth: true, material: 0 }), placements: 2, shared: false, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: true }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/World/Cam"), cameras: ["/World/Cam"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/World/Cam"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/lookdev_usda-c088c49aaf559905-1.image b/crates/crust-core/tests/data/import_baselines/lookdev_usda-c088c49aaf559905-1.image new file mode 100644 index 000000000..6fb80b80b --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/lookdev_usda-c088c49aaf559905-1.image @@ -0,0 +1 @@ +48x32 16spp clamp-off 3d7a4f12a4369faf diff --git a/crates/crust-core/tests/data/import_baselines/lookdev_usda-c8874f17309d40f1-1.digest b/crates/crust-core/tests/data/import_baselines/lookdev_usda-c8874f17309d40f1-1.digest new file mode 100644 index 000000000..ba4d3bc16 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/lookdev_usda-c8874f17309d40f1-1.digest @@ -0,0 +1,41 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/World/Cam") +camera: Camera { origin: Vec3A(0.0, 1.0, 6.0), lower_left_corner: Vec3A(-4.7783756, -2.1855836, -4.0), horizontal: Vec3A(9.556751, 0.0, 0.0), vertical: Vec3A(0.0, 6.371167, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: Some("/Render/settings") +settings: RenderSettings { samples_per_pixel: 128, max_depth: 4, width: 48, height: 32, region: PixelRect { x0: 0, y0: 0, x1: 48, y1: 32 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 24.0, aperture: [20.955, 15.2908], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 10.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/lookdev.usda", "$DIR/stage.usda"], invisible_overrides: Some(0) } +layer: $DIR/lookdev.usda +layer: $DIR/stage.usda +lights: 2 +light 0: area name Some("/World/Key") lpe None pmf 0.5 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 1: dome name Some("/World/Sky") lpe None pmf 0.5 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 5 geometries, PrimitiveBreakdown { triangles: 4, spheres: 3, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 4, spheres: 3, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +geom 0: material #0 Signature { kind: "MaterialX", cutout: false, straight: false, boundary: false, emits: false, uv: true, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:ba01d90e2cc0d4f5 camera=1:ba01d90e2cc0d4f5 shadow=1:ba01d90e2cc0d4f5 indirect=1:ba01d90e2cc0d4f5 +geom 1: material #1 Signature { kind: "MaterialX", cutout: false, straight: false, boundary: false, emits: false, uv: true, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:910eeb9b40238145 camera=1:910eeb9b40238145 shadow=1:910eeb9b40238145 indirect=1:910eeb9b40238145 +geom 2: material #2 Signature { kind: "MaterialX", cutout: false, straight: false, boundary: false, emits: false, uv: true, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:ee76fd7ed45c4a85 camera=1:ee76fd7ed45c4a85 shadow=1:ee76fd7ed45c4a85 indirect=1:ee76fd7ed45c4a85 +geom 3: material #3 Signature { kind: "UsdPreviewSurface (textured)", cutout: false, straight: false, boundary: false, emits: false, uv: true, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv Some(0) shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:6787da8eacebee45 camera=2:6787da8eacebee45 shadow=2:6787da8eacebee45 indirect=2:6787da8eacebee45 +geom 4: material #4 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:7812e24c7b4d4335 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=2:7812e24c7b4d4335 +provenance material /World/Looks/Base: MaterialOrigin { slots: [1], displaced: false } +provenance material /World/Looks/Derived: MaterialOrigin { slots: [0], displaced: false } +provenance material /World/Looks/Std: MaterialOrigin { slots: [2], displaced: false } +provenance material /World/Looks/Tex: MaterialOrigin { slots: [3], displaced: false } +provenance material read: ("/World/Looks/Base", "/World/Looks/Derived") +provenance material read: ("/World/Looks/Base/Surface", "/World/Looks/Derived") +provenance arc source: /World/Looks/Base +provenance arc source: /World/Looks/Base/Surface +provenance light /World/Key: LightOrigin { index: 0, geoms: 4..5 } +provenance light /World/Sky: LightOrigin { index: 1, geoms: 5..5 } +provenance geometry 0..1: /World/Right +provenance geometry 1..2: /World/Left +provenance geometry 2..3: /World/Ball +provenance geometry 3..4: /World/Floor +provenance geometry 4..5: /World/Key +provenance mesh: MeshOrigin { geom_id: 3, slot: 0, baked: true, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 9851181043634021438, n_points: 4, n_indices: 4, n_uvs: Some(4), smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [0, 1, 2] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: true }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/World/Cam"), cameras: ["/World/Cam"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/World/Cam"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/lookdev_usda-c8874f17309d40f1-1.image b/crates/crust-core/tests/data/import_baselines/lookdev_usda-c8874f17309d40f1-1.image new file mode 100644 index 000000000..11828d811 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/lookdev_usda-c8874f17309d40f1-1.image @@ -0,0 +1 @@ +48x32 16spp clamp-off a22f3882aa730ddf diff --git a/crates/crust-core/tests/data/import_baselines/lookdev_usda-cab3bf60bc31d2f7-1.digest b/crates/crust-core/tests/data/import_baselines/lookdev_usda-cab3bf60bc31d2f7-1.digest new file mode 100644 index 000000000..2e4648805 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/lookdev_usda-cab3bf60bc31d2f7-1.digest @@ -0,0 +1,35 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/World/Cam") +camera: Camera { origin: Vec3A(0.0, 1.0, 6.0), lower_left_corner: Vec3A(-4.7783756, -2.1855836, -4.0), horizontal: Vec3A(9.556751, 0.0, 0.0), vertical: Vec3A(0.0, 6.371167, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: Some("/Render/settings") +settings: RenderSettings { samples_per_pixel: 128, max_depth: 4, width: 48, height: 32, region: PixelRect { x0: 0, y0: 0, x1: 48, y1: 32 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 24.0, aperture: [20.955, 15.2908], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 10.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/lookdev.usda", "$DIR/shot.usda", "$DIR/lights.usda"], invisible_overrides: Some(0) } +layer: $DIR/lights.usda +layer: $DIR/lookdev.usda +layer: $DIR/pay.usda +layer: $DIR/prop.usda +layer: $DIR/shot.usda +lights: 2 +light 0: dome name Some("/World/Sky") lpe None pmf 0.5 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 1: area name Some("/World/Key") lpe None pmf 0.5 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 3 geometries, PrimitiveBreakdown { triangles: 2, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 2 } top level, PrimitiveBreakdown { triangles: 4, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 2 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:6f550ecd4f901d05 camera=2:6f550ecd4f901d05 shadow=2:6f550ecd4f901d05 indirect=2:6f550ecd4f901d05 +geom 1: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:6f550ecd4f901d05 camera=2:6f550ecd4f901d05 shadow=2:6f550ecd4f901d05 indirect=2:6f550ecd4f901d05 +geom 2: material #1 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:7812e24c7b4d4335 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=2:7812e24c7b4d4335 +provenance arc source: /Pay +provenance arc source: /Prop +provenance light /World/Key: LightOrigin { index: 1, geoms: 2..3 } +provenance light /World/Sky: LightOrigin { index: 0, geoms: 2..2 } +provenance geometry 0..1: /World/Heavy +provenance geometry 1..2: /World/Prop +provenance geometry 2..3: /World/Key +provenance mesh: MeshOrigin { geom_id: 0, slot: 0, baked: false, moving: false } +provenance mesh: MeshOrigin { geom_id: 1, slot: 0, baked: false, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 6610719295604273699, n_points: 4, n_indices: 4, n_uvs: None, smooth: true, material: 0 }), placements: 2, shared: false, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: true }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/World/Cam"), cameras: ["/World/Cam"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/World/Cam"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/lookdev_usda-cab3bf60bc31d2f7-1.image b/crates/crust-core/tests/data/import_baselines/lookdev_usda-cab3bf60bc31d2f7-1.image new file mode 100644 index 000000000..afc2d921e --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/lookdev_usda-cab3bf60bc31d2f7-1.image @@ -0,0 +1 @@ +48x32 16spp clamp-off 2caa34772f5d6a86 diff --git a/crates/crust-core/tests/data/import_baselines/lookdev_usda-cae9785463ecddf6-1.digest b/crates/crust-core/tests/data/import_baselines/lookdev_usda-cae9785463ecddf6-1.digest new file mode 100644 index 000000000..ba4d3bc16 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/lookdev_usda-cae9785463ecddf6-1.digest @@ -0,0 +1,41 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/World/Cam") +camera: Camera { origin: Vec3A(0.0, 1.0, 6.0), lower_left_corner: Vec3A(-4.7783756, -2.1855836, -4.0), horizontal: Vec3A(9.556751, 0.0, 0.0), vertical: Vec3A(0.0, 6.371167, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: Some("/Render/settings") +settings: RenderSettings { samples_per_pixel: 128, max_depth: 4, width: 48, height: 32, region: PixelRect { x0: 0, y0: 0, x1: 48, y1: 32 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 24.0, aperture: [20.955, 15.2908], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 10.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/lookdev.usda", "$DIR/stage.usda"], invisible_overrides: Some(0) } +layer: $DIR/lookdev.usda +layer: $DIR/stage.usda +lights: 2 +light 0: area name Some("/World/Key") lpe None pmf 0.5 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 1: dome name Some("/World/Sky") lpe None pmf 0.5 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 5 geometries, PrimitiveBreakdown { triangles: 4, spheres: 3, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 4, spheres: 3, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +geom 0: material #0 Signature { kind: "MaterialX", cutout: false, straight: false, boundary: false, emits: false, uv: true, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:ba01d90e2cc0d4f5 camera=1:ba01d90e2cc0d4f5 shadow=1:ba01d90e2cc0d4f5 indirect=1:ba01d90e2cc0d4f5 +geom 1: material #1 Signature { kind: "MaterialX", cutout: false, straight: false, boundary: false, emits: false, uv: true, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:910eeb9b40238145 camera=1:910eeb9b40238145 shadow=1:910eeb9b40238145 indirect=1:910eeb9b40238145 +geom 2: material #2 Signature { kind: "MaterialX", cutout: false, straight: false, boundary: false, emits: false, uv: true, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:ee76fd7ed45c4a85 camera=1:ee76fd7ed45c4a85 shadow=1:ee76fd7ed45c4a85 indirect=1:ee76fd7ed45c4a85 +geom 3: material #3 Signature { kind: "UsdPreviewSurface (textured)", cutout: false, straight: false, boundary: false, emits: false, uv: true, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv Some(0) shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:6787da8eacebee45 camera=2:6787da8eacebee45 shadow=2:6787da8eacebee45 indirect=2:6787da8eacebee45 +geom 4: material #4 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:7812e24c7b4d4335 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=2:7812e24c7b4d4335 +provenance material /World/Looks/Base: MaterialOrigin { slots: [1], displaced: false } +provenance material /World/Looks/Derived: MaterialOrigin { slots: [0], displaced: false } +provenance material /World/Looks/Std: MaterialOrigin { slots: [2], displaced: false } +provenance material /World/Looks/Tex: MaterialOrigin { slots: [3], displaced: false } +provenance material read: ("/World/Looks/Base", "/World/Looks/Derived") +provenance material read: ("/World/Looks/Base/Surface", "/World/Looks/Derived") +provenance arc source: /World/Looks/Base +provenance arc source: /World/Looks/Base/Surface +provenance light /World/Key: LightOrigin { index: 0, geoms: 4..5 } +provenance light /World/Sky: LightOrigin { index: 1, geoms: 5..5 } +provenance geometry 0..1: /World/Right +provenance geometry 1..2: /World/Left +provenance geometry 2..3: /World/Ball +provenance geometry 3..4: /World/Floor +provenance geometry 4..5: /World/Key +provenance mesh: MeshOrigin { geom_id: 3, slot: 0, baked: true, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 9851181043634021438, n_points: 4, n_indices: 4, n_uvs: Some(4), smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [0, 1, 2] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: true }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/World/Cam"), cameras: ["/World/Cam"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/World/Cam"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/lookdev_usda-cae9785463ecddf6-1.image b/crates/crust-core/tests/data/import_baselines/lookdev_usda-cae9785463ecddf6-1.image new file mode 100644 index 000000000..11828d811 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/lookdev_usda-cae9785463ecddf6-1.image @@ -0,0 +1 @@ +48x32 16spp clamp-off a22f3882aa730ddf diff --git a/crates/crust-core/tests/data/import_baselines/lookdev_usda-d07bf630611d13b0-1.digest b/crates/crust-core/tests/data/import_baselines/lookdev_usda-d07bf630611d13b0-1.digest new file mode 100644 index 000000000..531bc0788 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/lookdev_usda-d07bf630611d13b0-1.digest @@ -0,0 +1,36 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/World/Cam") +camera: Camera { origin: Vec3A(0.0, 1.6, 7.0), lower_left_corner: Vec3A(-4.530607, -2.3153963, -2.5480032), horizontal: Vec3A(9.061214, -0.0, 0.0), vertical: Vec3A(0.0, 5.0473304, -0.7093561), u: Vec3A(1.0, -0.0, 0.0), v: Vec3A(0.0, 0.9902681, -0.13917312), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: Some("/Render/charSettings") +settings: RenderSettings { samples_per_pixel: 4, max_depth: 4, width: 32, height: 18, region: PixelRect { x0: 0, y0: 0, x1: 32, y1: 18 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [AovProduct { prim_path: "/Render/Products/char", name: "char.exr", vars: [AovVar { prim_path: "/Render/Vars/color", name: "color", channel_prefix: None, source: Color, components: 4, precision: Float, accumulation: Filtered, clear: 0.0, expression: None, raw: false, variance: false }], attributes: [] }], precomp: None } +pass: Some(PassSummary { path: "/Render/Passes/char", holdouts: 4, camera_hidden: 0 }) +source: Source { lens: Some(Lens { focal_length: 30.0, aperture: [20.955, 15.2908], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 10.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/lookdev.usda", "$DIR/shot.usda"], invisible_overrides: Some(0) } +layer: $DIR/lookdev.usda +layer: $DIR/shot.usda +lights: 2 +light 0: dome name Some("/World/Sky") lpe None pmf 0.5 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 1: area name Some("/World/Key") lpe None pmf 0.5 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 5 geometries, PrimitiveBreakdown { triangles: 14, spheres: 3, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 14, spheres: 3, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +geom 0: material #0 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:3d65c4a843c183d8 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=1:3d65c4a843c183d8 +geom 1: material #1 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout true transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:0fb1fc996bb64f06 camera=1:0fb1fc996bb64f06 shadow=1:0fb1fc996bb64f06 indirect=1:0fb1fc996bb64f06 +geom 2: material #2 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout true transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=12:1b27d3862a39596d camera=12:1b27d3862a39596d shadow=12:1b27d3862a39596d indirect=12:1b27d3862a39596d +geom 3: material #2 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout true transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:9366fea1438aeb8c camera=1:9366fea1438aeb8c shadow=1:9366fea1438aeb8c indirect=1:9366fea1438aeb8c +geom 4: material #2 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout true transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:be0b97004c4d3e85 camera=2:be0b97004c4d3e85 shadow=2:be0b97004c4d3e85 indirect=2:be0b97004c4d3e85 +provenance material /World/Looks/Mirror: MaterialOrigin { slots: [1], displaced: false } +provenance light /World/Key: LightOrigin { index: 1, geoms: 0..1 } +provenance light /World/Sky: LightOrigin { index: 0, geoms: 0..0 } +provenance geometry 0..1: /World/Key +provenance geometry 1..2: /World/Props/MirrorBall +provenance geometry 2..3: /World/Props/Crate +provenance geometry 3..4: /World/Chars/Hero +provenance geometry 4..5: /World/Set/Floor +provenance mesh: MeshOrigin { geom_id: 2, slot: 0, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 4, slot: 1, baked: true, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 11523204089106361411, n_points: 8, n_indices: 24, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 1: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 8416296582947184296, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [1, 3] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: Some("/Render/Passes/char"), keep_geometry: true }, render_settings: Some("/Render/charSettings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/World/Cam"), cameras: ["/World/Cam"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/World/Cam"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/lookdev_usda-d07bf630611d13b0-1.image b/crates/crust-core/tests/data/import_baselines/lookdev_usda-d07bf630611d13b0-1.image new file mode 100644 index 000000000..3013e04d8 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/lookdev_usda-d07bf630611d13b0-1.image @@ -0,0 +1 @@ +32x18 16spp clamp-off 988ca9561494bf25 diff --git a/crates/crust-core/tests/data/import_baselines/lookdev_usda-d977f122a6f754f5-1.digest b/crates/crust-core/tests/data/import_baselines/lookdev_usda-d977f122a6f754f5-1.digest new file mode 100644 index 000000000..9064aaa66 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/lookdev_usda-d977f122a6f754f5-1.digest @@ -0,0 +1,36 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/World/Cam") +camera: Camera { origin: Vec3A(0.0, 1.6, 7.0), lower_left_corner: Vec3A(-4.530607, -2.3153963, -2.5480032), horizontal: Vec3A(9.061214, -0.0, 0.0), vertical: Vec3A(0.0, 5.0473304, -0.7093561), u: Vec3A(1.0, -0.0, 0.0), v: Vec3A(0.0, 0.9902681, -0.13917312), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: Some("/Render/charSettings") +settings: RenderSettings { samples_per_pixel: 4, max_depth: 4, width: 32, height: 18, region: PixelRect { x0: 0, y0: 0, x1: 32, y1: 18 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [AovProduct { prim_path: "/Render/Products/char", name: "char.exr", vars: [AovVar { prim_path: "/Render/Vars/color", name: "color", channel_prefix: None, source: Color, components: 4, precision: Float, accumulation: Filtered, clear: 0.0, expression: None, raw: false, variance: false }], attributes: [] }], precomp: None } +pass: Some(PassSummary { path: "/Render/Passes/char", holdouts: 3, camera_hidden: 0 }) +source: Source { lens: Some(Lens { focal_length: 30.0, aperture: [20.955, 15.2908], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 10.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/lookdev.usda", "$DIR/shot.usda"], invisible_overrides: Some(0) } +layer: $DIR/lookdev.usda +layer: $DIR/shot.usda +lights: 2 +light 0: dome name Some("/World/Sky") lpe None pmf 0.5 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 1: area name Some("/World/Key") lpe None pmf 0.5 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 5 geometries, PrimitiveBreakdown { triangles: 14, spheres: 3, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 14, spheres: 3, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +geom 0: material #0 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:3d65c4a843c183d8 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=1:3d65c4a843c183d8 +geom 1: material #1 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout true transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:0fb1fc996bb64f06 camera=1:0fb1fc996bb64f06 shadow=1:0fb1fc996bb64f06 indirect=1:0fb1fc996bb64f06 +geom 2: material #2 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout true transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=12:1b27d3862a39596d camera=12:1b27d3862a39596d shadow=12:1b27d3862a39596d indirect=12:1b27d3862a39596d +geom 3: material #2 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:9366fea1438aeb8c camera=1:9366fea1438aeb8c shadow=1:9366fea1438aeb8c indirect=1:9366fea1438aeb8c +geom 4: material #2 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout true transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:be0b97004c4d3e85 camera=2:be0b97004c4d3e85 shadow=2:be0b97004c4d3e85 indirect=2:be0b97004c4d3e85 +provenance material /World/Looks/Mirror: MaterialOrigin { slots: [1], displaced: false } +provenance light /World/Key: LightOrigin { index: 1, geoms: 0..1 } +provenance light /World/Sky: LightOrigin { index: 0, geoms: 0..0 } +provenance geometry 0..1: /World/Key +provenance geometry 1..2: /World/Props/MirrorBall +provenance geometry 2..3: /World/Props/Crate +provenance geometry 3..4: /World/Chars/Hero +provenance geometry 4..5: /World/Set/Floor +provenance mesh: MeshOrigin { geom_id: 2, slot: 0, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 4, slot: 1, baked: true, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 11523204089106361411, n_points: 8, n_indices: 24, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 1: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 8416296582947184296, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [1, 3] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: Some("/Render/Passes/char"), keep_geometry: true }, render_settings: Some("/Render/charSettings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/World/Cam"), cameras: ["/World/Cam"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/World/Cam"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/lookdev_usda-d977f122a6f754f5-1.image b/crates/crust-core/tests/data/import_baselines/lookdev_usda-d977f122a6f754f5-1.image new file mode 100644 index 000000000..8c3cb6cc5 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/lookdev_usda-d977f122a6f754f5-1.image @@ -0,0 +1 @@ +32x18 16spp clamp-off bb27b0e25769ee18 diff --git a/crates/crust-core/tests/data/import_baselines/lookdev_usda-da5095c5387fc6d5-1.digest b/crates/crust-core/tests/data/import_baselines/lookdev_usda-da5095c5387fc6d5-1.digest new file mode 100644 index 000000000..ac6db9fbb --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/lookdev_usda-da5095c5387fc6d5-1.digest @@ -0,0 +1,40 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/scene/camera1") +camera: Camera { origin: Vec3A(0.0074343784, 1.9913422, 4.0133057), lower_left_corner: Vec3A(-8.881443, -3.0086517, -0.98669434), horizontal: Vec3A(17.777756, 0.0, 0.0), vertical: Vec3A(0.0, 9.999988, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: Some(Vec4(0.0, 0.0, -1.0, 3.9133058)), far: Some(Vec4(0.0, 0.0, 1.0, 9995.986)), planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: None +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 640, height: 360, region: PixelRect { x0: 0, y0: 0, x1: 640, y1: 360 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 12.700017, aperture: [25.4, 25.4], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 5.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/lookdev.usda", "$ROOT/samples/cornellbox.usda"], invisible_overrides: Some(0) } +layer: $ROOT/samples/cornellbox.usda +layer: $DIR/lookdev.usda +warning: Warning { code: MaterialFallbackDefault, kind: Skipped, count: 1, prims: ["/scene/Looks/initialShadingGroup"], message: "Material /scene/Looks/initialShadingGroup has no surface shader — using default grey OpenPBR" } +lights: 1 +light 0: dome name Some("/scene/Sky") lpe None pmf 1.0 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 5 geometries, PrimitiveBreakdown { triangles: 822, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 2 } top level, PrimitiveBreakdown { triangles: 1582, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 2 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 4.0 motion [] pieces all=10:88b22fc3345d5b05 camera=10:88b22fc3345d5b05 shadow=10:88b22fc3345d5b05 indirect=10:88b22fc3345d5b05 +geom 1: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.2 motion [] pieces all=760:c2b60a75c52c78b9 camera=760:c2b60a75c52c78b9 shadow=760:c2b60a75c52c78b9 indirect=760:c2b60a75c52c78b9 +geom 2: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=12:94a297badef437e1 camera=12:94a297badef437e1 shadow=12:94a297badef437e1 indirect=12:94a297badef437e1 +geom 3: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.25 motion [] pieces all=800:4a8c9f44d777e131 camera=800:4a8c9f44d777e131 shadow=800:4a8c9f44d777e131 indirect=800:4a8c9f44d777e131 +geom 4: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.3585339 motion [] pieces all=760:2344ecf63e12c441 camera=760:2344ecf63e12c441 shadow=760:2344ecf63e12c441 indirect=760:2344ecf63e12c441 +provenance material /scene/Looks/initialShadingGroup: MaterialOrigin { slots: [0, 1, 2, 3, 4], displaced: false } +provenance light /scene/Sky: LightOrigin { index: 0, geoms: 0..0 } +provenance geometry 0..1: /scene/pCube1 +provenance geometry 1..2: /scene/pSphere1 +provenance geometry 2..3: /scene/pCube2 +provenance geometry 3..4: /scene/pTorus1 +provenance geometry 4..5: /scene/pSphere2 +provenance mesh: MeshOrigin { geom_id: 0, slot: 0, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 1, slot: 1, baked: false, moving: false } +provenance mesh: MeshOrigin { geom_id: 2, slot: 2, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 3, slot: 3, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 4, slot: 1, baked: false, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 12343188411137242430, n_points: 8, n_indices: 20, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 1: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 17119738035130870988, n_points: 382, n_indices: 1560, n_uvs: None, smooth: false, material: 0 }), placements: 2, shared: false, displaced: false } +provenance mesh slot 2: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 1739488954094729910, n_points: 8, n_indices: 24, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 3: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 6096447469814747168, n_points: 400, n_indices: 1600, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: true }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/scene/camera1"), cameras: ["/scene/camera1"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/scene/camera1"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/lookdev_usda-da5095c5387fc6d5-1.image b/crates/crust-core/tests/data/import_baselines/lookdev_usda-da5095c5387fc6d5-1.image new file mode 100644 index 000000000..7172edbfe --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/lookdev_usda-da5095c5387fc6d5-1.image @@ -0,0 +1 @@ +640x360 16spp clamp-off 64ede904b11bab22 diff --git a/crates/crust-core/tests/data/import_baselines/lookdev_usda-ddd9a472681fe394-1.digest b/crates/crust-core/tests/data/import_baselines/lookdev_usda-ddd9a472681fe394-1.digest new file mode 100644 index 000000000..2e4648805 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/lookdev_usda-ddd9a472681fe394-1.digest @@ -0,0 +1,35 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/World/Cam") +camera: Camera { origin: Vec3A(0.0, 1.0, 6.0), lower_left_corner: Vec3A(-4.7783756, -2.1855836, -4.0), horizontal: Vec3A(9.556751, 0.0, 0.0), vertical: Vec3A(0.0, 6.371167, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: Some("/Render/settings") +settings: RenderSettings { samples_per_pixel: 128, max_depth: 4, width: 48, height: 32, region: PixelRect { x0: 0, y0: 0, x1: 48, y1: 32 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 24.0, aperture: [20.955, 15.2908], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 10.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/lookdev.usda", "$DIR/shot.usda", "$DIR/lights.usda"], invisible_overrides: Some(0) } +layer: $DIR/lights.usda +layer: $DIR/lookdev.usda +layer: $DIR/pay.usda +layer: $DIR/prop.usda +layer: $DIR/shot.usda +lights: 2 +light 0: dome name Some("/World/Sky") lpe None pmf 0.5 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 1: area name Some("/World/Key") lpe None pmf 0.5 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 3 geometries, PrimitiveBreakdown { triangles: 2, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 2 } top level, PrimitiveBreakdown { triangles: 4, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 2 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:6f550ecd4f901d05 camera=2:6f550ecd4f901d05 shadow=2:6f550ecd4f901d05 indirect=2:6f550ecd4f901d05 +geom 1: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:6f550ecd4f901d05 camera=2:6f550ecd4f901d05 shadow=2:6f550ecd4f901d05 indirect=2:6f550ecd4f901d05 +geom 2: material #1 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:7812e24c7b4d4335 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=2:7812e24c7b4d4335 +provenance arc source: /Pay +provenance arc source: /Prop +provenance light /World/Key: LightOrigin { index: 1, geoms: 2..3 } +provenance light /World/Sky: LightOrigin { index: 0, geoms: 2..2 } +provenance geometry 0..1: /World/Heavy +provenance geometry 1..2: /World/Prop +provenance geometry 2..3: /World/Key +provenance mesh: MeshOrigin { geom_id: 0, slot: 0, baked: false, moving: false } +provenance mesh: MeshOrigin { geom_id: 1, slot: 0, baked: false, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 6610719295604273699, n_points: 4, n_indices: 4, n_uvs: None, smooth: true, material: 0 }), placements: 2, shared: false, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: true }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/World/Cam"), cameras: ["/World/Cam"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/World/Cam"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/lookdev_usda-ddd9a472681fe394-1.image b/crates/crust-core/tests/data/import_baselines/lookdev_usda-ddd9a472681fe394-1.image new file mode 100644 index 000000000..afc2d921e --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/lookdev_usda-ddd9a472681fe394-1.image @@ -0,0 +1 @@ +48x32 16spp clamp-off 2caa34772f5d6a86 diff --git a/crates/crust-core/tests/data/import_baselines/lookdev_usda-e6376a73c80d838f-1.digest b/crates/crust-core/tests/data/import_baselines/lookdev_usda-e6376a73c80d838f-1.digest new file mode 100644 index 000000000..2e4648805 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/lookdev_usda-e6376a73c80d838f-1.digest @@ -0,0 +1,35 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/World/Cam") +camera: Camera { origin: Vec3A(0.0, 1.0, 6.0), lower_left_corner: Vec3A(-4.7783756, -2.1855836, -4.0), horizontal: Vec3A(9.556751, 0.0, 0.0), vertical: Vec3A(0.0, 6.371167, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: Some("/Render/settings") +settings: RenderSettings { samples_per_pixel: 128, max_depth: 4, width: 48, height: 32, region: PixelRect { x0: 0, y0: 0, x1: 48, y1: 32 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 24.0, aperture: [20.955, 15.2908], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 10.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/lookdev.usda", "$DIR/shot.usda", "$DIR/lights.usda"], invisible_overrides: Some(0) } +layer: $DIR/lights.usda +layer: $DIR/lookdev.usda +layer: $DIR/pay.usda +layer: $DIR/prop.usda +layer: $DIR/shot.usda +lights: 2 +light 0: dome name Some("/World/Sky") lpe None pmf 0.5 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 1: area name Some("/World/Key") lpe None pmf 0.5 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 3 geometries, PrimitiveBreakdown { triangles: 2, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 2 } top level, PrimitiveBreakdown { triangles: 4, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 2 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:6f550ecd4f901d05 camera=2:6f550ecd4f901d05 shadow=2:6f550ecd4f901d05 indirect=2:6f550ecd4f901d05 +geom 1: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:6f550ecd4f901d05 camera=2:6f550ecd4f901d05 shadow=2:6f550ecd4f901d05 indirect=2:6f550ecd4f901d05 +geom 2: material #1 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:7812e24c7b4d4335 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=2:7812e24c7b4d4335 +provenance arc source: /Pay +provenance arc source: /Prop +provenance light /World/Key: LightOrigin { index: 1, geoms: 2..3 } +provenance light /World/Sky: LightOrigin { index: 0, geoms: 2..2 } +provenance geometry 0..1: /World/Heavy +provenance geometry 1..2: /World/Prop +provenance geometry 2..3: /World/Key +provenance mesh: MeshOrigin { geom_id: 0, slot: 0, baked: false, moving: false } +provenance mesh: MeshOrigin { geom_id: 1, slot: 0, baked: false, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 6610719295604273699, n_points: 4, n_indices: 4, n_uvs: None, smooth: true, material: 0 }), placements: 2, shared: false, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: true }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/World/Cam"), cameras: ["/World/Cam"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/World/Cam"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/lookdev_usda-e6376a73c80d838f-1.image b/crates/crust-core/tests/data/import_baselines/lookdev_usda-e6376a73c80d838f-1.image new file mode 100644 index 000000000..afc2d921e --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/lookdev_usda-e6376a73c80d838f-1.image @@ -0,0 +1 @@ +48x32 16spp clamp-off 2caa34772f5d6a86 diff --git a/crates/crust-core/tests/data/import_baselines/lookdev_usda-f0ebb00d074c9c96-1.digest b/crates/crust-core/tests/data/import_baselines/lookdev_usda-f0ebb00d074c9c96-1.digest new file mode 100644 index 000000000..b33a0c9af --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/lookdev_usda-f0ebb00d074c9c96-1.digest @@ -0,0 +1,30 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/World/Cam") +camera: Camera { origin: Vec3A(0.0, 1.2, 6.0), lower_left_corner: Vec3A(-5.6632595, -1.9855835, -4.0), horizontal: Vec3A(11.326519, 0.0, 0.0), vertical: Vec3A(0.0, 6.371167, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: Some("/Render/settings") +settings: RenderSettings { samples_per_pixel: 16, max_depth: 4, width: 160, height: 90, region: PixelRect { x0: 0, y0: 0, x1: 160, y1: 90 }, min_samples_per_pixel: 8, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [AovProduct { prim_path: "/Render/Products/beauty", name: "renders/aovs_beauty.exr", vars: [AovVar { prim_path: "/Render/Products/Vars/C", name: "C", channel_prefix: None, source: Color, components: 4, precision: Float, accumulation: Filtered, clear: 0.0, expression: None, raw: false, variance: false }, AovVar { prim_path: "/Render/Products/Vars/sampleCount", name: "sampleCount", channel_prefix: None, source: SampleCount, components: 1, precision: Float, accumulation: Filtered, clear: 0.0, expression: None, raw: false, variance: false }, AovVar { prim_path: "/Render/Products/Vars/variance", name: "variance", channel_prefix: None, source: Variance, components: 1, precision: Float, accumulation: Filtered, clear: 0.0, expression: None, raw: false, variance: false }], attributes: [("artist", "crust samples")] }, AovProduct { prim_path: "/Render/Products/data", name: "renders/aovs_data.exr", vars: [AovVar { prim_path: "/Render/Products/Vars/Z", name: "Z", channel_prefix: None, source: Depth, components: 1, precision: Float, accumulation: Closest, clear: inf, expression: None, raw: false, variance: false }, AovVar { prim_path: "/Render/Products/Vars/distance", name: "distance", channel_prefix: None, source: Distance, components: 1, precision: Float, accumulation: Closest, clear: inf, expression: None, raw: false, variance: false }, AovVar { prim_path: "/Render/Products/Vars/P", name: "P", channel_prefix: None, source: P, components: 3, precision: Float, accumulation: Closest, clear: 0.0, expression: None, raw: false, variance: false }, AovVar { prim_path: "/Render/Products/Vars/Peye", name: "Peye", channel_prefix: None, source: Peye, components: 3, precision: Float, accumulation: Closest, clear: 0.0, expression: None, raw: false, variance: false }, AovVar { prim_path: "/Render/Products/Vars/N", name: "N", channel_prefix: None, source: Normal, components: 3, precision: Half, accumulation: Filtered, clear: 0.0, expression: None, raw: false, variance: false }, AovVar { prim_path: "/Render/Products/Vars/Neye", name: "Neye", channel_prefix: None, source: Neye, components: 3, precision: Float, accumulation: Filtered, clear: 0.0, expression: None, raw: false, variance: false }, AovVar { prim_path: "/Render/Products/Vars/st", name: "st", channel_prefix: None, source: St, components: 2, precision: Float, accumulation: Filtered, clear: 0.0, expression: None, raw: false, variance: false }, AovVar { prim_path: "/Render/Products/Vars/alpha", name: "alpha", channel_prefix: None, source: Alpha, components: 1, precision: Float, accumulation: Filtered, clear: 0.0, expression: None, raw: false, variance: false }], attributes: [] }], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 24.0, aperture: [20.955, 15.2908], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 10.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/lookdev.usda", "$ROOT/samples/aovs.usda"], invisible_overrides: Some(0) } +layer: $ROOT/samples/aovs.usda +layer: $DIR/lookdev.usda +warning: Warning { code: AovUnknownSource, kind: Skipped, count: 1, prims: ["/Render/Products/Vars/diffuse_direct"], message: "/Render/Products/Vars/diffuse_direct: unknown raw source \"diffuse_direct\"; no channel written (crust's AOV names are listed in the user documentation, usd/aovs)" } +lights: 2 +light 0: dome name Some("/World/Sky") lpe None pmf 0.5 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 1: area name Some("/World/KeyLight") lpe None pmf 0.5 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 3 geometries, PrimitiveBreakdown { triangles: 4, spheres: 1, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 4, spheres: 1, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +geom 0: material #0 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:e8a5ea9ee1d32838 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=2:e8a5ea9ee1d32838 +geom 1: material #1 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:cadf82024fa5b745 camera=2:cadf82024fa5b745 shadow=2:cadf82024fa5b745 indirect=2:cadf82024fa5b745 +geom 2: material #1 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:ee76fd7ed45c4a85 camera=1:ee76fd7ed45c4a85 shadow=1:ee76fd7ed45c4a85 indirect=1:ee76fd7ed45c4a85 +provenance light /World/KeyLight: LightOrigin { index: 1, geoms: 0..1 } +provenance light /World/Sky: LightOrigin { index: 0, geoms: 0..0 } +provenance geometry 0..1: /World/KeyLight +provenance geometry 1..2: /World/Floor +provenance geometry 2..3: /World/Ball +provenance mesh: MeshOrigin { geom_id: 1, slot: 0, baked: true, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 12300483381263303556, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [2] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: true, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/World/Cam"), cameras: ["/World/Cam"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/World/Cam"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/lookdev_usda-f0ebb00d074c9c96-1.image b/crates/crust-core/tests/data/import_baselines/lookdev_usda-f0ebb00d074c9c96-1.image new file mode 100644 index 000000000..6d0c7cc68 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/lookdev_usda-f0ebb00d074c9c96-1.image @@ -0,0 +1 @@ +160x90 16spp clamp-off 6d657218ffac01a2 diff --git a/crates/crust-core/tests/data/import_baselines/lookdev_usda-f374e5a4458830ba-1.digest b/crates/crust-core/tests/data/import_baselines/lookdev_usda-f374e5a4458830ba-1.digest new file mode 100644 index 000000000..24d8a4bb3 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/lookdev_usda-f374e5a4458830ba-1.digest @@ -0,0 +1,36 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/World/Cam") +camera: Camera { origin: Vec3A(0.0, 1.6, 7.0), lower_left_corner: Vec3A(-4.530607, -2.3153963, -2.5480032), horizontal: Vec3A(9.061214, -0.0, 0.0), vertical: Vec3A(0.0, 5.0473304, -0.7093561), u: Vec3A(1.0, -0.0, 0.0), v: Vec3A(0.0, 0.9902681, -0.13917312), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: Some("/Render/charSettings") +settings: RenderSettings { samples_per_pixel: 4, max_depth: 4, width: 32, height: 18, region: PixelRect { x0: 0, y0: 0, x1: 32, y1: 18 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [AovProduct { prim_path: "/Render/Products/char", name: "char.exr", vars: [AovVar { prim_path: "/Render/Vars/color", name: "color", channel_prefix: None, source: Color, components: 4, precision: Float, accumulation: Filtered, clear: 0.0, expression: None, raw: false, variance: false }], attributes: [] }], precomp: None } +pass: Some(PassSummary { path: "/Render/Passes/char", holdouts: 3, camera_hidden: 0 }) +source: Source { lens: Some(Lens { focal_length: 30.0, aperture: [20.955, 15.2908], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 10.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/lookdev.usda", "$DIR/shot.usda"], invisible_overrides: Some(0) } +layer: $DIR/lookdev.usda +layer: $DIR/shot.usda +lights: 2 +light 0: dome name Some("/World/Sky") lpe None pmf 0.5 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 1: area name Some("/World/Key") lpe None pmf 0.5 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 5 geometries, PrimitiveBreakdown { triangles: 14, spheres: 3, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 14, spheres: 3, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +geom 0: material #0 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:3d65c4a843c183d8 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=1:3d65c4a843c183d8 +geom 1: material #1 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout true transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:0fb1fc996bb64f06 camera=1:0fb1fc996bb64f06 shadow=1:0fb1fc996bb64f06 indirect=1:0fb1fc996bb64f06 +geom 2: material #2 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout true transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=12:1b27d3862a39596d camera=12:1b27d3862a39596d shadow=12:1b27d3862a39596d indirect=12:1b27d3862a39596d +geom 3: material #2 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:9366fea1438aeb8c camera=1:9366fea1438aeb8c shadow=1:9366fea1438aeb8c indirect=1:9366fea1438aeb8c +geom 4: material #2 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout true transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:be0b97004c4d3e85 camera=2:be0b97004c4d3e85 shadow=2:be0b97004c4d3e85 indirect=2:be0b97004c4d3e85 +provenance material /World/Looks/Mirror: MaterialOrigin { slots: [1], displaced: false } +provenance light /World/Key: LightOrigin { index: 1, geoms: 0..1 } +provenance light /World/Sky: LightOrigin { index: 0, geoms: 0..0 } +provenance geometry 0..1: /World/Key +provenance geometry 1..2: /World/Props/MirrorBall +provenance geometry 2..3: /World/Props/Crate +provenance geometry 3..4: /World/Chars/Hero +provenance geometry 4..5: /World/Set/Floor +provenance mesh: MeshOrigin { geom_id: 2, slot: 0, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 4, slot: 1, baked: true, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 11523204089106361411, n_points: 8, n_indices: 24, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 1: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 8416296582947184296, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [1, 3] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: true, working_space: None, pass: Some("/Render/Passes/char"), keep_geometry: false }, render_settings: Some("/Render/charSettings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/World/Cam"), cameras: ["/World/Cam"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/World/Cam"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/lookdev_usda-f374e5a4458830ba-1.image b/crates/crust-core/tests/data/import_baselines/lookdev_usda-f374e5a4458830ba-1.image new file mode 100644 index 000000000..05383b1cc --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/lookdev_usda-f374e5a4458830ba-1.image @@ -0,0 +1 @@ +32x18 16spp clamp-off be8bda21ef27bf9b diff --git a/crates/crust-core/tests/data/import_baselines/lookdev_usda-f374e5a4458830ba-2.digest b/crates/crust-core/tests/data/import_baselines/lookdev_usda-f374e5a4458830ba-2.digest new file mode 100644 index 000000000..24d8a4bb3 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/lookdev_usda-f374e5a4458830ba-2.digest @@ -0,0 +1,36 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/World/Cam") +camera: Camera { origin: Vec3A(0.0, 1.6, 7.0), lower_left_corner: Vec3A(-4.530607, -2.3153963, -2.5480032), horizontal: Vec3A(9.061214, -0.0, 0.0), vertical: Vec3A(0.0, 5.0473304, -0.7093561), u: Vec3A(1.0, -0.0, 0.0), v: Vec3A(0.0, 0.9902681, -0.13917312), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: Some("/Render/charSettings") +settings: RenderSettings { samples_per_pixel: 4, max_depth: 4, width: 32, height: 18, region: PixelRect { x0: 0, y0: 0, x1: 32, y1: 18 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [AovProduct { prim_path: "/Render/Products/char", name: "char.exr", vars: [AovVar { prim_path: "/Render/Vars/color", name: "color", channel_prefix: None, source: Color, components: 4, precision: Float, accumulation: Filtered, clear: 0.0, expression: None, raw: false, variance: false }], attributes: [] }], precomp: None } +pass: Some(PassSummary { path: "/Render/Passes/char", holdouts: 3, camera_hidden: 0 }) +source: Source { lens: Some(Lens { focal_length: 30.0, aperture: [20.955, 15.2908], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 10.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/lookdev.usda", "$DIR/shot.usda"], invisible_overrides: Some(0) } +layer: $DIR/lookdev.usda +layer: $DIR/shot.usda +lights: 2 +light 0: dome name Some("/World/Sky") lpe None pmf 0.5 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 1: area name Some("/World/Key") lpe None pmf 0.5 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 5 geometries, PrimitiveBreakdown { triangles: 14, spheres: 3, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 14, spheres: 3, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +geom 0: material #0 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:3d65c4a843c183d8 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=1:3d65c4a843c183d8 +geom 1: material #1 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout true transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:0fb1fc996bb64f06 camera=1:0fb1fc996bb64f06 shadow=1:0fb1fc996bb64f06 indirect=1:0fb1fc996bb64f06 +geom 2: material #2 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout true transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=12:1b27d3862a39596d camera=12:1b27d3862a39596d shadow=12:1b27d3862a39596d indirect=12:1b27d3862a39596d +geom 3: material #2 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:9366fea1438aeb8c camera=1:9366fea1438aeb8c shadow=1:9366fea1438aeb8c indirect=1:9366fea1438aeb8c +geom 4: material #2 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout true transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:be0b97004c4d3e85 camera=2:be0b97004c4d3e85 shadow=2:be0b97004c4d3e85 indirect=2:be0b97004c4d3e85 +provenance material /World/Looks/Mirror: MaterialOrigin { slots: [1], displaced: false } +provenance light /World/Key: LightOrigin { index: 1, geoms: 0..1 } +provenance light /World/Sky: LightOrigin { index: 0, geoms: 0..0 } +provenance geometry 0..1: /World/Key +provenance geometry 1..2: /World/Props/MirrorBall +provenance geometry 2..3: /World/Props/Crate +provenance geometry 3..4: /World/Chars/Hero +provenance geometry 4..5: /World/Set/Floor +provenance mesh: MeshOrigin { geom_id: 2, slot: 0, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 4, slot: 1, baked: true, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 11523204089106361411, n_points: 8, n_indices: 24, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 1: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 8416296582947184296, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [1, 3] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: true, working_space: None, pass: Some("/Render/Passes/char"), keep_geometry: false }, render_settings: Some("/Render/charSettings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/World/Cam"), cameras: ["/World/Cam"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/World/Cam"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/lookdev_usda-f374e5a4458830ba-2.image b/crates/crust-core/tests/data/import_baselines/lookdev_usda-f374e5a4458830ba-2.image new file mode 100644 index 000000000..05383b1cc --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/lookdev_usda-f374e5a4458830ba-2.image @@ -0,0 +1 @@ +32x18 16spp clamp-off be8bda21ef27bf9b diff --git a/crates/crust-core/tests/data/import_baselines/lookdev_usda-f4c4e13661091485-1.digest b/crates/crust-core/tests/data/import_baselines/lookdev_usda-f4c4e13661091485-1.digest new file mode 100644 index 000000000..ba4d3bc16 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/lookdev_usda-f4c4e13661091485-1.digest @@ -0,0 +1,41 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/World/Cam") +camera: Camera { origin: Vec3A(0.0, 1.0, 6.0), lower_left_corner: Vec3A(-4.7783756, -2.1855836, -4.0), horizontal: Vec3A(9.556751, 0.0, 0.0), vertical: Vec3A(0.0, 6.371167, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: Some("/Render/settings") +settings: RenderSettings { samples_per_pixel: 128, max_depth: 4, width: 48, height: 32, region: PixelRect { x0: 0, y0: 0, x1: 48, y1: 32 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 24.0, aperture: [20.955, 15.2908], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 10.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/lookdev.usda", "$DIR/stage.usda"], invisible_overrides: Some(0) } +layer: $DIR/lookdev.usda +layer: $DIR/stage.usda +lights: 2 +light 0: area name Some("/World/Key") lpe None pmf 0.5 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 1: dome name Some("/World/Sky") lpe None pmf 0.5 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 5 geometries, PrimitiveBreakdown { triangles: 4, spheres: 3, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 4, spheres: 3, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +geom 0: material #0 Signature { kind: "MaterialX", cutout: false, straight: false, boundary: false, emits: false, uv: true, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:ba01d90e2cc0d4f5 camera=1:ba01d90e2cc0d4f5 shadow=1:ba01d90e2cc0d4f5 indirect=1:ba01d90e2cc0d4f5 +geom 1: material #1 Signature { kind: "MaterialX", cutout: false, straight: false, boundary: false, emits: false, uv: true, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:910eeb9b40238145 camera=1:910eeb9b40238145 shadow=1:910eeb9b40238145 indirect=1:910eeb9b40238145 +geom 2: material #2 Signature { kind: "MaterialX", cutout: false, straight: false, boundary: false, emits: false, uv: true, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:ee76fd7ed45c4a85 camera=1:ee76fd7ed45c4a85 shadow=1:ee76fd7ed45c4a85 indirect=1:ee76fd7ed45c4a85 +geom 3: material #3 Signature { kind: "UsdPreviewSurface (textured)", cutout: false, straight: false, boundary: false, emits: false, uv: true, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv Some(0) shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:6787da8eacebee45 camera=2:6787da8eacebee45 shadow=2:6787da8eacebee45 indirect=2:6787da8eacebee45 +geom 4: material #4 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:7812e24c7b4d4335 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=2:7812e24c7b4d4335 +provenance material /World/Looks/Base: MaterialOrigin { slots: [1], displaced: false } +provenance material /World/Looks/Derived: MaterialOrigin { slots: [0], displaced: false } +provenance material /World/Looks/Std: MaterialOrigin { slots: [2], displaced: false } +provenance material /World/Looks/Tex: MaterialOrigin { slots: [3], displaced: false } +provenance material read: ("/World/Looks/Base", "/World/Looks/Derived") +provenance material read: ("/World/Looks/Base/Surface", "/World/Looks/Derived") +provenance arc source: /World/Looks/Base +provenance arc source: /World/Looks/Base/Surface +provenance light /World/Key: LightOrigin { index: 0, geoms: 4..5 } +provenance light /World/Sky: LightOrigin { index: 1, geoms: 5..5 } +provenance geometry 0..1: /World/Right +provenance geometry 1..2: /World/Left +provenance geometry 2..3: /World/Ball +provenance geometry 3..4: /World/Floor +provenance geometry 4..5: /World/Key +provenance mesh: MeshOrigin { geom_id: 3, slot: 0, baked: true, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 9851181043634021438, n_points: 4, n_indices: 4, n_uvs: Some(4), smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [0, 1, 2] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: true }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/World/Cam"), cameras: ["/World/Cam"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/World/Cam"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/lookdev_usda-f4c4e13661091485-1.image b/crates/crust-core/tests/data/import_baselines/lookdev_usda-f4c4e13661091485-1.image new file mode 100644 index 000000000..11828d811 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/lookdev_usda-f4c4e13661091485-1.image @@ -0,0 +1 @@ +48x32 16spp clamp-off a22f3882aa730ddf diff --git a/crates/crust-core/tests/data/import_baselines/lookdev_usda-fa7c6612a51b87e4-1.digest b/crates/crust-core/tests/data/import_baselines/lookdev_usda-fa7c6612a51b87e4-1.digest new file mode 100644 index 000000000..2e4648805 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/lookdev_usda-fa7c6612a51b87e4-1.digest @@ -0,0 +1,35 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/World/Cam") +camera: Camera { origin: Vec3A(0.0, 1.0, 6.0), lower_left_corner: Vec3A(-4.7783756, -2.1855836, -4.0), horizontal: Vec3A(9.556751, 0.0, 0.0), vertical: Vec3A(0.0, 6.371167, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: Some("/Render/settings") +settings: RenderSettings { samples_per_pixel: 128, max_depth: 4, width: 48, height: 32, region: PixelRect { x0: 0, y0: 0, x1: 48, y1: 32 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 24.0, aperture: [20.955, 15.2908], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 10.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/lookdev.usda", "$DIR/shot.usda", "$DIR/lights.usda"], invisible_overrides: Some(0) } +layer: $DIR/lights.usda +layer: $DIR/lookdev.usda +layer: $DIR/pay.usda +layer: $DIR/prop.usda +layer: $DIR/shot.usda +lights: 2 +light 0: dome name Some("/World/Sky") lpe None pmf 0.5 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 1: area name Some("/World/Key") lpe None pmf 0.5 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 3 geometries, PrimitiveBreakdown { triangles: 2, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 2 } top level, PrimitiveBreakdown { triangles: 4, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 2 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:6f550ecd4f901d05 camera=2:6f550ecd4f901d05 shadow=2:6f550ecd4f901d05 indirect=2:6f550ecd4f901d05 +geom 1: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:6f550ecd4f901d05 camera=2:6f550ecd4f901d05 shadow=2:6f550ecd4f901d05 indirect=2:6f550ecd4f901d05 +geom 2: material #1 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:7812e24c7b4d4335 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=2:7812e24c7b4d4335 +provenance arc source: /Pay +provenance arc source: /Prop +provenance light /World/Key: LightOrigin { index: 1, geoms: 2..3 } +provenance light /World/Sky: LightOrigin { index: 0, geoms: 2..2 } +provenance geometry 0..1: /World/Heavy +provenance geometry 1..2: /World/Prop +provenance geometry 2..3: /World/Key +provenance mesh: MeshOrigin { geom_id: 0, slot: 0, baked: false, moving: false } +provenance mesh: MeshOrigin { geom_id: 1, slot: 0, baked: false, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 6610719295604273699, n_points: 4, n_indices: 4, n_uvs: None, smooth: true, material: 0 }), placements: 2, shared: false, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: true }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/World/Cam"), cameras: ["/World/Cam"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/World/Cam"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/lookdev_usda-fa7c6612a51b87e4-1.image b/crates/crust-core/tests/data/import_baselines/lookdev_usda-fa7c6612a51b87e4-1.image new file mode 100644 index 000000000..afc2d921e --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/lookdev_usda-fa7c6612a51b87e4-1.image @@ -0,0 +1 @@ +48x32 16spp clamp-off 2caa34772f5d6a86 diff --git a/crates/crust-core/tests/data/import_baselines/lookdev_usda-fad17720e6382b8f-1.digest b/crates/crust-core/tests/data/import_baselines/lookdev_usda-fad17720e6382b8f-1.digest new file mode 100644 index 000000000..ba4d3bc16 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/lookdev_usda-fad17720e6382b8f-1.digest @@ -0,0 +1,41 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/World/Cam") +camera: Camera { origin: Vec3A(0.0, 1.0, 6.0), lower_left_corner: Vec3A(-4.7783756, -2.1855836, -4.0), horizontal: Vec3A(9.556751, 0.0, 0.0), vertical: Vec3A(0.0, 6.371167, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: Some("/Render/settings") +settings: RenderSettings { samples_per_pixel: 128, max_depth: 4, width: 48, height: 32, region: PixelRect { x0: 0, y0: 0, x1: 48, y1: 32 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 24.0, aperture: [20.955, 15.2908], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 10.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/lookdev.usda", "$DIR/stage.usda"], invisible_overrides: Some(0) } +layer: $DIR/lookdev.usda +layer: $DIR/stage.usda +lights: 2 +light 0: area name Some("/World/Key") lpe None pmf 0.5 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 1: dome name Some("/World/Sky") lpe None pmf 0.5 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 5 geometries, PrimitiveBreakdown { triangles: 4, spheres: 3, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 4, spheres: 3, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +geom 0: material #0 Signature { kind: "MaterialX", cutout: false, straight: false, boundary: false, emits: false, uv: true, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:ba01d90e2cc0d4f5 camera=1:ba01d90e2cc0d4f5 shadow=1:ba01d90e2cc0d4f5 indirect=1:ba01d90e2cc0d4f5 +geom 1: material #1 Signature { kind: "MaterialX", cutout: false, straight: false, boundary: false, emits: false, uv: true, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:910eeb9b40238145 camera=1:910eeb9b40238145 shadow=1:910eeb9b40238145 indirect=1:910eeb9b40238145 +geom 2: material #2 Signature { kind: "MaterialX", cutout: false, straight: false, boundary: false, emits: false, uv: true, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:ee76fd7ed45c4a85 camera=1:ee76fd7ed45c4a85 shadow=1:ee76fd7ed45c4a85 indirect=1:ee76fd7ed45c4a85 +geom 3: material #3 Signature { kind: "UsdPreviewSurface (textured)", cutout: false, straight: false, boundary: false, emits: false, uv: true, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv Some(0) shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:6787da8eacebee45 camera=2:6787da8eacebee45 shadow=2:6787da8eacebee45 indirect=2:6787da8eacebee45 +geom 4: material #4 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:7812e24c7b4d4335 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=2:7812e24c7b4d4335 +provenance material /World/Looks/Base: MaterialOrigin { slots: [1], displaced: false } +provenance material /World/Looks/Derived: MaterialOrigin { slots: [0], displaced: false } +provenance material /World/Looks/Std: MaterialOrigin { slots: [2], displaced: false } +provenance material /World/Looks/Tex: MaterialOrigin { slots: [3], displaced: false } +provenance material read: ("/World/Looks/Base", "/World/Looks/Derived") +provenance material read: ("/World/Looks/Base/Surface", "/World/Looks/Derived") +provenance arc source: /World/Looks/Base +provenance arc source: /World/Looks/Base/Surface +provenance light /World/Key: LightOrigin { index: 0, geoms: 4..5 } +provenance light /World/Sky: LightOrigin { index: 1, geoms: 5..5 } +provenance geometry 0..1: /World/Right +provenance geometry 1..2: /World/Left +provenance geometry 2..3: /World/Ball +provenance geometry 3..4: /World/Floor +provenance geometry 4..5: /World/Key +provenance mesh: MeshOrigin { geom_id: 3, slot: 0, baked: true, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 9851181043634021438, n_points: 4, n_indices: 4, n_uvs: Some(4), smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [0, 1, 2] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: true }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/World/Cam"), cameras: ["/World/Cam"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/World/Cam"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/lookdev_usda-fad17720e6382b8f-1.image b/crates/crust-core/tests/data/import_baselines/lookdev_usda-fad17720e6382b8f-1.image new file mode 100644 index 000000000..11828d811 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/lookdev_usda-fad17720e6382b8f-1.image @@ -0,0 +1 @@ +48x32 16spp clamp-off a22f3882aa730ddf diff --git a/crates/crust-core/tests/data/import_baselines/loop_plain_usda-47275a5a5923eb53-1.digest b/crates/crust-core/tests/data/import_baselines/loop_plain_usda-47275a5a5923eb53-1.digest new file mode 100644 index 000000000..3f10be27e --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/loop_plain_usda-47275a5a5923eb53-1.digest @@ -0,0 +1,21 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: None +camera: Camera { origin: Vec3A(15.0, 3.0, 3.0), lower_left_corner: Vec3A(4.8863316, -0.044797063, 4.174048), horizontal: Vec3A(1.2295314, 0.0, -6.147657), vertical: Vec3A(-0.44830504, 3.4967792, -0.08966101), u: Vec3A(0.19611613, 0.0, -0.9805807), v: Vec3A(-0.1271232, 0.991561, -0.02542464), lens_radius: 0.05, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: None +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 640, height: 360, region: PixelRect { x0: 0, y0: 0, x1: 640, y1: 360 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: None, depth_of_field: true, motion_blur: false, layer_stack: ["$DIR/loop_plain.usda"], invisible_overrides: Some(0) } +layer: $DIR/loop_plain.usda +warning: Warning { code: CameraMissing, kind: Skipped, count: 1, prims: [], message: "USD stage has no UsdGeomCamera — falling back to world::get_settings camera" } +lights: 0 +volumes: 0 +world: 1 geometries, PrimitiveBreakdown { triangles: 8, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 8, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=8:0045db54568c1f6e camera=8:0045db54568c1f6e shadow=8:0045db54568c1f6e indirect=8:0045db54568c1f6e +provenance geometry 0..1: /World/Tris +provenance mesh: MeshOrigin { geom_id: 0, slot: 0, baked: true, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 3036682394347508041, n_points: 9, n_indices: 24, n_uvs: None, smooth: true, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: Some(1), subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 1, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: None, cameras: [], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: None, offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/loop_plain_usda-47275a5a5923eb53-1.image b/crates/crust-core/tests/data/import_baselines/loop_plain_usda-47275a5a5923eb53-1.image new file mode 100644 index 000000000..c734c5b1d --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/loop_plain_usda-47275a5a5923eb53-1.image @@ -0,0 +1 @@ +640x360 16spp clamp-off a04a09c0d4b5e325 diff --git a/crates/crust-core/tests/data/import_baselines/loop_ptex_usda-305da98d6891c0e8-1.digest b/crates/crust-core/tests/data/import_baselines/loop_ptex_usda-305da98d6891c0e8-1.digest new file mode 100644 index 000000000..edcc85c62 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/loop_ptex_usda-305da98d6891c0e8-1.digest @@ -0,0 +1,24 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: None +camera: Camera { origin: Vec3A(15.0, 3.0, 3.0), lower_left_corner: Vec3A(4.8863316, -0.044797063, 4.174048), horizontal: Vec3A(1.2295314, 0.0, -6.147657), vertical: Vec3A(-0.44830504, 3.4967792, -0.08966101), u: Vec3A(0.19611613, 0.0, -0.9805807), v: Vec3A(-0.1271232, 0.991561, -0.02542464), lens_radius: 0.05, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: None +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 640, height: 360, region: PixelRect { x0: 0, y0: 0, x1: 640, y1: 360 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: None, depth_of_field: true, motion_blur: false, layer_stack: ["$DIR/loop_ptex.usda"], invisible_overrides: Some(0) } +layer: $DIR/loop_ptex.usda +warning: Warning { code: SubdivLoopPtex, kind: Approximated, count: 1, prims: ["/World/Tris"], message: "Mesh at /World/Tris: subdivisionScheme = loop with a per-face (Ptex) texture cannot keep its face ids through refinement — rendering the smooth base cage" } +warning: Warning { code: MeshPtexFaceMismatch, kind: Approximated, count: 1, prims: ["/World/Tris"], message: "Mesh at /World/Tris has 2 faces but its per-face texture has 1 — the texture does not match this geometry, so shading will be wrong" } +warning: Warning { code: CameraMissing, kind: Skipped, count: 1, prims: [], message: "USD stage has no UsdGeomCamera — falling back to world::get_settings camera" } +lights: 0 +volumes: 0 +world: 1 geometries, PrimitiveBreakdown { triangles: 2, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 2, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: Some(1), curve: None, primvars: Some([]) } class 65535 holdout false transparent false map Some(0) uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:02ff87c392969355 camera=2:02ff87c392969355 shadow=2:02ff87c392969355 indirect=2:02ff87c392969355 +provenance material /World/Looks/Rock: MaterialOrigin { slots: [0], displaced: false } +provenance geometry 0..1: /World/Tris +provenance mesh: MeshOrigin { geom_id: 0, slot: 0, baked: true, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 14901821066754195219, n_points: 4, n_indices: 6, n_uvs: None, smooth: true, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: Some(1), subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 1, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: None, cameras: [], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: None, offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/loop_ptex_usda-305da98d6891c0e8-1.image b/crates/crust-core/tests/data/import_baselines/loop_ptex_usda-305da98d6891c0e8-1.image new file mode 100644 index 000000000..c734c5b1d --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/loop_ptex_usda-305da98d6891c0e8-1.image @@ -0,0 +1 @@ +640x360 16spp clamp-off a04a09c0d4b5e325 diff --git a/crates/crust-core/tests/data/import_baselines/lpe_too_complex_usda-d110af4b6d4f2169-1.digest b/crates/crust-core/tests/data/import_baselines/lpe_too_complex_usda-d110af4b6d4f2169-1.digest new file mode 100644 index 000000000..794314171 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/lpe_too_complex_usda-d110af4b6d4f2169-1.digest @@ -0,0 +1,19 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/World/other") +camera: Camera { origin: Vec3A(0.0, 0.0, 0.0), lower_left_corner: Vec3A(-2.7183647, -1.5290802, -10.0), horizontal: Vec3A(5.4367294, 0.0, 0.0), vertical: Vec3A(0.0, 3.0581603, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: Some("/Render/settings") +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 640, height: 360, region: PixelRect { x0: 0, y0: 0, x1: 640, y1: 360 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [AovProduct { prim_path: "/Render/p", name: "p.exr", vars: [AovVar { prim_path: "/Render/ok", name: "ok", channel_prefix: None, source: Lpe, components: 3, precision: Float, accumulation: Filtered, clear: 0.0, expression: Some("C[LO]"), raw: false, variance: false }, AovVar { prim_path: "/Render/also_ok", name: "also_ok", channel_prefix: None, source: Lpe, components: 3, precision: Float, accumulation: Filtered, clear: 0.0, expression: Some("C.*[LO]"), raw: false, variance: false }], attributes: [] }], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 50.0, aperture: [20.955, 15.2908], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 10.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/lpe_too_complex.usda"], invisible_overrides: Some(0) } +layer: $DIR/lpe_too_complex.usda +warning: Warning { code: LpeInvalid, kind: Skipped, count: 2, prims: ["/Render/blowup", "/Render/nested"], message: "/Render/blowup: light path expression \"C.*.{16}[LO]\" refused: the expressions need more than 4096 automaton states" } +lights: 0 +volumes: 0 +world: 1 geometries, PrimitiveBreakdown { triangles: 0, spheres: 1, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 0, spheres: 1, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:fb1e7d48790aec95 camera=1:fb1e7d48790aec95 shadow=1:fb1e7d48790aec95 indirect=1:fb1e7d48790aec95 +provenance geometry 0..1: /World/ball +provenance spheres: [0] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/World/other"), cameras: ["/World/other", "/World/cam"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/World/other"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/lpe_too_complex_usda-d110af4b6d4f2169-1.image b/crates/crust-core/tests/data/import_baselines/lpe_too_complex_usda-d110af4b6d4f2169-1.image new file mode 100644 index 000000000..c734c5b1d --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/lpe_too_complex_usda-d110af4b6d4f2169-1.image @@ -0,0 +1 @@ +640x360 16spp clamp-off a04a09c0d4b5e325 diff --git a/crates/crust-core/tests/data/import_baselines/lpe_variance_usda-eb6b4998eed83db2-1.digest b/crates/crust-core/tests/data/import_baselines/lpe_variance_usda-eb6b4998eed83db2-1.digest new file mode 100644 index 000000000..b9dd3ff98 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/lpe_variance_usda-eb6b4998eed83db2-1.digest @@ -0,0 +1,19 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/World/other") +camera: Camera { origin: Vec3A(0.0, 0.0, 0.0), lower_left_corner: Vec3A(-2.7183647, -1.5290802, -10.0), horizontal: Vec3A(5.4367294, 0.0, 0.0), vertical: Vec3A(0.0, 3.0581603, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: Some("/Render/settings") +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 640, height: 360, region: PixelRect { x0: 0, y0: 0, x1: 640, y1: 360 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [AovProduct { prim_path: "/Render/p", name: "p.exr", vars: [AovVar { prim_path: "/Render/gi", name: "gi", channel_prefix: None, source: Lpe, components: 3, precision: Float, accumulation: Filtered, clear: 0.0, expression: Some("C.+[LO]"), raw: false, variance: false }, AovVar { prim_path: "/Render/gi_var", name: "gi_var", channel_prefix: None, source: Lpe, components: 1, precision: Float, accumulation: Filtered, clear: 0.0, expression: Some("C.+[LO]"), raw: false, variance: true }, AovVar { prim_path: "/Render/gi_var_half", name: "gi_var_half", channel_prefix: None, source: Lpe, components: 1, precision: Half, accumulation: Filtered, clear: 0.0, expression: Some("C.+[LO]"), raw: false, variance: true }, AovVar { prim_path: "/Render/raw_var", name: "raw_var", channel_prefix: None, source: Lpe, components: 1, precision: Float, accumulation: Filtered, clear: 0.0, expression: Some("C[LO]"), raw: true, variance: true }], attributes: [] }], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 50.0, aperture: [20.955, 15.2908], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 10.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/lpe_variance.usda"], invisible_overrides: Some(0) } +layer: $DIR/lpe_variance.usda +warning: Warning { code: AovInvalidVariance, kind: Skipped, count: 4, prims: ["/Render/on_raw_source", "/Render/on_variance", "/Render/closest", "/Render/as_color"], message: "/Render/on_raw_source: crust:aov:variance applies to light path expressions (sourceType \"lpe\"), not sourceType \"raw\"; no channel written" } +lights: 0 +volumes: 0 +world: 1 geometries, PrimitiveBreakdown { triangles: 0, spheres: 1, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 0, spheres: 1, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:fb1e7d48790aec95 camera=1:fb1e7d48790aec95 shadow=1:fb1e7d48790aec95 indirect=1:fb1e7d48790aec95 +provenance geometry 0..1: /World/ball +provenance spheres: [0] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/World/other"), cameras: ["/World/other", "/World/cam"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/World/other"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/lpe_variance_usda-eb6b4998eed83db2-1.image b/crates/crust-core/tests/data/import_baselines/lpe_variance_usda-eb6b4998eed83db2-1.image new file mode 100644 index 000000000..c734c5b1d --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/lpe_variance_usda-eb6b4998eed83db2-1.image @@ -0,0 +1 @@ +640x360 16spp clamp-off a04a09c0d4b5e325 diff --git a/crates/crust-core/tests/data/import_baselines/lpe_vars_usda-4a1166013a93c744-1.digest b/crates/crust-core/tests/data/import_baselines/lpe_vars_usda-4a1166013a93c744-1.digest new file mode 100644 index 000000000..14ac9ccb9 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/lpe_vars_usda-4a1166013a93c744-1.digest @@ -0,0 +1,19 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/World/other") +camera: Camera { origin: Vec3A(0.0, 0.0, 0.0), lower_left_corner: Vec3A(-2.7183647, -1.5290802, -10.0), horizontal: Vec3A(5.4367294, 0.0, 0.0), vertical: Vec3A(0.0, 3.0581603, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: Some("/Render/settings") +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 640, height: 360, region: PixelRect { x0: 0, y0: 0, x1: 640, y1: 360 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [AovProduct { prim_path: "/Render/p", name: "p.exr", vars: [AovVar { prim_path: "/Render/diffuse", name: "diffuse", channel_prefix: None, source: Lpe, components: 3, precision: Float, accumulation: Filtered, clear: 0.0, expression: Some("C[LO]"), raw: false, variance: false }, AovVar { prim_path: "/Render/prefixed", name: "prefixed", channel_prefix: None, source: Lpe, components: 3, precision: Float, accumulation: Filtered, clear: 0.0, expression: Some("C.*"), raw: false, variance: false }, AovVar { prim_path: "/Render/rgba", name: "rgba", channel_prefix: None, source: Lpe, components: 4, precision: Float, accumulation: Filtered, clear: 0.0, expression: Some("C.*L"), raw: false, variance: false }, AovVar { prim_path: "/Render/albedo", name: "albedo", channel_prefix: None, source: Albedo, components: 3, precision: Float, accumulation: Filtered, clear: 0.0, expression: None, raw: false, variance: false }], attributes: [] }], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 50.0, aperture: [20.955, 15.2908], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 10.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/lpe_vars.usda"], invisible_overrides: Some(0) } +layer: $DIR/lpe_vars.usda +warning: Warning { code: AovTypeMismatch, kind: Skipped, count: 1, prims: ["/Render/scalar"], message: "/Render/scalar: lpe cannot be written as \"float\"; no channel written" } +lights: 0 +volumes: 0 +world: 1 geometries, PrimitiveBreakdown { triangles: 0, spheres: 1, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 0, spheres: 1, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:fb1e7d48790aec95 camera=1:fb1e7d48790aec95 shadow=1:fb1e7d48790aec95 indirect=1:fb1e7d48790aec95 +provenance geometry 0..1: /World/ball +provenance spheres: [0] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/World/other"), cameras: ["/World/other", "/World/cam"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/World/other"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/lpe_vars_usda-4a1166013a93c744-1.image b/crates/crust-core/tests/data/import_baselines/lpe_vars_usda-4a1166013a93c744-1.image new file mode 100644 index 000000000..c734c5b1d --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/lpe_vars_usda-4a1166013a93c744-1.image @@ -0,0 +1 @@ +640x360 16spp clamp-off a04a09c0d4b5e325 diff --git a/crates/crust-core/tests/data/import_baselines/malformed_usda-6eca12ea39b96a60-1.digest b/crates/crust-core/tests/data/import_baselines/malformed_usda-6eca12ea39b96a60-1.digest new file mode 100644 index 000000000..d1984b5e4 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/malformed_usda-6eca12ea39b96a60-1.digest @@ -0,0 +1,31 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/World/cam") +camera: Camera { origin: Vec3A(0.0, 0.0, 10.0), lower_left_corner: Vec3A(-2.0955, -1.5716249, 0.0), horizontal: Vec3A(4.191, 0.0, 0.0), vertical: Vec3A(0.0, 3.1432498, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: Some("/Render/settings") +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 48, height: 36, region: PixelRect { x0: 0, y0: 0, x1: 48, y1: 36 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [AovProduct { prim_path: "/Render/p", name: "p.exr", vars: [AovVar { prim_path: "/Render/P", name: "P", channel_prefix: None, source: P, components: 3, precision: Float, accumulation: Closest, clear: 0.0, expression: None, raw: false, variance: false }, AovVar { prim_path: "/Render/Pref", name: "Pref", channel_prefix: None, source: Primvar(PrimvarSource { index: 0, components: 3, role: Vector }), components: 3, precision: Float, accumulation: Closest, clear: 0.0, expression: None, raw: false, variance: false }], attributes: [] }], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 50.0, aperture: [20.955, 15.2908], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 10.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/malformed.usda"], invisible_overrides: Some(0) } +layer: $DIR/malformed.usda +warning: Warning { code: PrimvarMismatch, kind: Skipped, count: 2, prims: ["/World/bad_index", "/World/array"], message: "/Render/Pref asks for primvar \"rest\" as 3 component(s), but /World/bad_index authors it as point3f[] (indices out of its values' range); that prim reads the clear value" } +lights: 1 +light 0: dome name Some("/World/dome") lpe None pmf 1.0 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 3 geometries, PrimitiveBreakdown { triangles: 6, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 6, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:5ba058a899a8d068 camera=2:5ba058a899a8d068 shadow=2:5ba058a899a8d068 indirect=2:5ba058a899a8d068 +geom 1: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:6c4a5c3fcab4e355 camera=2:6c4a5c3fcab4e355 shadow=2:6c4a5c3fcab4e355 indirect=2:6c4a5c3fcab4e355 +geom 2: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov Some((Some(0), false)) swapped false curves false scale 1.0 motion [] pieces all=2:1df46b72c7566378 camera=2:1df46b72c7566378 shadow=2:1df46b72c7566378 indirect=2:1df46b72c7566378 +provenance light /World/dome: LightOrigin { index: 0, geoms: 3..3 } +provenance geometry 0..1: /World/bad_index +provenance geometry 1..2: /World/array +provenance geometry 2..3: /World/varying +provenance mesh: MeshOrigin { geom_id: 0, slot: 0, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 1, slot: 1, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 2, slot: 2, baked: true, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 8915584968090228797, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 1: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 17547429537265271531, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 2: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 1413835526155452052, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/World/cam"), cameras: ["/World/cam"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [("rest", 3)], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/World/cam"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/malformed_usda-6eca12ea39b96a60-1.image b/crates/crust-core/tests/data/import_baselines/malformed_usda-6eca12ea39b96a60-1.image new file mode 100644 index 000000000..6b5b90725 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/malformed_usda-6eca12ea39b96a60-1.image @@ -0,0 +1 @@ +48x36 16spp clamp-off 47c4c250dfa669eb diff --git a/crates/crust-core/tests/data/import_baselines/many_lights_usda-2896f3594596fed9-1.digest b/crates/crust-core/tests/data/import_baselines/many_lights_usda-2896f3594596fed9-1.digest new file mode 100644 index 000000000..a9a03d26c --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/many_lights_usda-2896f3594596fed9-1.digest @@ -0,0 +1,1062 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/World/Cam") +camera: Camera { origin: Vec3A(0.0, 14.0, 26.0), lower_left_corner: Vec3A(-9.000002, 4.6157455, 19.870996), horizontal: Vec3A(18.000004, -0.0, 0.0), vertical: Vec3A(0.0, 8.768508, -5.062501), u: Vec3A(1.0, -0.0, 0.0), v: Vec3A(0.0, 0.8660253, -0.5), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: Some("/Render/settings") +settings: RenderSettings { samples_per_pixel: 64, max_depth: 4, width: 480, height: 270, region: PixelRect { x0: 0, y0: 0, x1: 480, y1: 270 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 20.0, aperture: [36.0, 15.2908], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 10.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/many_lights.usda"], invisible_overrides: Some(0) } +layer: $DIR/many_lights.usda +lights: 257 +light 0: dome name Some("/World/Fill") lpe None pmf 0.0038910506 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 1: area name Some("/World/Spot15") lpe None pmf 0.0038910506 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 2: area name Some("/World/Spot14") lpe None pmf 0.0038910506 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 3: area name Some("/World/Spot13") lpe None pmf 0.0038910506 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 4: area name Some("/World/Spot12") lpe None pmf 0.0038910506 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 5: area name Some("/World/Spot11") lpe None pmf 0.0038910506 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 6: area name Some("/World/Spot10") lpe None pmf 0.0038910506 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 7: area name Some("/World/Spot09") lpe None pmf 0.0038910506 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 8: area name Some("/World/Spot08") lpe None pmf 0.0038910506 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 9: area name Some("/World/Spot07") lpe None pmf 0.0038910506 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 10: area name Some("/World/Spot06") lpe None pmf 0.0038910506 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 11: area name Some("/World/Spot05") lpe None pmf 0.0038910506 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 12: area name Some("/World/Spot04") lpe None pmf 0.0038910506 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 13: area name Some("/World/Spot03") lpe None pmf 0.0038910506 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 14: area name Some("/World/Spot02") lpe None pmf 0.0038910506 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 15: area name Some("/World/Spot01") lpe None pmf 0.0038910506 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 16: area name Some("/World/Spot00") lpe None pmf 0.0038910506 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 17: area name Some("/World/Panel079") lpe None pmf 0.0038910506 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 18: area name Some("/World/Panel078") lpe None pmf 0.0038910506 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 19: area name Some("/World/Panel077") lpe None pmf 0.0038910506 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 20: area name Some("/World/Panel076") lpe None pmf 0.0038910506 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 21: area name Some("/World/Panel075") lpe None pmf 0.0038910506 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 22: area name Some("/World/Panel074") lpe None pmf 0.0038910506 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 23: area name Some("/World/Panel073") lpe None pmf 0.0038910506 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 24: area name Some("/World/Panel072") lpe None pmf 0.0038910506 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 25: area name Some("/World/Panel071") lpe None pmf 0.0038910506 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 26: area name Some("/World/Panel070") lpe None pmf 0.0038910506 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 27: area name Some("/World/Panel069") lpe None pmf 0.0038910506 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 28: area name Some("/World/Panel068") lpe None pmf 0.0038910506 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 29: area name Some("/World/Panel067") lpe None pmf 0.0038910506 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 30: area name Some("/World/Panel066") lpe None pmf 0.0038910506 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 31: area name Some("/World/Panel065") lpe None pmf 0.0038910506 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 32: area name Some("/World/Panel064") lpe None pmf 0.0038910506 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 33: area name Some("/World/Panel063") lpe None pmf 0.0038910506 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 34: area name Some("/World/Panel062") lpe None pmf 0.0038910506 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 35: area name Some("/World/Panel061") lpe None pmf 0.0038910506 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 36: area name Some("/World/Panel060") lpe None pmf 0.0038910506 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 37: area name Some("/World/Panel059") lpe None pmf 0.0038910506 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 38: area name Some("/World/Panel058") lpe None pmf 0.0038910506 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 39: area name Some("/World/Panel057") lpe None pmf 0.0038910506 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 40: area name Some("/World/Panel056") lpe None pmf 0.0038910506 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 41: area name Some("/World/Panel055") lpe None pmf 0.0038910506 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 42: area name Some("/World/Panel054") lpe None pmf 0.0038910506 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 43: area name Some("/World/Panel053") lpe None pmf 0.0038910506 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 44: area name Some("/World/Panel052") lpe None pmf 0.0038910506 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 45: area name Some("/World/Panel051") lpe None pmf 0.0038910506 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 46: area name Some("/World/Panel050") lpe None pmf 0.0038910506 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 47: area name Some("/World/Panel049") lpe None pmf 0.0038910506 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 48: area name Some("/World/Panel048") lpe None pmf 0.0038910506 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 49: area name Some("/World/Panel047") lpe None pmf 0.0038910506 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 50: area name Some("/World/Panel046") lpe None pmf 0.0038910506 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 51: area name Some("/World/Panel045") lpe None pmf 0.0038910506 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 52: area name Some("/World/Panel044") lpe None pmf 0.0038910506 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 53: area name Some("/World/Panel043") lpe None pmf 0.0038910506 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 54: area name Some("/World/Panel042") lpe None pmf 0.0038910506 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 55: area name Some("/World/Panel041") lpe None pmf 0.0038910506 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 56: area name Some("/World/Panel040") lpe None pmf 0.0038910506 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 57: area name Some("/World/Panel039") lpe None pmf 0.0038910506 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 58: area name Some("/World/Panel038") lpe None pmf 0.0038910506 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 59: area name Some("/World/Panel037") lpe None pmf 0.0038910506 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 60: area name Some("/World/Panel036") lpe None pmf 0.0038910506 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 61: area name Some("/World/Panel035") lpe None pmf 0.0038910506 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 62: area name Some("/World/Panel034") lpe None pmf 0.0038910506 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 63: area name Some("/World/Panel033") lpe None pmf 0.0038910506 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 64: area name Some("/World/Panel032") lpe None pmf 0.0038910506 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 65: area name Some("/World/Panel031") lpe None pmf 0.0038910506 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 66: area name Some("/World/Panel030") lpe None pmf 0.0038910506 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 67: area name Some("/World/Panel029") lpe None pmf 0.0038910506 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 68: area name Some("/World/Panel028") lpe None pmf 0.0038910506 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 69: area name Some("/World/Panel027") lpe None pmf 0.0038910506 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 70: area name Some("/World/Panel026") lpe None pmf 0.0038910506 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 71: area name Some("/World/Panel025") lpe None pmf 0.0038910506 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 72: area name Some("/World/Panel024") lpe None pmf 0.0038910506 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 73: area name Some("/World/Panel023") lpe None pmf 0.0038910506 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 74: area name Some("/World/Panel022") lpe None pmf 0.0038910506 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 75: area name Some("/World/Panel021") lpe None pmf 0.0038910506 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 76: area name Some("/World/Panel020") lpe None pmf 0.0038910506 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 77: area name Some("/World/Panel019") lpe None pmf 0.0038910506 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 78: area name Some("/World/Panel018") lpe None pmf 0.0038910506 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 79: area name Some("/World/Panel017") lpe None pmf 0.0038910506 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 80: area name Some("/World/Panel016") lpe None pmf 0.0038910506 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 81: area name Some("/World/Panel015") lpe None pmf 0.0038910506 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 82: area name Some("/World/Panel014") lpe None pmf 0.0038910506 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 83: area name Some("/World/Panel013") lpe None pmf 0.0038910506 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 84: area name Some("/World/Panel012") lpe None pmf 0.0038910506 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 85: area name Some("/World/Panel011") lpe None pmf 0.0038910506 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 86: area name Some("/World/Panel010") lpe None pmf 0.0038910506 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 87: area name Some("/World/Panel009") lpe None pmf 0.0038910506 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 88: area name Some("/World/Panel008") lpe None pmf 0.0038910506 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 89: area name Some("/World/Panel007") lpe None pmf 0.0038910506 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 90: area name Some("/World/Panel006") lpe None pmf 0.0038910506 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 91: area name Some("/World/Panel005") lpe None pmf 0.0038910506 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 92: area name Some("/World/Panel004") lpe None pmf 0.0038910506 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 93: area name Some("/World/Panel003") lpe None pmf 0.0038910506 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 94: area name Some("/World/Panel002") lpe None pmf 0.0038910506 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 95: area name Some("/World/Panel001") lpe None pmf 0.0038910506 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 96: area name Some("/World/Panel000") lpe None pmf 0.0038910506 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 97: area name Some("/World/Sphere159") lpe None pmf 0.0038910506 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 98: area name Some("/World/Sphere158") lpe None pmf 0.0038910506 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 99: area name Some("/World/Sphere157") lpe None pmf 0.0038910506 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 100: area name Some("/World/Sphere156") lpe None pmf 0.0038910506 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 101: area name Some("/World/Sphere155") lpe None pmf 0.0038910506 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 102: area name Some("/World/Sphere154") lpe None pmf 0.0038910506 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 103: area name Some("/World/Sphere153") lpe None pmf 0.0038910506 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 104: area name Some("/World/Sphere152") lpe None pmf 0.0038910506 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 105: area name Some("/World/Sphere151") lpe None pmf 0.0038910506 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 106: area name Some("/World/Sphere150") lpe None pmf 0.0038910506 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 107: area name Some("/World/Sphere149") lpe None pmf 0.0038910506 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 108: area name Some("/World/Sphere148") lpe None pmf 0.0038910506 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 109: area name Some("/World/Sphere147") lpe None pmf 0.0038910506 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 110: area name Some("/World/Sphere146") lpe None pmf 0.0038910506 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 111: area name Some("/World/Sphere145") lpe None pmf 0.0038910506 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 112: area name Some("/World/Sphere144") lpe None pmf 0.0038910506 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 113: area name Some("/World/Sphere143") lpe None pmf 0.0038910506 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 114: area name Some("/World/Sphere142") lpe None pmf 0.0038910506 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 115: area name Some("/World/Sphere141") lpe None pmf 0.0038910506 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 116: area name Some("/World/Sphere140") lpe None pmf 0.0038910506 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 117: area name Some("/World/Sphere139") lpe None pmf 0.0038910506 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 118: area name Some("/World/Sphere138") lpe None pmf 0.0038910506 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 119: area name Some("/World/Sphere137") lpe None pmf 0.0038910506 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 120: area name Some("/World/Sphere136") lpe None pmf 0.0038910506 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 121: area name Some("/World/Sphere135") lpe None pmf 0.0038910506 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 122: area name Some("/World/Sphere134") lpe None pmf 0.0038910506 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 123: area name Some("/World/Sphere133") lpe None pmf 0.0038910506 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 124: area name Some("/World/Sphere132") lpe None pmf 0.0038910506 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 125: area name Some("/World/Sphere131") lpe None pmf 0.0038910506 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 126: area name Some("/World/Sphere130") lpe None pmf 0.0038910506 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 127: area name Some("/World/Sphere129") lpe None pmf 0.0038910506 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 128: area name Some("/World/Sphere128") lpe None pmf 0.0038910506 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 129: area name Some("/World/Sphere127") lpe None pmf 0.0038910506 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 130: area name Some("/World/Sphere126") lpe None pmf 0.0038910506 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 131: area name Some("/World/Sphere125") lpe None pmf 0.0038910506 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 132: area name Some("/World/Sphere124") lpe None pmf 0.0038910506 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 133: area name Some("/World/Sphere123") lpe None pmf 0.0038910506 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 134: area name Some("/World/Sphere122") lpe None pmf 0.0038910506 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 135: area name Some("/World/Sphere121") lpe None pmf 0.0038910506 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 136: area name Some("/World/Sphere120") lpe None pmf 0.0038910506 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 137: area name Some("/World/Sphere119") lpe None pmf 0.0038910506 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 138: area name Some("/World/Sphere118") lpe None pmf 0.0038910506 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 139: area name Some("/World/Sphere117") lpe None pmf 0.0038910506 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 140: area name Some("/World/Sphere116") lpe None pmf 0.0038910506 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 141: area name Some("/World/Sphere115") lpe None pmf 0.0038910506 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 142: area name Some("/World/Sphere114") lpe None pmf 0.0038910506 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 143: area name Some("/World/Sphere113") lpe None pmf 0.0038910506 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 144: area name Some("/World/Sphere112") lpe None pmf 0.0038910506 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 145: area name Some("/World/Sphere111") lpe None pmf 0.0038910506 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 146: area name Some("/World/Sphere110") lpe None pmf 0.0038910506 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 147: area name Some("/World/Sphere109") lpe None pmf 0.0038910506 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 148: area name Some("/World/Sphere108") lpe None pmf 0.0038910506 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 149: area name Some("/World/Sphere107") lpe None pmf 0.0038910506 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 150: area name Some("/World/Sphere106") lpe None pmf 0.0038910506 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 151: area name Some("/World/Sphere105") lpe None pmf 0.0038910506 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 152: area name Some("/World/Sphere104") lpe None pmf 0.0038910506 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 153: area name Some("/World/Sphere103") lpe None pmf 0.0038910506 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 154: area name Some("/World/Sphere102") lpe None pmf 0.0038910506 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 155: area name Some("/World/Sphere101") lpe None pmf 0.0038910506 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 156: area name Some("/World/Sphere100") lpe None pmf 0.0038910506 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 157: area name Some("/World/Sphere099") lpe None pmf 0.0038910506 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 158: area name Some("/World/Sphere098") lpe None pmf 0.0038910506 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 159: area name Some("/World/Sphere097") lpe None pmf 0.0038910506 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 160: area name Some("/World/Sphere096") lpe None pmf 0.0038910506 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 161: area name Some("/World/Sphere095") lpe None pmf 0.0038910506 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 162: area name Some("/World/Sphere094") lpe None pmf 0.0038910506 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 163: area name Some("/World/Sphere093") lpe None pmf 0.0038910506 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 164: area name Some("/World/Sphere092") lpe None pmf 0.0038910506 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 165: area name Some("/World/Sphere091") lpe None pmf 0.0038910506 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 166: area name Some("/World/Sphere090") lpe None pmf 0.0038910506 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 167: area name Some("/World/Sphere089") lpe None pmf 0.0038910506 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 168: area name Some("/World/Sphere088") lpe None pmf 0.0038910506 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 169: area name Some("/World/Sphere087") lpe None pmf 0.0038910506 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 170: area name Some("/World/Sphere086") lpe None pmf 0.0038910506 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 171: area name Some("/World/Sphere085") lpe None pmf 0.0038910506 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 172: area name Some("/World/Sphere084") lpe None pmf 0.0038910506 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 173: area name Some("/World/Sphere083") lpe None pmf 0.0038910506 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 174: area name Some("/World/Sphere082") lpe None pmf 0.0038910506 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 175: area name Some("/World/Sphere081") lpe None pmf 0.0038910506 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 176: area name Some("/World/Sphere080") lpe None pmf 0.0038910506 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 177: area name Some("/World/Sphere079") lpe None pmf 0.0038910506 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 178: area name Some("/World/Sphere078") lpe None pmf 0.0038910506 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 179: area name Some("/World/Sphere077") lpe None pmf 0.0038910506 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 180: area name Some("/World/Sphere076") lpe None pmf 0.0038910506 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 181: area name Some("/World/Sphere075") lpe None pmf 0.0038910506 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 182: area name Some("/World/Sphere074") lpe None pmf 0.0038910506 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 183: area name Some("/World/Sphere073") lpe None pmf 0.0038910506 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 184: area name Some("/World/Sphere072") lpe None pmf 0.0038910506 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 185: area name Some("/World/Sphere071") lpe None pmf 0.0038910506 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 186: area name Some("/World/Sphere070") lpe None pmf 0.0038910506 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 187: area name Some("/World/Sphere069") lpe None pmf 0.0038910506 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 188: area name Some("/World/Sphere068") lpe None pmf 0.0038910506 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 189: area name Some("/World/Sphere067") lpe None pmf 0.0038910506 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 190: area name Some("/World/Sphere066") lpe None pmf 0.0038910506 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 191: area name Some("/World/Sphere065") lpe None pmf 0.0038910506 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 192: area name Some("/World/Sphere064") lpe None pmf 0.0038910506 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 193: area name Some("/World/Sphere063") lpe None pmf 0.0038910506 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 194: area name Some("/World/Sphere062") lpe None pmf 0.0038910506 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 195: area name Some("/World/Sphere061") lpe None pmf 0.0038910506 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 196: area name Some("/World/Sphere060") lpe None pmf 0.0038910506 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 197: area name Some("/World/Sphere059") lpe None pmf 0.0038910506 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 198: area name Some("/World/Sphere058") lpe None pmf 0.0038910506 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 199: area name Some("/World/Sphere057") lpe None pmf 0.0038910506 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 200: area name Some("/World/Sphere056") lpe None pmf 0.0038910506 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 201: area name Some("/World/Sphere055") lpe None pmf 0.0038910506 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 202: area name Some("/World/Sphere054") lpe None pmf 0.0038910506 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 203: area name Some("/World/Sphere053") lpe None pmf 0.0038910506 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 204: area name Some("/World/Sphere052") lpe None pmf 0.0038910506 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 205: area name Some("/World/Sphere051") lpe None pmf 0.0038910506 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 206: area name Some("/World/Sphere050") lpe None pmf 0.0038910506 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 207: area name Some("/World/Sphere049") lpe None pmf 0.0038910506 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 208: area name Some("/World/Sphere048") lpe None pmf 0.0038910506 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 209: area name Some("/World/Sphere047") lpe None pmf 0.0038910506 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 210: area name Some("/World/Sphere046") lpe None pmf 0.0038910506 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 211: area name Some("/World/Sphere045") lpe None pmf 0.0038910506 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 212: area name Some("/World/Sphere044") lpe None pmf 0.0038910506 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 213: area name Some("/World/Sphere043") lpe None pmf 0.0038910506 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 214: area name Some("/World/Sphere042") lpe None pmf 0.0038910506 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 215: area name Some("/World/Sphere041") lpe None pmf 0.0038910506 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 216: area name Some("/World/Sphere040") lpe None pmf 0.0038910506 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 217: area name Some("/World/Sphere039") lpe None pmf 0.0038910506 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 218: area name Some("/World/Sphere038") lpe None pmf 0.0038910506 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 219: area name Some("/World/Sphere037") lpe None pmf 0.0038910506 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 220: area name Some("/World/Sphere036") lpe None pmf 0.0038910506 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 221: area name Some("/World/Sphere035") lpe None pmf 0.0038910506 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 222: area name Some("/World/Sphere034") lpe None pmf 0.0038910506 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 223: area name Some("/World/Sphere033") lpe None pmf 0.0038910506 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 224: area name Some("/World/Sphere032") lpe None pmf 0.0038910506 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 225: area name Some("/World/Sphere031") lpe None pmf 0.0038910506 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 226: area name Some("/World/Sphere030") lpe None pmf 0.0038910506 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 227: area name Some("/World/Sphere029") lpe None pmf 0.0038910506 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 228: area name Some("/World/Sphere028") lpe None pmf 0.0038910506 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 229: area name Some("/World/Sphere027") lpe None pmf 0.0038910506 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 230: area name Some("/World/Sphere026") lpe None pmf 0.0038910506 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 231: area name Some("/World/Sphere025") lpe None pmf 0.0038910506 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 232: area name Some("/World/Sphere024") lpe None pmf 0.0038910506 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 233: area name Some("/World/Sphere023") lpe None pmf 0.0038910506 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 234: area name Some("/World/Sphere022") lpe None pmf 0.0038910506 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 235: area name Some("/World/Sphere021") lpe None pmf 0.0038910506 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 236: area name Some("/World/Sphere020") lpe None pmf 0.0038910506 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 237: area name Some("/World/Sphere019") lpe None pmf 0.0038910506 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 238: area name Some("/World/Sphere018") lpe None pmf 0.0038910506 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 239: area name Some("/World/Sphere017") lpe None pmf 0.0038910506 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 240: area name Some("/World/Sphere016") lpe None pmf 0.0038910506 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 241: area name Some("/World/Sphere015") lpe None pmf 0.0038910506 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 242: area name Some("/World/Sphere014") lpe None pmf 0.0038910506 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 243: area name Some("/World/Sphere013") lpe None pmf 0.0038910506 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 244: area name Some("/World/Sphere012") lpe None pmf 0.0038910506 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 245: area name Some("/World/Sphere011") lpe None pmf 0.0038910506 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 246: area name Some("/World/Sphere010") lpe None pmf 0.0038910506 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 247: area name Some("/World/Sphere009") lpe None pmf 0.0038910506 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 248: area name Some("/World/Sphere008") lpe None pmf 0.0038910506 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 249: area name Some("/World/Sphere007") lpe None pmf 0.0038910506 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 250: area name Some("/World/Sphere006") lpe None pmf 0.0038910506 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 251: area name Some("/World/Sphere005") lpe None pmf 0.0038910506 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 252: area name Some("/World/Sphere004") lpe None pmf 0.0038910506 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 253: area name Some("/World/Sphere003") lpe None pmf 0.0038910506 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 254: area name Some("/World/Sphere002") lpe None pmf 0.0038910506 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 255: area name Some("/World/Sphere001") lpe None pmf 0.0038910506 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 256: area name Some("/World/Sphere000") lpe None pmf 0.0038910506 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 262 geometries, PrimitiveBreakdown { triangles: 194, spheres: 160, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 5 } top level, PrimitiveBreakdown { triangles: 206, spheres: 160, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 5 } unique, motion false +geom 0: material #0 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:188f260f6479aa4e camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=2:188f260f6479aa4e +geom 1: material #1 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:97f45dafeae7396c camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=2:97f45dafeae7396c +geom 2: material #2 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:50faa5f64b009067 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=2:50faa5f64b009067 +geom 3: material #3 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:ebbba4921e332478 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=2:ebbba4921e332478 +geom 4: material #4 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:ff2a5c7e54e0f9db camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=2:ff2a5c7e54e0f9db +geom 5: material #5 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:15036b6847d0d5d8 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=2:15036b6847d0d5d8 +geom 6: material #6 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:71e61c6a60d61f89 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=2:71e61c6a60d61f89 +geom 7: material #7 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:f3217ea4860a8728 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=2:f3217ea4860a8728 +geom 8: material #8 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:8d754f5908ca78e0 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=2:8d754f5908ca78e0 +geom 9: material #9 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:5657f45de0cd5100 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=2:5657f45de0cd5100 +geom 10: material #10 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:c8be539fca9f01fb camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=2:c8be539fca9f01fb +geom 11: material #11 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:d48a20ec03c99200 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=2:d48a20ec03c99200 +geom 12: material #12 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:a7923437effed43d camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=2:a7923437effed43d +geom 13: material #13 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:e3e3808d2094f90a camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=2:e3e3808d2094f90a +geom 14: material #14 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:1e497659eef12a81 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=2:1e497659eef12a81 +geom 15: material #15 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:ffb2ef2f4a649fa6 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=2:ffb2ef2f4a649fa6 +geom 16: material #16 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:5d5e430ff41c1c08 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=2:5d5e430ff41c1c08 +geom 17: material #17 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:8f13d27ca8bbe966 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=2:8f13d27ca8bbe966 +geom 18: material #18 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:8652e2305229cfa0 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=2:8652e2305229cfa0 +geom 19: material #19 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:483a297758388d5c camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=2:483a297758388d5c +geom 20: material #20 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:48e5f0ef3110f507 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=2:48e5f0ef3110f507 +geom 21: material #21 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:ca51c27c8e04bfa2 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=2:ca51c27c8e04bfa2 +geom 22: material #22 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:84e9bace9eab9ec8 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=2:84e9bace9eab9ec8 +geom 23: material #23 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:803d49dff50a2f92 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=2:803d49dff50a2f92 +geom 24: material #24 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:70b184a9244bc562 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=2:70b184a9244bc562 +geom 25: material #25 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:3164ae4a6ea6d628 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=2:3164ae4a6ea6d628 +geom 26: material #26 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:7a60eae3c5968816 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=2:7a60eae3c5968816 +geom 27: material #27 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:bb4cd18f8464d34c camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=2:bb4cd18f8464d34c +geom 28: material #28 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:38f56b391c7ea50c camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=2:38f56b391c7ea50c +geom 29: material #29 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:c3fcfe7c5ed85fba camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=2:c3fcfe7c5ed85fba +geom 30: material #30 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:6e268625717faeb1 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=2:6e268625717faeb1 +geom 31: material #31 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:4b348295ce7972e4 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=2:4b348295ce7972e4 +geom 32: material #32 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:c2b7dd874f5bac98 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=2:c2b7dd874f5bac98 +geom 33: material #33 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:559c4d11d19668c0 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=2:559c4d11d19668c0 +geom 34: material #34 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:77be229f0d292714 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=2:77be229f0d292714 +geom 35: material #35 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:5c5e3e047f91145c camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=2:5c5e3e047f91145c +geom 36: material #36 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:f9c327e97a20da39 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=2:f9c327e97a20da39 +geom 37: material #37 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:819e740103d9eca1 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=2:819e740103d9eca1 +geom 38: material #38 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:1212f418647714b4 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=2:1212f418647714b4 +geom 39: material #39 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:91e281ba2b7c3ed8 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=2:91e281ba2b7c3ed8 +geom 40: material #40 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:8221ec0a7aae962b camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=2:8221ec0a7aae962b +geom 41: material #41 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:642e441ce136ee76 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=2:642e441ce136ee76 +geom 42: material #42 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:dcf19867b54c51ee camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=2:dcf19867b54c51ee +geom 43: material #43 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:f8a9d1e9cb434139 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=2:f8a9d1e9cb434139 +geom 44: material #44 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:8ec3acc16ec533be camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=2:8ec3acc16ec533be +geom 45: material #45 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:9bf7fd7118ebe84b camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=2:9bf7fd7118ebe84b +geom 46: material #46 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:2a1ff2463031af5c camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=2:2a1ff2463031af5c +geom 47: material #47 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:b1cd3ab713320246 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=2:b1cd3ab713320246 +geom 48: material #48 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:735c8859d1ebf01c camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=2:735c8859d1ebf01c +geom 49: material #49 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:cc7113938e1868a5 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=2:cc7113938e1868a5 +geom 50: material #50 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:1969f53dc4c4ea77 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=2:1969f53dc4c4ea77 +geom 51: material #51 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:e6dabd74d1339b52 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=2:e6dabd74d1339b52 +geom 52: material #52 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:612357c385f2578a camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=2:612357c385f2578a +geom 53: material #53 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:8561f9be5e95e3bc camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=2:8561f9be5e95e3bc +geom 54: material #54 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:973e05ae3389609e camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=2:973e05ae3389609e +geom 55: material #55 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:4708e1aa46768578 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=2:4708e1aa46768578 +geom 56: material #56 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:ab79f4992c448603 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=2:ab79f4992c448603 +geom 57: material #57 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:61f6f945726813f9 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=2:61f6f945726813f9 +geom 58: material #58 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:73c8ba55366a587e camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=2:73c8ba55366a587e +geom 59: material #59 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:218c05d1384633dc camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=2:218c05d1384633dc +geom 60: material #60 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:44b7957c677bd226 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=2:44b7957c677bd226 +geom 61: material #61 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:30eecb7c25719c05 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=2:30eecb7c25719c05 +geom 62: material #62 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:176d644e7ee2e684 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=2:176d644e7ee2e684 +geom 63: material #63 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:ec73b763308f9a3d camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=2:ec73b763308f9a3d +geom 64: material #64 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:e915a0aae228bc79 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=2:e915a0aae228bc79 +geom 65: material #65 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:7d6401aa59da4e38 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=2:7d6401aa59da4e38 +geom 66: material #66 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:76f66ce61a14aa96 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=2:76f66ce61a14aa96 +geom 67: material #67 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:d0a2be6dd2ce3c54 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=2:d0a2be6dd2ce3c54 +geom 68: material #68 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:1b5dfcf5e87976c3 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=2:1b5dfcf5e87976c3 +geom 69: material #69 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:9355c82e434ac2ae camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=2:9355c82e434ac2ae +geom 70: material #70 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:a77e58d3ff3a2121 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=2:a77e58d3ff3a2121 +geom 71: material #71 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:93043b72a388e080 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=2:93043b72a388e080 +geom 72: material #72 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:05b2719429e398de camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=2:05b2719429e398de +geom 73: material #73 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:f8a0dd5a739f2fc0 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=2:f8a0dd5a739f2fc0 +geom 74: material #74 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:dca1a43f4a7538ed camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=2:dca1a43f4a7538ed +geom 75: material #75 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:8a2f5974cca942dc camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=2:8a2f5974cca942dc +geom 76: material #76 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:65272fbe17dd0c64 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=2:65272fbe17dd0c64 +geom 77: material #77 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:9060c015c4a0f6b7 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=2:9060c015c4a0f6b7 +geom 78: material #78 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:ec32f023d0468b65 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=2:ec32f023d0468b65 +geom 79: material #79 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:a09de738183c4a9b camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=2:a09de738183c4a9b +geom 80: material #80 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:2bab4c271329769d camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=2:2bab4c271329769d +geom 81: material #81 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:e82dcf28bab67bb5 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=2:e82dcf28bab67bb5 +geom 82: material #82 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:6d6d95bf01b4588f camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=2:6d6d95bf01b4588f +geom 83: material #83 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:6878b98c6d332db9 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=2:6878b98c6d332db9 +geom 84: material #84 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:b0b31b42e1646ca9 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=2:b0b31b42e1646ca9 +geom 85: material #85 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:22ef3600d3ffa0e0 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=2:22ef3600d3ffa0e0 +geom 86: material #86 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:b2a86cb870f0d22b camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=2:b2a86cb870f0d22b +geom 87: material #87 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:c476f12c52f01b49 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=2:c476f12c52f01b49 +geom 88: material #88 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:b05e191db12bfb49 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=2:b05e191db12bfb49 +geom 89: material #89 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:a93852b39b01de54 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=2:a93852b39b01de54 +geom 90: material #90 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:8e04888e8ea9c61b camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=2:8e04888e8ea9c61b +geom 91: material #91 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:d15b848fb52b48dd camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=2:d15b848fb52b48dd +geom 92: material #92 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:e3399568cfdc5a68 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=2:e3399568cfdc5a68 +geom 93: material #93 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:fd3bc52d5481c68b camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=2:fd3bc52d5481c68b +geom 94: material #94 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:4b6bf9a286fa9c3b camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=2:4b6bf9a286fa9c3b +geom 95: material #95 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:6383d37d0761a2db camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=2:6383d37d0761a2db +geom 96: material #96 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:71d02d53d4718c39 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=1:71d02d53d4718c39 +geom 97: material #97 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:400eb2d44fcb9a5f camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=1:400eb2d44fcb9a5f +geom 98: material #98 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:fffd2eb5365a513b camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=1:fffd2eb5365a513b +geom 99: material #99 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:5940a8f1a0c95329 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=1:5940a8f1a0c95329 +geom 100: material #100 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:3b48db8226d17f85 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=1:3b48db8226d17f85 +geom 101: material #101 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:aa1153c63e5ac43a camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=1:aa1153c63e5ac43a +geom 102: material #102 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:bd3bf6f3fc8aec36 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=1:bd3bf6f3fc8aec36 +geom 103: material #103 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:7f6d3a47eae227d1 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=1:7f6d3a47eae227d1 +geom 104: material #104 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:7a7b74661ebf0e33 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=1:7a7b74661ebf0e33 +geom 105: material #105 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:107fa63ad1e17fbe camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=1:107fa63ad1e17fbe +geom 106: material #106 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:f3e0558ff85941c1 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=1:f3e0558ff85941c1 +geom 107: material #107 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:14d37fd8433b6789 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=1:14d37fd8433b6789 +geom 108: material #108 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:b6168793b8d79637 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=1:b6168793b8d79637 +geom 109: material #109 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:dc663f564b4abf96 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=1:dc663f564b4abf96 +geom 110: material #110 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:bc1ab26495c75862 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=1:bc1ab26495c75862 +geom 111: material #111 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:9db71c4e77fa28d8 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=1:9db71c4e77fa28d8 +geom 112: material #112 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:4972dd20205b307c camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=1:4972dd20205b307c +geom 113: material #113 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:eee5b389ee4c636c camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=1:eee5b389ee4c636c +geom 114: material #114 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:bd20a93dbc58b878 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=1:bd20a93dbc58b878 +geom 115: material #115 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:9c47ae7c87cc708c camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=1:9c47ae7c87cc708c +geom 116: material #116 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:f1283608d88564d8 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=1:f1283608d88564d8 +geom 117: material #117 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:adb11f5730302415 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=1:adb11f5730302415 +geom 118: material #118 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:8e552e201d6f97dd camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=1:8e552e201d6f97dd +geom 119: material #119 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:e4c119bc34c77786 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=1:e4c119bc34c77786 +geom 120: material #120 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:6027a624eb7c130d camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=1:6027a624eb7c130d +geom 121: material #121 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:fbc3e7d2d6198050 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=1:fbc3e7d2d6198050 +geom 122: material #122 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:58ba3abee14d275d camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=1:58ba3abee14d275d +geom 123: material #123 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:877f8e71cb1475d7 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=1:877f8e71cb1475d7 +geom 124: material #124 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:09fa61b6cf060adf camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=1:09fa61b6cf060adf +geom 125: material #125 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:8c246fcef2c2eef6 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=1:8c246fcef2c2eef6 +geom 126: material #126 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:1cc47b5b2ca5f28d camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=1:1cc47b5b2ca5f28d +geom 127: material #127 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:676edaa19da16ebe camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=1:676edaa19da16ebe +geom 128: material #128 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:7873b72124c26fca camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=1:7873b72124c26fca +geom 129: material #129 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:2215c2d56c212a9c camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=1:2215c2d56c212a9c +geom 130: material #130 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:175872964bf90374 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=1:175872964bf90374 +geom 131: material #131 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:2ff5450f19d57f22 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=1:2ff5450f19d57f22 +geom 132: material #132 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:0c6666e8ac1e0815 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=1:0c6666e8ac1e0815 +geom 133: material #133 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:c596d5c96c513ca7 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=1:c596d5c96c513ca7 +geom 134: material #134 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:0040db78da514f25 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=1:0040db78da514f25 +geom 135: material #135 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:de2a78a79bae9337 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=1:de2a78a79bae9337 +geom 136: material #136 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:59f3492650c5bc07 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=1:59f3492650c5bc07 +geom 137: material #137 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:b9f804daae586a8f camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=1:b9f804daae586a8f +geom 138: material #138 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:b4bd7d7624ce51dc camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=1:b4bd7d7624ce51dc +geom 139: material #139 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:15969e3a9502bd45 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=1:15969e3a9502bd45 +geom 140: material #140 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:11322851339c87d3 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=1:11322851339c87d3 +geom 141: material #141 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:118b2d127dea8263 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=1:118b2d127dea8263 +geom 142: material #142 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:6ad913d604c2db0e camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=1:6ad913d604c2db0e +geom 143: material #143 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:211b8ca5005d7169 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=1:211b8ca5005d7169 +geom 144: material #144 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:8c9de10a93729b62 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=1:8c9de10a93729b62 +geom 145: material #145 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:f3e0220514f702da camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=1:f3e0220514f702da +geom 146: material #146 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:17a63772a2b4d662 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=1:17a63772a2b4d662 +geom 147: material #147 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:061fda494c625726 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=1:061fda494c625726 +geom 148: material #148 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:4a3ce7feb848ff65 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=1:4a3ce7feb848ff65 +geom 149: material #149 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:a9c0b7aaa2c5c0da camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=1:a9c0b7aaa2c5c0da +geom 150: material #150 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:ef79af21c911dba7 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=1:ef79af21c911dba7 +geom 151: material #151 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:3adc1fd624a13b6c camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=1:3adc1fd624a13b6c +geom 152: material #152 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:d575ffe25950246b camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=1:d575ffe25950246b +geom 153: material #153 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:ad7b40d76703a529 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=1:ad7b40d76703a529 +geom 154: material #154 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:15fb25e6f8719406 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=1:15fb25e6f8719406 +geom 155: material #155 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:c923795f00a7a549 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=1:c923795f00a7a549 +geom 156: material #156 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:a2fce7f8c840e481 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=1:a2fce7f8c840e481 +geom 157: material #157 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:5d4ae1b4078e8157 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=1:5d4ae1b4078e8157 +geom 158: material #158 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:d20818291c5aff92 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=1:d20818291c5aff92 +geom 159: material #159 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:4ac6d08d190c1587 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=1:4ac6d08d190c1587 +geom 160: material #160 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:0619a347d5925d98 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=1:0619a347d5925d98 +geom 161: material #161 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:693a177c70d0b502 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=1:693a177c70d0b502 +geom 162: material #162 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:36fa5959959f5b0a camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=1:36fa5959959f5b0a +geom 163: material #163 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:9e0327727b74c419 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=1:9e0327727b74c419 +geom 164: material #164 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:9be9f00827328ce8 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=1:9be9f00827328ce8 +geom 165: material #165 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:44027fba6cf235c3 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=1:44027fba6cf235c3 +geom 166: material #166 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:65ec6c97e71cce65 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=1:65ec6c97e71cce65 +geom 167: material #167 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:8da81d72b5295057 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=1:8da81d72b5295057 +geom 168: material #168 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:1ec5342902b45b58 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=1:1ec5342902b45b58 +geom 169: material #169 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:443f9f1c936a9628 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=1:443f9f1c936a9628 +geom 170: material #170 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:f66cea641f71b36a camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=1:f66cea641f71b36a +geom 171: material #171 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:60c616eb240e6402 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=1:60c616eb240e6402 +geom 172: material #172 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:98d397b59416e85d camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=1:98d397b59416e85d +geom 173: material #173 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:59ca60e72d09f8b7 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=1:59ca60e72d09f8b7 +geom 174: material #174 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:b8e65953e49aa5e0 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=1:b8e65953e49aa5e0 +geom 175: material #175 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:988a24366bb6f560 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=1:988a24366bb6f560 +geom 176: material #176 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:2ee0b9a38473fe1e camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=1:2ee0b9a38473fe1e +geom 177: material #177 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:e799240a24e6e0ed camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=1:e799240a24e6e0ed +geom 178: material #178 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:14921443a0ba5679 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=1:14921443a0ba5679 +geom 179: material #179 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:0e06c2b68632d68a camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=1:0e06c2b68632d68a +geom 180: material #180 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:e258aefe6c1eea33 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=1:e258aefe6c1eea33 +geom 181: material #181 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:e924c14fb68a2966 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=1:e924c14fb68a2966 +geom 182: material #182 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:964c7cd8651864ce camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=1:964c7cd8651864ce +geom 183: material #183 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:87e5bc8414e70215 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=1:87e5bc8414e70215 +geom 184: material #184 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:6e9e25c1393a3c53 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=1:6e9e25c1393a3c53 +geom 185: material #185 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:c9bd7baef6b3670e camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=1:c9bd7baef6b3670e +geom 186: material #186 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:27687b43ccaaa6b8 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=1:27687b43ccaaa6b8 +geom 187: material #187 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:02956d1c81ba9d95 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=1:02956d1c81ba9d95 +geom 188: material #188 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:908ad3f258b711e0 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=1:908ad3f258b711e0 +geom 189: material #189 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:815dea82c23858f4 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=1:815dea82c23858f4 +geom 190: material #190 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:0f1b94b69f573b6c camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=1:0f1b94b69f573b6c +geom 191: material #191 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:ec171a47622e8061 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=1:ec171a47622e8061 +geom 192: material #192 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:554f4cebf95ecfe3 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=1:554f4cebf95ecfe3 +geom 193: material #193 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:16bed55e0309b62e camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=1:16bed55e0309b62e +geom 194: material #194 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:c0e684b66dcf01ba camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=1:c0e684b66dcf01ba +geom 195: material #195 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:a64738315de64a25 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=1:a64738315de64a25 +geom 196: material #196 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:9c1762102c6dc4b4 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=1:9c1762102c6dc4b4 +geom 197: material #197 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:f0321b3a4ed09a3b camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=1:f0321b3a4ed09a3b +geom 198: material #198 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:b1a3198a95f3cf78 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=1:b1a3198a95f3cf78 +geom 199: material #199 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:cf92243ed97e14dd camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=1:cf92243ed97e14dd +geom 200: material #200 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:0bb08c482c2a4825 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=1:0bb08c482c2a4825 +geom 201: material #201 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:a0397d08dfdcd7d3 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=1:a0397d08dfdcd7d3 +geom 202: material #202 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:3046d6a26702dc2f camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=1:3046d6a26702dc2f +geom 203: material #203 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:49722f19c258764a camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=1:49722f19c258764a +geom 204: material #204 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:806003126719484f camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=1:806003126719484f +geom 205: material #205 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:3e407ed0e9a18a51 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=1:3e407ed0e9a18a51 +geom 206: material #206 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:f207a4a00c8d3a01 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=1:f207a4a00c8d3a01 +geom 207: material #207 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:f55536ed8d680a92 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=1:f55536ed8d680a92 +geom 208: material #208 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:47a1fc0d2282312b camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=1:47a1fc0d2282312b +geom 209: material #209 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:966a352e982dcb9c camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=1:966a352e982dcb9c +geom 210: material #210 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:c257f6a69029b511 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=1:c257f6a69029b511 +geom 211: material #211 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:2bed0c4c80e3d6d2 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=1:2bed0c4c80e3d6d2 +geom 212: material #212 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:5f393a3e380cd82e camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=1:5f393a3e380cd82e +geom 213: material #213 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:9c542db4d36eab87 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=1:9c542db4d36eab87 +geom 214: material #214 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:31593b8d7172c3b7 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=1:31593b8d7172c3b7 +geom 215: material #215 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:2a49ac229eb540e4 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=1:2a49ac229eb540e4 +geom 216: material #216 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:f04e7fe34b0c6820 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=1:f04e7fe34b0c6820 +geom 217: material #217 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:45be58ec11205157 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=1:45be58ec11205157 +geom 218: material #218 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:5871ca49e8651b78 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=1:5871ca49e8651b78 +geom 219: material #219 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:5f0af8ec75ea9587 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=1:5f0af8ec75ea9587 +geom 220: material #220 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:6c1bf6eb9a5aa677 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=1:6c1bf6eb9a5aa677 +geom 221: material #221 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:7b0c993b216970f8 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=1:7b0c993b216970f8 +geom 222: material #222 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:353ba33820aebbc5 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=1:353ba33820aebbc5 +geom 223: material #223 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:1b9101f5b5a80622 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=1:1b9101f5b5a80622 +geom 224: material #224 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:0cff0ca8584ce19c camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=1:0cff0ca8584ce19c +geom 225: material #225 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:9e14b2927ce55e23 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=1:9e14b2927ce55e23 +geom 226: material #226 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:ead78e4030e47495 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=1:ead78e4030e47495 +geom 227: material #227 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:82799a21ebbd12c7 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=1:82799a21ebbd12c7 +geom 228: material #228 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:cfa62b0d232a6726 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=1:cfa62b0d232a6726 +geom 229: material #229 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:f03ea22a58fd023b camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=1:f03ea22a58fd023b +geom 230: material #230 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:fabdb03f7a1224a6 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=1:fabdb03f7a1224a6 +geom 231: material #231 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:ea4e8636be19b5a3 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=1:ea4e8636be19b5a3 +geom 232: material #232 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:ccf997672cd3888c camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=1:ccf997672cd3888c +geom 233: material #233 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:395c9438f3ac48ed camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=1:395c9438f3ac48ed +geom 234: material #234 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:f124e0e9b1b1b2f6 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=1:f124e0e9b1b1b2f6 +geom 235: material #235 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:7886baa5ccab970a camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=1:7886baa5ccab970a +geom 236: material #236 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:8a173cdb9b4bb04d camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=1:8a173cdb9b4bb04d +geom 237: material #237 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:ee1c52de13f10ce2 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=1:ee1c52de13f10ce2 +geom 238: material #238 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:3c2a228fb3fdce2a camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=1:3c2a228fb3fdce2a +geom 239: material #239 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:3e621998768847e0 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=1:3e621998768847e0 +geom 240: material #240 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:bc99ab1eb02af696 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=1:bc99ab1eb02af696 +geom 241: material #241 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:eec882b8068c66e2 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=1:eec882b8068c66e2 +geom 242: material #242 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:30fa1f19bd0432d0 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=1:30fa1f19bd0432d0 +geom 243: material #243 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:2ab176bb34e28d5b camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=1:2ab176bb34e28d5b +geom 244: material #244 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:985ffa1127d42a66 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=1:985ffa1127d42a66 +geom 245: material #245 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:9818ddc3d963e1fc camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=1:9818ddc3d963e1fc +geom 246: material #246 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:056abe1be316d47c camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=1:056abe1be316d47c +geom 247: material #247 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:9cce1fe7d92c99f0 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=1:9cce1fe7d92c99f0 +geom 248: material #248 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:ce299cb842a33236 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=1:ce299cb842a33236 +geom 249: material #249 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:3dfa2d08de2b6eef camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=1:3dfa2d08de2b6eef +geom 250: material #250 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:e47c78919a782071 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=1:e47c78919a782071 +geom 251: material #251 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:d4fce875fe9dd8b6 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=1:d4fce875fe9dd8b6 +geom 252: material #252 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:b3c525b609f2410c camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=1:b3c525b609f2410c +geom 253: material #253 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:fd2311cdb7e72015 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=1:fd2311cdb7e72015 +geom 254: material #254 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:0730b9fdd252ce88 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=1:0730b9fdd252ce88 +geom 255: material #255 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:490ebaba08c10957 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=1:490ebaba08c10957 +geom 256: material #256 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.8566356 motion [] pieces all=12:49c63dff4b2bf27d camera=12:49c63dff4b2bf27d shadow=12:49c63dff4b2bf27d indirect=12:49c63dff4b2bf27d +geom 257: material #256 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.8566356 motion [] pieces all=12:c99da1694bd0d57d camera=12:c99da1694bd0d57d shadow=12:c99da1694bd0d57d indirect=12:c99da1694bd0d57d +geom 258: material #256 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 2.237378 motion [] pieces all=12:f18564427496b1c9 camera=12:f18564427496b1c9 shadow=12:f18564427496b1c9 indirect=12:f18564427496b1c9 +geom 259: material #256 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 2.125317 motion [] pieces all=12:d45767a2f59b3a25 camera=12:d45767a2f59b3a25 shadow=12:d45767a2f59b3a25 indirect=12:d45767a2f59b3a25 +geom 260: material #256 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 2.0 motion [] pieces all=12:fd03a07ee92783ad camera=12:fd03a07ee92783ad shadow=12:fd03a07ee92783ad indirect=12:fd03a07ee92783ad +geom 261: material #256 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:9626b0f2f3e041c5 camera=2:9626b0f2f3e041c5 shadow=2:9626b0f2f3e041c5 indirect=2:9626b0f2f3e041c5 +provenance light /World/Fill: LightOrigin { index: 0, geoms: 0..0 } +provenance light /World/Panel000: LightOrigin { index: 96, geoms: 95..96 } +provenance light /World/Panel001: LightOrigin { index: 95, geoms: 94..95 } +provenance light /World/Panel002: LightOrigin { index: 94, geoms: 93..94 } +provenance light /World/Panel003: LightOrigin { index: 93, geoms: 92..93 } +provenance light /World/Panel004: LightOrigin { index: 92, geoms: 91..92 } +provenance light /World/Panel005: LightOrigin { index: 91, geoms: 90..91 } +provenance light /World/Panel006: LightOrigin { index: 90, geoms: 89..90 } +provenance light /World/Panel007: LightOrigin { index: 89, geoms: 88..89 } +provenance light /World/Panel008: LightOrigin { index: 88, geoms: 87..88 } +provenance light /World/Panel009: LightOrigin { index: 87, geoms: 86..87 } +provenance light /World/Panel010: LightOrigin { index: 86, geoms: 85..86 } +provenance light /World/Panel011: LightOrigin { index: 85, geoms: 84..85 } +provenance light /World/Panel012: LightOrigin { index: 84, geoms: 83..84 } +provenance light /World/Panel013: LightOrigin { index: 83, geoms: 82..83 } +provenance light /World/Panel014: LightOrigin { index: 82, geoms: 81..82 } +provenance light /World/Panel015: LightOrigin { index: 81, geoms: 80..81 } +provenance light /World/Panel016: LightOrigin { index: 80, geoms: 79..80 } +provenance light /World/Panel017: LightOrigin { index: 79, geoms: 78..79 } +provenance light /World/Panel018: LightOrigin { index: 78, geoms: 77..78 } +provenance light /World/Panel019: LightOrigin { index: 77, geoms: 76..77 } +provenance light /World/Panel020: LightOrigin { index: 76, geoms: 75..76 } +provenance light /World/Panel021: LightOrigin { index: 75, geoms: 74..75 } +provenance light /World/Panel022: LightOrigin { index: 74, geoms: 73..74 } +provenance light /World/Panel023: LightOrigin { index: 73, geoms: 72..73 } +provenance light /World/Panel024: LightOrigin { index: 72, geoms: 71..72 } +provenance light /World/Panel025: LightOrigin { index: 71, geoms: 70..71 } +provenance light /World/Panel026: LightOrigin { index: 70, geoms: 69..70 } +provenance light /World/Panel027: LightOrigin { index: 69, geoms: 68..69 } +provenance light /World/Panel028: LightOrigin { index: 68, geoms: 67..68 } +provenance light /World/Panel029: LightOrigin { index: 67, geoms: 66..67 } +provenance light /World/Panel030: LightOrigin { index: 66, geoms: 65..66 } +provenance light /World/Panel031: LightOrigin { index: 65, geoms: 64..65 } +provenance light /World/Panel032: LightOrigin { index: 64, geoms: 63..64 } +provenance light /World/Panel033: LightOrigin { index: 63, geoms: 62..63 } +provenance light /World/Panel034: LightOrigin { index: 62, geoms: 61..62 } +provenance light /World/Panel035: LightOrigin { index: 61, geoms: 60..61 } +provenance light /World/Panel036: LightOrigin { index: 60, geoms: 59..60 } +provenance light /World/Panel037: LightOrigin { index: 59, geoms: 58..59 } +provenance light /World/Panel038: LightOrigin { index: 58, geoms: 57..58 } +provenance light /World/Panel039: LightOrigin { index: 57, geoms: 56..57 } +provenance light /World/Panel040: LightOrigin { index: 56, geoms: 55..56 } +provenance light /World/Panel041: LightOrigin { index: 55, geoms: 54..55 } +provenance light /World/Panel042: LightOrigin { index: 54, geoms: 53..54 } +provenance light /World/Panel043: LightOrigin { index: 53, geoms: 52..53 } +provenance light /World/Panel044: LightOrigin { index: 52, geoms: 51..52 } +provenance light /World/Panel045: LightOrigin { index: 51, geoms: 50..51 } +provenance light /World/Panel046: LightOrigin { index: 50, geoms: 49..50 } +provenance light /World/Panel047: LightOrigin { index: 49, geoms: 48..49 } +provenance light /World/Panel048: LightOrigin { index: 48, geoms: 47..48 } +provenance light /World/Panel049: LightOrigin { index: 47, geoms: 46..47 } +provenance light /World/Panel050: LightOrigin { index: 46, geoms: 45..46 } +provenance light /World/Panel051: LightOrigin { index: 45, geoms: 44..45 } +provenance light /World/Panel052: LightOrigin { index: 44, geoms: 43..44 } +provenance light /World/Panel053: LightOrigin { index: 43, geoms: 42..43 } +provenance light /World/Panel054: LightOrigin { index: 42, geoms: 41..42 } +provenance light /World/Panel055: LightOrigin { index: 41, geoms: 40..41 } +provenance light /World/Panel056: LightOrigin { index: 40, geoms: 39..40 } +provenance light /World/Panel057: LightOrigin { index: 39, geoms: 38..39 } +provenance light /World/Panel058: LightOrigin { index: 38, geoms: 37..38 } +provenance light /World/Panel059: LightOrigin { index: 37, geoms: 36..37 } +provenance light /World/Panel060: LightOrigin { index: 36, geoms: 35..36 } +provenance light /World/Panel061: LightOrigin { index: 35, geoms: 34..35 } +provenance light /World/Panel062: LightOrigin { index: 34, geoms: 33..34 } +provenance light /World/Panel063: LightOrigin { index: 33, geoms: 32..33 } +provenance light /World/Panel064: LightOrigin { index: 32, geoms: 31..32 } +provenance light /World/Panel065: LightOrigin { index: 31, geoms: 30..31 } +provenance light /World/Panel066: LightOrigin { index: 30, geoms: 29..30 } +provenance light /World/Panel067: LightOrigin { index: 29, geoms: 28..29 } +provenance light /World/Panel068: LightOrigin { index: 28, geoms: 27..28 } +provenance light /World/Panel069: LightOrigin { index: 27, geoms: 26..27 } +provenance light /World/Panel070: LightOrigin { index: 26, geoms: 25..26 } +provenance light /World/Panel071: LightOrigin { index: 25, geoms: 24..25 } +provenance light /World/Panel072: LightOrigin { index: 24, geoms: 23..24 } +provenance light /World/Panel073: LightOrigin { index: 23, geoms: 22..23 } +provenance light /World/Panel074: LightOrigin { index: 22, geoms: 21..22 } +provenance light /World/Panel075: LightOrigin { index: 21, geoms: 20..21 } +provenance light /World/Panel076: LightOrigin { index: 20, geoms: 19..20 } +provenance light /World/Panel077: LightOrigin { index: 19, geoms: 18..19 } +provenance light /World/Panel078: LightOrigin { index: 18, geoms: 17..18 } +provenance light /World/Panel079: LightOrigin { index: 17, geoms: 16..17 } +provenance light /World/Sphere000: LightOrigin { index: 256, geoms: 255..256 } +provenance light /World/Sphere001: LightOrigin { index: 255, geoms: 254..255 } +provenance light /World/Sphere002: LightOrigin { index: 254, geoms: 253..254 } +provenance light /World/Sphere003: LightOrigin { index: 253, geoms: 252..253 } +provenance light /World/Sphere004: LightOrigin { index: 252, geoms: 251..252 } +provenance light /World/Sphere005: LightOrigin { index: 251, geoms: 250..251 } +provenance light /World/Sphere006: LightOrigin { index: 250, geoms: 249..250 } +provenance light /World/Sphere007: LightOrigin { index: 249, geoms: 248..249 } +provenance light /World/Sphere008: LightOrigin { index: 248, geoms: 247..248 } +provenance light /World/Sphere009: LightOrigin { index: 247, geoms: 246..247 } +provenance light /World/Sphere010: LightOrigin { index: 246, geoms: 245..246 } +provenance light /World/Sphere011: LightOrigin { index: 245, geoms: 244..245 } +provenance light /World/Sphere012: LightOrigin { index: 244, geoms: 243..244 } +provenance light /World/Sphere013: LightOrigin { index: 243, geoms: 242..243 } +provenance light /World/Sphere014: LightOrigin { index: 242, geoms: 241..242 } +provenance light /World/Sphere015: LightOrigin { index: 241, geoms: 240..241 } +provenance light /World/Sphere016: LightOrigin { index: 240, geoms: 239..240 } +provenance light /World/Sphere017: LightOrigin { index: 239, geoms: 238..239 } +provenance light /World/Sphere018: LightOrigin { index: 238, geoms: 237..238 } +provenance light /World/Sphere019: LightOrigin { index: 237, geoms: 236..237 } +provenance light /World/Sphere020: LightOrigin { index: 236, geoms: 235..236 } +provenance light /World/Sphere021: LightOrigin { index: 235, geoms: 234..235 } +provenance light /World/Sphere022: LightOrigin { index: 234, geoms: 233..234 } +provenance light /World/Sphere023: LightOrigin { index: 233, geoms: 232..233 } +provenance light /World/Sphere024: LightOrigin { index: 232, geoms: 231..232 } +provenance light /World/Sphere025: LightOrigin { index: 231, geoms: 230..231 } +provenance light /World/Sphere026: LightOrigin { index: 230, geoms: 229..230 } +provenance light /World/Sphere027: LightOrigin { index: 229, geoms: 228..229 } +provenance light /World/Sphere028: LightOrigin { index: 228, geoms: 227..228 } +provenance light /World/Sphere029: LightOrigin { index: 227, geoms: 226..227 } +provenance light /World/Sphere030: LightOrigin { index: 226, geoms: 225..226 } +provenance light /World/Sphere031: LightOrigin { index: 225, geoms: 224..225 } +provenance light /World/Sphere032: LightOrigin { index: 224, geoms: 223..224 } +provenance light /World/Sphere033: LightOrigin { index: 223, geoms: 222..223 } +provenance light /World/Sphere034: LightOrigin { index: 222, geoms: 221..222 } +provenance light /World/Sphere035: LightOrigin { index: 221, geoms: 220..221 } +provenance light /World/Sphere036: LightOrigin { index: 220, geoms: 219..220 } +provenance light /World/Sphere037: LightOrigin { index: 219, geoms: 218..219 } +provenance light /World/Sphere038: LightOrigin { index: 218, geoms: 217..218 } +provenance light /World/Sphere039: LightOrigin { index: 217, geoms: 216..217 } +provenance light /World/Sphere040: LightOrigin { index: 216, geoms: 215..216 } +provenance light /World/Sphere041: LightOrigin { index: 215, geoms: 214..215 } +provenance light /World/Sphere042: LightOrigin { index: 214, geoms: 213..214 } +provenance light /World/Sphere043: LightOrigin { index: 213, geoms: 212..213 } +provenance light /World/Sphere044: LightOrigin { index: 212, geoms: 211..212 } +provenance light /World/Sphere045: LightOrigin { index: 211, geoms: 210..211 } +provenance light /World/Sphere046: LightOrigin { index: 210, geoms: 209..210 } +provenance light /World/Sphere047: LightOrigin { index: 209, geoms: 208..209 } +provenance light /World/Sphere048: LightOrigin { index: 208, geoms: 207..208 } +provenance light /World/Sphere049: LightOrigin { index: 207, geoms: 206..207 } +provenance light /World/Sphere050: LightOrigin { index: 206, geoms: 205..206 } +provenance light /World/Sphere051: LightOrigin { index: 205, geoms: 204..205 } +provenance light /World/Sphere052: LightOrigin { index: 204, geoms: 203..204 } +provenance light /World/Sphere053: LightOrigin { index: 203, geoms: 202..203 } +provenance light /World/Sphere054: LightOrigin { index: 202, geoms: 201..202 } +provenance light /World/Sphere055: LightOrigin { index: 201, geoms: 200..201 } +provenance light /World/Sphere056: LightOrigin { index: 200, geoms: 199..200 } +provenance light /World/Sphere057: LightOrigin { index: 199, geoms: 198..199 } +provenance light /World/Sphere058: LightOrigin { index: 198, geoms: 197..198 } +provenance light /World/Sphere059: LightOrigin { index: 197, geoms: 196..197 } +provenance light /World/Sphere060: LightOrigin { index: 196, geoms: 195..196 } +provenance light /World/Sphere061: LightOrigin { index: 195, geoms: 194..195 } +provenance light /World/Sphere062: LightOrigin { index: 194, geoms: 193..194 } +provenance light /World/Sphere063: LightOrigin { index: 193, geoms: 192..193 } +provenance light /World/Sphere064: LightOrigin { index: 192, geoms: 191..192 } +provenance light /World/Sphere065: LightOrigin { index: 191, geoms: 190..191 } +provenance light /World/Sphere066: LightOrigin { index: 190, geoms: 189..190 } +provenance light /World/Sphere067: LightOrigin { index: 189, geoms: 188..189 } +provenance light /World/Sphere068: LightOrigin { index: 188, geoms: 187..188 } +provenance light /World/Sphere069: LightOrigin { index: 187, geoms: 186..187 } +provenance light /World/Sphere070: LightOrigin { index: 186, geoms: 185..186 } +provenance light /World/Sphere071: LightOrigin { index: 185, geoms: 184..185 } +provenance light /World/Sphere072: LightOrigin { index: 184, geoms: 183..184 } +provenance light /World/Sphere073: LightOrigin { index: 183, geoms: 182..183 } +provenance light /World/Sphere074: LightOrigin { index: 182, geoms: 181..182 } +provenance light /World/Sphere075: LightOrigin { index: 181, geoms: 180..181 } +provenance light /World/Sphere076: LightOrigin { index: 180, geoms: 179..180 } +provenance light /World/Sphere077: LightOrigin { index: 179, geoms: 178..179 } +provenance light /World/Sphere078: LightOrigin { index: 178, geoms: 177..178 } +provenance light /World/Sphere079: LightOrigin { index: 177, geoms: 176..177 } +provenance light /World/Sphere080: LightOrigin { index: 176, geoms: 175..176 } +provenance light /World/Sphere081: LightOrigin { index: 175, geoms: 174..175 } +provenance light /World/Sphere082: LightOrigin { index: 174, geoms: 173..174 } +provenance light /World/Sphere083: LightOrigin { index: 173, geoms: 172..173 } +provenance light /World/Sphere084: LightOrigin { index: 172, geoms: 171..172 } +provenance light /World/Sphere085: LightOrigin { index: 171, geoms: 170..171 } +provenance light /World/Sphere086: LightOrigin { index: 170, geoms: 169..170 } +provenance light /World/Sphere087: LightOrigin { index: 169, geoms: 168..169 } +provenance light /World/Sphere088: LightOrigin { index: 168, geoms: 167..168 } +provenance light /World/Sphere089: LightOrigin { index: 167, geoms: 166..167 } +provenance light /World/Sphere090: LightOrigin { index: 166, geoms: 165..166 } +provenance light /World/Sphere091: LightOrigin { index: 165, geoms: 164..165 } +provenance light /World/Sphere092: LightOrigin { index: 164, geoms: 163..164 } +provenance light /World/Sphere093: LightOrigin { index: 163, geoms: 162..163 } +provenance light /World/Sphere094: LightOrigin { index: 162, geoms: 161..162 } +provenance light /World/Sphere095: LightOrigin { index: 161, geoms: 160..161 } +provenance light /World/Sphere096: LightOrigin { index: 160, geoms: 159..160 } +provenance light /World/Sphere097: LightOrigin { index: 159, geoms: 158..159 } +provenance light /World/Sphere098: LightOrigin { index: 158, geoms: 157..158 } +provenance light /World/Sphere099: LightOrigin { index: 157, geoms: 156..157 } +provenance light /World/Sphere100: LightOrigin { index: 156, geoms: 155..156 } +provenance light /World/Sphere101: LightOrigin { index: 155, geoms: 154..155 } +provenance light /World/Sphere102: LightOrigin { index: 154, geoms: 153..154 } +provenance light /World/Sphere103: LightOrigin { index: 153, geoms: 152..153 } +provenance light /World/Sphere104: LightOrigin { index: 152, geoms: 151..152 } +provenance light /World/Sphere105: LightOrigin { index: 151, geoms: 150..151 } +provenance light /World/Sphere106: LightOrigin { index: 150, geoms: 149..150 } +provenance light /World/Sphere107: LightOrigin { index: 149, geoms: 148..149 } +provenance light /World/Sphere108: LightOrigin { index: 148, geoms: 147..148 } +provenance light /World/Sphere109: LightOrigin { index: 147, geoms: 146..147 } +provenance light /World/Sphere110: LightOrigin { index: 146, geoms: 145..146 } +provenance light /World/Sphere111: LightOrigin { index: 145, geoms: 144..145 } +provenance light /World/Sphere112: LightOrigin { index: 144, geoms: 143..144 } +provenance light /World/Sphere113: LightOrigin { index: 143, geoms: 142..143 } +provenance light /World/Sphere114: LightOrigin { index: 142, geoms: 141..142 } +provenance light /World/Sphere115: LightOrigin { index: 141, geoms: 140..141 } +provenance light /World/Sphere116: LightOrigin { index: 140, geoms: 139..140 } +provenance light /World/Sphere117: LightOrigin { index: 139, geoms: 138..139 } +provenance light /World/Sphere118: LightOrigin { index: 138, geoms: 137..138 } +provenance light /World/Sphere119: LightOrigin { index: 137, geoms: 136..137 } +provenance light /World/Sphere120: LightOrigin { index: 136, geoms: 135..136 } +provenance light /World/Sphere121: LightOrigin { index: 135, geoms: 134..135 } +provenance light /World/Sphere122: LightOrigin { index: 134, geoms: 133..134 } +provenance light /World/Sphere123: LightOrigin { index: 133, geoms: 132..133 } +provenance light /World/Sphere124: LightOrigin { index: 132, geoms: 131..132 } +provenance light /World/Sphere125: LightOrigin { index: 131, geoms: 130..131 } +provenance light /World/Sphere126: LightOrigin { index: 130, geoms: 129..130 } +provenance light /World/Sphere127: LightOrigin { index: 129, geoms: 128..129 } +provenance light /World/Sphere128: LightOrigin { index: 128, geoms: 127..128 } +provenance light /World/Sphere129: LightOrigin { index: 127, geoms: 126..127 } +provenance light /World/Sphere130: LightOrigin { index: 126, geoms: 125..126 } +provenance light /World/Sphere131: LightOrigin { index: 125, geoms: 124..125 } +provenance light /World/Sphere132: LightOrigin { index: 124, geoms: 123..124 } +provenance light /World/Sphere133: LightOrigin { index: 123, geoms: 122..123 } +provenance light /World/Sphere134: LightOrigin { index: 122, geoms: 121..122 } +provenance light /World/Sphere135: LightOrigin { index: 121, geoms: 120..121 } +provenance light /World/Sphere136: LightOrigin { index: 120, geoms: 119..120 } +provenance light /World/Sphere137: LightOrigin { index: 119, geoms: 118..119 } +provenance light /World/Sphere138: LightOrigin { index: 118, geoms: 117..118 } +provenance light /World/Sphere139: LightOrigin { index: 117, geoms: 116..117 } +provenance light /World/Sphere140: LightOrigin { index: 116, geoms: 115..116 } +provenance light /World/Sphere141: LightOrigin { index: 115, geoms: 114..115 } +provenance light /World/Sphere142: LightOrigin { index: 114, geoms: 113..114 } +provenance light /World/Sphere143: LightOrigin { index: 113, geoms: 112..113 } +provenance light /World/Sphere144: LightOrigin { index: 112, geoms: 111..112 } +provenance light /World/Sphere145: LightOrigin { index: 111, geoms: 110..111 } +provenance light /World/Sphere146: LightOrigin { index: 110, geoms: 109..110 } +provenance light /World/Sphere147: LightOrigin { index: 109, geoms: 108..109 } +provenance light /World/Sphere148: LightOrigin { index: 108, geoms: 107..108 } +provenance light /World/Sphere149: LightOrigin { index: 107, geoms: 106..107 } +provenance light /World/Sphere150: LightOrigin { index: 106, geoms: 105..106 } +provenance light /World/Sphere151: LightOrigin { index: 105, geoms: 104..105 } +provenance light /World/Sphere152: LightOrigin { index: 104, geoms: 103..104 } +provenance light /World/Sphere153: LightOrigin { index: 103, geoms: 102..103 } +provenance light /World/Sphere154: LightOrigin { index: 102, geoms: 101..102 } +provenance light /World/Sphere155: LightOrigin { index: 101, geoms: 100..101 } +provenance light /World/Sphere156: LightOrigin { index: 100, geoms: 99..100 } +provenance light /World/Sphere157: LightOrigin { index: 99, geoms: 98..99 } +provenance light /World/Sphere158: LightOrigin { index: 98, geoms: 97..98 } +provenance light /World/Sphere159: LightOrigin { index: 97, geoms: 96..97 } +provenance light /World/Spot00: LightOrigin { index: 16, geoms: 15..16 } +provenance light /World/Spot01: LightOrigin { index: 15, geoms: 14..15 } +provenance light /World/Spot02: LightOrigin { index: 14, geoms: 13..14 } +provenance light /World/Spot03: LightOrigin { index: 13, geoms: 12..13 } +provenance light /World/Spot04: LightOrigin { index: 12, geoms: 11..12 } +provenance light /World/Spot05: LightOrigin { index: 11, geoms: 10..11 } +provenance light /World/Spot06: LightOrigin { index: 10, geoms: 9..10 } +provenance light /World/Spot07: LightOrigin { index: 9, geoms: 8..9 } +provenance light /World/Spot08: LightOrigin { index: 8, geoms: 7..8 } +provenance light /World/Spot09: LightOrigin { index: 7, geoms: 6..7 } +provenance light /World/Spot10: LightOrigin { index: 6, geoms: 5..6 } +provenance light /World/Spot11: LightOrigin { index: 5, geoms: 4..5 } +provenance light /World/Spot12: LightOrigin { index: 4, geoms: 3..4 } +provenance light /World/Spot13: LightOrigin { index: 3, geoms: 2..3 } +provenance light /World/Spot14: LightOrigin { index: 2, geoms: 1..2 } +provenance light /World/Spot15: LightOrigin { index: 1, geoms: 0..1 } +provenance geometry 0..1: /World/Spot15 +provenance geometry 1..2: /World/Spot14 +provenance geometry 2..3: /World/Spot13 +provenance geometry 3..4: /World/Spot12 +provenance geometry 4..5: /World/Spot11 +provenance geometry 5..6: /World/Spot10 +provenance geometry 6..7: /World/Spot09 +provenance geometry 7..8: /World/Spot08 +provenance geometry 8..9: /World/Spot07 +provenance geometry 9..10: /World/Spot06 +provenance geometry 10..11: /World/Spot05 +provenance geometry 11..12: /World/Spot04 +provenance geometry 12..13: /World/Spot03 +provenance geometry 13..14: /World/Spot02 +provenance geometry 14..15: /World/Spot01 +provenance geometry 15..16: /World/Spot00 +provenance geometry 16..17: /World/Panel079 +provenance geometry 17..18: /World/Panel078 +provenance geometry 18..19: /World/Panel077 +provenance geometry 19..20: /World/Panel076 +provenance geometry 20..21: /World/Panel075 +provenance geometry 21..22: /World/Panel074 +provenance geometry 22..23: /World/Panel073 +provenance geometry 23..24: /World/Panel072 +provenance geometry 24..25: /World/Panel071 +provenance geometry 25..26: /World/Panel070 +provenance geometry 26..27: /World/Panel069 +provenance geometry 27..28: /World/Panel068 +provenance geometry 28..29: /World/Panel067 +provenance geometry 29..30: /World/Panel066 +provenance geometry 30..31: /World/Panel065 +provenance geometry 31..32: /World/Panel064 +provenance geometry 32..33: /World/Panel063 +provenance geometry 33..34: /World/Panel062 +provenance geometry 34..35: /World/Panel061 +provenance geometry 35..36: /World/Panel060 +provenance geometry 36..37: /World/Panel059 +provenance geometry 37..38: /World/Panel058 +provenance geometry 38..39: /World/Panel057 +provenance geometry 39..40: /World/Panel056 +provenance geometry 40..41: /World/Panel055 +provenance geometry 41..42: /World/Panel054 +provenance geometry 42..43: /World/Panel053 +provenance geometry 43..44: /World/Panel052 +provenance geometry 44..45: /World/Panel051 +provenance geometry 45..46: /World/Panel050 +provenance geometry 46..47: /World/Panel049 +provenance geometry 47..48: /World/Panel048 +provenance geometry 48..49: /World/Panel047 +provenance geometry 49..50: /World/Panel046 +provenance geometry 50..51: /World/Panel045 +provenance geometry 51..52: /World/Panel044 +provenance geometry 52..53: /World/Panel043 +provenance geometry 53..54: /World/Panel042 +provenance geometry 54..55: /World/Panel041 +provenance geometry 55..56: /World/Panel040 +provenance geometry 56..57: /World/Panel039 +provenance geometry 57..58: /World/Panel038 +provenance geometry 58..59: /World/Panel037 +provenance geometry 59..60: /World/Panel036 +provenance geometry 60..61: /World/Panel035 +provenance geometry 61..62: /World/Panel034 +provenance geometry 62..63: /World/Panel033 +provenance geometry 63..64: /World/Panel032 +provenance geometry 64..65: /World/Panel031 +provenance geometry 65..66: /World/Panel030 +provenance geometry 66..67: /World/Panel029 +provenance geometry 67..68: /World/Panel028 +provenance geometry 68..69: /World/Panel027 +provenance geometry 69..70: /World/Panel026 +provenance geometry 70..71: /World/Panel025 +provenance geometry 71..72: /World/Panel024 +provenance geometry 72..73: /World/Panel023 +provenance geometry 73..74: /World/Panel022 +provenance geometry 74..75: /World/Panel021 +provenance geometry 75..76: /World/Panel020 +provenance geometry 76..77: /World/Panel019 +provenance geometry 77..78: /World/Panel018 +provenance geometry 78..79: /World/Panel017 +provenance geometry 79..80: /World/Panel016 +provenance geometry 80..81: /World/Panel015 +provenance geometry 81..82: /World/Panel014 +provenance geometry 82..83: /World/Panel013 +provenance geometry 83..84: /World/Panel012 +provenance geometry 84..85: /World/Panel011 +provenance geometry 85..86: /World/Panel010 +provenance geometry 86..87: /World/Panel009 +provenance geometry 87..88: /World/Panel008 +provenance geometry 88..89: /World/Panel007 +provenance geometry 89..90: /World/Panel006 +provenance geometry 90..91: /World/Panel005 +provenance geometry 91..92: /World/Panel004 +provenance geometry 92..93: /World/Panel003 +provenance geometry 93..94: /World/Panel002 +provenance geometry 94..95: /World/Panel001 +provenance geometry 95..96: /World/Panel000 +provenance geometry 96..97: /World/Sphere159 +provenance geometry 97..98: /World/Sphere158 +provenance geometry 98..99: /World/Sphere157 +provenance geometry 99..100: /World/Sphere156 +provenance geometry 100..101: /World/Sphere155 +provenance geometry 101..102: /World/Sphere154 +provenance geometry 102..103: /World/Sphere153 +provenance geometry 103..104: /World/Sphere152 +provenance geometry 104..105: /World/Sphere151 +provenance geometry 105..106: /World/Sphere150 +provenance geometry 106..107: /World/Sphere149 +provenance geometry 107..108: /World/Sphere148 +provenance geometry 108..109: /World/Sphere147 +provenance geometry 109..110: /World/Sphere146 +provenance geometry 110..111: /World/Sphere145 +provenance geometry 111..112: /World/Sphere144 +provenance geometry 112..113: /World/Sphere143 +provenance geometry 113..114: /World/Sphere142 +provenance geometry 114..115: /World/Sphere141 +provenance geometry 115..116: /World/Sphere140 +provenance geometry 116..117: /World/Sphere139 +provenance geometry 117..118: /World/Sphere138 +provenance geometry 118..119: /World/Sphere137 +provenance geometry 119..120: /World/Sphere136 +provenance geometry 120..121: /World/Sphere135 +provenance geometry 121..122: /World/Sphere134 +provenance geometry 122..123: /World/Sphere133 +provenance geometry 123..124: /World/Sphere132 +provenance geometry 124..125: /World/Sphere131 +provenance geometry 125..126: /World/Sphere130 +provenance geometry 126..127: /World/Sphere129 +provenance geometry 127..128: /World/Sphere128 +provenance geometry 128..129: /World/Sphere127 +provenance geometry 129..130: /World/Sphere126 +provenance geometry 130..131: /World/Sphere125 +provenance geometry 131..132: /World/Sphere124 +provenance geometry 132..133: /World/Sphere123 +provenance geometry 133..134: /World/Sphere122 +provenance geometry 134..135: /World/Sphere121 +provenance geometry 135..136: /World/Sphere120 +provenance geometry 136..137: /World/Sphere119 +provenance geometry 137..138: /World/Sphere118 +provenance geometry 138..139: /World/Sphere117 +provenance geometry 139..140: /World/Sphere116 +provenance geometry 140..141: /World/Sphere115 +provenance geometry 141..142: /World/Sphere114 +provenance geometry 142..143: /World/Sphere113 +provenance geometry 143..144: /World/Sphere112 +provenance geometry 144..145: /World/Sphere111 +provenance geometry 145..146: /World/Sphere110 +provenance geometry 146..147: /World/Sphere109 +provenance geometry 147..148: /World/Sphere108 +provenance geometry 148..149: /World/Sphere107 +provenance geometry 149..150: /World/Sphere106 +provenance geometry 150..151: /World/Sphere105 +provenance geometry 151..152: /World/Sphere104 +provenance geometry 152..153: /World/Sphere103 +provenance geometry 153..154: /World/Sphere102 +provenance geometry 154..155: /World/Sphere101 +provenance geometry 155..156: /World/Sphere100 +provenance geometry 156..157: /World/Sphere099 +provenance geometry 157..158: /World/Sphere098 +provenance geometry 158..159: /World/Sphere097 +provenance geometry 159..160: /World/Sphere096 +provenance geometry 160..161: /World/Sphere095 +provenance geometry 161..162: /World/Sphere094 +provenance geometry 162..163: /World/Sphere093 +provenance geometry 163..164: /World/Sphere092 +provenance geometry 164..165: /World/Sphere091 +provenance geometry 165..166: /World/Sphere090 +provenance geometry 166..167: /World/Sphere089 +provenance geometry 167..168: /World/Sphere088 +provenance geometry 168..169: /World/Sphere087 +provenance geometry 169..170: /World/Sphere086 +provenance geometry 170..171: /World/Sphere085 +provenance geometry 171..172: /World/Sphere084 +provenance geometry 172..173: /World/Sphere083 +provenance geometry 173..174: /World/Sphere082 +provenance geometry 174..175: /World/Sphere081 +provenance geometry 175..176: /World/Sphere080 +provenance geometry 176..177: /World/Sphere079 +provenance geometry 177..178: /World/Sphere078 +provenance geometry 178..179: /World/Sphere077 +provenance geometry 179..180: /World/Sphere076 +provenance geometry 180..181: /World/Sphere075 +provenance geometry 181..182: /World/Sphere074 +provenance geometry 182..183: /World/Sphere073 +provenance geometry 183..184: /World/Sphere072 +provenance geometry 184..185: /World/Sphere071 +provenance geometry 185..186: /World/Sphere070 +provenance geometry 186..187: /World/Sphere069 +provenance geometry 187..188: /World/Sphere068 +provenance geometry 188..189: /World/Sphere067 +provenance geometry 189..190: /World/Sphere066 +provenance geometry 190..191: /World/Sphere065 +provenance geometry 191..192: /World/Sphere064 +provenance geometry 192..193: /World/Sphere063 +provenance geometry 193..194: /World/Sphere062 +provenance geometry 194..195: /World/Sphere061 +provenance geometry 195..196: /World/Sphere060 +provenance geometry 196..197: /World/Sphere059 +provenance geometry 197..198: /World/Sphere058 +provenance geometry 198..199: /World/Sphere057 +provenance geometry 199..200: /World/Sphere056 +provenance geometry 200..201: /World/Sphere055 +provenance geometry 201..202: /World/Sphere054 +provenance geometry 202..203: /World/Sphere053 +provenance geometry 203..204: /World/Sphere052 +provenance geometry 204..205: /World/Sphere051 +provenance geometry 205..206: /World/Sphere050 +provenance geometry 206..207: /World/Sphere049 +provenance geometry 207..208: /World/Sphere048 +provenance geometry 208..209: /World/Sphere047 +provenance geometry 209..210: /World/Sphere046 +provenance geometry 210..211: /World/Sphere045 +provenance geometry 211..212: /World/Sphere044 +provenance geometry 212..213: /World/Sphere043 +provenance geometry 213..214: /World/Sphere042 +provenance geometry 214..215: /World/Sphere041 +provenance geometry 215..216: /World/Sphere040 +provenance geometry 216..217: /World/Sphere039 +provenance geometry 217..218: /World/Sphere038 +provenance geometry 218..219: /World/Sphere037 +provenance geometry 219..220: /World/Sphere036 +provenance geometry 220..221: /World/Sphere035 +provenance geometry 221..222: /World/Sphere034 +provenance geometry 222..223: /World/Sphere033 +provenance geometry 223..224: /World/Sphere032 +provenance geometry 224..225: /World/Sphere031 +provenance geometry 225..226: /World/Sphere030 +provenance geometry 226..227: /World/Sphere029 +provenance geometry 227..228: /World/Sphere028 +provenance geometry 228..229: /World/Sphere027 +provenance geometry 229..230: /World/Sphere026 +provenance geometry 230..231: /World/Sphere025 +provenance geometry 231..232: /World/Sphere024 +provenance geometry 232..233: /World/Sphere023 +provenance geometry 233..234: /World/Sphere022 +provenance geometry 234..235: /World/Sphere021 +provenance geometry 235..236: /World/Sphere020 +provenance geometry 236..237: /World/Sphere019 +provenance geometry 237..238: /World/Sphere018 +provenance geometry 238..239: /World/Sphere017 +provenance geometry 239..240: /World/Sphere016 +provenance geometry 240..241: /World/Sphere015 +provenance geometry 241..242: /World/Sphere014 +provenance geometry 242..243: /World/Sphere013 +provenance geometry 243..244: /World/Sphere012 +provenance geometry 244..245: /World/Sphere011 +provenance geometry 245..246: /World/Sphere010 +provenance geometry 246..247: /World/Sphere009 +provenance geometry 247..248: /World/Sphere008 +provenance geometry 248..249: /World/Sphere007 +provenance geometry 249..250: /World/Sphere006 +provenance geometry 250..251: /World/Sphere005 +provenance geometry 251..252: /World/Sphere004 +provenance geometry 252..253: /World/Sphere003 +provenance geometry 253..254: /World/Sphere002 +provenance geometry 254..255: /World/Sphere001 +provenance geometry 255..256: /World/Sphere000 +provenance geometry 256..257: /World/Wall4 +provenance geometry 257..258: /World/Wall3 +provenance geometry 258..259: /World/Wall2 +provenance geometry 259..260: /World/Wall1 +provenance geometry 260..261: /World/Wall0 +provenance geometry 261..262: /World/Floor +provenance mesh: MeshOrigin { geom_id: 256, slot: 0, baked: false, moving: false } +provenance mesh: MeshOrigin { geom_id: 257, slot: 0, baked: false, moving: false } +provenance mesh: MeshOrigin { geom_id: 258, slot: 0, baked: false, moving: false } +provenance mesh: MeshOrigin { geom_id: 259, slot: 0, baked: false, moving: false } +provenance mesh: MeshOrigin { geom_id: 260, slot: 0, baked: false, moving: false } +provenance mesh: MeshOrigin { geom_id: 261, slot: 1, baked: true, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 18161012096923765881, n_points: 8, n_indices: 24, n_uvs: None, smooth: false, material: 0 }), placements: 5, shared: false, displaced: false } +provenance mesh slot 1: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 14002714535549629103, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: true, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/World/Cam"), cameras: ["/World/Cam"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/World/Cam"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/many_lights_usda-2896f3594596fed9-1.image b/crates/crust-core/tests/data/import_baselines/many_lights_usda-2896f3594596fed9-1.image new file mode 100644 index 000000000..3c58a13e7 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/many_lights_usda-2896f3594596fed9-1.image @@ -0,0 +1 @@ +480x270 16spp clamp-off 324b3d3f36346629 diff --git a/crates/crust-core/tests/data/import_baselines/many_lights_usda-492e76bd4d2bdc51-1.digest b/crates/crust-core/tests/data/import_baselines/many_lights_usda-492e76bd4d2bdc51-1.digest new file mode 100644 index 000000000..888e2d583 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/many_lights_usda-492e76bd4d2bdc51-1.digest @@ -0,0 +1,1062 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/World/Cam") +camera: Camera { origin: Vec3A(0.0, 14.0, 26.0), lower_left_corner: Vec3A(-9.000002, 4.6157455, 19.870996), horizontal: Vec3A(18.000004, -0.0, 0.0), vertical: Vec3A(0.0, 8.768508, -5.062501), u: Vec3A(1.0, -0.0, 0.0), v: Vec3A(0.0, 0.8660253, -0.5), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: Some("/Render/settings") +settings: RenderSettings { samples_per_pixel: 64, max_depth: 4, width: 480, height: 270, region: PixelRect { x0: 0, y0: 0, x1: 480, y1: 270 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 20.0, aperture: [36.0, 15.2908], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 10.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/many_lights.usda"], invisible_overrides: Some(0) } +layer: $DIR/many_lights.usda +lights: 257 +light 0: dome name Some("/World/Fill") lpe None pmf 0.0038910506 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 1: area name Some("/World/Spot15") lpe None pmf 0.0038910506 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 2: area name Some("/World/Spot14") lpe None pmf 0.0038910506 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 3: area name Some("/World/Spot13") lpe None pmf 0.0038910506 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 4: area name Some("/World/Spot12") lpe None pmf 0.0038910506 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 5: area name Some("/World/Spot11") lpe None pmf 0.0038910506 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 6: area name Some("/World/Spot10") lpe None pmf 0.0038910506 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 7: area name Some("/World/Spot09") lpe None pmf 0.0038910506 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 8: area name Some("/World/Spot08") lpe None pmf 0.0038910506 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 9: area name Some("/World/Spot07") lpe None pmf 0.0038910506 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 10: area name Some("/World/Spot06") lpe None pmf 0.0038910506 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 11: area name Some("/World/Spot05") lpe None pmf 0.0038910506 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 12: area name Some("/World/Spot04") lpe None pmf 0.0038910506 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 13: area name Some("/World/Spot03") lpe None pmf 0.0038910506 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 14: area name Some("/World/Spot02") lpe None pmf 0.0038910506 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 15: area name Some("/World/Spot01") lpe None pmf 0.0038910506 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 16: area name Some("/World/Spot00") lpe None pmf 0.0038910506 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 17: area name Some("/World/Panel079") lpe None pmf 0.0038910506 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 18: area name Some("/World/Panel078") lpe None pmf 0.0038910506 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 19: area name Some("/World/Panel077") lpe None pmf 0.0038910506 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 20: area name Some("/World/Panel076") lpe None pmf 0.0038910506 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 21: area name Some("/World/Panel075") lpe None pmf 0.0038910506 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 22: area name Some("/World/Panel074") lpe None pmf 0.0038910506 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 23: area name Some("/World/Panel073") lpe None pmf 0.0038910506 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 24: area name Some("/World/Panel072") lpe None pmf 0.0038910506 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 25: area name Some("/World/Panel071") lpe None pmf 0.0038910506 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 26: area name Some("/World/Panel070") lpe None pmf 0.0038910506 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 27: area name Some("/World/Panel069") lpe None pmf 0.0038910506 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 28: area name Some("/World/Panel068") lpe None pmf 0.0038910506 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 29: area name Some("/World/Panel067") lpe None pmf 0.0038910506 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 30: area name Some("/World/Panel066") lpe None pmf 0.0038910506 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 31: area name Some("/World/Panel065") lpe None pmf 0.0038910506 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 32: area name Some("/World/Panel064") lpe None pmf 0.0038910506 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 33: area name Some("/World/Panel063") lpe None pmf 0.0038910506 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 34: area name Some("/World/Panel062") lpe None pmf 0.0038910506 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 35: area name Some("/World/Panel061") lpe None pmf 0.0038910506 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 36: area name Some("/World/Panel060") lpe None pmf 0.0038910506 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 37: area name Some("/World/Panel059") lpe None pmf 0.0038910506 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 38: area name Some("/World/Panel058") lpe None pmf 0.0038910506 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 39: area name Some("/World/Panel057") lpe None pmf 0.0038910506 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 40: area name Some("/World/Panel056") lpe None pmf 0.0038910506 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 41: area name Some("/World/Panel055") lpe None pmf 0.0038910506 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 42: area name Some("/World/Panel054") lpe None pmf 0.0038910506 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 43: area name Some("/World/Panel053") lpe None pmf 0.0038910506 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 44: area name Some("/World/Panel052") lpe None pmf 0.0038910506 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 45: area name Some("/World/Panel051") lpe None pmf 0.0038910506 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 46: area name Some("/World/Panel050") lpe None pmf 0.0038910506 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 47: area name Some("/World/Panel049") lpe None pmf 0.0038910506 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 48: area name Some("/World/Panel048") lpe None pmf 0.0038910506 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 49: area name Some("/World/Panel047") lpe None pmf 0.0038910506 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 50: area name Some("/World/Panel046") lpe None pmf 0.0038910506 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 51: area name Some("/World/Panel045") lpe None pmf 0.0038910506 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 52: area name Some("/World/Panel044") lpe None pmf 0.0038910506 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 53: area name Some("/World/Panel043") lpe None pmf 0.0038910506 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 54: area name Some("/World/Panel042") lpe None pmf 0.0038910506 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 55: area name Some("/World/Panel041") lpe None pmf 0.0038910506 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 56: area name Some("/World/Panel040") lpe None pmf 0.0038910506 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 57: area name Some("/World/Panel039") lpe None pmf 0.0038910506 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 58: area name Some("/World/Panel038") lpe None pmf 0.0038910506 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 59: area name Some("/World/Panel037") lpe None pmf 0.0038910506 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 60: area name Some("/World/Panel036") lpe None pmf 0.0038910506 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 61: area name Some("/World/Panel035") lpe None pmf 0.0038910506 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 62: area name Some("/World/Panel034") lpe None pmf 0.0038910506 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 63: area name Some("/World/Panel033") lpe None pmf 0.0038910506 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 64: area name Some("/World/Panel032") lpe None pmf 0.0038910506 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 65: area name Some("/World/Panel031") lpe None pmf 0.0038910506 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 66: area name Some("/World/Panel030") lpe None pmf 0.0038910506 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 67: area name Some("/World/Panel029") lpe None pmf 0.0038910506 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 68: area name Some("/World/Panel028") lpe None pmf 0.0038910506 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 69: area name Some("/World/Panel027") lpe None pmf 0.0038910506 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 70: area name Some("/World/Panel026") lpe None pmf 0.0038910506 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 71: area name Some("/World/Panel025") lpe None pmf 0.0038910506 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 72: area name Some("/World/Panel024") lpe None pmf 0.0038910506 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 73: area name Some("/World/Panel023") lpe None pmf 0.0038910506 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 74: area name Some("/World/Panel022") lpe None pmf 0.0038910506 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 75: area name Some("/World/Panel021") lpe None pmf 0.0038910506 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 76: area name Some("/World/Panel020") lpe None pmf 0.0038910506 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 77: area name Some("/World/Panel019") lpe None pmf 0.0038910506 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 78: area name Some("/World/Panel018") lpe None pmf 0.0038910506 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 79: area name Some("/World/Panel017") lpe None pmf 0.0038910506 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 80: area name Some("/World/Panel016") lpe None pmf 0.0038910506 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 81: area name Some("/World/Panel015") lpe None pmf 0.0038910506 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 82: area name Some("/World/Panel014") lpe None pmf 0.0038910506 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 83: area name Some("/World/Panel013") lpe None pmf 0.0038910506 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 84: area name Some("/World/Panel012") lpe None pmf 0.0038910506 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 85: area name Some("/World/Panel011") lpe None pmf 0.0038910506 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 86: area name Some("/World/Panel010") lpe None pmf 0.0038910506 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 87: area name Some("/World/Panel009") lpe None pmf 0.0038910506 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 88: area name Some("/World/Panel008") lpe None pmf 0.0038910506 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 89: area name Some("/World/Panel007") lpe None pmf 0.0038910506 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 90: area name Some("/World/Panel006") lpe None pmf 0.0038910506 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 91: area name Some("/World/Panel005") lpe None pmf 0.0038910506 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 92: area name Some("/World/Panel004") lpe None pmf 0.0038910506 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 93: area name Some("/World/Panel003") lpe None pmf 0.0038910506 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 94: area name Some("/World/Panel002") lpe None pmf 0.0038910506 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 95: area name Some("/World/Panel001") lpe None pmf 0.0038910506 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 96: area name Some("/World/Panel000") lpe None pmf 0.0038910506 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 97: area name Some("/World/Sphere159") lpe None pmf 0.0038910506 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 98: area name Some("/World/Sphere158") lpe None pmf 0.0038910506 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 99: area name Some("/World/Sphere157") lpe None pmf 0.0038910506 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 100: area name Some("/World/Sphere156") lpe None pmf 0.0038910506 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 101: area name Some("/World/Sphere155") lpe None pmf 0.0038910506 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 102: area name Some("/World/Sphere154") lpe None pmf 0.0038910506 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 103: area name Some("/World/Sphere153") lpe None pmf 0.0038910506 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 104: area name Some("/World/Sphere152") lpe None pmf 0.0038910506 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 105: area name Some("/World/Sphere151") lpe None pmf 0.0038910506 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 106: area name Some("/World/Sphere150") lpe None pmf 0.0038910506 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 107: area name Some("/World/Sphere149") lpe None pmf 0.0038910506 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 108: area name Some("/World/Sphere148") lpe None pmf 0.0038910506 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 109: area name Some("/World/Sphere147") lpe None pmf 0.0038910506 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 110: area name Some("/World/Sphere146") lpe None pmf 0.0038910506 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 111: area name Some("/World/Sphere145") lpe None pmf 0.0038910506 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 112: area name Some("/World/Sphere144") lpe None pmf 0.0038910506 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 113: area name Some("/World/Sphere143") lpe None pmf 0.0038910506 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 114: area name Some("/World/Sphere142") lpe None pmf 0.0038910506 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 115: area name Some("/World/Sphere141") lpe None pmf 0.0038910506 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 116: area name Some("/World/Sphere140") lpe None pmf 0.0038910506 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 117: area name Some("/World/Sphere139") lpe None pmf 0.0038910506 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 118: area name Some("/World/Sphere138") lpe None pmf 0.0038910506 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 119: area name Some("/World/Sphere137") lpe None pmf 0.0038910506 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 120: area name Some("/World/Sphere136") lpe None pmf 0.0038910506 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 121: area name Some("/World/Sphere135") lpe None pmf 0.0038910506 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 122: area name Some("/World/Sphere134") lpe None pmf 0.0038910506 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 123: area name Some("/World/Sphere133") lpe None pmf 0.0038910506 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 124: area name Some("/World/Sphere132") lpe None pmf 0.0038910506 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 125: area name Some("/World/Sphere131") lpe None pmf 0.0038910506 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 126: area name Some("/World/Sphere130") lpe None pmf 0.0038910506 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 127: area name Some("/World/Sphere129") lpe None pmf 0.0038910506 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 128: area name Some("/World/Sphere128") lpe None pmf 0.0038910506 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 129: area name Some("/World/Sphere127") lpe None pmf 0.0038910506 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 130: area name Some("/World/Sphere126") lpe None pmf 0.0038910506 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 131: area name Some("/World/Sphere125") lpe None pmf 0.0038910506 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 132: area name Some("/World/Sphere124") lpe None pmf 0.0038910506 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 133: area name Some("/World/Sphere123") lpe None pmf 0.0038910506 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 134: area name Some("/World/Sphere122") lpe None pmf 0.0038910506 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 135: area name Some("/World/Sphere121") lpe None pmf 0.0038910506 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 136: area name Some("/World/Sphere120") lpe None pmf 0.0038910506 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 137: area name Some("/World/Sphere119") lpe None pmf 0.0038910506 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 138: area name Some("/World/Sphere118") lpe None pmf 0.0038910506 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 139: area name Some("/World/Sphere117") lpe None pmf 0.0038910506 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 140: area name Some("/World/Sphere116") lpe None pmf 0.0038910506 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 141: area name Some("/World/Sphere115") lpe None pmf 0.0038910506 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 142: area name Some("/World/Sphere114") lpe None pmf 0.0038910506 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 143: area name Some("/World/Sphere113") lpe None pmf 0.0038910506 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 144: area name Some("/World/Sphere112") lpe None pmf 0.0038910506 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 145: area name Some("/World/Sphere111") lpe None pmf 0.0038910506 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 146: area name Some("/World/Sphere110") lpe None pmf 0.0038910506 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 147: area name Some("/World/Sphere109") lpe None pmf 0.0038910506 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 148: area name Some("/World/Sphere108") lpe None pmf 0.0038910506 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 149: area name Some("/World/Sphere107") lpe None pmf 0.0038910506 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 150: area name Some("/World/Sphere106") lpe None pmf 0.0038910506 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 151: area name Some("/World/Sphere105") lpe None pmf 0.0038910506 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 152: area name Some("/World/Sphere104") lpe None pmf 0.0038910506 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 153: area name Some("/World/Sphere103") lpe None pmf 0.0038910506 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 154: area name Some("/World/Sphere102") lpe None pmf 0.0038910506 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 155: area name Some("/World/Sphere101") lpe None pmf 0.0038910506 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 156: area name Some("/World/Sphere100") lpe None pmf 0.0038910506 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 157: area name Some("/World/Sphere099") lpe None pmf 0.0038910506 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 158: area name Some("/World/Sphere098") lpe None pmf 0.0038910506 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 159: area name Some("/World/Sphere097") lpe None pmf 0.0038910506 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 160: area name Some("/World/Sphere096") lpe None pmf 0.0038910506 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 161: area name Some("/World/Sphere095") lpe None pmf 0.0038910506 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 162: area name Some("/World/Sphere094") lpe None pmf 0.0038910506 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 163: area name Some("/World/Sphere093") lpe None pmf 0.0038910506 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 164: area name Some("/World/Sphere092") lpe None pmf 0.0038910506 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 165: area name Some("/World/Sphere091") lpe None pmf 0.0038910506 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 166: area name Some("/World/Sphere090") lpe None pmf 0.0038910506 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 167: area name Some("/World/Sphere089") lpe None pmf 0.0038910506 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 168: area name Some("/World/Sphere088") lpe None pmf 0.0038910506 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 169: area name Some("/World/Sphere087") lpe None pmf 0.0038910506 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 170: area name Some("/World/Sphere086") lpe None pmf 0.0038910506 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 171: area name Some("/World/Sphere085") lpe None pmf 0.0038910506 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 172: area name Some("/World/Sphere084") lpe None pmf 0.0038910506 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 173: area name Some("/World/Sphere083") lpe None pmf 0.0038910506 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 174: area name Some("/World/Sphere082") lpe None pmf 0.0038910506 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 175: area name Some("/World/Sphere081") lpe None pmf 0.0038910506 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 176: area name Some("/World/Sphere080") lpe None pmf 0.0038910506 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 177: area name Some("/World/Sphere079") lpe None pmf 0.0038910506 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 178: area name Some("/World/Sphere078") lpe None pmf 0.0038910506 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 179: area name Some("/World/Sphere077") lpe None pmf 0.0038910506 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 180: area name Some("/World/Sphere076") lpe None pmf 0.0038910506 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 181: area name Some("/World/Sphere075") lpe None pmf 0.0038910506 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 182: area name Some("/World/Sphere074") lpe None pmf 0.0038910506 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 183: area name Some("/World/Sphere073") lpe None pmf 0.0038910506 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 184: area name Some("/World/Sphere072") lpe None pmf 0.0038910506 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 185: area name Some("/World/Sphere071") lpe None pmf 0.0038910506 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 186: area name Some("/World/Sphere070") lpe None pmf 0.0038910506 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 187: area name Some("/World/Sphere069") lpe None pmf 0.0038910506 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 188: area name Some("/World/Sphere068") lpe None pmf 0.0038910506 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 189: area name Some("/World/Sphere067") lpe None pmf 0.0038910506 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 190: area name Some("/World/Sphere066") lpe None pmf 0.0038910506 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 191: area name Some("/World/Sphere065") lpe None pmf 0.0038910506 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 192: area name Some("/World/Sphere064") lpe None pmf 0.0038910506 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 193: area name Some("/World/Sphere063") lpe None pmf 0.0038910506 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 194: area name Some("/World/Sphere062") lpe None pmf 0.0038910506 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 195: area name Some("/World/Sphere061") lpe None pmf 0.0038910506 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 196: area name Some("/World/Sphere060") lpe None pmf 0.0038910506 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 197: area name Some("/World/Sphere059") lpe None pmf 0.0038910506 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 198: area name Some("/World/Sphere058") lpe None pmf 0.0038910506 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 199: area name Some("/World/Sphere057") lpe None pmf 0.0038910506 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 200: area name Some("/World/Sphere056") lpe None pmf 0.0038910506 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 201: area name Some("/World/Sphere055") lpe None pmf 0.0038910506 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 202: area name Some("/World/Sphere054") lpe None pmf 0.0038910506 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 203: area name Some("/World/Sphere053") lpe None pmf 0.0038910506 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 204: area name Some("/World/Sphere052") lpe None pmf 0.0038910506 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 205: area name Some("/World/Sphere051") lpe None pmf 0.0038910506 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 206: area name Some("/World/Sphere050") lpe None pmf 0.0038910506 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 207: area name Some("/World/Sphere049") lpe None pmf 0.0038910506 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 208: area name Some("/World/Sphere048") lpe None pmf 0.0038910506 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 209: area name Some("/World/Sphere047") lpe None pmf 0.0038910506 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 210: area name Some("/World/Sphere046") lpe None pmf 0.0038910506 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 211: area name Some("/World/Sphere045") lpe None pmf 0.0038910506 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 212: area name Some("/World/Sphere044") lpe None pmf 0.0038910506 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 213: area name Some("/World/Sphere043") lpe None pmf 0.0038910506 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 214: area name Some("/World/Sphere042") lpe None pmf 0.0038910506 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 215: area name Some("/World/Sphere041") lpe None pmf 0.0038910506 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 216: area name Some("/World/Sphere040") lpe None pmf 0.0038910506 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 217: area name Some("/World/Sphere039") lpe None pmf 0.0038910506 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 218: area name Some("/World/Sphere038") lpe None pmf 0.0038910506 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 219: area name Some("/World/Sphere037") lpe None pmf 0.0038910506 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 220: area name Some("/World/Sphere036") lpe None pmf 0.0038910506 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 221: area name Some("/World/Sphere035") lpe None pmf 0.0038910506 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 222: area name Some("/World/Sphere034") lpe None pmf 0.0038910506 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 223: area name Some("/World/Sphere033") lpe None pmf 0.0038910506 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 224: area name Some("/World/Sphere032") lpe None pmf 0.0038910506 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 225: area name Some("/World/Sphere031") lpe None pmf 0.0038910506 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 226: area name Some("/World/Sphere030") lpe None pmf 0.0038910506 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 227: area name Some("/World/Sphere029") lpe None pmf 0.0038910506 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 228: area name Some("/World/Sphere028") lpe None pmf 0.0038910506 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 229: area name Some("/World/Sphere027") lpe None pmf 0.0038910506 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 230: area name Some("/World/Sphere026") lpe None pmf 0.0038910506 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 231: area name Some("/World/Sphere025") lpe None pmf 0.0038910506 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 232: area name Some("/World/Sphere024") lpe None pmf 0.0038910506 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 233: area name Some("/World/Sphere023") lpe None pmf 0.0038910506 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 234: area name Some("/World/Sphere022") lpe None pmf 0.0038910506 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 235: area name Some("/World/Sphere021") lpe None pmf 0.0038910506 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 236: area name Some("/World/Sphere020") lpe None pmf 0.0038910506 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 237: area name Some("/World/Sphere019") lpe None pmf 0.0038910506 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 238: area name Some("/World/Sphere018") lpe None pmf 0.0038910506 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 239: area name Some("/World/Sphere017") lpe None pmf 0.0038910506 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 240: area name Some("/World/Sphere016") lpe None pmf 0.0038910506 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 241: area name Some("/World/Sphere015") lpe None pmf 0.0038910506 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 242: area name Some("/World/Sphere014") lpe None pmf 0.0038910506 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 243: area name Some("/World/Sphere013") lpe None pmf 0.0038910506 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 244: area name Some("/World/Sphere012") lpe None pmf 0.0038910506 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 245: area name Some("/World/Sphere011") lpe None pmf 0.0038910506 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 246: area name Some("/World/Sphere010") lpe None pmf 0.0038910506 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 247: area name Some("/World/Sphere009") lpe None pmf 0.0038910506 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 248: area name Some("/World/Sphere008") lpe None pmf 0.0038910506 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 249: area name Some("/World/Sphere007") lpe None pmf 0.0038910506 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 250: area name Some("/World/Sphere006") lpe None pmf 0.0038910506 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 251: area name Some("/World/Sphere005") lpe None pmf 0.0038910506 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 252: area name Some("/World/Sphere004") lpe None pmf 0.0038910506 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 253: area name Some("/World/Sphere003") lpe None pmf 0.0038910506 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 254: area name Some("/World/Sphere002") lpe None pmf 0.0038910506 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 255: area name Some("/World/Sphere001") lpe None pmf 0.0038910506 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 256: area name Some("/World/Sphere000") lpe None pmf 0.0038910506 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 262 geometries, PrimitiveBreakdown { triangles: 194, spheres: 160, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 5 } top level, PrimitiveBreakdown { triangles: 206, spheres: 160, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 5 } unique, motion false +geom 0: material #0 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:188f260f6479aa4e camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=2:188f260f6479aa4e +geom 1: material #1 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:97f45dafeae7396c camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=2:97f45dafeae7396c +geom 2: material #2 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:50faa5f64b009067 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=2:50faa5f64b009067 +geom 3: material #3 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:ebbba4921e332478 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=2:ebbba4921e332478 +geom 4: material #4 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:ff2a5c7e54e0f9db camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=2:ff2a5c7e54e0f9db +geom 5: material #5 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:15036b6847d0d5d8 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=2:15036b6847d0d5d8 +geom 6: material #6 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:71e61c6a60d61f89 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=2:71e61c6a60d61f89 +geom 7: material #7 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:f3217ea4860a8728 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=2:f3217ea4860a8728 +geom 8: material #8 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:8d754f5908ca78e0 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=2:8d754f5908ca78e0 +geom 9: material #9 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:5657f45de0cd5100 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=2:5657f45de0cd5100 +geom 10: material #10 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:c8be539fca9f01fb camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=2:c8be539fca9f01fb +geom 11: material #11 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:d48a20ec03c99200 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=2:d48a20ec03c99200 +geom 12: material #12 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:a7923437effed43d camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=2:a7923437effed43d +geom 13: material #13 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:e3e3808d2094f90a camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=2:e3e3808d2094f90a +geom 14: material #14 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:1e497659eef12a81 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=2:1e497659eef12a81 +geom 15: material #15 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:ffb2ef2f4a649fa6 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=2:ffb2ef2f4a649fa6 +geom 16: material #16 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:5d5e430ff41c1c08 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=2:5d5e430ff41c1c08 +geom 17: material #17 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:8f13d27ca8bbe966 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=2:8f13d27ca8bbe966 +geom 18: material #18 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:8652e2305229cfa0 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=2:8652e2305229cfa0 +geom 19: material #19 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:483a297758388d5c camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=2:483a297758388d5c +geom 20: material #20 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:48e5f0ef3110f507 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=2:48e5f0ef3110f507 +geom 21: material #21 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:ca51c27c8e04bfa2 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=2:ca51c27c8e04bfa2 +geom 22: material #22 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:84e9bace9eab9ec8 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=2:84e9bace9eab9ec8 +geom 23: material #23 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:803d49dff50a2f92 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=2:803d49dff50a2f92 +geom 24: material #24 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:70b184a9244bc562 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=2:70b184a9244bc562 +geom 25: material #25 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:3164ae4a6ea6d628 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=2:3164ae4a6ea6d628 +geom 26: material #26 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:7a60eae3c5968816 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=2:7a60eae3c5968816 +geom 27: material #27 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:bb4cd18f8464d34c camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=2:bb4cd18f8464d34c +geom 28: material #28 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:38f56b391c7ea50c camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=2:38f56b391c7ea50c +geom 29: material #29 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:c3fcfe7c5ed85fba camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=2:c3fcfe7c5ed85fba +geom 30: material #30 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:6e268625717faeb1 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=2:6e268625717faeb1 +geom 31: material #31 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:4b348295ce7972e4 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=2:4b348295ce7972e4 +geom 32: material #32 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:c2b7dd874f5bac98 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=2:c2b7dd874f5bac98 +geom 33: material #33 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:559c4d11d19668c0 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=2:559c4d11d19668c0 +geom 34: material #34 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:77be229f0d292714 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=2:77be229f0d292714 +geom 35: material #35 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:5c5e3e047f91145c camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=2:5c5e3e047f91145c +geom 36: material #36 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:f9c327e97a20da39 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=2:f9c327e97a20da39 +geom 37: material #37 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:819e740103d9eca1 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=2:819e740103d9eca1 +geom 38: material #38 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:1212f418647714b4 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=2:1212f418647714b4 +geom 39: material #39 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:91e281ba2b7c3ed8 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=2:91e281ba2b7c3ed8 +geom 40: material #40 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:8221ec0a7aae962b camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=2:8221ec0a7aae962b +geom 41: material #41 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:642e441ce136ee76 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=2:642e441ce136ee76 +geom 42: material #42 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:dcf19867b54c51ee camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=2:dcf19867b54c51ee +geom 43: material #43 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:f8a9d1e9cb434139 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=2:f8a9d1e9cb434139 +geom 44: material #44 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:8ec3acc16ec533be camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=2:8ec3acc16ec533be +geom 45: material #45 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:9bf7fd7118ebe84b camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=2:9bf7fd7118ebe84b +geom 46: material #46 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:2a1ff2463031af5c camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=2:2a1ff2463031af5c +geom 47: material #47 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:b1cd3ab713320246 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=2:b1cd3ab713320246 +geom 48: material #48 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:735c8859d1ebf01c camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=2:735c8859d1ebf01c +geom 49: material #49 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:cc7113938e1868a5 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=2:cc7113938e1868a5 +geom 50: material #50 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:1969f53dc4c4ea77 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=2:1969f53dc4c4ea77 +geom 51: material #51 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:e6dabd74d1339b52 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=2:e6dabd74d1339b52 +geom 52: material #52 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:612357c385f2578a camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=2:612357c385f2578a +geom 53: material #53 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:8561f9be5e95e3bc camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=2:8561f9be5e95e3bc +geom 54: material #54 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:973e05ae3389609e camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=2:973e05ae3389609e +geom 55: material #55 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:4708e1aa46768578 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=2:4708e1aa46768578 +geom 56: material #56 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:ab79f4992c448603 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=2:ab79f4992c448603 +geom 57: material #57 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:61f6f945726813f9 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=2:61f6f945726813f9 +geom 58: material #58 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:73c8ba55366a587e camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=2:73c8ba55366a587e +geom 59: material #59 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:218c05d1384633dc camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=2:218c05d1384633dc +geom 60: material #60 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:44b7957c677bd226 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=2:44b7957c677bd226 +geom 61: material #61 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:30eecb7c25719c05 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=2:30eecb7c25719c05 +geom 62: material #62 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:176d644e7ee2e684 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=2:176d644e7ee2e684 +geom 63: material #63 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:ec73b763308f9a3d camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=2:ec73b763308f9a3d +geom 64: material #64 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:e915a0aae228bc79 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=2:e915a0aae228bc79 +geom 65: material #65 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:7d6401aa59da4e38 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=2:7d6401aa59da4e38 +geom 66: material #66 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:76f66ce61a14aa96 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=2:76f66ce61a14aa96 +geom 67: material #67 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:d0a2be6dd2ce3c54 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=2:d0a2be6dd2ce3c54 +geom 68: material #68 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:1b5dfcf5e87976c3 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=2:1b5dfcf5e87976c3 +geom 69: material #69 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:9355c82e434ac2ae camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=2:9355c82e434ac2ae +geom 70: material #70 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:a77e58d3ff3a2121 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=2:a77e58d3ff3a2121 +geom 71: material #71 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:93043b72a388e080 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=2:93043b72a388e080 +geom 72: material #72 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:05b2719429e398de camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=2:05b2719429e398de +geom 73: material #73 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:f8a0dd5a739f2fc0 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=2:f8a0dd5a739f2fc0 +geom 74: material #74 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:dca1a43f4a7538ed camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=2:dca1a43f4a7538ed +geom 75: material #75 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:8a2f5974cca942dc camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=2:8a2f5974cca942dc +geom 76: material #76 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:65272fbe17dd0c64 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=2:65272fbe17dd0c64 +geom 77: material #77 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:9060c015c4a0f6b7 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=2:9060c015c4a0f6b7 +geom 78: material #78 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:ec32f023d0468b65 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=2:ec32f023d0468b65 +geom 79: material #79 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:a09de738183c4a9b camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=2:a09de738183c4a9b +geom 80: material #80 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:2bab4c271329769d camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=2:2bab4c271329769d +geom 81: material #81 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:e82dcf28bab67bb5 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=2:e82dcf28bab67bb5 +geom 82: material #82 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:6d6d95bf01b4588f camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=2:6d6d95bf01b4588f +geom 83: material #83 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:6878b98c6d332db9 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=2:6878b98c6d332db9 +geom 84: material #84 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:b0b31b42e1646ca9 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=2:b0b31b42e1646ca9 +geom 85: material #85 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:22ef3600d3ffa0e0 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=2:22ef3600d3ffa0e0 +geom 86: material #86 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:b2a86cb870f0d22b camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=2:b2a86cb870f0d22b +geom 87: material #87 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:c476f12c52f01b49 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=2:c476f12c52f01b49 +geom 88: material #88 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:b05e191db12bfb49 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=2:b05e191db12bfb49 +geom 89: material #89 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:a93852b39b01de54 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=2:a93852b39b01de54 +geom 90: material #90 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:8e04888e8ea9c61b camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=2:8e04888e8ea9c61b +geom 91: material #91 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:d15b848fb52b48dd camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=2:d15b848fb52b48dd +geom 92: material #92 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:e3399568cfdc5a68 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=2:e3399568cfdc5a68 +geom 93: material #93 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:fd3bc52d5481c68b camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=2:fd3bc52d5481c68b +geom 94: material #94 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:4b6bf9a286fa9c3b camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=2:4b6bf9a286fa9c3b +geom 95: material #95 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:6383d37d0761a2db camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=2:6383d37d0761a2db +geom 96: material #96 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:71d02d53d4718c39 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=1:71d02d53d4718c39 +geom 97: material #97 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:400eb2d44fcb9a5f camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=1:400eb2d44fcb9a5f +geom 98: material #98 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:fffd2eb5365a513b camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=1:fffd2eb5365a513b +geom 99: material #99 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:5940a8f1a0c95329 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=1:5940a8f1a0c95329 +geom 100: material #100 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:3b48db8226d17f85 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=1:3b48db8226d17f85 +geom 101: material #101 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:aa1153c63e5ac43a camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=1:aa1153c63e5ac43a +geom 102: material #102 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:bd3bf6f3fc8aec36 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=1:bd3bf6f3fc8aec36 +geom 103: material #103 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:7f6d3a47eae227d1 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=1:7f6d3a47eae227d1 +geom 104: material #104 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:7a7b74661ebf0e33 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=1:7a7b74661ebf0e33 +geom 105: material #105 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:107fa63ad1e17fbe camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=1:107fa63ad1e17fbe +geom 106: material #106 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:f3e0558ff85941c1 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=1:f3e0558ff85941c1 +geom 107: material #107 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:14d37fd8433b6789 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=1:14d37fd8433b6789 +geom 108: material #108 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:b6168793b8d79637 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=1:b6168793b8d79637 +geom 109: material #109 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:dc663f564b4abf96 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=1:dc663f564b4abf96 +geom 110: material #110 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:bc1ab26495c75862 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=1:bc1ab26495c75862 +geom 111: material #111 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:9db71c4e77fa28d8 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=1:9db71c4e77fa28d8 +geom 112: material #112 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:4972dd20205b307c camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=1:4972dd20205b307c +geom 113: material #113 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:eee5b389ee4c636c camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=1:eee5b389ee4c636c +geom 114: material #114 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:bd20a93dbc58b878 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=1:bd20a93dbc58b878 +geom 115: material #115 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:9c47ae7c87cc708c camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=1:9c47ae7c87cc708c +geom 116: material #116 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:f1283608d88564d8 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=1:f1283608d88564d8 +geom 117: material #117 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:adb11f5730302415 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=1:adb11f5730302415 +geom 118: material #118 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:8e552e201d6f97dd camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=1:8e552e201d6f97dd +geom 119: material #119 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:e4c119bc34c77786 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=1:e4c119bc34c77786 +geom 120: material #120 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:6027a624eb7c130d camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=1:6027a624eb7c130d +geom 121: material #121 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:fbc3e7d2d6198050 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=1:fbc3e7d2d6198050 +geom 122: material #122 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:58ba3abee14d275d camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=1:58ba3abee14d275d +geom 123: material #123 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:877f8e71cb1475d7 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=1:877f8e71cb1475d7 +geom 124: material #124 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:09fa61b6cf060adf camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=1:09fa61b6cf060adf +geom 125: material #125 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:8c246fcef2c2eef6 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=1:8c246fcef2c2eef6 +geom 126: material #126 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:1cc47b5b2ca5f28d camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=1:1cc47b5b2ca5f28d +geom 127: material #127 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:676edaa19da16ebe camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=1:676edaa19da16ebe +geom 128: material #128 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:7873b72124c26fca camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=1:7873b72124c26fca +geom 129: material #129 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:2215c2d56c212a9c camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=1:2215c2d56c212a9c +geom 130: material #130 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:175872964bf90374 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=1:175872964bf90374 +geom 131: material #131 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:2ff5450f19d57f22 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=1:2ff5450f19d57f22 +geom 132: material #132 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:0c6666e8ac1e0815 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=1:0c6666e8ac1e0815 +geom 133: material #133 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:c596d5c96c513ca7 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=1:c596d5c96c513ca7 +geom 134: material #134 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:0040db78da514f25 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=1:0040db78da514f25 +geom 135: material #135 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:de2a78a79bae9337 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=1:de2a78a79bae9337 +geom 136: material #136 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:59f3492650c5bc07 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=1:59f3492650c5bc07 +geom 137: material #137 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:b9f804daae586a8f camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=1:b9f804daae586a8f +geom 138: material #138 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:b4bd7d7624ce51dc camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=1:b4bd7d7624ce51dc +geom 139: material #139 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:15969e3a9502bd45 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=1:15969e3a9502bd45 +geom 140: material #140 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:11322851339c87d3 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=1:11322851339c87d3 +geom 141: material #141 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:118b2d127dea8263 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=1:118b2d127dea8263 +geom 142: material #142 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:6ad913d604c2db0e camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=1:6ad913d604c2db0e +geom 143: material #143 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:211b8ca5005d7169 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=1:211b8ca5005d7169 +geom 144: material #144 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:8c9de10a93729b62 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=1:8c9de10a93729b62 +geom 145: material #145 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:f3e0220514f702da camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=1:f3e0220514f702da +geom 146: material #146 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:17a63772a2b4d662 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=1:17a63772a2b4d662 +geom 147: material #147 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:061fda494c625726 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=1:061fda494c625726 +geom 148: material #148 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:4a3ce7feb848ff65 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=1:4a3ce7feb848ff65 +geom 149: material #149 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:a9c0b7aaa2c5c0da camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=1:a9c0b7aaa2c5c0da +geom 150: material #150 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:ef79af21c911dba7 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=1:ef79af21c911dba7 +geom 151: material #151 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:3adc1fd624a13b6c camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=1:3adc1fd624a13b6c +geom 152: material #152 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:d575ffe25950246b camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=1:d575ffe25950246b +geom 153: material #153 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:ad7b40d76703a529 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=1:ad7b40d76703a529 +geom 154: material #154 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:15fb25e6f8719406 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=1:15fb25e6f8719406 +geom 155: material #155 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:c923795f00a7a549 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=1:c923795f00a7a549 +geom 156: material #156 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:a2fce7f8c840e481 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=1:a2fce7f8c840e481 +geom 157: material #157 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:5d4ae1b4078e8157 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=1:5d4ae1b4078e8157 +geom 158: material #158 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:d20818291c5aff92 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=1:d20818291c5aff92 +geom 159: material #159 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:4ac6d08d190c1587 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=1:4ac6d08d190c1587 +geom 160: material #160 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:0619a347d5925d98 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=1:0619a347d5925d98 +geom 161: material #161 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:693a177c70d0b502 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=1:693a177c70d0b502 +geom 162: material #162 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:36fa5959959f5b0a camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=1:36fa5959959f5b0a +geom 163: material #163 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:9e0327727b74c419 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=1:9e0327727b74c419 +geom 164: material #164 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:9be9f00827328ce8 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=1:9be9f00827328ce8 +geom 165: material #165 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:44027fba6cf235c3 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=1:44027fba6cf235c3 +geom 166: material #166 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:65ec6c97e71cce65 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=1:65ec6c97e71cce65 +geom 167: material #167 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:8da81d72b5295057 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=1:8da81d72b5295057 +geom 168: material #168 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:1ec5342902b45b58 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=1:1ec5342902b45b58 +geom 169: material #169 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:443f9f1c936a9628 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=1:443f9f1c936a9628 +geom 170: material #170 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:f66cea641f71b36a camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=1:f66cea641f71b36a +geom 171: material #171 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:60c616eb240e6402 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=1:60c616eb240e6402 +geom 172: material #172 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:98d397b59416e85d camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=1:98d397b59416e85d +geom 173: material #173 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:59ca60e72d09f8b7 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=1:59ca60e72d09f8b7 +geom 174: material #174 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:b8e65953e49aa5e0 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=1:b8e65953e49aa5e0 +geom 175: material #175 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:988a24366bb6f560 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=1:988a24366bb6f560 +geom 176: material #176 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:2ee0b9a38473fe1e camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=1:2ee0b9a38473fe1e +geom 177: material #177 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:e799240a24e6e0ed camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=1:e799240a24e6e0ed +geom 178: material #178 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:14921443a0ba5679 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=1:14921443a0ba5679 +geom 179: material #179 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:0e06c2b68632d68a camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=1:0e06c2b68632d68a +geom 180: material #180 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:e258aefe6c1eea33 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=1:e258aefe6c1eea33 +geom 181: material #181 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:e924c14fb68a2966 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=1:e924c14fb68a2966 +geom 182: material #182 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:964c7cd8651864ce camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=1:964c7cd8651864ce +geom 183: material #183 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:87e5bc8414e70215 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=1:87e5bc8414e70215 +geom 184: material #184 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:6e9e25c1393a3c53 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=1:6e9e25c1393a3c53 +geom 185: material #185 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:c9bd7baef6b3670e camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=1:c9bd7baef6b3670e +geom 186: material #186 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:27687b43ccaaa6b8 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=1:27687b43ccaaa6b8 +geom 187: material #187 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:02956d1c81ba9d95 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=1:02956d1c81ba9d95 +geom 188: material #188 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:908ad3f258b711e0 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=1:908ad3f258b711e0 +geom 189: material #189 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:815dea82c23858f4 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=1:815dea82c23858f4 +geom 190: material #190 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:0f1b94b69f573b6c camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=1:0f1b94b69f573b6c +geom 191: material #191 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:ec171a47622e8061 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=1:ec171a47622e8061 +geom 192: material #192 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:554f4cebf95ecfe3 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=1:554f4cebf95ecfe3 +geom 193: material #193 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:16bed55e0309b62e camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=1:16bed55e0309b62e +geom 194: material #194 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:c0e684b66dcf01ba camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=1:c0e684b66dcf01ba +geom 195: material #195 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:a64738315de64a25 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=1:a64738315de64a25 +geom 196: material #196 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:9c1762102c6dc4b4 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=1:9c1762102c6dc4b4 +geom 197: material #197 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:f0321b3a4ed09a3b camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=1:f0321b3a4ed09a3b +geom 198: material #198 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:b1a3198a95f3cf78 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=1:b1a3198a95f3cf78 +geom 199: material #199 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:cf92243ed97e14dd camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=1:cf92243ed97e14dd +geom 200: material #200 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:0bb08c482c2a4825 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=1:0bb08c482c2a4825 +geom 201: material #201 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:a0397d08dfdcd7d3 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=1:a0397d08dfdcd7d3 +geom 202: material #202 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:3046d6a26702dc2f camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=1:3046d6a26702dc2f +geom 203: material #203 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:49722f19c258764a camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=1:49722f19c258764a +geom 204: material #204 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:806003126719484f camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=1:806003126719484f +geom 205: material #205 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:3e407ed0e9a18a51 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=1:3e407ed0e9a18a51 +geom 206: material #206 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:f207a4a00c8d3a01 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=1:f207a4a00c8d3a01 +geom 207: material #207 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:f55536ed8d680a92 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=1:f55536ed8d680a92 +geom 208: material #208 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:47a1fc0d2282312b camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=1:47a1fc0d2282312b +geom 209: material #209 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:966a352e982dcb9c camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=1:966a352e982dcb9c +geom 210: material #210 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:c257f6a69029b511 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=1:c257f6a69029b511 +geom 211: material #211 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:2bed0c4c80e3d6d2 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=1:2bed0c4c80e3d6d2 +geom 212: material #212 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:5f393a3e380cd82e camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=1:5f393a3e380cd82e +geom 213: material #213 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:9c542db4d36eab87 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=1:9c542db4d36eab87 +geom 214: material #214 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:31593b8d7172c3b7 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=1:31593b8d7172c3b7 +geom 215: material #215 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:2a49ac229eb540e4 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=1:2a49ac229eb540e4 +geom 216: material #216 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:f04e7fe34b0c6820 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=1:f04e7fe34b0c6820 +geom 217: material #217 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:45be58ec11205157 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=1:45be58ec11205157 +geom 218: material #218 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:5871ca49e8651b78 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=1:5871ca49e8651b78 +geom 219: material #219 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:5f0af8ec75ea9587 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=1:5f0af8ec75ea9587 +geom 220: material #220 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:6c1bf6eb9a5aa677 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=1:6c1bf6eb9a5aa677 +geom 221: material #221 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:7b0c993b216970f8 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=1:7b0c993b216970f8 +geom 222: material #222 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:353ba33820aebbc5 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=1:353ba33820aebbc5 +geom 223: material #223 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:1b9101f5b5a80622 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=1:1b9101f5b5a80622 +geom 224: material #224 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:0cff0ca8584ce19c camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=1:0cff0ca8584ce19c +geom 225: material #225 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:9e14b2927ce55e23 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=1:9e14b2927ce55e23 +geom 226: material #226 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:ead78e4030e47495 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=1:ead78e4030e47495 +geom 227: material #227 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:82799a21ebbd12c7 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=1:82799a21ebbd12c7 +geom 228: material #228 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:cfa62b0d232a6726 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=1:cfa62b0d232a6726 +geom 229: material #229 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:f03ea22a58fd023b camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=1:f03ea22a58fd023b +geom 230: material #230 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:fabdb03f7a1224a6 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=1:fabdb03f7a1224a6 +geom 231: material #231 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:ea4e8636be19b5a3 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=1:ea4e8636be19b5a3 +geom 232: material #232 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:ccf997672cd3888c camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=1:ccf997672cd3888c +geom 233: material #233 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:395c9438f3ac48ed camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=1:395c9438f3ac48ed +geom 234: material #234 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:f124e0e9b1b1b2f6 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=1:f124e0e9b1b1b2f6 +geom 235: material #235 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:7886baa5ccab970a camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=1:7886baa5ccab970a +geom 236: material #236 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:8a173cdb9b4bb04d camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=1:8a173cdb9b4bb04d +geom 237: material #237 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:ee1c52de13f10ce2 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=1:ee1c52de13f10ce2 +geom 238: material #238 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:3c2a228fb3fdce2a camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=1:3c2a228fb3fdce2a +geom 239: material #239 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:3e621998768847e0 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=1:3e621998768847e0 +geom 240: material #240 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:bc99ab1eb02af696 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=1:bc99ab1eb02af696 +geom 241: material #241 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:eec882b8068c66e2 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=1:eec882b8068c66e2 +geom 242: material #242 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:30fa1f19bd0432d0 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=1:30fa1f19bd0432d0 +geom 243: material #243 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:2ab176bb34e28d5b camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=1:2ab176bb34e28d5b +geom 244: material #244 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:985ffa1127d42a66 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=1:985ffa1127d42a66 +geom 245: material #245 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:9818ddc3d963e1fc camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=1:9818ddc3d963e1fc +geom 246: material #246 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:056abe1be316d47c camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=1:056abe1be316d47c +geom 247: material #247 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:9cce1fe7d92c99f0 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=1:9cce1fe7d92c99f0 +geom 248: material #248 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:ce299cb842a33236 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=1:ce299cb842a33236 +geom 249: material #249 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:3dfa2d08de2b6eef camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=1:3dfa2d08de2b6eef +geom 250: material #250 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:e47c78919a782071 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=1:e47c78919a782071 +geom 251: material #251 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:d4fce875fe9dd8b6 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=1:d4fce875fe9dd8b6 +geom 252: material #252 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:b3c525b609f2410c camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=1:b3c525b609f2410c +geom 253: material #253 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:fd2311cdb7e72015 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=1:fd2311cdb7e72015 +geom 254: material #254 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:0730b9fdd252ce88 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=1:0730b9fdd252ce88 +geom 255: material #255 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:490ebaba08c10957 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=1:490ebaba08c10957 +geom 256: material #256 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.8566356 motion [] pieces all=12:49c63dff4b2bf27d camera=12:49c63dff4b2bf27d shadow=12:49c63dff4b2bf27d indirect=12:49c63dff4b2bf27d +geom 257: material #256 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.8566356 motion [] pieces all=12:c99da1694bd0d57d camera=12:c99da1694bd0d57d shadow=12:c99da1694bd0d57d indirect=12:c99da1694bd0d57d +geom 258: material #256 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 2.237378 motion [] pieces all=12:f18564427496b1c9 camera=12:f18564427496b1c9 shadow=12:f18564427496b1c9 indirect=12:f18564427496b1c9 +geom 259: material #256 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 2.125317 motion [] pieces all=12:d45767a2f59b3a25 camera=12:d45767a2f59b3a25 shadow=12:d45767a2f59b3a25 indirect=12:d45767a2f59b3a25 +geom 260: material #256 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 2.0 motion [] pieces all=12:fd03a07ee92783ad camera=12:fd03a07ee92783ad shadow=12:fd03a07ee92783ad indirect=12:fd03a07ee92783ad +geom 261: material #256 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:9626b0f2f3e041c5 camera=2:9626b0f2f3e041c5 shadow=2:9626b0f2f3e041c5 indirect=2:9626b0f2f3e041c5 +provenance light /World/Fill: LightOrigin { index: 0, geoms: 0..0 } +provenance light /World/Panel000: LightOrigin { index: 96, geoms: 95..96 } +provenance light /World/Panel001: LightOrigin { index: 95, geoms: 94..95 } +provenance light /World/Panel002: LightOrigin { index: 94, geoms: 93..94 } +provenance light /World/Panel003: LightOrigin { index: 93, geoms: 92..93 } +provenance light /World/Panel004: LightOrigin { index: 92, geoms: 91..92 } +provenance light /World/Panel005: LightOrigin { index: 91, geoms: 90..91 } +provenance light /World/Panel006: LightOrigin { index: 90, geoms: 89..90 } +provenance light /World/Panel007: LightOrigin { index: 89, geoms: 88..89 } +provenance light /World/Panel008: LightOrigin { index: 88, geoms: 87..88 } +provenance light /World/Panel009: LightOrigin { index: 87, geoms: 86..87 } +provenance light /World/Panel010: LightOrigin { index: 86, geoms: 85..86 } +provenance light /World/Panel011: LightOrigin { index: 85, geoms: 84..85 } +provenance light /World/Panel012: LightOrigin { index: 84, geoms: 83..84 } +provenance light /World/Panel013: LightOrigin { index: 83, geoms: 82..83 } +provenance light /World/Panel014: LightOrigin { index: 82, geoms: 81..82 } +provenance light /World/Panel015: LightOrigin { index: 81, geoms: 80..81 } +provenance light /World/Panel016: LightOrigin { index: 80, geoms: 79..80 } +provenance light /World/Panel017: LightOrigin { index: 79, geoms: 78..79 } +provenance light /World/Panel018: LightOrigin { index: 78, geoms: 77..78 } +provenance light /World/Panel019: LightOrigin { index: 77, geoms: 76..77 } +provenance light /World/Panel020: LightOrigin { index: 76, geoms: 75..76 } +provenance light /World/Panel021: LightOrigin { index: 75, geoms: 74..75 } +provenance light /World/Panel022: LightOrigin { index: 74, geoms: 73..74 } +provenance light /World/Panel023: LightOrigin { index: 73, geoms: 72..73 } +provenance light /World/Panel024: LightOrigin { index: 72, geoms: 71..72 } +provenance light /World/Panel025: LightOrigin { index: 71, geoms: 70..71 } +provenance light /World/Panel026: LightOrigin { index: 70, geoms: 69..70 } +provenance light /World/Panel027: LightOrigin { index: 69, geoms: 68..69 } +provenance light /World/Panel028: LightOrigin { index: 68, geoms: 67..68 } +provenance light /World/Panel029: LightOrigin { index: 67, geoms: 66..67 } +provenance light /World/Panel030: LightOrigin { index: 66, geoms: 65..66 } +provenance light /World/Panel031: LightOrigin { index: 65, geoms: 64..65 } +provenance light /World/Panel032: LightOrigin { index: 64, geoms: 63..64 } +provenance light /World/Panel033: LightOrigin { index: 63, geoms: 62..63 } +provenance light /World/Panel034: LightOrigin { index: 62, geoms: 61..62 } +provenance light /World/Panel035: LightOrigin { index: 61, geoms: 60..61 } +provenance light /World/Panel036: LightOrigin { index: 60, geoms: 59..60 } +provenance light /World/Panel037: LightOrigin { index: 59, geoms: 58..59 } +provenance light /World/Panel038: LightOrigin { index: 58, geoms: 57..58 } +provenance light /World/Panel039: LightOrigin { index: 57, geoms: 56..57 } +provenance light /World/Panel040: LightOrigin { index: 56, geoms: 55..56 } +provenance light /World/Panel041: LightOrigin { index: 55, geoms: 54..55 } +provenance light /World/Panel042: LightOrigin { index: 54, geoms: 53..54 } +provenance light /World/Panel043: LightOrigin { index: 53, geoms: 52..53 } +provenance light /World/Panel044: LightOrigin { index: 52, geoms: 51..52 } +provenance light /World/Panel045: LightOrigin { index: 51, geoms: 50..51 } +provenance light /World/Panel046: LightOrigin { index: 50, geoms: 49..50 } +provenance light /World/Panel047: LightOrigin { index: 49, geoms: 48..49 } +provenance light /World/Panel048: LightOrigin { index: 48, geoms: 47..48 } +provenance light /World/Panel049: LightOrigin { index: 47, geoms: 46..47 } +provenance light /World/Panel050: LightOrigin { index: 46, geoms: 45..46 } +provenance light /World/Panel051: LightOrigin { index: 45, geoms: 44..45 } +provenance light /World/Panel052: LightOrigin { index: 44, geoms: 43..44 } +provenance light /World/Panel053: LightOrigin { index: 43, geoms: 42..43 } +provenance light /World/Panel054: LightOrigin { index: 42, geoms: 41..42 } +provenance light /World/Panel055: LightOrigin { index: 41, geoms: 40..41 } +provenance light /World/Panel056: LightOrigin { index: 40, geoms: 39..40 } +provenance light /World/Panel057: LightOrigin { index: 39, geoms: 38..39 } +provenance light /World/Panel058: LightOrigin { index: 38, geoms: 37..38 } +provenance light /World/Panel059: LightOrigin { index: 37, geoms: 36..37 } +provenance light /World/Panel060: LightOrigin { index: 36, geoms: 35..36 } +provenance light /World/Panel061: LightOrigin { index: 35, geoms: 34..35 } +provenance light /World/Panel062: LightOrigin { index: 34, geoms: 33..34 } +provenance light /World/Panel063: LightOrigin { index: 33, geoms: 32..33 } +provenance light /World/Panel064: LightOrigin { index: 32, geoms: 31..32 } +provenance light /World/Panel065: LightOrigin { index: 31, geoms: 30..31 } +provenance light /World/Panel066: LightOrigin { index: 30, geoms: 29..30 } +provenance light /World/Panel067: LightOrigin { index: 29, geoms: 28..29 } +provenance light /World/Panel068: LightOrigin { index: 28, geoms: 27..28 } +provenance light /World/Panel069: LightOrigin { index: 27, geoms: 26..27 } +provenance light /World/Panel070: LightOrigin { index: 26, geoms: 25..26 } +provenance light /World/Panel071: LightOrigin { index: 25, geoms: 24..25 } +provenance light /World/Panel072: LightOrigin { index: 24, geoms: 23..24 } +provenance light /World/Panel073: LightOrigin { index: 23, geoms: 22..23 } +provenance light /World/Panel074: LightOrigin { index: 22, geoms: 21..22 } +provenance light /World/Panel075: LightOrigin { index: 21, geoms: 20..21 } +provenance light /World/Panel076: LightOrigin { index: 20, geoms: 19..20 } +provenance light /World/Panel077: LightOrigin { index: 19, geoms: 18..19 } +provenance light /World/Panel078: LightOrigin { index: 18, geoms: 17..18 } +provenance light /World/Panel079: LightOrigin { index: 17, geoms: 16..17 } +provenance light /World/Sphere000: LightOrigin { index: 256, geoms: 255..256 } +provenance light /World/Sphere001: LightOrigin { index: 255, geoms: 254..255 } +provenance light /World/Sphere002: LightOrigin { index: 254, geoms: 253..254 } +provenance light /World/Sphere003: LightOrigin { index: 253, geoms: 252..253 } +provenance light /World/Sphere004: LightOrigin { index: 252, geoms: 251..252 } +provenance light /World/Sphere005: LightOrigin { index: 251, geoms: 250..251 } +provenance light /World/Sphere006: LightOrigin { index: 250, geoms: 249..250 } +provenance light /World/Sphere007: LightOrigin { index: 249, geoms: 248..249 } +provenance light /World/Sphere008: LightOrigin { index: 248, geoms: 247..248 } +provenance light /World/Sphere009: LightOrigin { index: 247, geoms: 246..247 } +provenance light /World/Sphere010: LightOrigin { index: 246, geoms: 245..246 } +provenance light /World/Sphere011: LightOrigin { index: 245, geoms: 244..245 } +provenance light /World/Sphere012: LightOrigin { index: 244, geoms: 243..244 } +provenance light /World/Sphere013: LightOrigin { index: 243, geoms: 242..243 } +provenance light /World/Sphere014: LightOrigin { index: 242, geoms: 241..242 } +provenance light /World/Sphere015: LightOrigin { index: 241, geoms: 240..241 } +provenance light /World/Sphere016: LightOrigin { index: 240, geoms: 239..240 } +provenance light /World/Sphere017: LightOrigin { index: 239, geoms: 238..239 } +provenance light /World/Sphere018: LightOrigin { index: 238, geoms: 237..238 } +provenance light /World/Sphere019: LightOrigin { index: 237, geoms: 236..237 } +provenance light /World/Sphere020: LightOrigin { index: 236, geoms: 235..236 } +provenance light /World/Sphere021: LightOrigin { index: 235, geoms: 234..235 } +provenance light /World/Sphere022: LightOrigin { index: 234, geoms: 233..234 } +provenance light /World/Sphere023: LightOrigin { index: 233, geoms: 232..233 } +provenance light /World/Sphere024: LightOrigin { index: 232, geoms: 231..232 } +provenance light /World/Sphere025: LightOrigin { index: 231, geoms: 230..231 } +provenance light /World/Sphere026: LightOrigin { index: 230, geoms: 229..230 } +provenance light /World/Sphere027: LightOrigin { index: 229, geoms: 228..229 } +provenance light /World/Sphere028: LightOrigin { index: 228, geoms: 227..228 } +provenance light /World/Sphere029: LightOrigin { index: 227, geoms: 226..227 } +provenance light /World/Sphere030: LightOrigin { index: 226, geoms: 225..226 } +provenance light /World/Sphere031: LightOrigin { index: 225, geoms: 224..225 } +provenance light /World/Sphere032: LightOrigin { index: 224, geoms: 223..224 } +provenance light /World/Sphere033: LightOrigin { index: 223, geoms: 222..223 } +provenance light /World/Sphere034: LightOrigin { index: 222, geoms: 221..222 } +provenance light /World/Sphere035: LightOrigin { index: 221, geoms: 220..221 } +provenance light /World/Sphere036: LightOrigin { index: 220, geoms: 219..220 } +provenance light /World/Sphere037: LightOrigin { index: 219, geoms: 218..219 } +provenance light /World/Sphere038: LightOrigin { index: 218, geoms: 217..218 } +provenance light /World/Sphere039: LightOrigin { index: 217, geoms: 216..217 } +provenance light /World/Sphere040: LightOrigin { index: 216, geoms: 215..216 } +provenance light /World/Sphere041: LightOrigin { index: 215, geoms: 214..215 } +provenance light /World/Sphere042: LightOrigin { index: 214, geoms: 213..214 } +provenance light /World/Sphere043: LightOrigin { index: 213, geoms: 212..213 } +provenance light /World/Sphere044: LightOrigin { index: 212, geoms: 211..212 } +provenance light /World/Sphere045: LightOrigin { index: 211, geoms: 210..211 } +provenance light /World/Sphere046: LightOrigin { index: 210, geoms: 209..210 } +provenance light /World/Sphere047: LightOrigin { index: 209, geoms: 208..209 } +provenance light /World/Sphere048: LightOrigin { index: 208, geoms: 207..208 } +provenance light /World/Sphere049: LightOrigin { index: 207, geoms: 206..207 } +provenance light /World/Sphere050: LightOrigin { index: 206, geoms: 205..206 } +provenance light /World/Sphere051: LightOrigin { index: 205, geoms: 204..205 } +provenance light /World/Sphere052: LightOrigin { index: 204, geoms: 203..204 } +provenance light /World/Sphere053: LightOrigin { index: 203, geoms: 202..203 } +provenance light /World/Sphere054: LightOrigin { index: 202, geoms: 201..202 } +provenance light /World/Sphere055: LightOrigin { index: 201, geoms: 200..201 } +provenance light /World/Sphere056: LightOrigin { index: 200, geoms: 199..200 } +provenance light /World/Sphere057: LightOrigin { index: 199, geoms: 198..199 } +provenance light /World/Sphere058: LightOrigin { index: 198, geoms: 197..198 } +provenance light /World/Sphere059: LightOrigin { index: 197, geoms: 196..197 } +provenance light /World/Sphere060: LightOrigin { index: 196, geoms: 195..196 } +provenance light /World/Sphere061: LightOrigin { index: 195, geoms: 194..195 } +provenance light /World/Sphere062: LightOrigin { index: 194, geoms: 193..194 } +provenance light /World/Sphere063: LightOrigin { index: 193, geoms: 192..193 } +provenance light /World/Sphere064: LightOrigin { index: 192, geoms: 191..192 } +provenance light /World/Sphere065: LightOrigin { index: 191, geoms: 190..191 } +provenance light /World/Sphere066: LightOrigin { index: 190, geoms: 189..190 } +provenance light /World/Sphere067: LightOrigin { index: 189, geoms: 188..189 } +provenance light /World/Sphere068: LightOrigin { index: 188, geoms: 187..188 } +provenance light /World/Sphere069: LightOrigin { index: 187, geoms: 186..187 } +provenance light /World/Sphere070: LightOrigin { index: 186, geoms: 185..186 } +provenance light /World/Sphere071: LightOrigin { index: 185, geoms: 184..185 } +provenance light /World/Sphere072: LightOrigin { index: 184, geoms: 183..184 } +provenance light /World/Sphere073: LightOrigin { index: 183, geoms: 182..183 } +provenance light /World/Sphere074: LightOrigin { index: 182, geoms: 181..182 } +provenance light /World/Sphere075: LightOrigin { index: 181, geoms: 180..181 } +provenance light /World/Sphere076: LightOrigin { index: 180, geoms: 179..180 } +provenance light /World/Sphere077: LightOrigin { index: 179, geoms: 178..179 } +provenance light /World/Sphere078: LightOrigin { index: 178, geoms: 177..178 } +provenance light /World/Sphere079: LightOrigin { index: 177, geoms: 176..177 } +provenance light /World/Sphere080: LightOrigin { index: 176, geoms: 175..176 } +provenance light /World/Sphere081: LightOrigin { index: 175, geoms: 174..175 } +provenance light /World/Sphere082: LightOrigin { index: 174, geoms: 173..174 } +provenance light /World/Sphere083: LightOrigin { index: 173, geoms: 172..173 } +provenance light /World/Sphere084: LightOrigin { index: 172, geoms: 171..172 } +provenance light /World/Sphere085: LightOrigin { index: 171, geoms: 170..171 } +provenance light /World/Sphere086: LightOrigin { index: 170, geoms: 169..170 } +provenance light /World/Sphere087: LightOrigin { index: 169, geoms: 168..169 } +provenance light /World/Sphere088: LightOrigin { index: 168, geoms: 167..168 } +provenance light /World/Sphere089: LightOrigin { index: 167, geoms: 166..167 } +provenance light /World/Sphere090: LightOrigin { index: 166, geoms: 165..166 } +provenance light /World/Sphere091: LightOrigin { index: 165, geoms: 164..165 } +provenance light /World/Sphere092: LightOrigin { index: 164, geoms: 163..164 } +provenance light /World/Sphere093: LightOrigin { index: 163, geoms: 162..163 } +provenance light /World/Sphere094: LightOrigin { index: 162, geoms: 161..162 } +provenance light /World/Sphere095: LightOrigin { index: 161, geoms: 160..161 } +provenance light /World/Sphere096: LightOrigin { index: 160, geoms: 159..160 } +provenance light /World/Sphere097: LightOrigin { index: 159, geoms: 158..159 } +provenance light /World/Sphere098: LightOrigin { index: 158, geoms: 157..158 } +provenance light /World/Sphere099: LightOrigin { index: 157, geoms: 156..157 } +provenance light /World/Sphere100: LightOrigin { index: 156, geoms: 155..156 } +provenance light /World/Sphere101: LightOrigin { index: 155, geoms: 154..155 } +provenance light /World/Sphere102: LightOrigin { index: 154, geoms: 153..154 } +provenance light /World/Sphere103: LightOrigin { index: 153, geoms: 152..153 } +provenance light /World/Sphere104: LightOrigin { index: 152, geoms: 151..152 } +provenance light /World/Sphere105: LightOrigin { index: 151, geoms: 150..151 } +provenance light /World/Sphere106: LightOrigin { index: 150, geoms: 149..150 } +provenance light /World/Sphere107: LightOrigin { index: 149, geoms: 148..149 } +provenance light /World/Sphere108: LightOrigin { index: 148, geoms: 147..148 } +provenance light /World/Sphere109: LightOrigin { index: 147, geoms: 146..147 } +provenance light /World/Sphere110: LightOrigin { index: 146, geoms: 145..146 } +provenance light /World/Sphere111: LightOrigin { index: 145, geoms: 144..145 } +provenance light /World/Sphere112: LightOrigin { index: 144, geoms: 143..144 } +provenance light /World/Sphere113: LightOrigin { index: 143, geoms: 142..143 } +provenance light /World/Sphere114: LightOrigin { index: 142, geoms: 141..142 } +provenance light /World/Sphere115: LightOrigin { index: 141, geoms: 140..141 } +provenance light /World/Sphere116: LightOrigin { index: 140, geoms: 139..140 } +provenance light /World/Sphere117: LightOrigin { index: 139, geoms: 138..139 } +provenance light /World/Sphere118: LightOrigin { index: 138, geoms: 137..138 } +provenance light /World/Sphere119: LightOrigin { index: 137, geoms: 136..137 } +provenance light /World/Sphere120: LightOrigin { index: 136, geoms: 135..136 } +provenance light /World/Sphere121: LightOrigin { index: 135, geoms: 134..135 } +provenance light /World/Sphere122: LightOrigin { index: 134, geoms: 133..134 } +provenance light /World/Sphere123: LightOrigin { index: 133, geoms: 132..133 } +provenance light /World/Sphere124: LightOrigin { index: 132, geoms: 131..132 } +provenance light /World/Sphere125: LightOrigin { index: 131, geoms: 130..131 } +provenance light /World/Sphere126: LightOrigin { index: 130, geoms: 129..130 } +provenance light /World/Sphere127: LightOrigin { index: 129, geoms: 128..129 } +provenance light /World/Sphere128: LightOrigin { index: 128, geoms: 127..128 } +provenance light /World/Sphere129: LightOrigin { index: 127, geoms: 126..127 } +provenance light /World/Sphere130: LightOrigin { index: 126, geoms: 125..126 } +provenance light /World/Sphere131: LightOrigin { index: 125, geoms: 124..125 } +provenance light /World/Sphere132: LightOrigin { index: 124, geoms: 123..124 } +provenance light /World/Sphere133: LightOrigin { index: 123, geoms: 122..123 } +provenance light /World/Sphere134: LightOrigin { index: 122, geoms: 121..122 } +provenance light /World/Sphere135: LightOrigin { index: 121, geoms: 120..121 } +provenance light /World/Sphere136: LightOrigin { index: 120, geoms: 119..120 } +provenance light /World/Sphere137: LightOrigin { index: 119, geoms: 118..119 } +provenance light /World/Sphere138: LightOrigin { index: 118, geoms: 117..118 } +provenance light /World/Sphere139: LightOrigin { index: 117, geoms: 116..117 } +provenance light /World/Sphere140: LightOrigin { index: 116, geoms: 115..116 } +provenance light /World/Sphere141: LightOrigin { index: 115, geoms: 114..115 } +provenance light /World/Sphere142: LightOrigin { index: 114, geoms: 113..114 } +provenance light /World/Sphere143: LightOrigin { index: 113, geoms: 112..113 } +provenance light /World/Sphere144: LightOrigin { index: 112, geoms: 111..112 } +provenance light /World/Sphere145: LightOrigin { index: 111, geoms: 110..111 } +provenance light /World/Sphere146: LightOrigin { index: 110, geoms: 109..110 } +provenance light /World/Sphere147: LightOrigin { index: 109, geoms: 108..109 } +provenance light /World/Sphere148: LightOrigin { index: 108, geoms: 107..108 } +provenance light /World/Sphere149: LightOrigin { index: 107, geoms: 106..107 } +provenance light /World/Sphere150: LightOrigin { index: 106, geoms: 105..106 } +provenance light /World/Sphere151: LightOrigin { index: 105, geoms: 104..105 } +provenance light /World/Sphere152: LightOrigin { index: 104, geoms: 103..104 } +provenance light /World/Sphere153: LightOrigin { index: 103, geoms: 102..103 } +provenance light /World/Sphere154: LightOrigin { index: 102, geoms: 101..102 } +provenance light /World/Sphere155: LightOrigin { index: 101, geoms: 100..101 } +provenance light /World/Sphere156: LightOrigin { index: 100, geoms: 99..100 } +provenance light /World/Sphere157: LightOrigin { index: 99, geoms: 98..99 } +provenance light /World/Sphere158: LightOrigin { index: 98, geoms: 97..98 } +provenance light /World/Sphere159: LightOrigin { index: 97, geoms: 96..97 } +provenance light /World/Spot00: LightOrigin { index: 16, geoms: 15..16 } +provenance light /World/Spot01: LightOrigin { index: 15, geoms: 14..15 } +provenance light /World/Spot02: LightOrigin { index: 14, geoms: 13..14 } +provenance light /World/Spot03: LightOrigin { index: 13, geoms: 12..13 } +provenance light /World/Spot04: LightOrigin { index: 12, geoms: 11..12 } +provenance light /World/Spot05: LightOrigin { index: 11, geoms: 10..11 } +provenance light /World/Spot06: LightOrigin { index: 10, geoms: 9..10 } +provenance light /World/Spot07: LightOrigin { index: 9, geoms: 8..9 } +provenance light /World/Spot08: LightOrigin { index: 8, geoms: 7..8 } +provenance light /World/Spot09: LightOrigin { index: 7, geoms: 6..7 } +provenance light /World/Spot10: LightOrigin { index: 6, geoms: 5..6 } +provenance light /World/Spot11: LightOrigin { index: 5, geoms: 4..5 } +provenance light /World/Spot12: LightOrigin { index: 4, geoms: 3..4 } +provenance light /World/Spot13: LightOrigin { index: 3, geoms: 2..3 } +provenance light /World/Spot14: LightOrigin { index: 2, geoms: 1..2 } +provenance light /World/Spot15: LightOrigin { index: 1, geoms: 0..1 } +provenance geometry 0..1: /World/Spot15 +provenance geometry 1..2: /World/Spot14 +provenance geometry 2..3: /World/Spot13 +provenance geometry 3..4: /World/Spot12 +provenance geometry 4..5: /World/Spot11 +provenance geometry 5..6: /World/Spot10 +provenance geometry 6..7: /World/Spot09 +provenance geometry 7..8: /World/Spot08 +provenance geometry 8..9: /World/Spot07 +provenance geometry 9..10: /World/Spot06 +provenance geometry 10..11: /World/Spot05 +provenance geometry 11..12: /World/Spot04 +provenance geometry 12..13: /World/Spot03 +provenance geometry 13..14: /World/Spot02 +provenance geometry 14..15: /World/Spot01 +provenance geometry 15..16: /World/Spot00 +provenance geometry 16..17: /World/Panel079 +provenance geometry 17..18: /World/Panel078 +provenance geometry 18..19: /World/Panel077 +provenance geometry 19..20: /World/Panel076 +provenance geometry 20..21: /World/Panel075 +provenance geometry 21..22: /World/Panel074 +provenance geometry 22..23: /World/Panel073 +provenance geometry 23..24: /World/Panel072 +provenance geometry 24..25: /World/Panel071 +provenance geometry 25..26: /World/Panel070 +provenance geometry 26..27: /World/Panel069 +provenance geometry 27..28: /World/Panel068 +provenance geometry 28..29: /World/Panel067 +provenance geometry 29..30: /World/Panel066 +provenance geometry 30..31: /World/Panel065 +provenance geometry 31..32: /World/Panel064 +provenance geometry 32..33: /World/Panel063 +provenance geometry 33..34: /World/Panel062 +provenance geometry 34..35: /World/Panel061 +provenance geometry 35..36: /World/Panel060 +provenance geometry 36..37: /World/Panel059 +provenance geometry 37..38: /World/Panel058 +provenance geometry 38..39: /World/Panel057 +provenance geometry 39..40: /World/Panel056 +provenance geometry 40..41: /World/Panel055 +provenance geometry 41..42: /World/Panel054 +provenance geometry 42..43: /World/Panel053 +provenance geometry 43..44: /World/Panel052 +provenance geometry 44..45: /World/Panel051 +provenance geometry 45..46: /World/Panel050 +provenance geometry 46..47: /World/Panel049 +provenance geometry 47..48: /World/Panel048 +provenance geometry 48..49: /World/Panel047 +provenance geometry 49..50: /World/Panel046 +provenance geometry 50..51: /World/Panel045 +provenance geometry 51..52: /World/Panel044 +provenance geometry 52..53: /World/Panel043 +provenance geometry 53..54: /World/Panel042 +provenance geometry 54..55: /World/Panel041 +provenance geometry 55..56: /World/Panel040 +provenance geometry 56..57: /World/Panel039 +provenance geometry 57..58: /World/Panel038 +provenance geometry 58..59: /World/Panel037 +provenance geometry 59..60: /World/Panel036 +provenance geometry 60..61: /World/Panel035 +provenance geometry 61..62: /World/Panel034 +provenance geometry 62..63: /World/Panel033 +provenance geometry 63..64: /World/Panel032 +provenance geometry 64..65: /World/Panel031 +provenance geometry 65..66: /World/Panel030 +provenance geometry 66..67: /World/Panel029 +provenance geometry 67..68: /World/Panel028 +provenance geometry 68..69: /World/Panel027 +provenance geometry 69..70: /World/Panel026 +provenance geometry 70..71: /World/Panel025 +provenance geometry 71..72: /World/Panel024 +provenance geometry 72..73: /World/Panel023 +provenance geometry 73..74: /World/Panel022 +provenance geometry 74..75: /World/Panel021 +provenance geometry 75..76: /World/Panel020 +provenance geometry 76..77: /World/Panel019 +provenance geometry 77..78: /World/Panel018 +provenance geometry 78..79: /World/Panel017 +provenance geometry 79..80: /World/Panel016 +provenance geometry 80..81: /World/Panel015 +provenance geometry 81..82: /World/Panel014 +provenance geometry 82..83: /World/Panel013 +provenance geometry 83..84: /World/Panel012 +provenance geometry 84..85: /World/Panel011 +provenance geometry 85..86: /World/Panel010 +provenance geometry 86..87: /World/Panel009 +provenance geometry 87..88: /World/Panel008 +provenance geometry 88..89: /World/Panel007 +provenance geometry 89..90: /World/Panel006 +provenance geometry 90..91: /World/Panel005 +provenance geometry 91..92: /World/Panel004 +provenance geometry 92..93: /World/Panel003 +provenance geometry 93..94: /World/Panel002 +provenance geometry 94..95: /World/Panel001 +provenance geometry 95..96: /World/Panel000 +provenance geometry 96..97: /World/Sphere159 +provenance geometry 97..98: /World/Sphere158 +provenance geometry 98..99: /World/Sphere157 +provenance geometry 99..100: /World/Sphere156 +provenance geometry 100..101: /World/Sphere155 +provenance geometry 101..102: /World/Sphere154 +provenance geometry 102..103: /World/Sphere153 +provenance geometry 103..104: /World/Sphere152 +provenance geometry 104..105: /World/Sphere151 +provenance geometry 105..106: /World/Sphere150 +provenance geometry 106..107: /World/Sphere149 +provenance geometry 107..108: /World/Sphere148 +provenance geometry 108..109: /World/Sphere147 +provenance geometry 109..110: /World/Sphere146 +provenance geometry 110..111: /World/Sphere145 +provenance geometry 111..112: /World/Sphere144 +provenance geometry 112..113: /World/Sphere143 +provenance geometry 113..114: /World/Sphere142 +provenance geometry 114..115: /World/Sphere141 +provenance geometry 115..116: /World/Sphere140 +provenance geometry 116..117: /World/Sphere139 +provenance geometry 117..118: /World/Sphere138 +provenance geometry 118..119: /World/Sphere137 +provenance geometry 119..120: /World/Sphere136 +provenance geometry 120..121: /World/Sphere135 +provenance geometry 121..122: /World/Sphere134 +provenance geometry 122..123: /World/Sphere133 +provenance geometry 123..124: /World/Sphere132 +provenance geometry 124..125: /World/Sphere131 +provenance geometry 125..126: /World/Sphere130 +provenance geometry 126..127: /World/Sphere129 +provenance geometry 127..128: /World/Sphere128 +provenance geometry 128..129: /World/Sphere127 +provenance geometry 129..130: /World/Sphere126 +provenance geometry 130..131: /World/Sphere125 +provenance geometry 131..132: /World/Sphere124 +provenance geometry 132..133: /World/Sphere123 +provenance geometry 133..134: /World/Sphere122 +provenance geometry 134..135: /World/Sphere121 +provenance geometry 135..136: /World/Sphere120 +provenance geometry 136..137: /World/Sphere119 +provenance geometry 137..138: /World/Sphere118 +provenance geometry 138..139: /World/Sphere117 +provenance geometry 139..140: /World/Sphere116 +provenance geometry 140..141: /World/Sphere115 +provenance geometry 141..142: /World/Sphere114 +provenance geometry 142..143: /World/Sphere113 +provenance geometry 143..144: /World/Sphere112 +provenance geometry 144..145: /World/Sphere111 +provenance geometry 145..146: /World/Sphere110 +provenance geometry 146..147: /World/Sphere109 +provenance geometry 147..148: /World/Sphere108 +provenance geometry 148..149: /World/Sphere107 +provenance geometry 149..150: /World/Sphere106 +provenance geometry 150..151: /World/Sphere105 +provenance geometry 151..152: /World/Sphere104 +provenance geometry 152..153: /World/Sphere103 +provenance geometry 153..154: /World/Sphere102 +provenance geometry 154..155: /World/Sphere101 +provenance geometry 155..156: /World/Sphere100 +provenance geometry 156..157: /World/Sphere099 +provenance geometry 157..158: /World/Sphere098 +provenance geometry 158..159: /World/Sphere097 +provenance geometry 159..160: /World/Sphere096 +provenance geometry 160..161: /World/Sphere095 +provenance geometry 161..162: /World/Sphere094 +provenance geometry 162..163: /World/Sphere093 +provenance geometry 163..164: /World/Sphere092 +provenance geometry 164..165: /World/Sphere091 +provenance geometry 165..166: /World/Sphere090 +provenance geometry 166..167: /World/Sphere089 +provenance geometry 167..168: /World/Sphere088 +provenance geometry 168..169: /World/Sphere087 +provenance geometry 169..170: /World/Sphere086 +provenance geometry 170..171: /World/Sphere085 +provenance geometry 171..172: /World/Sphere084 +provenance geometry 172..173: /World/Sphere083 +provenance geometry 173..174: /World/Sphere082 +provenance geometry 174..175: /World/Sphere081 +provenance geometry 175..176: /World/Sphere080 +provenance geometry 176..177: /World/Sphere079 +provenance geometry 177..178: /World/Sphere078 +provenance geometry 178..179: /World/Sphere077 +provenance geometry 179..180: /World/Sphere076 +provenance geometry 180..181: /World/Sphere075 +provenance geometry 181..182: /World/Sphere074 +provenance geometry 182..183: /World/Sphere073 +provenance geometry 183..184: /World/Sphere072 +provenance geometry 184..185: /World/Sphere071 +provenance geometry 185..186: /World/Sphere070 +provenance geometry 186..187: /World/Sphere069 +provenance geometry 187..188: /World/Sphere068 +provenance geometry 188..189: /World/Sphere067 +provenance geometry 189..190: /World/Sphere066 +provenance geometry 190..191: /World/Sphere065 +provenance geometry 191..192: /World/Sphere064 +provenance geometry 192..193: /World/Sphere063 +provenance geometry 193..194: /World/Sphere062 +provenance geometry 194..195: /World/Sphere061 +provenance geometry 195..196: /World/Sphere060 +provenance geometry 196..197: /World/Sphere059 +provenance geometry 197..198: /World/Sphere058 +provenance geometry 198..199: /World/Sphere057 +provenance geometry 199..200: /World/Sphere056 +provenance geometry 200..201: /World/Sphere055 +provenance geometry 201..202: /World/Sphere054 +provenance geometry 202..203: /World/Sphere053 +provenance geometry 203..204: /World/Sphere052 +provenance geometry 204..205: /World/Sphere051 +provenance geometry 205..206: /World/Sphere050 +provenance geometry 206..207: /World/Sphere049 +provenance geometry 207..208: /World/Sphere048 +provenance geometry 208..209: /World/Sphere047 +provenance geometry 209..210: /World/Sphere046 +provenance geometry 210..211: /World/Sphere045 +provenance geometry 211..212: /World/Sphere044 +provenance geometry 212..213: /World/Sphere043 +provenance geometry 213..214: /World/Sphere042 +provenance geometry 214..215: /World/Sphere041 +provenance geometry 215..216: /World/Sphere040 +provenance geometry 216..217: /World/Sphere039 +provenance geometry 217..218: /World/Sphere038 +provenance geometry 218..219: /World/Sphere037 +provenance geometry 219..220: /World/Sphere036 +provenance geometry 220..221: /World/Sphere035 +provenance geometry 221..222: /World/Sphere034 +provenance geometry 222..223: /World/Sphere033 +provenance geometry 223..224: /World/Sphere032 +provenance geometry 224..225: /World/Sphere031 +provenance geometry 225..226: /World/Sphere030 +provenance geometry 226..227: /World/Sphere029 +provenance geometry 227..228: /World/Sphere028 +provenance geometry 228..229: /World/Sphere027 +provenance geometry 229..230: /World/Sphere026 +provenance geometry 230..231: /World/Sphere025 +provenance geometry 231..232: /World/Sphere024 +provenance geometry 232..233: /World/Sphere023 +provenance geometry 233..234: /World/Sphere022 +provenance geometry 234..235: /World/Sphere021 +provenance geometry 235..236: /World/Sphere020 +provenance geometry 236..237: /World/Sphere019 +provenance geometry 237..238: /World/Sphere018 +provenance geometry 238..239: /World/Sphere017 +provenance geometry 239..240: /World/Sphere016 +provenance geometry 240..241: /World/Sphere015 +provenance geometry 241..242: /World/Sphere014 +provenance geometry 242..243: /World/Sphere013 +provenance geometry 243..244: /World/Sphere012 +provenance geometry 244..245: /World/Sphere011 +provenance geometry 245..246: /World/Sphere010 +provenance geometry 246..247: /World/Sphere009 +provenance geometry 247..248: /World/Sphere008 +provenance geometry 248..249: /World/Sphere007 +provenance geometry 249..250: /World/Sphere006 +provenance geometry 250..251: /World/Sphere005 +provenance geometry 251..252: /World/Sphere004 +provenance geometry 252..253: /World/Sphere003 +provenance geometry 253..254: /World/Sphere002 +provenance geometry 254..255: /World/Sphere001 +provenance geometry 255..256: /World/Sphere000 +provenance geometry 256..257: /World/Wall4 +provenance geometry 257..258: /World/Wall3 +provenance geometry 258..259: /World/Wall2 +provenance geometry 259..260: /World/Wall1 +provenance geometry 260..261: /World/Wall0 +provenance geometry 261..262: /World/Floor +provenance mesh: MeshOrigin { geom_id: 256, slot: 0, baked: false, moving: false } +provenance mesh: MeshOrigin { geom_id: 257, slot: 0, baked: false, moving: false } +provenance mesh: MeshOrigin { geom_id: 258, slot: 0, baked: false, moving: false } +provenance mesh: MeshOrigin { geom_id: 259, slot: 0, baked: false, moving: false } +provenance mesh: MeshOrigin { geom_id: 260, slot: 0, baked: false, moving: false } +provenance mesh: MeshOrigin { geom_id: 261, slot: 1, baked: true, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 18161012096923765881, n_points: 8, n_indices: 24, n_uvs: None, smooth: false, material: 0 }), placements: 5, shared: false, displaced: false } +provenance mesh slot 1: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 14002714535549629103, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/World/Cam"), cameras: ["/World/Cam"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/World/Cam"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/many_lights_usda-492e76bd4d2bdc51-1.image b/crates/crust-core/tests/data/import_baselines/many_lights_usda-492e76bd4d2bdc51-1.image new file mode 100644 index 000000000..3c58a13e7 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/many_lights_usda-492e76bd4d2bdc51-1.image @@ -0,0 +1 @@ +480x270 16spp clamp-off 324b3d3f36346629 diff --git a/crates/crust-core/tests/data/import_baselines/many_lights_usda-492e76bd4d2bdc51-2.digest b/crates/crust-core/tests/data/import_baselines/many_lights_usda-492e76bd4d2bdc51-2.digest new file mode 100644 index 000000000..888e2d583 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/many_lights_usda-492e76bd4d2bdc51-2.digest @@ -0,0 +1,1062 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/World/Cam") +camera: Camera { origin: Vec3A(0.0, 14.0, 26.0), lower_left_corner: Vec3A(-9.000002, 4.6157455, 19.870996), horizontal: Vec3A(18.000004, -0.0, 0.0), vertical: Vec3A(0.0, 8.768508, -5.062501), u: Vec3A(1.0, -0.0, 0.0), v: Vec3A(0.0, 0.8660253, -0.5), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: Some("/Render/settings") +settings: RenderSettings { samples_per_pixel: 64, max_depth: 4, width: 480, height: 270, region: PixelRect { x0: 0, y0: 0, x1: 480, y1: 270 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 20.0, aperture: [36.0, 15.2908], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 10.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/many_lights.usda"], invisible_overrides: Some(0) } +layer: $DIR/many_lights.usda +lights: 257 +light 0: dome name Some("/World/Fill") lpe None pmf 0.0038910506 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 1: area name Some("/World/Spot15") lpe None pmf 0.0038910506 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 2: area name Some("/World/Spot14") lpe None pmf 0.0038910506 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 3: area name Some("/World/Spot13") lpe None pmf 0.0038910506 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 4: area name Some("/World/Spot12") lpe None pmf 0.0038910506 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 5: area name Some("/World/Spot11") lpe None pmf 0.0038910506 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 6: area name Some("/World/Spot10") lpe None pmf 0.0038910506 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 7: area name Some("/World/Spot09") lpe None pmf 0.0038910506 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 8: area name Some("/World/Spot08") lpe None pmf 0.0038910506 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 9: area name Some("/World/Spot07") lpe None pmf 0.0038910506 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 10: area name Some("/World/Spot06") lpe None pmf 0.0038910506 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 11: area name Some("/World/Spot05") lpe None pmf 0.0038910506 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 12: area name Some("/World/Spot04") lpe None pmf 0.0038910506 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 13: area name Some("/World/Spot03") lpe None pmf 0.0038910506 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 14: area name Some("/World/Spot02") lpe None pmf 0.0038910506 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 15: area name Some("/World/Spot01") lpe None pmf 0.0038910506 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 16: area name Some("/World/Spot00") lpe None pmf 0.0038910506 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 17: area name Some("/World/Panel079") lpe None pmf 0.0038910506 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 18: area name Some("/World/Panel078") lpe None pmf 0.0038910506 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 19: area name Some("/World/Panel077") lpe None pmf 0.0038910506 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 20: area name Some("/World/Panel076") lpe None pmf 0.0038910506 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 21: area name Some("/World/Panel075") lpe None pmf 0.0038910506 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 22: area name Some("/World/Panel074") lpe None pmf 0.0038910506 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 23: area name Some("/World/Panel073") lpe None pmf 0.0038910506 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 24: area name Some("/World/Panel072") lpe None pmf 0.0038910506 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 25: area name Some("/World/Panel071") lpe None pmf 0.0038910506 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 26: area name Some("/World/Panel070") lpe None pmf 0.0038910506 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 27: area name Some("/World/Panel069") lpe None pmf 0.0038910506 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 28: area name Some("/World/Panel068") lpe None pmf 0.0038910506 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 29: area name Some("/World/Panel067") lpe None pmf 0.0038910506 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 30: area name Some("/World/Panel066") lpe None pmf 0.0038910506 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 31: area name Some("/World/Panel065") lpe None pmf 0.0038910506 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 32: area name Some("/World/Panel064") lpe None pmf 0.0038910506 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 33: area name Some("/World/Panel063") lpe None pmf 0.0038910506 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 34: area name Some("/World/Panel062") lpe None pmf 0.0038910506 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 35: area name Some("/World/Panel061") lpe None pmf 0.0038910506 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 36: area name Some("/World/Panel060") lpe None pmf 0.0038910506 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 37: area name Some("/World/Panel059") lpe None pmf 0.0038910506 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 38: area name Some("/World/Panel058") lpe None pmf 0.0038910506 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 39: area name Some("/World/Panel057") lpe None pmf 0.0038910506 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 40: area name Some("/World/Panel056") lpe None pmf 0.0038910506 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 41: area name Some("/World/Panel055") lpe None pmf 0.0038910506 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 42: area name Some("/World/Panel054") lpe None pmf 0.0038910506 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 43: area name Some("/World/Panel053") lpe None pmf 0.0038910506 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 44: area name Some("/World/Panel052") lpe None pmf 0.0038910506 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 45: area name Some("/World/Panel051") lpe None pmf 0.0038910506 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 46: area name Some("/World/Panel050") lpe None pmf 0.0038910506 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 47: area name Some("/World/Panel049") lpe None pmf 0.0038910506 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 48: area name Some("/World/Panel048") lpe None pmf 0.0038910506 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 49: area name Some("/World/Panel047") lpe None pmf 0.0038910506 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 50: area name Some("/World/Panel046") lpe None pmf 0.0038910506 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 51: area name Some("/World/Panel045") lpe None pmf 0.0038910506 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 52: area name Some("/World/Panel044") lpe None pmf 0.0038910506 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 53: area name Some("/World/Panel043") lpe None pmf 0.0038910506 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 54: area name Some("/World/Panel042") lpe None pmf 0.0038910506 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 55: area name Some("/World/Panel041") lpe None pmf 0.0038910506 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 56: area name Some("/World/Panel040") lpe None pmf 0.0038910506 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 57: area name Some("/World/Panel039") lpe None pmf 0.0038910506 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 58: area name Some("/World/Panel038") lpe None pmf 0.0038910506 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 59: area name Some("/World/Panel037") lpe None pmf 0.0038910506 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 60: area name Some("/World/Panel036") lpe None pmf 0.0038910506 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 61: area name Some("/World/Panel035") lpe None pmf 0.0038910506 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 62: area name Some("/World/Panel034") lpe None pmf 0.0038910506 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 63: area name Some("/World/Panel033") lpe None pmf 0.0038910506 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 64: area name Some("/World/Panel032") lpe None pmf 0.0038910506 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 65: area name Some("/World/Panel031") lpe None pmf 0.0038910506 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 66: area name Some("/World/Panel030") lpe None pmf 0.0038910506 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 67: area name Some("/World/Panel029") lpe None pmf 0.0038910506 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 68: area name Some("/World/Panel028") lpe None pmf 0.0038910506 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 69: area name Some("/World/Panel027") lpe None pmf 0.0038910506 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 70: area name Some("/World/Panel026") lpe None pmf 0.0038910506 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 71: area name Some("/World/Panel025") lpe None pmf 0.0038910506 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 72: area name Some("/World/Panel024") lpe None pmf 0.0038910506 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 73: area name Some("/World/Panel023") lpe None pmf 0.0038910506 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 74: area name Some("/World/Panel022") lpe None pmf 0.0038910506 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 75: area name Some("/World/Panel021") lpe None pmf 0.0038910506 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 76: area name Some("/World/Panel020") lpe None pmf 0.0038910506 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 77: area name Some("/World/Panel019") lpe None pmf 0.0038910506 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 78: area name Some("/World/Panel018") lpe None pmf 0.0038910506 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 79: area name Some("/World/Panel017") lpe None pmf 0.0038910506 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 80: area name Some("/World/Panel016") lpe None pmf 0.0038910506 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 81: area name Some("/World/Panel015") lpe None pmf 0.0038910506 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 82: area name Some("/World/Panel014") lpe None pmf 0.0038910506 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 83: area name Some("/World/Panel013") lpe None pmf 0.0038910506 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 84: area name Some("/World/Panel012") lpe None pmf 0.0038910506 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 85: area name Some("/World/Panel011") lpe None pmf 0.0038910506 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 86: area name Some("/World/Panel010") lpe None pmf 0.0038910506 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 87: area name Some("/World/Panel009") lpe None pmf 0.0038910506 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 88: area name Some("/World/Panel008") lpe None pmf 0.0038910506 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 89: area name Some("/World/Panel007") lpe None pmf 0.0038910506 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 90: area name Some("/World/Panel006") lpe None pmf 0.0038910506 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 91: area name Some("/World/Panel005") lpe None pmf 0.0038910506 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 92: area name Some("/World/Panel004") lpe None pmf 0.0038910506 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 93: area name Some("/World/Panel003") lpe None pmf 0.0038910506 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 94: area name Some("/World/Panel002") lpe None pmf 0.0038910506 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 95: area name Some("/World/Panel001") lpe None pmf 0.0038910506 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 96: area name Some("/World/Panel000") lpe None pmf 0.0038910506 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 97: area name Some("/World/Sphere159") lpe None pmf 0.0038910506 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 98: area name Some("/World/Sphere158") lpe None pmf 0.0038910506 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 99: area name Some("/World/Sphere157") lpe None pmf 0.0038910506 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 100: area name Some("/World/Sphere156") lpe None pmf 0.0038910506 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 101: area name Some("/World/Sphere155") lpe None pmf 0.0038910506 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 102: area name Some("/World/Sphere154") lpe None pmf 0.0038910506 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 103: area name Some("/World/Sphere153") lpe None pmf 0.0038910506 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 104: area name Some("/World/Sphere152") lpe None pmf 0.0038910506 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 105: area name Some("/World/Sphere151") lpe None pmf 0.0038910506 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 106: area name Some("/World/Sphere150") lpe None pmf 0.0038910506 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 107: area name Some("/World/Sphere149") lpe None pmf 0.0038910506 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 108: area name Some("/World/Sphere148") lpe None pmf 0.0038910506 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 109: area name Some("/World/Sphere147") lpe None pmf 0.0038910506 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 110: area name Some("/World/Sphere146") lpe None pmf 0.0038910506 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 111: area name Some("/World/Sphere145") lpe None pmf 0.0038910506 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 112: area name Some("/World/Sphere144") lpe None pmf 0.0038910506 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 113: area name Some("/World/Sphere143") lpe None pmf 0.0038910506 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 114: area name Some("/World/Sphere142") lpe None pmf 0.0038910506 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 115: area name Some("/World/Sphere141") lpe None pmf 0.0038910506 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 116: area name Some("/World/Sphere140") lpe None pmf 0.0038910506 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 117: area name Some("/World/Sphere139") lpe None pmf 0.0038910506 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 118: area name Some("/World/Sphere138") lpe None pmf 0.0038910506 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 119: area name Some("/World/Sphere137") lpe None pmf 0.0038910506 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 120: area name Some("/World/Sphere136") lpe None pmf 0.0038910506 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 121: area name Some("/World/Sphere135") lpe None pmf 0.0038910506 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 122: area name Some("/World/Sphere134") lpe None pmf 0.0038910506 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 123: area name Some("/World/Sphere133") lpe None pmf 0.0038910506 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 124: area name Some("/World/Sphere132") lpe None pmf 0.0038910506 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 125: area name Some("/World/Sphere131") lpe None pmf 0.0038910506 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 126: area name Some("/World/Sphere130") lpe None pmf 0.0038910506 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 127: area name Some("/World/Sphere129") lpe None pmf 0.0038910506 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 128: area name Some("/World/Sphere128") lpe None pmf 0.0038910506 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 129: area name Some("/World/Sphere127") lpe None pmf 0.0038910506 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 130: area name Some("/World/Sphere126") lpe None pmf 0.0038910506 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 131: area name Some("/World/Sphere125") lpe None pmf 0.0038910506 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 132: area name Some("/World/Sphere124") lpe None pmf 0.0038910506 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 133: area name Some("/World/Sphere123") lpe None pmf 0.0038910506 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 134: area name Some("/World/Sphere122") lpe None pmf 0.0038910506 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 135: area name Some("/World/Sphere121") lpe None pmf 0.0038910506 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 136: area name Some("/World/Sphere120") lpe None pmf 0.0038910506 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 137: area name Some("/World/Sphere119") lpe None pmf 0.0038910506 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 138: area name Some("/World/Sphere118") lpe None pmf 0.0038910506 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 139: area name Some("/World/Sphere117") lpe None pmf 0.0038910506 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 140: area name Some("/World/Sphere116") lpe None pmf 0.0038910506 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 141: area name Some("/World/Sphere115") lpe None pmf 0.0038910506 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 142: area name Some("/World/Sphere114") lpe None pmf 0.0038910506 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 143: area name Some("/World/Sphere113") lpe None pmf 0.0038910506 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 144: area name Some("/World/Sphere112") lpe None pmf 0.0038910506 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 145: area name Some("/World/Sphere111") lpe None pmf 0.0038910506 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 146: area name Some("/World/Sphere110") lpe None pmf 0.0038910506 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 147: area name Some("/World/Sphere109") lpe None pmf 0.0038910506 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 148: area name Some("/World/Sphere108") lpe None pmf 0.0038910506 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 149: area name Some("/World/Sphere107") lpe None pmf 0.0038910506 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 150: area name Some("/World/Sphere106") lpe None pmf 0.0038910506 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 151: area name Some("/World/Sphere105") lpe None pmf 0.0038910506 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 152: area name Some("/World/Sphere104") lpe None pmf 0.0038910506 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 153: area name Some("/World/Sphere103") lpe None pmf 0.0038910506 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 154: area name Some("/World/Sphere102") lpe None pmf 0.0038910506 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 155: area name Some("/World/Sphere101") lpe None pmf 0.0038910506 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 156: area name Some("/World/Sphere100") lpe None pmf 0.0038910506 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 157: area name Some("/World/Sphere099") lpe None pmf 0.0038910506 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 158: area name Some("/World/Sphere098") lpe None pmf 0.0038910506 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 159: area name Some("/World/Sphere097") lpe None pmf 0.0038910506 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 160: area name Some("/World/Sphere096") lpe None pmf 0.0038910506 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 161: area name Some("/World/Sphere095") lpe None pmf 0.0038910506 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 162: area name Some("/World/Sphere094") lpe None pmf 0.0038910506 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 163: area name Some("/World/Sphere093") lpe None pmf 0.0038910506 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 164: area name Some("/World/Sphere092") lpe None pmf 0.0038910506 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 165: area name Some("/World/Sphere091") lpe None pmf 0.0038910506 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 166: area name Some("/World/Sphere090") lpe None pmf 0.0038910506 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 167: area name Some("/World/Sphere089") lpe None pmf 0.0038910506 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 168: area name Some("/World/Sphere088") lpe None pmf 0.0038910506 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 169: area name Some("/World/Sphere087") lpe None pmf 0.0038910506 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 170: area name Some("/World/Sphere086") lpe None pmf 0.0038910506 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 171: area name Some("/World/Sphere085") lpe None pmf 0.0038910506 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 172: area name Some("/World/Sphere084") lpe None pmf 0.0038910506 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 173: area name Some("/World/Sphere083") lpe None pmf 0.0038910506 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 174: area name Some("/World/Sphere082") lpe None pmf 0.0038910506 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 175: area name Some("/World/Sphere081") lpe None pmf 0.0038910506 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 176: area name Some("/World/Sphere080") lpe None pmf 0.0038910506 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 177: area name Some("/World/Sphere079") lpe None pmf 0.0038910506 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 178: area name Some("/World/Sphere078") lpe None pmf 0.0038910506 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 179: area name Some("/World/Sphere077") lpe None pmf 0.0038910506 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 180: area name Some("/World/Sphere076") lpe None pmf 0.0038910506 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 181: area name Some("/World/Sphere075") lpe None pmf 0.0038910506 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 182: area name Some("/World/Sphere074") lpe None pmf 0.0038910506 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 183: area name Some("/World/Sphere073") lpe None pmf 0.0038910506 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 184: area name Some("/World/Sphere072") lpe None pmf 0.0038910506 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 185: area name Some("/World/Sphere071") lpe None pmf 0.0038910506 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 186: area name Some("/World/Sphere070") lpe None pmf 0.0038910506 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 187: area name Some("/World/Sphere069") lpe None pmf 0.0038910506 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 188: area name Some("/World/Sphere068") lpe None pmf 0.0038910506 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 189: area name Some("/World/Sphere067") lpe None pmf 0.0038910506 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 190: area name Some("/World/Sphere066") lpe None pmf 0.0038910506 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 191: area name Some("/World/Sphere065") lpe None pmf 0.0038910506 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 192: area name Some("/World/Sphere064") lpe None pmf 0.0038910506 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 193: area name Some("/World/Sphere063") lpe None pmf 0.0038910506 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 194: area name Some("/World/Sphere062") lpe None pmf 0.0038910506 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 195: area name Some("/World/Sphere061") lpe None pmf 0.0038910506 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 196: area name Some("/World/Sphere060") lpe None pmf 0.0038910506 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 197: area name Some("/World/Sphere059") lpe None pmf 0.0038910506 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 198: area name Some("/World/Sphere058") lpe None pmf 0.0038910506 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 199: area name Some("/World/Sphere057") lpe None pmf 0.0038910506 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 200: area name Some("/World/Sphere056") lpe None pmf 0.0038910506 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 201: area name Some("/World/Sphere055") lpe None pmf 0.0038910506 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 202: area name Some("/World/Sphere054") lpe None pmf 0.0038910506 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 203: area name Some("/World/Sphere053") lpe None pmf 0.0038910506 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 204: area name Some("/World/Sphere052") lpe None pmf 0.0038910506 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 205: area name Some("/World/Sphere051") lpe None pmf 0.0038910506 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 206: area name Some("/World/Sphere050") lpe None pmf 0.0038910506 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 207: area name Some("/World/Sphere049") lpe None pmf 0.0038910506 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 208: area name Some("/World/Sphere048") lpe None pmf 0.0038910506 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 209: area name Some("/World/Sphere047") lpe None pmf 0.0038910506 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 210: area name Some("/World/Sphere046") lpe None pmf 0.0038910506 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 211: area name Some("/World/Sphere045") lpe None pmf 0.0038910506 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 212: area name Some("/World/Sphere044") lpe None pmf 0.0038910506 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 213: area name Some("/World/Sphere043") lpe None pmf 0.0038910506 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 214: area name Some("/World/Sphere042") lpe None pmf 0.0038910506 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 215: area name Some("/World/Sphere041") lpe None pmf 0.0038910506 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 216: area name Some("/World/Sphere040") lpe None pmf 0.0038910506 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 217: area name Some("/World/Sphere039") lpe None pmf 0.0038910506 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 218: area name Some("/World/Sphere038") lpe None pmf 0.0038910506 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 219: area name Some("/World/Sphere037") lpe None pmf 0.0038910506 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 220: area name Some("/World/Sphere036") lpe None pmf 0.0038910506 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 221: area name Some("/World/Sphere035") lpe None pmf 0.0038910506 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 222: area name Some("/World/Sphere034") lpe None pmf 0.0038910506 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 223: area name Some("/World/Sphere033") lpe None pmf 0.0038910506 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 224: area name Some("/World/Sphere032") lpe None pmf 0.0038910506 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 225: area name Some("/World/Sphere031") lpe None pmf 0.0038910506 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 226: area name Some("/World/Sphere030") lpe None pmf 0.0038910506 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 227: area name Some("/World/Sphere029") lpe None pmf 0.0038910506 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 228: area name Some("/World/Sphere028") lpe None pmf 0.0038910506 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 229: area name Some("/World/Sphere027") lpe None pmf 0.0038910506 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 230: area name Some("/World/Sphere026") lpe None pmf 0.0038910506 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 231: area name Some("/World/Sphere025") lpe None pmf 0.0038910506 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 232: area name Some("/World/Sphere024") lpe None pmf 0.0038910506 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 233: area name Some("/World/Sphere023") lpe None pmf 0.0038910506 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 234: area name Some("/World/Sphere022") lpe None pmf 0.0038910506 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 235: area name Some("/World/Sphere021") lpe None pmf 0.0038910506 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 236: area name Some("/World/Sphere020") lpe None pmf 0.0038910506 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 237: area name Some("/World/Sphere019") lpe None pmf 0.0038910506 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 238: area name Some("/World/Sphere018") lpe None pmf 0.0038910506 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 239: area name Some("/World/Sphere017") lpe None pmf 0.0038910506 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 240: area name Some("/World/Sphere016") lpe None pmf 0.0038910506 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 241: area name Some("/World/Sphere015") lpe None pmf 0.0038910506 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 242: area name Some("/World/Sphere014") lpe None pmf 0.0038910506 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 243: area name Some("/World/Sphere013") lpe None pmf 0.0038910506 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 244: area name Some("/World/Sphere012") lpe None pmf 0.0038910506 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 245: area name Some("/World/Sphere011") lpe None pmf 0.0038910506 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 246: area name Some("/World/Sphere010") lpe None pmf 0.0038910506 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 247: area name Some("/World/Sphere009") lpe None pmf 0.0038910506 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 248: area name Some("/World/Sphere008") lpe None pmf 0.0038910506 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 249: area name Some("/World/Sphere007") lpe None pmf 0.0038910506 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 250: area name Some("/World/Sphere006") lpe None pmf 0.0038910506 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 251: area name Some("/World/Sphere005") lpe None pmf 0.0038910506 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 252: area name Some("/World/Sphere004") lpe None pmf 0.0038910506 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 253: area name Some("/World/Sphere003") lpe None pmf 0.0038910506 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 254: area name Some("/World/Sphere002") lpe None pmf 0.0038910506 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 255: area name Some("/World/Sphere001") lpe None pmf 0.0038910506 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 256: area name Some("/World/Sphere000") lpe None pmf 0.0038910506 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 262 geometries, PrimitiveBreakdown { triangles: 194, spheres: 160, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 5 } top level, PrimitiveBreakdown { triangles: 206, spheres: 160, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 5 } unique, motion false +geom 0: material #0 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:188f260f6479aa4e camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=2:188f260f6479aa4e +geom 1: material #1 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:97f45dafeae7396c camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=2:97f45dafeae7396c +geom 2: material #2 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:50faa5f64b009067 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=2:50faa5f64b009067 +geom 3: material #3 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:ebbba4921e332478 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=2:ebbba4921e332478 +geom 4: material #4 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:ff2a5c7e54e0f9db camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=2:ff2a5c7e54e0f9db +geom 5: material #5 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:15036b6847d0d5d8 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=2:15036b6847d0d5d8 +geom 6: material #6 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:71e61c6a60d61f89 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=2:71e61c6a60d61f89 +geom 7: material #7 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:f3217ea4860a8728 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=2:f3217ea4860a8728 +geom 8: material #8 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:8d754f5908ca78e0 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=2:8d754f5908ca78e0 +geom 9: material #9 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:5657f45de0cd5100 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=2:5657f45de0cd5100 +geom 10: material #10 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:c8be539fca9f01fb camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=2:c8be539fca9f01fb +geom 11: material #11 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:d48a20ec03c99200 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=2:d48a20ec03c99200 +geom 12: material #12 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:a7923437effed43d camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=2:a7923437effed43d +geom 13: material #13 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:e3e3808d2094f90a camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=2:e3e3808d2094f90a +geom 14: material #14 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:1e497659eef12a81 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=2:1e497659eef12a81 +geom 15: material #15 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:ffb2ef2f4a649fa6 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=2:ffb2ef2f4a649fa6 +geom 16: material #16 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:5d5e430ff41c1c08 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=2:5d5e430ff41c1c08 +geom 17: material #17 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:8f13d27ca8bbe966 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=2:8f13d27ca8bbe966 +geom 18: material #18 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:8652e2305229cfa0 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=2:8652e2305229cfa0 +geom 19: material #19 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:483a297758388d5c camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=2:483a297758388d5c +geom 20: material #20 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:48e5f0ef3110f507 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=2:48e5f0ef3110f507 +geom 21: material #21 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:ca51c27c8e04bfa2 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=2:ca51c27c8e04bfa2 +geom 22: material #22 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:84e9bace9eab9ec8 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=2:84e9bace9eab9ec8 +geom 23: material #23 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:803d49dff50a2f92 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=2:803d49dff50a2f92 +geom 24: material #24 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:70b184a9244bc562 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=2:70b184a9244bc562 +geom 25: material #25 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:3164ae4a6ea6d628 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=2:3164ae4a6ea6d628 +geom 26: material #26 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:7a60eae3c5968816 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=2:7a60eae3c5968816 +geom 27: material #27 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:bb4cd18f8464d34c camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=2:bb4cd18f8464d34c +geom 28: material #28 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:38f56b391c7ea50c camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=2:38f56b391c7ea50c +geom 29: material #29 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:c3fcfe7c5ed85fba camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=2:c3fcfe7c5ed85fba +geom 30: material #30 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:6e268625717faeb1 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=2:6e268625717faeb1 +geom 31: material #31 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:4b348295ce7972e4 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=2:4b348295ce7972e4 +geom 32: material #32 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:c2b7dd874f5bac98 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=2:c2b7dd874f5bac98 +geom 33: material #33 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:559c4d11d19668c0 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=2:559c4d11d19668c0 +geom 34: material #34 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:77be229f0d292714 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=2:77be229f0d292714 +geom 35: material #35 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:5c5e3e047f91145c camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=2:5c5e3e047f91145c +geom 36: material #36 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:f9c327e97a20da39 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=2:f9c327e97a20da39 +geom 37: material #37 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:819e740103d9eca1 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=2:819e740103d9eca1 +geom 38: material #38 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:1212f418647714b4 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=2:1212f418647714b4 +geom 39: material #39 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:91e281ba2b7c3ed8 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=2:91e281ba2b7c3ed8 +geom 40: material #40 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:8221ec0a7aae962b camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=2:8221ec0a7aae962b +geom 41: material #41 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:642e441ce136ee76 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=2:642e441ce136ee76 +geom 42: material #42 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:dcf19867b54c51ee camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=2:dcf19867b54c51ee +geom 43: material #43 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:f8a9d1e9cb434139 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=2:f8a9d1e9cb434139 +geom 44: material #44 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:8ec3acc16ec533be camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=2:8ec3acc16ec533be +geom 45: material #45 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:9bf7fd7118ebe84b camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=2:9bf7fd7118ebe84b +geom 46: material #46 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:2a1ff2463031af5c camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=2:2a1ff2463031af5c +geom 47: material #47 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:b1cd3ab713320246 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=2:b1cd3ab713320246 +geom 48: material #48 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:735c8859d1ebf01c camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=2:735c8859d1ebf01c +geom 49: material #49 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:cc7113938e1868a5 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=2:cc7113938e1868a5 +geom 50: material #50 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:1969f53dc4c4ea77 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=2:1969f53dc4c4ea77 +geom 51: material #51 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:e6dabd74d1339b52 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=2:e6dabd74d1339b52 +geom 52: material #52 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:612357c385f2578a camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=2:612357c385f2578a +geom 53: material #53 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:8561f9be5e95e3bc camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=2:8561f9be5e95e3bc +geom 54: material #54 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:973e05ae3389609e camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=2:973e05ae3389609e +geom 55: material #55 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:4708e1aa46768578 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=2:4708e1aa46768578 +geom 56: material #56 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:ab79f4992c448603 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=2:ab79f4992c448603 +geom 57: material #57 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:61f6f945726813f9 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=2:61f6f945726813f9 +geom 58: material #58 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:73c8ba55366a587e camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=2:73c8ba55366a587e +geom 59: material #59 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:218c05d1384633dc camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=2:218c05d1384633dc +geom 60: material #60 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:44b7957c677bd226 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=2:44b7957c677bd226 +geom 61: material #61 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:30eecb7c25719c05 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=2:30eecb7c25719c05 +geom 62: material #62 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:176d644e7ee2e684 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=2:176d644e7ee2e684 +geom 63: material #63 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:ec73b763308f9a3d camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=2:ec73b763308f9a3d +geom 64: material #64 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:e915a0aae228bc79 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=2:e915a0aae228bc79 +geom 65: material #65 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:7d6401aa59da4e38 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=2:7d6401aa59da4e38 +geom 66: material #66 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:76f66ce61a14aa96 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=2:76f66ce61a14aa96 +geom 67: material #67 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:d0a2be6dd2ce3c54 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=2:d0a2be6dd2ce3c54 +geom 68: material #68 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:1b5dfcf5e87976c3 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=2:1b5dfcf5e87976c3 +geom 69: material #69 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:9355c82e434ac2ae camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=2:9355c82e434ac2ae +geom 70: material #70 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:a77e58d3ff3a2121 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=2:a77e58d3ff3a2121 +geom 71: material #71 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:93043b72a388e080 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=2:93043b72a388e080 +geom 72: material #72 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:05b2719429e398de camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=2:05b2719429e398de +geom 73: material #73 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:f8a0dd5a739f2fc0 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=2:f8a0dd5a739f2fc0 +geom 74: material #74 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:dca1a43f4a7538ed camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=2:dca1a43f4a7538ed +geom 75: material #75 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:8a2f5974cca942dc camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=2:8a2f5974cca942dc +geom 76: material #76 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:65272fbe17dd0c64 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=2:65272fbe17dd0c64 +geom 77: material #77 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:9060c015c4a0f6b7 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=2:9060c015c4a0f6b7 +geom 78: material #78 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:ec32f023d0468b65 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=2:ec32f023d0468b65 +geom 79: material #79 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:a09de738183c4a9b camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=2:a09de738183c4a9b +geom 80: material #80 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:2bab4c271329769d camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=2:2bab4c271329769d +geom 81: material #81 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:e82dcf28bab67bb5 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=2:e82dcf28bab67bb5 +geom 82: material #82 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:6d6d95bf01b4588f camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=2:6d6d95bf01b4588f +geom 83: material #83 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:6878b98c6d332db9 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=2:6878b98c6d332db9 +geom 84: material #84 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:b0b31b42e1646ca9 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=2:b0b31b42e1646ca9 +geom 85: material #85 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:22ef3600d3ffa0e0 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=2:22ef3600d3ffa0e0 +geom 86: material #86 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:b2a86cb870f0d22b camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=2:b2a86cb870f0d22b +geom 87: material #87 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:c476f12c52f01b49 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=2:c476f12c52f01b49 +geom 88: material #88 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:b05e191db12bfb49 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=2:b05e191db12bfb49 +geom 89: material #89 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:a93852b39b01de54 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=2:a93852b39b01de54 +geom 90: material #90 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:8e04888e8ea9c61b camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=2:8e04888e8ea9c61b +geom 91: material #91 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:d15b848fb52b48dd camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=2:d15b848fb52b48dd +geom 92: material #92 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:e3399568cfdc5a68 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=2:e3399568cfdc5a68 +geom 93: material #93 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:fd3bc52d5481c68b camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=2:fd3bc52d5481c68b +geom 94: material #94 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:4b6bf9a286fa9c3b camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=2:4b6bf9a286fa9c3b +geom 95: material #95 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:6383d37d0761a2db camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=2:6383d37d0761a2db +geom 96: material #96 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:71d02d53d4718c39 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=1:71d02d53d4718c39 +geom 97: material #97 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:400eb2d44fcb9a5f camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=1:400eb2d44fcb9a5f +geom 98: material #98 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:fffd2eb5365a513b camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=1:fffd2eb5365a513b +geom 99: material #99 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:5940a8f1a0c95329 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=1:5940a8f1a0c95329 +geom 100: material #100 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:3b48db8226d17f85 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=1:3b48db8226d17f85 +geom 101: material #101 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:aa1153c63e5ac43a camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=1:aa1153c63e5ac43a +geom 102: material #102 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:bd3bf6f3fc8aec36 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=1:bd3bf6f3fc8aec36 +geom 103: material #103 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:7f6d3a47eae227d1 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=1:7f6d3a47eae227d1 +geom 104: material #104 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:7a7b74661ebf0e33 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=1:7a7b74661ebf0e33 +geom 105: material #105 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:107fa63ad1e17fbe camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=1:107fa63ad1e17fbe +geom 106: material #106 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:f3e0558ff85941c1 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=1:f3e0558ff85941c1 +geom 107: material #107 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:14d37fd8433b6789 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=1:14d37fd8433b6789 +geom 108: material #108 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:b6168793b8d79637 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=1:b6168793b8d79637 +geom 109: material #109 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:dc663f564b4abf96 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=1:dc663f564b4abf96 +geom 110: material #110 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:bc1ab26495c75862 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=1:bc1ab26495c75862 +geom 111: material #111 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:9db71c4e77fa28d8 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=1:9db71c4e77fa28d8 +geom 112: material #112 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:4972dd20205b307c camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=1:4972dd20205b307c +geom 113: material #113 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:eee5b389ee4c636c camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=1:eee5b389ee4c636c +geom 114: material #114 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:bd20a93dbc58b878 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=1:bd20a93dbc58b878 +geom 115: material #115 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:9c47ae7c87cc708c camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=1:9c47ae7c87cc708c +geom 116: material #116 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:f1283608d88564d8 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=1:f1283608d88564d8 +geom 117: material #117 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:adb11f5730302415 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=1:adb11f5730302415 +geom 118: material #118 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:8e552e201d6f97dd camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=1:8e552e201d6f97dd +geom 119: material #119 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:e4c119bc34c77786 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=1:e4c119bc34c77786 +geom 120: material #120 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:6027a624eb7c130d camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=1:6027a624eb7c130d +geom 121: material #121 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:fbc3e7d2d6198050 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=1:fbc3e7d2d6198050 +geom 122: material #122 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:58ba3abee14d275d camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=1:58ba3abee14d275d +geom 123: material #123 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:877f8e71cb1475d7 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=1:877f8e71cb1475d7 +geom 124: material #124 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:09fa61b6cf060adf camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=1:09fa61b6cf060adf +geom 125: material #125 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:8c246fcef2c2eef6 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=1:8c246fcef2c2eef6 +geom 126: material #126 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:1cc47b5b2ca5f28d camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=1:1cc47b5b2ca5f28d +geom 127: material #127 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:676edaa19da16ebe camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=1:676edaa19da16ebe +geom 128: material #128 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:7873b72124c26fca camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=1:7873b72124c26fca +geom 129: material #129 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:2215c2d56c212a9c camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=1:2215c2d56c212a9c +geom 130: material #130 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:175872964bf90374 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=1:175872964bf90374 +geom 131: material #131 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:2ff5450f19d57f22 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=1:2ff5450f19d57f22 +geom 132: material #132 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:0c6666e8ac1e0815 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=1:0c6666e8ac1e0815 +geom 133: material #133 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:c596d5c96c513ca7 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=1:c596d5c96c513ca7 +geom 134: material #134 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:0040db78da514f25 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=1:0040db78da514f25 +geom 135: material #135 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:de2a78a79bae9337 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=1:de2a78a79bae9337 +geom 136: material #136 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:59f3492650c5bc07 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=1:59f3492650c5bc07 +geom 137: material #137 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:b9f804daae586a8f camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=1:b9f804daae586a8f +geom 138: material #138 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:b4bd7d7624ce51dc camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=1:b4bd7d7624ce51dc +geom 139: material #139 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:15969e3a9502bd45 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=1:15969e3a9502bd45 +geom 140: material #140 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:11322851339c87d3 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=1:11322851339c87d3 +geom 141: material #141 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:118b2d127dea8263 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=1:118b2d127dea8263 +geom 142: material #142 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:6ad913d604c2db0e camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=1:6ad913d604c2db0e +geom 143: material #143 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:211b8ca5005d7169 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=1:211b8ca5005d7169 +geom 144: material #144 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:8c9de10a93729b62 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=1:8c9de10a93729b62 +geom 145: material #145 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:f3e0220514f702da camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=1:f3e0220514f702da +geom 146: material #146 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:17a63772a2b4d662 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=1:17a63772a2b4d662 +geom 147: material #147 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:061fda494c625726 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=1:061fda494c625726 +geom 148: material #148 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:4a3ce7feb848ff65 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=1:4a3ce7feb848ff65 +geom 149: material #149 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:a9c0b7aaa2c5c0da camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=1:a9c0b7aaa2c5c0da +geom 150: material #150 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:ef79af21c911dba7 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=1:ef79af21c911dba7 +geom 151: material #151 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:3adc1fd624a13b6c camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=1:3adc1fd624a13b6c +geom 152: material #152 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:d575ffe25950246b camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=1:d575ffe25950246b +geom 153: material #153 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:ad7b40d76703a529 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=1:ad7b40d76703a529 +geom 154: material #154 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:15fb25e6f8719406 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=1:15fb25e6f8719406 +geom 155: material #155 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:c923795f00a7a549 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=1:c923795f00a7a549 +geom 156: material #156 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:a2fce7f8c840e481 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=1:a2fce7f8c840e481 +geom 157: material #157 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:5d4ae1b4078e8157 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=1:5d4ae1b4078e8157 +geom 158: material #158 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:d20818291c5aff92 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=1:d20818291c5aff92 +geom 159: material #159 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:4ac6d08d190c1587 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=1:4ac6d08d190c1587 +geom 160: material #160 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:0619a347d5925d98 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=1:0619a347d5925d98 +geom 161: material #161 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:693a177c70d0b502 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=1:693a177c70d0b502 +geom 162: material #162 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:36fa5959959f5b0a camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=1:36fa5959959f5b0a +geom 163: material #163 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:9e0327727b74c419 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=1:9e0327727b74c419 +geom 164: material #164 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:9be9f00827328ce8 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=1:9be9f00827328ce8 +geom 165: material #165 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:44027fba6cf235c3 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=1:44027fba6cf235c3 +geom 166: material #166 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:65ec6c97e71cce65 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=1:65ec6c97e71cce65 +geom 167: material #167 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:8da81d72b5295057 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=1:8da81d72b5295057 +geom 168: material #168 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:1ec5342902b45b58 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=1:1ec5342902b45b58 +geom 169: material #169 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:443f9f1c936a9628 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=1:443f9f1c936a9628 +geom 170: material #170 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:f66cea641f71b36a camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=1:f66cea641f71b36a +geom 171: material #171 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:60c616eb240e6402 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=1:60c616eb240e6402 +geom 172: material #172 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:98d397b59416e85d camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=1:98d397b59416e85d +geom 173: material #173 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:59ca60e72d09f8b7 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=1:59ca60e72d09f8b7 +geom 174: material #174 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:b8e65953e49aa5e0 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=1:b8e65953e49aa5e0 +geom 175: material #175 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:988a24366bb6f560 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=1:988a24366bb6f560 +geom 176: material #176 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:2ee0b9a38473fe1e camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=1:2ee0b9a38473fe1e +geom 177: material #177 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:e799240a24e6e0ed camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=1:e799240a24e6e0ed +geom 178: material #178 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:14921443a0ba5679 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=1:14921443a0ba5679 +geom 179: material #179 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:0e06c2b68632d68a camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=1:0e06c2b68632d68a +geom 180: material #180 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:e258aefe6c1eea33 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=1:e258aefe6c1eea33 +geom 181: material #181 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:e924c14fb68a2966 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=1:e924c14fb68a2966 +geom 182: material #182 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:964c7cd8651864ce camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=1:964c7cd8651864ce +geom 183: material #183 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:87e5bc8414e70215 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=1:87e5bc8414e70215 +geom 184: material #184 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:6e9e25c1393a3c53 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=1:6e9e25c1393a3c53 +geom 185: material #185 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:c9bd7baef6b3670e camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=1:c9bd7baef6b3670e +geom 186: material #186 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:27687b43ccaaa6b8 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=1:27687b43ccaaa6b8 +geom 187: material #187 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:02956d1c81ba9d95 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=1:02956d1c81ba9d95 +geom 188: material #188 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:908ad3f258b711e0 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=1:908ad3f258b711e0 +geom 189: material #189 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:815dea82c23858f4 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=1:815dea82c23858f4 +geom 190: material #190 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:0f1b94b69f573b6c camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=1:0f1b94b69f573b6c +geom 191: material #191 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:ec171a47622e8061 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=1:ec171a47622e8061 +geom 192: material #192 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:554f4cebf95ecfe3 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=1:554f4cebf95ecfe3 +geom 193: material #193 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:16bed55e0309b62e camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=1:16bed55e0309b62e +geom 194: material #194 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:c0e684b66dcf01ba camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=1:c0e684b66dcf01ba +geom 195: material #195 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:a64738315de64a25 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=1:a64738315de64a25 +geom 196: material #196 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:9c1762102c6dc4b4 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=1:9c1762102c6dc4b4 +geom 197: material #197 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:f0321b3a4ed09a3b camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=1:f0321b3a4ed09a3b +geom 198: material #198 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:b1a3198a95f3cf78 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=1:b1a3198a95f3cf78 +geom 199: material #199 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:cf92243ed97e14dd camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=1:cf92243ed97e14dd +geom 200: material #200 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:0bb08c482c2a4825 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=1:0bb08c482c2a4825 +geom 201: material #201 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:a0397d08dfdcd7d3 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=1:a0397d08dfdcd7d3 +geom 202: material #202 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:3046d6a26702dc2f camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=1:3046d6a26702dc2f +geom 203: material #203 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:49722f19c258764a camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=1:49722f19c258764a +geom 204: material #204 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:806003126719484f camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=1:806003126719484f +geom 205: material #205 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:3e407ed0e9a18a51 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=1:3e407ed0e9a18a51 +geom 206: material #206 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:f207a4a00c8d3a01 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=1:f207a4a00c8d3a01 +geom 207: material #207 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:f55536ed8d680a92 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=1:f55536ed8d680a92 +geom 208: material #208 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:47a1fc0d2282312b camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=1:47a1fc0d2282312b +geom 209: material #209 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:966a352e982dcb9c camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=1:966a352e982dcb9c +geom 210: material #210 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:c257f6a69029b511 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=1:c257f6a69029b511 +geom 211: material #211 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:2bed0c4c80e3d6d2 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=1:2bed0c4c80e3d6d2 +geom 212: material #212 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:5f393a3e380cd82e camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=1:5f393a3e380cd82e +geom 213: material #213 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:9c542db4d36eab87 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=1:9c542db4d36eab87 +geom 214: material #214 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:31593b8d7172c3b7 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=1:31593b8d7172c3b7 +geom 215: material #215 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:2a49ac229eb540e4 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=1:2a49ac229eb540e4 +geom 216: material #216 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:f04e7fe34b0c6820 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=1:f04e7fe34b0c6820 +geom 217: material #217 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:45be58ec11205157 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=1:45be58ec11205157 +geom 218: material #218 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:5871ca49e8651b78 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=1:5871ca49e8651b78 +geom 219: material #219 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:5f0af8ec75ea9587 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=1:5f0af8ec75ea9587 +geom 220: material #220 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:6c1bf6eb9a5aa677 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=1:6c1bf6eb9a5aa677 +geom 221: material #221 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:7b0c993b216970f8 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=1:7b0c993b216970f8 +geom 222: material #222 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:353ba33820aebbc5 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=1:353ba33820aebbc5 +geom 223: material #223 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:1b9101f5b5a80622 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=1:1b9101f5b5a80622 +geom 224: material #224 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:0cff0ca8584ce19c camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=1:0cff0ca8584ce19c +geom 225: material #225 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:9e14b2927ce55e23 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=1:9e14b2927ce55e23 +geom 226: material #226 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:ead78e4030e47495 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=1:ead78e4030e47495 +geom 227: material #227 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:82799a21ebbd12c7 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=1:82799a21ebbd12c7 +geom 228: material #228 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:cfa62b0d232a6726 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=1:cfa62b0d232a6726 +geom 229: material #229 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:f03ea22a58fd023b camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=1:f03ea22a58fd023b +geom 230: material #230 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:fabdb03f7a1224a6 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=1:fabdb03f7a1224a6 +geom 231: material #231 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:ea4e8636be19b5a3 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=1:ea4e8636be19b5a3 +geom 232: material #232 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:ccf997672cd3888c camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=1:ccf997672cd3888c +geom 233: material #233 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:395c9438f3ac48ed camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=1:395c9438f3ac48ed +geom 234: material #234 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:f124e0e9b1b1b2f6 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=1:f124e0e9b1b1b2f6 +geom 235: material #235 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:7886baa5ccab970a camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=1:7886baa5ccab970a +geom 236: material #236 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:8a173cdb9b4bb04d camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=1:8a173cdb9b4bb04d +geom 237: material #237 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:ee1c52de13f10ce2 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=1:ee1c52de13f10ce2 +geom 238: material #238 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:3c2a228fb3fdce2a camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=1:3c2a228fb3fdce2a +geom 239: material #239 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:3e621998768847e0 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=1:3e621998768847e0 +geom 240: material #240 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:bc99ab1eb02af696 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=1:bc99ab1eb02af696 +geom 241: material #241 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:eec882b8068c66e2 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=1:eec882b8068c66e2 +geom 242: material #242 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:30fa1f19bd0432d0 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=1:30fa1f19bd0432d0 +geom 243: material #243 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:2ab176bb34e28d5b camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=1:2ab176bb34e28d5b +geom 244: material #244 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:985ffa1127d42a66 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=1:985ffa1127d42a66 +geom 245: material #245 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:9818ddc3d963e1fc camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=1:9818ddc3d963e1fc +geom 246: material #246 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:056abe1be316d47c camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=1:056abe1be316d47c +geom 247: material #247 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:9cce1fe7d92c99f0 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=1:9cce1fe7d92c99f0 +geom 248: material #248 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:ce299cb842a33236 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=1:ce299cb842a33236 +geom 249: material #249 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:3dfa2d08de2b6eef camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=1:3dfa2d08de2b6eef +geom 250: material #250 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:e47c78919a782071 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=1:e47c78919a782071 +geom 251: material #251 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:d4fce875fe9dd8b6 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=1:d4fce875fe9dd8b6 +geom 252: material #252 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:b3c525b609f2410c camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=1:b3c525b609f2410c +geom 253: material #253 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:fd2311cdb7e72015 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=1:fd2311cdb7e72015 +geom 254: material #254 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:0730b9fdd252ce88 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=1:0730b9fdd252ce88 +geom 255: material #255 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:490ebaba08c10957 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=1:490ebaba08c10957 +geom 256: material #256 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.8566356 motion [] pieces all=12:49c63dff4b2bf27d camera=12:49c63dff4b2bf27d shadow=12:49c63dff4b2bf27d indirect=12:49c63dff4b2bf27d +geom 257: material #256 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.8566356 motion [] pieces all=12:c99da1694bd0d57d camera=12:c99da1694bd0d57d shadow=12:c99da1694bd0d57d indirect=12:c99da1694bd0d57d +geom 258: material #256 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 2.237378 motion [] pieces all=12:f18564427496b1c9 camera=12:f18564427496b1c9 shadow=12:f18564427496b1c9 indirect=12:f18564427496b1c9 +geom 259: material #256 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 2.125317 motion [] pieces all=12:d45767a2f59b3a25 camera=12:d45767a2f59b3a25 shadow=12:d45767a2f59b3a25 indirect=12:d45767a2f59b3a25 +geom 260: material #256 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 2.0 motion [] pieces all=12:fd03a07ee92783ad camera=12:fd03a07ee92783ad shadow=12:fd03a07ee92783ad indirect=12:fd03a07ee92783ad +geom 261: material #256 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:9626b0f2f3e041c5 camera=2:9626b0f2f3e041c5 shadow=2:9626b0f2f3e041c5 indirect=2:9626b0f2f3e041c5 +provenance light /World/Fill: LightOrigin { index: 0, geoms: 0..0 } +provenance light /World/Panel000: LightOrigin { index: 96, geoms: 95..96 } +provenance light /World/Panel001: LightOrigin { index: 95, geoms: 94..95 } +provenance light /World/Panel002: LightOrigin { index: 94, geoms: 93..94 } +provenance light /World/Panel003: LightOrigin { index: 93, geoms: 92..93 } +provenance light /World/Panel004: LightOrigin { index: 92, geoms: 91..92 } +provenance light /World/Panel005: LightOrigin { index: 91, geoms: 90..91 } +provenance light /World/Panel006: LightOrigin { index: 90, geoms: 89..90 } +provenance light /World/Panel007: LightOrigin { index: 89, geoms: 88..89 } +provenance light /World/Panel008: LightOrigin { index: 88, geoms: 87..88 } +provenance light /World/Panel009: LightOrigin { index: 87, geoms: 86..87 } +provenance light /World/Panel010: LightOrigin { index: 86, geoms: 85..86 } +provenance light /World/Panel011: LightOrigin { index: 85, geoms: 84..85 } +provenance light /World/Panel012: LightOrigin { index: 84, geoms: 83..84 } +provenance light /World/Panel013: LightOrigin { index: 83, geoms: 82..83 } +provenance light /World/Panel014: LightOrigin { index: 82, geoms: 81..82 } +provenance light /World/Panel015: LightOrigin { index: 81, geoms: 80..81 } +provenance light /World/Panel016: LightOrigin { index: 80, geoms: 79..80 } +provenance light /World/Panel017: LightOrigin { index: 79, geoms: 78..79 } +provenance light /World/Panel018: LightOrigin { index: 78, geoms: 77..78 } +provenance light /World/Panel019: LightOrigin { index: 77, geoms: 76..77 } +provenance light /World/Panel020: LightOrigin { index: 76, geoms: 75..76 } +provenance light /World/Panel021: LightOrigin { index: 75, geoms: 74..75 } +provenance light /World/Panel022: LightOrigin { index: 74, geoms: 73..74 } +provenance light /World/Panel023: LightOrigin { index: 73, geoms: 72..73 } +provenance light /World/Panel024: LightOrigin { index: 72, geoms: 71..72 } +provenance light /World/Panel025: LightOrigin { index: 71, geoms: 70..71 } +provenance light /World/Panel026: LightOrigin { index: 70, geoms: 69..70 } +provenance light /World/Panel027: LightOrigin { index: 69, geoms: 68..69 } +provenance light /World/Panel028: LightOrigin { index: 68, geoms: 67..68 } +provenance light /World/Panel029: LightOrigin { index: 67, geoms: 66..67 } +provenance light /World/Panel030: LightOrigin { index: 66, geoms: 65..66 } +provenance light /World/Panel031: LightOrigin { index: 65, geoms: 64..65 } +provenance light /World/Panel032: LightOrigin { index: 64, geoms: 63..64 } +provenance light /World/Panel033: LightOrigin { index: 63, geoms: 62..63 } +provenance light /World/Panel034: LightOrigin { index: 62, geoms: 61..62 } +provenance light /World/Panel035: LightOrigin { index: 61, geoms: 60..61 } +provenance light /World/Panel036: LightOrigin { index: 60, geoms: 59..60 } +provenance light /World/Panel037: LightOrigin { index: 59, geoms: 58..59 } +provenance light /World/Panel038: LightOrigin { index: 58, geoms: 57..58 } +provenance light /World/Panel039: LightOrigin { index: 57, geoms: 56..57 } +provenance light /World/Panel040: LightOrigin { index: 56, geoms: 55..56 } +provenance light /World/Panel041: LightOrigin { index: 55, geoms: 54..55 } +provenance light /World/Panel042: LightOrigin { index: 54, geoms: 53..54 } +provenance light /World/Panel043: LightOrigin { index: 53, geoms: 52..53 } +provenance light /World/Panel044: LightOrigin { index: 52, geoms: 51..52 } +provenance light /World/Panel045: LightOrigin { index: 51, geoms: 50..51 } +provenance light /World/Panel046: LightOrigin { index: 50, geoms: 49..50 } +provenance light /World/Panel047: LightOrigin { index: 49, geoms: 48..49 } +provenance light /World/Panel048: LightOrigin { index: 48, geoms: 47..48 } +provenance light /World/Panel049: LightOrigin { index: 47, geoms: 46..47 } +provenance light /World/Panel050: LightOrigin { index: 46, geoms: 45..46 } +provenance light /World/Panel051: LightOrigin { index: 45, geoms: 44..45 } +provenance light /World/Panel052: LightOrigin { index: 44, geoms: 43..44 } +provenance light /World/Panel053: LightOrigin { index: 43, geoms: 42..43 } +provenance light /World/Panel054: LightOrigin { index: 42, geoms: 41..42 } +provenance light /World/Panel055: LightOrigin { index: 41, geoms: 40..41 } +provenance light /World/Panel056: LightOrigin { index: 40, geoms: 39..40 } +provenance light /World/Panel057: LightOrigin { index: 39, geoms: 38..39 } +provenance light /World/Panel058: LightOrigin { index: 38, geoms: 37..38 } +provenance light /World/Panel059: LightOrigin { index: 37, geoms: 36..37 } +provenance light /World/Panel060: LightOrigin { index: 36, geoms: 35..36 } +provenance light /World/Panel061: LightOrigin { index: 35, geoms: 34..35 } +provenance light /World/Panel062: LightOrigin { index: 34, geoms: 33..34 } +provenance light /World/Panel063: LightOrigin { index: 33, geoms: 32..33 } +provenance light /World/Panel064: LightOrigin { index: 32, geoms: 31..32 } +provenance light /World/Panel065: LightOrigin { index: 31, geoms: 30..31 } +provenance light /World/Panel066: LightOrigin { index: 30, geoms: 29..30 } +provenance light /World/Panel067: LightOrigin { index: 29, geoms: 28..29 } +provenance light /World/Panel068: LightOrigin { index: 28, geoms: 27..28 } +provenance light /World/Panel069: LightOrigin { index: 27, geoms: 26..27 } +provenance light /World/Panel070: LightOrigin { index: 26, geoms: 25..26 } +provenance light /World/Panel071: LightOrigin { index: 25, geoms: 24..25 } +provenance light /World/Panel072: LightOrigin { index: 24, geoms: 23..24 } +provenance light /World/Panel073: LightOrigin { index: 23, geoms: 22..23 } +provenance light /World/Panel074: LightOrigin { index: 22, geoms: 21..22 } +provenance light /World/Panel075: LightOrigin { index: 21, geoms: 20..21 } +provenance light /World/Panel076: LightOrigin { index: 20, geoms: 19..20 } +provenance light /World/Panel077: LightOrigin { index: 19, geoms: 18..19 } +provenance light /World/Panel078: LightOrigin { index: 18, geoms: 17..18 } +provenance light /World/Panel079: LightOrigin { index: 17, geoms: 16..17 } +provenance light /World/Sphere000: LightOrigin { index: 256, geoms: 255..256 } +provenance light /World/Sphere001: LightOrigin { index: 255, geoms: 254..255 } +provenance light /World/Sphere002: LightOrigin { index: 254, geoms: 253..254 } +provenance light /World/Sphere003: LightOrigin { index: 253, geoms: 252..253 } +provenance light /World/Sphere004: LightOrigin { index: 252, geoms: 251..252 } +provenance light /World/Sphere005: LightOrigin { index: 251, geoms: 250..251 } +provenance light /World/Sphere006: LightOrigin { index: 250, geoms: 249..250 } +provenance light /World/Sphere007: LightOrigin { index: 249, geoms: 248..249 } +provenance light /World/Sphere008: LightOrigin { index: 248, geoms: 247..248 } +provenance light /World/Sphere009: LightOrigin { index: 247, geoms: 246..247 } +provenance light /World/Sphere010: LightOrigin { index: 246, geoms: 245..246 } +provenance light /World/Sphere011: LightOrigin { index: 245, geoms: 244..245 } +provenance light /World/Sphere012: LightOrigin { index: 244, geoms: 243..244 } +provenance light /World/Sphere013: LightOrigin { index: 243, geoms: 242..243 } +provenance light /World/Sphere014: LightOrigin { index: 242, geoms: 241..242 } +provenance light /World/Sphere015: LightOrigin { index: 241, geoms: 240..241 } +provenance light /World/Sphere016: LightOrigin { index: 240, geoms: 239..240 } +provenance light /World/Sphere017: LightOrigin { index: 239, geoms: 238..239 } +provenance light /World/Sphere018: LightOrigin { index: 238, geoms: 237..238 } +provenance light /World/Sphere019: LightOrigin { index: 237, geoms: 236..237 } +provenance light /World/Sphere020: LightOrigin { index: 236, geoms: 235..236 } +provenance light /World/Sphere021: LightOrigin { index: 235, geoms: 234..235 } +provenance light /World/Sphere022: LightOrigin { index: 234, geoms: 233..234 } +provenance light /World/Sphere023: LightOrigin { index: 233, geoms: 232..233 } +provenance light /World/Sphere024: LightOrigin { index: 232, geoms: 231..232 } +provenance light /World/Sphere025: LightOrigin { index: 231, geoms: 230..231 } +provenance light /World/Sphere026: LightOrigin { index: 230, geoms: 229..230 } +provenance light /World/Sphere027: LightOrigin { index: 229, geoms: 228..229 } +provenance light /World/Sphere028: LightOrigin { index: 228, geoms: 227..228 } +provenance light /World/Sphere029: LightOrigin { index: 227, geoms: 226..227 } +provenance light /World/Sphere030: LightOrigin { index: 226, geoms: 225..226 } +provenance light /World/Sphere031: LightOrigin { index: 225, geoms: 224..225 } +provenance light /World/Sphere032: LightOrigin { index: 224, geoms: 223..224 } +provenance light /World/Sphere033: LightOrigin { index: 223, geoms: 222..223 } +provenance light /World/Sphere034: LightOrigin { index: 222, geoms: 221..222 } +provenance light /World/Sphere035: LightOrigin { index: 221, geoms: 220..221 } +provenance light /World/Sphere036: LightOrigin { index: 220, geoms: 219..220 } +provenance light /World/Sphere037: LightOrigin { index: 219, geoms: 218..219 } +provenance light /World/Sphere038: LightOrigin { index: 218, geoms: 217..218 } +provenance light /World/Sphere039: LightOrigin { index: 217, geoms: 216..217 } +provenance light /World/Sphere040: LightOrigin { index: 216, geoms: 215..216 } +provenance light /World/Sphere041: LightOrigin { index: 215, geoms: 214..215 } +provenance light /World/Sphere042: LightOrigin { index: 214, geoms: 213..214 } +provenance light /World/Sphere043: LightOrigin { index: 213, geoms: 212..213 } +provenance light /World/Sphere044: LightOrigin { index: 212, geoms: 211..212 } +provenance light /World/Sphere045: LightOrigin { index: 211, geoms: 210..211 } +provenance light /World/Sphere046: LightOrigin { index: 210, geoms: 209..210 } +provenance light /World/Sphere047: LightOrigin { index: 209, geoms: 208..209 } +provenance light /World/Sphere048: LightOrigin { index: 208, geoms: 207..208 } +provenance light /World/Sphere049: LightOrigin { index: 207, geoms: 206..207 } +provenance light /World/Sphere050: LightOrigin { index: 206, geoms: 205..206 } +provenance light /World/Sphere051: LightOrigin { index: 205, geoms: 204..205 } +provenance light /World/Sphere052: LightOrigin { index: 204, geoms: 203..204 } +provenance light /World/Sphere053: LightOrigin { index: 203, geoms: 202..203 } +provenance light /World/Sphere054: LightOrigin { index: 202, geoms: 201..202 } +provenance light /World/Sphere055: LightOrigin { index: 201, geoms: 200..201 } +provenance light /World/Sphere056: LightOrigin { index: 200, geoms: 199..200 } +provenance light /World/Sphere057: LightOrigin { index: 199, geoms: 198..199 } +provenance light /World/Sphere058: LightOrigin { index: 198, geoms: 197..198 } +provenance light /World/Sphere059: LightOrigin { index: 197, geoms: 196..197 } +provenance light /World/Sphere060: LightOrigin { index: 196, geoms: 195..196 } +provenance light /World/Sphere061: LightOrigin { index: 195, geoms: 194..195 } +provenance light /World/Sphere062: LightOrigin { index: 194, geoms: 193..194 } +provenance light /World/Sphere063: LightOrigin { index: 193, geoms: 192..193 } +provenance light /World/Sphere064: LightOrigin { index: 192, geoms: 191..192 } +provenance light /World/Sphere065: LightOrigin { index: 191, geoms: 190..191 } +provenance light /World/Sphere066: LightOrigin { index: 190, geoms: 189..190 } +provenance light /World/Sphere067: LightOrigin { index: 189, geoms: 188..189 } +provenance light /World/Sphere068: LightOrigin { index: 188, geoms: 187..188 } +provenance light /World/Sphere069: LightOrigin { index: 187, geoms: 186..187 } +provenance light /World/Sphere070: LightOrigin { index: 186, geoms: 185..186 } +provenance light /World/Sphere071: LightOrigin { index: 185, geoms: 184..185 } +provenance light /World/Sphere072: LightOrigin { index: 184, geoms: 183..184 } +provenance light /World/Sphere073: LightOrigin { index: 183, geoms: 182..183 } +provenance light /World/Sphere074: LightOrigin { index: 182, geoms: 181..182 } +provenance light /World/Sphere075: LightOrigin { index: 181, geoms: 180..181 } +provenance light /World/Sphere076: LightOrigin { index: 180, geoms: 179..180 } +provenance light /World/Sphere077: LightOrigin { index: 179, geoms: 178..179 } +provenance light /World/Sphere078: LightOrigin { index: 178, geoms: 177..178 } +provenance light /World/Sphere079: LightOrigin { index: 177, geoms: 176..177 } +provenance light /World/Sphere080: LightOrigin { index: 176, geoms: 175..176 } +provenance light /World/Sphere081: LightOrigin { index: 175, geoms: 174..175 } +provenance light /World/Sphere082: LightOrigin { index: 174, geoms: 173..174 } +provenance light /World/Sphere083: LightOrigin { index: 173, geoms: 172..173 } +provenance light /World/Sphere084: LightOrigin { index: 172, geoms: 171..172 } +provenance light /World/Sphere085: LightOrigin { index: 171, geoms: 170..171 } +provenance light /World/Sphere086: LightOrigin { index: 170, geoms: 169..170 } +provenance light /World/Sphere087: LightOrigin { index: 169, geoms: 168..169 } +provenance light /World/Sphere088: LightOrigin { index: 168, geoms: 167..168 } +provenance light /World/Sphere089: LightOrigin { index: 167, geoms: 166..167 } +provenance light /World/Sphere090: LightOrigin { index: 166, geoms: 165..166 } +provenance light /World/Sphere091: LightOrigin { index: 165, geoms: 164..165 } +provenance light /World/Sphere092: LightOrigin { index: 164, geoms: 163..164 } +provenance light /World/Sphere093: LightOrigin { index: 163, geoms: 162..163 } +provenance light /World/Sphere094: LightOrigin { index: 162, geoms: 161..162 } +provenance light /World/Sphere095: LightOrigin { index: 161, geoms: 160..161 } +provenance light /World/Sphere096: LightOrigin { index: 160, geoms: 159..160 } +provenance light /World/Sphere097: LightOrigin { index: 159, geoms: 158..159 } +provenance light /World/Sphere098: LightOrigin { index: 158, geoms: 157..158 } +provenance light /World/Sphere099: LightOrigin { index: 157, geoms: 156..157 } +provenance light /World/Sphere100: LightOrigin { index: 156, geoms: 155..156 } +provenance light /World/Sphere101: LightOrigin { index: 155, geoms: 154..155 } +provenance light /World/Sphere102: LightOrigin { index: 154, geoms: 153..154 } +provenance light /World/Sphere103: LightOrigin { index: 153, geoms: 152..153 } +provenance light /World/Sphere104: LightOrigin { index: 152, geoms: 151..152 } +provenance light /World/Sphere105: LightOrigin { index: 151, geoms: 150..151 } +provenance light /World/Sphere106: LightOrigin { index: 150, geoms: 149..150 } +provenance light /World/Sphere107: LightOrigin { index: 149, geoms: 148..149 } +provenance light /World/Sphere108: LightOrigin { index: 148, geoms: 147..148 } +provenance light /World/Sphere109: LightOrigin { index: 147, geoms: 146..147 } +provenance light /World/Sphere110: LightOrigin { index: 146, geoms: 145..146 } +provenance light /World/Sphere111: LightOrigin { index: 145, geoms: 144..145 } +provenance light /World/Sphere112: LightOrigin { index: 144, geoms: 143..144 } +provenance light /World/Sphere113: LightOrigin { index: 143, geoms: 142..143 } +provenance light /World/Sphere114: LightOrigin { index: 142, geoms: 141..142 } +provenance light /World/Sphere115: LightOrigin { index: 141, geoms: 140..141 } +provenance light /World/Sphere116: LightOrigin { index: 140, geoms: 139..140 } +provenance light /World/Sphere117: LightOrigin { index: 139, geoms: 138..139 } +provenance light /World/Sphere118: LightOrigin { index: 138, geoms: 137..138 } +provenance light /World/Sphere119: LightOrigin { index: 137, geoms: 136..137 } +provenance light /World/Sphere120: LightOrigin { index: 136, geoms: 135..136 } +provenance light /World/Sphere121: LightOrigin { index: 135, geoms: 134..135 } +provenance light /World/Sphere122: LightOrigin { index: 134, geoms: 133..134 } +provenance light /World/Sphere123: LightOrigin { index: 133, geoms: 132..133 } +provenance light /World/Sphere124: LightOrigin { index: 132, geoms: 131..132 } +provenance light /World/Sphere125: LightOrigin { index: 131, geoms: 130..131 } +provenance light /World/Sphere126: LightOrigin { index: 130, geoms: 129..130 } +provenance light /World/Sphere127: LightOrigin { index: 129, geoms: 128..129 } +provenance light /World/Sphere128: LightOrigin { index: 128, geoms: 127..128 } +provenance light /World/Sphere129: LightOrigin { index: 127, geoms: 126..127 } +provenance light /World/Sphere130: LightOrigin { index: 126, geoms: 125..126 } +provenance light /World/Sphere131: LightOrigin { index: 125, geoms: 124..125 } +provenance light /World/Sphere132: LightOrigin { index: 124, geoms: 123..124 } +provenance light /World/Sphere133: LightOrigin { index: 123, geoms: 122..123 } +provenance light /World/Sphere134: LightOrigin { index: 122, geoms: 121..122 } +provenance light /World/Sphere135: LightOrigin { index: 121, geoms: 120..121 } +provenance light /World/Sphere136: LightOrigin { index: 120, geoms: 119..120 } +provenance light /World/Sphere137: LightOrigin { index: 119, geoms: 118..119 } +provenance light /World/Sphere138: LightOrigin { index: 118, geoms: 117..118 } +provenance light /World/Sphere139: LightOrigin { index: 117, geoms: 116..117 } +provenance light /World/Sphere140: LightOrigin { index: 116, geoms: 115..116 } +provenance light /World/Sphere141: LightOrigin { index: 115, geoms: 114..115 } +provenance light /World/Sphere142: LightOrigin { index: 114, geoms: 113..114 } +provenance light /World/Sphere143: LightOrigin { index: 113, geoms: 112..113 } +provenance light /World/Sphere144: LightOrigin { index: 112, geoms: 111..112 } +provenance light /World/Sphere145: LightOrigin { index: 111, geoms: 110..111 } +provenance light /World/Sphere146: LightOrigin { index: 110, geoms: 109..110 } +provenance light /World/Sphere147: LightOrigin { index: 109, geoms: 108..109 } +provenance light /World/Sphere148: LightOrigin { index: 108, geoms: 107..108 } +provenance light /World/Sphere149: LightOrigin { index: 107, geoms: 106..107 } +provenance light /World/Sphere150: LightOrigin { index: 106, geoms: 105..106 } +provenance light /World/Sphere151: LightOrigin { index: 105, geoms: 104..105 } +provenance light /World/Sphere152: LightOrigin { index: 104, geoms: 103..104 } +provenance light /World/Sphere153: LightOrigin { index: 103, geoms: 102..103 } +provenance light /World/Sphere154: LightOrigin { index: 102, geoms: 101..102 } +provenance light /World/Sphere155: LightOrigin { index: 101, geoms: 100..101 } +provenance light /World/Sphere156: LightOrigin { index: 100, geoms: 99..100 } +provenance light /World/Sphere157: LightOrigin { index: 99, geoms: 98..99 } +provenance light /World/Sphere158: LightOrigin { index: 98, geoms: 97..98 } +provenance light /World/Sphere159: LightOrigin { index: 97, geoms: 96..97 } +provenance light /World/Spot00: LightOrigin { index: 16, geoms: 15..16 } +provenance light /World/Spot01: LightOrigin { index: 15, geoms: 14..15 } +provenance light /World/Spot02: LightOrigin { index: 14, geoms: 13..14 } +provenance light /World/Spot03: LightOrigin { index: 13, geoms: 12..13 } +provenance light /World/Spot04: LightOrigin { index: 12, geoms: 11..12 } +provenance light /World/Spot05: LightOrigin { index: 11, geoms: 10..11 } +provenance light /World/Spot06: LightOrigin { index: 10, geoms: 9..10 } +provenance light /World/Spot07: LightOrigin { index: 9, geoms: 8..9 } +provenance light /World/Spot08: LightOrigin { index: 8, geoms: 7..8 } +provenance light /World/Spot09: LightOrigin { index: 7, geoms: 6..7 } +provenance light /World/Spot10: LightOrigin { index: 6, geoms: 5..6 } +provenance light /World/Spot11: LightOrigin { index: 5, geoms: 4..5 } +provenance light /World/Spot12: LightOrigin { index: 4, geoms: 3..4 } +provenance light /World/Spot13: LightOrigin { index: 3, geoms: 2..3 } +provenance light /World/Spot14: LightOrigin { index: 2, geoms: 1..2 } +provenance light /World/Spot15: LightOrigin { index: 1, geoms: 0..1 } +provenance geometry 0..1: /World/Spot15 +provenance geometry 1..2: /World/Spot14 +provenance geometry 2..3: /World/Spot13 +provenance geometry 3..4: /World/Spot12 +provenance geometry 4..5: /World/Spot11 +provenance geometry 5..6: /World/Spot10 +provenance geometry 6..7: /World/Spot09 +provenance geometry 7..8: /World/Spot08 +provenance geometry 8..9: /World/Spot07 +provenance geometry 9..10: /World/Spot06 +provenance geometry 10..11: /World/Spot05 +provenance geometry 11..12: /World/Spot04 +provenance geometry 12..13: /World/Spot03 +provenance geometry 13..14: /World/Spot02 +provenance geometry 14..15: /World/Spot01 +provenance geometry 15..16: /World/Spot00 +provenance geometry 16..17: /World/Panel079 +provenance geometry 17..18: /World/Panel078 +provenance geometry 18..19: /World/Panel077 +provenance geometry 19..20: /World/Panel076 +provenance geometry 20..21: /World/Panel075 +provenance geometry 21..22: /World/Panel074 +provenance geometry 22..23: /World/Panel073 +provenance geometry 23..24: /World/Panel072 +provenance geometry 24..25: /World/Panel071 +provenance geometry 25..26: /World/Panel070 +provenance geometry 26..27: /World/Panel069 +provenance geometry 27..28: /World/Panel068 +provenance geometry 28..29: /World/Panel067 +provenance geometry 29..30: /World/Panel066 +provenance geometry 30..31: /World/Panel065 +provenance geometry 31..32: /World/Panel064 +provenance geometry 32..33: /World/Panel063 +provenance geometry 33..34: /World/Panel062 +provenance geometry 34..35: /World/Panel061 +provenance geometry 35..36: /World/Panel060 +provenance geometry 36..37: /World/Panel059 +provenance geometry 37..38: /World/Panel058 +provenance geometry 38..39: /World/Panel057 +provenance geometry 39..40: /World/Panel056 +provenance geometry 40..41: /World/Panel055 +provenance geometry 41..42: /World/Panel054 +provenance geometry 42..43: /World/Panel053 +provenance geometry 43..44: /World/Panel052 +provenance geometry 44..45: /World/Panel051 +provenance geometry 45..46: /World/Panel050 +provenance geometry 46..47: /World/Panel049 +provenance geometry 47..48: /World/Panel048 +provenance geometry 48..49: /World/Panel047 +provenance geometry 49..50: /World/Panel046 +provenance geometry 50..51: /World/Panel045 +provenance geometry 51..52: /World/Panel044 +provenance geometry 52..53: /World/Panel043 +provenance geometry 53..54: /World/Panel042 +provenance geometry 54..55: /World/Panel041 +provenance geometry 55..56: /World/Panel040 +provenance geometry 56..57: /World/Panel039 +provenance geometry 57..58: /World/Panel038 +provenance geometry 58..59: /World/Panel037 +provenance geometry 59..60: /World/Panel036 +provenance geometry 60..61: /World/Panel035 +provenance geometry 61..62: /World/Panel034 +provenance geometry 62..63: /World/Panel033 +provenance geometry 63..64: /World/Panel032 +provenance geometry 64..65: /World/Panel031 +provenance geometry 65..66: /World/Panel030 +provenance geometry 66..67: /World/Panel029 +provenance geometry 67..68: /World/Panel028 +provenance geometry 68..69: /World/Panel027 +provenance geometry 69..70: /World/Panel026 +provenance geometry 70..71: /World/Panel025 +provenance geometry 71..72: /World/Panel024 +provenance geometry 72..73: /World/Panel023 +provenance geometry 73..74: /World/Panel022 +provenance geometry 74..75: /World/Panel021 +provenance geometry 75..76: /World/Panel020 +provenance geometry 76..77: /World/Panel019 +provenance geometry 77..78: /World/Panel018 +provenance geometry 78..79: /World/Panel017 +provenance geometry 79..80: /World/Panel016 +provenance geometry 80..81: /World/Panel015 +provenance geometry 81..82: /World/Panel014 +provenance geometry 82..83: /World/Panel013 +provenance geometry 83..84: /World/Panel012 +provenance geometry 84..85: /World/Panel011 +provenance geometry 85..86: /World/Panel010 +provenance geometry 86..87: /World/Panel009 +provenance geometry 87..88: /World/Panel008 +provenance geometry 88..89: /World/Panel007 +provenance geometry 89..90: /World/Panel006 +provenance geometry 90..91: /World/Panel005 +provenance geometry 91..92: /World/Panel004 +provenance geometry 92..93: /World/Panel003 +provenance geometry 93..94: /World/Panel002 +provenance geometry 94..95: /World/Panel001 +provenance geometry 95..96: /World/Panel000 +provenance geometry 96..97: /World/Sphere159 +provenance geometry 97..98: /World/Sphere158 +provenance geometry 98..99: /World/Sphere157 +provenance geometry 99..100: /World/Sphere156 +provenance geometry 100..101: /World/Sphere155 +provenance geometry 101..102: /World/Sphere154 +provenance geometry 102..103: /World/Sphere153 +provenance geometry 103..104: /World/Sphere152 +provenance geometry 104..105: /World/Sphere151 +provenance geometry 105..106: /World/Sphere150 +provenance geometry 106..107: /World/Sphere149 +provenance geometry 107..108: /World/Sphere148 +provenance geometry 108..109: /World/Sphere147 +provenance geometry 109..110: /World/Sphere146 +provenance geometry 110..111: /World/Sphere145 +provenance geometry 111..112: /World/Sphere144 +provenance geometry 112..113: /World/Sphere143 +provenance geometry 113..114: /World/Sphere142 +provenance geometry 114..115: /World/Sphere141 +provenance geometry 115..116: /World/Sphere140 +provenance geometry 116..117: /World/Sphere139 +provenance geometry 117..118: /World/Sphere138 +provenance geometry 118..119: /World/Sphere137 +provenance geometry 119..120: /World/Sphere136 +provenance geometry 120..121: /World/Sphere135 +provenance geometry 121..122: /World/Sphere134 +provenance geometry 122..123: /World/Sphere133 +provenance geometry 123..124: /World/Sphere132 +provenance geometry 124..125: /World/Sphere131 +provenance geometry 125..126: /World/Sphere130 +provenance geometry 126..127: /World/Sphere129 +provenance geometry 127..128: /World/Sphere128 +provenance geometry 128..129: /World/Sphere127 +provenance geometry 129..130: /World/Sphere126 +provenance geometry 130..131: /World/Sphere125 +provenance geometry 131..132: /World/Sphere124 +provenance geometry 132..133: /World/Sphere123 +provenance geometry 133..134: /World/Sphere122 +provenance geometry 134..135: /World/Sphere121 +provenance geometry 135..136: /World/Sphere120 +provenance geometry 136..137: /World/Sphere119 +provenance geometry 137..138: /World/Sphere118 +provenance geometry 138..139: /World/Sphere117 +provenance geometry 139..140: /World/Sphere116 +provenance geometry 140..141: /World/Sphere115 +provenance geometry 141..142: /World/Sphere114 +provenance geometry 142..143: /World/Sphere113 +provenance geometry 143..144: /World/Sphere112 +provenance geometry 144..145: /World/Sphere111 +provenance geometry 145..146: /World/Sphere110 +provenance geometry 146..147: /World/Sphere109 +provenance geometry 147..148: /World/Sphere108 +provenance geometry 148..149: /World/Sphere107 +provenance geometry 149..150: /World/Sphere106 +provenance geometry 150..151: /World/Sphere105 +provenance geometry 151..152: /World/Sphere104 +provenance geometry 152..153: /World/Sphere103 +provenance geometry 153..154: /World/Sphere102 +provenance geometry 154..155: /World/Sphere101 +provenance geometry 155..156: /World/Sphere100 +provenance geometry 156..157: /World/Sphere099 +provenance geometry 157..158: /World/Sphere098 +provenance geometry 158..159: /World/Sphere097 +provenance geometry 159..160: /World/Sphere096 +provenance geometry 160..161: /World/Sphere095 +provenance geometry 161..162: /World/Sphere094 +provenance geometry 162..163: /World/Sphere093 +provenance geometry 163..164: /World/Sphere092 +provenance geometry 164..165: /World/Sphere091 +provenance geometry 165..166: /World/Sphere090 +provenance geometry 166..167: /World/Sphere089 +provenance geometry 167..168: /World/Sphere088 +provenance geometry 168..169: /World/Sphere087 +provenance geometry 169..170: /World/Sphere086 +provenance geometry 170..171: /World/Sphere085 +provenance geometry 171..172: /World/Sphere084 +provenance geometry 172..173: /World/Sphere083 +provenance geometry 173..174: /World/Sphere082 +provenance geometry 174..175: /World/Sphere081 +provenance geometry 175..176: /World/Sphere080 +provenance geometry 176..177: /World/Sphere079 +provenance geometry 177..178: /World/Sphere078 +provenance geometry 178..179: /World/Sphere077 +provenance geometry 179..180: /World/Sphere076 +provenance geometry 180..181: /World/Sphere075 +provenance geometry 181..182: /World/Sphere074 +provenance geometry 182..183: /World/Sphere073 +provenance geometry 183..184: /World/Sphere072 +provenance geometry 184..185: /World/Sphere071 +provenance geometry 185..186: /World/Sphere070 +provenance geometry 186..187: /World/Sphere069 +provenance geometry 187..188: /World/Sphere068 +provenance geometry 188..189: /World/Sphere067 +provenance geometry 189..190: /World/Sphere066 +provenance geometry 190..191: /World/Sphere065 +provenance geometry 191..192: /World/Sphere064 +provenance geometry 192..193: /World/Sphere063 +provenance geometry 193..194: /World/Sphere062 +provenance geometry 194..195: /World/Sphere061 +provenance geometry 195..196: /World/Sphere060 +provenance geometry 196..197: /World/Sphere059 +provenance geometry 197..198: /World/Sphere058 +provenance geometry 198..199: /World/Sphere057 +provenance geometry 199..200: /World/Sphere056 +provenance geometry 200..201: /World/Sphere055 +provenance geometry 201..202: /World/Sphere054 +provenance geometry 202..203: /World/Sphere053 +provenance geometry 203..204: /World/Sphere052 +provenance geometry 204..205: /World/Sphere051 +provenance geometry 205..206: /World/Sphere050 +provenance geometry 206..207: /World/Sphere049 +provenance geometry 207..208: /World/Sphere048 +provenance geometry 208..209: /World/Sphere047 +provenance geometry 209..210: /World/Sphere046 +provenance geometry 210..211: /World/Sphere045 +provenance geometry 211..212: /World/Sphere044 +provenance geometry 212..213: /World/Sphere043 +provenance geometry 213..214: /World/Sphere042 +provenance geometry 214..215: /World/Sphere041 +provenance geometry 215..216: /World/Sphere040 +provenance geometry 216..217: /World/Sphere039 +provenance geometry 217..218: /World/Sphere038 +provenance geometry 218..219: /World/Sphere037 +provenance geometry 219..220: /World/Sphere036 +provenance geometry 220..221: /World/Sphere035 +provenance geometry 221..222: /World/Sphere034 +provenance geometry 222..223: /World/Sphere033 +provenance geometry 223..224: /World/Sphere032 +provenance geometry 224..225: /World/Sphere031 +provenance geometry 225..226: /World/Sphere030 +provenance geometry 226..227: /World/Sphere029 +provenance geometry 227..228: /World/Sphere028 +provenance geometry 228..229: /World/Sphere027 +provenance geometry 229..230: /World/Sphere026 +provenance geometry 230..231: /World/Sphere025 +provenance geometry 231..232: /World/Sphere024 +provenance geometry 232..233: /World/Sphere023 +provenance geometry 233..234: /World/Sphere022 +provenance geometry 234..235: /World/Sphere021 +provenance geometry 235..236: /World/Sphere020 +provenance geometry 236..237: /World/Sphere019 +provenance geometry 237..238: /World/Sphere018 +provenance geometry 238..239: /World/Sphere017 +provenance geometry 239..240: /World/Sphere016 +provenance geometry 240..241: /World/Sphere015 +provenance geometry 241..242: /World/Sphere014 +provenance geometry 242..243: /World/Sphere013 +provenance geometry 243..244: /World/Sphere012 +provenance geometry 244..245: /World/Sphere011 +provenance geometry 245..246: /World/Sphere010 +provenance geometry 246..247: /World/Sphere009 +provenance geometry 247..248: /World/Sphere008 +provenance geometry 248..249: /World/Sphere007 +provenance geometry 249..250: /World/Sphere006 +provenance geometry 250..251: /World/Sphere005 +provenance geometry 251..252: /World/Sphere004 +provenance geometry 252..253: /World/Sphere003 +provenance geometry 253..254: /World/Sphere002 +provenance geometry 254..255: /World/Sphere001 +provenance geometry 255..256: /World/Sphere000 +provenance geometry 256..257: /World/Wall4 +provenance geometry 257..258: /World/Wall3 +provenance geometry 258..259: /World/Wall2 +provenance geometry 259..260: /World/Wall1 +provenance geometry 260..261: /World/Wall0 +provenance geometry 261..262: /World/Floor +provenance mesh: MeshOrigin { geom_id: 256, slot: 0, baked: false, moving: false } +provenance mesh: MeshOrigin { geom_id: 257, slot: 0, baked: false, moving: false } +provenance mesh: MeshOrigin { geom_id: 258, slot: 0, baked: false, moving: false } +provenance mesh: MeshOrigin { geom_id: 259, slot: 0, baked: false, moving: false } +provenance mesh: MeshOrigin { geom_id: 260, slot: 0, baked: false, moving: false } +provenance mesh: MeshOrigin { geom_id: 261, slot: 1, baked: true, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 18161012096923765881, n_points: 8, n_indices: 24, n_uvs: None, smooth: false, material: 0 }), placements: 5, shared: false, displaced: false } +provenance mesh slot 1: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 14002714535549629103, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/World/Cam"), cameras: ["/World/Cam"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/World/Cam"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/many_lights_usda-492e76bd4d2bdc51-2.image b/crates/crust-core/tests/data/import_baselines/many_lights_usda-492e76bd4d2bdc51-2.image new file mode 100644 index 000000000..3c58a13e7 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/many_lights_usda-492e76bd4d2bdc51-2.image @@ -0,0 +1 @@ +480x270 16spp clamp-off 324b3d3f36346629 diff --git a/crates/crust-core/tests/data/import_baselines/marks_usda-92136ff2d6b2d34c-1.digest b/crates/crust-core/tests/data/import_baselines/marks_usda-92136ff2d6b2d34c-1.digest new file mode 100644 index 000000000..0c98398df --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/marks_usda-92136ff2d6b2d34c-1.digest @@ -0,0 +1,37 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: None +camera: Camera { origin: Vec3A(15.0, 3.0, 3.0), lower_left_corner: Vec3A(4.8863316, -0.044797063, 4.174048), horizontal: Vec3A(1.2295314, 0.0, -6.147657), vertical: Vec3A(-0.44830504, 3.4967792, -0.08966101), u: Vec3A(0.19611613, 0.0, -0.9805807), v: Vec3A(-0.1271232, 0.991561, -0.02542464), lens_radius: 0.05, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: None +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 640, height: 360, region: PixelRect { x0: 0, y0: 0, x1: 640, y1: 360 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: None, depth_of_field: true, motion_blur: false, layer_stack: ["$DIR/marks.usda"], invisible_overrides: Some(0) } +layer: $DIR/marks.usda +warning: Warning { code: CameraMissing, kind: Skipped, count: 1, prims: [], message: "USD stage has no UsdGeomCamera — falling back to world::get_settings camera" } +lights: 5 +light 0: area name Some("/World/Hidden") lpe None pmf 0.2 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 1: area name Some("/World/Visible") lpe None pmf 0.2 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 2: area name Some("/World/Prman") lpe None pmf 0.2 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 3: area name Some("/World/Masked") lpe None pmf 0.2 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 4: area name Some("/World/Blocker") lpe None pmf 0.2 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 5 geometries, PrimitiveBreakdown { triangles: 0, spheres: 5, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 0, spheres: 5, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +geom 0: material #0 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:984632b55acb5495 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=1:984632b55acb5495 +geom 1: material #1 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:b4dfc0dd30bb66e5 camera=1:b4dfc0dd30bb66e5 shadow=1:b4dfc0dd30bb66e5 indirect=1:b4dfc0dd30bb66e5 +geom 2: material #2 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:35cdd9a0d6e50805 camera=1:35cdd9a0d6e50805 shadow=1:35cdd9a0d6e50805 indirect=1:35cdd9a0d6e50805 +geom 3: material #3 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:5502ac7a1bf17ab5 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=1:5502ac7a1bf17ab5 +geom 4: material #4 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:c4216be242caaf75 camera=0:cbf29ce484222325 shadow=1:c4216be242caaf75 indirect=1:c4216be242caaf75 +provenance light /World/Blocker: LightOrigin { index: 4, geoms: 4..5 } +provenance light /World/Hidden: LightOrigin { index: 0, geoms: 0..1 } +provenance light /World/Masked: LightOrigin { index: 3, geoms: 3..4 } +provenance light /World/Prman: LightOrigin { index: 2, geoms: 2..3 } +provenance light /World/Visible: LightOrigin { index: 1, geoms: 1..2 } +provenance geometry 0..1: /World/Hidden +provenance geometry 1..2: /World/Visible +provenance geometry 2..3: /World/Prman +provenance geometry 3..4: /World/Masked +provenance geometry 4..5: /World/Blocker +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: None, cameras: [], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: None, offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/marks_usda-92136ff2d6b2d34c-1.image b/crates/crust-core/tests/data/import_baselines/marks_usda-92136ff2d6b2d34c-1.image new file mode 100644 index 000000000..ff4dbd240 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/marks_usda-92136ff2d6b2d34c-1.image @@ -0,0 +1 @@ +640x360 16spp clamp-off 263ba081a1bd59fc diff --git a/crates/crust-core/tests/data/import_baselines/masks_usda-0b1d6cd46ef5aa7b-1.digest b/crates/crust-core/tests/data/import_baselines/masks_usda-0b1d6cd46ef5aa7b-1.digest new file mode 100644 index 000000000..da7a207eb --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/masks_usda-0b1d6cd46ef5aa7b-1.digest @@ -0,0 +1,23 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: None +camera: Camera { origin: Vec3A(15.0, 3.0, 3.0), lower_left_corner: Vec3A(4.8863316, -0.044797063, 4.174048), horizontal: Vec3A(1.2295314, 0.0, -6.147657), vertical: Vec3A(-0.44830504, 3.4967792, -0.08966101), u: Vec3A(0.19611613, 0.0, -0.9805807), v: Vec3A(-0.1271232, 0.991561, -0.02542464), lens_radius: 0.05, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: None +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 640, height: 360, region: PixelRect { x0: 0, y0: 0, x1: 640, y1: 360 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: None, depth_of_field: true, motion_blur: false, layer_stack: ["$DIR/masks.usda"], invisible_overrides: Some(0) } +layer: $DIR/masks.usda +warning: Warning { code: CameraMissing, kind: Skipped, count: 1, prims: [], message: "USD stage has no UsdGeomCamera — falling back to world::get_settings camera" } +lights: 1 +light 0: area name Some("/World/L") lpe None pmf 1.0 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 2 geometries, PrimitiveBreakdown { triangles: 0, spheres: 2, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 0, spheres: 2, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:9dde2e2d7b5e3ea5 camera=0:cbf29ce484222325 shadow=1:9dde2e2d7b5e3ea5 indirect=1:9dde2e2d7b5e3ea5 +geom 1: material #1 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:984632b55acb5495 camera=1:984632b55acb5495 shadow=0:cbf29ce484222325 indirect=0:cbf29ce484222325 +provenance light /World/L: LightOrigin { index: 0, geoms: 1..2 } +provenance geometry 0..1: /World/Hidden +provenance geometry 1..2: /World/L +provenance spheres: [0] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: None, cameras: [], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: None, offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/masks_usda-0b1d6cd46ef5aa7b-1.image b/crates/crust-core/tests/data/import_baselines/masks_usda-0b1d6cd46ef5aa7b-1.image new file mode 100644 index 000000000..0d5371bdf --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/masks_usda-0b1d6cd46ef5aa7b-1.image @@ -0,0 +1 @@ +640x360 16spp clamp-off 7262827b81999b78 diff --git a/crates/crust-core/tests/data/import_baselines/mass_spike_usda-41c01d82edccd4ad-1.digest b/crates/crust-core/tests/data/import_baselines/mass_spike_usda-41c01d82edccd4ad-1.digest new file mode 100644 index 000000000..546afbbff --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/mass_spike_usda-41c01d82edccd4ad-1.digest @@ -0,0 +1,26 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/World/Camera") +camera: Camera { origin: Vec3A(0.5, 0.0, 12.0), lower_left_corner: Vec3A(-3.766667, -2.4, 2.0), horizontal: Vec3A(8.533334, 0.0, 0.0), vertical: Vec3A(0.0, 4.8, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: None +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 640, height: 360, region: PixelRect { x0: 0, y0: 0, x1: 640, y1: 360 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 50.0, aperture: [36.0, 24.0], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 10.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/mass_spike.usda"], invisible_overrides: Some(0) } +layer: $DIR/mass_spike.usda +lights: 2 +light 0: dome name Some("/World/Sky") lpe None pmf 0.5 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 1: distant name Some("/World/Key") lpe None pmf 0.5 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 3 geometries, PrimitiveBreakdown { triangles: 0, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 3 } top level, PrimitiveBreakdown { triangles: 0, spheres: 0, disks: 0, cylinders: 0, curve_segments: 285, cubic_curve_spans: 0, instances: 3 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: Some((false, false, [])), primvars: None } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves true scale 1.0 motion [] pieces all=67:41c4aab06daa3489 camera=67:41c4aab06daa3489 shadow=67:41c4aab06daa3489 indirect=67:41c4aab06daa3489 +geom 1: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: Some((false, false, [])), primvars: None } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves true scale 1.0 motion [] pieces all=67:173faf3820eec7d9 camera=67:173faf3820eec7d9 shadow=67:173faf3820eec7d9 indirect=67:173faf3820eec7d9 +geom 2: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: Some((false, false, [])), primvars: None } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves true scale 1.0 motion [] pieces all=151:5a69269f17ec09e3 camera=151:5a69269f17ec09e3 shadow=151:5a69269f17ec09e3 indirect=151:5a69269f17ec09e3 +provenance light /World/Key: LightOrigin { index: 1, geoms: 0..0 } +provenance light /World/Sky: LightOrigin { index: 0, geoms: 0..0 } +provenance geometry 0..1: /World/SheetA +provenance geometry 1..2: /World/SheetB +provenance geometry 2..3: /World/Clump +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/World/Camera"), cameras: ["/World/Camera"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/World/Camera"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/mass_spike_usda-41c01d82edccd4ad-1.image b/crates/crust-core/tests/data/import_baselines/mass_spike_usda-41c01d82edccd4ad-1.image new file mode 100644 index 000000000..300fb9e4a --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/mass_spike_usda-41c01d82edccd4ad-1.image @@ -0,0 +1 @@ +640x360 16spp clamp-off 82ffcdcec2f0a128 diff --git a/crates/crust-core/tests/data/import_baselines/mass_spike_usda-41c01d82edccd4ad-2.digest b/crates/crust-core/tests/data/import_baselines/mass_spike_usda-41c01d82edccd4ad-2.digest new file mode 100644 index 000000000..546afbbff --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/mass_spike_usda-41c01d82edccd4ad-2.digest @@ -0,0 +1,26 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/World/Camera") +camera: Camera { origin: Vec3A(0.5, 0.0, 12.0), lower_left_corner: Vec3A(-3.766667, -2.4, 2.0), horizontal: Vec3A(8.533334, 0.0, 0.0), vertical: Vec3A(0.0, 4.8, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: None +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 640, height: 360, region: PixelRect { x0: 0, y0: 0, x1: 640, y1: 360 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 50.0, aperture: [36.0, 24.0], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 10.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/mass_spike.usda"], invisible_overrides: Some(0) } +layer: $DIR/mass_spike.usda +lights: 2 +light 0: dome name Some("/World/Sky") lpe None pmf 0.5 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 1: distant name Some("/World/Key") lpe None pmf 0.5 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 3 geometries, PrimitiveBreakdown { triangles: 0, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 3 } top level, PrimitiveBreakdown { triangles: 0, spheres: 0, disks: 0, cylinders: 0, curve_segments: 285, cubic_curve_spans: 0, instances: 3 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: Some((false, false, [])), primvars: None } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves true scale 1.0 motion [] pieces all=67:41c4aab06daa3489 camera=67:41c4aab06daa3489 shadow=67:41c4aab06daa3489 indirect=67:41c4aab06daa3489 +geom 1: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: Some((false, false, [])), primvars: None } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves true scale 1.0 motion [] pieces all=67:173faf3820eec7d9 camera=67:173faf3820eec7d9 shadow=67:173faf3820eec7d9 indirect=67:173faf3820eec7d9 +geom 2: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: Some((false, false, [])), primvars: None } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves true scale 1.0 motion [] pieces all=151:5a69269f17ec09e3 camera=151:5a69269f17ec09e3 shadow=151:5a69269f17ec09e3 indirect=151:5a69269f17ec09e3 +provenance light /World/Key: LightOrigin { index: 1, geoms: 0..0 } +provenance light /World/Sky: LightOrigin { index: 0, geoms: 0..0 } +provenance geometry 0..1: /World/SheetA +provenance geometry 1..2: /World/SheetB +provenance geometry 2..3: /World/Clump +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/World/Camera"), cameras: ["/World/Camera"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/World/Camera"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/mass_spike_usda-41c01d82edccd4ad-2.image b/crates/crust-core/tests/data/import_baselines/mass_spike_usda-41c01d82edccd4ad-2.image new file mode 100644 index 000000000..300fb9e4a --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/mass_spike_usda-41c01d82edccd4ad-2.image @@ -0,0 +1 @@ +640x360 16spp clamp-off 82ffcdcec2f0a128 diff --git a/crates/crust-core/tests/data/import_baselines/mass_spike_usda-dee5e21f531bb6c7-1.digest b/crates/crust-core/tests/data/import_baselines/mass_spike_usda-dee5e21f531bb6c7-1.digest new file mode 100644 index 000000000..02fca1ec1 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/mass_spike_usda-dee5e21f531bb6c7-1.digest @@ -0,0 +1,26 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/World/Camera") +camera: Camera { origin: Vec3A(0.5, 0.0, 12.0), lower_left_corner: Vec3A(-3.766667, -2.4, 2.0), horizontal: Vec3A(8.533334, 0.0, 0.0), vertical: Vec3A(0.0, 4.8, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: None +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 640, height: 360, region: PixelRect { x0: 0, y0: 0, x1: 640, y1: 360 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 50.0, aperture: [36.0, 24.0], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 10.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/mass_spike.usda"], invisible_overrides: Some(0) } +layer: $DIR/mass_spike.usda +lights: 2 +light 0: dome name Some("/World/Sky") lpe None pmf 0.5 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 1: distant name Some("/World/Key") lpe None pmf 0.5 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 3 geometries, PrimitiveBreakdown { triangles: 0, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 3 } top level, PrimitiveBreakdown { triangles: 0, spheres: 0, disks: 0, cylinders: 0, curve_segments: 285, cubic_curve_spans: 0, instances: 3 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: Some((false, false, [])), primvars: None } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves true scale 1.0 motion [] pieces all=67:41c4aab06daa3489 camera=67:41c4aab06daa3489 shadow=67:41c4aab06daa3489 indirect=67:41c4aab06daa3489 +geom 1: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: Some((false, false, [])), primvars: None } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves true scale 1.0 motion [] pieces all=67:173faf3820eec7d9 camera=67:173faf3820eec7d9 shadow=67:173faf3820eec7d9 indirect=67:173faf3820eec7d9 +geom 2: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: Some((false, false, [])), primvars: None } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves true scale 1.0 motion [] pieces all=151:5a69269f17ec09e3 camera=151:5a69269f17ec09e3 shadow=151:5a69269f17ec09e3 indirect=151:5a69269f17ec09e3 +provenance light /World/Key: LightOrigin { index: 1, geoms: 0..0 } +provenance light /World/Sky: LightOrigin { index: 0, geoms: 0..0 } +provenance geometry 0..1: /World/SheetA +provenance geometry 1..2: /World/SheetB +provenance geometry 2..3: /World/Clump +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: true, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/World/Camera"), cameras: ["/World/Camera"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/World/Camera"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/mass_spike_usda-dee5e21f531bb6c7-1.image b/crates/crust-core/tests/data/import_baselines/mass_spike_usda-dee5e21f531bb6c7-1.image new file mode 100644 index 000000000..300fb9e4a --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/mass_spike_usda-dee5e21f531bb6c7-1.image @@ -0,0 +1 @@ +640x360 16spp clamp-off 82ffcdcec2f0a128 diff --git a/crates/crust-core/tests/data/import_baselines/materialx_basic_usda-2113b612a3c1746f-1.digest b/crates/crust-core/tests/data/import_baselines/materialx_basic_usda-2113b612a3c1746f-1.digest new file mode 100644 index 000000000..a0a0361a0 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/materialx_basic_usda-2113b612a3c1746f-1.digest @@ -0,0 +1,42 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/World/ShotCam") +camera: Camera { origin: Vec3A(0.0, 0.4, 8.5), lower_left_corner: Vec3A(-3.0600004, -1.3212503, 0.0), horizontal: Vec3A(6.120001, 0.0, 0.0), vertical: Vec3A(0.0, 3.4425006, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: Some("/Render/settings") +settings: RenderSettings { samples_per_pixel: 64, max_depth: 8, width: 640, height: 360, region: PixelRect { x0: 0, y0: 0, x1: 640, y1: 360 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 50.0, aperture: [36.0, 15.2908], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 8.5 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/materialx_basic.usda"], invisible_overrides: Some(0) } +layer: $DIR/materialx_basic.usda +warning: Warning { code: AssetUnsupportedByHost, kind: Skipped, count: 3, prims: [], message: "Asset loader does not decode UV textures: $DIR/textures/mtlx_mask.png ignored — the input falls back to its constant value." } +lights: 2 +light 0: area name Some("/World/Key") lpe None pmf 0.5 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 1: dome name Some("/World/Sky") lpe None pmf 0.5 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 5 geometries, PrimitiveBreakdown { triangles: 10, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 10, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +geom 0: material #0 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:d922ac2ec48f4f97 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=2:d922ac2ec48f4f97 +geom 1: material #1 Signature { kind: "MaterialX", cutout: false, straight: false, boundary: false, emits: false, uv: true, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv Some(0) shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:23063c3980664227 camera=2:23063c3980664227 shadow=2:23063c3980664227 indirect=2:23063c3980664227 +geom 2: material #2 Signature { kind: "MaterialX", cutout: false, straight: false, boundary: false, emits: false, uv: true, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv Some(1) shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:380b2e0280de83db camera=2:380b2e0280de83db shadow=2:380b2e0280de83db indirect=2:380b2e0280de83db +geom 3: material #3 Signature { kind: "MaterialX", cutout: false, straight: false, boundary: false, emits: false, uv: true, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv Some(2) shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:2f3c5568e1dbd031 camera=2:2f3c5568e1dbd031 shadow=2:2f3c5568e1dbd031 indirect=2:2f3c5568e1dbd031 +geom 4: material #3 Signature { kind: "MaterialX", cutout: false, straight: false, boundary: false, emits: false, uv: true, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv Some(3) shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:fbc0ea070d0254d5 camera=2:fbc0ea070d0254d5 shadow=2:fbc0ea070d0254d5 indirect=2:fbc0ea070d0254d5 +provenance material /World/Looks/Ceramic: MaterialOrigin { slots: [3, 4], displaced: false } +provenance material /World/Looks/Lacquer: MaterialOrigin { slots: [1], displaced: false } +provenance material /World/Looks/Metal: MaterialOrigin { slots: [2], displaced: false } +provenance light /World/Key: LightOrigin { index: 0, geoms: 0..1 } +provenance light /World/Sky: LightOrigin { index: 1, geoms: 1..1 } +provenance geometry 0..1: /World/Key +provenance geometry 1..2: /World/LacquerBar +provenance geometry 2..3: /World/MetalBar +provenance geometry 3..4: /World/TileB +provenance geometry 4..5: /World/TileA +provenance mesh: MeshOrigin { geom_id: 1, slot: 0, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 2, slot: 1, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 3, slot: 2, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 4, slot: 3, baked: true, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 9086379455125602793, n_points: 4, n_indices: 4, n_uvs: Some(4), smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 1: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 17635173815764174797, n_points: 4, n_indices: 4, n_uvs: Some(4), smooth: false, material: 1 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 2: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 16866940305613015801, n_points: 4, n_indices: 4, n_uvs: Some(4), smooth: false, material: 2 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 3: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 2259531437156517646, n_points: 4, n_indices: 4, n_uvs: Some(4), smooth: false, material: 2 }), placements: 1, shared: false, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/World/ShotCam"), cameras: ["/World/ShotCam"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/World/ShotCam"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/materialx_basic_usda-2113b612a3c1746f-1.image b/crates/crust-core/tests/data/import_baselines/materialx_basic_usda-2113b612a3c1746f-1.image new file mode 100644 index 000000000..351e4c622 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/materialx_basic_usda-2113b612a3c1746f-1.image @@ -0,0 +1 @@ +640x360 16spp clamp-off 4c3417d5ab1e2f66 diff --git a/crates/crust-core/tests/data/import_baselines/materialx_basic_usda-2113b612a3c1746f-2.digest b/crates/crust-core/tests/data/import_baselines/materialx_basic_usda-2113b612a3c1746f-2.digest new file mode 100644 index 000000000..a0a0361a0 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/materialx_basic_usda-2113b612a3c1746f-2.digest @@ -0,0 +1,42 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/World/ShotCam") +camera: Camera { origin: Vec3A(0.0, 0.4, 8.5), lower_left_corner: Vec3A(-3.0600004, -1.3212503, 0.0), horizontal: Vec3A(6.120001, 0.0, 0.0), vertical: Vec3A(0.0, 3.4425006, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: Some("/Render/settings") +settings: RenderSettings { samples_per_pixel: 64, max_depth: 8, width: 640, height: 360, region: PixelRect { x0: 0, y0: 0, x1: 640, y1: 360 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 50.0, aperture: [36.0, 15.2908], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 8.5 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/materialx_basic.usda"], invisible_overrides: Some(0) } +layer: $DIR/materialx_basic.usda +warning: Warning { code: AssetUnsupportedByHost, kind: Skipped, count: 3, prims: [], message: "Asset loader does not decode UV textures: $DIR/textures/mtlx_mask.png ignored — the input falls back to its constant value." } +lights: 2 +light 0: area name Some("/World/Key") lpe None pmf 0.5 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 1: dome name Some("/World/Sky") lpe None pmf 0.5 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 5 geometries, PrimitiveBreakdown { triangles: 10, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 10, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +geom 0: material #0 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:d922ac2ec48f4f97 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=2:d922ac2ec48f4f97 +geom 1: material #1 Signature { kind: "MaterialX", cutout: false, straight: false, boundary: false, emits: false, uv: true, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv Some(0) shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:23063c3980664227 camera=2:23063c3980664227 shadow=2:23063c3980664227 indirect=2:23063c3980664227 +geom 2: material #2 Signature { kind: "MaterialX", cutout: false, straight: false, boundary: false, emits: false, uv: true, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv Some(1) shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:380b2e0280de83db camera=2:380b2e0280de83db shadow=2:380b2e0280de83db indirect=2:380b2e0280de83db +geom 3: material #3 Signature { kind: "MaterialX", cutout: false, straight: false, boundary: false, emits: false, uv: true, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv Some(2) shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:2f3c5568e1dbd031 camera=2:2f3c5568e1dbd031 shadow=2:2f3c5568e1dbd031 indirect=2:2f3c5568e1dbd031 +geom 4: material #3 Signature { kind: "MaterialX", cutout: false, straight: false, boundary: false, emits: false, uv: true, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv Some(3) shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:fbc0ea070d0254d5 camera=2:fbc0ea070d0254d5 shadow=2:fbc0ea070d0254d5 indirect=2:fbc0ea070d0254d5 +provenance material /World/Looks/Ceramic: MaterialOrigin { slots: [3, 4], displaced: false } +provenance material /World/Looks/Lacquer: MaterialOrigin { slots: [1], displaced: false } +provenance material /World/Looks/Metal: MaterialOrigin { slots: [2], displaced: false } +provenance light /World/Key: LightOrigin { index: 0, geoms: 0..1 } +provenance light /World/Sky: LightOrigin { index: 1, geoms: 1..1 } +provenance geometry 0..1: /World/Key +provenance geometry 1..2: /World/LacquerBar +provenance geometry 2..3: /World/MetalBar +provenance geometry 3..4: /World/TileB +provenance geometry 4..5: /World/TileA +provenance mesh: MeshOrigin { geom_id: 1, slot: 0, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 2, slot: 1, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 3, slot: 2, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 4, slot: 3, baked: true, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 9086379455125602793, n_points: 4, n_indices: 4, n_uvs: Some(4), smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 1: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 17635173815764174797, n_points: 4, n_indices: 4, n_uvs: Some(4), smooth: false, material: 1 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 2: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 16866940305613015801, n_points: 4, n_indices: 4, n_uvs: Some(4), smooth: false, material: 2 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 3: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 2259531437156517646, n_points: 4, n_indices: 4, n_uvs: Some(4), smooth: false, material: 2 }), placements: 1, shared: false, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/World/ShotCam"), cameras: ["/World/ShotCam"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/World/ShotCam"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/materialx_basic_usda-2113b612a3c1746f-2.image b/crates/crust-core/tests/data/import_baselines/materialx_basic_usda-2113b612a3c1746f-2.image new file mode 100644 index 000000000..351e4c622 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/materialx_basic_usda-2113b612a3c1746f-2.image @@ -0,0 +1 @@ +640x360 16spp clamp-off 4c3417d5ab1e2f66 diff --git a/crates/crust-core/tests/data/import_baselines/materialx_basic_usda-47f44502b8b66093-1.digest b/crates/crust-core/tests/data/import_baselines/materialx_basic_usda-47f44502b8b66093-1.digest new file mode 100644 index 000000000..a0a0361a0 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/materialx_basic_usda-47f44502b8b66093-1.digest @@ -0,0 +1,42 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/World/ShotCam") +camera: Camera { origin: Vec3A(0.0, 0.4, 8.5), lower_left_corner: Vec3A(-3.0600004, -1.3212503, 0.0), horizontal: Vec3A(6.120001, 0.0, 0.0), vertical: Vec3A(0.0, 3.4425006, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: Some("/Render/settings") +settings: RenderSettings { samples_per_pixel: 64, max_depth: 8, width: 640, height: 360, region: PixelRect { x0: 0, y0: 0, x1: 640, y1: 360 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 50.0, aperture: [36.0, 15.2908], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 8.5 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/materialx_basic.usda"], invisible_overrides: Some(0) } +layer: $DIR/materialx_basic.usda +warning: Warning { code: AssetUnsupportedByHost, kind: Skipped, count: 3, prims: [], message: "Asset loader does not decode UV textures: $DIR/textures/mtlx_mask.png ignored — the input falls back to its constant value." } +lights: 2 +light 0: area name Some("/World/Key") lpe None pmf 0.5 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 1: dome name Some("/World/Sky") lpe None pmf 0.5 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 5 geometries, PrimitiveBreakdown { triangles: 10, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 10, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +geom 0: material #0 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:d922ac2ec48f4f97 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=2:d922ac2ec48f4f97 +geom 1: material #1 Signature { kind: "MaterialX", cutout: false, straight: false, boundary: false, emits: false, uv: true, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv Some(0) shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:23063c3980664227 camera=2:23063c3980664227 shadow=2:23063c3980664227 indirect=2:23063c3980664227 +geom 2: material #2 Signature { kind: "MaterialX", cutout: false, straight: false, boundary: false, emits: false, uv: true, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv Some(1) shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:380b2e0280de83db camera=2:380b2e0280de83db shadow=2:380b2e0280de83db indirect=2:380b2e0280de83db +geom 3: material #3 Signature { kind: "MaterialX", cutout: false, straight: false, boundary: false, emits: false, uv: true, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv Some(2) shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:2f3c5568e1dbd031 camera=2:2f3c5568e1dbd031 shadow=2:2f3c5568e1dbd031 indirect=2:2f3c5568e1dbd031 +geom 4: material #3 Signature { kind: "MaterialX", cutout: false, straight: false, boundary: false, emits: false, uv: true, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv Some(3) shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:fbc0ea070d0254d5 camera=2:fbc0ea070d0254d5 shadow=2:fbc0ea070d0254d5 indirect=2:fbc0ea070d0254d5 +provenance material /World/Looks/Ceramic: MaterialOrigin { slots: [3, 4], displaced: false } +provenance material /World/Looks/Lacquer: MaterialOrigin { slots: [1], displaced: false } +provenance material /World/Looks/Metal: MaterialOrigin { slots: [2], displaced: false } +provenance light /World/Key: LightOrigin { index: 0, geoms: 0..1 } +provenance light /World/Sky: LightOrigin { index: 1, geoms: 1..1 } +provenance geometry 0..1: /World/Key +provenance geometry 1..2: /World/LacquerBar +provenance geometry 2..3: /World/MetalBar +provenance geometry 3..4: /World/TileB +provenance geometry 4..5: /World/TileA +provenance mesh: MeshOrigin { geom_id: 1, slot: 0, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 2, slot: 1, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 3, slot: 2, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 4, slot: 3, baked: true, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 9086379455125602793, n_points: 4, n_indices: 4, n_uvs: Some(4), smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 1: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 17635173815764174797, n_points: 4, n_indices: 4, n_uvs: Some(4), smooth: false, material: 1 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 2: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 16866940305613015801, n_points: 4, n_indices: 4, n_uvs: Some(4), smooth: false, material: 2 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 3: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 2259531437156517646, n_points: 4, n_indices: 4, n_uvs: Some(4), smooth: false, material: 2 }), placements: 1, shared: false, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/World/ShotCam"), cameras: ["/World/ShotCam"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/World/ShotCam"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/materialx_basic_usda-47f44502b8b66093-1.image b/crates/crust-core/tests/data/import_baselines/materialx_basic_usda-47f44502b8b66093-1.image new file mode 100644 index 000000000..351e4c622 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/materialx_basic_usda-47f44502b8b66093-1.image @@ -0,0 +1 @@ +640x360 16spp clamp-off 4c3417d5ab1e2f66 diff --git a/crates/crust-core/tests/data/import_baselines/materialx_basic_usda-5e3c6402db738e98-1.digest b/crates/crust-core/tests/data/import_baselines/materialx_basic_usda-5e3c6402db738e98-1.digest new file mode 100644 index 000000000..f85179016 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/materialx_basic_usda-5e3c6402db738e98-1.digest @@ -0,0 +1,41 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/World/ShotCam") +camera: Camera { origin: Vec3A(0.0, 0.4, 8.5), lower_left_corner: Vec3A(-3.0600004, -1.3212503, 0.0), horizontal: Vec3A(6.120001, 0.0, 0.0), vertical: Vec3A(0.0, 3.4425006, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: Some("/Render/settings") +settings: RenderSettings { samples_per_pixel: 64, max_depth: 8, width: 640, height: 360, region: PixelRect { x0: 0, y0: 0, x1: 640, y1: 360 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 50.0, aperture: [36.0, 15.2908], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 8.5 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/materialx_basic.usda"], invisible_overrides: Some(0) } +layer: $DIR/materialx_basic.usda +lights: 2 +light 0: area name Some("/World/Key") lpe None pmf 0.5 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 1: dome name Some("/World/Sky") lpe None pmf 0.5 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 5 geometries, PrimitiveBreakdown { triangles: 10, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 10, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +geom 0: material #0 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:d922ac2ec48f4f97 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=2:d922ac2ec48f4f97 +geom 1: material #1 Signature { kind: "MaterialX", cutout: false, straight: false, boundary: false, emits: false, uv: true, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv Some(0) shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:23063c3980664227 camera=2:23063c3980664227 shadow=2:23063c3980664227 indirect=2:23063c3980664227 +geom 2: material #2 Signature { kind: "MaterialX", cutout: false, straight: false, boundary: false, emits: false, uv: true, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv Some(1) shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:380b2e0280de83db camera=2:380b2e0280de83db shadow=2:380b2e0280de83db indirect=2:380b2e0280de83db +geom 3: material #3 Signature { kind: "MaterialX", cutout: false, straight: false, boundary: false, emits: false, uv: true, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv Some(2) shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:2f3c5568e1dbd031 camera=2:2f3c5568e1dbd031 shadow=2:2f3c5568e1dbd031 indirect=2:2f3c5568e1dbd031 +geom 4: material #3 Signature { kind: "MaterialX", cutout: false, straight: false, boundary: false, emits: false, uv: true, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv Some(3) shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:fbc0ea070d0254d5 camera=2:fbc0ea070d0254d5 shadow=2:fbc0ea070d0254d5 indirect=2:fbc0ea070d0254d5 +provenance material /World/Looks/Ceramic: MaterialOrigin { slots: [3, 4], displaced: false } +provenance material /World/Looks/Lacquer: MaterialOrigin { slots: [1], displaced: false } +provenance material /World/Looks/Metal: MaterialOrigin { slots: [2], displaced: false } +provenance light /World/Key: LightOrigin { index: 0, geoms: 0..1 } +provenance light /World/Sky: LightOrigin { index: 1, geoms: 1..1 } +provenance geometry 0..1: /World/Key +provenance geometry 1..2: /World/LacquerBar +provenance geometry 2..3: /World/MetalBar +provenance geometry 3..4: /World/TileB +provenance geometry 4..5: /World/TileA +provenance mesh: MeshOrigin { geom_id: 1, slot: 0, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 2, slot: 1, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 3, slot: 2, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 4, slot: 3, baked: true, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 9086379455125602793, n_points: 4, n_indices: 4, n_uvs: Some(4), smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 1: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 17635173815764174797, n_points: 4, n_indices: 4, n_uvs: Some(4), smooth: false, material: 1 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 2: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 16866940305613015801, n_points: 4, n_indices: 4, n_uvs: Some(4), smooth: false, material: 2 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 3: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 2259531437156517646, n_points: 4, n_indices: 4, n_uvs: Some(4), smooth: false, material: 2 }), placements: 1, shared: false, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/World/ShotCam"), cameras: ["/World/ShotCam"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/World/ShotCam"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/materialx_basic_usda-5e3c6402db738e98-1.image b/crates/crust-core/tests/data/import_baselines/materialx_basic_usda-5e3c6402db738e98-1.image new file mode 100644 index 000000000..351e4c622 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/materialx_basic_usda-5e3c6402db738e98-1.image @@ -0,0 +1 @@ +640x360 16spp clamp-off 4c3417d5ab1e2f66 diff --git a/crates/crust-core/tests/data/import_baselines/materialx_basic_usda-605f278bcaf83bcb-1.digest b/crates/crust-core/tests/data/import_baselines/materialx_basic_usda-605f278bcaf83bcb-1.digest new file mode 100644 index 000000000..a0a0361a0 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/materialx_basic_usda-605f278bcaf83bcb-1.digest @@ -0,0 +1,42 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/World/ShotCam") +camera: Camera { origin: Vec3A(0.0, 0.4, 8.5), lower_left_corner: Vec3A(-3.0600004, -1.3212503, 0.0), horizontal: Vec3A(6.120001, 0.0, 0.0), vertical: Vec3A(0.0, 3.4425006, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: Some("/Render/settings") +settings: RenderSettings { samples_per_pixel: 64, max_depth: 8, width: 640, height: 360, region: PixelRect { x0: 0, y0: 0, x1: 640, y1: 360 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 50.0, aperture: [36.0, 15.2908], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 8.5 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/materialx_basic.usda"], invisible_overrides: Some(0) } +layer: $DIR/materialx_basic.usda +warning: Warning { code: AssetUnsupportedByHost, kind: Skipped, count: 3, prims: [], message: "Asset loader does not decode UV textures: $DIR/textures/mtlx_mask.png ignored — the input falls back to its constant value." } +lights: 2 +light 0: area name Some("/World/Key") lpe None pmf 0.5 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 1: dome name Some("/World/Sky") lpe None pmf 0.5 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 5 geometries, PrimitiveBreakdown { triangles: 10, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 10, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +geom 0: material #0 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:d922ac2ec48f4f97 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=2:d922ac2ec48f4f97 +geom 1: material #1 Signature { kind: "MaterialX", cutout: false, straight: false, boundary: false, emits: false, uv: true, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv Some(0) shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:23063c3980664227 camera=2:23063c3980664227 shadow=2:23063c3980664227 indirect=2:23063c3980664227 +geom 2: material #2 Signature { kind: "MaterialX", cutout: false, straight: false, boundary: false, emits: false, uv: true, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv Some(1) shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:380b2e0280de83db camera=2:380b2e0280de83db shadow=2:380b2e0280de83db indirect=2:380b2e0280de83db +geom 3: material #3 Signature { kind: "MaterialX", cutout: false, straight: false, boundary: false, emits: false, uv: true, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv Some(2) shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:2f3c5568e1dbd031 camera=2:2f3c5568e1dbd031 shadow=2:2f3c5568e1dbd031 indirect=2:2f3c5568e1dbd031 +geom 4: material #3 Signature { kind: "MaterialX", cutout: false, straight: false, boundary: false, emits: false, uv: true, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv Some(3) shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:fbc0ea070d0254d5 camera=2:fbc0ea070d0254d5 shadow=2:fbc0ea070d0254d5 indirect=2:fbc0ea070d0254d5 +provenance material /World/Looks/Ceramic: MaterialOrigin { slots: [3, 4], displaced: false } +provenance material /World/Looks/Lacquer: MaterialOrigin { slots: [1], displaced: false } +provenance material /World/Looks/Metal: MaterialOrigin { slots: [2], displaced: false } +provenance light /World/Key: LightOrigin { index: 0, geoms: 0..1 } +provenance light /World/Sky: LightOrigin { index: 1, geoms: 1..1 } +provenance geometry 0..1: /World/Key +provenance geometry 1..2: /World/LacquerBar +provenance geometry 2..3: /World/MetalBar +provenance geometry 3..4: /World/TileB +provenance geometry 4..5: /World/TileA +provenance mesh: MeshOrigin { geom_id: 1, slot: 0, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 2, slot: 1, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 3, slot: 2, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 4, slot: 3, baked: true, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 9086379455125602793, n_points: 4, n_indices: 4, n_uvs: Some(4), smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 1: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 17635173815764174797, n_points: 4, n_indices: 4, n_uvs: Some(4), smooth: false, material: 1 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 2: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 16866940305613015801, n_points: 4, n_indices: 4, n_uvs: Some(4), smooth: false, material: 2 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 3: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 2259531437156517646, n_points: 4, n_indices: 4, n_uvs: Some(4), smooth: false, material: 2 }), placements: 1, shared: false, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/World/ShotCam"), cameras: ["/World/ShotCam"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/World/ShotCam"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/materialx_basic_usda-605f278bcaf83bcb-1.image b/crates/crust-core/tests/data/import_baselines/materialx_basic_usda-605f278bcaf83bcb-1.image new file mode 100644 index 000000000..351e4c622 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/materialx_basic_usda-605f278bcaf83bcb-1.image @@ -0,0 +1 @@ +640x360 16spp clamp-off 4c3417d5ab1e2f66 diff --git a/crates/crust-core/tests/data/import_baselines/materialx_basic_usda-7efe0aff05c6d47a-1.digest b/crates/crust-core/tests/data/import_baselines/materialx_basic_usda-7efe0aff05c6d47a-1.digest new file mode 100644 index 000000000..32abff8e4 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/materialx_basic_usda-7efe0aff05c6d47a-1.digest @@ -0,0 +1,41 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/World/ShotCam") +camera: Camera { origin: Vec3A(0.0, 0.4, 8.5), lower_left_corner: Vec3A(-3.0600004, -1.3212503, 0.0), horizontal: Vec3A(6.120001, 0.0, 0.0), vertical: Vec3A(0.0, 3.4425006, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: Some("/Render/settings") +settings: RenderSettings { samples_per_pixel: 64, max_depth: 8, width: 640, height: 360, region: PixelRect { x0: 0, y0: 0, x1: 640, y1: 360 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 50.0, aperture: [36.0, 15.2908], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 8.5 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/materialx_basic.usda"], invisible_overrides: Some(0) } +layer: $DIR/materialx_basic.usda +lights: 2 +light 0: area name Some("/World/Key") lpe None pmf 0.5 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 1: dome name Some("/World/Sky") lpe None pmf 0.5 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 5 geometries, PrimitiveBreakdown { triangles: 10, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 10, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +geom 0: material #0 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:d922ac2ec48f4f97 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=2:d922ac2ec48f4f97 +geom 1: material #1 Signature { kind: "MaterialX", cutout: false, straight: false, boundary: false, emits: false, uv: true, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv Some(0) shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:23063c3980664227 camera=2:23063c3980664227 shadow=2:23063c3980664227 indirect=2:23063c3980664227 +geom 2: material #2 Signature { kind: "MaterialX", cutout: false, straight: false, boundary: false, emits: false, uv: true, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv Some(1) shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:380b2e0280de83db camera=2:380b2e0280de83db shadow=2:380b2e0280de83db indirect=2:380b2e0280de83db +geom 3: material #3 Signature { kind: "MaterialX", cutout: false, straight: false, boundary: false, emits: false, uv: true, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv Some(2) shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:2f3c5568e1dbd031 camera=2:2f3c5568e1dbd031 shadow=2:2f3c5568e1dbd031 indirect=2:2f3c5568e1dbd031 +geom 4: material #3 Signature { kind: "MaterialX", cutout: false, straight: false, boundary: false, emits: false, uv: true, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv Some(3) shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:fbc0ea070d0254d5 camera=2:fbc0ea070d0254d5 shadow=2:fbc0ea070d0254d5 indirect=2:fbc0ea070d0254d5 +provenance material /World/Looks/Ceramic: MaterialOrigin { slots: [3, 4], displaced: false } +provenance material /World/Looks/Lacquer: MaterialOrigin { slots: [1], displaced: false } +provenance material /World/Looks/Metal: MaterialOrigin { slots: [2], displaced: false } +provenance light /World/Key: LightOrigin { index: 0, geoms: 0..1 } +provenance light /World/Sky: LightOrigin { index: 1, geoms: 1..1 } +provenance geometry 0..1: /World/Key +provenance geometry 1..2: /World/LacquerBar +provenance geometry 2..3: /World/MetalBar +provenance geometry 3..4: /World/TileB +provenance geometry 4..5: /World/TileA +provenance mesh: MeshOrigin { geom_id: 1, slot: 0, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 2, slot: 1, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 3, slot: 2, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 4, slot: 3, baked: true, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 9086379455125602793, n_points: 4, n_indices: 4, n_uvs: Some(4), smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 1: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 17635173815764174797, n_points: 4, n_indices: 4, n_uvs: Some(4), smooth: false, material: 1 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 2: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 16866940305613015801, n_points: 4, n_indices: 4, n_uvs: Some(4), smooth: false, material: 2 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 3: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 2259531437156517646, n_points: 4, n_indices: 4, n_uvs: Some(4), smooth: false, material: 2 }), placements: 1, shared: false, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: true, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/World/ShotCam"), cameras: ["/World/ShotCam"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/World/ShotCam"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/materialx_basic_usda-7efe0aff05c6d47a-1.image b/crates/crust-core/tests/data/import_baselines/materialx_basic_usda-7efe0aff05c6d47a-1.image new file mode 100644 index 000000000..5c3676676 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/materialx_basic_usda-7efe0aff05c6d47a-1.image @@ -0,0 +1 @@ +640x360 16spp clamp-off 209246aff562e5bb diff --git a/crates/crust-core/tests/data/import_baselines/materialx_basic_usda-ee87ad7ab34333f5-1.digest b/crates/crust-core/tests/data/import_baselines/materialx_basic_usda-ee87ad7ab34333f5-1.digest new file mode 100644 index 000000000..a0a0361a0 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/materialx_basic_usda-ee87ad7ab34333f5-1.digest @@ -0,0 +1,42 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/World/ShotCam") +camera: Camera { origin: Vec3A(0.0, 0.4, 8.5), lower_left_corner: Vec3A(-3.0600004, -1.3212503, 0.0), horizontal: Vec3A(6.120001, 0.0, 0.0), vertical: Vec3A(0.0, 3.4425006, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: Some("/Render/settings") +settings: RenderSettings { samples_per_pixel: 64, max_depth: 8, width: 640, height: 360, region: PixelRect { x0: 0, y0: 0, x1: 640, y1: 360 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 50.0, aperture: [36.0, 15.2908], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 8.5 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/materialx_basic.usda"], invisible_overrides: Some(0) } +layer: $DIR/materialx_basic.usda +warning: Warning { code: AssetUnsupportedByHost, kind: Skipped, count: 3, prims: [], message: "Asset loader does not decode UV textures: $DIR/textures/mtlx_mask.png ignored — the input falls back to its constant value." } +lights: 2 +light 0: area name Some("/World/Key") lpe None pmf 0.5 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 1: dome name Some("/World/Sky") lpe None pmf 0.5 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 5 geometries, PrimitiveBreakdown { triangles: 10, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 10, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +geom 0: material #0 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:d922ac2ec48f4f97 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=2:d922ac2ec48f4f97 +geom 1: material #1 Signature { kind: "MaterialX", cutout: false, straight: false, boundary: false, emits: false, uv: true, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv Some(0) shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:23063c3980664227 camera=2:23063c3980664227 shadow=2:23063c3980664227 indirect=2:23063c3980664227 +geom 2: material #2 Signature { kind: "MaterialX", cutout: false, straight: false, boundary: false, emits: false, uv: true, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv Some(1) shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:380b2e0280de83db camera=2:380b2e0280de83db shadow=2:380b2e0280de83db indirect=2:380b2e0280de83db +geom 3: material #3 Signature { kind: "MaterialX", cutout: false, straight: false, boundary: false, emits: false, uv: true, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv Some(2) shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:2f3c5568e1dbd031 camera=2:2f3c5568e1dbd031 shadow=2:2f3c5568e1dbd031 indirect=2:2f3c5568e1dbd031 +geom 4: material #3 Signature { kind: "MaterialX", cutout: false, straight: false, boundary: false, emits: false, uv: true, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv Some(3) shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:fbc0ea070d0254d5 camera=2:fbc0ea070d0254d5 shadow=2:fbc0ea070d0254d5 indirect=2:fbc0ea070d0254d5 +provenance material /World/Looks/Ceramic: MaterialOrigin { slots: [3, 4], displaced: false } +provenance material /World/Looks/Lacquer: MaterialOrigin { slots: [1], displaced: false } +provenance material /World/Looks/Metal: MaterialOrigin { slots: [2], displaced: false } +provenance light /World/Key: LightOrigin { index: 0, geoms: 0..1 } +provenance light /World/Sky: LightOrigin { index: 1, geoms: 1..1 } +provenance geometry 0..1: /World/Key +provenance geometry 1..2: /World/LacquerBar +provenance geometry 2..3: /World/MetalBar +provenance geometry 3..4: /World/TileB +provenance geometry 4..5: /World/TileA +provenance mesh: MeshOrigin { geom_id: 1, slot: 0, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 2, slot: 1, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 3, slot: 2, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 4, slot: 3, baked: true, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 9086379455125602793, n_points: 4, n_indices: 4, n_uvs: Some(4), smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 1: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 17635173815764174797, n_points: 4, n_indices: 4, n_uvs: Some(4), smooth: false, material: 1 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 2: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 16866940305613015801, n_points: 4, n_indices: 4, n_uvs: Some(4), smooth: false, material: 2 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 3: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 2259531437156517646, n_points: 4, n_indices: 4, n_uvs: Some(4), smooth: false, material: 2 }), placements: 1, shared: false, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/World/ShotCam"), cameras: ["/World/ShotCam"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/World/ShotCam"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/materialx_basic_usda-ee87ad7ab34333f5-1.image b/crates/crust-core/tests/data/import_baselines/materialx_basic_usda-ee87ad7ab34333f5-1.image new file mode 100644 index 000000000..351e4c622 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/materialx_basic_usda-ee87ad7ab34333f5-1.image @@ -0,0 +1 @@ +640x360 16spp clamp-off 4c3417d5ab1e2f66 diff --git a/crates/crust-core/tests/data/import_baselines/materialx_cutout_usda-38de4138760ea72d-1.digest b/crates/crust-core/tests/data/import_baselines/materialx_cutout_usda-38de4138760ea72d-1.digest new file mode 100644 index 000000000..2fd6bd900 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/materialx_cutout_usda-38de4138760ea72d-1.digest @@ -0,0 +1,39 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/World/ShotCam") +camera: Camera { origin: Vec3A(0.0, 1.2, 7.0), lower_left_corner: Vec3A(-4.5, -1.570276, -2.8685398), horizontal: Vec3A(9.0, -0.0, 0.0), vertical: Vec3A(0.0, 4.493833, -0.23551181), u: Vec3A(1.0, -0.0, 0.0), v: Vec3A(0.0, 0.99862957, -0.05233596), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: Some("/Render/settings") +settings: RenderSettings { samples_per_pixel: 64, max_depth: 12, width: 640, height: 320, region: PixelRect { x0: 0, y0: 0, x1: 640, y1: 320 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 40.0, aperture: [36.0, 15.2908], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 10.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/materialx_cutout.usda"], invisible_overrides: Some(0) } +layer: $DIR/materialx_cutout.usda +warning: Warning { code: AssetUnsupportedByHost, kind: Skipped, count: 1, prims: [], message: "No asset loader: environment map $DIR/sky_env.exr ignored — the dome falls back to its uniform colour. Use Scene::from_usd_with_assets to supply one." } +lights: 2 +light 0: area name Some("/World/Key") lpe None pmf 0.5 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 1: dome name Some("/World/Sky") lpe None pmf 0.5 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 5 geometries, PrimitiveBreakdown { triangles: 4, spheres: 3, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 4, spheres: 3, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +geom 0: material #0 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:09acf82f9592b955 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=1:09acf82f9592b955 +geom 1: material #1 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:58d360c7905fa0c5 camera=2:58d360c7905fa0c5 shadow=2:58d360c7905fa0c5 indirect=2:58d360c7905fa0c5 +geom 2: material #2 Signature { kind: "MaterialX", cutout: false, straight: false, boundary: false, emits: false, uv: true, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:741514c546e5584d camera=1:741514c546e5584d shadow=1:741514c546e5584d indirect=1:741514c546e5584d +geom 3: material #3 Signature { kind: "MaterialX", cutout: true, straight: false, boundary: false, emits: false, uv: true, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:259535af9ea7b96d camera=1:259535af9ea7b96d shadow=1:259535af9ea7b96d indirect=1:259535af9ea7b96d +geom 4: material #4 Signature { kind: "MaterialX", cutout: true, straight: false, boundary: false, emits: false, uv: true, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv Some(0) shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:13faf23073bbee99 camera=2:13faf23073bbee99 shadow=2:13faf23073bbee99 indirect=2:13faf23073bbee99 +provenance material /World/Looks/Floor: MaterialOrigin { slots: [1], displaced: false } +provenance material /World/Looks/GltfCard: MaterialOrigin { slots: [4], displaced: false } +provenance material /World/Looks/OpenPbrGhost: MaterialOrigin { slots: [3], displaced: false } +provenance material /World/Looks/StandardBrushed: MaterialOrigin { slots: [2], displaced: false } +provenance light /World/Key: LightOrigin { index: 0, geoms: 0..1 } +provenance light /World/Sky: LightOrigin { index: 1, geoms: 1..1 } +provenance geometry 0..1: /World/Key +provenance geometry 1..2: /World/Floor +provenance geometry 2..3: /World/StandardBrushed +provenance geometry 3..4: /World/OpenPbrGhost +provenance geometry 4..5: /World/GltfCard +provenance mesh: MeshOrigin { geom_id: 1, slot: 0, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 4, slot: 1, baked: true, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 6334356113930313994, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 1: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 8640034384489181113, n_points: 4, n_indices: 4, n_uvs: Some(4), smooth: false, material: 1 }), placements: 1, shared: false, displaced: false } +provenance spheres: [2, 3] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/World/ShotCam"), cameras: ["/World/ShotCam"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/World/ShotCam"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/materialx_cutout_usda-38de4138760ea72d-1.image b/crates/crust-core/tests/data/import_baselines/materialx_cutout_usda-38de4138760ea72d-1.image new file mode 100644 index 000000000..f6cdffe86 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/materialx_cutout_usda-38de4138760ea72d-1.image @@ -0,0 +1 @@ +640x320 16spp clamp-off 72ee04eb903718f6 diff --git a/crates/crust-core/tests/data/import_baselines/materialx_cutout_usda-38de4138760ea72d-2.digest b/crates/crust-core/tests/data/import_baselines/materialx_cutout_usda-38de4138760ea72d-2.digest new file mode 100644 index 000000000..2fd6bd900 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/materialx_cutout_usda-38de4138760ea72d-2.digest @@ -0,0 +1,39 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/World/ShotCam") +camera: Camera { origin: Vec3A(0.0, 1.2, 7.0), lower_left_corner: Vec3A(-4.5, -1.570276, -2.8685398), horizontal: Vec3A(9.0, -0.0, 0.0), vertical: Vec3A(0.0, 4.493833, -0.23551181), u: Vec3A(1.0, -0.0, 0.0), v: Vec3A(0.0, 0.99862957, -0.05233596), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: Some("/Render/settings") +settings: RenderSettings { samples_per_pixel: 64, max_depth: 12, width: 640, height: 320, region: PixelRect { x0: 0, y0: 0, x1: 640, y1: 320 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 40.0, aperture: [36.0, 15.2908], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 10.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/materialx_cutout.usda"], invisible_overrides: Some(0) } +layer: $DIR/materialx_cutout.usda +warning: Warning { code: AssetUnsupportedByHost, kind: Skipped, count: 1, prims: [], message: "No asset loader: environment map $DIR/sky_env.exr ignored — the dome falls back to its uniform colour. Use Scene::from_usd_with_assets to supply one." } +lights: 2 +light 0: area name Some("/World/Key") lpe None pmf 0.5 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 1: dome name Some("/World/Sky") lpe None pmf 0.5 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 5 geometries, PrimitiveBreakdown { triangles: 4, spheres: 3, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 4, spheres: 3, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +geom 0: material #0 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:09acf82f9592b955 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=1:09acf82f9592b955 +geom 1: material #1 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:58d360c7905fa0c5 camera=2:58d360c7905fa0c5 shadow=2:58d360c7905fa0c5 indirect=2:58d360c7905fa0c5 +geom 2: material #2 Signature { kind: "MaterialX", cutout: false, straight: false, boundary: false, emits: false, uv: true, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:741514c546e5584d camera=1:741514c546e5584d shadow=1:741514c546e5584d indirect=1:741514c546e5584d +geom 3: material #3 Signature { kind: "MaterialX", cutout: true, straight: false, boundary: false, emits: false, uv: true, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:259535af9ea7b96d camera=1:259535af9ea7b96d shadow=1:259535af9ea7b96d indirect=1:259535af9ea7b96d +geom 4: material #4 Signature { kind: "MaterialX", cutout: true, straight: false, boundary: false, emits: false, uv: true, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv Some(0) shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:13faf23073bbee99 camera=2:13faf23073bbee99 shadow=2:13faf23073bbee99 indirect=2:13faf23073bbee99 +provenance material /World/Looks/Floor: MaterialOrigin { slots: [1], displaced: false } +provenance material /World/Looks/GltfCard: MaterialOrigin { slots: [4], displaced: false } +provenance material /World/Looks/OpenPbrGhost: MaterialOrigin { slots: [3], displaced: false } +provenance material /World/Looks/StandardBrushed: MaterialOrigin { slots: [2], displaced: false } +provenance light /World/Key: LightOrigin { index: 0, geoms: 0..1 } +provenance light /World/Sky: LightOrigin { index: 1, geoms: 1..1 } +provenance geometry 0..1: /World/Key +provenance geometry 1..2: /World/Floor +provenance geometry 2..3: /World/StandardBrushed +provenance geometry 3..4: /World/OpenPbrGhost +provenance geometry 4..5: /World/GltfCard +provenance mesh: MeshOrigin { geom_id: 1, slot: 0, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 4, slot: 1, baked: true, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 6334356113930313994, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 1: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 8640034384489181113, n_points: 4, n_indices: 4, n_uvs: Some(4), smooth: false, material: 1 }), placements: 1, shared: false, displaced: false } +provenance spheres: [2, 3] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/World/ShotCam"), cameras: ["/World/ShotCam"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/World/ShotCam"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/materialx_cutout_usda-38de4138760ea72d-2.image b/crates/crust-core/tests/data/import_baselines/materialx_cutout_usda-38de4138760ea72d-2.image new file mode 100644 index 000000000..f6cdffe86 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/materialx_cutout_usda-38de4138760ea72d-2.image @@ -0,0 +1 @@ +640x320 16spp clamp-off 72ee04eb903718f6 diff --git a/crates/crust-core/tests/data/import_baselines/materialx_cutout_usda-ae65df7de0c507fa-1.digest b/crates/crust-core/tests/data/import_baselines/materialx_cutout_usda-ae65df7de0c507fa-1.digest new file mode 100644 index 000000000..4ac9458b2 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/materialx_cutout_usda-ae65df7de0c507fa-1.digest @@ -0,0 +1,38 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/World/ShotCam") +camera: Camera { origin: Vec3A(0.0, 1.2, 7.0), lower_left_corner: Vec3A(-4.5, -1.570276, -2.8685398), horizontal: Vec3A(9.0, -0.0, 0.0), vertical: Vec3A(0.0, 4.493833, -0.23551181), u: Vec3A(1.0, -0.0, 0.0), v: Vec3A(0.0, 0.99862957, -0.05233596), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: Some("/Render/settings") +settings: RenderSettings { samples_per_pixel: 64, max_depth: 12, width: 640, height: 320, region: PixelRect { x0: 0, y0: 0, x1: 640, y1: 320 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 40.0, aperture: [36.0, 15.2908], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 10.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/materialx_cutout.usda"], invisible_overrides: Some(0) } +layer: $DIR/materialx_cutout.usda +lights: 2 +light 0: area name Some("/World/Key") lpe None pmf 0.5 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 1: dome name Some("/World/Sky") lpe None pmf 0.5 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 5 geometries, PrimitiveBreakdown { triangles: 4, spheres: 3, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 4, spheres: 3, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +geom 0: material #0 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:09acf82f9592b955 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=1:09acf82f9592b955 +geom 1: material #1 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:58d360c7905fa0c5 camera=2:58d360c7905fa0c5 shadow=2:58d360c7905fa0c5 indirect=2:58d360c7905fa0c5 +geom 2: material #2 Signature { kind: "MaterialX", cutout: false, straight: false, boundary: false, emits: false, uv: true, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:741514c546e5584d camera=1:741514c546e5584d shadow=1:741514c546e5584d indirect=1:741514c546e5584d +geom 3: material #3 Signature { kind: "MaterialX", cutout: true, straight: false, boundary: false, emits: false, uv: true, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:259535af9ea7b96d camera=1:259535af9ea7b96d shadow=1:259535af9ea7b96d indirect=1:259535af9ea7b96d +geom 4: material #4 Signature { kind: "MaterialX", cutout: true, straight: false, boundary: false, emits: false, uv: true, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv Some(0) shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:13faf23073bbee99 camera=2:13faf23073bbee99 shadow=2:13faf23073bbee99 indirect=2:13faf23073bbee99 +provenance material /World/Looks/Floor: MaterialOrigin { slots: [1], displaced: false } +provenance material /World/Looks/GltfCard: MaterialOrigin { slots: [4], displaced: false } +provenance material /World/Looks/OpenPbrGhost: MaterialOrigin { slots: [3], displaced: false } +provenance material /World/Looks/StandardBrushed: MaterialOrigin { slots: [2], displaced: false } +provenance light /World/Key: LightOrigin { index: 0, geoms: 0..1 } +provenance light /World/Sky: LightOrigin { index: 1, geoms: 1..1 } +provenance geometry 0..1: /World/Key +provenance geometry 1..2: /World/Floor +provenance geometry 2..3: /World/StandardBrushed +provenance geometry 3..4: /World/OpenPbrGhost +provenance geometry 4..5: /World/GltfCard +provenance mesh: MeshOrigin { geom_id: 1, slot: 0, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 4, slot: 1, baked: true, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 6334356113930313994, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 1: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 8640034384489181113, n_points: 4, n_indices: 4, n_uvs: Some(4), smooth: false, material: 1 }), placements: 1, shared: false, displaced: false } +provenance spheres: [2, 3] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: true, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/World/ShotCam"), cameras: ["/World/ShotCam"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/World/ShotCam"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/materialx_cutout_usda-ae65df7de0c507fa-1.image b/crates/crust-core/tests/data/import_baselines/materialx_cutout_usda-ae65df7de0c507fa-1.image new file mode 100644 index 000000000..ae214b496 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/materialx_cutout_usda-ae65df7de0c507fa-1.image @@ -0,0 +1 @@ +640x320 16spp clamp-off f2f8d62c99d00f96 diff --git a/crates/crust-core/tests/data/import_baselines/materialx_emissive_usda-37e54478999af2b3-1.digest b/crates/crust-core/tests/data/import_baselines/materialx_emissive_usda-37e54478999af2b3-1.digest new file mode 100644 index 000000000..b82a135f5 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/materialx_emissive_usda-37e54478999af2b3-1.digest @@ -0,0 +1,36 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/World/ShotCam") +camera: Camera { origin: Vec3A(0.0, 0.1, 8.5), lower_left_corner: Vec3A(-3.0600004, -1.6212503, 0.0), horizontal: Vec3A(6.120001, 0.0, 0.0), vertical: Vec3A(0.0, 3.4425006, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: Some("/Render/settings") +settings: RenderSettings { samples_per_pixel: 256, max_depth: 8, width: 480, height: 270, region: PixelRect { x0: 0, y0: 0, x1: 480, y1: 270 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 50.0, aperture: [36.0, 15.2908], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 8.5 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/materialx_emissive.usda"], invisible_overrides: Some(0) } +layer: $DIR/materialx_emissive.usda +warning: Warning { code: AssetUnsupportedByHost, kind: Skipped, count: 1, prims: [], message: "Asset loader does not decode UV textures: $DIR/textures/mtlx_emission.hdr ignored — the input falls back to its constant value." } +lights: 0 +volumes: 0 +world: 4 geometries, PrimitiveBreakdown { triangles: 8, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 8, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:9c4830a587543e65 camera=2:9c4830a587543e65 shadow=2:9c4830a587543e65 indirect=2:9c4830a587543e65 +geom 1: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:5aae1978ab8dd265 camera=2:5aae1978ab8dd265 shadow=2:5aae1978ab8dd265 indirect=2:5aae1978ab8dd265 +geom 2: material #1 Signature { kind: "MaterialX", cutout: false, straight: false, boundary: false, emits: true, uv: true, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv Some(0) shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:b587000d709e76b0 camera=2:b587000d709e76b0 shadow=2:b587000d709e76b0 indirect=2:b587000d709e76b0 +geom 3: material #2 Signature { kind: "MaterialX", cutout: false, straight: false, boundary: false, emits: true, uv: true, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv Some(1) shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:0d7d73d5e0563034 camera=2:0d7d73d5e0563034 shadow=2:0d7d73d5e0563034 indirect=2:0d7d73d5e0563034 +provenance material /World/Looks/EmitterConstant: MaterialOrigin { slots: [3], displaced: false } +provenance material /World/Looks/EmitterTextured: MaterialOrigin { slots: [2], displaced: false } +provenance material /World/Looks/Floor: MaterialOrigin { slots: [0, 1], displaced: false } +provenance geometry 0..1: /World/Floor +provenance geometry 1..2: /World/Backdrop +provenance geometry 2..3: /World/HdrPanel +provenance geometry 3..4: /World/LampPanel +provenance mesh: MeshOrigin { geom_id: 0, slot: 0, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 1, slot: 1, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 2, slot: 2, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 3, slot: 3, baked: true, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 8314674973970688493, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 1: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 11246051425605312490, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 2: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 14590333405597940504, n_points: 4, n_indices: 4, n_uvs: Some(4), smooth: false, material: 1 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 3: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 17361204448718928378, n_points: 4, n_indices: 4, n_uvs: Some(4), smooth: false, material: 2 }), placements: 1, shared: false, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/World/ShotCam"), cameras: ["/World/ShotCam"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/World/ShotCam"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/materialx_emissive_usda-37e54478999af2b3-1.image b/crates/crust-core/tests/data/import_baselines/materialx_emissive_usda-37e54478999af2b3-1.image new file mode 100644 index 000000000..7aa8db895 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/materialx_emissive_usda-37e54478999af2b3-1.image @@ -0,0 +1 @@ +480x270 16spp clamp-off e9284a2563f7fde7 diff --git a/crates/crust-core/tests/data/import_baselines/materialx_emissive_usda-37e54478999af2b3-2.digest b/crates/crust-core/tests/data/import_baselines/materialx_emissive_usda-37e54478999af2b3-2.digest new file mode 100644 index 000000000..b82a135f5 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/materialx_emissive_usda-37e54478999af2b3-2.digest @@ -0,0 +1,36 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/World/ShotCam") +camera: Camera { origin: Vec3A(0.0, 0.1, 8.5), lower_left_corner: Vec3A(-3.0600004, -1.6212503, 0.0), horizontal: Vec3A(6.120001, 0.0, 0.0), vertical: Vec3A(0.0, 3.4425006, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: Some("/Render/settings") +settings: RenderSettings { samples_per_pixel: 256, max_depth: 8, width: 480, height: 270, region: PixelRect { x0: 0, y0: 0, x1: 480, y1: 270 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 50.0, aperture: [36.0, 15.2908], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 8.5 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/materialx_emissive.usda"], invisible_overrides: Some(0) } +layer: $DIR/materialx_emissive.usda +warning: Warning { code: AssetUnsupportedByHost, kind: Skipped, count: 1, prims: [], message: "Asset loader does not decode UV textures: $DIR/textures/mtlx_emission.hdr ignored — the input falls back to its constant value." } +lights: 0 +volumes: 0 +world: 4 geometries, PrimitiveBreakdown { triangles: 8, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 8, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:9c4830a587543e65 camera=2:9c4830a587543e65 shadow=2:9c4830a587543e65 indirect=2:9c4830a587543e65 +geom 1: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:5aae1978ab8dd265 camera=2:5aae1978ab8dd265 shadow=2:5aae1978ab8dd265 indirect=2:5aae1978ab8dd265 +geom 2: material #1 Signature { kind: "MaterialX", cutout: false, straight: false, boundary: false, emits: true, uv: true, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv Some(0) shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:b587000d709e76b0 camera=2:b587000d709e76b0 shadow=2:b587000d709e76b0 indirect=2:b587000d709e76b0 +geom 3: material #2 Signature { kind: "MaterialX", cutout: false, straight: false, boundary: false, emits: true, uv: true, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv Some(1) shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:0d7d73d5e0563034 camera=2:0d7d73d5e0563034 shadow=2:0d7d73d5e0563034 indirect=2:0d7d73d5e0563034 +provenance material /World/Looks/EmitterConstant: MaterialOrigin { slots: [3], displaced: false } +provenance material /World/Looks/EmitterTextured: MaterialOrigin { slots: [2], displaced: false } +provenance material /World/Looks/Floor: MaterialOrigin { slots: [0, 1], displaced: false } +provenance geometry 0..1: /World/Floor +provenance geometry 1..2: /World/Backdrop +provenance geometry 2..3: /World/HdrPanel +provenance geometry 3..4: /World/LampPanel +provenance mesh: MeshOrigin { geom_id: 0, slot: 0, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 1, slot: 1, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 2, slot: 2, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 3, slot: 3, baked: true, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 8314674973970688493, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 1: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 11246051425605312490, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 2: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 14590333405597940504, n_points: 4, n_indices: 4, n_uvs: Some(4), smooth: false, material: 1 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 3: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 17361204448718928378, n_points: 4, n_indices: 4, n_uvs: Some(4), smooth: false, material: 2 }), placements: 1, shared: false, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/World/ShotCam"), cameras: ["/World/ShotCam"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/World/ShotCam"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/materialx_emissive_usda-37e54478999af2b3-2.image b/crates/crust-core/tests/data/import_baselines/materialx_emissive_usda-37e54478999af2b3-2.image new file mode 100644 index 000000000..7aa8db895 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/materialx_emissive_usda-37e54478999af2b3-2.image @@ -0,0 +1 @@ +480x270 16spp clamp-off e9284a2563f7fde7 diff --git a/crates/crust-core/tests/data/import_baselines/materialx_emissive_usda-3c55abed0c2329af-1.digest b/crates/crust-core/tests/data/import_baselines/materialx_emissive_usda-3c55abed0c2329af-1.digest new file mode 100644 index 000000000..486bf086b --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/materialx_emissive_usda-3c55abed0c2329af-1.digest @@ -0,0 +1,35 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/World/ShotCam") +camera: Camera { origin: Vec3A(0.0, 0.1, 8.5), lower_left_corner: Vec3A(-3.0600004, -1.6212503, 0.0), horizontal: Vec3A(6.120001, 0.0, 0.0), vertical: Vec3A(0.0, 3.4425006, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: Some("/Render/settings") +settings: RenderSettings { samples_per_pixel: 256, max_depth: 8, width: 480, height: 270, region: PixelRect { x0: 0, y0: 0, x1: 480, y1: 270 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 50.0, aperture: [36.0, 15.2908], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 8.5 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/materialx_emissive.usda"], invisible_overrides: Some(0) } +layer: $DIR/materialx_emissive.usda +lights: 0 +volumes: 0 +world: 4 geometries, PrimitiveBreakdown { triangles: 8, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 8, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:9c4830a587543e65 camera=2:9c4830a587543e65 shadow=2:9c4830a587543e65 indirect=2:9c4830a587543e65 +geom 1: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:5aae1978ab8dd265 camera=2:5aae1978ab8dd265 shadow=2:5aae1978ab8dd265 indirect=2:5aae1978ab8dd265 +geom 2: material #1 Signature { kind: "MaterialX", cutout: false, straight: false, boundary: false, emits: true, uv: true, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv Some(0) shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:b587000d709e76b0 camera=2:b587000d709e76b0 shadow=2:b587000d709e76b0 indirect=2:b587000d709e76b0 +geom 3: material #2 Signature { kind: "MaterialX", cutout: false, straight: false, boundary: false, emits: true, uv: true, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv Some(1) shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:0d7d73d5e0563034 camera=2:0d7d73d5e0563034 shadow=2:0d7d73d5e0563034 indirect=2:0d7d73d5e0563034 +provenance material /World/Looks/EmitterConstant: MaterialOrigin { slots: [3], displaced: false } +provenance material /World/Looks/EmitterTextured: MaterialOrigin { slots: [2], displaced: false } +provenance material /World/Looks/Floor: MaterialOrigin { slots: [0, 1], displaced: false } +provenance geometry 0..1: /World/Floor +provenance geometry 1..2: /World/Backdrop +provenance geometry 2..3: /World/HdrPanel +provenance geometry 3..4: /World/LampPanel +provenance mesh: MeshOrigin { geom_id: 0, slot: 0, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 1, slot: 1, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 2, slot: 2, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 3, slot: 3, baked: true, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 8314674973970688493, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 1: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 11246051425605312490, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 2: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 14590333405597940504, n_points: 4, n_indices: 4, n_uvs: Some(4), smooth: false, material: 1 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 3: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 17361204448718928378, n_points: 4, n_indices: 4, n_uvs: Some(4), smooth: false, material: 2 }), placements: 1, shared: false, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: true, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/World/ShotCam"), cameras: ["/World/ShotCam"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/World/ShotCam"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/materialx_emissive_usda-3c55abed0c2329af-1.image b/crates/crust-core/tests/data/import_baselines/materialx_emissive_usda-3c55abed0c2329af-1.image new file mode 100644 index 000000000..88b6dad79 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/materialx_emissive_usda-3c55abed0c2329af-1.image @@ -0,0 +1 @@ +480x270 16spp clamp-off 5c86dbe9d51e7930 diff --git a/crates/crust-core/tests/data/import_baselines/materialx_emissive_usda-746e6884e4aa1a13-1.digest b/crates/crust-core/tests/data/import_baselines/materialx_emissive_usda-746e6884e4aa1a13-1.digest new file mode 100644 index 000000000..b82a135f5 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/materialx_emissive_usda-746e6884e4aa1a13-1.digest @@ -0,0 +1,36 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/World/ShotCam") +camera: Camera { origin: Vec3A(0.0, 0.1, 8.5), lower_left_corner: Vec3A(-3.0600004, -1.6212503, 0.0), horizontal: Vec3A(6.120001, 0.0, 0.0), vertical: Vec3A(0.0, 3.4425006, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: Some("/Render/settings") +settings: RenderSettings { samples_per_pixel: 256, max_depth: 8, width: 480, height: 270, region: PixelRect { x0: 0, y0: 0, x1: 480, y1: 270 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 50.0, aperture: [36.0, 15.2908], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 8.5 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/materialx_emissive.usda"], invisible_overrides: Some(0) } +layer: $DIR/materialx_emissive.usda +warning: Warning { code: AssetUnsupportedByHost, kind: Skipped, count: 1, prims: [], message: "Asset loader does not decode UV textures: $DIR/textures/mtlx_emission.hdr ignored — the input falls back to its constant value." } +lights: 0 +volumes: 0 +world: 4 geometries, PrimitiveBreakdown { triangles: 8, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 8, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:9c4830a587543e65 camera=2:9c4830a587543e65 shadow=2:9c4830a587543e65 indirect=2:9c4830a587543e65 +geom 1: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:5aae1978ab8dd265 camera=2:5aae1978ab8dd265 shadow=2:5aae1978ab8dd265 indirect=2:5aae1978ab8dd265 +geom 2: material #1 Signature { kind: "MaterialX", cutout: false, straight: false, boundary: false, emits: true, uv: true, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv Some(0) shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:b587000d709e76b0 camera=2:b587000d709e76b0 shadow=2:b587000d709e76b0 indirect=2:b587000d709e76b0 +geom 3: material #2 Signature { kind: "MaterialX", cutout: false, straight: false, boundary: false, emits: true, uv: true, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv Some(1) shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:0d7d73d5e0563034 camera=2:0d7d73d5e0563034 shadow=2:0d7d73d5e0563034 indirect=2:0d7d73d5e0563034 +provenance material /World/Looks/EmitterConstant: MaterialOrigin { slots: [3], displaced: false } +provenance material /World/Looks/EmitterTextured: MaterialOrigin { slots: [2], displaced: false } +provenance material /World/Looks/Floor: MaterialOrigin { slots: [0, 1], displaced: false } +provenance geometry 0..1: /World/Floor +provenance geometry 1..2: /World/Backdrop +provenance geometry 2..3: /World/HdrPanel +provenance geometry 3..4: /World/LampPanel +provenance mesh: MeshOrigin { geom_id: 0, slot: 0, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 1, slot: 1, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 2, slot: 2, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 3, slot: 3, baked: true, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 8314674973970688493, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 1: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 11246051425605312490, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 2: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 14590333405597940504, n_points: 4, n_indices: 4, n_uvs: Some(4), smooth: false, material: 1 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 3: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 17361204448718928378, n_points: 4, n_indices: 4, n_uvs: Some(4), smooth: false, material: 2 }), placements: 1, shared: false, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/World/ShotCam"), cameras: ["/World/ShotCam"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/World/ShotCam"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/materialx_emissive_usda-746e6884e4aa1a13-1.image b/crates/crust-core/tests/data/import_baselines/materialx_emissive_usda-746e6884e4aa1a13-1.image new file mode 100644 index 000000000..7aa8db895 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/materialx_emissive_usda-746e6884e4aa1a13-1.image @@ -0,0 +1 @@ +480x270 16spp clamp-off e9284a2563f7fde7 diff --git a/crates/crust-core/tests/data/import_baselines/materialx_emissive_usda-8dd82f7591e605f2-1.digest b/crates/crust-core/tests/data/import_baselines/materialx_emissive_usda-8dd82f7591e605f2-1.digest new file mode 100644 index 000000000..b82a135f5 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/materialx_emissive_usda-8dd82f7591e605f2-1.digest @@ -0,0 +1,36 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/World/ShotCam") +camera: Camera { origin: Vec3A(0.0, 0.1, 8.5), lower_left_corner: Vec3A(-3.0600004, -1.6212503, 0.0), horizontal: Vec3A(6.120001, 0.0, 0.0), vertical: Vec3A(0.0, 3.4425006, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: Some("/Render/settings") +settings: RenderSettings { samples_per_pixel: 256, max_depth: 8, width: 480, height: 270, region: PixelRect { x0: 0, y0: 0, x1: 480, y1: 270 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 50.0, aperture: [36.0, 15.2908], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 8.5 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/materialx_emissive.usda"], invisible_overrides: Some(0) } +layer: $DIR/materialx_emissive.usda +warning: Warning { code: AssetUnsupportedByHost, kind: Skipped, count: 1, prims: [], message: "Asset loader does not decode UV textures: $DIR/textures/mtlx_emission.hdr ignored — the input falls back to its constant value." } +lights: 0 +volumes: 0 +world: 4 geometries, PrimitiveBreakdown { triangles: 8, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 8, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:9c4830a587543e65 camera=2:9c4830a587543e65 shadow=2:9c4830a587543e65 indirect=2:9c4830a587543e65 +geom 1: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:5aae1978ab8dd265 camera=2:5aae1978ab8dd265 shadow=2:5aae1978ab8dd265 indirect=2:5aae1978ab8dd265 +geom 2: material #1 Signature { kind: "MaterialX", cutout: false, straight: false, boundary: false, emits: true, uv: true, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv Some(0) shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:b587000d709e76b0 camera=2:b587000d709e76b0 shadow=2:b587000d709e76b0 indirect=2:b587000d709e76b0 +geom 3: material #2 Signature { kind: "MaterialX", cutout: false, straight: false, boundary: false, emits: true, uv: true, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv Some(1) shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:0d7d73d5e0563034 camera=2:0d7d73d5e0563034 shadow=2:0d7d73d5e0563034 indirect=2:0d7d73d5e0563034 +provenance material /World/Looks/EmitterConstant: MaterialOrigin { slots: [3], displaced: false } +provenance material /World/Looks/EmitterTextured: MaterialOrigin { slots: [2], displaced: false } +provenance material /World/Looks/Floor: MaterialOrigin { slots: [0, 1], displaced: false } +provenance geometry 0..1: /World/Floor +provenance geometry 1..2: /World/Backdrop +provenance geometry 2..3: /World/HdrPanel +provenance geometry 3..4: /World/LampPanel +provenance mesh: MeshOrigin { geom_id: 0, slot: 0, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 1, slot: 1, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 2, slot: 2, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 3, slot: 3, baked: true, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 8314674973970688493, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 1: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 11246051425605312490, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 2: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 14590333405597940504, n_points: 4, n_indices: 4, n_uvs: Some(4), smooth: false, material: 1 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 3: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 17361204448718928378, n_points: 4, n_indices: 4, n_uvs: Some(4), smooth: false, material: 2 }), placements: 1, shared: false, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/World/ShotCam"), cameras: ["/World/ShotCam"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/World/ShotCam"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/materialx_emissive_usda-8dd82f7591e605f2-1.image b/crates/crust-core/tests/data/import_baselines/materialx_emissive_usda-8dd82f7591e605f2-1.image new file mode 100644 index 000000000..7aa8db895 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/materialx_emissive_usda-8dd82f7591e605f2-1.image @@ -0,0 +1 @@ +480x270 16spp clamp-off e9284a2563f7fde7 diff --git a/crates/crust-core/tests/data/import_baselines/materialx_lion_usda-a62e7b45a5b76dea-1.digest b/crates/crust-core/tests/data/import_baselines/materialx_lion_usda-a62e7b45a5b76dea-1.digest new file mode 100644 index 000000000..fce556b30 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/materialx_lion_usda-a62e7b45a5b76dea-1.digest @@ -0,0 +1,43 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/World/ShotCam") +camera: Camera { origin: Vec3A(0.3, -0.52, 0.3), lower_left_corner: Vec3A(-0.20956933, -0.17536479, -0.026081339), horizontal: Vec3A(0.4632069, 0.26878545, 3.990106e-9), vertical: Vec3A(-0.044039004, 0.07589388, 0.2881804), u: Vec3A(0.86492956, 0.5018934, 7.4505815e-9), v: Vec3A(-0.14619102, 0.25193584, 0.9566381), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: Some("/Render/settings") +settings: RenderSettings { samples_per_pixel: 128, max_depth: 12, width: 960, height: 540, region: PixelRect { x0: 0, y0: 0, x1: 960, y1: 540 }, min_samples_per_pixel: 32, variance_threshold: 0.02, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 42.0, aperture: [36.0, 15.2908], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 0.6248 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/materialx_lion.usda"], invisible_overrides: Some(0) } +layer: $DIR/materialx_lion.usda +layer: /home/philippe.llerena/Workspace/samples/MaterialXTeapotLion-1.0/Lion/Geometry/lion_statue_lq.usd +layer: /home/philippe.llerena/Workspace/samples/MaterialXTeapotLion-1.0/Lion/lion.usda +lights: 3 +light 0: area name Some("/World/Rim") lpe None pmf 0.33333334 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 1: area name Some("/World/Key") lpe None pmf 0.33333334 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 2: dome name Some("/World/Sky") lpe None pmf 0.33333334 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 5 geometries, PrimitiveBreakdown { triangles: 1060268, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 1060268, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +geom 0: material #0 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:1068fc4a796550f2 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=2:1068fc4a796550f2 +geom 1: material #1 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:30d55baf131c75e7 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=2:30d55baf131c75e7 +geom 2: material #2 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:d4a5c9127205c3c5 camera=2:d4a5c9127205c3c5 shadow=2:d4a5c9127205c3c5 indirect=2:d4a5c9127205c3c5 +geom 3: material #3 Signature { kind: "MaterialX", cutout: false, straight: false, boundary: false, emits: false, uv: true, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv Some(0) shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=79996:e73538b26933b929 camera=79996:e73538b26933b929 shadow=79996:e73538b26933b929 indirect=79996:e73538b26933b929 +geom 4: material #3 Signature { kind: "MaterialX", cutout: false, straight: false, boundary: false, emits: false, uv: true, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv Some(1) shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=980266:787952c0e7711032 camera=980266:787952c0e7711032 shadow=980266:787952c0e7711032 indirect=980266:787952c0e7711032 +provenance material /World/Looks/GroundMaterial: MaterialOrigin { slots: [2], displaced: false } +provenance material /World/Statue/Looks/StatueMaterial: MaterialOrigin { slots: [3, 4], displaced: false } +provenance material read: ("/Statue/Looks/StatueMaterial", "/World/Statue/Looks/StatueMaterial") +provenance light /World/Key: LightOrigin { index: 1, geoms: 1..2 } +provenance light /World/Rim: LightOrigin { index: 0, geoms: 0..1 } +provenance light /World/Sky: LightOrigin { index: 2, geoms: 2..2 } +provenance geometry 0..1: /World/Rim +provenance geometry 1..2: /World/Key +provenance geometry 2..3: /World/Ground +provenance geometry 3..4: /World/Statue/base/base +provenance geometry 4..5: /World/Statue/statue/statue +provenance mesh: MeshOrigin { geom_id: 2, slot: 0, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 3, slot: 1, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 4, slot: 2, baked: true, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 12600948678966428397, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 1: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 6367222363041144018, n_points: 40000, n_indices: 239988, n_uvs: Some(40781), smooth: true, material: 1 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 2: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 5067503788512982755, n_points: 490133, n_indices: 1960532, n_uvs: Some(497721), smooth: true, material: 1 }), placements: 1, shared: false, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: true, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/World/ShotCam"), cameras: ["/World/ShotCam"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/World/ShotCam"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/materialx_lion_usda-a62e7b45a5b76dea-1.image b/crates/crust-core/tests/data/import_baselines/materialx_lion_usda-a62e7b45a5b76dea-1.image new file mode 100644 index 000000000..55a017520 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/materialx_lion_usda-a62e7b45a5b76dea-1.image @@ -0,0 +1 @@ +960x540 16spp clamp-off 2aaa819629c6b641 diff --git a/crates/crust-core/tests/data/import_baselines/materialx_lion_usda-f3e8e29236c1c73f-1.digest b/crates/crust-core/tests/data/import_baselines/materialx_lion_usda-f3e8e29236c1c73f-1.digest new file mode 100644 index 000000000..4ed94fe15 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/materialx_lion_usda-f3e8e29236c1c73f-1.digest @@ -0,0 +1,44 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/World/ShotCam") +camera: Camera { origin: Vec3A(0.3, -0.52, 0.3), lower_left_corner: Vec3A(-0.20956933, -0.17536479, -0.026081339), horizontal: Vec3A(0.4632069, 0.26878545, 3.990106e-9), vertical: Vec3A(-0.044039004, 0.07589388, 0.2881804), u: Vec3A(0.86492956, 0.5018934, 7.4505815e-9), v: Vec3A(-0.14619102, 0.25193584, 0.9566381), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: Some("/Render/settings") +settings: RenderSettings { samples_per_pixel: 128, max_depth: 12, width: 960, height: 540, region: PixelRect { x0: 0, y0: 0, x1: 960, y1: 540 }, min_samples_per_pixel: 32, variance_threshold: 0.02, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 42.0, aperture: [36.0, 15.2908], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 0.6248 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/materialx_lion.usda"], invisible_overrides: Some(0) } +layer: $DIR/materialx_lion.usda +layer: /home/philippe.llerena/Workspace/samples/MaterialXTeapotLion-1.0/Lion/Geometry/lion_statue_lq.usd +layer: /home/philippe.llerena/Workspace/samples/MaterialXTeapotLion-1.0/Lion/lion.usda +warning: Warning { code: AssetUnsupportedByHost, kind: Skipped, count: 7, prims: [], message: "Asset loader does not decode UV textures: /home/philippe.llerena/Workspace/samples/MaterialXTeapotLion-1.0/Lion/Looks/../Textures/T_Sculpture_A1_Int_Normal..png ignored — the input falls back to its constant value." } +lights: 3 +light 0: area name Some("/World/Rim") lpe None pmf 0.33333334 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 1: area name Some("/World/Key") lpe None pmf 0.33333334 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 2: dome name Some("/World/Sky") lpe None pmf 0.33333334 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 5 geometries, PrimitiveBreakdown { triangles: 1060268, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 1060268, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +geom 0: material #0 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:1068fc4a796550f2 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=2:1068fc4a796550f2 +geom 1: material #1 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:30d55baf131c75e7 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=2:30d55baf131c75e7 +geom 2: material #2 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:d4a5c9127205c3c5 camera=2:d4a5c9127205c3c5 shadow=2:d4a5c9127205c3c5 indirect=2:d4a5c9127205c3c5 +geom 3: material #3 Signature { kind: "MaterialX", cutout: false, straight: false, boundary: false, emits: false, uv: true, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv Some(0) shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=79996:e73538b26933b929 camera=79996:e73538b26933b929 shadow=79996:e73538b26933b929 indirect=79996:e73538b26933b929 +geom 4: material #3 Signature { kind: "MaterialX", cutout: false, straight: false, boundary: false, emits: false, uv: true, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv Some(1) shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=980266:787952c0e7711032 camera=980266:787952c0e7711032 shadow=980266:787952c0e7711032 indirect=980266:787952c0e7711032 +provenance material /World/Looks/GroundMaterial: MaterialOrigin { slots: [2], displaced: false } +provenance material /World/Statue/Looks/StatueMaterial: MaterialOrigin { slots: [3, 4], displaced: false } +provenance material read: ("/Statue/Looks/StatueMaterial", "/World/Statue/Looks/StatueMaterial") +provenance light /World/Key: LightOrigin { index: 1, geoms: 1..2 } +provenance light /World/Rim: LightOrigin { index: 0, geoms: 0..1 } +provenance light /World/Sky: LightOrigin { index: 2, geoms: 2..2 } +provenance geometry 0..1: /World/Rim +provenance geometry 1..2: /World/Key +provenance geometry 2..3: /World/Ground +provenance geometry 3..4: /World/Statue/base/base +provenance geometry 4..5: /World/Statue/statue/statue +provenance mesh: MeshOrigin { geom_id: 2, slot: 0, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 3, slot: 1, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 4, slot: 2, baked: true, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 12600948678966428397, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 1: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 6367222363041144018, n_points: 40000, n_indices: 239988, n_uvs: Some(40781), smooth: true, material: 1 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 2: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 5067503788512982755, n_points: 490133, n_indices: 1960532, n_uvs: Some(497721), smooth: true, material: 1 }), placements: 1, shared: false, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/World/ShotCam"), cameras: ["/World/ShotCam"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/World/ShotCam"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/materialx_lion_usda-f3e8e29236c1c73f-1.image b/crates/crust-core/tests/data/import_baselines/materialx_lion_usda-f3e8e29236c1c73f-1.image new file mode 100644 index 000000000..81172d3d1 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/materialx_lion_usda-f3e8e29236c1c73f-1.image @@ -0,0 +1 @@ +960x540 16spp clamp-off affca6c86a2b6fce diff --git a/crates/crust-core/tests/data/import_baselines/materialx_lion_usda-f3e8e29236c1c73f-2.digest b/crates/crust-core/tests/data/import_baselines/materialx_lion_usda-f3e8e29236c1c73f-2.digest new file mode 100644 index 000000000..4ed94fe15 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/materialx_lion_usda-f3e8e29236c1c73f-2.digest @@ -0,0 +1,44 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/World/ShotCam") +camera: Camera { origin: Vec3A(0.3, -0.52, 0.3), lower_left_corner: Vec3A(-0.20956933, -0.17536479, -0.026081339), horizontal: Vec3A(0.4632069, 0.26878545, 3.990106e-9), vertical: Vec3A(-0.044039004, 0.07589388, 0.2881804), u: Vec3A(0.86492956, 0.5018934, 7.4505815e-9), v: Vec3A(-0.14619102, 0.25193584, 0.9566381), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: Some("/Render/settings") +settings: RenderSettings { samples_per_pixel: 128, max_depth: 12, width: 960, height: 540, region: PixelRect { x0: 0, y0: 0, x1: 960, y1: 540 }, min_samples_per_pixel: 32, variance_threshold: 0.02, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 42.0, aperture: [36.0, 15.2908], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 0.6248 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/materialx_lion.usda"], invisible_overrides: Some(0) } +layer: $DIR/materialx_lion.usda +layer: /home/philippe.llerena/Workspace/samples/MaterialXTeapotLion-1.0/Lion/Geometry/lion_statue_lq.usd +layer: /home/philippe.llerena/Workspace/samples/MaterialXTeapotLion-1.0/Lion/lion.usda +warning: Warning { code: AssetUnsupportedByHost, kind: Skipped, count: 7, prims: [], message: "Asset loader does not decode UV textures: /home/philippe.llerena/Workspace/samples/MaterialXTeapotLion-1.0/Lion/Looks/../Textures/T_Sculpture_A1_Int_Normal..png ignored — the input falls back to its constant value." } +lights: 3 +light 0: area name Some("/World/Rim") lpe None pmf 0.33333334 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 1: area name Some("/World/Key") lpe None pmf 0.33333334 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 2: dome name Some("/World/Sky") lpe None pmf 0.33333334 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 5 geometries, PrimitiveBreakdown { triangles: 1060268, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 1060268, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +geom 0: material #0 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:1068fc4a796550f2 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=2:1068fc4a796550f2 +geom 1: material #1 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:30d55baf131c75e7 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=2:30d55baf131c75e7 +geom 2: material #2 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:d4a5c9127205c3c5 camera=2:d4a5c9127205c3c5 shadow=2:d4a5c9127205c3c5 indirect=2:d4a5c9127205c3c5 +geom 3: material #3 Signature { kind: "MaterialX", cutout: false, straight: false, boundary: false, emits: false, uv: true, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv Some(0) shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=79996:e73538b26933b929 camera=79996:e73538b26933b929 shadow=79996:e73538b26933b929 indirect=79996:e73538b26933b929 +geom 4: material #3 Signature { kind: "MaterialX", cutout: false, straight: false, boundary: false, emits: false, uv: true, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv Some(1) shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=980266:787952c0e7711032 camera=980266:787952c0e7711032 shadow=980266:787952c0e7711032 indirect=980266:787952c0e7711032 +provenance material /World/Looks/GroundMaterial: MaterialOrigin { slots: [2], displaced: false } +provenance material /World/Statue/Looks/StatueMaterial: MaterialOrigin { slots: [3, 4], displaced: false } +provenance material read: ("/Statue/Looks/StatueMaterial", "/World/Statue/Looks/StatueMaterial") +provenance light /World/Key: LightOrigin { index: 1, geoms: 1..2 } +provenance light /World/Rim: LightOrigin { index: 0, geoms: 0..1 } +provenance light /World/Sky: LightOrigin { index: 2, geoms: 2..2 } +provenance geometry 0..1: /World/Rim +provenance geometry 1..2: /World/Key +provenance geometry 2..3: /World/Ground +provenance geometry 3..4: /World/Statue/base/base +provenance geometry 4..5: /World/Statue/statue/statue +provenance mesh: MeshOrigin { geom_id: 2, slot: 0, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 3, slot: 1, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 4, slot: 2, baked: true, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 12600948678966428397, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 1: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 6367222363041144018, n_points: 40000, n_indices: 239988, n_uvs: Some(40781), smooth: true, material: 1 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 2: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 5067503788512982755, n_points: 490133, n_indices: 1960532, n_uvs: Some(497721), smooth: true, material: 1 }), placements: 1, shared: false, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/World/ShotCam"), cameras: ["/World/ShotCam"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/World/ShotCam"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/materialx_lion_usda-f3e8e29236c1c73f-2.image b/crates/crust-core/tests/data/import_baselines/materialx_lion_usda-f3e8e29236c1c73f-2.image new file mode 100644 index 000000000..81172d3d1 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/materialx_lion_usda-f3e8e29236c1c73f-2.image @@ -0,0 +1 @@ +960x540 16spp clamp-off affca6c86a2b6fce diff --git a/crates/crust-core/tests/data/import_baselines/materialx_showcase_usda-1e9e0f7089dbbfd5-1.digest b/crates/crust-core/tests/data/import_baselines/materialx_showcase_usda-1e9e0f7089dbbfd5-1.digest new file mode 100644 index 000000000..4fcbf37c2 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/materialx_showcase_usda-1e9e0f7089dbbfd5-1.digest @@ -0,0 +1,73 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/World/ShotCam") +camera: Camera { origin: Vec3A(0.02, -1.08, 0.28), lower_left_corner: Vec3A(-0.2819569, -0.023333311, -0.038240433), horizontal: Vec3A(0.60391384, 0.0, -0.0), vertical: Vec3A(0.0, 0.046732187, 0.33647177), u: Vec3A(1.0, 0.0, -0.0), v: Vec3A(0.0, 0.13756837, 0.99049234), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: Some("/Render/settings") +settings: RenderSettings { samples_per_pixel: 128, max_depth: 12, width: 1920, height: 1080, region: PixelRect { x0: 0, y0: 0, x1: 1920, y1: 1080 }, min_samples_per_pixel: 32, variance_threshold: 0.02, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 65.0, aperture: [36.0, 15.2908], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 1.0904 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/materialx_showcase.usda"], invisible_overrides: Some(0) } +layer: $DIR/materialx_showcase.usda +layer: /home/philippe.llerena/Workspace/samples/MaterialXTeapotLion-1.0/Lion/Geometry/lion_statue_lq.usd +layer: /home/philippe.llerena/Workspace/samples/MaterialXTeapotLion-1.0/Lion/lion.usda +layer: /home/philippe.llerena/Workspace/samples/MaterialXTeapotLion-1.0/Teapot/Geometry/teapot.usda +layer: /home/philippe.llerena/Workspace/samples/MaterialXTeapotLion-1.0/Teapot/teapot.usda +lights: 5 +light 0: area name Some("/World/Sweep") lpe None pmf 0.2 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 1: area name Some("/World/Top") lpe None pmf 0.2 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 2: area name Some("/World/Fill") lpe None pmf 0.2 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 3: area name Some("/World/Key") lpe None pmf 0.2 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 4: dome name Some("/World/Ambient") lpe None pmf 0.2 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 11 geometries, PrimitiveBreakdown { triangles: 1320184, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 1320184, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +geom 0: material #0 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:95f4302540ae75bb camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=2:95f4302540ae75bb +geom 1: material #1 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:d3456bbfab5f963b camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=2:d3456bbfab5f963b +geom 2: material #2 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:722fab8b7df8d571 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=2:722fab8b7df8d571 +geom 3: material #3 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:24a3f7e1c347d95d camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=2:24a3f7e1c347d95d +geom 4: material #4 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=48:ab362d3c1f55a37a camera=48:ab362d3c1f55a37a shadow=48:ab362d3c1f55a37a indirect=48:ab362d3c1f55a37a +geom 5: material #4 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:247a9f05691f6842 camera=2:247a9f05691f6842 shadow=2:247a9f05691f6842 indirect=2:247a9f05691f6842 +geom 6: material #5 Signature { kind: "MaterialX", cutout: false, straight: false, boundary: false, emits: false, uv: true, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv Some(0) shading None strands None aov None swapped false curves false scale 0.52 motion [] pieces all=79996:fcb4179389611158 camera=79996:fcb4179389611158 shadow=79996:fcb4179389611158 indirect=79996:fcb4179389611158 +geom 7: material #5 Signature { kind: "MaterialX", cutout: false, straight: false, boundary: false, emits: false, uv: true, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv Some(1) shading None strands None aov None swapped false curves false scale 0.52 motion [] pieces all=980266:412f800b00d9e4fc camera=980266:412f800b00d9e4fc shadow=980266:412f800b00d9e4fc indirect=980266:412f800b00d9e4fc +geom 8: material #6 Signature { kind: "MaterialX", cutout: false, straight: false, boundary: false, emits: false, uv: true, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv Some(2) shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=39620:e598fda52b0339e5 camera=39620:e598fda52b0339e5 shadow=39620:e598fda52b0339e5 indirect=39620:e598fda52b0339e5 +geom 9: material #7 Signature { kind: "MaterialX", cutout: false, straight: false, boundary: false, emits: false, uv: true, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv Some(3) shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=44096:6e172da5a7328a8d camera=44096:6e172da5a7328a8d shadow=44096:6e172da5a7328a8d indirect=44096:6e172da5a7328a8d +geom 10: material #7 Signature { kind: "MaterialX", cutout: false, straight: false, boundary: false, emits: false, uv: true, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv Some(4) shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=176148:1bd75640dcbb45b5 camera=176148:1bd75640dcbb45b5 shadow=176148:1bd75640dcbb45b5 indirect=176148:1bd75640dcbb45b5 +provenance material /World/Lion/Looks/StatueMaterial: MaterialOrigin { slots: [6, 7], displaced: false } +provenance material /World/Looks/Sweep: MaterialOrigin { slots: [4, 5], displaced: false } +provenance material /World/Teapot/Looks/TeapotCeramic: MaterialOrigin { slots: [9, 10], displaced: false } +provenance material /World/Teapot/Looks/TeapotMetal: MaterialOrigin { slots: [8], displaced: false } +provenance material read: ("/Statue/Looks/StatueMaterial", "/World/Lion/Looks/StatueMaterial") +provenance material read: ("/Teapot/Looks/TeapotCeramic", "/World/Teapot/Looks/TeapotCeramic") +provenance material read: ("/Teapot/Looks/TeapotMetal", "/World/Teapot/Looks/TeapotMetal") +provenance light /World/Ambient: LightOrigin { index: 4, geoms: 4..4 } +provenance light /World/Fill: LightOrigin { index: 2, geoms: 2..3 } +provenance light /World/Key: LightOrigin { index: 3, geoms: 3..4 } +provenance light /World/Sweep: LightOrigin { index: 0, geoms: 0..1 } +provenance light /World/Top: LightOrigin { index: 1, geoms: 1..2 } +provenance geometry 0..1: /World/Sweep +provenance geometry 1..2: /World/Top +provenance geometry 2..3: /World/Fill +provenance geometry 3..4: /World/Key +provenance geometry 4..5: /World/Cove +provenance geometry 5..6: /World/Floor +provenance geometry 6..7: /World/Lion/base/base +provenance geometry 7..8: /World/Lion/statue/statue +provenance geometry 8..9: /World/Teapot/Teapot_Handle/Teapot_Handle +provenance geometry 9..10: /World/Teapot/Teapot_Lid/Teapot_Lid +provenance geometry 10..11: /World/Teapot/Teapot_Body/Teapot_Body +provenance mesh: MeshOrigin { geom_id: 4, slot: 0, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 5, slot: 1, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 6, slot: 2, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 7, slot: 3, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 8, slot: 4, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 9, slot: 5, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 10, slot: 6, baked: true, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 14191107629590770974, n_points: 50, n_indices: 96, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 1: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 9726477393562575874, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 2: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 6367222363041144018, n_points: 40000, n_indices: 239988, n_uvs: Some(40781), smooth: true, material: 1 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 3: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 5067503788512982755, n_points: 490133, n_indices: 1960532, n_uvs: Some(497721), smooth: true, material: 1 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 4: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 1756143909479177731, n_points: 19812, n_indices: 79240, n_uvs: Some(20810), smooth: true, material: 2 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 5: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 12119563787018499533, n_points: 22050, n_indices: 88192, n_uvs: Some(22250), smooth: true, material: 3 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 6: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 14759424648495852877, n_points: 88070, n_indices: 352296, n_uvs: Some(91044), smooth: true, material: 3 }), placements: 1, shared: false, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: true, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 1, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/World/ShotCam"), cameras: ["/World/ShotCam"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/World/ShotCam"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/materialx_showcase_usda-1e9e0f7089dbbfd5-1.image b/crates/crust-core/tests/data/import_baselines/materialx_showcase_usda-1e9e0f7089dbbfd5-1.image new file mode 100644 index 000000000..2a362eaa2 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/materialx_showcase_usda-1e9e0f7089dbbfd5-1.image @@ -0,0 +1 @@ +1920x1080 16spp clamp-off a06b2a4fde9570af diff --git a/crates/crust-core/tests/data/import_baselines/materialx_showcase_usda-3aaa54bfab01739a-1.digest b/crates/crust-core/tests/data/import_baselines/materialx_showcase_usda-3aaa54bfab01739a-1.digest new file mode 100644 index 000000000..b3e33aba4 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/materialx_showcase_usda-3aaa54bfab01739a-1.digest @@ -0,0 +1,74 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/World/ShotCam") +camera: Camera { origin: Vec3A(0.02, -1.08, 0.28), lower_left_corner: Vec3A(-0.2819569, -0.023333311, -0.038240433), horizontal: Vec3A(0.60391384, 0.0, -0.0), vertical: Vec3A(0.0, 0.046732187, 0.33647177), u: Vec3A(1.0, 0.0, -0.0), v: Vec3A(0.0, 0.13756837, 0.99049234), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: Some("/Render/settings") +settings: RenderSettings { samples_per_pixel: 128, max_depth: 12, width: 1920, height: 1080, region: PixelRect { x0: 0, y0: 0, x1: 1920, y1: 1080 }, min_samples_per_pixel: 32, variance_threshold: 0.02, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 65.0, aperture: [36.0, 15.2908], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 1.0904 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/materialx_showcase.usda"], invisible_overrides: Some(0) } +layer: $DIR/materialx_showcase.usda +layer: /home/philippe.llerena/Workspace/samples/MaterialXTeapotLion-1.0/Lion/Geometry/lion_statue_lq.usd +layer: /home/philippe.llerena/Workspace/samples/MaterialXTeapotLion-1.0/Lion/lion.usda +layer: /home/philippe.llerena/Workspace/samples/MaterialXTeapotLion-1.0/Teapot/Geometry/teapot.usda +layer: /home/philippe.llerena/Workspace/samples/MaterialXTeapotLion-1.0/Teapot/teapot.usda +warning: Warning { code: AssetUnsupportedByHost, kind: Skipped, count: 22, prims: [], message: "Asset loader does not decode UV textures: /home/philippe.llerena/Workspace/samples/MaterialXTeapotLion-1.0/Lion/Looks/../Textures/T_Sculpture_A1_Int_Normal..png ignored — the input falls back to its constant value." } +lights: 5 +light 0: area name Some("/World/Sweep") lpe None pmf 0.2 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 1: area name Some("/World/Top") lpe None pmf 0.2 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 2: area name Some("/World/Fill") lpe None pmf 0.2 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 3: area name Some("/World/Key") lpe None pmf 0.2 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 4: dome name Some("/World/Ambient") lpe None pmf 0.2 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 11 geometries, PrimitiveBreakdown { triangles: 1320184, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 1320184, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +geom 0: material #0 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:95f4302540ae75bb camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=2:95f4302540ae75bb +geom 1: material #1 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:d3456bbfab5f963b camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=2:d3456bbfab5f963b +geom 2: material #2 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:722fab8b7df8d571 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=2:722fab8b7df8d571 +geom 3: material #3 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:24a3f7e1c347d95d camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=2:24a3f7e1c347d95d +geom 4: material #4 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=48:ab362d3c1f55a37a camera=48:ab362d3c1f55a37a shadow=48:ab362d3c1f55a37a indirect=48:ab362d3c1f55a37a +geom 5: material #4 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:247a9f05691f6842 camera=2:247a9f05691f6842 shadow=2:247a9f05691f6842 indirect=2:247a9f05691f6842 +geom 6: material #5 Signature { kind: "MaterialX", cutout: false, straight: false, boundary: false, emits: false, uv: true, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv Some(0) shading None strands None aov None swapped false curves false scale 0.52 motion [] pieces all=79996:fcb4179389611158 camera=79996:fcb4179389611158 shadow=79996:fcb4179389611158 indirect=79996:fcb4179389611158 +geom 7: material #5 Signature { kind: "MaterialX", cutout: false, straight: false, boundary: false, emits: false, uv: true, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv Some(1) shading None strands None aov None swapped false curves false scale 0.52 motion [] pieces all=980266:412f800b00d9e4fc camera=980266:412f800b00d9e4fc shadow=980266:412f800b00d9e4fc indirect=980266:412f800b00d9e4fc +geom 8: material #6 Signature { kind: "MaterialX", cutout: false, straight: false, boundary: false, emits: false, uv: true, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv Some(2) shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=39620:e598fda52b0339e5 camera=39620:e598fda52b0339e5 shadow=39620:e598fda52b0339e5 indirect=39620:e598fda52b0339e5 +geom 9: material #7 Signature { kind: "MaterialX", cutout: false, straight: false, boundary: false, emits: false, uv: true, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv Some(3) shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=44096:6e172da5a7328a8d camera=44096:6e172da5a7328a8d shadow=44096:6e172da5a7328a8d indirect=44096:6e172da5a7328a8d +geom 10: material #7 Signature { kind: "MaterialX", cutout: false, straight: false, boundary: false, emits: false, uv: true, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv Some(4) shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=176148:1bd75640dcbb45b5 camera=176148:1bd75640dcbb45b5 shadow=176148:1bd75640dcbb45b5 indirect=176148:1bd75640dcbb45b5 +provenance material /World/Lion/Looks/StatueMaterial: MaterialOrigin { slots: [6, 7], displaced: false } +provenance material /World/Looks/Sweep: MaterialOrigin { slots: [4, 5], displaced: false } +provenance material /World/Teapot/Looks/TeapotCeramic: MaterialOrigin { slots: [9, 10], displaced: false } +provenance material /World/Teapot/Looks/TeapotMetal: MaterialOrigin { slots: [8], displaced: false } +provenance material read: ("/Statue/Looks/StatueMaterial", "/World/Lion/Looks/StatueMaterial") +provenance material read: ("/Teapot/Looks/TeapotCeramic", "/World/Teapot/Looks/TeapotCeramic") +provenance material read: ("/Teapot/Looks/TeapotMetal", "/World/Teapot/Looks/TeapotMetal") +provenance light /World/Ambient: LightOrigin { index: 4, geoms: 4..4 } +provenance light /World/Fill: LightOrigin { index: 2, geoms: 2..3 } +provenance light /World/Key: LightOrigin { index: 3, geoms: 3..4 } +provenance light /World/Sweep: LightOrigin { index: 0, geoms: 0..1 } +provenance light /World/Top: LightOrigin { index: 1, geoms: 1..2 } +provenance geometry 0..1: /World/Sweep +provenance geometry 1..2: /World/Top +provenance geometry 2..3: /World/Fill +provenance geometry 3..4: /World/Key +provenance geometry 4..5: /World/Cove +provenance geometry 5..6: /World/Floor +provenance geometry 6..7: /World/Lion/base/base +provenance geometry 7..8: /World/Lion/statue/statue +provenance geometry 8..9: /World/Teapot/Teapot_Handle/Teapot_Handle +provenance geometry 9..10: /World/Teapot/Teapot_Lid/Teapot_Lid +provenance geometry 10..11: /World/Teapot/Teapot_Body/Teapot_Body +provenance mesh: MeshOrigin { geom_id: 4, slot: 0, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 5, slot: 1, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 6, slot: 2, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 7, slot: 3, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 8, slot: 4, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 9, slot: 5, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 10, slot: 6, baked: true, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 14191107629590770974, n_points: 50, n_indices: 96, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 1: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 9726477393562575874, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 2: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 6367222363041144018, n_points: 40000, n_indices: 239988, n_uvs: Some(40781), smooth: true, material: 1 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 3: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 5067503788512982755, n_points: 490133, n_indices: 1960532, n_uvs: Some(497721), smooth: true, material: 1 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 4: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 1756143909479177731, n_points: 19812, n_indices: 79240, n_uvs: Some(20810), smooth: true, material: 2 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 5: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 12119563787018499533, n_points: 22050, n_indices: 88192, n_uvs: Some(22250), smooth: true, material: 3 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 6: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 14759424648495852877, n_points: 88070, n_indices: 352296, n_uvs: Some(91044), smooth: true, material: 3 }), placements: 1, shared: false, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 1, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/World/ShotCam"), cameras: ["/World/ShotCam"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/World/ShotCam"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/materialx_showcase_usda-3aaa54bfab01739a-1.image b/crates/crust-core/tests/data/import_baselines/materialx_showcase_usda-3aaa54bfab01739a-1.image new file mode 100644 index 000000000..9863e023b --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/materialx_showcase_usda-3aaa54bfab01739a-1.image @@ -0,0 +1 @@ +1920x1080 16spp clamp-off 3def04d25b2b7d24 diff --git a/crates/crust-core/tests/data/import_baselines/materialx_showcase_usda-3aaa54bfab01739a-2.digest b/crates/crust-core/tests/data/import_baselines/materialx_showcase_usda-3aaa54bfab01739a-2.digest new file mode 100644 index 000000000..b3e33aba4 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/materialx_showcase_usda-3aaa54bfab01739a-2.digest @@ -0,0 +1,74 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/World/ShotCam") +camera: Camera { origin: Vec3A(0.02, -1.08, 0.28), lower_left_corner: Vec3A(-0.2819569, -0.023333311, -0.038240433), horizontal: Vec3A(0.60391384, 0.0, -0.0), vertical: Vec3A(0.0, 0.046732187, 0.33647177), u: Vec3A(1.0, 0.0, -0.0), v: Vec3A(0.0, 0.13756837, 0.99049234), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: Some("/Render/settings") +settings: RenderSettings { samples_per_pixel: 128, max_depth: 12, width: 1920, height: 1080, region: PixelRect { x0: 0, y0: 0, x1: 1920, y1: 1080 }, min_samples_per_pixel: 32, variance_threshold: 0.02, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 65.0, aperture: [36.0, 15.2908], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 1.0904 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/materialx_showcase.usda"], invisible_overrides: Some(0) } +layer: $DIR/materialx_showcase.usda +layer: /home/philippe.llerena/Workspace/samples/MaterialXTeapotLion-1.0/Lion/Geometry/lion_statue_lq.usd +layer: /home/philippe.llerena/Workspace/samples/MaterialXTeapotLion-1.0/Lion/lion.usda +layer: /home/philippe.llerena/Workspace/samples/MaterialXTeapotLion-1.0/Teapot/Geometry/teapot.usda +layer: /home/philippe.llerena/Workspace/samples/MaterialXTeapotLion-1.0/Teapot/teapot.usda +warning: Warning { code: AssetUnsupportedByHost, kind: Skipped, count: 22, prims: [], message: "Asset loader does not decode UV textures: /home/philippe.llerena/Workspace/samples/MaterialXTeapotLion-1.0/Lion/Looks/../Textures/T_Sculpture_A1_Int_Normal..png ignored — the input falls back to its constant value." } +lights: 5 +light 0: area name Some("/World/Sweep") lpe None pmf 0.2 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 1: area name Some("/World/Top") lpe None pmf 0.2 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 2: area name Some("/World/Fill") lpe None pmf 0.2 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 3: area name Some("/World/Key") lpe None pmf 0.2 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 4: dome name Some("/World/Ambient") lpe None pmf 0.2 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 11 geometries, PrimitiveBreakdown { triangles: 1320184, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 1320184, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +geom 0: material #0 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:95f4302540ae75bb camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=2:95f4302540ae75bb +geom 1: material #1 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:d3456bbfab5f963b camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=2:d3456bbfab5f963b +geom 2: material #2 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:722fab8b7df8d571 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=2:722fab8b7df8d571 +geom 3: material #3 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:24a3f7e1c347d95d camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=2:24a3f7e1c347d95d +geom 4: material #4 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=48:ab362d3c1f55a37a camera=48:ab362d3c1f55a37a shadow=48:ab362d3c1f55a37a indirect=48:ab362d3c1f55a37a +geom 5: material #4 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:247a9f05691f6842 camera=2:247a9f05691f6842 shadow=2:247a9f05691f6842 indirect=2:247a9f05691f6842 +geom 6: material #5 Signature { kind: "MaterialX", cutout: false, straight: false, boundary: false, emits: false, uv: true, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv Some(0) shading None strands None aov None swapped false curves false scale 0.52 motion [] pieces all=79996:fcb4179389611158 camera=79996:fcb4179389611158 shadow=79996:fcb4179389611158 indirect=79996:fcb4179389611158 +geom 7: material #5 Signature { kind: "MaterialX", cutout: false, straight: false, boundary: false, emits: false, uv: true, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv Some(1) shading None strands None aov None swapped false curves false scale 0.52 motion [] pieces all=980266:412f800b00d9e4fc camera=980266:412f800b00d9e4fc shadow=980266:412f800b00d9e4fc indirect=980266:412f800b00d9e4fc +geom 8: material #6 Signature { kind: "MaterialX", cutout: false, straight: false, boundary: false, emits: false, uv: true, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv Some(2) shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=39620:e598fda52b0339e5 camera=39620:e598fda52b0339e5 shadow=39620:e598fda52b0339e5 indirect=39620:e598fda52b0339e5 +geom 9: material #7 Signature { kind: "MaterialX", cutout: false, straight: false, boundary: false, emits: false, uv: true, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv Some(3) shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=44096:6e172da5a7328a8d camera=44096:6e172da5a7328a8d shadow=44096:6e172da5a7328a8d indirect=44096:6e172da5a7328a8d +geom 10: material #7 Signature { kind: "MaterialX", cutout: false, straight: false, boundary: false, emits: false, uv: true, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv Some(4) shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=176148:1bd75640dcbb45b5 camera=176148:1bd75640dcbb45b5 shadow=176148:1bd75640dcbb45b5 indirect=176148:1bd75640dcbb45b5 +provenance material /World/Lion/Looks/StatueMaterial: MaterialOrigin { slots: [6, 7], displaced: false } +provenance material /World/Looks/Sweep: MaterialOrigin { slots: [4, 5], displaced: false } +provenance material /World/Teapot/Looks/TeapotCeramic: MaterialOrigin { slots: [9, 10], displaced: false } +provenance material /World/Teapot/Looks/TeapotMetal: MaterialOrigin { slots: [8], displaced: false } +provenance material read: ("/Statue/Looks/StatueMaterial", "/World/Lion/Looks/StatueMaterial") +provenance material read: ("/Teapot/Looks/TeapotCeramic", "/World/Teapot/Looks/TeapotCeramic") +provenance material read: ("/Teapot/Looks/TeapotMetal", "/World/Teapot/Looks/TeapotMetal") +provenance light /World/Ambient: LightOrigin { index: 4, geoms: 4..4 } +provenance light /World/Fill: LightOrigin { index: 2, geoms: 2..3 } +provenance light /World/Key: LightOrigin { index: 3, geoms: 3..4 } +provenance light /World/Sweep: LightOrigin { index: 0, geoms: 0..1 } +provenance light /World/Top: LightOrigin { index: 1, geoms: 1..2 } +provenance geometry 0..1: /World/Sweep +provenance geometry 1..2: /World/Top +provenance geometry 2..3: /World/Fill +provenance geometry 3..4: /World/Key +provenance geometry 4..5: /World/Cove +provenance geometry 5..6: /World/Floor +provenance geometry 6..7: /World/Lion/base/base +provenance geometry 7..8: /World/Lion/statue/statue +provenance geometry 8..9: /World/Teapot/Teapot_Handle/Teapot_Handle +provenance geometry 9..10: /World/Teapot/Teapot_Lid/Teapot_Lid +provenance geometry 10..11: /World/Teapot/Teapot_Body/Teapot_Body +provenance mesh: MeshOrigin { geom_id: 4, slot: 0, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 5, slot: 1, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 6, slot: 2, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 7, slot: 3, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 8, slot: 4, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 9, slot: 5, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 10, slot: 6, baked: true, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 14191107629590770974, n_points: 50, n_indices: 96, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 1: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 9726477393562575874, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 2: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 6367222363041144018, n_points: 40000, n_indices: 239988, n_uvs: Some(40781), smooth: true, material: 1 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 3: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 5067503788512982755, n_points: 490133, n_indices: 1960532, n_uvs: Some(497721), smooth: true, material: 1 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 4: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 1756143909479177731, n_points: 19812, n_indices: 79240, n_uvs: Some(20810), smooth: true, material: 2 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 5: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 12119563787018499533, n_points: 22050, n_indices: 88192, n_uvs: Some(22250), smooth: true, material: 3 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 6: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 14759424648495852877, n_points: 88070, n_indices: 352296, n_uvs: Some(91044), smooth: true, material: 3 }), placements: 1, shared: false, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 1, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/World/ShotCam"), cameras: ["/World/ShotCam"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/World/ShotCam"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/materialx_showcase_usda-3aaa54bfab01739a-2.image b/crates/crust-core/tests/data/import_baselines/materialx_showcase_usda-3aaa54bfab01739a-2.image new file mode 100644 index 000000000..9863e023b --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/materialx_showcase_usda-3aaa54bfab01739a-2.image @@ -0,0 +1 @@ +1920x1080 16spp clamp-off 3def04d25b2b7d24 diff --git a/crates/crust-core/tests/data/import_baselines/materialx_subsurface_usda-218ab79fb5de55b5-1.digest b/crates/crust-core/tests/data/import_baselines/materialx_subsurface_usda-218ab79fb5de55b5-1.digest new file mode 100644 index 000000000..20d24ba37 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/materialx_subsurface_usda-218ab79fb5de55b5-1.digest @@ -0,0 +1,36 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/World/ShotCam") +camera: Camera { origin: Vec3A(0.0, 1.2, 7.0), lower_left_corner: Vec3A(-4.5, -1.570276, -2.8685398), horizontal: Vec3A(9.0, -0.0, 0.0), vertical: Vec3A(0.0, 4.493833, -0.23551181), u: Vec3A(1.0, -0.0, 0.0), v: Vec3A(0.0, 0.99862957, -0.05233596), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: Some("/Render/settings") +settings: RenderSettings { samples_per_pixel: 64, max_depth: 12, width: 640, height: 320, region: PixelRect { x0: 0, y0: 0, x1: 640, y1: 320 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 40.0, aperture: [36.0, 15.2908], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 10.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/materialx_subsurface.usda"], invisible_overrides: Some(0) } +layer: $DIR/materialx_subsurface.usda +lights: 2 +light 0: area name Some("/World/Back") lpe None pmf 0.5 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 1: dome name Some("/World/Sky") lpe None pmf 0.5 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 5 geometries, PrimitiveBreakdown { triangles: 2, spheres: 4, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 2, spheres: 4, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +geom 0: material #0 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:9bdebc8a6e7a4cb6 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=1:9bdebc8a6e7a4cb6 +geom 1: material #1 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:58d360c7905fa0c5 camera=2:58d360c7905fa0c5 shadow=2:58d360c7905fa0c5 indirect=2:58d360c7905fa0c5 +geom 2: material #2 Signature { kind: "MaterialX", cutout: false, straight: false, boundary: false, emits: false, uv: true, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:741514c546e5584d camera=1:741514c546e5584d shadow=1:741514c546e5584d indirect=1:741514c546e5584d +geom 3: material #3 Signature { kind: "MaterialX", cutout: false, straight: false, boundary: false, emits: false, uv: true, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:259535af9ea7b96d camera=1:259535af9ea7b96d shadow=1:259535af9ea7b96d indirect=1:259535af9ea7b96d +geom 4: material #4 Signature { kind: "MaterialX", cutout: false, straight: false, boundary: false, emits: false, uv: true, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:f1400f70f7cd4059 camera=1:f1400f70f7cd4059 shadow=1:f1400f70f7cd4059 indirect=1:f1400f70f7cd4059 +provenance material /World/Looks/BareJade: MaterialOrigin { slots: [2], displaced: false } +provenance material /World/Looks/Floor: MaterialOrigin { slots: [1], displaced: false } +provenance material /World/Looks/OpenPbrSkin: MaterialOrigin { slots: [4], displaced: false } +provenance material /World/Looks/StandardMarble: MaterialOrigin { slots: [3], displaced: false } +provenance light /World/Back: LightOrigin { index: 0, geoms: 0..1 } +provenance light /World/Sky: LightOrigin { index: 1, geoms: 1..1 } +provenance geometry 0..1: /World/Back +provenance geometry 1..2: /World/Floor +provenance geometry 2..3: /World/BareJade +provenance geometry 3..4: /World/StandardMarble +provenance geometry 4..5: /World/OpenPbrSkin +provenance mesh: MeshOrigin { geom_id: 1, slot: 0, baked: true, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 6334356113930313994, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [2, 3, 4] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: true, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/World/ShotCam"), cameras: ["/World/ShotCam"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/World/ShotCam"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/materialx_subsurface_usda-218ab79fb5de55b5-1.image b/crates/crust-core/tests/data/import_baselines/materialx_subsurface_usda-218ab79fb5de55b5-1.image new file mode 100644 index 000000000..d3048beae --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/materialx_subsurface_usda-218ab79fb5de55b5-1.image @@ -0,0 +1 @@ +640x320 16spp clamp-off 208cda1e53c1a362 diff --git a/crates/crust-core/tests/data/import_baselines/materialx_subsurface_usda-3b07bee1fa621b95-1.digest b/crates/crust-core/tests/data/import_baselines/materialx_subsurface_usda-3b07bee1fa621b95-1.digest new file mode 100644 index 000000000..1a08c3382 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/materialx_subsurface_usda-3b07bee1fa621b95-1.digest @@ -0,0 +1,37 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/World/ShotCam") +camera: Camera { origin: Vec3A(0.0, 1.2, 7.0), lower_left_corner: Vec3A(-4.5, -1.570276, -2.8685398), horizontal: Vec3A(9.0, -0.0, 0.0), vertical: Vec3A(0.0, 4.493833, -0.23551181), u: Vec3A(1.0, -0.0, 0.0), v: Vec3A(0.0, 0.99862957, -0.05233596), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: Some("/Render/settings") +settings: RenderSettings { samples_per_pixel: 64, max_depth: 12, width: 640, height: 320, region: PixelRect { x0: 0, y0: 0, x1: 640, y1: 320 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 40.0, aperture: [36.0, 15.2908], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 10.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/materialx_subsurface.usda"], invisible_overrides: Some(0) } +layer: $DIR/materialx_subsurface.usda +warning: Warning { code: AssetUnsupportedByHost, kind: Skipped, count: 1, prims: [], message: "No asset loader: environment map $DIR/sky_env.exr ignored — the dome falls back to its uniform colour. Use Scene::from_usd_with_assets to supply one." } +lights: 2 +light 0: area name Some("/World/Back") lpe None pmf 0.5 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 1: dome name Some("/World/Sky") lpe None pmf 0.5 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 5 geometries, PrimitiveBreakdown { triangles: 2, spheres: 4, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 2, spheres: 4, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +geom 0: material #0 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:9bdebc8a6e7a4cb6 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=1:9bdebc8a6e7a4cb6 +geom 1: material #1 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:58d360c7905fa0c5 camera=2:58d360c7905fa0c5 shadow=2:58d360c7905fa0c5 indirect=2:58d360c7905fa0c5 +geom 2: material #2 Signature { kind: "MaterialX", cutout: false, straight: false, boundary: false, emits: false, uv: true, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:741514c546e5584d camera=1:741514c546e5584d shadow=1:741514c546e5584d indirect=1:741514c546e5584d +geom 3: material #3 Signature { kind: "MaterialX", cutout: false, straight: false, boundary: false, emits: false, uv: true, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:259535af9ea7b96d camera=1:259535af9ea7b96d shadow=1:259535af9ea7b96d indirect=1:259535af9ea7b96d +geom 4: material #4 Signature { kind: "MaterialX", cutout: false, straight: false, boundary: false, emits: false, uv: true, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:f1400f70f7cd4059 camera=1:f1400f70f7cd4059 shadow=1:f1400f70f7cd4059 indirect=1:f1400f70f7cd4059 +provenance material /World/Looks/BareJade: MaterialOrigin { slots: [2], displaced: false } +provenance material /World/Looks/Floor: MaterialOrigin { slots: [1], displaced: false } +provenance material /World/Looks/OpenPbrSkin: MaterialOrigin { slots: [4], displaced: false } +provenance material /World/Looks/StandardMarble: MaterialOrigin { slots: [3], displaced: false } +provenance light /World/Back: LightOrigin { index: 0, geoms: 0..1 } +provenance light /World/Sky: LightOrigin { index: 1, geoms: 1..1 } +provenance geometry 0..1: /World/Back +provenance geometry 1..2: /World/Floor +provenance geometry 2..3: /World/BareJade +provenance geometry 3..4: /World/StandardMarble +provenance geometry 4..5: /World/OpenPbrSkin +provenance mesh: MeshOrigin { geom_id: 1, slot: 0, baked: true, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 6334356113930313994, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [2, 3, 4] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/World/ShotCam"), cameras: ["/World/ShotCam"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/World/ShotCam"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/materialx_subsurface_usda-3b07bee1fa621b95-1.image b/crates/crust-core/tests/data/import_baselines/materialx_subsurface_usda-3b07bee1fa621b95-1.image new file mode 100644 index 000000000..5002ce8cf --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/materialx_subsurface_usda-3b07bee1fa621b95-1.image @@ -0,0 +1 @@ +640x320 16spp clamp-off 372d1c9e85cba058 diff --git a/crates/crust-core/tests/data/import_baselines/materialx_subsurface_usda-3b07bee1fa621b95-2.digest b/crates/crust-core/tests/data/import_baselines/materialx_subsurface_usda-3b07bee1fa621b95-2.digest new file mode 100644 index 000000000..1a08c3382 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/materialx_subsurface_usda-3b07bee1fa621b95-2.digest @@ -0,0 +1,37 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/World/ShotCam") +camera: Camera { origin: Vec3A(0.0, 1.2, 7.0), lower_left_corner: Vec3A(-4.5, -1.570276, -2.8685398), horizontal: Vec3A(9.0, -0.0, 0.0), vertical: Vec3A(0.0, 4.493833, -0.23551181), u: Vec3A(1.0, -0.0, 0.0), v: Vec3A(0.0, 0.99862957, -0.05233596), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: Some("/Render/settings") +settings: RenderSettings { samples_per_pixel: 64, max_depth: 12, width: 640, height: 320, region: PixelRect { x0: 0, y0: 0, x1: 640, y1: 320 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 40.0, aperture: [36.0, 15.2908], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 10.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/materialx_subsurface.usda"], invisible_overrides: Some(0) } +layer: $DIR/materialx_subsurface.usda +warning: Warning { code: AssetUnsupportedByHost, kind: Skipped, count: 1, prims: [], message: "No asset loader: environment map $DIR/sky_env.exr ignored — the dome falls back to its uniform colour. Use Scene::from_usd_with_assets to supply one." } +lights: 2 +light 0: area name Some("/World/Back") lpe None pmf 0.5 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 1: dome name Some("/World/Sky") lpe None pmf 0.5 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 5 geometries, PrimitiveBreakdown { triangles: 2, spheres: 4, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 2, spheres: 4, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +geom 0: material #0 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:9bdebc8a6e7a4cb6 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=1:9bdebc8a6e7a4cb6 +geom 1: material #1 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:58d360c7905fa0c5 camera=2:58d360c7905fa0c5 shadow=2:58d360c7905fa0c5 indirect=2:58d360c7905fa0c5 +geom 2: material #2 Signature { kind: "MaterialX", cutout: false, straight: false, boundary: false, emits: false, uv: true, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:741514c546e5584d camera=1:741514c546e5584d shadow=1:741514c546e5584d indirect=1:741514c546e5584d +geom 3: material #3 Signature { kind: "MaterialX", cutout: false, straight: false, boundary: false, emits: false, uv: true, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:259535af9ea7b96d camera=1:259535af9ea7b96d shadow=1:259535af9ea7b96d indirect=1:259535af9ea7b96d +geom 4: material #4 Signature { kind: "MaterialX", cutout: false, straight: false, boundary: false, emits: false, uv: true, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:f1400f70f7cd4059 camera=1:f1400f70f7cd4059 shadow=1:f1400f70f7cd4059 indirect=1:f1400f70f7cd4059 +provenance material /World/Looks/BareJade: MaterialOrigin { slots: [2], displaced: false } +provenance material /World/Looks/Floor: MaterialOrigin { slots: [1], displaced: false } +provenance material /World/Looks/OpenPbrSkin: MaterialOrigin { slots: [4], displaced: false } +provenance material /World/Looks/StandardMarble: MaterialOrigin { slots: [3], displaced: false } +provenance light /World/Back: LightOrigin { index: 0, geoms: 0..1 } +provenance light /World/Sky: LightOrigin { index: 1, geoms: 1..1 } +provenance geometry 0..1: /World/Back +provenance geometry 1..2: /World/Floor +provenance geometry 2..3: /World/BareJade +provenance geometry 3..4: /World/StandardMarble +provenance geometry 4..5: /World/OpenPbrSkin +provenance mesh: MeshOrigin { geom_id: 1, slot: 0, baked: true, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 6334356113930313994, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [2, 3, 4] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/World/ShotCam"), cameras: ["/World/ShotCam"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/World/ShotCam"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/materialx_subsurface_usda-3b07bee1fa621b95-2.image b/crates/crust-core/tests/data/import_baselines/materialx_subsurface_usda-3b07bee1fa621b95-2.image new file mode 100644 index 000000000..5002ce8cf --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/materialx_subsurface_usda-3b07bee1fa621b95-2.image @@ -0,0 +1 @@ +640x320 16spp clamp-off 372d1c9e85cba058 diff --git a/crates/crust-core/tests/data/import_baselines/materialx_surfaces_usda-b446db21b7cb309b-1.digest b/crates/crust-core/tests/data/import_baselines/materialx_surfaces_usda-b446db21b7cb309b-1.digest new file mode 100644 index 000000000..28b26c33f --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/materialx_surfaces_usda-b446db21b7cb309b-1.digest @@ -0,0 +1,42 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/World/ShotCam") +camera: Camera { origin: Vec3A(0.0, 1.8, 9.0), lower_left_corner: Vec3A(-4.5000005, -1.7032137, -0.7794504), horizontal: Vec3A(9.000001, -0.0, 0.0), vertical: Vec3A(0.0, 5.611298, -0.39238015), u: Vec3A(1.0, -0.0, 0.0), v: Vec3A(0.0, 0.997564, -0.06975646), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: Some("/Render/settings") +settings: RenderSettings { samples_per_pixel: 64, max_depth: 12, width: 640, height: 400, region: PixelRect { x0: 0, y0: 0, x1: 640, y1: 400 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 40.0, aperture: [36.0, 15.2908], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 10.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/materialx_surfaces.usda"], invisible_overrides: Some(0) } +layer: $DIR/materialx_surfaces.usda +warning: Warning { code: AssetUnsupportedByHost, kind: Skipped, count: 1, prims: [], message: "No asset loader: environment map $DIR/sky_env.exr ignored — the dome falls back to its uniform colour. Use Scene::from_usd_with_assets to supply one." } +lights: 1 +light 0: dome name Some("/World/Sky") lpe None pmf 1.0 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 7 geometries, PrimitiveBreakdown { triangles: 2, spheres: 6, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 2, spheres: 6, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:58d360c7905fa0c5 camera=2:58d360c7905fa0c5 shadow=2:58d360c7905fa0c5 indirect=2:58d360c7905fa0c5 +geom 1: material #1 Signature { kind: "MaterialX", cutout: false, straight: false, boundary: false, emits: false, uv: true, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:741514c546e5584d camera=1:741514c546e5584d shadow=1:741514c546e5584d indirect=1:741514c546e5584d +geom 2: material #2 Signature { kind: "MaterialX", cutout: false, straight: false, boundary: false, emits: false, uv: true, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:259535af9ea7b96d camera=1:259535af9ea7b96d shadow=1:259535af9ea7b96d indirect=1:259535af9ea7b96d +geom 3: material #3 Signature { kind: "MaterialX", cutout: false, straight: true, boundary: false, emits: false, uv: true, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:f1400f70f7cd4059 camera=1:f1400f70f7cd4059 shadow=1:f1400f70f7cd4059 indirect=1:f1400f70f7cd4059 +geom 4: material #4 Signature { kind: "MaterialX", cutout: false, straight: false, boundary: false, emits: false, uv: true, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:d6b61f1dc9e3f1b5 camera=1:d6b61f1dc9e3f1b5 shadow=1:d6b61f1dc9e3f1b5 indirect=1:d6b61f1dc9e3f1b5 +geom 5: material #5 Signature { kind: "MaterialX", cutout: false, straight: false, boundary: false, emits: false, uv: true, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:2dab617e9e864c39 camera=1:2dab617e9e864c39 shadow=1:2dab617e9e864c39 indirect=1:2dab617e9e864c39 +geom 6: material #6 Signature { kind: "MaterialX", cutout: false, straight: false, boundary: false, emits: false, uv: true, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:e505b85d6d1eda79 camera=1:e505b85d6d1eda79 shadow=1:e505b85d6d1eda79 indirect=1:e505b85d6d1eda79 +provenance material /World/Looks/Floor: MaterialOrigin { slots: [0], displaced: false } +provenance material /World/Looks/GltfClearcoat: MaterialOrigin { slots: [4], displaced: false } +provenance material /World/Looks/GltfRuby: MaterialOrigin { slots: [2], displaced: false } +provenance material /World/Looks/OpenPbrBumpedCoat: MaterialOrigin { slots: [1], displaced: false } +provenance material /World/Looks/OpenPbrCoated: MaterialOrigin { slots: [6], displaced: false } +provenance material /World/Looks/StandardGlass: MaterialOrigin { slots: [3], displaced: false } +provenance material /World/Looks/StandardGold: MaterialOrigin { slots: [5], displaced: false } +provenance light /World/Sky: LightOrigin { index: 0, geoms: 0..0 } +provenance geometry 0..1: /World/Floor +provenance geometry 1..2: /World/OpenPbrBumpedCoat +provenance geometry 2..3: /World/GltfRuby +provenance geometry 3..4: /World/StandardGlass +provenance geometry 4..5: /World/GltfClearcoat +provenance geometry 5..6: /World/StandardGold +provenance geometry 6..7: /World/OpenPbrCoated +provenance mesh: MeshOrigin { geom_id: 0, slot: 0, baked: true, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 6334356113930313994, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [1, 2, 3, 4, 5, 6] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/World/ShotCam"), cameras: ["/World/ShotCam"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/World/ShotCam"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/materialx_surfaces_usda-b446db21b7cb309b-1.image b/crates/crust-core/tests/data/import_baselines/materialx_surfaces_usda-b446db21b7cb309b-1.image new file mode 100644 index 000000000..1df05aeb9 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/materialx_surfaces_usda-b446db21b7cb309b-1.image @@ -0,0 +1 @@ +640x400 16spp clamp-off 6cc2043aff96238e diff --git a/crates/crust-core/tests/data/import_baselines/materialx_surfaces_usda-b446db21b7cb309b-2.digest b/crates/crust-core/tests/data/import_baselines/materialx_surfaces_usda-b446db21b7cb309b-2.digest new file mode 100644 index 000000000..28b26c33f --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/materialx_surfaces_usda-b446db21b7cb309b-2.digest @@ -0,0 +1,42 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/World/ShotCam") +camera: Camera { origin: Vec3A(0.0, 1.8, 9.0), lower_left_corner: Vec3A(-4.5000005, -1.7032137, -0.7794504), horizontal: Vec3A(9.000001, -0.0, 0.0), vertical: Vec3A(0.0, 5.611298, -0.39238015), u: Vec3A(1.0, -0.0, 0.0), v: Vec3A(0.0, 0.997564, -0.06975646), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: Some("/Render/settings") +settings: RenderSettings { samples_per_pixel: 64, max_depth: 12, width: 640, height: 400, region: PixelRect { x0: 0, y0: 0, x1: 640, y1: 400 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 40.0, aperture: [36.0, 15.2908], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 10.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/materialx_surfaces.usda"], invisible_overrides: Some(0) } +layer: $DIR/materialx_surfaces.usda +warning: Warning { code: AssetUnsupportedByHost, kind: Skipped, count: 1, prims: [], message: "No asset loader: environment map $DIR/sky_env.exr ignored — the dome falls back to its uniform colour. Use Scene::from_usd_with_assets to supply one." } +lights: 1 +light 0: dome name Some("/World/Sky") lpe None pmf 1.0 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 7 geometries, PrimitiveBreakdown { triangles: 2, spheres: 6, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 2, spheres: 6, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:58d360c7905fa0c5 camera=2:58d360c7905fa0c5 shadow=2:58d360c7905fa0c5 indirect=2:58d360c7905fa0c5 +geom 1: material #1 Signature { kind: "MaterialX", cutout: false, straight: false, boundary: false, emits: false, uv: true, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:741514c546e5584d camera=1:741514c546e5584d shadow=1:741514c546e5584d indirect=1:741514c546e5584d +geom 2: material #2 Signature { kind: "MaterialX", cutout: false, straight: false, boundary: false, emits: false, uv: true, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:259535af9ea7b96d camera=1:259535af9ea7b96d shadow=1:259535af9ea7b96d indirect=1:259535af9ea7b96d +geom 3: material #3 Signature { kind: "MaterialX", cutout: false, straight: true, boundary: false, emits: false, uv: true, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:f1400f70f7cd4059 camera=1:f1400f70f7cd4059 shadow=1:f1400f70f7cd4059 indirect=1:f1400f70f7cd4059 +geom 4: material #4 Signature { kind: "MaterialX", cutout: false, straight: false, boundary: false, emits: false, uv: true, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:d6b61f1dc9e3f1b5 camera=1:d6b61f1dc9e3f1b5 shadow=1:d6b61f1dc9e3f1b5 indirect=1:d6b61f1dc9e3f1b5 +geom 5: material #5 Signature { kind: "MaterialX", cutout: false, straight: false, boundary: false, emits: false, uv: true, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:2dab617e9e864c39 camera=1:2dab617e9e864c39 shadow=1:2dab617e9e864c39 indirect=1:2dab617e9e864c39 +geom 6: material #6 Signature { kind: "MaterialX", cutout: false, straight: false, boundary: false, emits: false, uv: true, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:e505b85d6d1eda79 camera=1:e505b85d6d1eda79 shadow=1:e505b85d6d1eda79 indirect=1:e505b85d6d1eda79 +provenance material /World/Looks/Floor: MaterialOrigin { slots: [0], displaced: false } +provenance material /World/Looks/GltfClearcoat: MaterialOrigin { slots: [4], displaced: false } +provenance material /World/Looks/GltfRuby: MaterialOrigin { slots: [2], displaced: false } +provenance material /World/Looks/OpenPbrBumpedCoat: MaterialOrigin { slots: [1], displaced: false } +provenance material /World/Looks/OpenPbrCoated: MaterialOrigin { slots: [6], displaced: false } +provenance material /World/Looks/StandardGlass: MaterialOrigin { slots: [3], displaced: false } +provenance material /World/Looks/StandardGold: MaterialOrigin { slots: [5], displaced: false } +provenance light /World/Sky: LightOrigin { index: 0, geoms: 0..0 } +provenance geometry 0..1: /World/Floor +provenance geometry 1..2: /World/OpenPbrBumpedCoat +provenance geometry 2..3: /World/GltfRuby +provenance geometry 3..4: /World/StandardGlass +provenance geometry 4..5: /World/GltfClearcoat +provenance geometry 5..6: /World/StandardGold +provenance geometry 6..7: /World/OpenPbrCoated +provenance mesh: MeshOrigin { geom_id: 0, slot: 0, baked: true, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 6334356113930313994, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [1, 2, 3, 4, 5, 6] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/World/ShotCam"), cameras: ["/World/ShotCam"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/World/ShotCam"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/materialx_surfaces_usda-b446db21b7cb309b-2.image b/crates/crust-core/tests/data/import_baselines/materialx_surfaces_usda-b446db21b7cb309b-2.image new file mode 100644 index 000000000..1df05aeb9 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/materialx_surfaces_usda-b446db21b7cb309b-2.image @@ -0,0 +1 @@ +640x400 16spp clamp-off 6cc2043aff96238e diff --git a/crates/crust-core/tests/data/import_baselines/materialx_surfaces_usda-ca1ad78e541d4d41-1.digest b/crates/crust-core/tests/data/import_baselines/materialx_surfaces_usda-ca1ad78e541d4d41-1.digest new file mode 100644 index 000000000..3191109b8 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/materialx_surfaces_usda-ca1ad78e541d4d41-1.digest @@ -0,0 +1,41 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/World/ShotCam") +camera: Camera { origin: Vec3A(0.0, 1.8, 9.0), lower_left_corner: Vec3A(-4.5000005, -1.7032137, -0.7794504), horizontal: Vec3A(9.000001, -0.0, 0.0), vertical: Vec3A(0.0, 5.611298, -0.39238015), u: Vec3A(1.0, -0.0, 0.0), v: Vec3A(0.0, 0.997564, -0.06975646), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: Some("/Render/settings") +settings: RenderSettings { samples_per_pixel: 64, max_depth: 12, width: 640, height: 400, region: PixelRect { x0: 0, y0: 0, x1: 640, y1: 400 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 40.0, aperture: [36.0, 15.2908], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 10.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/materialx_surfaces.usda"], invisible_overrides: Some(0) } +layer: $DIR/materialx_surfaces.usda +lights: 1 +light 0: dome name Some("/World/Sky") lpe None pmf 1.0 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 7 geometries, PrimitiveBreakdown { triangles: 2, spheres: 6, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 2, spheres: 6, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:58d360c7905fa0c5 camera=2:58d360c7905fa0c5 shadow=2:58d360c7905fa0c5 indirect=2:58d360c7905fa0c5 +geom 1: material #1 Signature { kind: "MaterialX", cutout: false, straight: false, boundary: false, emits: false, uv: true, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:741514c546e5584d camera=1:741514c546e5584d shadow=1:741514c546e5584d indirect=1:741514c546e5584d +geom 2: material #2 Signature { kind: "MaterialX", cutout: false, straight: false, boundary: false, emits: false, uv: true, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:259535af9ea7b96d camera=1:259535af9ea7b96d shadow=1:259535af9ea7b96d indirect=1:259535af9ea7b96d +geom 3: material #3 Signature { kind: "MaterialX", cutout: false, straight: true, boundary: false, emits: false, uv: true, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:f1400f70f7cd4059 camera=1:f1400f70f7cd4059 shadow=1:f1400f70f7cd4059 indirect=1:f1400f70f7cd4059 +geom 4: material #4 Signature { kind: "MaterialX", cutout: false, straight: false, boundary: false, emits: false, uv: true, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:d6b61f1dc9e3f1b5 camera=1:d6b61f1dc9e3f1b5 shadow=1:d6b61f1dc9e3f1b5 indirect=1:d6b61f1dc9e3f1b5 +geom 5: material #5 Signature { kind: "MaterialX", cutout: false, straight: false, boundary: false, emits: false, uv: true, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:2dab617e9e864c39 camera=1:2dab617e9e864c39 shadow=1:2dab617e9e864c39 indirect=1:2dab617e9e864c39 +geom 6: material #6 Signature { kind: "MaterialX", cutout: false, straight: false, boundary: false, emits: false, uv: true, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:e505b85d6d1eda79 camera=1:e505b85d6d1eda79 shadow=1:e505b85d6d1eda79 indirect=1:e505b85d6d1eda79 +provenance material /World/Looks/Floor: MaterialOrigin { slots: [0], displaced: false } +provenance material /World/Looks/GltfClearcoat: MaterialOrigin { slots: [4], displaced: false } +provenance material /World/Looks/GltfRuby: MaterialOrigin { slots: [2], displaced: false } +provenance material /World/Looks/OpenPbrBumpedCoat: MaterialOrigin { slots: [1], displaced: false } +provenance material /World/Looks/OpenPbrCoated: MaterialOrigin { slots: [6], displaced: false } +provenance material /World/Looks/StandardGlass: MaterialOrigin { slots: [3], displaced: false } +provenance material /World/Looks/StandardGold: MaterialOrigin { slots: [5], displaced: false } +provenance light /World/Sky: LightOrigin { index: 0, geoms: 0..0 } +provenance geometry 0..1: /World/Floor +provenance geometry 1..2: /World/OpenPbrBumpedCoat +provenance geometry 2..3: /World/GltfRuby +provenance geometry 3..4: /World/StandardGlass +provenance geometry 4..5: /World/GltfClearcoat +provenance geometry 5..6: /World/StandardGold +provenance geometry 6..7: /World/OpenPbrCoated +provenance mesh: MeshOrigin { geom_id: 0, slot: 0, baked: true, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 6334356113930313994, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [1, 2, 3, 4, 5, 6] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: true, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/World/ShotCam"), cameras: ["/World/ShotCam"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/World/ShotCam"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/materialx_surfaces_usda-ca1ad78e541d4d41-1.image b/crates/crust-core/tests/data/import_baselines/materialx_surfaces_usda-ca1ad78e541d4d41-1.image new file mode 100644 index 000000000..b5b48ffea --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/materialx_surfaces_usda-ca1ad78e541d4d41-1.image @@ -0,0 +1 @@ +640x400 16spp clamp-off 327348653f0f18b7 diff --git a/crates/crust-core/tests/data/import_baselines/materialx_teapot_usda-2d8b448afc9a82e2-1.digest b/crates/crust-core/tests/data/import_baselines/materialx_teapot_usda-2d8b448afc9a82e2-1.digest new file mode 100644 index 000000000..dcd71aa5d --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/materialx_teapot_usda-2d8b448afc9a82e2-1.digest @@ -0,0 +1,50 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/World/ShotCam") +camera: Camera { origin: Vec3A(0.46, -0.5, 0.36), lower_left_corner: Vec3A(-0.17507109, -0.24858424, -0.04130861), horizontal: Vec3A(0.4534639, 0.40702486, 0.0), vertical: Vec3A(-0.07729147, 0.08610994, 0.32263348), u: Vec3A(0.74418515, 0.66797346, 0.0), v: Vec3A(-0.22550038, 0.25122857, 0.9412937), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: Some("/Render/settings") +settings: RenderSettings { samples_per_pixel: 128, max_depth: 12, width: 960, height: 540, region: PixelRect { x0: 0, y0: 0, x1: 960, y1: 540 }, min_samples_per_pixel: 32, variance_threshold: 0.02, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 42.0, aperture: [36.0, 15.2908], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 0.7109 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/materialx_teapot.usda"], invisible_overrides: Some(0) } +layer: $DIR/materialx_teapot.usda +layer: /home/philippe.llerena/Workspace/samples/MaterialXTeapotLion-1.0/Teapot/Geometry/teapot.usda +layer: /home/philippe.llerena/Workspace/samples/MaterialXTeapotLion-1.0/Teapot/teapot.usda +warning: Warning { code: AssetUnsupportedByHost, kind: Skipped, count: 15, prims: [], message: "Asset loader does not decode UV textures: /home/philippe.llerena/Workspace/samples/MaterialXTeapotLion-1.0/Teapot/Looks/../Texture/TeapotMetal_L1Base/Teapot_TeapotMetal_Normal_concrete.png ignored — the input falls back to its constant value." } +lights: 3 +light 0: area name Some("/World/Rim") lpe None pmf 0.33333334 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 1: area name Some("/World/Key") lpe None pmf 0.33333334 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 2: dome name Some("/World/Sky") lpe None pmf 0.33333334 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 6 geometries, PrimitiveBreakdown { triangles: 259870, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 259870, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +geom 0: material #0 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:1068fc4a796550f2 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=2:1068fc4a796550f2 +geom 1: material #1 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:30d55baf131c75e7 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=2:30d55baf131c75e7 +geom 2: material #2 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:d4a5c9127205c3c5 camera=2:d4a5c9127205c3c5 shadow=2:d4a5c9127205c3c5 indirect=2:d4a5c9127205c3c5 +geom 3: material #3 Signature { kind: "MaterialX", cutout: false, straight: false, boundary: false, emits: false, uv: true, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv Some(0) shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=39620:e6201f1def4ba88d camera=39620:e6201f1def4ba88d shadow=39620:e6201f1def4ba88d indirect=39620:e6201f1def4ba88d +geom 4: material #4 Signature { kind: "MaterialX", cutout: false, straight: false, boundary: false, emits: false, uv: true, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv Some(1) shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=44096:e684c755747a3941 camera=44096:e684c755747a3941 shadow=44096:e684c755747a3941 indirect=44096:e684c755747a3941 +geom 5: material #4 Signature { kind: "MaterialX", cutout: false, straight: false, boundary: false, emits: false, uv: true, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv Some(2) shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=176148:88e3658c815ba93d camera=176148:88e3658c815ba93d shadow=176148:88e3658c815ba93d indirect=176148:88e3658c815ba93d +provenance material /World/Looks/GroundMaterial: MaterialOrigin { slots: [2], displaced: false } +provenance material /World/Teapot/Looks/TeapotCeramic: MaterialOrigin { slots: [4, 5], displaced: false } +provenance material /World/Teapot/Looks/TeapotMetal: MaterialOrigin { slots: [3], displaced: false } +provenance material read: ("/Teapot/Looks/TeapotCeramic", "/World/Teapot/Looks/TeapotCeramic") +provenance material read: ("/Teapot/Looks/TeapotMetal", "/World/Teapot/Looks/TeapotMetal") +provenance light /World/Key: LightOrigin { index: 1, geoms: 1..2 } +provenance light /World/Rim: LightOrigin { index: 0, geoms: 0..1 } +provenance light /World/Sky: LightOrigin { index: 2, geoms: 2..2 } +provenance geometry 0..1: /World/Rim +provenance geometry 1..2: /World/Key +provenance geometry 2..3: /World/Ground +provenance geometry 3..4: /World/Teapot/Teapot_Handle/Teapot_Handle +provenance geometry 4..5: /World/Teapot/Teapot_Lid/Teapot_Lid +provenance geometry 5..6: /World/Teapot/Teapot_Body/Teapot_Body +provenance mesh: MeshOrigin { geom_id: 2, slot: 0, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 3, slot: 1, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 4, slot: 2, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 5, slot: 3, baked: true, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 12600948678966428397, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 1: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 1756143909479177731, n_points: 19812, n_indices: 79240, n_uvs: Some(20810), smooth: true, material: 1 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 2: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 12119563787018499533, n_points: 22050, n_indices: 88192, n_uvs: Some(22250), smooth: true, material: 2 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 3: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 14759424648495852877, n_points: 88070, n_indices: 352296, n_uvs: Some(91044), smooth: true, material: 2 }), placements: 1, shared: false, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 1, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/World/ShotCam"), cameras: ["/World/ShotCam"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/World/ShotCam"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/materialx_teapot_usda-2d8b448afc9a82e2-1.image b/crates/crust-core/tests/data/import_baselines/materialx_teapot_usda-2d8b448afc9a82e2-1.image new file mode 100644 index 000000000..71e8c8c05 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/materialx_teapot_usda-2d8b448afc9a82e2-1.image @@ -0,0 +1 @@ +960x540 16spp clamp-off 8d5988be50958c3c diff --git a/crates/crust-core/tests/data/import_baselines/materialx_teapot_usda-2d8b448afc9a82e2-2.digest b/crates/crust-core/tests/data/import_baselines/materialx_teapot_usda-2d8b448afc9a82e2-2.digest new file mode 100644 index 000000000..dcd71aa5d --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/materialx_teapot_usda-2d8b448afc9a82e2-2.digest @@ -0,0 +1,50 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/World/ShotCam") +camera: Camera { origin: Vec3A(0.46, -0.5, 0.36), lower_left_corner: Vec3A(-0.17507109, -0.24858424, -0.04130861), horizontal: Vec3A(0.4534639, 0.40702486, 0.0), vertical: Vec3A(-0.07729147, 0.08610994, 0.32263348), u: Vec3A(0.74418515, 0.66797346, 0.0), v: Vec3A(-0.22550038, 0.25122857, 0.9412937), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: Some("/Render/settings") +settings: RenderSettings { samples_per_pixel: 128, max_depth: 12, width: 960, height: 540, region: PixelRect { x0: 0, y0: 0, x1: 960, y1: 540 }, min_samples_per_pixel: 32, variance_threshold: 0.02, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 42.0, aperture: [36.0, 15.2908], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 0.7109 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/materialx_teapot.usda"], invisible_overrides: Some(0) } +layer: $DIR/materialx_teapot.usda +layer: /home/philippe.llerena/Workspace/samples/MaterialXTeapotLion-1.0/Teapot/Geometry/teapot.usda +layer: /home/philippe.llerena/Workspace/samples/MaterialXTeapotLion-1.0/Teapot/teapot.usda +warning: Warning { code: AssetUnsupportedByHost, kind: Skipped, count: 15, prims: [], message: "Asset loader does not decode UV textures: /home/philippe.llerena/Workspace/samples/MaterialXTeapotLion-1.0/Teapot/Looks/../Texture/TeapotMetal_L1Base/Teapot_TeapotMetal_Normal_concrete.png ignored — the input falls back to its constant value." } +lights: 3 +light 0: area name Some("/World/Rim") lpe None pmf 0.33333334 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 1: area name Some("/World/Key") lpe None pmf 0.33333334 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 2: dome name Some("/World/Sky") lpe None pmf 0.33333334 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 6 geometries, PrimitiveBreakdown { triangles: 259870, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 259870, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +geom 0: material #0 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:1068fc4a796550f2 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=2:1068fc4a796550f2 +geom 1: material #1 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:30d55baf131c75e7 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=2:30d55baf131c75e7 +geom 2: material #2 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:d4a5c9127205c3c5 camera=2:d4a5c9127205c3c5 shadow=2:d4a5c9127205c3c5 indirect=2:d4a5c9127205c3c5 +geom 3: material #3 Signature { kind: "MaterialX", cutout: false, straight: false, boundary: false, emits: false, uv: true, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv Some(0) shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=39620:e6201f1def4ba88d camera=39620:e6201f1def4ba88d shadow=39620:e6201f1def4ba88d indirect=39620:e6201f1def4ba88d +geom 4: material #4 Signature { kind: "MaterialX", cutout: false, straight: false, boundary: false, emits: false, uv: true, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv Some(1) shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=44096:e684c755747a3941 camera=44096:e684c755747a3941 shadow=44096:e684c755747a3941 indirect=44096:e684c755747a3941 +geom 5: material #4 Signature { kind: "MaterialX", cutout: false, straight: false, boundary: false, emits: false, uv: true, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv Some(2) shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=176148:88e3658c815ba93d camera=176148:88e3658c815ba93d shadow=176148:88e3658c815ba93d indirect=176148:88e3658c815ba93d +provenance material /World/Looks/GroundMaterial: MaterialOrigin { slots: [2], displaced: false } +provenance material /World/Teapot/Looks/TeapotCeramic: MaterialOrigin { slots: [4, 5], displaced: false } +provenance material /World/Teapot/Looks/TeapotMetal: MaterialOrigin { slots: [3], displaced: false } +provenance material read: ("/Teapot/Looks/TeapotCeramic", "/World/Teapot/Looks/TeapotCeramic") +provenance material read: ("/Teapot/Looks/TeapotMetal", "/World/Teapot/Looks/TeapotMetal") +provenance light /World/Key: LightOrigin { index: 1, geoms: 1..2 } +provenance light /World/Rim: LightOrigin { index: 0, geoms: 0..1 } +provenance light /World/Sky: LightOrigin { index: 2, geoms: 2..2 } +provenance geometry 0..1: /World/Rim +provenance geometry 1..2: /World/Key +provenance geometry 2..3: /World/Ground +provenance geometry 3..4: /World/Teapot/Teapot_Handle/Teapot_Handle +provenance geometry 4..5: /World/Teapot/Teapot_Lid/Teapot_Lid +provenance geometry 5..6: /World/Teapot/Teapot_Body/Teapot_Body +provenance mesh: MeshOrigin { geom_id: 2, slot: 0, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 3, slot: 1, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 4, slot: 2, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 5, slot: 3, baked: true, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 12600948678966428397, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 1: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 1756143909479177731, n_points: 19812, n_indices: 79240, n_uvs: Some(20810), smooth: true, material: 1 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 2: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 12119563787018499533, n_points: 22050, n_indices: 88192, n_uvs: Some(22250), smooth: true, material: 2 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 3: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 14759424648495852877, n_points: 88070, n_indices: 352296, n_uvs: Some(91044), smooth: true, material: 2 }), placements: 1, shared: false, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 1, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/World/ShotCam"), cameras: ["/World/ShotCam"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/World/ShotCam"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/materialx_teapot_usda-2d8b448afc9a82e2-2.image b/crates/crust-core/tests/data/import_baselines/materialx_teapot_usda-2d8b448afc9a82e2-2.image new file mode 100644 index 000000000..71e8c8c05 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/materialx_teapot_usda-2d8b448afc9a82e2-2.image @@ -0,0 +1 @@ +960x540 16spp clamp-off 8d5988be50958c3c diff --git a/crates/crust-core/tests/data/import_baselines/materialx_teapot_usda-6ea1bea03dbe6c0d-1.digest b/crates/crust-core/tests/data/import_baselines/materialx_teapot_usda-6ea1bea03dbe6c0d-1.digest new file mode 100644 index 000000000..f32d2d3a2 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/materialx_teapot_usda-6ea1bea03dbe6c0d-1.digest @@ -0,0 +1,49 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/World/ShotCam") +camera: Camera { origin: Vec3A(0.46, -0.5, 0.36), lower_left_corner: Vec3A(-0.17507109, -0.24858424, -0.04130861), horizontal: Vec3A(0.4534639, 0.40702486, 0.0), vertical: Vec3A(-0.07729147, 0.08610994, 0.32263348), u: Vec3A(0.74418515, 0.66797346, 0.0), v: Vec3A(-0.22550038, 0.25122857, 0.9412937), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: Some("/Render/settings") +settings: RenderSettings { samples_per_pixel: 128, max_depth: 12, width: 960, height: 540, region: PixelRect { x0: 0, y0: 0, x1: 960, y1: 540 }, min_samples_per_pixel: 32, variance_threshold: 0.02, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 42.0, aperture: [36.0, 15.2908], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 0.7109 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/materialx_teapot.usda"], invisible_overrides: Some(0) } +layer: $DIR/materialx_teapot.usda +layer: /home/philippe.llerena/Workspace/samples/MaterialXTeapotLion-1.0/Teapot/Geometry/teapot.usda +layer: /home/philippe.llerena/Workspace/samples/MaterialXTeapotLion-1.0/Teapot/teapot.usda +lights: 3 +light 0: area name Some("/World/Rim") lpe None pmf 0.33333334 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 1: area name Some("/World/Key") lpe None pmf 0.33333334 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 2: dome name Some("/World/Sky") lpe None pmf 0.33333334 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 6 geometries, PrimitiveBreakdown { triangles: 259870, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 259870, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +geom 0: material #0 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:1068fc4a796550f2 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=2:1068fc4a796550f2 +geom 1: material #1 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:30d55baf131c75e7 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=2:30d55baf131c75e7 +geom 2: material #2 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:d4a5c9127205c3c5 camera=2:d4a5c9127205c3c5 shadow=2:d4a5c9127205c3c5 indirect=2:d4a5c9127205c3c5 +geom 3: material #3 Signature { kind: "MaterialX", cutout: false, straight: false, boundary: false, emits: false, uv: true, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv Some(0) shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=39620:e6201f1def4ba88d camera=39620:e6201f1def4ba88d shadow=39620:e6201f1def4ba88d indirect=39620:e6201f1def4ba88d +geom 4: material #4 Signature { kind: "MaterialX", cutout: false, straight: false, boundary: false, emits: false, uv: true, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv Some(1) shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=44096:e684c755747a3941 camera=44096:e684c755747a3941 shadow=44096:e684c755747a3941 indirect=44096:e684c755747a3941 +geom 5: material #4 Signature { kind: "MaterialX", cutout: false, straight: false, boundary: false, emits: false, uv: true, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv Some(2) shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=176148:88e3658c815ba93d camera=176148:88e3658c815ba93d shadow=176148:88e3658c815ba93d indirect=176148:88e3658c815ba93d +provenance material /World/Looks/GroundMaterial: MaterialOrigin { slots: [2], displaced: false } +provenance material /World/Teapot/Looks/TeapotCeramic: MaterialOrigin { slots: [4, 5], displaced: false } +provenance material /World/Teapot/Looks/TeapotMetal: MaterialOrigin { slots: [3], displaced: false } +provenance material read: ("/Teapot/Looks/TeapotCeramic", "/World/Teapot/Looks/TeapotCeramic") +provenance material read: ("/Teapot/Looks/TeapotMetal", "/World/Teapot/Looks/TeapotMetal") +provenance light /World/Key: LightOrigin { index: 1, geoms: 1..2 } +provenance light /World/Rim: LightOrigin { index: 0, geoms: 0..1 } +provenance light /World/Sky: LightOrigin { index: 2, geoms: 2..2 } +provenance geometry 0..1: /World/Rim +provenance geometry 1..2: /World/Key +provenance geometry 2..3: /World/Ground +provenance geometry 3..4: /World/Teapot/Teapot_Handle/Teapot_Handle +provenance geometry 4..5: /World/Teapot/Teapot_Lid/Teapot_Lid +provenance geometry 5..6: /World/Teapot/Teapot_Body/Teapot_Body +provenance mesh: MeshOrigin { geom_id: 2, slot: 0, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 3, slot: 1, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 4, slot: 2, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 5, slot: 3, baked: true, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 12600948678966428397, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 1: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 1756143909479177731, n_points: 19812, n_indices: 79240, n_uvs: Some(20810), smooth: true, material: 1 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 2: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 12119563787018499533, n_points: 22050, n_indices: 88192, n_uvs: Some(22250), smooth: true, material: 2 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 3: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 14759424648495852877, n_points: 88070, n_indices: 352296, n_uvs: Some(91044), smooth: true, material: 2 }), placements: 1, shared: false, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: true, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 1, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/World/ShotCam"), cameras: ["/World/ShotCam"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/World/ShotCam"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/materialx_teapot_usda-6ea1bea03dbe6c0d-1.image b/crates/crust-core/tests/data/import_baselines/materialx_teapot_usda-6ea1bea03dbe6c0d-1.image new file mode 100644 index 000000000..b07e86748 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/materialx_teapot_usda-6ea1bea03dbe6c0d-1.image @@ -0,0 +1 @@ +960x540 16spp clamp-off f828b69f81e51210 diff --git a/crates/crust-core/tests/data/import_baselines/materialx_volume_usda-0d615ee9e93f873e-1.digest b/crates/crust-core/tests/data/import_baselines/materialx_volume_usda-0d615ee9e93f873e-1.digest new file mode 100644 index 000000000..9c8c7ad32 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/materialx_volume_usda-0d615ee9e93f873e-1.digest @@ -0,0 +1,41 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/World/ShotCam") +camera: Camera { origin: Vec3A(0.0, 1.6, 8.0), lower_left_corner: Vec3A(-5.142858, -2.0026271, -1.6764317), horizontal: Vec3A(10.285716, -0.0, 0.0), vertical: Vec3A(0.0, 5.114685, -0.53757507), u: Vec3A(1.0, -0.0, 0.0), v: Vec3A(0.0, 0.9945219, -0.104528464), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: Some("/Render/settings") +settings: RenderSettings { samples_per_pixel: 64, max_depth: 16, width: 640, height: 320, region: PixelRect { x0: 0, y0: 0, x1: 640, y1: 320 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 35.0, aperture: [36.0, 15.2908], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 10.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/materialx_volume.usda"], invisible_overrides: Some(0) } +layer: $DIR/materialx_volume.usda +warning: Warning { code: AssetUnsupportedByHost, kind: Skipped, count: 1, prims: [], message: "No asset loader: environment map $DIR/sky_env.exr ignored — the dome falls back to its uniform colour. Use Scene::from_usd_with_assets to supply one." } +lights: 2 +light 0: area name Some("/World/Key") lpe None pmf 0.5 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 1: dome name Some("/World/Sky") lpe None pmf 0.5 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 6 geometries, PrimitiveBreakdown { triangles: 14, spheres: 4, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 14, spheres: 4, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +geom 0: material #0 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:b2517a075775a01d camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=1:b2517a075775a01d +geom 1: material #1 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:58d360c7905fa0c5 camera=2:58d360c7905fa0c5 shadow=2:58d360c7905fa0c5 indirect=2:58d360c7905fa0c5 +geom 2: material #2 Signature { kind: "MaterialX", cutout: false, straight: false, boundary: false, emits: false, uv: true, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:a2be39f211ab66a2 camera=1:a2be39f211ab66a2 shadow=1:a2be39f211ab66a2 indirect=1:a2be39f211ab66a2 +geom 3: material #3 Signature { kind: "MaterialX", cutout: false, straight: true, boundary: false, emits: false, uv: true, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:b3ac5caa5601a5fa camera=1:b3ac5caa5601a5fa shadow=1:b3ac5caa5601a5fa indirect=1:b3ac5caa5601a5fa +geom 4: material #1 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:d612f3480a4d23b4 camera=1:d612f3480a4d23b4 shadow=1:d612f3480a4d23b4 indirect=1:d612f3480a4d23b4 +geom 5: material #4 Signature { kind: "MaterialX", cutout: false, straight: false, boundary: true, emits: false, uv: true, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=12:774cf751cac64135 camera=12:774cf751cac64135 shadow=12:774cf751cac64135 indirect=12:774cf751cac64135 +provenance material /World/Looks/Copper: MaterialOrigin { slots: [2], displaced: false } +provenance material /World/Looks/Fog: MaterialOrigin { slots: [5], displaced: false } +provenance material /World/Looks/Grey: MaterialOrigin { slots: [1, 4], displaced: false } +provenance material /World/Looks/MurkyGlass: MaterialOrigin { slots: [3], displaced: false } +provenance light /World/Key: LightOrigin { index: 0, geoms: 0..1 } +provenance light /World/Sky: LightOrigin { index: 1, geoms: 1..1 } +provenance geometry 0..1: /World/Key +provenance geometry 1..2: /World/Floor +provenance geometry 2..3: /World/Copper +provenance geometry 3..4: /World/MurkyGlass +provenance geometry 4..5: /World/BallInFog +provenance geometry 5..6: /World/FogBox +provenance mesh: MeshOrigin { geom_id: 1, slot: 0, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 5, slot: 1, baked: true, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 6334356113930313994, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 1: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 9884436589796233226, n_points: 8, n_indices: 24, n_uvs: None, smooth: false, material: 1 }), placements: 1, shared: false, displaced: false } +provenance spheres: [2, 3, 4] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/World/ShotCam"), cameras: ["/World/ShotCam"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/World/ShotCam"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/materialx_volume_usda-0d615ee9e93f873e-1.image b/crates/crust-core/tests/data/import_baselines/materialx_volume_usda-0d615ee9e93f873e-1.image new file mode 100644 index 000000000..f4a834080 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/materialx_volume_usda-0d615ee9e93f873e-1.image @@ -0,0 +1 @@ +640x320 16spp clamp-off 82ba0316845cb3d3 diff --git a/crates/crust-core/tests/data/import_baselines/materialx_volume_usda-dbd96c41f0cfcd9f-1.digest b/crates/crust-core/tests/data/import_baselines/materialx_volume_usda-dbd96c41f0cfcd9f-1.digest new file mode 100644 index 000000000..228eb1e14 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/materialx_volume_usda-dbd96c41f0cfcd9f-1.digest @@ -0,0 +1,40 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/World/ShotCam") +camera: Camera { origin: Vec3A(0.0, 1.6, 8.0), lower_left_corner: Vec3A(-5.142858, -2.0026271, -1.6764317), horizontal: Vec3A(10.285716, -0.0, 0.0), vertical: Vec3A(0.0, 5.114685, -0.53757507), u: Vec3A(1.0, -0.0, 0.0), v: Vec3A(0.0, 0.9945219, -0.104528464), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: Some("/Render/settings") +settings: RenderSettings { samples_per_pixel: 64, max_depth: 16, width: 640, height: 320, region: PixelRect { x0: 0, y0: 0, x1: 640, y1: 320 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 35.0, aperture: [36.0, 15.2908], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 10.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/materialx_volume.usda"], invisible_overrides: Some(0) } +layer: $DIR/materialx_volume.usda +lights: 2 +light 0: area name Some("/World/Key") lpe None pmf 0.5 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 1: dome name Some("/World/Sky") lpe None pmf 0.5 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 6 geometries, PrimitiveBreakdown { triangles: 14, spheres: 4, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 14, spheres: 4, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +geom 0: material #0 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:b2517a075775a01d camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=1:b2517a075775a01d +geom 1: material #1 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:58d360c7905fa0c5 camera=2:58d360c7905fa0c5 shadow=2:58d360c7905fa0c5 indirect=2:58d360c7905fa0c5 +geom 2: material #2 Signature { kind: "MaterialX", cutout: false, straight: false, boundary: false, emits: false, uv: true, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:a2be39f211ab66a2 camera=1:a2be39f211ab66a2 shadow=1:a2be39f211ab66a2 indirect=1:a2be39f211ab66a2 +geom 3: material #3 Signature { kind: "MaterialX", cutout: false, straight: true, boundary: false, emits: false, uv: true, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:b3ac5caa5601a5fa camera=1:b3ac5caa5601a5fa shadow=1:b3ac5caa5601a5fa indirect=1:b3ac5caa5601a5fa +geom 4: material #1 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:d612f3480a4d23b4 camera=1:d612f3480a4d23b4 shadow=1:d612f3480a4d23b4 indirect=1:d612f3480a4d23b4 +geom 5: material #4 Signature { kind: "MaterialX", cutout: false, straight: false, boundary: true, emits: false, uv: true, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=12:774cf751cac64135 camera=12:774cf751cac64135 shadow=12:774cf751cac64135 indirect=12:774cf751cac64135 +provenance material /World/Looks/Copper: MaterialOrigin { slots: [2], displaced: false } +provenance material /World/Looks/Fog: MaterialOrigin { slots: [5], displaced: false } +provenance material /World/Looks/Grey: MaterialOrigin { slots: [1, 4], displaced: false } +provenance material /World/Looks/MurkyGlass: MaterialOrigin { slots: [3], displaced: false } +provenance light /World/Key: LightOrigin { index: 0, geoms: 0..1 } +provenance light /World/Sky: LightOrigin { index: 1, geoms: 1..1 } +provenance geometry 0..1: /World/Key +provenance geometry 1..2: /World/Floor +provenance geometry 2..3: /World/Copper +provenance geometry 3..4: /World/MurkyGlass +provenance geometry 4..5: /World/BallInFog +provenance geometry 5..6: /World/FogBox +provenance mesh: MeshOrigin { geom_id: 1, slot: 0, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 5, slot: 1, baked: true, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 6334356113930313994, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 1: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 9884436589796233226, n_points: 8, n_indices: 24, n_uvs: None, smooth: false, material: 1 }), placements: 1, shared: false, displaced: false } +provenance spheres: [2, 3, 4] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: true, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/World/ShotCam"), cameras: ["/World/ShotCam"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/World/ShotCam"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/materialx_volume_usda-dbd96c41f0cfcd9f-1.image b/crates/crust-core/tests/data/import_baselines/materialx_volume_usda-dbd96c41f0cfcd9f-1.image new file mode 100644 index 000000000..116ea7909 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/materialx_volume_usda-dbd96c41f0cfcd9f-1.image @@ -0,0 +1 @@ +640x320 16spp clamp-off dfb6632cfcd081b5 diff --git a/crates/crust-core/tests/data/import_baselines/materialx_volume_usda-f4f640ec1f11b3d3-1.digest b/crates/crust-core/tests/data/import_baselines/materialx_volume_usda-f4f640ec1f11b3d3-1.digest new file mode 100644 index 000000000..9c8c7ad32 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/materialx_volume_usda-f4f640ec1f11b3d3-1.digest @@ -0,0 +1,41 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/World/ShotCam") +camera: Camera { origin: Vec3A(0.0, 1.6, 8.0), lower_left_corner: Vec3A(-5.142858, -2.0026271, -1.6764317), horizontal: Vec3A(10.285716, -0.0, 0.0), vertical: Vec3A(0.0, 5.114685, -0.53757507), u: Vec3A(1.0, -0.0, 0.0), v: Vec3A(0.0, 0.9945219, -0.104528464), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: Some("/Render/settings") +settings: RenderSettings { samples_per_pixel: 64, max_depth: 16, width: 640, height: 320, region: PixelRect { x0: 0, y0: 0, x1: 640, y1: 320 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 35.0, aperture: [36.0, 15.2908], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 10.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/materialx_volume.usda"], invisible_overrides: Some(0) } +layer: $DIR/materialx_volume.usda +warning: Warning { code: AssetUnsupportedByHost, kind: Skipped, count: 1, prims: [], message: "No asset loader: environment map $DIR/sky_env.exr ignored — the dome falls back to its uniform colour. Use Scene::from_usd_with_assets to supply one." } +lights: 2 +light 0: area name Some("/World/Key") lpe None pmf 0.5 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 1: dome name Some("/World/Sky") lpe None pmf 0.5 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 6 geometries, PrimitiveBreakdown { triangles: 14, spheres: 4, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 14, spheres: 4, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +geom 0: material #0 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:b2517a075775a01d camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=1:b2517a075775a01d +geom 1: material #1 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:58d360c7905fa0c5 camera=2:58d360c7905fa0c5 shadow=2:58d360c7905fa0c5 indirect=2:58d360c7905fa0c5 +geom 2: material #2 Signature { kind: "MaterialX", cutout: false, straight: false, boundary: false, emits: false, uv: true, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:a2be39f211ab66a2 camera=1:a2be39f211ab66a2 shadow=1:a2be39f211ab66a2 indirect=1:a2be39f211ab66a2 +geom 3: material #3 Signature { kind: "MaterialX", cutout: false, straight: true, boundary: false, emits: false, uv: true, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:b3ac5caa5601a5fa camera=1:b3ac5caa5601a5fa shadow=1:b3ac5caa5601a5fa indirect=1:b3ac5caa5601a5fa +geom 4: material #1 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:d612f3480a4d23b4 camera=1:d612f3480a4d23b4 shadow=1:d612f3480a4d23b4 indirect=1:d612f3480a4d23b4 +geom 5: material #4 Signature { kind: "MaterialX", cutout: false, straight: false, boundary: true, emits: false, uv: true, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=12:774cf751cac64135 camera=12:774cf751cac64135 shadow=12:774cf751cac64135 indirect=12:774cf751cac64135 +provenance material /World/Looks/Copper: MaterialOrigin { slots: [2], displaced: false } +provenance material /World/Looks/Fog: MaterialOrigin { slots: [5], displaced: false } +provenance material /World/Looks/Grey: MaterialOrigin { slots: [1, 4], displaced: false } +provenance material /World/Looks/MurkyGlass: MaterialOrigin { slots: [3], displaced: false } +provenance light /World/Key: LightOrigin { index: 0, geoms: 0..1 } +provenance light /World/Sky: LightOrigin { index: 1, geoms: 1..1 } +provenance geometry 0..1: /World/Key +provenance geometry 1..2: /World/Floor +provenance geometry 2..3: /World/Copper +provenance geometry 3..4: /World/MurkyGlass +provenance geometry 4..5: /World/BallInFog +provenance geometry 5..6: /World/FogBox +provenance mesh: MeshOrigin { geom_id: 1, slot: 0, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 5, slot: 1, baked: true, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 6334356113930313994, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 1: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 9884436589796233226, n_points: 8, n_indices: 24, n_uvs: None, smooth: false, material: 1 }), placements: 1, shared: false, displaced: false } +provenance spheres: [2, 3, 4] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/World/ShotCam"), cameras: ["/World/ShotCam"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/World/ShotCam"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/materialx_volume_usda-f4f640ec1f11b3d3-1.image b/crates/crust-core/tests/data/import_baselines/materialx_volume_usda-f4f640ec1f11b3d3-1.image new file mode 100644 index 000000000..f4a834080 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/materialx_volume_usda-f4f640ec1f11b3d3-1.image @@ -0,0 +1 @@ +640x320 16spp clamp-off 82ba0316845cb3d3 diff --git a/crates/crust-core/tests/data/import_baselines/materialx_volume_usda-f4f640ec1f11b3d3-2.digest b/crates/crust-core/tests/data/import_baselines/materialx_volume_usda-f4f640ec1f11b3d3-2.digest new file mode 100644 index 000000000..9c8c7ad32 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/materialx_volume_usda-f4f640ec1f11b3d3-2.digest @@ -0,0 +1,41 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/World/ShotCam") +camera: Camera { origin: Vec3A(0.0, 1.6, 8.0), lower_left_corner: Vec3A(-5.142858, -2.0026271, -1.6764317), horizontal: Vec3A(10.285716, -0.0, 0.0), vertical: Vec3A(0.0, 5.114685, -0.53757507), u: Vec3A(1.0, -0.0, 0.0), v: Vec3A(0.0, 0.9945219, -0.104528464), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: Some("/Render/settings") +settings: RenderSettings { samples_per_pixel: 64, max_depth: 16, width: 640, height: 320, region: PixelRect { x0: 0, y0: 0, x1: 640, y1: 320 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 35.0, aperture: [36.0, 15.2908], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 10.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/materialx_volume.usda"], invisible_overrides: Some(0) } +layer: $DIR/materialx_volume.usda +warning: Warning { code: AssetUnsupportedByHost, kind: Skipped, count: 1, prims: [], message: "No asset loader: environment map $DIR/sky_env.exr ignored — the dome falls back to its uniform colour. Use Scene::from_usd_with_assets to supply one." } +lights: 2 +light 0: area name Some("/World/Key") lpe None pmf 0.5 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 1: dome name Some("/World/Sky") lpe None pmf 0.5 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 6 geometries, PrimitiveBreakdown { triangles: 14, spheres: 4, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 14, spheres: 4, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +geom 0: material #0 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:b2517a075775a01d camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=1:b2517a075775a01d +geom 1: material #1 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:58d360c7905fa0c5 camera=2:58d360c7905fa0c5 shadow=2:58d360c7905fa0c5 indirect=2:58d360c7905fa0c5 +geom 2: material #2 Signature { kind: "MaterialX", cutout: false, straight: false, boundary: false, emits: false, uv: true, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:a2be39f211ab66a2 camera=1:a2be39f211ab66a2 shadow=1:a2be39f211ab66a2 indirect=1:a2be39f211ab66a2 +geom 3: material #3 Signature { kind: "MaterialX", cutout: false, straight: true, boundary: false, emits: false, uv: true, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:b3ac5caa5601a5fa camera=1:b3ac5caa5601a5fa shadow=1:b3ac5caa5601a5fa indirect=1:b3ac5caa5601a5fa +geom 4: material #1 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:d612f3480a4d23b4 camera=1:d612f3480a4d23b4 shadow=1:d612f3480a4d23b4 indirect=1:d612f3480a4d23b4 +geom 5: material #4 Signature { kind: "MaterialX", cutout: false, straight: false, boundary: true, emits: false, uv: true, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=12:774cf751cac64135 camera=12:774cf751cac64135 shadow=12:774cf751cac64135 indirect=12:774cf751cac64135 +provenance material /World/Looks/Copper: MaterialOrigin { slots: [2], displaced: false } +provenance material /World/Looks/Fog: MaterialOrigin { slots: [5], displaced: false } +provenance material /World/Looks/Grey: MaterialOrigin { slots: [1, 4], displaced: false } +provenance material /World/Looks/MurkyGlass: MaterialOrigin { slots: [3], displaced: false } +provenance light /World/Key: LightOrigin { index: 0, geoms: 0..1 } +provenance light /World/Sky: LightOrigin { index: 1, geoms: 1..1 } +provenance geometry 0..1: /World/Key +provenance geometry 1..2: /World/Floor +provenance geometry 2..3: /World/Copper +provenance geometry 3..4: /World/MurkyGlass +provenance geometry 4..5: /World/BallInFog +provenance geometry 5..6: /World/FogBox +provenance mesh: MeshOrigin { geom_id: 1, slot: 0, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 5, slot: 1, baked: true, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 6334356113930313994, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 1: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 9884436589796233226, n_points: 8, n_indices: 24, n_uvs: None, smooth: false, material: 1 }), placements: 1, shared: false, displaced: false } +provenance spheres: [2, 3, 4] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/World/ShotCam"), cameras: ["/World/ShotCam"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/World/ShotCam"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/materialx_volume_usda-f4f640ec1f11b3d3-2.image b/crates/crust-core/tests/data/import_baselines/materialx_volume_usda-f4f640ec1f11b3d3-2.image new file mode 100644 index 000000000..f4a834080 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/materialx_volume_usda-f4f640ec1f11b3d3-2.image @@ -0,0 +1 @@ +640x320 16spp clamp-off 82ba0316845cb3d3 diff --git a/crates/crust-core/tests/data/import_baselines/matrix_usda-9dd65c424c31f5e5-1.digest b/crates/crust-core/tests/data/import_baselines/matrix_usda-9dd65c424c31f5e5-1.digest new file mode 100644 index 000000000..90cf1127a --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/matrix_usda-9dd65c424c31f5e5-1.digest @@ -0,0 +1,19 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: None +camera: Camera { origin: Vec3A(15.0, 3.0, 3.0), lower_left_corner: Vec3A(4.8863316, -0.044797063, 4.174048), horizontal: Vec3A(1.2295314, 0.0, -6.147657), vertical: Vec3A(-0.44830504, 3.4967792, -0.08966101), u: Vec3A(0.19611613, 0.0, -0.9805807), v: Vec3A(-0.1271232, 0.991561, -0.02542464), lens_radius: 0.05, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: None +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 640, height: 360, region: PixelRect { x0: 0, y0: 0, x1: 640, y1: 360 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: None, depth_of_field: true, motion_blur: false, layer_stack: ["$DIR/matrix.usda"], invisible_overrides: Some(0) } +layer: $DIR/matrix.usda +warning: Warning { code: CameraMissing, kind: Skipped, count: 1, prims: [], message: "USD stage has no UsdGeomCamera — falling back to world::get_settings camera" } +lights: 0 +volumes: 0 +world: 1 geometries, PrimitiveBreakdown { triangles: 0, spheres: 1, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 0, spheres: 1, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:e28621ea8ba02692 camera=1:e28621ea8ba02692 shadow=1:e28621ea8ba02692 indirect=1:e28621ea8ba02692 +provenance geometry 0..1: /World/A/S +provenance spheres: [0] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: None, cameras: [], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: None, offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/matrix_usda-9dd65c424c31f5e5-1.image b/crates/crust-core/tests/data/import_baselines/matrix_usda-9dd65c424c31f5e5-1.image new file mode 100644 index 000000000..c734c5b1d --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/matrix_usda-9dd65c424c31f5e5-1.image @@ -0,0 +1 @@ +640x360 16spp clamp-off a04a09c0d4b5e325 diff --git a/crates/crust-core/tests/data/import_baselines/matte_dome_usda-4775d0d18b535cf9-1.digest b/crates/crust-core/tests/data/import_baselines/matte_dome_usda-4775d0d18b535cf9-1.digest new file mode 100644 index 000000000..2c7a439c1 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/matte_dome_usda-4775d0d18b535cf9-1.digest @@ -0,0 +1,23 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: None +camera: Camera { origin: Vec3A(15.0, 3.0, 3.0), lower_left_corner: Vec3A(4.8863316, -0.044797063, 4.174048), horizontal: Vec3A(1.2295314, 0.0, -6.147657), vertical: Vec3A(-0.44830504, 3.4967792, -0.08966101), u: Vec3A(0.19611613, 0.0, -0.9805807), v: Vec3A(-0.1271232, 0.991561, -0.02542464), lens_radius: 0.05, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: Some("/Render/settings") +settings: RenderSettings { samples_per_pixel: 3, max_depth: 32, width: 8, height: 8, region: PixelRect { x0: 0, y0: 0, x1: 8, y1: 8 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: Some(PassSummary { path: "/Render/Passes/pass", holdouts: 0, camera_hidden: 0 }) +source: Source { lens: None, depth_of_field: true, motion_blur: false, layer_stack: ["$DIR/matte_dome.usda"], invisible_overrides: Some(0) } +layer: $DIR/matte_dome.usda +warning: Warning { code: CameraMissing, kind: Skipped, count: 1, prims: [], message: "USD stage has no UsdGeomCamera — falling back to world::get_settings camera" } +lights: 1 +light 0: dome name Some("/World/Sky") lpe None pmf 1.0 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 1 geometries, PrimitiveBreakdown { triangles: 2, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 2, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:2f65027762d8ffb5 camera=2:2f65027762d8ffb5 shadow=2:2f65027762d8ffb5 indirect=2:2f65027762d8ffb5 +provenance light /World/Sky: LightOrigin { index: 0, geoms: 0..0 } +provenance geometry 0..1: /World/Floor +provenance mesh: MeshOrigin { geom_id: 0, slot: 0, baked: true, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 11147341635340358220, n_points: 4, n_indices: 4, n_uvs: None, smooth: true, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: Some("/Render/Passes/pass"), keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: None, cameras: [], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: None, offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/matte_dome_usda-4775d0d18b535cf9-1.image b/crates/crust-core/tests/data/import_baselines/matte_dome_usda-4775d0d18b535cf9-1.image new file mode 100644 index 000000000..f874ef134 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/matte_dome_usda-4775d0d18b535cf9-1.image @@ -0,0 +1 @@ +8x8 16spp clamp-off 9c57df03b09e1554 diff --git a/crates/crust-core/tests/data/import_baselines/matte_dome_usda-5051117d6744b051-1.digest b/crates/crust-core/tests/data/import_baselines/matte_dome_usda-5051117d6744b051-1.digest new file mode 100644 index 000000000..d8811581b --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/matte_dome_usda-5051117d6744b051-1.digest @@ -0,0 +1,23 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: None +camera: Camera { origin: Vec3A(15.0, 3.0, 3.0), lower_left_corner: Vec3A(4.8863316, -0.044797063, 4.174048), horizontal: Vec3A(1.2295314, 0.0, -6.147657), vertical: Vec3A(-0.44830504, 3.4967792, -0.08966101), u: Vec3A(0.19611613, 0.0, -0.9805807), v: Vec3A(-0.1271232, 0.991561, -0.02542464), lens_radius: 0.05, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: Some("/Render/settings") +settings: RenderSettings { samples_per_pixel: 3, max_depth: 32, width: 8, height: 8, region: PixelRect { x0: 0, y0: 0, x1: 8, y1: 8 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: None, depth_of_field: true, motion_blur: false, layer_stack: ["$DIR/matte_dome.usda"], invisible_overrides: Some(0) } +layer: $DIR/matte_dome.usda +warning: Warning { code: CameraMissing, kind: Skipped, count: 1, prims: [], message: "USD stage has no UsdGeomCamera — falling back to world::get_settings camera" } +lights: 1 +light 0: dome name Some("/World/Sky") lpe None pmf 1.0 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 1 geometries, PrimitiveBreakdown { triangles: 2, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 2, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:2f65027762d8ffb5 camera=2:2f65027762d8ffb5 shadow=2:2f65027762d8ffb5 indirect=2:2f65027762d8ffb5 +provenance light /World/Sky: LightOrigin { index: 0, geoms: 0..0 } +provenance geometry 0..1: /World/Floor +provenance mesh: MeshOrigin { geom_id: 0, slot: 0, baked: true, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 11147341635340358220, n_points: 4, n_indices: 4, n_uvs: None, smooth: true, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: None, cameras: [], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: None, offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/matte_dome_usda-5051117d6744b051-1.image b/crates/crust-core/tests/data/import_baselines/matte_dome_usda-5051117d6744b051-1.image new file mode 100644 index 000000000..e1a656b71 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/matte_dome_usda-5051117d6744b051-1.image @@ -0,0 +1 @@ +8x8 16spp clamp-off 5a9f04a1349ce87a diff --git a/crates/crust-core/tests/data/import_baselines/matte_dome_usda-942a3b1e6f8ce42b-1.digest b/crates/crust-core/tests/data/import_baselines/matte_dome_usda-942a3b1e6f8ce42b-1.digest new file mode 100644 index 000000000..d8811581b --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/matte_dome_usda-942a3b1e6f8ce42b-1.digest @@ -0,0 +1,23 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: None +camera: Camera { origin: Vec3A(15.0, 3.0, 3.0), lower_left_corner: Vec3A(4.8863316, -0.044797063, 4.174048), horizontal: Vec3A(1.2295314, 0.0, -6.147657), vertical: Vec3A(-0.44830504, 3.4967792, -0.08966101), u: Vec3A(0.19611613, 0.0, -0.9805807), v: Vec3A(-0.1271232, 0.991561, -0.02542464), lens_radius: 0.05, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: Some("/Render/settings") +settings: RenderSettings { samples_per_pixel: 3, max_depth: 32, width: 8, height: 8, region: PixelRect { x0: 0, y0: 0, x1: 8, y1: 8 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: None, depth_of_field: true, motion_blur: false, layer_stack: ["$DIR/matte_dome.usda"], invisible_overrides: Some(0) } +layer: $DIR/matte_dome.usda +warning: Warning { code: CameraMissing, kind: Skipped, count: 1, prims: [], message: "USD stage has no UsdGeomCamera — falling back to world::get_settings camera" } +lights: 1 +light 0: dome name Some("/World/Sky") lpe None pmf 1.0 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 1 geometries, PrimitiveBreakdown { triangles: 2, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 2, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:2f65027762d8ffb5 camera=2:2f65027762d8ffb5 shadow=2:2f65027762d8ffb5 indirect=2:2f65027762d8ffb5 +provenance light /World/Sky: LightOrigin { index: 0, geoms: 0..0 } +provenance geometry 0..1: /World/Floor +provenance mesh: MeshOrigin { geom_id: 0, slot: 0, baked: true, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 11147341635340358220, n_points: 4, n_indices: 4, n_uvs: None, smooth: true, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: None, cameras: [], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: None, offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/matte_dome_usda-942a3b1e6f8ce42b-1.image b/crates/crust-core/tests/data/import_baselines/matte_dome_usda-942a3b1e6f8ce42b-1.image new file mode 100644 index 000000000..e1a656b71 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/matte_dome_usda-942a3b1e6f8ce42b-1.image @@ -0,0 +1 @@ +8x8 16spp clamp-off 5a9f04a1349ce87a diff --git a/crates/crust-core/tests/data/import_baselines/matte_dome_usda-e3baadd4a9e3ffb7-1.digest b/crates/crust-core/tests/data/import_baselines/matte_dome_usda-e3baadd4a9e3ffb7-1.digest new file mode 100644 index 000000000..2c7a439c1 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/matte_dome_usda-e3baadd4a9e3ffb7-1.digest @@ -0,0 +1,23 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: None +camera: Camera { origin: Vec3A(15.0, 3.0, 3.0), lower_left_corner: Vec3A(4.8863316, -0.044797063, 4.174048), horizontal: Vec3A(1.2295314, 0.0, -6.147657), vertical: Vec3A(-0.44830504, 3.4967792, -0.08966101), u: Vec3A(0.19611613, 0.0, -0.9805807), v: Vec3A(-0.1271232, 0.991561, -0.02542464), lens_radius: 0.05, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: Some("/Render/settings") +settings: RenderSettings { samples_per_pixel: 3, max_depth: 32, width: 8, height: 8, region: PixelRect { x0: 0, y0: 0, x1: 8, y1: 8 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: Some(PassSummary { path: "/Render/Passes/pass", holdouts: 0, camera_hidden: 0 }) +source: Source { lens: None, depth_of_field: true, motion_blur: false, layer_stack: ["$DIR/matte_dome.usda"], invisible_overrides: Some(0) } +layer: $DIR/matte_dome.usda +warning: Warning { code: CameraMissing, kind: Skipped, count: 1, prims: [], message: "USD stage has no UsdGeomCamera — falling back to world::get_settings camera" } +lights: 1 +light 0: dome name Some("/World/Sky") lpe None pmf 1.0 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 1 geometries, PrimitiveBreakdown { triangles: 2, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 2, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:2f65027762d8ffb5 camera=2:2f65027762d8ffb5 shadow=2:2f65027762d8ffb5 indirect=2:2f65027762d8ffb5 +provenance light /World/Sky: LightOrigin { index: 0, geoms: 0..0 } +provenance geometry 0..1: /World/Floor +provenance mesh: MeshOrigin { geom_id: 0, slot: 0, baked: true, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 11147341635340358220, n_points: 4, n_indices: 4, n_uvs: None, smooth: true, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: Some("/Render/Passes/pass"), keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: None, cameras: [], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: None, offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/matte_dome_usda-e3baadd4a9e3ffb7-1.image b/crates/crust-core/tests/data/import_baselines/matte_dome_usda-e3baadd4a9e3ffb7-1.image new file mode 100644 index 000000000..f874ef134 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/matte_dome_usda-e3baadd4a9e3ffb7-1.image @@ -0,0 +1 @@ +8x8 16spp clamp-off 9c57df03b09e1554 diff --git a/crates/crust-core/tests/data/import_baselines/max_depth_negative_usda-eec4c585057974f1-1.digest b/crates/crust-core/tests/data/import_baselines/max_depth_negative_usda-eec4c585057974f1-1.digest new file mode 100644 index 000000000..0861b4322 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/max_depth_negative_usda-eec4c585057974f1-1.digest @@ -0,0 +1,18 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: None +camera: Camera { origin: Vec3A(15.0, 3.0, 3.0), lower_left_corner: Vec3A(4.8863316, -0.044797063, 4.174048), horizontal: Vec3A(1.2295314, 0.0, -6.147657), vertical: Vec3A(-0.44830504, 3.4967792, -0.08966101), u: Vec3A(0.19611613, 0.0, -0.9805807), v: Vec3A(-0.1271232, 0.991561, -0.02542464), lens_radius: 0.05, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: Some("/Render/settings") +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 640, height: 360, region: PixelRect { x0: 0, y0: 0, x1: 640, y1: 360 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: None, depth_of_field: true, motion_blur: false, layer_stack: ["$DIR/max_depth_negative.usda"], invisible_overrides: Some(0) } +layer: $DIR/max_depth_negative.usda +warning: Warning { code: SettingsInvalidValue, kind: Refused, count: 1, prims: ["/Render/settings"], message: "crust:maxDepth = -2 would shade no vertex (1 is direct lighting only) — using 32" } +warning: Warning { code: CameraMissing, kind: Skipped, count: 1, prims: [], message: "USD stage has no UsdGeomCamera — falling back to world::get_settings camera" } +lights: 0 +volumes: 0 +world: 0 geometries, PrimitiveBreakdown { triangles: 0, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 0, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: None, cameras: [], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: None, offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/max_depth_negative_usda-eec4c585057974f1-1.image b/crates/crust-core/tests/data/import_baselines/max_depth_negative_usda-eec4c585057974f1-1.image new file mode 100644 index 000000000..c734c5b1d --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/max_depth_negative_usda-eec4c585057974f1-1.image @@ -0,0 +1 @@ +640x360 16spp clamp-off a04a09c0d4b5e325 diff --git a/crates/crust-core/tests/data/import_baselines/max_depth_one_usda-0b2d301b9905817a-1.digest b/crates/crust-core/tests/data/import_baselines/max_depth_one_usda-0b2d301b9905817a-1.digest new file mode 100644 index 000000000..dc49664b1 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/max_depth_one_usda-0b2d301b9905817a-1.digest @@ -0,0 +1,17 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: None +camera: Camera { origin: Vec3A(15.0, 3.0, 3.0), lower_left_corner: Vec3A(4.8863316, -0.044797063, 4.174048), horizontal: Vec3A(1.2295314, 0.0, -6.147657), vertical: Vec3A(-0.44830504, 3.4967792, -0.08966101), u: Vec3A(0.19611613, 0.0, -0.9805807), v: Vec3A(-0.1271232, 0.991561, -0.02542464), lens_radius: 0.05, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: Some("/Render/settings") +settings: RenderSettings { samples_per_pixel: 128, max_depth: 1, width: 640, height: 360, region: PixelRect { x0: 0, y0: 0, x1: 640, y1: 360 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: None, depth_of_field: true, motion_blur: false, layer_stack: ["$DIR/max_depth_one.usda"], invisible_overrides: Some(0) } +layer: $DIR/max_depth_one.usda +warning: Warning { code: CameraMissing, kind: Skipped, count: 1, prims: [], message: "USD stage has no UsdGeomCamera — falling back to world::get_settings camera" } +lights: 0 +volumes: 0 +world: 0 geometries, PrimitiveBreakdown { triangles: 0, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 0, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: None, cameras: [], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: None, offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/max_depth_one_usda-0b2d301b9905817a-1.image b/crates/crust-core/tests/data/import_baselines/max_depth_one_usda-0b2d301b9905817a-1.image new file mode 100644 index 000000000..c734c5b1d --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/max_depth_one_usda-0b2d301b9905817a-1.image @@ -0,0 +1 @@ +640x360 16spp clamp-off a04a09c0d4b5e325 diff --git a/crates/crust-core/tests/data/import_baselines/max_depth_zero_usda-931745fbe0c2c985-1.digest b/crates/crust-core/tests/data/import_baselines/max_depth_zero_usda-931745fbe0c2c985-1.digest new file mode 100644 index 000000000..c33a676fa --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/max_depth_zero_usda-931745fbe0c2c985-1.digest @@ -0,0 +1,18 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: None +camera: Camera { origin: Vec3A(15.0, 3.0, 3.0), lower_left_corner: Vec3A(4.8863316, -0.044797063, 4.174048), horizontal: Vec3A(1.2295314, 0.0, -6.147657), vertical: Vec3A(-0.44830504, 3.4967792, -0.08966101), u: Vec3A(0.19611613, 0.0, -0.9805807), v: Vec3A(-0.1271232, 0.991561, -0.02542464), lens_radius: 0.05, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: Some("/Render/settings") +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 640, height: 360, region: PixelRect { x0: 0, y0: 0, x1: 640, y1: 360 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: None, depth_of_field: true, motion_blur: false, layer_stack: ["$DIR/max_depth_zero.usda"], invisible_overrides: Some(0) } +layer: $DIR/max_depth_zero.usda +warning: Warning { code: SettingsInvalidValue, kind: Refused, count: 1, prims: ["/Render/settings"], message: "crust:maxDepth = 0 would shade no vertex (1 is direct lighting only) — using 32" } +warning: Warning { code: CameraMissing, kind: Skipped, count: 1, prims: [], message: "USD stage has no UsdGeomCamera — falling back to world::get_settings camera" } +lights: 0 +volumes: 0 +world: 0 geometries, PrimitiveBreakdown { triangles: 0, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 0, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: None, cameras: [], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: None, offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/max_depth_zero_usda-931745fbe0c2c985-1.image b/crates/crust-core/tests/data/import_baselines/max_depth_zero_usda-931745fbe0c2c985-1.image new file mode 100644 index 000000000..c734c5b1d --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/max_depth_zero_usda-931745fbe0c2c985-1.image @@ -0,0 +1 @@ +640x360 16spp clamp-off a04a09c0d4b5e325 diff --git a/crates/crust-core/tests/data/import_baselines/membership_usda-e44fc1429c4b92d1-1.digest b/crates/crust-core/tests/data/import_baselines/membership_usda-e44fc1429c4b92d1-1.digest new file mode 100644 index 000000000..5ebc723d9 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/membership_usda-e44fc1429c4b92d1-1.digest @@ -0,0 +1,47 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: None +camera: Camera { origin: Vec3A(15.0, 3.0, 3.0), lower_left_corner: Vec3A(4.8863316, -0.044797063, 4.174048), horizontal: Vec3A(1.2295314, 0.0, -6.147657), vertical: Vec3A(-0.44830504, 3.4967792, -0.08966101), u: Vec3A(0.19611613, 0.0, -0.9805807), v: Vec3A(-0.1271232, 0.991561, -0.02542464), lens_radius: 0.05, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: None +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 640, height: 360, region: PixelRect { x0: 0, y0: 0, x1: 640, y1: 360 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: None, depth_of_field: true, motion_blur: false, layer_stack: ["$DIR/membership.usda"], invisible_overrides: Some(0) } +layer: $DIR/membership.usda +warning: Warning { code: CameraMissing, kind: Skipped, count: 1, prims: [], message: "USD stage has no UsdGeomCamera — falling back to world::get_settings camera" } +lights: 5 +light 0: area name Some("/World/Nearest") lpe None pmf 0.2 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 1: area name Some("/World/Explicit") lpe None pmf 0.2 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 2: area name Some("/World/Nested") lpe None pmf 0.2 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 3: area name Some("/World/Rooted") lpe None pmf 0.2 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 4: area name Some("/World/Plain") lpe None pmf 0.2 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 10 geometries, PrimitiveBreakdown { triangles: 0, spheres: 10, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 0, spheres: 10, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 0 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:984632b55acb5495 camera=1:984632b55acb5495 shadow=1:984632b55acb5495 indirect=1:984632b55acb5495 +geom 1: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 1 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:b4dfc0dd30bb66e5 camera=1:b4dfc0dd30bb66e5 shadow=1:b4dfc0dd30bb66e5 indirect=1:b4dfc0dd30bb66e5 +geom 2: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 2 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:35cdd9a0d6e50805 camera=1:35cdd9a0d6e50805 shadow=1:35cdd9a0d6e50805 indirect=1:35cdd9a0d6e50805 +geom 3: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 2 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:5502ac7a1bf17ab5 camera=1:5502ac7a1bf17ab5 shadow=1:5502ac7a1bf17ab5 indirect=1:5502ac7a1bf17ab5 +geom 4: material #1 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 2 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:7fd943913c47476d camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=1:7fd943913c47476d +geom 5: material #2 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 2 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:a72820a4943950e5 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=1:a72820a4943950e5 +geom 6: material #3 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 2 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:fc35f349575b42ad camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=1:fc35f349575b42ad +geom 7: material #4 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 2 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:066197ed2710c38d camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=1:066197ed2710c38d +geom 8: material #5 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 2 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:33019b9c0d9d36c1 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=1:33019b9c0d9d36c1 +geom 9: material #6 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 2 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=0:cbf29ce484222325 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=0:cbf29ce484222325 +provenance light /World/Explicit: LightOrigin { index: 1, geoms: 5..6 } +provenance light /World/Nearest: LightOrigin { index: 0, geoms: 4..5 } +provenance light /World/Nested: LightOrigin { index: 2, geoms: 6..7 } +provenance light /World/Plain: LightOrigin { index: 4, geoms: 8..9 } +provenance light /World/Rooted: LightOrigin { index: 3, geoms: 7..8 } +provenance geometry 0..1: /World/Set/Chair +provenance geometry 1..2: /World/Hero +provenance geometry 2..3: /World/Group/Body +provenance geometry 3..4: /World/Other +provenance geometry 4..5: /World/Nearest +provenance geometry 5..6: /World/Explicit +provenance geometry 6..7: /World/Nested +provenance geometry 7..8: /World/Rooted +provenance geometry 8..9: /World/Plain +provenance geometry 9..10: /World/Cycle +provenance spheres: [0, 1, 2, 3] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: None, cameras: [], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: None, offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/membership_usda-e44fc1429c4b92d1-1.image b/crates/crust-core/tests/data/import_baselines/membership_usda-e44fc1429c4b92d1-1.image new file mode 100644 index 000000000..7a635e34f --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/membership_usda-e44fc1429c4b92d1-1.image @@ -0,0 +1 @@ +640x360 16spp clamp-off 175dbcadbf3b88f7 diff --git a/crates/crust-core/tests/data/import_baselines/mesh_blurred_usda-13d48869156e4433-1.digest b/crates/crust-core/tests/data/import_baselines/mesh_blurred_usda-13d48869156e4433-1.digest new file mode 100644 index 000000000..c7ecd1a71 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/mesh_blurred_usda-13d48869156e4433-1.digest @@ -0,0 +1,21 @@ +time: Some(5.0) +working space: Linear Rec.709 (sRGB) +camera path: Some("/World/cam") +camera: Camera { origin: Vec3A(0.0, 0.0, 8.0), lower_left_corner: Vec3A(-2.7183647, -1.5290802, -2.0), horizontal: Vec3A(5.4367294, 0.0, 0.0), vertical: Vec3A(0.0, 3.0581603, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: Some("/Render/settings") +settings: RenderSettings { samples_per_pixel: 16, max_depth: 2, width: 64, height: 36, region: PixelRect { x0: 0, y0: 0, x1: 64, y1: 36 }, min_samples_per_pixel: 16, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 5, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 50.0, aperture: [20.955, 15.2908], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 10.0 }), depth_of_field: false, motion_blur: true, layer_stack: ["$DIR/mesh_blurred.usda"], invisible_overrides: Some(0) } +layer: $DIR/mesh_blurred.usda +lights: 0 +volumes: 0 +world: 1 geometries, PrimitiveBreakdown { triangles: 0, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 1 } top level, PrimitiveBreakdown { triangles: 2, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 1 } unique, motion true +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [Translation(Vec3A(1.0, 0.0, 0.0))] pieces all=2:8f5d9187c4202473 camera=2:8f5d9187c4202473 shadow=2:8f5d9187c4202473 indirect=2:8f5d9187c4202473 +provenance material /World/Glow: MaterialOrigin { slots: [0], displaced: false } +provenance geometry 0..1: /World/Card +provenance mesh: MeshOrigin { geom_id: 0, slot: 0, baked: false, moving: true } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 18250419415378433236, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: Some(5.0), camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/World/cam"), cameras: ["/World/cam"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/World/cam"), offsets: [0, 4607182418800017408], interval: Some([4617315517961601024, 4618441417868443648]), query: true, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/mesh_blurred_usda-13d48869156e4433-1.image b/crates/crust-core/tests/data/import_baselines/mesh_blurred_usda-13d48869156e4433-1.image new file mode 100644 index 000000000..41d6a31ea --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/mesh_blurred_usda-13d48869156e4433-1.image @@ -0,0 +1 @@ +64x36 16spp clamp-off 3c406206c0d3b4b6 diff --git a/crates/crust-core/tests/data/import_baselines/mesh_both_usda-90fff2587206dcbe-1.digest b/crates/crust-core/tests/data/import_baselines/mesh_both_usda-90fff2587206dcbe-1.digest new file mode 100644 index 000000000..61c025098 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/mesh_both_usda-90fff2587206dcbe-1.digest @@ -0,0 +1,21 @@ +time: Some(5.0) +working space: Linear Rec.709 (sRGB) +camera path: Some("/World/cam") +camera: Camera { origin: Vec3A(0.0, 0.0, 8.0), lower_left_corner: Vec3A(-2.7183647, -1.5290802, -2.0), horizontal: Vec3A(5.4367294, 0.0, 0.0), vertical: Vec3A(0.0, 3.0581603, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: Some("/Render/settings") +settings: RenderSettings { samples_per_pixel: 16, max_depth: 2, width: 64, height: 36, region: PixelRect { x0: 0, y0: 0, x1: 64, y1: 36 }, min_samples_per_pixel: 16, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 5, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 50.0, aperture: [20.955, 15.2908], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 10.0 }), depth_of_field: false, motion_blur: true, layer_stack: ["$DIR/mesh_both.usda"], invisible_overrides: Some(0) } +layer: $DIR/mesh_both.usda +lights: 0 +volumes: 0 +world: 1 geometries, PrimitiveBreakdown { triangles: 0, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 1 } top level, PrimitiveBreakdown { triangles: 2, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 1 } unique, motion true +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [Translation(Vec3A(1.0, 1.0, 0.0))] pieces all=2:8f5d9187c4202473 camera=2:8f5d9187c4202473 shadow=2:8f5d9187c4202473 indirect=2:8f5d9187c4202473 +provenance material /World/Glow: MaterialOrigin { slots: [0], displaced: false } +provenance geometry 0..1: /World/Card +provenance mesh: MeshOrigin { geom_id: 0, slot: 0, baked: false, moving: true } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 18250419415378433236, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: Some(5.0), camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/World/cam"), cameras: ["/World/cam"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/World/cam"), offsets: [0, 4607182418800017408], interval: Some([4617315517961601024, 4618441417868443648]), query: true, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/mesh_both_usda-90fff2587206dcbe-1.image b/crates/crust-core/tests/data/import_baselines/mesh_both_usda-90fff2587206dcbe-1.image new file mode 100644 index 000000000..c3f5aa567 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/mesh_both_usda-90fff2587206dcbe-1.image @@ -0,0 +1 @@ +64x36 16spp clamp-off 53fc40f87c315583 diff --git a/crates/crust-core/tests/data/import_baselines/mesh_sharp_usda-98679e56cacbfa24-1.digest b/crates/crust-core/tests/data/import_baselines/mesh_sharp_usda-98679e56cacbfa24-1.digest new file mode 100644 index 000000000..de17726ae --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/mesh_sharp_usda-98679e56cacbfa24-1.digest @@ -0,0 +1,21 @@ +time: Some(5.0) +working space: Linear Rec.709 (sRGB) +camera path: Some("/World/cam") +camera: Camera { origin: Vec3A(0.0, 0.0, 8.0), lower_left_corner: Vec3A(-2.7183647, -1.5290802, -2.0), horizontal: Vec3A(5.4367294, 0.0, 0.0), vertical: Vec3A(0.0, 3.0581603, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: Some("/Render/settings") +settings: RenderSettings { samples_per_pixel: 16, max_depth: 2, width: 64, height: 36, region: PixelRect { x0: 0, y0: 0, x1: 64, y1: 36 }, min_samples_per_pixel: 16, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 5, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: false, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 50.0, aperture: [20.955, 15.2908], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 10.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/mesh_sharp.usda"], invisible_overrides: Some(0) } +layer: $DIR/mesh_sharp.usda +lights: 0 +volumes: 0 +world: 1 geometries, PrimitiveBreakdown { triangles: 0, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 1 } top level, PrimitiveBreakdown { triangles: 2, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 1 } unique, motion true +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [Translation(Vec3A(1.0, 0.0, 0.0))] pieces all=2:8f5d9187c4202473 camera=2:8f5d9187c4202473 shadow=2:8f5d9187c4202473 indirect=2:8f5d9187c4202473 +provenance material /World/Glow: MaterialOrigin { slots: [0], displaced: false } +provenance geometry 0..1: /World/Card +provenance mesh: MeshOrigin { geom_id: 0, slot: 0, baked: false, moving: true } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 18250419415378433236, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: Some(5.0), camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/World/cam"), cameras: ["/World/cam"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/World/cam"), offsets: [0, 4607182418800017408], interval: Some([4617315517961601024, 4618441417868443648]), query: true, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/mesh_sharp_usda-98679e56cacbfa24-1.image b/crates/crust-core/tests/data/import_baselines/mesh_sharp_usda-98679e56cacbfa24-1.image new file mode 100644 index 000000000..0e8a4d39e --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/mesh_sharp_usda-98679e56cacbfa24-1.image @@ -0,0 +1 @@ +64x36 16spp clamp-off 51c3405b7660a8ac diff --git a/crates/crust-core/tests/data/import_baselines/mesh_track_usda-2da67447ace68ea3-1.digest b/crates/crust-core/tests/data/import_baselines/mesh_track_usda-2da67447ace68ea3-1.digest new file mode 100644 index 000000000..d9a4fedf6 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/mesh_track_usda-2da67447ace68ea3-1.digest @@ -0,0 +1,21 @@ +time: Some(5.0) +working space: Linear Rec.709 (sRGB) +camera path: Some("/World/cam") +camera: Camera { origin: Vec3A(0.0, 0.0, 8.0), lower_left_corner: Vec3A(-2.7183647, -1.5290802, -2.0), horizontal: Vec3A(5.4367294, 0.0, 0.0), vertical: Vec3A(0.0, 3.0581603, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: Some("/Render/settings") +settings: RenderSettings { samples_per_pixel: 16, max_depth: 2, width: 64, height: 36, region: PixelRect { x0: 0, y0: 0, x1: 64, y1: 36 }, min_samples_per_pixel: 16, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 5, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 50.0, aperture: [20.955, 15.2908], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 10.0 }), depth_of_field: false, motion_blur: true, layer_stack: ["$DIR/mesh_track.usda"], invisible_overrides: Some(0) } +layer: $DIR/mesh_track.usda +lights: 0 +volumes: 0 +world: 1 geometries, PrimitiveBreakdown { triangles: 0, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 1 } top level, PrimitiveBreakdown { triangles: 2, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 1 } unique, motion true +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [Translation(Vec3A(1.0, 0.0, 0.0))] pieces all=2:8f5d9187c4202473 camera=2:8f5d9187c4202473 shadow=2:8f5d9187c4202473 indirect=2:8f5d9187c4202473 +provenance material /World/Glow: MaterialOrigin { slots: [0], displaced: false } +provenance geometry 0..1: /World/Card +provenance mesh: MeshOrigin { geom_id: 0, slot: 0, baked: false, moving: true } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 18250419415378433236, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: Some(5.0), camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/World/cam"), cameras: ["/World/cam"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/World/cam"), offsets: [0, 4607182418800017408], interval: Some([4617315517961601024, 4618441417868443648]), query: true, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/mesh_track_usda-2da67447ace68ea3-1.image b/crates/crust-core/tests/data/import_baselines/mesh_track_usda-2da67447ace68ea3-1.image new file mode 100644 index 000000000..41d6a31ea --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/mesh_track_usda-2da67447ace68ea3-1.image @@ -0,0 +1 @@ +64x36 16spp clamp-off 3c406206c0d3b4b6 diff --git a/crates/crust-core/tests/data/import_baselines/metal_0_1_power_1_usda-d5e924c1e43088a2-1.digest b/crates/crust-core/tests/data/import_baselines/metal_0_1_power_1_usda-d5e924c1e43088a2-1.digest new file mode 100644 index 000000000..d6e241bc9 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/metal_0_1_power_1_usda-d5e924c1e43088a2-1.digest @@ -0,0 +1,27 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/World/Cam") +camera: Camera { origin: Vec3A(0.0, 5.0, 6.0), lower_left_corner: Vec3A(-2.0000002, -2.9376645, -0.40261602), horizontal: Vec3A(4.0000005, -0.0, 0.0), vertical: Vec3A(0.0, 3.0731347, -2.560439), u: Vec3A(1.0, -0.0, 0.0), v: Vec3A(0.0, 0.76828355, -0.6401097), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: Some("/Render/settings") +settings: RenderSettings { samples_per_pixel: 16, max_depth: 2, width: 16, height: 16, region: PixelRect { x0: 0, y0: 0, x1: 16, y1: 16 }, min_samples_per_pixel: 16, variance_threshold: 0.0, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: None, light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 50.0, aperture: [20.0, 20.0], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 10.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/metal_0_1_power_1.usda"], invisible_overrides: Some(0) } +layer: $DIR/metal_0_1_power_1.usda +lights: 2 +light 0: distant name Some("/World/Sun") lpe None pmf 0.5 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 0.0, specular: 1.0 } +light 1: area name Some("/World/Key") lpe None pmf 0.5 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 0.0, specular: 1.0 } +volumes: 0 +world: 2 geometries, PrimitiveBreakdown { triangles: 2, spheres: 1, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 2, spheres: 1, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +geom 0: material #0 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:ca080854f0bf27b5 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=1:ca080854f0bf27b5 +geom 1: material #1 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:fce6de5b675a55c5 camera=2:fce6de5b675a55c5 shadow=2:fce6de5b675a55c5 indirect=2:fce6de5b675a55c5 +provenance material /World/M: MaterialOrigin { slots: [1], displaced: false } +provenance light /World/Key: LightOrigin { index: 1, geoms: 0..1 } +provenance light /World/Sun: LightOrigin { index: 0, geoms: 0..0 } +provenance geometry 0..1: /World/Key +provenance geometry 1..2: /World/Floor +provenance mesh: MeshOrigin { geom_id: 1, slot: 0, baked: true, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 14903623499644419787, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/World/Cam"), cameras: ["/World/Cam"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/World/Cam"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/metal_0_1_power_1_usda-d5e924c1e43088a2-1.image b/crates/crust-core/tests/data/import_baselines/metal_0_1_power_1_usda-d5e924c1e43088a2-1.image new file mode 100644 index 000000000..81e5ed6c7 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/metal_0_1_power_1_usda-d5e924c1e43088a2-1.image @@ -0,0 +1 @@ +16x16 16spp clamp-off fe5f611a6f2bbe85 diff --git a/crates/crust-core/tests/data/import_baselines/metal_1_0_power_1_usda-0a224c171445c02a-1.digest b/crates/crust-core/tests/data/import_baselines/metal_1_0_power_1_usda-0a224c171445c02a-1.digest new file mode 100644 index 000000000..6c69e6ee4 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/metal_1_0_power_1_usda-0a224c171445c02a-1.digest @@ -0,0 +1,27 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/World/Cam") +camera: Camera { origin: Vec3A(0.0, 5.0, 6.0), lower_left_corner: Vec3A(-2.0000002, -2.9376645, -0.40261602), horizontal: Vec3A(4.0000005, -0.0, 0.0), vertical: Vec3A(0.0, 3.0731347, -2.560439), u: Vec3A(1.0, -0.0, 0.0), v: Vec3A(0.0, 0.76828355, -0.6401097), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: Some("/Render/settings") +settings: RenderSettings { samples_per_pixel: 16, max_depth: 2, width: 16, height: 16, region: PixelRect { x0: 0, y0: 0, x1: 16, y1: 16 }, min_samples_per_pixel: 16, variance_threshold: 0.0, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: None, light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 50.0, aperture: [20.0, 20.0], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 10.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/metal_1_0_power_1.usda"], invisible_overrides: Some(0) } +layer: $DIR/metal_1_0_power_1.usda +lights: 2 +light 0: distant name Some("/World/Sun") lpe None pmf 0.5 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 0.0 } +light 1: area name Some("/World/Key") lpe None pmf 0.5 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 0.0 } +volumes: 0 +world: 2 geometries, PrimitiveBreakdown { triangles: 2, spheres: 1, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 2, spheres: 1, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +geom 0: material #0 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:ca080854f0bf27b5 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=1:ca080854f0bf27b5 +geom 1: material #1 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:fce6de5b675a55c5 camera=2:fce6de5b675a55c5 shadow=2:fce6de5b675a55c5 indirect=2:fce6de5b675a55c5 +provenance material /World/M: MaterialOrigin { slots: [1], displaced: false } +provenance light /World/Key: LightOrigin { index: 1, geoms: 0..1 } +provenance light /World/Sun: LightOrigin { index: 0, geoms: 0..0 } +provenance geometry 0..1: /World/Key +provenance geometry 1..2: /World/Floor +provenance mesh: MeshOrigin { geom_id: 1, slot: 0, baked: true, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 14903623499644419787, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/World/Cam"), cameras: ["/World/Cam"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/World/Cam"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/metal_1_0_power_1_usda-0a224c171445c02a-1.image b/crates/crust-core/tests/data/import_baselines/metal_1_0_power_1_usda-0a224c171445c02a-1.image new file mode 100644 index 000000000..0b1b824a5 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/metal_1_0_power_1_usda-0a224c171445c02a-1.image @@ -0,0 +1 @@ +16x16 16spp clamp-off 7e8e0fa784351325 diff --git a/crates/crust-core/tests/data/import_baselines/metal_1_1_power_1_usda-3e1ca1268dde29a1-1.digest b/crates/crust-core/tests/data/import_baselines/metal_1_1_power_1_usda-3e1ca1268dde29a1-1.digest new file mode 100644 index 000000000..b20b7601d --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/metal_1_1_power_1_usda-3e1ca1268dde29a1-1.digest @@ -0,0 +1,27 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/World/Cam") +camera: Camera { origin: Vec3A(0.0, 5.0, 6.0), lower_left_corner: Vec3A(-2.0000002, -2.9376645, -0.40261602), horizontal: Vec3A(4.0000005, -0.0, 0.0), vertical: Vec3A(0.0, 3.0731347, -2.560439), u: Vec3A(1.0, -0.0, 0.0), v: Vec3A(0.0, 0.76828355, -0.6401097), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: Some("/Render/settings") +settings: RenderSettings { samples_per_pixel: 16, max_depth: 2, width: 16, height: 16, region: PixelRect { x0: 0, y0: 0, x1: 16, y1: 16 }, min_samples_per_pixel: 16, variance_threshold: 0.0, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: None, light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 50.0, aperture: [20.0, 20.0], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 10.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/metal_1_1_power_1.usda"], invisible_overrides: Some(0) } +layer: $DIR/metal_1_1_power_1.usda +lights: 2 +light 0: distant name Some("/World/Sun") lpe None pmf 0.5 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 1: area name Some("/World/Key") lpe None pmf 0.5 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 2 geometries, PrimitiveBreakdown { triangles: 2, spheres: 1, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 2, spheres: 1, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +geom 0: material #0 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:ca080854f0bf27b5 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=1:ca080854f0bf27b5 +geom 1: material #1 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:fce6de5b675a55c5 camera=2:fce6de5b675a55c5 shadow=2:fce6de5b675a55c5 indirect=2:fce6de5b675a55c5 +provenance material /World/M: MaterialOrigin { slots: [1], displaced: false } +provenance light /World/Key: LightOrigin { index: 1, geoms: 0..1 } +provenance light /World/Sun: LightOrigin { index: 0, geoms: 0..0 } +provenance geometry 0..1: /World/Key +provenance geometry 1..2: /World/Floor +provenance mesh: MeshOrigin { geom_id: 1, slot: 0, baked: true, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 14903623499644419787, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/World/Cam"), cameras: ["/World/Cam"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/World/Cam"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/metal_1_1_power_1_usda-3e1ca1268dde29a1-1.image b/crates/crust-core/tests/data/import_baselines/metal_1_1_power_1_usda-3e1ca1268dde29a1-1.image new file mode 100644 index 000000000..81e5ed6c7 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/metal_1_1_power_1_usda-3e1ca1268dde29a1-1.image @@ -0,0 +1 @@ +16x16 16spp clamp-off fe5f611a6f2bbe85 diff --git a/crates/crust-core/tests/data/import_baselines/mirror_usda-e5687a44290234b9-1.digest b/crates/crust-core/tests/data/import_baselines/mirror_usda-e5687a44290234b9-1.digest new file mode 100644 index 000000000..167c695ee --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/mirror_usda-e5687a44290234b9-1.digest @@ -0,0 +1,21 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: None +camera: Camera { origin: Vec3A(15.0, 3.0, 3.0), lower_left_corner: Vec3A(4.8863316, -0.044797063, 4.174048), horizontal: Vec3A(1.2295314, 0.0, -6.147657), vertical: Vec3A(-0.44830504, 3.4967792, -0.08966101), u: Vec3A(0.19611613, 0.0, -0.9805807), v: Vec3A(-0.1271232, 0.991561, -0.02542464), lens_radius: 0.05, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: None +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 640, height: 360, region: PixelRect { x0: 0, y0: 0, x1: 640, y1: 360 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: None, depth_of_field: true, motion_blur: false, layer_stack: ["$DIR/mirror.usda"], invisible_overrides: Some(0) } +layer: $DIR/mirror.usda +warning: Warning { code: CameraMissing, kind: Skipped, count: 1, prims: [], message: "USD stage has no UsdGeomCamera — falling back to world::get_settings camera" } +lights: 0 +volumes: 0 +world: 1 geometries, PrimitiveBreakdown { triangles: 2, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 2, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:58ffffb6ae475ee5 camera=2:58ffffb6ae475ee5 shadow=2:58ffffb6ae475ee5 indirect=2:58ffffb6ae475ee5 +provenance geometry 0..1: /World/M/Quad +provenance mesh: MeshOrigin { geom_id: 0, slot: 0, baked: true, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 14414187199170096052, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: None, cameras: [], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: None, offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/mirror_usda-e5687a44290234b9-1.image b/crates/crust-core/tests/data/import_baselines/mirror_usda-e5687a44290234b9-1.image new file mode 100644 index 000000000..c734c5b1d --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/mirror_usda-e5687a44290234b9-1.image @@ -0,0 +1 @@ +640x360 16spp clamp-off a04a09c0d4b5e325 diff --git a/crates/crust-core/tests/data/import_baselines/mismatch_same_usda-36f547d4088a73c8-1.digest b/crates/crust-core/tests/data/import_baselines/mismatch_same_usda-36f547d4088a73c8-1.digest new file mode 100644 index 000000000..a0bfe3262 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/mismatch_same_usda-36f547d4088a73c8-1.digest @@ -0,0 +1,17 @@ +time: Some(5.0) +working space: Linear Rec.709 (sRGB) +camera path: Some("/World/Shot/Cam") +camera: Camera { origin: Vec3A(0.0, 0.0, 8.0), lower_left_corner: Vec3A(-2.7183647, -1.5290802, -2.0), horizontal: Vec3A(5.4367294, 0.0, 0.0), vertical: Vec3A(0.0, 3.0581603, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: None +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 640, height: 360, region: PixelRect { x0: 0, y0: 0, x1: 640, y1: 360 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 5, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 50.0, aperture: [20.955, 15.2908], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 10.0 }), depth_of_field: false, motion_blur: true, layer_stack: ["$DIR/mismatch_same.usda"], invisible_overrides: Some(0) } +layer: $DIR/mismatch_same.usda +layer: $DIR/mismatch_shot.usda +lights: 0 +volumes: 0 +world: 0 geometries, PrimitiveBreakdown { triangles: 0, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 0, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: Some(5.0), camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/World/Shot/Cam"), cameras: ["/World/Shot/Cam", "/World/Cam"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/World/Cam"), offsets: [0, 4602678819172646912], interval: Some([4617315517961601024, 4617878467915022336]), query: true, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/mismatch_same_usda-36f547d4088a73c8-1.image b/crates/crust-core/tests/data/import_baselines/mismatch_same_usda-36f547d4088a73c8-1.image new file mode 100644 index 000000000..c734c5b1d --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/mismatch_same_usda-36f547d4088a73c8-1.image @@ -0,0 +1 @@ +640x360 16spp clamp-off a04a09c0d4b5e325 diff --git a/crates/crust-core/tests/data/import_baselines/mismatch_usda-4938acb7109c81b3-1.digest b/crates/crust-core/tests/data/import_baselines/mismatch_usda-4938acb7109c81b3-1.digest new file mode 100644 index 000000000..4267c6ca5 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/mismatch_usda-4938acb7109c81b3-1.digest @@ -0,0 +1,23 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/World/cam") +camera: Camera { origin: Vec3A(0.0, 0.0, 10.0), lower_left_corner: Vec3A(-2.0955, -1.5716249, 0.0), horizontal: Vec3A(4.191, 0.0, 0.0), vertical: Vec3A(0.0, 3.1432498, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: Some("/Render/settings") +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 48, height: 36, region: PixelRect { x0: 0, y0: 0, x1: 48, y1: 36 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [AovProduct { prim_path: "/Render/p", name: "p.exr", vars: [AovVar { prim_path: "/Render/P", name: "P", channel_prefix: None, source: P, components: 3, precision: Float, accumulation: Closest, clear: 0.0, expression: None, raw: false, variance: false }, AovVar { prim_path: "/Render/rest2d", name: "rest2d", channel_prefix: None, source: Primvar(PrimvarSource { index: 0, components: 2, role: Float }), components: 2, precision: Float, accumulation: Filtered, clear: 0.0, expression: None, raw: false, variance: false }], attributes: [] }], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 50.0, aperture: [20.955, 15.2908], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 10.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/mismatch.usda"], invisible_overrides: Some(0) } +layer: $DIR/mismatch.usda +warning: Warning { code: PrimvarMismatch, kind: Skipped, count: 1, prims: ["/World/mesh"], message: "/Render/rest2d asks for primvar \"rest\" as 2 component(s), but /World/mesh authors it as point3f[] (3 component(s)); that prim reads the clear value" } +lights: 1 +light 0: dome name Some("/World/dome") lpe None pmf 1.0 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 1 geometries, PrimitiveBreakdown { triangles: 2, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 2, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:32f1a52c797bfee5 camera=2:32f1a52c797bfee5 shadow=2:32f1a52c797bfee5 indirect=2:32f1a52c797bfee5 +provenance light /World/dome: LightOrigin { index: 0, geoms: 1..1 } +provenance geometry 0..1: /World/mesh +provenance mesh: MeshOrigin { geom_id: 0, slot: 0, baked: true, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 16756132900457544540, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/World/cam"), cameras: ["/World/cam"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [("rest", 2)], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/World/cam"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/mismatch_usda-4938acb7109c81b3-1.image b/crates/crust-core/tests/data/import_baselines/mismatch_usda-4938acb7109c81b3-1.image new file mode 100644 index 000000000..648a9f248 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/mismatch_usda-4938acb7109c81b3-1.image @@ -0,0 +1 @@ +48x36 16spp clamp-off 54407d51eeed59ca diff --git a/crates/crust-core/tests/data/import_baselines/mismatch_usda-e42c92f5d05f1fcf-1.digest b/crates/crust-core/tests/data/import_baselines/mismatch_usda-e42c92f5d05f1fcf-1.digest new file mode 100644 index 000000000..71ad39ce0 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/mismatch_usda-e42c92f5d05f1fcf-1.digest @@ -0,0 +1,18 @@ +time: Some(5.0) +working space: Linear Rec.709 (sRGB) +camera path: Some("/World/Shot/Cam") +camera: Camera { origin: Vec3A(0.0, 0.0, 8.0), lower_left_corner: Vec3A(-2.7183647, -1.5290802, -2.0), horizontal: Vec3A(5.4367294, 0.0, 0.0), vertical: Vec3A(0.0, 3.0581603, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: None +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 640, height: 360, region: PixelRect { x0: 0, y0: 0, x1: 640, y1: 360 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 5, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 50.0, aperture: [20.955, 15.2908], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 10.0 }), depth_of_field: false, motion_blur: true, layer_stack: ["$DIR/mismatch.usda"], invisible_overrides: Some(0) } +layer: $DIR/mismatch.usda +layer: $DIR/mismatch_shot.usda +warning: Warning { code: CameraShutterMismatch, kind: Approximated, count: 1, prims: ["/World/Shot/Cam"], message: "The render goes through /World/Shot/Cam, but motion was measured over the shutter of /World/Cam, the camera found before the traversal (0 .. 1): name the camera with --camera or RenderSettings.camera to measure over its own" } +lights: 0 +volumes: 0 +world: 0 geometries, PrimitiveBreakdown { triangles: 0, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 0, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: Some(5.0), camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/World/Shot/Cam"), cameras: ["/World/Shot/Cam", "/World/Cam"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/World/Cam"), offsets: [0, 4607182418800017408], interval: Some([4617315517961601024, 4618441417868443648]), query: true, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/mismatch_usda-e42c92f5d05f1fcf-1.image b/crates/crust-core/tests/data/import_baselines/mismatch_usda-e42c92f5d05f1fcf-1.image new file mode 100644 index 000000000..c734c5b1d --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/mismatch_usda-e42c92f5d05f1fcf-1.image @@ -0,0 +1 @@ +640x360 16spp clamp-off a04a09c0d4b5e325 diff --git a/crates/crust-core/tests/data/import_baselines/missing_usda-048983dc2b7e8f66-1.digest b/crates/crust-core/tests/data/import_baselines/missing_usda-048983dc2b7e8f66-1.digest new file mode 100644 index 000000000..65d032cc8 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/missing_usda-048983dc2b7e8f66-1.digest @@ -0,0 +1,17 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/cams/Hidden/witness") +camera: Camera { origin: Vec3A(0.0, 0.0, 0.0), lower_left_corner: Vec3A(-2.7183647, -1.5290802, -10.0), horizontal: Vec3A(5.4367294, 0.0, 0.0), vertical: Vec3A(0.0, 3.0581603, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: Some("/Render/settings") +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 640, height: 360, region: PixelRect { x0: 0, y0: 0, x1: 640, y1: 360 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 50.0, aperture: [20.955, 15.2908], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 10.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/missing.usda"], invisible_overrides: Some(0) } +layer: $DIR/missing.usda +warning: Warning { code: CameraNotACamera, kind: Refused, count: 1, prims: ["/cams/nope"], message: "RenderSettings.camera targets /cams/nope, which is not a camera on this stage — rendering through /cams/Hidden/witness instead" } +lights: 0 +volumes: 0 +world: 0 geometries, PrimitiveBreakdown { triangles: 0, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 0, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/cams/Hidden/witness"), cameras: ["/cams/Hidden/witness", "/cams/shot", "/cams/layout"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/cams/Hidden/witness"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/missing_usda-048983dc2b7e8f66-1.image b/crates/crust-core/tests/data/import_baselines/missing_usda-048983dc2b7e8f66-1.image new file mode 100644 index 000000000..c734c5b1d --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/missing_usda-048983dc2b7e8f66-1.image @@ -0,0 +1 @@ +640x360 16spp clamp-off a04a09c0d4b5e325 diff --git a/crates/crust-core/tests/data/import_baselines/mixed_hair_ref_usda-1bf6615be167a70b-1.digest b/crates/crust-core/tests/data/import_baselines/mixed_hair_ref_usda-1bf6615be167a70b-1.digest new file mode 100644 index 000000000..e1d09f3d5 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/mixed_hair_ref_usda-1bf6615be167a70b-1.digest @@ -0,0 +1,24 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: None +camera: Camera { origin: Vec3A(15.0, 3.0, 3.0), lower_left_corner: Vec3A(4.8863316, -0.044797063, 4.174048), horizontal: Vec3A(1.2295314, 0.0, -6.147657), vertical: Vec3A(-0.44830504, 3.4967792, -0.08966101), u: Vec3A(0.19611613, 0.0, -0.9805807), v: Vec3A(-0.1271232, 0.991561, -0.02542464), lens_radius: 0.05, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: None +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 640, height: 360, region: PixelRect { x0: 0, y0: 0, x1: 640, y1: 360 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: None, depth_of_field: true, motion_blur: false, layer_stack: ["$DIR/mixed_hair_ref.usda"], invisible_overrides: Some(0) } +layer: $DIR/mixed_hair_ref.usda +warning: Warning { code: CameraMissing, kind: Skipped, count: 1, prims: [], message: "USD stage has no UsdGeomCamera — falling back to world::get_settings camera" } +lights: 1 +light 0: area name Some("/World/Back") lpe None pmf 1.0 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 2 geometries, PrimitiveBreakdown { triangles: 0, spheres: 1, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 1 } top level, PrimitiveBreakdown { triangles: 0, spheres: 1, disks: 0, cylinders: 0, curve_segments: 1, cubic_curve_spans: 0, instances: 1 } unique, motion false +geom 0: material #0 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:5964020bd0c96e6d camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=1:5964020bd0c96e6d +geom 1: material #1 Signature { kind: "MaterialX", cutout: false, straight: false, boundary: false, emits: false, uv: true, uv_primvar: None, face_texture: None, curve: Some((false, false, [])), primvars: None } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves true scale 1.0 motion [] pieces all=1:f23ffa0170dacb65 camera=1:f23ffa0170dacb65 shadow=1:f23ffa0170dacb65 indirect=1:f23ffa0170dacb65 +provenance material /World/Looks/mtlx_hair_clear: MaterialOrigin { slots: [1], displaced: false } +provenance light /World/Back: LightOrigin { index: 0, geoms: 0..1 } +provenance geometry 0..1: /World/Back +provenance geometry 1..2: /World/Strand +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: None, cameras: [], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: None, offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/mixed_hair_ref_usda-1bf6615be167a70b-1.image b/crates/crust-core/tests/data/import_baselines/mixed_hair_ref_usda-1bf6615be167a70b-1.image new file mode 100644 index 000000000..a0bf16a7b --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/mixed_hair_ref_usda-1bf6615be167a70b-1.image @@ -0,0 +1 @@ +640x360 16spp clamp-off f8a9f23b5160dcb7 diff --git a/crates/crust-core/tests/data/import_baselines/mixed_hair_usda-e643846eb6c6d950-1.digest b/crates/crust-core/tests/data/import_baselines/mixed_hair_usda-e643846eb6c6d950-1.digest new file mode 100644 index 000000000..d3fe5fced --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/mixed_hair_usda-e643846eb6c6d950-1.digest @@ -0,0 +1,24 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: None +camera: Camera { origin: Vec3A(15.0, 3.0, 3.0), lower_left_corner: Vec3A(4.8863316, -0.044797063, 4.174048), horizontal: Vec3A(1.2295314, 0.0, -6.147657), vertical: Vec3A(-0.44830504, 3.4967792, -0.08966101), u: Vec3A(0.19611613, 0.0, -0.9805807), v: Vec3A(-0.1271232, 0.991561, -0.02542464), lens_radius: 0.05, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: None +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 640, height: 360, region: PixelRect { x0: 0, y0: 0, x1: 640, y1: 360 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: None, depth_of_field: true, motion_blur: false, layer_stack: ["$DIR/mixed_hair.usda"], invisible_overrides: Some(0) } +layer: $DIR/mixed_hair.usda +warning: Warning { code: CameraMissing, kind: Skipped, count: 1, prims: [], message: "USD stage has no UsdGeomCamera — falling back to world::get_settings camera" } +lights: 1 +light 0: area name Some("/World/Back") lpe None pmf 1.0 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 2 geometries, PrimitiveBreakdown { triangles: 0, spheres: 1, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 1 } top level, PrimitiveBreakdown { triangles: 0, spheres: 1, disks: 0, cylinders: 0, curve_segments: 1, cubic_curve_spans: 0, instances: 1 } unique, motion false +geom 0: material #0 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:5964020bd0c96e6d camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=1:5964020bd0c96e6d +geom 1: material #1 Signature { kind: "MaterialX", cutout: false, straight: false, boundary: false, emits: false, uv: true, uv_primvar: None, face_texture: None, curve: Some((false, false, [])), primvars: None } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves true scale 1.0 motion [] pieces all=1:f23ffa0170dacb65 camera=1:f23ffa0170dacb65 shadow=1:f23ffa0170dacb65 indirect=1:f23ffa0170dacb65 +provenance material /World/Looks/mtlx_hair_translucent_mix: MaterialOrigin { slots: [1], displaced: false } +provenance light /World/Back: LightOrigin { index: 0, geoms: 0..1 } +provenance geometry 0..1: /World/Back +provenance geometry 1..2: /World/Strand +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: None, cameras: [], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: None, offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/mixed_hair_usda-e643846eb6c6d950-1.image b/crates/crust-core/tests/data/import_baselines/mixed_hair_usda-e643846eb6c6d950-1.image new file mode 100644 index 000000000..345966086 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/mixed_hair_usda-e643846eb6c6d950-1.image @@ -0,0 +1 @@ +640x360 16spp clamp-off 6133acb42277d07c diff --git a/crates/crust-core/tests/data/import_baselines/motionblur_usda-2ad099074d244fc2-1.digest b/crates/crust-core/tests/data/import_baselines/motionblur_usda-2ad099074d244fc2-1.digest new file mode 100644 index 000000000..26d1e00b3 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/motionblur_usda-2ad099074d244fc2-1.digest @@ -0,0 +1,36 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/World/Cam") +camera: Camera { origin: Vec3A(0.0, 1.5, 7.0), lower_left_corner: Vec3A(-5.6632595, -1.6855836, -3.0), horizontal: Vec3A(11.326519, 0.0, 0.0), vertical: Vec3A(0.0, 6.371167, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: Some("/Render/settings") +settings: RenderSettings { samples_per_pixel: 16, max_depth: 4, width: 96, height: 54, region: PixelRect { x0: 0, y0: 0, x1: 96, y1: 54 }, min_samples_per_pixel: 8, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 24.0, aperture: [20.955, 15.2908], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 10.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/motionblur.usda"], invisible_overrides: Some(0) } +layer: $DIR/motionblur.usda +lights: 2 +light 0: area name Some("/World/KeyLight") lpe None pmf 0.5 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 1: dome name Some("/World/Sky") lpe None pmf 0.5 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 5 geometries, PrimitiveBreakdown { triangles: 6, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 2 } top level, PrimitiveBreakdown { triangles: 18, spheres: 1, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 2 } unique, motion true +geom 0: material #0 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:9de8214b59f6ec57 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=2:9de8214b59f6ec57 +geom 1: material #1 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:c358c11454e39a05 camera=0:cbf29ce484222325 shadow=2:c358c11454e39a05 indirect=2:c358c11454e39a05 +geom 2: material #1 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:be0b97004c4d3e85 camera=2:be0b97004c4d3e85 shadow=2:be0b97004c4d3e85 indirect=2:be0b97004c4d3e85 +geom 3: material #1 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [Translation(Vec3A(0.0, 0.8000001, 0.0))] pieces all=12:7342f406692bb5b5 camera=12:7342f406692bb5b5 shadow=12:7342f406692bb5b5 indirect=12:7342f406692bb5b5 +geom 4: material #1 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [Translation(Vec3A(1.0, 0.0, 0.0))] pieces all=1:04359f2ccebe8d35 camera=1:04359f2ccebe8d35 shadow=1:04359f2ccebe8d35 indirect=1:04359f2ccebe8d35 +provenance light /World/KeyLight: LightOrigin { index: 0, geoms: 0..1 } +provenance light /World/Sky: LightOrigin { index: 1, geoms: 5..5 } +provenance geometry 0..1: /World/KeyLight +provenance geometry 1..2: /World/ShadowCard +provenance geometry 2..3: /World/Floor +provenance geometry 3..4: /World/Riser +provenance geometry 4..5: /World/Mover +provenance mesh: MeshOrigin { geom_id: 1, slot: 0, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 2, slot: 1, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 3, slot: 2, baked: false, moving: true } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 6610719295604273699, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 1: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 8416296582947184296, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 2: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 12040084758835538402, n_points: 8, n_indices: 24, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: true, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/World/Cam"), cameras: ["/World/Cam"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/World/Cam"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/motionblur_usda-2ad099074d244fc2-1.image b/crates/crust-core/tests/data/import_baselines/motionblur_usda-2ad099074d244fc2-1.image new file mode 100644 index 000000000..7d08b11b2 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/motionblur_usda-2ad099074d244fc2-1.image @@ -0,0 +1 @@ +96x54 16spp clamp-off 6c45ffff7627d298 diff --git a/crates/crust-core/tests/data/import_baselines/motionblur_usda-f2666f3e50d41453-1.digest b/crates/crust-core/tests/data/import_baselines/motionblur_usda-f2666f3e50d41453-1.digest new file mode 100644 index 000000000..95974f4f9 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/motionblur_usda-f2666f3e50d41453-1.digest @@ -0,0 +1,37 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/World/Cam") +camera: Camera { origin: Vec3A(0.0, 1.5, 7.0), lower_left_corner: Vec3A(-5.6632595, -1.6855836, -3.0), horizontal: Vec3A(11.326519, 0.0, 0.0), vertical: Vec3A(0.0, 6.371167, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: Some("/Render/settings") +settings: RenderSettings { samples_per_pixel: 16, max_depth: 4, width: 96, height: 54, region: PixelRect { x0: 0, y0: 0, x1: 96, y1: 54 }, min_samples_per_pixel: 8, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 24.0, aperture: [20.955, 15.2908], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 10.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/motionblur.usda"], invisible_overrides: Some(0) } +layer: $DIR/motionblur.usda +warning: Warning { code: AssetUnsupportedByHost, kind: Skipped, count: 1, prims: [], message: "No asset loader: environment map $DIR/sky_gradient.exr ignored — the dome falls back to its uniform colour. Use Scene::from_usd_with_assets to supply one." } +lights: 2 +light 0: area name Some("/World/KeyLight") lpe None pmf 0.5 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 1: dome name Some("/World/Sky") lpe None pmf 0.5 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 5 geometries, PrimitiveBreakdown { triangles: 6, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 2 } top level, PrimitiveBreakdown { triangles: 18, spheres: 1, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 2 } unique, motion true +geom 0: material #0 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:9de8214b59f6ec57 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=2:9de8214b59f6ec57 +geom 1: material #1 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:c358c11454e39a05 camera=0:cbf29ce484222325 shadow=2:c358c11454e39a05 indirect=2:c358c11454e39a05 +geom 2: material #1 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:be0b97004c4d3e85 camera=2:be0b97004c4d3e85 shadow=2:be0b97004c4d3e85 indirect=2:be0b97004c4d3e85 +geom 3: material #1 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [Translation(Vec3A(0.0, 0.8000001, 0.0))] pieces all=12:7342f406692bb5b5 camera=12:7342f406692bb5b5 shadow=12:7342f406692bb5b5 indirect=12:7342f406692bb5b5 +geom 4: material #1 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [Translation(Vec3A(1.0, 0.0, 0.0))] pieces all=1:04359f2ccebe8d35 camera=1:04359f2ccebe8d35 shadow=1:04359f2ccebe8d35 indirect=1:04359f2ccebe8d35 +provenance light /World/KeyLight: LightOrigin { index: 0, geoms: 0..1 } +provenance light /World/Sky: LightOrigin { index: 1, geoms: 5..5 } +provenance geometry 0..1: /World/KeyLight +provenance geometry 1..2: /World/ShadowCard +provenance geometry 2..3: /World/Floor +provenance geometry 3..4: /World/Riser +provenance geometry 4..5: /World/Mover +provenance mesh: MeshOrigin { geom_id: 1, slot: 0, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 2, slot: 1, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 3, slot: 2, baked: false, moving: true } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 6610719295604273699, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 1: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 8416296582947184296, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 2: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 12040084758835538402, n_points: 8, n_indices: 24, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/World/Cam"), cameras: ["/World/Cam"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/World/Cam"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/motionblur_usda-f2666f3e50d41453-1.image b/crates/crust-core/tests/data/import_baselines/motionblur_usda-f2666f3e50d41453-1.image new file mode 100644 index 000000000..d50d3f6a9 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/motionblur_usda-f2666f3e50d41453-1.image @@ -0,0 +1 @@ +96x54 16spp clamp-off 81548b5cda94f9f8 diff --git a/crates/crust-core/tests/data/import_baselines/motionblur_usda-f2666f3e50d41453-2.digest b/crates/crust-core/tests/data/import_baselines/motionblur_usda-f2666f3e50d41453-2.digest new file mode 100644 index 000000000..95974f4f9 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/motionblur_usda-f2666f3e50d41453-2.digest @@ -0,0 +1,37 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/World/Cam") +camera: Camera { origin: Vec3A(0.0, 1.5, 7.0), lower_left_corner: Vec3A(-5.6632595, -1.6855836, -3.0), horizontal: Vec3A(11.326519, 0.0, 0.0), vertical: Vec3A(0.0, 6.371167, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: Some("/Render/settings") +settings: RenderSettings { samples_per_pixel: 16, max_depth: 4, width: 96, height: 54, region: PixelRect { x0: 0, y0: 0, x1: 96, y1: 54 }, min_samples_per_pixel: 8, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 24.0, aperture: [20.955, 15.2908], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 10.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/motionblur.usda"], invisible_overrides: Some(0) } +layer: $DIR/motionblur.usda +warning: Warning { code: AssetUnsupportedByHost, kind: Skipped, count: 1, prims: [], message: "No asset loader: environment map $DIR/sky_gradient.exr ignored — the dome falls back to its uniform colour. Use Scene::from_usd_with_assets to supply one." } +lights: 2 +light 0: area name Some("/World/KeyLight") lpe None pmf 0.5 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 1: dome name Some("/World/Sky") lpe None pmf 0.5 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 5 geometries, PrimitiveBreakdown { triangles: 6, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 2 } top level, PrimitiveBreakdown { triangles: 18, spheres: 1, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 2 } unique, motion true +geom 0: material #0 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:9de8214b59f6ec57 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=2:9de8214b59f6ec57 +geom 1: material #1 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:c358c11454e39a05 camera=0:cbf29ce484222325 shadow=2:c358c11454e39a05 indirect=2:c358c11454e39a05 +geom 2: material #1 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:be0b97004c4d3e85 camera=2:be0b97004c4d3e85 shadow=2:be0b97004c4d3e85 indirect=2:be0b97004c4d3e85 +geom 3: material #1 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [Translation(Vec3A(0.0, 0.8000001, 0.0))] pieces all=12:7342f406692bb5b5 camera=12:7342f406692bb5b5 shadow=12:7342f406692bb5b5 indirect=12:7342f406692bb5b5 +geom 4: material #1 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [Translation(Vec3A(1.0, 0.0, 0.0))] pieces all=1:04359f2ccebe8d35 camera=1:04359f2ccebe8d35 shadow=1:04359f2ccebe8d35 indirect=1:04359f2ccebe8d35 +provenance light /World/KeyLight: LightOrigin { index: 0, geoms: 0..1 } +provenance light /World/Sky: LightOrigin { index: 1, geoms: 5..5 } +provenance geometry 0..1: /World/KeyLight +provenance geometry 1..2: /World/ShadowCard +provenance geometry 2..3: /World/Floor +provenance geometry 3..4: /World/Riser +provenance geometry 4..5: /World/Mover +provenance mesh: MeshOrigin { geom_id: 1, slot: 0, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 2, slot: 1, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 3, slot: 2, baked: false, moving: true } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 6610719295604273699, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 1: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 8416296582947184296, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 2: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 12040084758835538402, n_points: 8, n_indices: 24, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/World/Cam"), cameras: ["/World/Cam"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/World/Cam"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/motionblur_usda-f2666f3e50d41453-2.image b/crates/crust-core/tests/data/import_baselines/motionblur_usda-f2666f3e50d41453-2.image new file mode 100644 index 000000000..d50d3f6a9 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/motionblur_usda-f2666f3e50d41453-2.image @@ -0,0 +1 @@ +96x54 16spp clamp-off 81548b5cda94f9f8 diff --git a/crates/crust-core/tests/data/import_baselines/motionblur_usda-ff0d49c1a505d497-1.digest b/crates/crust-core/tests/data/import_baselines/motionblur_usda-ff0d49c1a505d497-1.digest new file mode 100644 index 000000000..95974f4f9 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/motionblur_usda-ff0d49c1a505d497-1.digest @@ -0,0 +1,37 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/World/Cam") +camera: Camera { origin: Vec3A(0.0, 1.5, 7.0), lower_left_corner: Vec3A(-5.6632595, -1.6855836, -3.0), horizontal: Vec3A(11.326519, 0.0, 0.0), vertical: Vec3A(0.0, 6.371167, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: Some("/Render/settings") +settings: RenderSettings { samples_per_pixel: 16, max_depth: 4, width: 96, height: 54, region: PixelRect { x0: 0, y0: 0, x1: 96, y1: 54 }, min_samples_per_pixel: 8, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 24.0, aperture: [20.955, 15.2908], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 10.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/motionblur.usda"], invisible_overrides: Some(0) } +layer: $DIR/motionblur.usda +warning: Warning { code: AssetUnsupportedByHost, kind: Skipped, count: 1, prims: [], message: "No asset loader: environment map $DIR/sky_gradient.exr ignored — the dome falls back to its uniform colour. Use Scene::from_usd_with_assets to supply one." } +lights: 2 +light 0: area name Some("/World/KeyLight") lpe None pmf 0.5 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 1: dome name Some("/World/Sky") lpe None pmf 0.5 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 5 geometries, PrimitiveBreakdown { triangles: 6, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 2 } top level, PrimitiveBreakdown { triangles: 18, spheres: 1, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 2 } unique, motion true +geom 0: material #0 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:9de8214b59f6ec57 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=2:9de8214b59f6ec57 +geom 1: material #1 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:c358c11454e39a05 camera=0:cbf29ce484222325 shadow=2:c358c11454e39a05 indirect=2:c358c11454e39a05 +geom 2: material #1 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:be0b97004c4d3e85 camera=2:be0b97004c4d3e85 shadow=2:be0b97004c4d3e85 indirect=2:be0b97004c4d3e85 +geom 3: material #1 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [Translation(Vec3A(0.0, 0.8000001, 0.0))] pieces all=12:7342f406692bb5b5 camera=12:7342f406692bb5b5 shadow=12:7342f406692bb5b5 indirect=12:7342f406692bb5b5 +geom 4: material #1 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [Translation(Vec3A(1.0, 0.0, 0.0))] pieces all=1:04359f2ccebe8d35 camera=1:04359f2ccebe8d35 shadow=1:04359f2ccebe8d35 indirect=1:04359f2ccebe8d35 +provenance light /World/KeyLight: LightOrigin { index: 0, geoms: 0..1 } +provenance light /World/Sky: LightOrigin { index: 1, geoms: 5..5 } +provenance geometry 0..1: /World/KeyLight +provenance geometry 1..2: /World/ShadowCard +provenance geometry 2..3: /World/Floor +provenance geometry 3..4: /World/Riser +provenance geometry 4..5: /World/Mover +provenance mesh: MeshOrigin { geom_id: 1, slot: 0, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 2, slot: 1, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 3, slot: 2, baked: false, moving: true } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 6610719295604273699, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 1: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 8416296582947184296, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 2: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 12040084758835538402, n_points: 8, n_indices: 24, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/World/Cam"), cameras: ["/World/Cam"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/World/Cam"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/motionblur_usda-ff0d49c1a505d497-1.image b/crates/crust-core/tests/data/import_baselines/motionblur_usda-ff0d49c1a505d497-1.image new file mode 100644 index 000000000..d50d3f6a9 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/motionblur_usda-ff0d49c1a505d497-1.image @@ -0,0 +1 @@ +96x54 16spp clamp-off 81548b5cda94f9f8 diff --git a/crates/crust-core/tests/data/import_baselines/motionvector_aliases_usda-8852d8dcf38ecf0d-1.digest b/crates/crust-core/tests/data/import_baselines/motionvector_aliases_usda-8852d8dcf38ecf0d-1.digest new file mode 100644 index 000000000..58645c558 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/motionvector_aliases_usda-8852d8dcf38ecf0d-1.digest @@ -0,0 +1,19 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/World/other") +camera: Camera { origin: Vec3A(0.0, 0.0, 0.0), lower_left_corner: Vec3A(-2.7183647, -1.5290802, -10.0), horizontal: Vec3A(5.4367294, 0.0, 0.0), vertical: Vec3A(0.0, 3.0581603, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: Some("/Render/settings") +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 640, height: 360, region: PixelRect { x0: 0, y0: 0, x1: 640, y1: 360 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [AovProduct { prim_path: "/Render/p", name: "p.exr", vars: [AovVar { prim_path: "/Render/ok", name: "ok", channel_prefix: None, source: MotionVector, components: 2, precision: Half, accumulation: Closest, clear: 0.0, expression: None, raw: false, variance: false }], attributes: [] }], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 50.0, aperture: [20.955, 15.2908], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 10.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/motionvector_aliases.usda"], invisible_overrides: Some(0) } +layer: $DIR/motionvector_aliases.usda +warning: Warning { code: AovUnknownSource, kind: Skipped, count: 3, prims: ["/Render/velocity", "/Render/Vector", "/Render/motionFore"], message: "/Render/velocity: unknown raw source \"velocity\"; no channel written (crust's AOV names are listed in the user documentation, usd/aovs)" } +lights: 0 +volumes: 0 +world: 1 geometries, PrimitiveBreakdown { triangles: 0, spheres: 1, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 0, spheres: 1, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:fb1e7d48790aec95 camera=1:fb1e7d48790aec95 shadow=1:fb1e7d48790aec95 indirect=1:fb1e7d48790aec95 +provenance geometry 0..1: /World/ball +provenance spheres: [0] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/World/other"), cameras: ["/World/other", "/World/cam"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/World/other"), offsets: [0, 0], interval: None, query: true, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/motionvector_aliases_usda-8852d8dcf38ecf0d-1.image b/crates/crust-core/tests/data/import_baselines/motionvector_aliases_usda-8852d8dcf38ecf0d-1.image new file mode 100644 index 000000000..c734c5b1d --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/motionvector_aliases_usda-8852d8dcf38ecf0d-1.image @@ -0,0 +1 @@ +640x360 16spp clamp-off a04a09c0d4b5e325 diff --git a/crates/crust-core/tests/data/import_baselines/motionvector_blurred_usda-6d69c20d22e19877-1.digest b/crates/crust-core/tests/data/import_baselines/motionvector_blurred_usda-6d69c20d22e19877-1.digest new file mode 100644 index 000000000..d3956b244 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/motionvector_blurred_usda-6d69c20d22e19877-1.digest @@ -0,0 +1,34 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/World/Cam") +camera: Camera { origin: Vec3A(0.0, 1.0, 8.0), lower_left_corner: Vec3A(-5.6632595, -2.1855836, -2.0), horizontal: Vec3A(11.326519, 0.0, 0.0), vertical: Vec3A(0.0, 6.371167, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: Some("/Render/settings") +settings: RenderSettings { samples_per_pixel: 16, max_depth: 4, width: 128, height: 72, region: PixelRect { x0: 0, y0: 0, x1: 128, y1: 72 }, min_samples_per_pixel: 16, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [AovProduct { prim_path: "/Render/Products/comp", name: "renders/motionvector.exr", vars: [AovVar { prim_path: "/Render/Products/Vars/C", name: "C", channel_prefix: None, source: Color, components: 4, precision: Float, accumulation: Filtered, clear: 0.0, expression: None, raw: false, variance: false }, AovVar { prim_path: "/Render/Products/Vars/P", name: "P", channel_prefix: None, source: P, components: 3, precision: Float, accumulation: Closest, clear: 0.0, expression: None, raw: false, variance: false }, AovVar { prim_path: "/Render/Products/Vars/forward", name: "forward", channel_prefix: None, source: MotionVector, components: 2, precision: Float, accumulation: Closest, clear: 0.0, expression: None, raw: false, variance: false }], attributes: [] }], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 24.0, aperture: [20.955, 15.2908], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 10.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/motionvector_blurred.usda"], invisible_overrides: Some(0) } +layer: $DIR/motionvector_blurred.usda +lights: 2 +light 0: area name Some("/World/KeyLight") lpe None pmf 0.5 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 1: dome name Some("/World/Sky") lpe None pmf 0.5 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 5 geometries, PrimitiveBreakdown { triangles: 2, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 4 } top level, PrimitiveBreakdown { triangles: 6, spheres: 2, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 4 } unique, motion true +geom 0: material #0 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:ab69abb2d09cba04 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=2:ab69abb2d09cba04 +geom 1: material #1 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [Translation(Vec3A(0.8, 0.0, 0.0))] pieces all=2:b249cbbc5228e152 camera=2:b249cbbc5228e152 shadow=2:b249cbbc5228e152 indirect=2:b249cbbc5228e152 +geom 2: material #1 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [Translation(Vec3A(0.5, 0.29999995, 0.0))] pieces all=2:a31411e73ec5bed6 camera=2:a31411e73ec5bed6 shadow=2:a31411e73ec5bed6 indirect=2:a31411e73ec5bed6 +geom 3: material #1 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [Translation(Vec3A(0.0, 1.0, 0.0))] pieces all=1:f8d040a1b801ab29 camera=1:f8d040a1b801ab29 shadow=1:f8d040a1b801ab29 indirect=1:f8d040a1b801ab29 +geom 4: material #1 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [Translation(Vec3A(1.2, 0.0, 0.0))] pieces all=1:bc27a6d18babc1fe camera=1:bc27a6d18babc1fe shadow=1:bc27a6d18babc1fe indirect=1:bc27a6d18babc1fe +provenance light /World/KeyLight: LightOrigin { index: 0, geoms: 0..1 } +provenance light /World/Sky: LightOrigin { index: 1, geoms: 1..1 } +provenance geometry 0..1: /World/KeyLight +provenance geometry 1..2: /World/Floor +provenance geometry 2..3: /World/Card +provenance geometry 3..4: /World/Up +provenance geometry 4..5: /World/Right +provenance mesh: MeshOrigin { geom_id: 1, slot: 0, baked: false, moving: true } +provenance mesh: MeshOrigin { geom_id: 2, slot: 1, baked: false, moving: true } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 2876157804411373923, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 1: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 7377966807836294734, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: true, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/World/Cam"), cameras: ["/World/Cam"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/World/Cam"), offsets: [0, 0], interval: None, query: true, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/motionvector_blurred_usda-6d69c20d22e19877-1.image b/crates/crust-core/tests/data/import_baselines/motionvector_blurred_usda-6d69c20d22e19877-1.image new file mode 100644 index 000000000..4a46f93d0 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/motionvector_blurred_usda-6d69c20d22e19877-1.image @@ -0,0 +1 @@ +128x72 16spp clamp-off 76059e49fd5aa45a diff --git a/crates/crust-core/tests/data/import_baselines/motionvector_types_usda-d2a10e1c91de57de-1.digest b/crates/crust-core/tests/data/import_baselines/motionvector_types_usda-d2a10e1c91de57de-1.digest new file mode 100644 index 000000000..a86e67abe --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/motionvector_types_usda-d2a10e1c91de57de-1.digest @@ -0,0 +1,19 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/World/other") +camera: Camera { origin: Vec3A(0.0, 0.0, 0.0), lower_left_corner: Vec3A(-2.7183647, -1.5290802, -10.0), horizontal: Vec3A(5.4367294, 0.0, 0.0), vertical: Vec3A(0.0, 3.0581603, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: Some("/Render/settings") +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 640, height: 360, region: PixelRect { x0: 0, y0: 0, x1: 640, y1: 360 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [AovProduct { prim_path: "/Render/p", name: "p.exr", vars: [AovVar { prim_path: "/Render/f2", name: "f2", channel_prefix: None, source: MotionVector, components: 2, precision: Float, accumulation: Closest, clear: 0.0, expression: None, raw: false, variance: false }, AovVar { prim_path: "/Render/h2", name: "h2", channel_prefix: None, source: MotionVector, components: 2, precision: Half, accumulation: Closest, clear: 0.0, expression: None, raw: false, variance: false }, AovVar { prim_path: "/Render/st2", name: "st2", channel_prefix: None, source: MotionVector, components: 2, precision: Float, accumulation: Closest, clear: 0.0, expression: None, raw: false, variance: false }], attributes: [] }], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 50.0, aperture: [20.955, 15.2908], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 10.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/motionvector_types.usda"], invisible_overrides: Some(0) } +layer: $DIR/motionvector_types.usda +warning: Warning { code: AovTypeMismatch, kind: Skipped, count: 5, prims: ["/Render/f1", "/Render/c3", "/Render/i2", "/Render/u2", "/Render/v2"], message: "/Render/f1: motionvector cannot be written as \"float\"; no channel written" } +lights: 0 +volumes: 0 +world: 1 geometries, PrimitiveBreakdown { triangles: 0, spheres: 1, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 0, spheres: 1, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:fb1e7d48790aec95 camera=1:fb1e7d48790aec95 shadow=1:fb1e7d48790aec95 indirect=1:fb1e7d48790aec95 +provenance geometry 0..1: /World/ball +provenance spheres: [0] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/World/other"), cameras: ["/World/other", "/World/cam"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/World/other"), offsets: [0, 0], interval: None, query: true, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/motionvector_types_usda-d2a10e1c91de57de-1.image b/crates/crust-core/tests/data/import_baselines/motionvector_types_usda-d2a10e1c91de57de-1.image new file mode 100644 index 000000000..c734c5b1d --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/motionvector_types_usda-d2a10e1c91de57de-1.image @@ -0,0 +1 @@ +640x360 16spp clamp-off a04a09c0d4b5e325 diff --git a/crates/crust-core/tests/data/import_baselines/motionvector_usda-0097c4dc99684b31-1.digest b/crates/crust-core/tests/data/import_baselines/motionvector_usda-0097c4dc99684b31-1.digest new file mode 100644 index 000000000..3a513a409 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/motionvector_usda-0097c4dc99684b31-1.digest @@ -0,0 +1,34 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/World/Cam") +camera: Camera { origin: Vec3A(0.0, 1.0, 8.0), lower_left_corner: Vec3A(-5.6632595, -2.1855836, -2.0), horizontal: Vec3A(11.326519, 0.0, 0.0), vertical: Vec3A(0.0, 6.371167, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: Some("/Render/settings") +settings: RenderSettings { samples_per_pixel: 16, max_depth: 4, width: 128, height: 72, region: PixelRect { x0: 0, y0: 0, x1: 128, y1: 72 }, min_samples_per_pixel: 16, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: false, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [AovProduct { prim_path: "/Render/Products/comp", name: "renders/motionvector.exr", vars: [AovVar { prim_path: "/Render/Products/Vars/C", name: "C", channel_prefix: None, source: Color, components: 4, precision: Float, accumulation: Filtered, clear: 0.0, expression: None, raw: false, variance: false }, AovVar { prim_path: "/Render/Products/Vars/P", name: "P", channel_prefix: None, source: P, components: 3, precision: Float, accumulation: Closest, clear: 0.0, expression: None, raw: false, variance: false }, AovVar { prim_path: "/Render/Products/Vars/forward", name: "forward", channel_prefix: None, source: MotionVector, components: 2, precision: Float, accumulation: Closest, clear: 0.0, expression: None, raw: false, variance: false }], attributes: [] }], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 24.0, aperture: [20.955, 15.2908], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 10.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/motionvector.usda"], invisible_overrides: Some(0) } +layer: $DIR/motionvector.usda +lights: 2 +light 0: area name Some("/World/KeyLight") lpe None pmf 0.5 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 1: dome name Some("/World/Sky") lpe None pmf 0.5 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 5 geometries, PrimitiveBreakdown { triangles: 2, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 4 } top level, PrimitiveBreakdown { triangles: 6, spheres: 2, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 4 } unique, motion true +geom 0: material #0 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:ab69abb2d09cba04 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=2:ab69abb2d09cba04 +geom 1: material #1 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [Translation(Vec3A(0.8, 0.0, 0.0))] pieces all=2:b249cbbc5228e152 camera=2:b249cbbc5228e152 shadow=2:b249cbbc5228e152 indirect=2:b249cbbc5228e152 +geom 2: material #1 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [Translation(Vec3A(0.5, 0.29999995, 0.0))] pieces all=2:a31411e73ec5bed6 camera=2:a31411e73ec5bed6 shadow=2:a31411e73ec5bed6 indirect=2:a31411e73ec5bed6 +geom 3: material #1 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [Translation(Vec3A(0.0, 1.0, 0.0))] pieces all=1:f8d040a1b801ab29 camera=1:f8d040a1b801ab29 shadow=1:f8d040a1b801ab29 indirect=1:f8d040a1b801ab29 +geom 4: material #1 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [Translation(Vec3A(1.2, 0.0, 0.0))] pieces all=1:bc27a6d18babc1fe camera=1:bc27a6d18babc1fe shadow=1:bc27a6d18babc1fe indirect=1:bc27a6d18babc1fe +provenance light /World/KeyLight: LightOrigin { index: 0, geoms: 0..1 } +provenance light /World/Sky: LightOrigin { index: 1, geoms: 1..1 } +provenance geometry 0..1: /World/KeyLight +provenance geometry 1..2: /World/Floor +provenance geometry 2..3: /World/Card +provenance geometry 3..4: /World/Up +provenance geometry 4..5: /World/Right +provenance mesh: MeshOrigin { geom_id: 1, slot: 0, baked: false, moving: true } +provenance mesh: MeshOrigin { geom_id: 2, slot: 1, baked: false, moving: true } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 2876157804411373923, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 1: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 7377966807836294734, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: true, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/World/Cam"), cameras: ["/World/Cam"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/World/Cam"), offsets: [0, 0], interval: None, query: true, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/motionvector_usda-0097c4dc99684b31-1.image b/crates/crust-core/tests/data/import_baselines/motionvector_usda-0097c4dc99684b31-1.image new file mode 100644 index 000000000..718291567 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/motionvector_usda-0097c4dc99684b31-1.image @@ -0,0 +1 @@ +128x72 16spp clamp-off 1ef9eb51501467a1 diff --git a/crates/crust-core/tests/data/import_baselines/motionvector_usda-2921a3a583a7af01-1.digest b/crates/crust-core/tests/data/import_baselines/motionvector_usda-2921a3a583a7af01-1.digest new file mode 100644 index 000000000..8637a56c6 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/motionvector_usda-2921a3a583a7af01-1.digest @@ -0,0 +1,34 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/World/Cam") +camera: Camera { origin: Vec3A(0.0, 1.0, 8.0), lower_left_corner: Vec3A(-5.6632595, -2.1855836, -2.0), horizontal: Vec3A(11.326519, 0.0, 0.0), vertical: Vec3A(0.0, 6.371167, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: Some("/Render/settings") +settings: RenderSettings { samples_per_pixel: 16, max_depth: 4, width: 128, height: 72, region: PixelRect { x0: 0, y0: 0, x1: 128, y1: 72 }, min_samples_per_pixel: 16, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: false, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [AovProduct { prim_path: "/Render/Products/comp", name: "renders/motionvector.exr", vars: [AovVar { prim_path: "/Render/Products/Vars/C", name: "C", channel_prefix: None, source: Color, components: 4, precision: Float, accumulation: Filtered, clear: 0.0, expression: None, raw: false, variance: false }, AovVar { prim_path: "/Render/Products/Vars/P", name: "P", channel_prefix: None, source: P, components: 3, precision: Float, accumulation: Closest, clear: 0.0, expression: None, raw: false, variance: false }, AovVar { prim_path: "/Render/Products/Vars/forward", name: "forward", channel_prefix: None, source: MotionVector, components: 2, precision: Float, accumulation: Closest, clear: 0.0, expression: None, raw: false, variance: false }], attributes: [] }], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 24.0, aperture: [20.955, 15.2908], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 10.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/motionvector.usda"], invisible_overrides: Some(0) } +layer: $DIR/motionvector.usda +lights: 2 +light 0: area name Some("/World/KeyLight") lpe None pmf 0.5 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 1: dome name Some("/World/Sky") lpe None pmf 0.5 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 5 geometries, PrimitiveBreakdown { triangles: 2, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 4 } top level, PrimitiveBreakdown { triangles: 6, spheres: 2, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 4 } unique, motion true +geom 0: material #0 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:ab69abb2d09cba04 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=2:ab69abb2d09cba04 +geom 1: material #1 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [Translation(Vec3A(0.8, 0.0, 0.0))] pieces all=2:b249cbbc5228e152 camera=2:b249cbbc5228e152 shadow=2:b249cbbc5228e152 indirect=2:b249cbbc5228e152 +geom 2: material #1 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [Translation(Vec3A(0.5, 0.29999995, 0.0))] pieces all=2:a31411e73ec5bed6 camera=2:a31411e73ec5bed6 shadow=2:a31411e73ec5bed6 indirect=2:a31411e73ec5bed6 +geom 3: material #1 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [Translation(Vec3A(0.0, 1.0, 0.0))] pieces all=1:f8d040a1b801ab29 camera=1:f8d040a1b801ab29 shadow=1:f8d040a1b801ab29 indirect=1:f8d040a1b801ab29 +geom 4: material #1 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [Translation(Vec3A(1.2, 0.0, 0.0))] pieces all=1:bc27a6d18babc1fe camera=1:bc27a6d18babc1fe shadow=1:bc27a6d18babc1fe indirect=1:bc27a6d18babc1fe +provenance light /World/KeyLight: LightOrigin { index: 0, geoms: 0..1 } +provenance light /World/Sky: LightOrigin { index: 1, geoms: 1..1 } +provenance geometry 0..1: /World/KeyLight +provenance geometry 1..2: /World/Floor +provenance geometry 2..3: /World/Card +provenance geometry 3..4: /World/Up +provenance geometry 4..5: /World/Right +provenance mesh: MeshOrigin { geom_id: 1, slot: 0, baked: false, moving: true } +provenance mesh: MeshOrigin { geom_id: 2, slot: 1, baked: false, moving: true } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 2876157804411373923, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 1: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 7377966807836294734, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/World/Cam"), cameras: ["/World/Cam"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/World/Cam"), offsets: [0, 0], interval: None, query: true, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/motionvector_usda-2921a3a583a7af01-1.image b/crates/crust-core/tests/data/import_baselines/motionvector_usda-2921a3a583a7af01-1.image new file mode 100644 index 000000000..718291567 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/motionvector_usda-2921a3a583a7af01-1.image @@ -0,0 +1 @@ +128x72 16spp clamp-off 1ef9eb51501467a1 diff --git a/crates/crust-core/tests/data/import_baselines/motionvector_usda-37a40f3b6ac9aeab-1.digest b/crates/crust-core/tests/data/import_baselines/motionvector_usda-37a40f3b6ac9aeab-1.digest new file mode 100644 index 000000000..8637a56c6 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/motionvector_usda-37a40f3b6ac9aeab-1.digest @@ -0,0 +1,34 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/World/Cam") +camera: Camera { origin: Vec3A(0.0, 1.0, 8.0), lower_left_corner: Vec3A(-5.6632595, -2.1855836, -2.0), horizontal: Vec3A(11.326519, 0.0, 0.0), vertical: Vec3A(0.0, 6.371167, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: Some("/Render/settings") +settings: RenderSettings { samples_per_pixel: 16, max_depth: 4, width: 128, height: 72, region: PixelRect { x0: 0, y0: 0, x1: 128, y1: 72 }, min_samples_per_pixel: 16, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: false, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [AovProduct { prim_path: "/Render/Products/comp", name: "renders/motionvector.exr", vars: [AovVar { prim_path: "/Render/Products/Vars/C", name: "C", channel_prefix: None, source: Color, components: 4, precision: Float, accumulation: Filtered, clear: 0.0, expression: None, raw: false, variance: false }, AovVar { prim_path: "/Render/Products/Vars/P", name: "P", channel_prefix: None, source: P, components: 3, precision: Float, accumulation: Closest, clear: 0.0, expression: None, raw: false, variance: false }, AovVar { prim_path: "/Render/Products/Vars/forward", name: "forward", channel_prefix: None, source: MotionVector, components: 2, precision: Float, accumulation: Closest, clear: 0.0, expression: None, raw: false, variance: false }], attributes: [] }], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 24.0, aperture: [20.955, 15.2908], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 10.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/motionvector.usda"], invisible_overrides: Some(0) } +layer: $DIR/motionvector.usda +lights: 2 +light 0: area name Some("/World/KeyLight") lpe None pmf 0.5 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 1: dome name Some("/World/Sky") lpe None pmf 0.5 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 5 geometries, PrimitiveBreakdown { triangles: 2, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 4 } top level, PrimitiveBreakdown { triangles: 6, spheres: 2, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 4 } unique, motion true +geom 0: material #0 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:ab69abb2d09cba04 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=2:ab69abb2d09cba04 +geom 1: material #1 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [Translation(Vec3A(0.8, 0.0, 0.0))] pieces all=2:b249cbbc5228e152 camera=2:b249cbbc5228e152 shadow=2:b249cbbc5228e152 indirect=2:b249cbbc5228e152 +geom 2: material #1 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [Translation(Vec3A(0.5, 0.29999995, 0.0))] pieces all=2:a31411e73ec5bed6 camera=2:a31411e73ec5bed6 shadow=2:a31411e73ec5bed6 indirect=2:a31411e73ec5bed6 +geom 3: material #1 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [Translation(Vec3A(0.0, 1.0, 0.0))] pieces all=1:f8d040a1b801ab29 camera=1:f8d040a1b801ab29 shadow=1:f8d040a1b801ab29 indirect=1:f8d040a1b801ab29 +geom 4: material #1 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [Translation(Vec3A(1.2, 0.0, 0.0))] pieces all=1:bc27a6d18babc1fe camera=1:bc27a6d18babc1fe shadow=1:bc27a6d18babc1fe indirect=1:bc27a6d18babc1fe +provenance light /World/KeyLight: LightOrigin { index: 0, geoms: 0..1 } +provenance light /World/Sky: LightOrigin { index: 1, geoms: 1..1 } +provenance geometry 0..1: /World/KeyLight +provenance geometry 1..2: /World/Floor +provenance geometry 2..3: /World/Card +provenance geometry 3..4: /World/Up +provenance geometry 4..5: /World/Right +provenance mesh: MeshOrigin { geom_id: 1, slot: 0, baked: false, moving: true } +provenance mesh: MeshOrigin { geom_id: 2, slot: 1, baked: false, moving: true } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 2876157804411373923, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 1: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 7377966807836294734, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/World/Cam"), cameras: ["/World/Cam"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/World/Cam"), offsets: [0, 0], interval: None, query: true, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/motionvector_usda-37a40f3b6ac9aeab-1.image b/crates/crust-core/tests/data/import_baselines/motionvector_usda-37a40f3b6ac9aeab-1.image new file mode 100644 index 000000000..718291567 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/motionvector_usda-37a40f3b6ac9aeab-1.image @@ -0,0 +1 @@ +128x72 16spp clamp-off 1ef9eb51501467a1 diff --git a/crates/crust-core/tests/data/import_baselines/motionvector_usda-37a40f3b6ac9aeab-2.digest b/crates/crust-core/tests/data/import_baselines/motionvector_usda-37a40f3b6ac9aeab-2.digest new file mode 100644 index 000000000..8637a56c6 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/motionvector_usda-37a40f3b6ac9aeab-2.digest @@ -0,0 +1,34 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/World/Cam") +camera: Camera { origin: Vec3A(0.0, 1.0, 8.0), lower_left_corner: Vec3A(-5.6632595, -2.1855836, -2.0), horizontal: Vec3A(11.326519, 0.0, 0.0), vertical: Vec3A(0.0, 6.371167, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: Some("/Render/settings") +settings: RenderSettings { samples_per_pixel: 16, max_depth: 4, width: 128, height: 72, region: PixelRect { x0: 0, y0: 0, x1: 128, y1: 72 }, min_samples_per_pixel: 16, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: false, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [AovProduct { prim_path: "/Render/Products/comp", name: "renders/motionvector.exr", vars: [AovVar { prim_path: "/Render/Products/Vars/C", name: "C", channel_prefix: None, source: Color, components: 4, precision: Float, accumulation: Filtered, clear: 0.0, expression: None, raw: false, variance: false }, AovVar { prim_path: "/Render/Products/Vars/P", name: "P", channel_prefix: None, source: P, components: 3, precision: Float, accumulation: Closest, clear: 0.0, expression: None, raw: false, variance: false }, AovVar { prim_path: "/Render/Products/Vars/forward", name: "forward", channel_prefix: None, source: MotionVector, components: 2, precision: Float, accumulation: Closest, clear: 0.0, expression: None, raw: false, variance: false }], attributes: [] }], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 24.0, aperture: [20.955, 15.2908], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 10.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/motionvector.usda"], invisible_overrides: Some(0) } +layer: $DIR/motionvector.usda +lights: 2 +light 0: area name Some("/World/KeyLight") lpe None pmf 0.5 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 1: dome name Some("/World/Sky") lpe None pmf 0.5 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 5 geometries, PrimitiveBreakdown { triangles: 2, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 4 } top level, PrimitiveBreakdown { triangles: 6, spheres: 2, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 4 } unique, motion true +geom 0: material #0 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:ab69abb2d09cba04 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=2:ab69abb2d09cba04 +geom 1: material #1 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [Translation(Vec3A(0.8, 0.0, 0.0))] pieces all=2:b249cbbc5228e152 camera=2:b249cbbc5228e152 shadow=2:b249cbbc5228e152 indirect=2:b249cbbc5228e152 +geom 2: material #1 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [Translation(Vec3A(0.5, 0.29999995, 0.0))] pieces all=2:a31411e73ec5bed6 camera=2:a31411e73ec5bed6 shadow=2:a31411e73ec5bed6 indirect=2:a31411e73ec5bed6 +geom 3: material #1 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [Translation(Vec3A(0.0, 1.0, 0.0))] pieces all=1:f8d040a1b801ab29 camera=1:f8d040a1b801ab29 shadow=1:f8d040a1b801ab29 indirect=1:f8d040a1b801ab29 +geom 4: material #1 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [Translation(Vec3A(1.2, 0.0, 0.0))] pieces all=1:bc27a6d18babc1fe camera=1:bc27a6d18babc1fe shadow=1:bc27a6d18babc1fe indirect=1:bc27a6d18babc1fe +provenance light /World/KeyLight: LightOrigin { index: 0, geoms: 0..1 } +provenance light /World/Sky: LightOrigin { index: 1, geoms: 1..1 } +provenance geometry 0..1: /World/KeyLight +provenance geometry 1..2: /World/Floor +provenance geometry 2..3: /World/Card +provenance geometry 3..4: /World/Up +provenance geometry 4..5: /World/Right +provenance mesh: MeshOrigin { geom_id: 1, slot: 0, baked: false, moving: true } +provenance mesh: MeshOrigin { geom_id: 2, slot: 1, baked: false, moving: true } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 2876157804411373923, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 1: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 7377966807836294734, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/World/Cam"), cameras: ["/World/Cam"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/World/Cam"), offsets: [0, 0], interval: None, query: true, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/motionvector_usda-37a40f3b6ac9aeab-2.image b/crates/crust-core/tests/data/import_baselines/motionvector_usda-37a40f3b6ac9aeab-2.image new file mode 100644 index 000000000..718291567 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/motionvector_usda-37a40f3b6ac9aeab-2.image @@ -0,0 +1 @@ +128x72 16spp clamp-off 1ef9eb51501467a1 diff --git a/crates/crust-core/tests/data/import_baselines/motionvector_usda-43ed7e424bbaa4f7-1.digest b/crates/crust-core/tests/data/import_baselines/motionvector_usda-43ed7e424bbaa4f7-1.digest new file mode 100644 index 000000000..8637a56c6 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/motionvector_usda-43ed7e424bbaa4f7-1.digest @@ -0,0 +1,34 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/World/Cam") +camera: Camera { origin: Vec3A(0.0, 1.0, 8.0), lower_left_corner: Vec3A(-5.6632595, -2.1855836, -2.0), horizontal: Vec3A(11.326519, 0.0, 0.0), vertical: Vec3A(0.0, 6.371167, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: Some("/Render/settings") +settings: RenderSettings { samples_per_pixel: 16, max_depth: 4, width: 128, height: 72, region: PixelRect { x0: 0, y0: 0, x1: 128, y1: 72 }, min_samples_per_pixel: 16, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: false, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [AovProduct { prim_path: "/Render/Products/comp", name: "renders/motionvector.exr", vars: [AovVar { prim_path: "/Render/Products/Vars/C", name: "C", channel_prefix: None, source: Color, components: 4, precision: Float, accumulation: Filtered, clear: 0.0, expression: None, raw: false, variance: false }, AovVar { prim_path: "/Render/Products/Vars/P", name: "P", channel_prefix: None, source: P, components: 3, precision: Float, accumulation: Closest, clear: 0.0, expression: None, raw: false, variance: false }, AovVar { prim_path: "/Render/Products/Vars/forward", name: "forward", channel_prefix: None, source: MotionVector, components: 2, precision: Float, accumulation: Closest, clear: 0.0, expression: None, raw: false, variance: false }], attributes: [] }], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 24.0, aperture: [20.955, 15.2908], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 10.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/motionvector.usda"], invisible_overrides: Some(0) } +layer: $DIR/motionvector.usda +lights: 2 +light 0: area name Some("/World/KeyLight") lpe None pmf 0.5 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 1: dome name Some("/World/Sky") lpe None pmf 0.5 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 5 geometries, PrimitiveBreakdown { triangles: 2, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 4 } top level, PrimitiveBreakdown { triangles: 6, spheres: 2, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 4 } unique, motion true +geom 0: material #0 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:ab69abb2d09cba04 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=2:ab69abb2d09cba04 +geom 1: material #1 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [Translation(Vec3A(0.8, 0.0, 0.0))] pieces all=2:b249cbbc5228e152 camera=2:b249cbbc5228e152 shadow=2:b249cbbc5228e152 indirect=2:b249cbbc5228e152 +geom 2: material #1 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [Translation(Vec3A(0.5, 0.29999995, 0.0))] pieces all=2:a31411e73ec5bed6 camera=2:a31411e73ec5bed6 shadow=2:a31411e73ec5bed6 indirect=2:a31411e73ec5bed6 +geom 3: material #1 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [Translation(Vec3A(0.0, 1.0, 0.0))] pieces all=1:f8d040a1b801ab29 camera=1:f8d040a1b801ab29 shadow=1:f8d040a1b801ab29 indirect=1:f8d040a1b801ab29 +geom 4: material #1 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [Translation(Vec3A(1.2, 0.0, 0.0))] pieces all=1:bc27a6d18babc1fe camera=1:bc27a6d18babc1fe shadow=1:bc27a6d18babc1fe indirect=1:bc27a6d18babc1fe +provenance light /World/KeyLight: LightOrigin { index: 0, geoms: 0..1 } +provenance light /World/Sky: LightOrigin { index: 1, geoms: 1..1 } +provenance geometry 0..1: /World/KeyLight +provenance geometry 1..2: /World/Floor +provenance geometry 2..3: /World/Card +provenance geometry 3..4: /World/Up +provenance geometry 4..5: /World/Right +provenance mesh: MeshOrigin { geom_id: 1, slot: 0, baked: false, moving: true } +provenance mesh: MeshOrigin { geom_id: 2, slot: 1, baked: false, moving: true } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 2876157804411373923, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 1: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 7377966807836294734, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/World/Cam"), cameras: ["/World/Cam"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/World/Cam"), offsets: [0, 0], interval: None, query: true, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/motionvector_usda-43ed7e424bbaa4f7-1.image b/crates/crust-core/tests/data/import_baselines/motionvector_usda-43ed7e424bbaa4f7-1.image new file mode 100644 index 000000000..718291567 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/motionvector_usda-43ed7e424bbaa4f7-1.image @@ -0,0 +1 @@ +128x72 16spp clamp-off 1ef9eb51501467a1 diff --git a/crates/crust-core/tests/data/import_baselines/motionvector_usda-6dec65e3aa55dc9d-1.digest b/crates/crust-core/tests/data/import_baselines/motionvector_usda-6dec65e3aa55dc9d-1.digest new file mode 100644 index 000000000..3a513a409 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/motionvector_usda-6dec65e3aa55dc9d-1.digest @@ -0,0 +1,34 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/World/Cam") +camera: Camera { origin: Vec3A(0.0, 1.0, 8.0), lower_left_corner: Vec3A(-5.6632595, -2.1855836, -2.0), horizontal: Vec3A(11.326519, 0.0, 0.0), vertical: Vec3A(0.0, 6.371167, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: Some("/Render/settings") +settings: RenderSettings { samples_per_pixel: 16, max_depth: 4, width: 128, height: 72, region: PixelRect { x0: 0, y0: 0, x1: 128, y1: 72 }, min_samples_per_pixel: 16, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: false, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [AovProduct { prim_path: "/Render/Products/comp", name: "renders/motionvector.exr", vars: [AovVar { prim_path: "/Render/Products/Vars/C", name: "C", channel_prefix: None, source: Color, components: 4, precision: Float, accumulation: Filtered, clear: 0.0, expression: None, raw: false, variance: false }, AovVar { prim_path: "/Render/Products/Vars/P", name: "P", channel_prefix: None, source: P, components: 3, precision: Float, accumulation: Closest, clear: 0.0, expression: None, raw: false, variance: false }, AovVar { prim_path: "/Render/Products/Vars/forward", name: "forward", channel_prefix: None, source: MotionVector, components: 2, precision: Float, accumulation: Closest, clear: 0.0, expression: None, raw: false, variance: false }], attributes: [] }], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 24.0, aperture: [20.955, 15.2908], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 10.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/motionvector.usda"], invisible_overrides: Some(0) } +layer: $DIR/motionvector.usda +lights: 2 +light 0: area name Some("/World/KeyLight") lpe None pmf 0.5 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 1: dome name Some("/World/Sky") lpe None pmf 0.5 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 5 geometries, PrimitiveBreakdown { triangles: 2, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 4 } top level, PrimitiveBreakdown { triangles: 6, spheres: 2, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 4 } unique, motion true +geom 0: material #0 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:ab69abb2d09cba04 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=2:ab69abb2d09cba04 +geom 1: material #1 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [Translation(Vec3A(0.8, 0.0, 0.0))] pieces all=2:b249cbbc5228e152 camera=2:b249cbbc5228e152 shadow=2:b249cbbc5228e152 indirect=2:b249cbbc5228e152 +geom 2: material #1 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [Translation(Vec3A(0.5, 0.29999995, 0.0))] pieces all=2:a31411e73ec5bed6 camera=2:a31411e73ec5bed6 shadow=2:a31411e73ec5bed6 indirect=2:a31411e73ec5bed6 +geom 3: material #1 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [Translation(Vec3A(0.0, 1.0, 0.0))] pieces all=1:f8d040a1b801ab29 camera=1:f8d040a1b801ab29 shadow=1:f8d040a1b801ab29 indirect=1:f8d040a1b801ab29 +geom 4: material #1 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [Translation(Vec3A(1.2, 0.0, 0.0))] pieces all=1:bc27a6d18babc1fe camera=1:bc27a6d18babc1fe shadow=1:bc27a6d18babc1fe indirect=1:bc27a6d18babc1fe +provenance light /World/KeyLight: LightOrigin { index: 0, geoms: 0..1 } +provenance light /World/Sky: LightOrigin { index: 1, geoms: 1..1 } +provenance geometry 0..1: /World/KeyLight +provenance geometry 1..2: /World/Floor +provenance geometry 2..3: /World/Card +provenance geometry 3..4: /World/Up +provenance geometry 4..5: /World/Right +provenance mesh: MeshOrigin { geom_id: 1, slot: 0, baked: false, moving: true } +provenance mesh: MeshOrigin { geom_id: 2, slot: 1, baked: false, moving: true } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 2876157804411373923, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 1: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 7377966807836294734, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: true, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/World/Cam"), cameras: ["/World/Cam"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/World/Cam"), offsets: [0, 0], interval: None, query: true, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/motionvector_usda-6dec65e3aa55dc9d-1.image b/crates/crust-core/tests/data/import_baselines/motionvector_usda-6dec65e3aa55dc9d-1.image new file mode 100644 index 000000000..718291567 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/motionvector_usda-6dec65e3aa55dc9d-1.image @@ -0,0 +1 @@ +128x72 16spp clamp-off 1ef9eb51501467a1 diff --git a/crates/crust-core/tests/data/import_baselines/motionvector_usda-c5f34f1e623349ba-1.digest b/crates/crust-core/tests/data/import_baselines/motionvector_usda-c5f34f1e623349ba-1.digest new file mode 100644 index 000000000..3a513a409 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/motionvector_usda-c5f34f1e623349ba-1.digest @@ -0,0 +1,34 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/World/Cam") +camera: Camera { origin: Vec3A(0.0, 1.0, 8.0), lower_left_corner: Vec3A(-5.6632595, -2.1855836, -2.0), horizontal: Vec3A(11.326519, 0.0, 0.0), vertical: Vec3A(0.0, 6.371167, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: Some("/Render/settings") +settings: RenderSettings { samples_per_pixel: 16, max_depth: 4, width: 128, height: 72, region: PixelRect { x0: 0, y0: 0, x1: 128, y1: 72 }, min_samples_per_pixel: 16, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: false, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [AovProduct { prim_path: "/Render/Products/comp", name: "renders/motionvector.exr", vars: [AovVar { prim_path: "/Render/Products/Vars/C", name: "C", channel_prefix: None, source: Color, components: 4, precision: Float, accumulation: Filtered, clear: 0.0, expression: None, raw: false, variance: false }, AovVar { prim_path: "/Render/Products/Vars/P", name: "P", channel_prefix: None, source: P, components: 3, precision: Float, accumulation: Closest, clear: 0.0, expression: None, raw: false, variance: false }, AovVar { prim_path: "/Render/Products/Vars/forward", name: "forward", channel_prefix: None, source: MotionVector, components: 2, precision: Float, accumulation: Closest, clear: 0.0, expression: None, raw: false, variance: false }], attributes: [] }], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 24.0, aperture: [20.955, 15.2908], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 10.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/motionvector.usda"], invisible_overrides: Some(0) } +layer: $DIR/motionvector.usda +lights: 2 +light 0: area name Some("/World/KeyLight") lpe None pmf 0.5 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 1: dome name Some("/World/Sky") lpe None pmf 0.5 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 5 geometries, PrimitiveBreakdown { triangles: 2, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 4 } top level, PrimitiveBreakdown { triangles: 6, spheres: 2, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 4 } unique, motion true +geom 0: material #0 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:ab69abb2d09cba04 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=2:ab69abb2d09cba04 +geom 1: material #1 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [Translation(Vec3A(0.8, 0.0, 0.0))] pieces all=2:b249cbbc5228e152 camera=2:b249cbbc5228e152 shadow=2:b249cbbc5228e152 indirect=2:b249cbbc5228e152 +geom 2: material #1 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [Translation(Vec3A(0.5, 0.29999995, 0.0))] pieces all=2:a31411e73ec5bed6 camera=2:a31411e73ec5bed6 shadow=2:a31411e73ec5bed6 indirect=2:a31411e73ec5bed6 +geom 3: material #1 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [Translation(Vec3A(0.0, 1.0, 0.0))] pieces all=1:f8d040a1b801ab29 camera=1:f8d040a1b801ab29 shadow=1:f8d040a1b801ab29 indirect=1:f8d040a1b801ab29 +geom 4: material #1 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [Translation(Vec3A(1.2, 0.0, 0.0))] pieces all=1:bc27a6d18babc1fe camera=1:bc27a6d18babc1fe shadow=1:bc27a6d18babc1fe indirect=1:bc27a6d18babc1fe +provenance light /World/KeyLight: LightOrigin { index: 0, geoms: 0..1 } +provenance light /World/Sky: LightOrigin { index: 1, geoms: 1..1 } +provenance geometry 0..1: /World/KeyLight +provenance geometry 1..2: /World/Floor +provenance geometry 2..3: /World/Card +provenance geometry 3..4: /World/Up +provenance geometry 4..5: /World/Right +provenance mesh: MeshOrigin { geom_id: 1, slot: 0, baked: false, moving: true } +provenance mesh: MeshOrigin { geom_id: 2, slot: 1, baked: false, moving: true } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 2876157804411373923, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 1: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 7377966807836294734, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: true, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/World/Cam"), cameras: ["/World/Cam"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/World/Cam"), offsets: [0, 0], interval: None, query: true, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/motionvector_usda-c5f34f1e623349ba-1.image b/crates/crust-core/tests/data/import_baselines/motionvector_usda-c5f34f1e623349ba-1.image new file mode 100644 index 000000000..718291567 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/motionvector_usda-c5f34f1e623349ba-1.image @@ -0,0 +1 @@ +128x72 16spp clamp-off 1ef9eb51501467a1 diff --git a/crates/crust-core/tests/data/import_baselines/multiply_usda-8736676f00161943-1.digest b/crates/crust-core/tests/data/import_baselines/multiply_usda-8736676f00161943-1.digest new file mode 100644 index 000000000..10eda23f0 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/multiply_usda-8736676f00161943-1.digest @@ -0,0 +1,23 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: None +camera: Camera { origin: Vec3A(15.0, 3.0, 3.0), lower_left_corner: Vec3A(4.8863316, -0.044797063, 4.174048), horizontal: Vec3A(1.2295314, 0.0, -6.147657), vertical: Vec3A(-0.44830504, 3.4967792, -0.08966101), u: Vec3A(0.19611613, 0.0, -0.9805807), v: Vec3A(-0.1271232, 0.991561, -0.02542464), lens_radius: 0.05, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: None +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 640, height: 360, region: PixelRect { x0: 0, y0: 0, x1: 640, y1: 360 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: None, depth_of_field: true, motion_blur: false, layer_stack: ["$DIR/multiply.usda"], invisible_overrides: Some(0) } +layer: $DIR/multiply.usda +warning: Warning { code: MeshDisplacedAtCage, kind: Approximated, count: 1, prims: ["/World/Quads"], message: "Mesh at /World/Quads is displaced at its cage resolution, so only cage vertices move — raise --subdiv-level or set --subdiv-edge-length to dice it finer (further occurrences are counted in the import's warnings)" } +warning: Warning { code: CameraMissing, kind: Skipped, count: 1, prims: [], message: "USD stage has no UsdGeomCamera — falling back to world::get_settings camera" } +lights: 0 +volumes: 0 +world: 1 geometries, PrimitiveBreakdown { triangles: 4, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 4, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=4:707d53a33882a13a camera=4:707d53a33882a13a shadow=4:707d53a33882a13a indirect=4:707d53a33882a13a +provenance material /World/Soil: MaterialOrigin { slots: [0], displaced: true } +provenance geometry 0..1: /World/Quads +provenance mesh: MeshOrigin { geom_id: 0, slot: 0, baked: true, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 18140786555293703923, n_points: 6, n_indices: 8, n_uvs: None, smooth: true, material: 0 }), placements: 1, shared: false, displaced: true } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: Some(0), subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: None, cameras: [], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: None, offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/multiply_usda-8736676f00161943-1.image b/crates/crust-core/tests/data/import_baselines/multiply_usda-8736676f00161943-1.image new file mode 100644 index 000000000..c734c5b1d --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/multiply_usda-8736676f00161943-1.image @@ -0,0 +1 @@ +640x360 16spp clamp-off a04a09c0d4b5e325 diff --git a/crates/crust-core/tests/data/import_baselines/named_chart_usda-67761c5ec52139aa-1.digest b/crates/crust-core/tests/data/import_baselines/named_chart_usda-67761c5ec52139aa-1.digest new file mode 100644 index 000000000..8ab4786f0 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/named_chart_usda-67761c5ec52139aa-1.digest @@ -0,0 +1,22 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: None +camera: Camera { origin: Vec3A(15.0, 3.0, 3.0), lower_left_corner: Vec3A(4.8863316, -0.044797063, 4.174048), horizontal: Vec3A(1.2295314, 0.0, -6.147657), vertical: Vec3A(-0.44830504, 3.4967792, -0.08966101), u: Vec3A(0.19611613, 0.0, -0.9805807), v: Vec3A(-0.1271232, 0.991561, -0.02542464), lens_radius: 0.05, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: None +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 640, height: 360, region: PixelRect { x0: 0, y0: 0, x1: 640, y1: 360 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: None, depth_of_field: true, motion_blur: false, layer_stack: ["$DIR/named_chart.usda"], invisible_overrides: Some(0) } +layer: $DIR/named_chart.usda +warning: Warning { code: CameraMissing, kind: Skipped, count: 1, prims: [], message: "USD stage has no UsdGeomCamera — falling back to world::get_settings camera" } +lights: 0 +volumes: 0 +world: 1 geometries, PrimitiveBreakdown { triangles: 32, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 32, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=32:ac771f7e6a6314dd camera=32:ac771f7e6a6314dd shadow=32:ac771f7e6a6314dd indirect=32:ac771f7e6a6314dd +provenance material /World/Height: MaterialOrigin { slots: [0], displaced: true } +provenance geometry 0..1: /World/Ground +provenance mesh: MeshOrigin { geom_id: 0, slot: 0, baked: true, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 5577808108587403347, n_points: 25, n_indices: 64, n_uvs: Some(25), smooth: true, material: 0 }), placements: 1, shared: false, displaced: true } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: Some(2), subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 2, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: None, cameras: [], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: None, offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/named_chart_usda-67761c5ec52139aa-1.image b/crates/crust-core/tests/data/import_baselines/named_chart_usda-67761c5ec52139aa-1.image new file mode 100644 index 000000000..c734c5b1d --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/named_chart_usda-67761c5ec52139aa-1.image @@ -0,0 +1 @@ +640x360 16spp clamp-off a04a09c0d4b5e325 diff --git a/crates/crust-core/tests/data/import_baselines/named_usda-41961379ccb4d263-1.digest b/crates/crust-core/tests/data/import_baselines/named_usda-41961379ccb4d263-1.digest new file mode 100644 index 000000000..8c6da2abe --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/named_usda-41961379ccb4d263-1.digest @@ -0,0 +1,21 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: None +camera: Camera { origin: Vec3A(15.0, 3.0, 3.0), lower_left_corner: Vec3A(4.8863316, -0.044797063, 4.174048), horizontal: Vec3A(1.2295314, 0.0, -6.147657), vertical: Vec3A(-0.44830504, 3.4967792, -0.08966101), u: Vec3A(0.19611613, 0.0, -0.9805807), v: Vec3A(-0.1271232, 0.991561, -0.02542464), lens_radius: 0.05, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: Some("/Render/settings") +settings: RenderSettings { samples_per_pixel: 3, max_depth: 32, width: 8, height: 8, region: PixelRect { x0: 0, y0: 0, x1: 8, y1: 8 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: Some(PassSummary { path: "/Render/Passes/char", holdouts: 1, camera_hidden: 0 }) +source: Source { lens: None, depth_of_field: true, motion_blur: false, layer_stack: ["$DIR/named.usda"], invisible_overrides: Some(0) } +layer: $DIR/named.usda +warning: Warning { code: CameraMissing, kind: Skipped, count: 1, prims: [], message: "USD stage has no UsdGeomCamera — falling back to world::get_settings camera" } +lights: 0 +volumes: 0 +world: 2 geometries, PrimitiveBreakdown { triangles: 0, spheres: 2, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 0, spheres: 2, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout true transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:468da3d80ce34d98 camera=1:468da3d80ce34d98 shadow=1:468da3d80ce34d98 indirect=1:468da3d80ce34d98 +geom 1: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:d23ac7aa026facc8 camera=1:d23ac7aa026facc8 shadow=1:d23ac7aa026facc8 indirect=1:d23ac7aa026facc8 +provenance geometry 0..1: /World/Prop +provenance geometry 1..2: /World/Char +provenance spheres: [0, 1] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: Some("/Render/Passes/char"), keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: None, cameras: [], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: None, offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/named_usda-41961379ccb4d263-1.image b/crates/crust-core/tests/data/import_baselines/named_usda-41961379ccb4d263-1.image new file mode 100644 index 000000000..8aad9360c --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/named_usda-41961379ccb4d263-1.image @@ -0,0 +1 @@ +8x8 16spp clamp-off 9fa9e040e0eedf25 diff --git a/crates/crust-core/tests/data/import_baselines/named_usda-455967a7b376e998-1.digest b/crates/crust-core/tests/data/import_baselines/named_usda-455967a7b376e998-1.digest new file mode 100644 index 000000000..91c14e9c6 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/named_usda-455967a7b376e998-1.digest @@ -0,0 +1,21 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: None +camera: Camera { origin: Vec3A(15.0, 3.0, 3.0), lower_left_corner: Vec3A(4.8863316, -0.044797063, 4.174048), horizontal: Vec3A(1.2295314, 0.0, -6.147657), vertical: Vec3A(-0.44830504, 3.4967792, -0.08966101), u: Vec3A(0.19611613, 0.0, -0.9805807), v: Vec3A(-0.1271232, 0.991561, -0.02542464), lens_radius: 0.05, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: Some("/Render/settings") +settings: RenderSettings { samples_per_pixel: 3, max_depth: 32, width: 8, height: 8, region: PixelRect { x0: 0, y0: 0, x1: 8, y1: 8 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: Some(PassSummary { path: "/Render/Passes/bg", holdouts: 1, camera_hidden: 0 }) +source: Source { lens: None, depth_of_field: true, motion_blur: false, layer_stack: ["$DIR/named.usda"], invisible_overrides: Some(0) } +layer: $DIR/named.usda +warning: Warning { code: CameraMissing, kind: Skipped, count: 1, prims: [], message: "USD stage has no UsdGeomCamera — falling back to world::get_settings camera" } +lights: 0 +volumes: 0 +world: 2 geometries, PrimitiveBreakdown { triangles: 0, spheres: 2, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 0, spheres: 2, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:468da3d80ce34d98 camera=1:468da3d80ce34d98 shadow=1:468da3d80ce34d98 indirect=1:468da3d80ce34d98 +geom 1: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout true transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:d23ac7aa026facc8 camera=1:d23ac7aa026facc8 shadow=1:d23ac7aa026facc8 indirect=1:d23ac7aa026facc8 +provenance geometry 0..1: /World/Prop +provenance geometry 1..2: /World/Char +provenance spheres: [0, 1] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: Some("/Render/Passes/bg"), keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: None, cameras: [], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: None, offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/named_usda-455967a7b376e998-1.image b/crates/crust-core/tests/data/import_baselines/named_usda-455967a7b376e998-1.image new file mode 100644 index 000000000..8aad9360c --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/named_usda-455967a7b376e998-1.image @@ -0,0 +1 @@ +8x8 16spp clamp-off 9fa9e040e0eedf25 diff --git a/crates/crust-core/tests/data/import_baselines/named_usda-4b720a100ef53272-1.digest b/crates/crust-core/tests/data/import_baselines/named_usda-4b720a100ef53272-1.digest new file mode 100644 index 000000000..91c14e9c6 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/named_usda-4b720a100ef53272-1.digest @@ -0,0 +1,21 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: None +camera: Camera { origin: Vec3A(15.0, 3.0, 3.0), lower_left_corner: Vec3A(4.8863316, -0.044797063, 4.174048), horizontal: Vec3A(1.2295314, 0.0, -6.147657), vertical: Vec3A(-0.44830504, 3.4967792, -0.08966101), u: Vec3A(0.19611613, 0.0, -0.9805807), v: Vec3A(-0.1271232, 0.991561, -0.02542464), lens_radius: 0.05, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: Some("/Render/settings") +settings: RenderSettings { samples_per_pixel: 3, max_depth: 32, width: 8, height: 8, region: PixelRect { x0: 0, y0: 0, x1: 8, y1: 8 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: Some(PassSummary { path: "/Render/Passes/bg", holdouts: 1, camera_hidden: 0 }) +source: Source { lens: None, depth_of_field: true, motion_blur: false, layer_stack: ["$DIR/named.usda"], invisible_overrides: Some(0) } +layer: $DIR/named.usda +warning: Warning { code: CameraMissing, kind: Skipped, count: 1, prims: [], message: "USD stage has no UsdGeomCamera — falling back to world::get_settings camera" } +lights: 0 +volumes: 0 +world: 2 geometries, PrimitiveBreakdown { triangles: 0, spheres: 2, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 0, spheres: 2, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:468da3d80ce34d98 camera=1:468da3d80ce34d98 shadow=1:468da3d80ce34d98 indirect=1:468da3d80ce34d98 +geom 1: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout true transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:d23ac7aa026facc8 camera=1:d23ac7aa026facc8 shadow=1:d23ac7aa026facc8 indirect=1:d23ac7aa026facc8 +provenance geometry 0..1: /World/Prop +provenance geometry 1..2: /World/Char +provenance spheres: [0, 1] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: Some("/Render/Passes/bg"), keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: None, cameras: [], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: None, offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/named_usda-4b720a100ef53272-1.image b/crates/crust-core/tests/data/import_baselines/named_usda-4b720a100ef53272-1.image new file mode 100644 index 000000000..8aad9360c --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/named_usda-4b720a100ef53272-1.image @@ -0,0 +1 @@ +8x8 16spp clamp-off 9fa9e040e0eedf25 diff --git a/crates/crust-core/tests/data/import_baselines/named_usda-c08c596234d308e0-1.digest b/crates/crust-core/tests/data/import_baselines/named_usda-c08c596234d308e0-1.digest new file mode 100644 index 000000000..1c3f319fb --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/named_usda-c08c596234d308e0-1.digest @@ -0,0 +1,21 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: None +camera: Camera { origin: Vec3A(15.0, 3.0, 3.0), lower_left_corner: Vec3A(4.8863316, -0.044797063, 4.174048), horizontal: Vec3A(1.2295314, 0.0, -6.147657), vertical: Vec3A(-0.44830504, 3.4967792, -0.08966101), u: Vec3A(0.19611613, 0.0, -0.9805807), v: Vec3A(-0.1271232, 0.991561, -0.02542464), lens_radius: 0.05, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: Some("/Render/settings") +settings: RenderSettings { samples_per_pixel: 3, max_depth: 32, width: 8, height: 8, region: PixelRect { x0: 0, y0: 0, x1: 8, y1: 8 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: None, depth_of_field: true, motion_blur: false, layer_stack: ["$DIR/named.usda"], invisible_overrides: Some(0) } +layer: $DIR/named.usda +warning: Warning { code: CameraMissing, kind: Skipped, count: 1, prims: [], message: "USD stage has no UsdGeomCamera — falling back to world::get_settings camera" } +lights: 0 +volumes: 0 +world: 2 geometries, PrimitiveBreakdown { triangles: 0, spheres: 2, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 0, spheres: 2, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:468da3d80ce34d98 camera=1:468da3d80ce34d98 shadow=1:468da3d80ce34d98 indirect=1:468da3d80ce34d98 +geom 1: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:d23ac7aa026facc8 camera=1:d23ac7aa026facc8 shadow=1:d23ac7aa026facc8 indirect=1:d23ac7aa026facc8 +provenance geometry 0..1: /World/Prop +provenance geometry 1..2: /World/Char +provenance spheres: [0, 1] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: None, cameras: [], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: None, offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/named_usda-c08c596234d308e0-1.image b/crates/crust-core/tests/data/import_baselines/named_usda-c08c596234d308e0-1.image new file mode 100644 index 000000000..8aad9360c --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/named_usda-c08c596234d308e0-1.image @@ -0,0 +1 @@ +8x8 16spp clamp-off 9fa9e040e0eedf25 diff --git a/crates/crust-core/tests/data/import_baselines/named_usda-caf35125dfbdc7e1-1.digest b/crates/crust-core/tests/data/import_baselines/named_usda-caf35125dfbdc7e1-1.digest new file mode 100644 index 000000000..8c6da2abe --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/named_usda-caf35125dfbdc7e1-1.digest @@ -0,0 +1,21 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: None +camera: Camera { origin: Vec3A(15.0, 3.0, 3.0), lower_left_corner: Vec3A(4.8863316, -0.044797063, 4.174048), horizontal: Vec3A(1.2295314, 0.0, -6.147657), vertical: Vec3A(-0.44830504, 3.4967792, -0.08966101), u: Vec3A(0.19611613, 0.0, -0.9805807), v: Vec3A(-0.1271232, 0.991561, -0.02542464), lens_radius: 0.05, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: Some("/Render/settings") +settings: RenderSettings { samples_per_pixel: 3, max_depth: 32, width: 8, height: 8, region: PixelRect { x0: 0, y0: 0, x1: 8, y1: 8 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: Some(PassSummary { path: "/Render/Passes/char", holdouts: 1, camera_hidden: 0 }) +source: Source { lens: None, depth_of_field: true, motion_blur: false, layer_stack: ["$DIR/named.usda"], invisible_overrides: Some(0) } +layer: $DIR/named.usda +warning: Warning { code: CameraMissing, kind: Skipped, count: 1, prims: [], message: "USD stage has no UsdGeomCamera — falling back to world::get_settings camera" } +lights: 0 +volumes: 0 +world: 2 geometries, PrimitiveBreakdown { triangles: 0, spheres: 2, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 0, spheres: 2, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout true transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:468da3d80ce34d98 camera=1:468da3d80ce34d98 shadow=1:468da3d80ce34d98 indirect=1:468da3d80ce34d98 +geom 1: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:d23ac7aa026facc8 camera=1:d23ac7aa026facc8 shadow=1:d23ac7aa026facc8 indirect=1:d23ac7aa026facc8 +provenance geometry 0..1: /World/Prop +provenance geometry 1..2: /World/Char +provenance spheres: [0, 1] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: Some("/Render/Passes/char"), keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: None, cameras: [], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: None, offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/named_usda-caf35125dfbdc7e1-1.image b/crates/crust-core/tests/data/import_baselines/named_usda-caf35125dfbdc7e1-1.image new file mode 100644 index 000000000..8aad9360c --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/named_usda-caf35125dfbdc7e1-1.image @@ -0,0 +1 @@ +8x8 16spp clamp-off 9fa9e040e0eedf25 diff --git a/crates/crust-core/tests/data/import_baselines/named_usda-d1e9bde789e7233a-1.digest b/crates/crust-core/tests/data/import_baselines/named_usda-d1e9bde789e7233a-1.digest new file mode 100644 index 000000000..1c3f319fb --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/named_usda-d1e9bde789e7233a-1.digest @@ -0,0 +1,21 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: None +camera: Camera { origin: Vec3A(15.0, 3.0, 3.0), lower_left_corner: Vec3A(4.8863316, -0.044797063, 4.174048), horizontal: Vec3A(1.2295314, 0.0, -6.147657), vertical: Vec3A(-0.44830504, 3.4967792, -0.08966101), u: Vec3A(0.19611613, 0.0, -0.9805807), v: Vec3A(-0.1271232, 0.991561, -0.02542464), lens_radius: 0.05, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: Some("/Render/settings") +settings: RenderSettings { samples_per_pixel: 3, max_depth: 32, width: 8, height: 8, region: PixelRect { x0: 0, y0: 0, x1: 8, y1: 8 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: None, depth_of_field: true, motion_blur: false, layer_stack: ["$DIR/named.usda"], invisible_overrides: Some(0) } +layer: $DIR/named.usda +warning: Warning { code: CameraMissing, kind: Skipped, count: 1, prims: [], message: "USD stage has no UsdGeomCamera — falling back to world::get_settings camera" } +lights: 0 +volumes: 0 +world: 2 geometries, PrimitiveBreakdown { triangles: 0, spheres: 2, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 0, spheres: 2, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:468da3d80ce34d98 camera=1:468da3d80ce34d98 shadow=1:468da3d80ce34d98 indirect=1:468da3d80ce34d98 +geom 1: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:d23ac7aa026facc8 camera=1:d23ac7aa026facc8 shadow=1:d23ac7aa026facc8 indirect=1:d23ac7aa026facc8 +provenance geometry 0..1: /World/Prop +provenance geometry 1..2: /World/Char +provenance spheres: [0, 1] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: None, cameras: [], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: None, offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/named_usda-d1e9bde789e7233a-1.image b/crates/crust-core/tests/data/import_baselines/named_usda-d1e9bde789e7233a-1.image new file mode 100644 index 000000000..8aad9360c --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/named_usda-d1e9bde789e7233a-1.image @@ -0,0 +1 @@ +8x8 16spp clamp-off 9fa9e040e0eedf25 diff --git a/crates/crust-core/tests/data/import_baselines/nan_shaping_usda-9e699df2d0518cc0-1.digest b/crates/crust-core/tests/data/import_baselines/nan_shaping_usda-9e699df2d0518cc0-1.digest new file mode 100644 index 000000000..1551c59a2 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/nan_shaping_usda-9e699df2d0518cc0-1.digest @@ -0,0 +1,22 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: None +camera: Camera { origin: Vec3A(15.0, 3.0, 3.0), lower_left_corner: Vec3A(4.8863316, -0.044797063, 4.174048), horizontal: Vec3A(1.2295314, 0.0, -6.147657), vertical: Vec3A(-0.44830504, 3.4967792, -0.08966101), u: Vec3A(0.19611613, 0.0, -0.9805807), v: Vec3A(-0.1271232, 0.991561, -0.02542464), lens_radius: 0.05, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: None +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 640, height: 360, region: PixelRect { x0: 0, y0: 0, x1: 640, y1: 360 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: None, depth_of_field: true, motion_blur: false, layer_stack: ["$DIR/nan_shaping.usda"], invisible_overrides: Some(0) } +layer: $DIR/nan_shaping.usda +warning: Warning { code: LightNonFiniteInput, kind: Refused, count: 3, prims: ["/World/Spot"], message: "/World/Spot: inputs:shaping:focus = NaN is not finite — using its fallback" } +warning: Warning { code: CameraMissing, kind: Skipped, count: 1, prims: [], message: "USD stage has no UsdGeomCamera — falling back to world::get_settings camera" } +lights: 1 +light 0: area name Some("/World/Spot") lpe None pmf 1.0 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 1 geometries, PrimitiveBreakdown { triangles: 2, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 2, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +geom 0: material #0 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:535681dd4ddb0065 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=2:535681dd4ddb0065 +provenance light /World/Spot: LightOrigin { index: 0, geoms: 0..1 } +provenance geometry 0..1: /World/Spot +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: None, cameras: [], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: None, offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/nan_shaping_usda-9e699df2d0518cc0-1.image b/crates/crust-core/tests/data/import_baselines/nan_shaping_usda-9e699df2d0518cc0-1.image new file mode 100644 index 000000000..c734c5b1d --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/nan_shaping_usda-9e699df2d0518cc0-1.image @@ -0,0 +1 @@ +640x360 16spp clamp-off a04a09c0d4b5e325 diff --git a/crates/crust-core/tests/data/import_baselines/native_usda-48df729899939992-1.digest b/crates/crust-core/tests/data/import_baselines/native_usda-48df729899939992-1.digest new file mode 100644 index 000000000..1261efa4b --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/native_usda-48df729899939992-1.digest @@ -0,0 +1,231 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: None +camera: Camera { origin: Vec3A(15.0, 3.0, 3.0), lower_left_corner: Vec3A(4.8863316, -0.044797063, 4.174048), horizontal: Vec3A(1.2295314, 0.0, -6.147657), vertical: Vec3A(-0.44830504, 3.4967792, -0.08966101), u: Vec3A(0.19611613, 0.0, -0.9805807), v: Vec3A(-0.1271232, 0.991561, -0.02542464), lens_radius: 0.05, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: None +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 640, height: 360, region: PixelRect { x0: 0, y0: 0, x1: 640, y1: 360 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: None, depth_of_field: true, motion_blur: false, layer_stack: ["$DIR/native.usda"], invisible_overrides: Some(0) } +layer: $DIR/native.usda +warning: Warning { code: CameraMissing, kind: Skipped, count: 1, prims: [], message: "USD stage has no UsdGeomCamera — falling back to world::get_settings camera" } +lights: 0 +volumes: 0 +world: 140 geometries, PrimitiveBreakdown { triangles: 0, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 2 } top level, PrimitiveBreakdown { triangles: 140, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 142 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=140:90b286e3dc68bccc camera=140:90b286e3dc68bccc shadow=140:90b286e3dc68bccc indirect=140:90b286e3dc68bccc +geom 1: material #1 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=0:cbf29ce484222325 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=0:cbf29ce484222325 +geom 2: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=0:cbf29ce484222325 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=0:cbf29ce484222325 +geom 3: material #1 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=0:cbf29ce484222325 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=0:cbf29ce484222325 +geom 4: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=0:cbf29ce484222325 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=0:cbf29ce484222325 +geom 5: material #1 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=0:cbf29ce484222325 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=0:cbf29ce484222325 +geom 6: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=0:cbf29ce484222325 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=0:cbf29ce484222325 +geom 7: material #1 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=0:cbf29ce484222325 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=0:cbf29ce484222325 +geom 8: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=0:cbf29ce484222325 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=0:cbf29ce484222325 +geom 9: material #1 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=0:cbf29ce484222325 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=0:cbf29ce484222325 +geom 10: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=0:cbf29ce484222325 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=0:cbf29ce484222325 +geom 11: material #1 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=0:cbf29ce484222325 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=0:cbf29ce484222325 +geom 12: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=0:cbf29ce484222325 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=0:cbf29ce484222325 +geom 13: material #1 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=0:cbf29ce484222325 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=0:cbf29ce484222325 +geom 14: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=0:cbf29ce484222325 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=0:cbf29ce484222325 +geom 15: material #1 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=0:cbf29ce484222325 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=0:cbf29ce484222325 +geom 16: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=0:cbf29ce484222325 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=0:cbf29ce484222325 +geom 17: material #1 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=0:cbf29ce484222325 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=0:cbf29ce484222325 +geom 18: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=0:cbf29ce484222325 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=0:cbf29ce484222325 +geom 19: material #1 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=0:cbf29ce484222325 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=0:cbf29ce484222325 +geom 20: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=0:cbf29ce484222325 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=0:cbf29ce484222325 +geom 21: material #1 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=0:cbf29ce484222325 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=0:cbf29ce484222325 +geom 22: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=0:cbf29ce484222325 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=0:cbf29ce484222325 +geom 23: material #1 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=0:cbf29ce484222325 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=0:cbf29ce484222325 +geom 24: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=0:cbf29ce484222325 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=0:cbf29ce484222325 +geom 25: material #1 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=0:cbf29ce484222325 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=0:cbf29ce484222325 +geom 26: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=0:cbf29ce484222325 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=0:cbf29ce484222325 +geom 27: material #1 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=0:cbf29ce484222325 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=0:cbf29ce484222325 +geom 28: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=0:cbf29ce484222325 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=0:cbf29ce484222325 +geom 29: material #1 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=0:cbf29ce484222325 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=0:cbf29ce484222325 +geom 30: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=0:cbf29ce484222325 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=0:cbf29ce484222325 +geom 31: material #1 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=0:cbf29ce484222325 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=0:cbf29ce484222325 +geom 32: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=0:cbf29ce484222325 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=0:cbf29ce484222325 +geom 33: material #1 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=0:cbf29ce484222325 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=0:cbf29ce484222325 +geom 34: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=0:cbf29ce484222325 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=0:cbf29ce484222325 +geom 35: material #1 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=0:cbf29ce484222325 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=0:cbf29ce484222325 +geom 36: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=0:cbf29ce484222325 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=0:cbf29ce484222325 +geom 37: material #1 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=0:cbf29ce484222325 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=0:cbf29ce484222325 +geom 38: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=0:cbf29ce484222325 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=0:cbf29ce484222325 +geom 39: material #1 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=0:cbf29ce484222325 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=0:cbf29ce484222325 +geom 40: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=0:cbf29ce484222325 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=0:cbf29ce484222325 +geom 41: material #1 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=0:cbf29ce484222325 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=0:cbf29ce484222325 +geom 42: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=0:cbf29ce484222325 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=0:cbf29ce484222325 +geom 43: material #1 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=0:cbf29ce484222325 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=0:cbf29ce484222325 +geom 44: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=0:cbf29ce484222325 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=0:cbf29ce484222325 +geom 45: material #1 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=0:cbf29ce484222325 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=0:cbf29ce484222325 +geom 46: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=0:cbf29ce484222325 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=0:cbf29ce484222325 +geom 47: material #1 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=0:cbf29ce484222325 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=0:cbf29ce484222325 +geom 48: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=0:cbf29ce484222325 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=0:cbf29ce484222325 +geom 49: material #1 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=0:cbf29ce484222325 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=0:cbf29ce484222325 +geom 50: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=0:cbf29ce484222325 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=0:cbf29ce484222325 +geom 51: material #1 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=0:cbf29ce484222325 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=0:cbf29ce484222325 +geom 52: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=0:cbf29ce484222325 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=0:cbf29ce484222325 +geom 53: material #1 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=0:cbf29ce484222325 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=0:cbf29ce484222325 +geom 54: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=0:cbf29ce484222325 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=0:cbf29ce484222325 +geom 55: material #1 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=0:cbf29ce484222325 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=0:cbf29ce484222325 +geom 56: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=0:cbf29ce484222325 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=0:cbf29ce484222325 +geom 57: material #1 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=0:cbf29ce484222325 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=0:cbf29ce484222325 +geom 58: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=0:cbf29ce484222325 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=0:cbf29ce484222325 +geom 59: material #1 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=0:cbf29ce484222325 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=0:cbf29ce484222325 +geom 60: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=0:cbf29ce484222325 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=0:cbf29ce484222325 +geom 61: material #1 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=0:cbf29ce484222325 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=0:cbf29ce484222325 +geom 62: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=0:cbf29ce484222325 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=0:cbf29ce484222325 +geom 63: material #1 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=0:cbf29ce484222325 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=0:cbf29ce484222325 +geom 64: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=0:cbf29ce484222325 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=0:cbf29ce484222325 +geom 65: material #1 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=0:cbf29ce484222325 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=0:cbf29ce484222325 +geom 66: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=0:cbf29ce484222325 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=0:cbf29ce484222325 +geom 67: material #1 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=0:cbf29ce484222325 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=0:cbf29ce484222325 +geom 68: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=0:cbf29ce484222325 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=0:cbf29ce484222325 +geom 69: material #1 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=0:cbf29ce484222325 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=0:cbf29ce484222325 +geom 70: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=140:ae8271427e67699c camera=140:ae8271427e67699c shadow=140:ae8271427e67699c indirect=140:ae8271427e67699c +geom 71: material #1 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=0:cbf29ce484222325 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=0:cbf29ce484222325 +geom 72: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=0:cbf29ce484222325 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=0:cbf29ce484222325 +geom 73: material #1 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=0:cbf29ce484222325 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=0:cbf29ce484222325 +geom 74: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=0:cbf29ce484222325 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=0:cbf29ce484222325 +geom 75: material #1 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=0:cbf29ce484222325 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=0:cbf29ce484222325 +geom 76: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=0:cbf29ce484222325 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=0:cbf29ce484222325 +geom 77: material #1 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=0:cbf29ce484222325 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=0:cbf29ce484222325 +geom 78: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=0:cbf29ce484222325 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=0:cbf29ce484222325 +geom 79: material #1 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=0:cbf29ce484222325 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=0:cbf29ce484222325 +geom 80: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=0:cbf29ce484222325 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=0:cbf29ce484222325 +geom 81: material #1 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=0:cbf29ce484222325 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=0:cbf29ce484222325 +geom 82: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=0:cbf29ce484222325 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=0:cbf29ce484222325 +geom 83: material #1 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=0:cbf29ce484222325 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=0:cbf29ce484222325 +geom 84: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=0:cbf29ce484222325 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=0:cbf29ce484222325 +geom 85: material #1 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=0:cbf29ce484222325 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=0:cbf29ce484222325 +geom 86: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=0:cbf29ce484222325 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=0:cbf29ce484222325 +geom 87: material #1 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=0:cbf29ce484222325 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=0:cbf29ce484222325 +geom 88: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=0:cbf29ce484222325 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=0:cbf29ce484222325 +geom 89: material #1 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=0:cbf29ce484222325 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=0:cbf29ce484222325 +geom 90: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=0:cbf29ce484222325 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=0:cbf29ce484222325 +geom 91: material #1 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=0:cbf29ce484222325 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=0:cbf29ce484222325 +geom 92: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=0:cbf29ce484222325 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=0:cbf29ce484222325 +geom 93: material #1 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=0:cbf29ce484222325 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=0:cbf29ce484222325 +geom 94: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=0:cbf29ce484222325 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=0:cbf29ce484222325 +geom 95: material #1 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=0:cbf29ce484222325 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=0:cbf29ce484222325 +geom 96: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=0:cbf29ce484222325 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=0:cbf29ce484222325 +geom 97: material #1 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=0:cbf29ce484222325 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=0:cbf29ce484222325 +geom 98: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=0:cbf29ce484222325 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=0:cbf29ce484222325 +geom 99: material #1 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=0:cbf29ce484222325 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=0:cbf29ce484222325 +geom 100: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=0:cbf29ce484222325 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=0:cbf29ce484222325 +geom 101: material #1 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=0:cbf29ce484222325 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=0:cbf29ce484222325 +geom 102: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=0:cbf29ce484222325 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=0:cbf29ce484222325 +geom 103: material #1 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=0:cbf29ce484222325 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=0:cbf29ce484222325 +geom 104: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=0:cbf29ce484222325 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=0:cbf29ce484222325 +geom 105: material #1 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=0:cbf29ce484222325 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=0:cbf29ce484222325 +geom 106: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=0:cbf29ce484222325 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=0:cbf29ce484222325 +geom 107: material #1 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=0:cbf29ce484222325 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=0:cbf29ce484222325 +geom 108: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=0:cbf29ce484222325 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=0:cbf29ce484222325 +geom 109: material #1 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=0:cbf29ce484222325 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=0:cbf29ce484222325 +geom 110: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=0:cbf29ce484222325 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=0:cbf29ce484222325 +geom 111: material #1 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=0:cbf29ce484222325 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=0:cbf29ce484222325 +geom 112: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=0:cbf29ce484222325 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=0:cbf29ce484222325 +geom 113: material #1 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=0:cbf29ce484222325 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=0:cbf29ce484222325 +geom 114: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=0:cbf29ce484222325 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=0:cbf29ce484222325 +geom 115: material #1 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=0:cbf29ce484222325 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=0:cbf29ce484222325 +geom 116: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=0:cbf29ce484222325 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=0:cbf29ce484222325 +geom 117: material #1 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=0:cbf29ce484222325 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=0:cbf29ce484222325 +geom 118: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=0:cbf29ce484222325 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=0:cbf29ce484222325 +geom 119: material #1 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=0:cbf29ce484222325 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=0:cbf29ce484222325 +geom 120: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=0:cbf29ce484222325 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=0:cbf29ce484222325 +geom 121: material #1 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=0:cbf29ce484222325 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=0:cbf29ce484222325 +geom 122: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=0:cbf29ce484222325 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=0:cbf29ce484222325 +geom 123: material #1 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=0:cbf29ce484222325 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=0:cbf29ce484222325 +geom 124: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=0:cbf29ce484222325 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=0:cbf29ce484222325 +geom 125: material #1 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=0:cbf29ce484222325 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=0:cbf29ce484222325 +geom 126: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=0:cbf29ce484222325 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=0:cbf29ce484222325 +geom 127: material #1 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=0:cbf29ce484222325 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=0:cbf29ce484222325 +geom 128: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=0:cbf29ce484222325 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=0:cbf29ce484222325 +geom 129: material #1 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=0:cbf29ce484222325 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=0:cbf29ce484222325 +geom 130: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=0:cbf29ce484222325 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=0:cbf29ce484222325 +geom 131: material #1 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=0:cbf29ce484222325 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=0:cbf29ce484222325 +geom 132: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=0:cbf29ce484222325 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=0:cbf29ce484222325 +geom 133: material #1 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=0:cbf29ce484222325 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=0:cbf29ce484222325 +geom 134: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=0:cbf29ce484222325 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=0:cbf29ce484222325 +geom 135: material #1 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=0:cbf29ce484222325 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=0:cbf29ce484222325 +geom 136: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=0:cbf29ce484222325 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=0:cbf29ce484222325 +geom 137: material #1 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=0:cbf29ce484222325 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=0:cbf29ce484222325 +geom 138: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=0:cbf29ce484222325 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=0:cbf29ce484222325 +geom 139: material #1 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=0:cbf29ce484222325 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=0:cbf29ce484222325 +provenance material /W/Looks/Even: MaterialOrigin { slots: [1, 3, 5, 7, 9, 11, 13, 15, 17, 19, 21, 23, 25, 27, 29, 31, 33, 35, 37, 39, 41, 43, 45, 47, 49, 51, 53, 55, 57, 59, 61, 63, 65, 67, 69, 71, 73, 75, 77, 79, 81, 83, 85, 87, 89, 91, 93, 95, 97, 99, 101, 103, 105, 107, 109, 111, 113, 115, 117, 119, 121, 123, 125, 127, 129, 131, 133, 135, 137, 139], displaced: false } +provenance material /W/Looks/Odd: MaterialOrigin { slots: [0, 2, 4, 6, 8, 10, 12, 14, 16, 18, 20, 22, 24, 26, 28, 30, 32, 34, 36, 38, 40, 42, 44, 46, 48, 50, 52, 54, 56, 58, 60, 62, 64, 66, 68, 70, 72, 74, 76, 78, 80, 82, 84, 86, 88, 90, 92, 94, 96, 98, 100, 102, 104, 106, 108, 110, 112, 114, 116, 118, 120, 122, 124, 126, 128, 130, 132, 134, 136, 138], displaced: false } +provenance geometry 0..70: /W/A +provenance geometry 70..140: /W/B +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 9983431792377398331, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 0 }), placements: 0, shared: true, displaced: false } +provenance mesh slot 1: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 445393997096090275, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 1 }), placements: 0, shared: true, displaced: false } +provenance mesh slot 2: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 12530787508316231193, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 0 }), placements: 0, shared: true, displaced: false } +provenance mesh slot 3: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 2003607608452276953, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 1 }), placements: 0, shared: true, displaced: false } +provenance mesh slot 4: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 14655719404458108924, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 0 }), placements: 0, shared: true, displaced: false } +provenance mesh slot 5: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 8197086280809854330, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 1 }), placements: 0, shared: true, displaced: false } +provenance mesh slot 6: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 15226241633731644800, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 0 }), placements: 0, shared: true, displaced: false } +provenance mesh slot 7: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 1220030663393014154, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 1 }), placements: 0, shared: true, displaced: false } +provenance mesh slot 8: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 9671416021768249711, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 0 }), placements: 0, shared: true, displaced: false } +provenance mesh slot 9: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 713395937854610793, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 1 }), placements: 0, shared: true, displaced: false } +provenance mesh slot 10: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 9015895206046420096, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 0 }), placements: 0, shared: true, displaced: false } +provenance mesh slot 11: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 6053246308793941277, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 1 }), placements: 0, shared: true, displaced: false } +provenance mesh slot 12: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 3354812878111187853, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 0 }), placements: 0, shared: true, displaced: false } +provenance mesh slot 13: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 2143590123543198581, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 1 }), placements: 0, shared: true, displaced: false } +provenance mesh slot 14: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 12825708062627280916, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 0 }), placements: 0, shared: true, displaced: false } +provenance mesh slot 15: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 17390326888399512289, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 1 }), placements: 0, shared: true, displaced: false } +provenance mesh slot 16: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 5167343440688746005, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 0 }), placements: 0, shared: true, displaced: false } +provenance mesh slot 17: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 6431256199563153267, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 1 }), placements: 0, shared: true, displaced: false } +provenance mesh slot 18: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 17938759324587019490, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 0 }), placements: 0, shared: true, displaced: false } +provenance mesh slot 19: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 9338845809469782352, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 1 }), placements: 0, shared: true, displaced: false } +provenance mesh slot 20: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 5016274748741901678, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 0 }), placements: 0, shared: true, displaced: false } +provenance mesh slot 21: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 18148940518120066603, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 1 }), placements: 0, shared: true, displaced: false } +provenance mesh slot 22: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 4830200885891814983, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 0 }), placements: 0, shared: true, displaced: false } +provenance mesh slot 23: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 15766972410381609041, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 1 }), placements: 0, shared: true, displaced: false } +provenance mesh slot 24: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 9472872301105672276, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 0 }), placements: 0, shared: true, displaced: false } +provenance mesh slot 25: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 11414915196367845650, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 1 }), placements: 0, shared: true, displaced: false } +provenance mesh slot 26: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 9269437264134878215, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 0 }), placements: 0, shared: true, displaced: false } +provenance mesh slot 27: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 10241772988455119680, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 1 }), placements: 0, shared: true, displaced: false } +provenance mesh slot 28: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 6287388440238275734, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 0 }), placements: 0, shared: true, displaced: false } +provenance mesh slot 29: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 16540043469967507742, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 1 }), placements: 0, shared: true, displaced: false } +provenance mesh slot 30: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 12273703647221078853, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 0 }), placements: 0, shared: true, displaced: false } +provenance mesh slot 31: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 14885684870811093431, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 1 }), placements: 0, shared: true, displaced: false } +provenance mesh slot 32: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 11612700176135259559, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 0 }), placements: 0, shared: true, displaced: false } +provenance mesh slot 33: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 18124134558096145620, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 1 }), placements: 0, shared: true, displaced: false } +provenance mesh slot 34: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 1547305282937345631, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 0 }), placements: 0, shared: true, displaced: false } +provenance mesh slot 35: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 14319513361325090922, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 1 }), placements: 0, shared: true, displaced: false } +provenance mesh slot 36: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 12743050219495799660, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 0 }), placements: 0, shared: true, displaced: false } +provenance mesh slot 37: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 14564807414974621182, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 1 }), placements: 0, shared: true, displaced: false } +provenance mesh slot 38: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 15128490494491982350, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 0 }), placements: 0, shared: true, displaced: false } +provenance mesh slot 39: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 11141992223073874788, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 1 }), placements: 0, shared: true, displaced: false } +provenance mesh slot 40: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 2187686032361564554, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 0 }), placements: 0, shared: true, displaced: false } +provenance mesh slot 41: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 9703725567598092252, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 1 }), placements: 0, shared: true, displaced: false } +provenance mesh slot 42: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 6913685974256867465, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 0 }), placements: 0, shared: true, displaced: false } +provenance mesh slot 43: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 3100222640867777022, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 1 }), placements: 0, shared: true, displaced: false } +provenance mesh slot 44: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 5554913372606825388, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 0 }), placements: 0, shared: true, displaced: false } +provenance mesh slot 45: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 16649324141060687540, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 1 }), placements: 0, shared: true, displaced: false } +provenance mesh slot 46: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 2737295392186472633, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 0 }), placements: 0, shared: true, displaced: false } +provenance mesh slot 47: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 303054490942377425, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 1 }), placements: 0, shared: true, displaced: false } +provenance mesh slot 48: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 9767880336714203685, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 0 }), placements: 0, shared: true, displaced: false } +provenance mesh slot 49: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 6412687190128267277, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 1 }), placements: 0, shared: true, displaced: false } +provenance mesh slot 50: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 8058819299735866700, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 0 }), placements: 0, shared: true, displaced: false } +provenance mesh slot 51: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 11805635118953593289, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 1 }), placements: 0, shared: true, displaced: false } +provenance mesh slot 52: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 10587302289040357906, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 0 }), placements: 0, shared: true, displaced: false } +provenance mesh slot 53: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 915626683743930737, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 1 }), placements: 0, shared: true, displaced: false } +provenance mesh slot 54: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 2011260152324884985, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 0 }), placements: 0, shared: true, displaced: false } +provenance mesh slot 55: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 15004083201484757820, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 1 }), placements: 0, shared: true, displaced: false } +provenance mesh slot 56: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 4492824581372515845, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 0 }), placements: 0, shared: true, displaced: false } +provenance mesh slot 57: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 1556962713607594861, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 1 }), placements: 0, shared: true, displaced: false } +provenance mesh slot 58: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 13700768547374211392, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 0 }), placements: 0, shared: true, displaced: false } +provenance mesh slot 59: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 1736609624654126323, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 1 }), placements: 0, shared: true, displaced: false } +provenance mesh slot 60: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 7314348300970154562, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 0 }), placements: 0, shared: true, displaced: false } +provenance mesh slot 61: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 16137632259568160912, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 1 }), placements: 0, shared: true, displaced: false } +provenance mesh slot 62: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 5302950127304504092, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 0 }), placements: 0, shared: true, displaced: false } +provenance mesh slot 63: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 11033842897036242693, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 1 }), placements: 0, shared: true, displaced: false } +provenance mesh slot 64: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 1432794855324975849, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 0 }), placements: 0, shared: true, displaced: false } +provenance mesh slot 65: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 6417092498626891774, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 1 }), placements: 0, shared: true, displaced: false } +provenance mesh slot 66: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 15417142670901525198, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 0 }), placements: 0, shared: true, displaced: false } +provenance mesh slot 67: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 1660923941246006929, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 1 }), placements: 0, shared: true, displaced: false } +provenance mesh slot 68: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 7728745279061195760, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 0 }), placements: 0, shared: true, displaced: false } +provenance mesh slot 69: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 12950018545620570054, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 1 }), placements: 0, shared: true, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: None, cameras: [], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: None, offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/native_usda-48df729899939992-1.image b/crates/crust-core/tests/data/import_baselines/native_usda-48df729899939992-1.image new file mode 100644 index 000000000..c734c5b1d --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/native_usda-48df729899939992-1.image @@ -0,0 +1 @@ +640x360 16spp clamp-off a04a09c0d4b5e325 diff --git a/crates/crust-core/tests/data/import_baselines/native_usda-aa00109a0de726bd-1.digest b/crates/crust-core/tests/data/import_baselines/native_usda-aa00109a0de726bd-1.digest new file mode 100644 index 000000000..6c08fef78 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/native_usda-aa00109a0de726bd-1.digest @@ -0,0 +1,24 @@ +time: Some(5.0) +working space: Linear Rec.709 (sRGB) +camera path: Some("/World/cam") +camera: Camera { origin: Vec3A(0.0, 0.0, 8.0), lower_left_corner: Vec3A(-2.7183647, -1.5290802, -2.0), horizontal: Vec3A(5.4367294, 0.0, 0.0), vertical: Vec3A(0.0, 3.0581603, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: Some("/Render/settings") +settings: RenderSettings { samples_per_pixel: 16, max_depth: 2, width: 64, height: 36, region: PixelRect { x0: 0, y0: 0, x1: 64, y1: 36 }, min_samples_per_pixel: 16, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 5, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 50.0, aperture: [20.955, 15.2908], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 10.0 }), depth_of_field: false, motion_blur: true, layer_stack: ["$DIR/native.usda"], invisible_overrides: Some(0) } +layer: $DIR/native.usda +lights: 0 +volumes: 0 +world: 4 geometries, PrimitiveBreakdown { triangles: 0, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 4 } top level, PrimitiveBreakdown { triangles: 2, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 4 } unique, motion true +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [Translation(Vec3A(1.0, 0.0, 0.0))] pieces all=2:575b925bdceda723 camera=2:575b925bdceda723 shadow=2:575b925bdceda723 indirect=2:575b925bdceda723 +geom 1: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [Translation(Vec3A(1.0, 0.0, 0.0))] pieces all=2:79a69671a5590e17 camera=2:79a69671a5590e17 shadow=2:79a69671a5590e17 indirect=2:79a69671a5590e17 +geom 2: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:1b725e59c198c8b9 camera=2:1b725e59c198c8b9 shadow=2:1b725e59c198c8b9 indirect=2:1b725e59c198c8b9 +geom 3: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:5d00031a75085a06 camera=2:5d00031a75085a06 shadow=2:5d00031a75085a06 indirect=2:5d00031a75085a06 +provenance material /World/Glow: MaterialOrigin { slots: [0, 1, 2, 3], displaced: false } +provenance geometry 0..2: /World/Moving +provenance geometry 2..4: /World/Still +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 18250419415378433236, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 0 }), placements: 0, shared: true, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: Some(5.0), camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/World/cam"), cameras: ["/World/cam"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/World/cam"), offsets: [0, 4607182418800017408], interval: Some([4617315517961601024, 4618441417868443648]), query: true, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/native_usda-aa00109a0de726bd-1.image b/crates/crust-core/tests/data/import_baselines/native_usda-aa00109a0de726bd-1.image new file mode 100644 index 000000000..cf663bb5a --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/native_usda-aa00109a0de726bd-1.image @@ -0,0 +1 @@ +64x36 16spp clamp-off a23f88108aadd2a9 diff --git a/crates/crust-core/tests/data/import_baselines/near_far_usda-378c724af4dad1fb-1.digest b/crates/crust-core/tests/data/import_baselines/near_far_usda-378c724af4dad1fb-1.digest new file mode 100644 index 000000000..dee395d6a --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/near_far_usda-378c724af4dad1fb-1.digest @@ -0,0 +1,27 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/W/Cam") +camera: Camera { origin: Vec3A(0.0, 0.0, 0.0), lower_left_corner: Vec3A(-2.0955, -1.1787187, -10.0), horizontal: Vec3A(4.191, 0.0, 0.0), vertical: Vec3A(0.0, 2.3574374, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: Some("/Render/settings") +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 640, height: 360, region: PixelRect { x0: 0, y0: 0, x1: 640, y1: 360 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 50.0, aperture: [20.955, 11.787188], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 10.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/near_far.usda"], invisible_overrides: Some(0) } +layer: $DIR/near_far.usda +lights: 0 +volumes: 0 +world: 3 geometries, PrimitiveBreakdown { triangles: 768, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 2 } top level, PrimitiveBreakdown { triangles: 780, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 2 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=12:95d317f3c4388e2d camera=12:95d317f3c4388e2d shadow=12:95d317f3c4388e2d indirect=12:95d317f3c4388e2d +geom 1: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=12:a2f9da3d587fb50d camera=12:a2f9da3d587fb50d shadow=12:a2f9da3d587fb50d indirect=12:a2f9da3d587fb50d +geom 2: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=768:bb9aeaae01563c51 camera=768:bb9aeaae01563c51 shadow=768:bb9aeaae01563c51 indirect=768:bb9aeaae01563c51 +provenance geometry 0..1: /W/FarB +provenance geometry 1..2: /W/FarA +provenance geometry 2..3: /W/Near +provenance mesh: MeshOrigin { geom_id: 0, slot: 0, baked: false, moving: false } +provenance mesh: MeshOrigin { geom_id: 1, slot: 0, baked: false, moving: false } +provenance mesh: MeshOrigin { geom_id: 2, slot: 1, baked: true, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 18253940121988772376, n_points: 8, n_indices: 36, n_uvs: None, smooth: true, material: 0 }), placements: 2, shared: false, displaced: false } +provenance mesh slot 1: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 13487480004083563611, n_points: 386, n_indices: 2304, n_uvs: None, smooth: true, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: Some(ScreenKey([0, 0, 0, 1153360542, 0, 0, 0, 3212836864, 0, 3193345094, 1065353216, 0, 3193345094, 0, 3212836864, 3186714319, 0, 1065353216, 3186714319, 0, 0, 3212836864, 1073741824, 3])), domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/W/Cam"), cameras: ["/W/Cam"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/W/Cam"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/near_far_usda-378c724af4dad1fb-1.image b/crates/crust-core/tests/data/import_baselines/near_far_usda-378c724af4dad1fb-1.image new file mode 100644 index 000000000..c734c5b1d --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/near_far_usda-378c724af4dad1fb-1.image @@ -0,0 +1 @@ +640x360 16spp clamp-off a04a09c0d4b5e325 diff --git a/crates/crust-core/tests/data/import_baselines/nearest_usda-01bca6fa7666b1f3-1.digest b/crates/crust-core/tests/data/import_baselines/nearest_usda-01bca6fa7666b1f3-1.digest new file mode 100644 index 000000000..c40aece76 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/nearest_usda-01bca6fa7666b1f3-1.digest @@ -0,0 +1,21 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: None +camera: Camera { origin: Vec3A(15.0, 3.0, 3.0), lower_left_corner: Vec3A(4.8863316, -0.044797063, 4.174048), horizontal: Vec3A(1.2295314, 0.0, -6.147657), vertical: Vec3A(-0.44830504, 3.4967792, -0.08966101), u: Vec3A(0.19611613, 0.0, -0.9805807), v: Vec3A(-0.1271232, 0.991561, -0.02542464), lens_radius: 0.05, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: Some("/Render/settings") +settings: RenderSettings { samples_per_pixel: 3, max_depth: 32, width: 8, height: 8, region: PixelRect { x0: 0, y0: 0, x1: 8, y1: 8 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: Some(PassSummary { path: "/Render/Passes/explicit", holdouts: 1, camera_hidden: 0 }) +source: Source { lens: None, depth_of_field: true, motion_blur: false, layer_stack: ["$DIR/nearest.usda"], invisible_overrides: Some(0) } +layer: $DIR/nearest.usda +warning: Warning { code: CameraMissing, kind: Skipped, count: 1, prims: [], message: "USD stage has no UsdGeomCamera — falling back to world::get_settings camera" } +lights: 0 +volumes: 0 +world: 2 geometries, PrimitiveBreakdown { triangles: 0, spheres: 2, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 0, spheres: 2, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout true transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:468da3d80ce34d98 camera=1:468da3d80ce34d98 shadow=1:468da3d80ce34d98 indirect=1:468da3d80ce34d98 +geom 1: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:d23ac7aa026facc8 camera=1:d23ac7aa026facc8 shadow=1:d23ac7aa026facc8 indirect=1:d23ac7aa026facc8 +provenance geometry 0..1: /World/Props/Crate +provenance geometry 1..2: /World/Props/Hero/Body +provenance spheres: [0, 1] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: Some("/Render/Passes/explicit"), keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: None, cameras: [], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: None, offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/nearest_usda-01bca6fa7666b1f3-1.image b/crates/crust-core/tests/data/import_baselines/nearest_usda-01bca6fa7666b1f3-1.image new file mode 100644 index 000000000..8aad9360c --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/nearest_usda-01bca6fa7666b1f3-1.image @@ -0,0 +1 @@ +8x8 16spp clamp-off 9fa9e040e0eedf25 diff --git a/crates/crust-core/tests/data/import_baselines/nearest_usda-10995f4adc959e57-1.digest b/crates/crust-core/tests/data/import_baselines/nearest_usda-10995f4adc959e57-1.digest new file mode 100644 index 000000000..448365903 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/nearest_usda-10995f4adc959e57-1.digest @@ -0,0 +1,21 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: None +camera: Camera { origin: Vec3A(15.0, 3.0, 3.0), lower_left_corner: Vec3A(4.8863316, -0.044797063, 4.174048), horizontal: Vec3A(1.2295314, 0.0, -6.147657), vertical: Vec3A(-0.44830504, 3.4967792, -0.08966101), u: Vec3A(0.19611613, 0.0, -0.9805807), v: Vec3A(-0.1271232, 0.991561, -0.02542464), lens_radius: 0.05, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: Some("/Render/settings") +settings: RenderSettings { samples_per_pixel: 3, max_depth: 32, width: 8, height: 8, region: PixelRect { x0: 0, y0: 0, x1: 8, y1: 8 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: Some(PassSummary { path: "/Render/Passes/nearest", holdouts: 1, camera_hidden: 0 }) +source: Source { lens: None, depth_of_field: true, motion_blur: false, layer_stack: ["$DIR/nearest.usda"], invisible_overrides: Some(0) } +layer: $DIR/nearest.usda +warning: Warning { code: CameraMissing, kind: Skipped, count: 1, prims: [], message: "USD stage has no UsdGeomCamera — falling back to world::get_settings camera" } +lights: 0 +volumes: 0 +world: 2 geometries, PrimitiveBreakdown { triangles: 0, spheres: 2, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 0, spheres: 2, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout true transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:468da3d80ce34d98 camera=1:468da3d80ce34d98 shadow=1:468da3d80ce34d98 indirect=1:468da3d80ce34d98 +geom 1: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:d23ac7aa026facc8 camera=1:d23ac7aa026facc8 shadow=1:d23ac7aa026facc8 indirect=1:d23ac7aa026facc8 +provenance geometry 0..1: /World/Props/Crate +provenance geometry 1..2: /World/Props/Hero/Body +provenance spheres: [0, 1] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: Some("/Render/Passes/nearest"), keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: None, cameras: [], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: None, offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/nearest_usda-10995f4adc959e57-1.image b/crates/crust-core/tests/data/import_baselines/nearest_usda-10995f4adc959e57-1.image new file mode 100644 index 000000000..8aad9360c --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/nearest_usda-10995f4adc959e57-1.image @@ -0,0 +1 @@ +8x8 16spp clamp-off 9fa9e040e0eedf25 diff --git a/crates/crust-core/tests/data/import_baselines/nearest_usda-6471e7e6d484d155-1.digest b/crates/crust-core/tests/data/import_baselines/nearest_usda-6471e7e6d484d155-1.digest new file mode 100644 index 000000000..448365903 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/nearest_usda-6471e7e6d484d155-1.digest @@ -0,0 +1,21 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: None +camera: Camera { origin: Vec3A(15.0, 3.0, 3.0), lower_left_corner: Vec3A(4.8863316, -0.044797063, 4.174048), horizontal: Vec3A(1.2295314, 0.0, -6.147657), vertical: Vec3A(-0.44830504, 3.4967792, -0.08966101), u: Vec3A(0.19611613, 0.0, -0.9805807), v: Vec3A(-0.1271232, 0.991561, -0.02542464), lens_radius: 0.05, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: Some("/Render/settings") +settings: RenderSettings { samples_per_pixel: 3, max_depth: 32, width: 8, height: 8, region: PixelRect { x0: 0, y0: 0, x1: 8, y1: 8 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: Some(PassSummary { path: "/Render/Passes/nearest", holdouts: 1, camera_hidden: 0 }) +source: Source { lens: None, depth_of_field: true, motion_blur: false, layer_stack: ["$DIR/nearest.usda"], invisible_overrides: Some(0) } +layer: $DIR/nearest.usda +warning: Warning { code: CameraMissing, kind: Skipped, count: 1, prims: [], message: "USD stage has no UsdGeomCamera — falling back to world::get_settings camera" } +lights: 0 +volumes: 0 +world: 2 geometries, PrimitiveBreakdown { triangles: 0, spheres: 2, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 0, spheres: 2, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout true transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:468da3d80ce34d98 camera=1:468da3d80ce34d98 shadow=1:468da3d80ce34d98 indirect=1:468da3d80ce34d98 +geom 1: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:d23ac7aa026facc8 camera=1:d23ac7aa026facc8 shadow=1:d23ac7aa026facc8 indirect=1:d23ac7aa026facc8 +provenance geometry 0..1: /World/Props/Crate +provenance geometry 1..2: /World/Props/Hero/Body +provenance spheres: [0, 1] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: Some("/Render/Passes/nearest"), keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: None, cameras: [], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: None, offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/nearest_usda-6471e7e6d484d155-1.image b/crates/crust-core/tests/data/import_baselines/nearest_usda-6471e7e6d484d155-1.image new file mode 100644 index 000000000..8aad9360c --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/nearest_usda-6471e7e6d484d155-1.image @@ -0,0 +1 @@ +8x8 16spp clamp-off 9fa9e040e0eedf25 diff --git a/crates/crust-core/tests/data/import_baselines/nearest_usda-b5f3e1658cfccba1-1.digest b/crates/crust-core/tests/data/import_baselines/nearest_usda-b5f3e1658cfccba1-1.digest new file mode 100644 index 000000000..c40aece76 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/nearest_usda-b5f3e1658cfccba1-1.digest @@ -0,0 +1,21 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: None +camera: Camera { origin: Vec3A(15.0, 3.0, 3.0), lower_left_corner: Vec3A(4.8863316, -0.044797063, 4.174048), horizontal: Vec3A(1.2295314, 0.0, -6.147657), vertical: Vec3A(-0.44830504, 3.4967792, -0.08966101), u: Vec3A(0.19611613, 0.0, -0.9805807), v: Vec3A(-0.1271232, 0.991561, -0.02542464), lens_radius: 0.05, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: Some("/Render/settings") +settings: RenderSettings { samples_per_pixel: 3, max_depth: 32, width: 8, height: 8, region: PixelRect { x0: 0, y0: 0, x1: 8, y1: 8 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: Some(PassSummary { path: "/Render/Passes/explicit", holdouts: 1, camera_hidden: 0 }) +source: Source { lens: None, depth_of_field: true, motion_blur: false, layer_stack: ["$DIR/nearest.usda"], invisible_overrides: Some(0) } +layer: $DIR/nearest.usda +warning: Warning { code: CameraMissing, kind: Skipped, count: 1, prims: [], message: "USD stage has no UsdGeomCamera — falling back to world::get_settings camera" } +lights: 0 +volumes: 0 +world: 2 geometries, PrimitiveBreakdown { triangles: 0, spheres: 2, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 0, spheres: 2, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout true transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:468da3d80ce34d98 camera=1:468da3d80ce34d98 shadow=1:468da3d80ce34d98 indirect=1:468da3d80ce34d98 +geom 1: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:d23ac7aa026facc8 camera=1:d23ac7aa026facc8 shadow=1:d23ac7aa026facc8 indirect=1:d23ac7aa026facc8 +provenance geometry 0..1: /World/Props/Crate +provenance geometry 1..2: /World/Props/Hero/Body +provenance spheres: [0, 1] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: Some("/Render/Passes/explicit"), keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: None, cameras: [], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: None, offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/nearest_usda-b5f3e1658cfccba1-1.image b/crates/crust-core/tests/data/import_baselines/nearest_usda-b5f3e1658cfccba1-1.image new file mode 100644 index 000000000..8aad9360c --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/nearest_usda-b5f3e1658cfccba1-1.image @@ -0,0 +1 @@ +8x8 16spp clamp-off 9fa9e040e0eedf25 diff --git a/crates/crust-core/tests/data/import_baselines/negative_min_spp_usda-f445ea0383fc1875-1.digest b/crates/crust-core/tests/data/import_baselines/negative_min_spp_usda-f445ea0383fc1875-1.digest new file mode 100644 index 000000000..0ac596cc0 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/negative_min_spp_usda-f445ea0383fc1875-1.digest @@ -0,0 +1,18 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: None +camera: Camera { origin: Vec3A(15.0, 3.0, 3.0), lower_left_corner: Vec3A(4.8863316, -0.044797063, 4.174048), horizontal: Vec3A(1.2295314, 0.0, -6.147657), vertical: Vec3A(-0.44830504, 3.4967792, -0.08966101), u: Vec3A(0.19611613, 0.0, -0.9805807), v: Vec3A(-0.1271232, 0.991561, -0.02542464), lens_radius: 0.05, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: Some("/Render/settings") +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 640, height: 360, region: PixelRect { x0: 0, y0: 0, x1: 640, y1: 360 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: None, depth_of_field: true, motion_blur: false, layer_stack: ["$DIR/negative_min_spp.usda"], invisible_overrides: Some(0) } +layer: $DIR/negative_min_spp.usda +warning: Warning { code: SettingsInvalidValue, kind: Refused, count: 1, prims: ["/Render/settings"], message: "crust:minSamplesPerPixel = -1 is negative — using 32" } +warning: Warning { code: CameraMissing, kind: Skipped, count: 1, prims: [], message: "USD stage has no UsdGeomCamera — falling back to world::get_settings camera" } +lights: 0 +volumes: 0 +world: 0 geometries, PrimitiveBreakdown { triangles: 0, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 0, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: None, cameras: [], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: None, offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/negative_min_spp_usda-f445ea0383fc1875-1.image b/crates/crust-core/tests/data/import_baselines/negative_min_spp_usda-f445ea0383fc1875-1.image new file mode 100644 index 000000000..c734c5b1d --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/negative_min_spp_usda-f445ea0383fc1875-1.image @@ -0,0 +1 @@ +640x360 16spp clamp-off a04a09c0d4b5e325 diff --git a/crates/crust-core/tests/data/import_baselines/nested_direct_usda-e25d7da2b966c023-1.digest b/crates/crust-core/tests/data/import_baselines/nested_direct_usda-e25d7da2b966c023-1.digest new file mode 100644 index 000000000..f007c669e --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/nested_direct_usda-e25d7da2b966c023-1.digest @@ -0,0 +1,20 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/W/Cam") +camera: Camera { origin: Vec3A(0.0, 0.0, 0.0), lower_left_corner: Vec3A(-2.0955, -1.1787187, -10.0), horizontal: Vec3A(4.191, 0.0, 0.0), vertical: Vec3A(0.0, 2.3574374, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: Some("/Render/settings") +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 640, height: 360, region: PixelRect { x0: 0, y0: 0, x1: 640, y1: 360 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 50.0, aperture: [20.955, 11.787188], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 10.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/nested_direct.usda"], invisible_overrides: Some(0) } +layer: $DIR/nested_direct.usda +lights: 0 +volumes: 0 +world: 1 geometries, PrimitiveBreakdown { triangles: 192, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 192, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 2.0 motion [] pieces all=192:be113a5c086bbe99 camera=192:be113a5c086bbe99 shadow=192:be113a5c086bbe99 indirect=192:be113a5c086bbe99 +provenance geometry 0..1: /W/Box +provenance mesh: MeshOrigin { geom_id: 0, slot: 0, baked: true, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 5078605137533740532, n_points: 98, n_indices: 576, n_uvs: None, smooth: true, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: Some(ScreenKey([0, 0, 0, 1153360542, 0, 0, 0, 3212836864, 0, 3193345094, 1065353216, 0, 3193345094, 0, 3212836864, 3186714319, 0, 1065353216, 3186714319, 0, 0, 3212836864, 1073741824, 3])), domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/W/Cam"), cameras: ["/W/Cam"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/W/Cam"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/nested_direct_usda-e25d7da2b966c023-1.image b/crates/crust-core/tests/data/import_baselines/nested_direct_usda-e25d7da2b966c023-1.image new file mode 100644 index 000000000..c734c5b1d --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/nested_direct_usda-e25d7da2b966c023-1.image @@ -0,0 +1 @@ +640x360 16spp clamp-off a04a09c0d4b5e325 diff --git a/crates/crust-core/tests/data/import_baselines/nested_hidden_usda-0ea71f61bc0a58d6-1.digest b/crates/crust-core/tests/data/import_baselines/nested_hidden_usda-0ea71f61bc0a58d6-1.digest new file mode 100644 index 000000000..f99a0e5e2 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/nested_hidden_usda-0ea71f61bc0a58d6-1.digest @@ -0,0 +1,21 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: None +camera: Camera { origin: Vec3A(15.0, 3.0, 3.0), lower_left_corner: Vec3A(4.8863316, -0.044797063, 4.174048), horizontal: Vec3A(1.2295314, 0.0, -6.147657), vertical: Vec3A(-0.44830504, 3.4967792, -0.08966101), u: Vec3A(0.19611613, 0.0, -0.9805807), v: Vec3A(-0.1271232, 0.991561, -0.02542464), lens_radius: 0.05, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: None +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 640, height: 360, region: PixelRect { x0: 0, y0: 0, x1: 640, y1: 360 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: None, depth_of_field: true, motion_blur: false, layer_stack: ["$DIR/nested_hidden.usda"], invisible_overrides: Some(0) } +layer: $DIR/nested_hidden.usda +warning: Warning { code: CameraMissing, kind: Skipped, count: 1, prims: [], message: "USD stage has no UsdGeomCamera — falling back to world::get_settings camera" } +lights: 0 +volumes: 0 +world: 2 geometries, PrimitiveBreakdown { triangles: 0, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 2 } top level, PrimitiveBreakdown { triangles: 0, spheres: 1, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 2 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:b6410f10d092cf9f camera=1:b6410f10d092cf9f shadow=1:b6410f10d092cf9f indirect=1:b6410f10d092cf9f +geom 1: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:10c777cd0dfa5779 camera=1:10c777cd0dfa5779 shadow=1:10c777cd0dfa5779 indirect=1:10c777cd0dfa5779 +provenance geometry 0..1: /W/Set/B +provenance geometry 1..2: /W/Set/A +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: None, cameras: [], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: None, offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/nested_hidden_usda-0ea71f61bc0a58d6-1.image b/crates/crust-core/tests/data/import_baselines/nested_hidden_usda-0ea71f61bc0a58d6-1.image new file mode 100644 index 000000000..c734c5b1d --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/nested_hidden_usda-0ea71f61bc0a58d6-1.image @@ -0,0 +1 @@ +640x360 16spp clamp-off a04a09c0d4b5e325 diff --git a/crates/crust-core/tests/data/import_baselines/nested_instancer_proto_root_xform_usda-95a505e1fa209779-1.digest b/crates/crust-core/tests/data/import_baselines/nested_instancer_proto_root_xform_usda-95a505e1fa209779-1.digest new file mode 100644 index 000000000..3166679b8 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/nested_instancer_proto_root_xform_usda-95a505e1fa209779-1.digest @@ -0,0 +1,19 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: None +camera: Camera { origin: Vec3A(15.0, 3.0, 3.0), lower_left_corner: Vec3A(4.8863316, -0.044797063, 4.174048), horizontal: Vec3A(1.2295314, 0.0, -6.147657), vertical: Vec3A(-0.44830504, 3.4967792, -0.08966101), u: Vec3A(0.19611613, 0.0, -0.9805807), v: Vec3A(-0.1271232, 0.991561, -0.02542464), lens_radius: 0.05, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: None +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 640, height: 360, region: PixelRect { x0: 0, y0: 0, x1: 640, y1: 360 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: None, depth_of_field: true, motion_blur: false, layer_stack: ["$DIR/nested_instancer_proto_root_xform.usda"], invisible_overrides: Some(0) } +layer: $DIR/nested_instancer_proto_root_xform.usda +warning: Warning { code: CameraMissing, kind: Skipped, count: 1, prims: [], message: "USD stage has no UsdGeomCamera — falling back to world::get_settings camera" } +lights: 0 +volumes: 0 +world: 1 geometries, PrimitiveBreakdown { triangles: 0, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 1 } top level, PrimitiveBreakdown { triangles: 0, spheres: 1, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 3 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:9ca9d8f49d4981ca camera=2:9ca9d8f49d4981ca shadow=2:9ca9d8f49d4981ca indirect=2:9ca9d8f49d4981ca +provenance geometry 0..1: /World/Outer +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: None, cameras: [], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: None, offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/nested_instancer_proto_root_xform_usda-95a505e1fa209779-1.image b/crates/crust-core/tests/data/import_baselines/nested_instancer_proto_root_xform_usda-95a505e1fa209779-1.image new file mode 100644 index 000000000..c734c5b1d --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/nested_instancer_proto_root_xform_usda-95a505e1fa209779-1.image @@ -0,0 +1 @@ +640x360 16spp clamp-off a04a09c0d4b5e325 diff --git a/crates/crust-core/tests/data/import_baselines/nested_instancing_usda-39f09e1523375345-1.digest b/crates/crust-core/tests/data/import_baselines/nested_instancing_usda-39f09e1523375345-1.digest new file mode 100644 index 000000000..ad512e70d --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/nested_instancing_usda-39f09e1523375345-1.digest @@ -0,0 +1,55 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/World/Cam") +camera: Camera { origin: Vec3A(0.0, 3.4, 15.0), lower_left_corner: Vec3A(-4.530607, -0.34816408, 5.3851185), horizontal: Vec3A(9.061214, -0.0, 0.0), vertical: Vec3A(0.0, 5.058942, -0.62115985), u: Vec3A(1.0, -0.0, 0.0), v: Vec3A(0.0, 0.9925462, -0.121869326), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: Some("/Render/settings") +settings: RenderSettings { samples_per_pixel: 48, max_depth: 8, width: 480, height: 270, region: PixelRect { x0: 0, y0: 0, x1: 480, y1: 270 }, min_samples_per_pixel: 16, variance_threshold: 0.02, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 30.0, aperture: [20.955, 15.2908], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 10.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/nested_instancing.usda"], invisible_overrides: Some(0) } +layer: $DIR/nested_instancing.usda +warning: Warning { code: AssetUnsupportedByHost, kind: Skipped, count: 1, prims: [], message: "No asset loader: environment map $DIR/sky_gradient.exr ignored — the dome falls back to its uniform colour. Use Scene::from_usd_with_assets to supply one." } +lights: 2 +light 0: area name Some("/World/Key") lpe None pmf 0.5 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 1: dome name Some("/World/Sky") lpe None pmf 0.5 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 21 geometries, PrimitiveBreakdown { triangles: 4, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 9 } top level, PrimitiveBreakdown { triangles: 28, spheres: 3, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 15 } unique, motion false +geom 0: material #0 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:986409906e99ce0b camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=2:986409906e99ce0b +geom 1: material #1 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:f6fecef7f865e305 camera=2:f6fecef7f865e305 shadow=2:f6fecef7f865e305 indirect=2:f6fecef7f865e305 +geom 2: material #2 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:c39b723835719483 camera=1:c39b723835719483 shadow=1:c39b723835719483 indirect=1:c39b723835719483 +geom 3: material #3 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=12:8507dcd6df7db891 camera=12:8507dcd6df7db891 shadow=12:8507dcd6df7db891 indirect=12:8507dcd6df7db891 +geom 4: material #2 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:34db86a4181bc99b camera=1:34db86a4181bc99b shadow=1:34db86a4181bc99b indirect=1:34db86a4181bc99b +geom 5: material #3 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=12:2e59a4f39b6703b9 camera=12:2e59a4f39b6703b9 shadow=12:2e59a4f39b6703b9 indirect=12:2e59a4f39b6703b9 +geom 6: material #4 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=16:5eb5e682e31960a1 camera=16:5eb5e682e31960a1 shadow=16:5eb5e682e31960a1 indirect=16:5eb5e682e31960a1 +geom 7: material #2 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=0:cbf29ce484222325 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=0:cbf29ce484222325 +geom 8: material #4 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=0:cbf29ce484222325 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=0:cbf29ce484222325 +geom 9: material #4 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0772173 motion [] pieces all=16:93601f672d232a8a camera=16:93601f672d232a8a shadow=16:93601f672d232a8a indirect=16:93601f672d232a8a +geom 10: material #2 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0772173 motion [] pieces all=0:cbf29ce484222325 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=0:cbf29ce484222325 +geom 11: material #4 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0772173 motion [] pieces all=0:cbf29ce484222325 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=0:cbf29ce484222325 +geom 12: material #4 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.9472682 motion [] pieces all=16:b4f39ab97ac3b7ac camera=16:b4f39ab97ac3b7ac shadow=16:b4f39ab97ac3b7ac indirect=16:b4f39ab97ac3b7ac +geom 13: material #2 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.9472682 motion [] pieces all=0:cbf29ce484222325 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=0:cbf29ce484222325 +geom 14: material #4 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.9472682 motion [] pieces all=0:cbf29ce484222325 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=0:cbf29ce484222325 +geom 15: material #4 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0476896 motion [] pieces all=16:9a1c2df9f06cc828 camera=16:9a1c2df9f06cc828 shadow=16:9a1c2df9f06cc828 indirect=16:9a1c2df9f06cc828 +geom 16: material #2 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0476896 motion [] pieces all=0:cbf29ce484222325 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=0:cbf29ce484222325 +geom 17: material #4 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0476896 motion [] pieces all=0:cbf29ce484222325 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=0:cbf29ce484222325 +geom 18: material #4 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.98304754 motion [] pieces all=16:f8f87e14f3286bf5 camera=16:f8f87e14f3286bf5 shadow=16:f8f87e14f3286bf5 indirect=16:f8f87e14f3286bf5 +geom 19: material #2 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.98304754 motion [] pieces all=0:cbf29ce484222325 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=0:cbf29ce484222325 +geom 20: material #4 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.98304754 motion [] pieces all=0:cbf29ce484222325 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=0:cbf29ce484222325 +provenance material /World/Looks/Bark: MaterialOrigin { slots: [3, 5], displaced: false } +provenance material /World/Looks/Blossom: MaterialOrigin { slots: [2, 4, 7, 10, 13, 16, 19], displaced: false } +provenance material /World/Looks/Ground: MaterialOrigin { slots: [1], displaced: false } +provenance material /World/Looks/Leafy: MaterialOrigin { slots: [6, 8, 9, 11, 12, 14, 15, 17, 18, 20], displaced: false } +provenance light /World/Key: LightOrigin { index: 0, geoms: 0..1 } +provenance light /World/Sky: LightOrigin { index: 1, geoms: 21..21 } +provenance geometry 0..1: /World/Key +provenance geometry 1..2: /World/Floor +provenance geometry 2..4: /World/PlanterB +provenance geometry 4..6: /World/PlanterA +provenance geometry 6..21: /World/Grove +provenance mesh: MeshOrigin { geom_id: 1, slot: 0, baked: true, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 10492340787237780741, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 1: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 12249693463529756870, n_points: 8, n_indices: 24, n_uvs: None, smooth: false, material: 1 }), placements: 0, shared: true, displaced: false } +provenance mesh slot 2: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 12038934229465983880, n_points: 8, n_indices: 24, n_uvs: None, smooth: false, material: 2 }), placements: 0, shared: true, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/World/Cam"), cameras: ["/World/Cam"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/World/Cam"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/nested_instancing_usda-39f09e1523375345-1.image b/crates/crust-core/tests/data/import_baselines/nested_instancing_usda-39f09e1523375345-1.image new file mode 100644 index 000000000..603a6c224 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/nested_instancing_usda-39f09e1523375345-1.image @@ -0,0 +1 @@ +480x270 16spp clamp-off 876c98e5bda352fd diff --git a/crates/crust-core/tests/data/import_baselines/nested_instancing_usda-4b3ca108154f4935-1.digest b/crates/crust-core/tests/data/import_baselines/nested_instancing_usda-4b3ca108154f4935-1.digest new file mode 100644 index 000000000..ad512e70d --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/nested_instancing_usda-4b3ca108154f4935-1.digest @@ -0,0 +1,55 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/World/Cam") +camera: Camera { origin: Vec3A(0.0, 3.4, 15.0), lower_left_corner: Vec3A(-4.530607, -0.34816408, 5.3851185), horizontal: Vec3A(9.061214, -0.0, 0.0), vertical: Vec3A(0.0, 5.058942, -0.62115985), u: Vec3A(1.0, -0.0, 0.0), v: Vec3A(0.0, 0.9925462, -0.121869326), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: Some("/Render/settings") +settings: RenderSettings { samples_per_pixel: 48, max_depth: 8, width: 480, height: 270, region: PixelRect { x0: 0, y0: 0, x1: 480, y1: 270 }, min_samples_per_pixel: 16, variance_threshold: 0.02, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 30.0, aperture: [20.955, 15.2908], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 10.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/nested_instancing.usda"], invisible_overrides: Some(0) } +layer: $DIR/nested_instancing.usda +warning: Warning { code: AssetUnsupportedByHost, kind: Skipped, count: 1, prims: [], message: "No asset loader: environment map $DIR/sky_gradient.exr ignored — the dome falls back to its uniform colour. Use Scene::from_usd_with_assets to supply one." } +lights: 2 +light 0: area name Some("/World/Key") lpe None pmf 0.5 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 1: dome name Some("/World/Sky") lpe None pmf 0.5 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 21 geometries, PrimitiveBreakdown { triangles: 4, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 9 } top level, PrimitiveBreakdown { triangles: 28, spheres: 3, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 15 } unique, motion false +geom 0: material #0 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:986409906e99ce0b camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=2:986409906e99ce0b +geom 1: material #1 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:f6fecef7f865e305 camera=2:f6fecef7f865e305 shadow=2:f6fecef7f865e305 indirect=2:f6fecef7f865e305 +geom 2: material #2 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:c39b723835719483 camera=1:c39b723835719483 shadow=1:c39b723835719483 indirect=1:c39b723835719483 +geom 3: material #3 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=12:8507dcd6df7db891 camera=12:8507dcd6df7db891 shadow=12:8507dcd6df7db891 indirect=12:8507dcd6df7db891 +geom 4: material #2 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:34db86a4181bc99b camera=1:34db86a4181bc99b shadow=1:34db86a4181bc99b indirect=1:34db86a4181bc99b +geom 5: material #3 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=12:2e59a4f39b6703b9 camera=12:2e59a4f39b6703b9 shadow=12:2e59a4f39b6703b9 indirect=12:2e59a4f39b6703b9 +geom 6: material #4 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=16:5eb5e682e31960a1 camera=16:5eb5e682e31960a1 shadow=16:5eb5e682e31960a1 indirect=16:5eb5e682e31960a1 +geom 7: material #2 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=0:cbf29ce484222325 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=0:cbf29ce484222325 +geom 8: material #4 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=0:cbf29ce484222325 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=0:cbf29ce484222325 +geom 9: material #4 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0772173 motion [] pieces all=16:93601f672d232a8a camera=16:93601f672d232a8a shadow=16:93601f672d232a8a indirect=16:93601f672d232a8a +geom 10: material #2 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0772173 motion [] pieces all=0:cbf29ce484222325 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=0:cbf29ce484222325 +geom 11: material #4 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0772173 motion [] pieces all=0:cbf29ce484222325 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=0:cbf29ce484222325 +geom 12: material #4 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.9472682 motion [] pieces all=16:b4f39ab97ac3b7ac camera=16:b4f39ab97ac3b7ac shadow=16:b4f39ab97ac3b7ac indirect=16:b4f39ab97ac3b7ac +geom 13: material #2 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.9472682 motion [] pieces all=0:cbf29ce484222325 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=0:cbf29ce484222325 +geom 14: material #4 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.9472682 motion [] pieces all=0:cbf29ce484222325 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=0:cbf29ce484222325 +geom 15: material #4 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0476896 motion [] pieces all=16:9a1c2df9f06cc828 camera=16:9a1c2df9f06cc828 shadow=16:9a1c2df9f06cc828 indirect=16:9a1c2df9f06cc828 +geom 16: material #2 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0476896 motion [] pieces all=0:cbf29ce484222325 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=0:cbf29ce484222325 +geom 17: material #4 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0476896 motion [] pieces all=0:cbf29ce484222325 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=0:cbf29ce484222325 +geom 18: material #4 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.98304754 motion [] pieces all=16:f8f87e14f3286bf5 camera=16:f8f87e14f3286bf5 shadow=16:f8f87e14f3286bf5 indirect=16:f8f87e14f3286bf5 +geom 19: material #2 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.98304754 motion [] pieces all=0:cbf29ce484222325 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=0:cbf29ce484222325 +geom 20: material #4 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.98304754 motion [] pieces all=0:cbf29ce484222325 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=0:cbf29ce484222325 +provenance material /World/Looks/Bark: MaterialOrigin { slots: [3, 5], displaced: false } +provenance material /World/Looks/Blossom: MaterialOrigin { slots: [2, 4, 7, 10, 13, 16, 19], displaced: false } +provenance material /World/Looks/Ground: MaterialOrigin { slots: [1], displaced: false } +provenance material /World/Looks/Leafy: MaterialOrigin { slots: [6, 8, 9, 11, 12, 14, 15, 17, 18, 20], displaced: false } +provenance light /World/Key: LightOrigin { index: 0, geoms: 0..1 } +provenance light /World/Sky: LightOrigin { index: 1, geoms: 21..21 } +provenance geometry 0..1: /World/Key +provenance geometry 1..2: /World/Floor +provenance geometry 2..4: /World/PlanterB +provenance geometry 4..6: /World/PlanterA +provenance geometry 6..21: /World/Grove +provenance mesh: MeshOrigin { geom_id: 1, slot: 0, baked: true, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 10492340787237780741, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 1: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 12249693463529756870, n_points: 8, n_indices: 24, n_uvs: None, smooth: false, material: 1 }), placements: 0, shared: true, displaced: false } +provenance mesh slot 2: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 12038934229465983880, n_points: 8, n_indices: 24, n_uvs: None, smooth: false, material: 2 }), placements: 0, shared: true, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/World/Cam"), cameras: ["/World/Cam"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/World/Cam"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/nested_instancing_usda-4b3ca108154f4935-1.image b/crates/crust-core/tests/data/import_baselines/nested_instancing_usda-4b3ca108154f4935-1.image new file mode 100644 index 000000000..603a6c224 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/nested_instancing_usda-4b3ca108154f4935-1.image @@ -0,0 +1 @@ +480x270 16spp clamp-off 876c98e5bda352fd diff --git a/crates/crust-core/tests/data/import_baselines/nested_instancing_usda-4b3ca108154f4935-2.digest b/crates/crust-core/tests/data/import_baselines/nested_instancing_usda-4b3ca108154f4935-2.digest new file mode 100644 index 000000000..ad512e70d --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/nested_instancing_usda-4b3ca108154f4935-2.digest @@ -0,0 +1,55 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/World/Cam") +camera: Camera { origin: Vec3A(0.0, 3.4, 15.0), lower_left_corner: Vec3A(-4.530607, -0.34816408, 5.3851185), horizontal: Vec3A(9.061214, -0.0, 0.0), vertical: Vec3A(0.0, 5.058942, -0.62115985), u: Vec3A(1.0, -0.0, 0.0), v: Vec3A(0.0, 0.9925462, -0.121869326), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: Some("/Render/settings") +settings: RenderSettings { samples_per_pixel: 48, max_depth: 8, width: 480, height: 270, region: PixelRect { x0: 0, y0: 0, x1: 480, y1: 270 }, min_samples_per_pixel: 16, variance_threshold: 0.02, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 30.0, aperture: [20.955, 15.2908], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 10.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/nested_instancing.usda"], invisible_overrides: Some(0) } +layer: $DIR/nested_instancing.usda +warning: Warning { code: AssetUnsupportedByHost, kind: Skipped, count: 1, prims: [], message: "No asset loader: environment map $DIR/sky_gradient.exr ignored — the dome falls back to its uniform colour. Use Scene::from_usd_with_assets to supply one." } +lights: 2 +light 0: area name Some("/World/Key") lpe None pmf 0.5 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 1: dome name Some("/World/Sky") lpe None pmf 0.5 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 21 geometries, PrimitiveBreakdown { triangles: 4, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 9 } top level, PrimitiveBreakdown { triangles: 28, spheres: 3, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 15 } unique, motion false +geom 0: material #0 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:986409906e99ce0b camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=2:986409906e99ce0b +geom 1: material #1 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:f6fecef7f865e305 camera=2:f6fecef7f865e305 shadow=2:f6fecef7f865e305 indirect=2:f6fecef7f865e305 +geom 2: material #2 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:c39b723835719483 camera=1:c39b723835719483 shadow=1:c39b723835719483 indirect=1:c39b723835719483 +geom 3: material #3 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=12:8507dcd6df7db891 camera=12:8507dcd6df7db891 shadow=12:8507dcd6df7db891 indirect=12:8507dcd6df7db891 +geom 4: material #2 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:34db86a4181bc99b camera=1:34db86a4181bc99b shadow=1:34db86a4181bc99b indirect=1:34db86a4181bc99b +geom 5: material #3 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=12:2e59a4f39b6703b9 camera=12:2e59a4f39b6703b9 shadow=12:2e59a4f39b6703b9 indirect=12:2e59a4f39b6703b9 +geom 6: material #4 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=16:5eb5e682e31960a1 camera=16:5eb5e682e31960a1 shadow=16:5eb5e682e31960a1 indirect=16:5eb5e682e31960a1 +geom 7: material #2 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=0:cbf29ce484222325 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=0:cbf29ce484222325 +geom 8: material #4 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=0:cbf29ce484222325 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=0:cbf29ce484222325 +geom 9: material #4 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0772173 motion [] pieces all=16:93601f672d232a8a camera=16:93601f672d232a8a shadow=16:93601f672d232a8a indirect=16:93601f672d232a8a +geom 10: material #2 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0772173 motion [] pieces all=0:cbf29ce484222325 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=0:cbf29ce484222325 +geom 11: material #4 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0772173 motion [] pieces all=0:cbf29ce484222325 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=0:cbf29ce484222325 +geom 12: material #4 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.9472682 motion [] pieces all=16:b4f39ab97ac3b7ac camera=16:b4f39ab97ac3b7ac shadow=16:b4f39ab97ac3b7ac indirect=16:b4f39ab97ac3b7ac +geom 13: material #2 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.9472682 motion [] pieces all=0:cbf29ce484222325 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=0:cbf29ce484222325 +geom 14: material #4 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.9472682 motion [] pieces all=0:cbf29ce484222325 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=0:cbf29ce484222325 +geom 15: material #4 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0476896 motion [] pieces all=16:9a1c2df9f06cc828 camera=16:9a1c2df9f06cc828 shadow=16:9a1c2df9f06cc828 indirect=16:9a1c2df9f06cc828 +geom 16: material #2 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0476896 motion [] pieces all=0:cbf29ce484222325 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=0:cbf29ce484222325 +geom 17: material #4 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0476896 motion [] pieces all=0:cbf29ce484222325 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=0:cbf29ce484222325 +geom 18: material #4 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.98304754 motion [] pieces all=16:f8f87e14f3286bf5 camera=16:f8f87e14f3286bf5 shadow=16:f8f87e14f3286bf5 indirect=16:f8f87e14f3286bf5 +geom 19: material #2 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.98304754 motion [] pieces all=0:cbf29ce484222325 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=0:cbf29ce484222325 +geom 20: material #4 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.98304754 motion [] pieces all=0:cbf29ce484222325 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=0:cbf29ce484222325 +provenance material /World/Looks/Bark: MaterialOrigin { slots: [3, 5], displaced: false } +provenance material /World/Looks/Blossom: MaterialOrigin { slots: [2, 4, 7, 10, 13, 16, 19], displaced: false } +provenance material /World/Looks/Ground: MaterialOrigin { slots: [1], displaced: false } +provenance material /World/Looks/Leafy: MaterialOrigin { slots: [6, 8, 9, 11, 12, 14, 15, 17, 18, 20], displaced: false } +provenance light /World/Key: LightOrigin { index: 0, geoms: 0..1 } +provenance light /World/Sky: LightOrigin { index: 1, geoms: 21..21 } +provenance geometry 0..1: /World/Key +provenance geometry 1..2: /World/Floor +provenance geometry 2..4: /World/PlanterB +provenance geometry 4..6: /World/PlanterA +provenance geometry 6..21: /World/Grove +provenance mesh: MeshOrigin { geom_id: 1, slot: 0, baked: true, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 10492340787237780741, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 1: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 12249693463529756870, n_points: 8, n_indices: 24, n_uvs: None, smooth: false, material: 1 }), placements: 0, shared: true, displaced: false } +provenance mesh slot 2: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 12038934229465983880, n_points: 8, n_indices: 24, n_uvs: None, smooth: false, material: 2 }), placements: 0, shared: true, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/World/Cam"), cameras: ["/World/Cam"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/World/Cam"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/nested_instancing_usda-4b3ca108154f4935-2.image b/crates/crust-core/tests/data/import_baselines/nested_instancing_usda-4b3ca108154f4935-2.image new file mode 100644 index 000000000..603a6c224 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/nested_instancing_usda-4b3ca108154f4935-2.image @@ -0,0 +1 @@ +480x270 16spp clamp-off 876c98e5bda352fd diff --git a/crates/crust-core/tests/data/import_baselines/nested_instancing_usda-859971197d976bdc-1.digest b/crates/crust-core/tests/data/import_baselines/nested_instancing_usda-859971197d976bdc-1.digest new file mode 100644 index 000000000..dc66d239f --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/nested_instancing_usda-859971197d976bdc-1.digest @@ -0,0 +1,56 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/World/Cam") +camera: Camera { origin: Vec3A(0.0, 3.4, 15.0), lower_left_corner: Vec3A(-4.530607, -0.34816408, 5.3851185), horizontal: Vec3A(9.061214, -0.0, 0.0), vertical: Vec3A(0.0, 5.058942, -0.62115985), u: Vec3A(1.0, -0.0, 0.0), v: Vec3A(0.0, 0.9925462, -0.121869326), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: Some("/Render/settings") +settings: RenderSettings { samples_per_pixel: 48, max_depth: 8, width: 480, height: 270, region: PixelRect { x0: 0, y0: 0, x1: 480, y1: 270 }, min_samples_per_pixel: 16, variance_threshold: 0.02, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 30.0, aperture: [20.955, 15.2908], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 10.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/nested_instancing.usda"], invisible_overrides: Some(0) } +layer: $DIR/nested_instancing.usda +warning: Warning { code: SubdivAdaptiveNeedsCamera, kind: Approximated, count: 1, prims: [], message: "Adaptive subdivision (2 px) needs the render camera before the stage is read — name it with --camera or RenderSettings.camera, or a dicing camera with crust:dicingCamera. Using the uniform level 0" } +warning: Warning { code: AssetUnsupportedByHost, kind: Skipped, count: 1, prims: [], message: "No asset loader: environment map $DIR/sky_gradient.exr ignored — the dome falls back to its uniform colour. Use Scene::from_usd_with_assets to supply one." } +lights: 2 +light 0: area name Some("/World/Key") lpe None pmf 0.5 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 1: dome name Some("/World/Sky") lpe None pmf 0.5 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 21 geometries, PrimitiveBreakdown { triangles: 4, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 9 } top level, PrimitiveBreakdown { triangles: 28, spheres: 3, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 15 } unique, motion false +geom 0: material #0 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:986409906e99ce0b camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=2:986409906e99ce0b +geom 1: material #1 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:f6fecef7f865e305 camera=2:f6fecef7f865e305 shadow=2:f6fecef7f865e305 indirect=2:f6fecef7f865e305 +geom 2: material #2 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:c39b723835719483 camera=1:c39b723835719483 shadow=1:c39b723835719483 indirect=1:c39b723835719483 +geom 3: material #3 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=12:8507dcd6df7db891 camera=12:8507dcd6df7db891 shadow=12:8507dcd6df7db891 indirect=12:8507dcd6df7db891 +geom 4: material #2 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:34db86a4181bc99b camera=1:34db86a4181bc99b shadow=1:34db86a4181bc99b indirect=1:34db86a4181bc99b +geom 5: material #3 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=12:2e59a4f39b6703b9 camera=12:2e59a4f39b6703b9 shadow=12:2e59a4f39b6703b9 indirect=12:2e59a4f39b6703b9 +geom 6: material #4 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=16:5eb5e682e31960a1 camera=16:5eb5e682e31960a1 shadow=16:5eb5e682e31960a1 indirect=16:5eb5e682e31960a1 +geom 7: material #2 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=0:cbf29ce484222325 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=0:cbf29ce484222325 +geom 8: material #4 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=0:cbf29ce484222325 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=0:cbf29ce484222325 +geom 9: material #4 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0772173 motion [] pieces all=16:93601f672d232a8a camera=16:93601f672d232a8a shadow=16:93601f672d232a8a indirect=16:93601f672d232a8a +geom 10: material #2 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0772173 motion [] pieces all=0:cbf29ce484222325 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=0:cbf29ce484222325 +geom 11: material #4 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0772173 motion [] pieces all=0:cbf29ce484222325 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=0:cbf29ce484222325 +geom 12: material #4 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.9472682 motion [] pieces all=16:b4f39ab97ac3b7ac camera=16:b4f39ab97ac3b7ac shadow=16:b4f39ab97ac3b7ac indirect=16:b4f39ab97ac3b7ac +geom 13: material #2 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.9472682 motion [] pieces all=0:cbf29ce484222325 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=0:cbf29ce484222325 +geom 14: material #4 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.9472682 motion [] pieces all=0:cbf29ce484222325 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=0:cbf29ce484222325 +geom 15: material #4 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0476896 motion [] pieces all=16:9a1c2df9f06cc828 camera=16:9a1c2df9f06cc828 shadow=16:9a1c2df9f06cc828 indirect=16:9a1c2df9f06cc828 +geom 16: material #2 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0476896 motion [] pieces all=0:cbf29ce484222325 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=0:cbf29ce484222325 +geom 17: material #4 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0476896 motion [] pieces all=0:cbf29ce484222325 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=0:cbf29ce484222325 +geom 18: material #4 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.98304754 motion [] pieces all=16:f8f87e14f3286bf5 camera=16:f8f87e14f3286bf5 shadow=16:f8f87e14f3286bf5 indirect=16:f8f87e14f3286bf5 +geom 19: material #2 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.98304754 motion [] pieces all=0:cbf29ce484222325 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=0:cbf29ce484222325 +geom 20: material #4 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.98304754 motion [] pieces all=0:cbf29ce484222325 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=0:cbf29ce484222325 +provenance material /World/Looks/Bark: MaterialOrigin { slots: [3, 5], displaced: false } +provenance material /World/Looks/Blossom: MaterialOrigin { slots: [2, 4, 7, 10, 13, 16, 19], displaced: false } +provenance material /World/Looks/Ground: MaterialOrigin { slots: [1], displaced: false } +provenance material /World/Looks/Leafy: MaterialOrigin { slots: [6, 8, 9, 11, 12, 14, 15, 17, 18, 20], displaced: false } +provenance light /World/Key: LightOrigin { index: 0, geoms: 0..1 } +provenance light /World/Sky: LightOrigin { index: 1, geoms: 21..21 } +provenance geometry 0..1: /World/Key +provenance geometry 1..2: /World/Floor +provenance geometry 2..4: /World/PlanterB +provenance geometry 4..6: /World/PlanterA +provenance geometry 6..21: /World/Grove +provenance mesh: MeshOrigin { geom_id: 1, slot: 0, baked: true, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 10492340787237780741, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 1: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 12249693463529756870, n_points: 8, n_indices: 24, n_uvs: None, smooth: false, material: 1 }), placements: 0, shared: true, displaced: false } +provenance mesh slot 2: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 12038934229465983880, n_points: 8, n_indices: 24, n_uvs: None, smooth: false, material: 2 }), placements: 0, shared: true, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: Some(2.0), skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/World/Cam"), cameras: ["/World/Cam"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/World/Cam"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/nested_instancing_usda-859971197d976bdc-1.image b/crates/crust-core/tests/data/import_baselines/nested_instancing_usda-859971197d976bdc-1.image new file mode 100644 index 000000000..603a6c224 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/nested_instancing_usda-859971197d976bdc-1.image @@ -0,0 +1 @@ +480x270 16spp clamp-off 876c98e5bda352fd diff --git a/crates/crust-core/tests/data/import_baselines/nested_instancing_usda-915b43a7369963b2-1.digest b/crates/crust-core/tests/data/import_baselines/nested_instancing_usda-915b43a7369963b2-1.digest new file mode 100644 index 000000000..ad512e70d --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/nested_instancing_usda-915b43a7369963b2-1.digest @@ -0,0 +1,55 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/World/Cam") +camera: Camera { origin: Vec3A(0.0, 3.4, 15.0), lower_left_corner: Vec3A(-4.530607, -0.34816408, 5.3851185), horizontal: Vec3A(9.061214, -0.0, 0.0), vertical: Vec3A(0.0, 5.058942, -0.62115985), u: Vec3A(1.0, -0.0, 0.0), v: Vec3A(0.0, 0.9925462, -0.121869326), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: Some("/Render/settings") +settings: RenderSettings { samples_per_pixel: 48, max_depth: 8, width: 480, height: 270, region: PixelRect { x0: 0, y0: 0, x1: 480, y1: 270 }, min_samples_per_pixel: 16, variance_threshold: 0.02, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 30.0, aperture: [20.955, 15.2908], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 10.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/nested_instancing.usda"], invisible_overrides: Some(0) } +layer: $DIR/nested_instancing.usda +warning: Warning { code: AssetUnsupportedByHost, kind: Skipped, count: 1, prims: [], message: "No asset loader: environment map $DIR/sky_gradient.exr ignored — the dome falls back to its uniform colour. Use Scene::from_usd_with_assets to supply one." } +lights: 2 +light 0: area name Some("/World/Key") lpe None pmf 0.5 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 1: dome name Some("/World/Sky") lpe None pmf 0.5 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 21 geometries, PrimitiveBreakdown { triangles: 4, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 9 } top level, PrimitiveBreakdown { triangles: 28, spheres: 3, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 15 } unique, motion false +geom 0: material #0 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:986409906e99ce0b camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=2:986409906e99ce0b +geom 1: material #1 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:f6fecef7f865e305 camera=2:f6fecef7f865e305 shadow=2:f6fecef7f865e305 indirect=2:f6fecef7f865e305 +geom 2: material #2 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:c39b723835719483 camera=1:c39b723835719483 shadow=1:c39b723835719483 indirect=1:c39b723835719483 +geom 3: material #3 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=12:8507dcd6df7db891 camera=12:8507dcd6df7db891 shadow=12:8507dcd6df7db891 indirect=12:8507dcd6df7db891 +geom 4: material #2 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:34db86a4181bc99b camera=1:34db86a4181bc99b shadow=1:34db86a4181bc99b indirect=1:34db86a4181bc99b +geom 5: material #3 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=12:2e59a4f39b6703b9 camera=12:2e59a4f39b6703b9 shadow=12:2e59a4f39b6703b9 indirect=12:2e59a4f39b6703b9 +geom 6: material #4 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=16:5eb5e682e31960a1 camera=16:5eb5e682e31960a1 shadow=16:5eb5e682e31960a1 indirect=16:5eb5e682e31960a1 +geom 7: material #2 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=0:cbf29ce484222325 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=0:cbf29ce484222325 +geom 8: material #4 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=0:cbf29ce484222325 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=0:cbf29ce484222325 +geom 9: material #4 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0772173 motion [] pieces all=16:93601f672d232a8a camera=16:93601f672d232a8a shadow=16:93601f672d232a8a indirect=16:93601f672d232a8a +geom 10: material #2 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0772173 motion [] pieces all=0:cbf29ce484222325 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=0:cbf29ce484222325 +geom 11: material #4 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0772173 motion [] pieces all=0:cbf29ce484222325 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=0:cbf29ce484222325 +geom 12: material #4 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.9472682 motion [] pieces all=16:b4f39ab97ac3b7ac camera=16:b4f39ab97ac3b7ac shadow=16:b4f39ab97ac3b7ac indirect=16:b4f39ab97ac3b7ac +geom 13: material #2 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.9472682 motion [] pieces all=0:cbf29ce484222325 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=0:cbf29ce484222325 +geom 14: material #4 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.9472682 motion [] pieces all=0:cbf29ce484222325 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=0:cbf29ce484222325 +geom 15: material #4 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0476896 motion [] pieces all=16:9a1c2df9f06cc828 camera=16:9a1c2df9f06cc828 shadow=16:9a1c2df9f06cc828 indirect=16:9a1c2df9f06cc828 +geom 16: material #2 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0476896 motion [] pieces all=0:cbf29ce484222325 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=0:cbf29ce484222325 +geom 17: material #4 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0476896 motion [] pieces all=0:cbf29ce484222325 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=0:cbf29ce484222325 +geom 18: material #4 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.98304754 motion [] pieces all=16:f8f87e14f3286bf5 camera=16:f8f87e14f3286bf5 shadow=16:f8f87e14f3286bf5 indirect=16:f8f87e14f3286bf5 +geom 19: material #2 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.98304754 motion [] pieces all=0:cbf29ce484222325 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=0:cbf29ce484222325 +geom 20: material #4 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.98304754 motion [] pieces all=0:cbf29ce484222325 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=0:cbf29ce484222325 +provenance material /World/Looks/Bark: MaterialOrigin { slots: [3, 5], displaced: false } +provenance material /World/Looks/Blossom: MaterialOrigin { slots: [2, 4, 7, 10, 13, 16, 19], displaced: false } +provenance material /World/Looks/Ground: MaterialOrigin { slots: [1], displaced: false } +provenance material /World/Looks/Leafy: MaterialOrigin { slots: [6, 8, 9, 11, 12, 14, 15, 17, 18, 20], displaced: false } +provenance light /World/Key: LightOrigin { index: 0, geoms: 0..1 } +provenance light /World/Sky: LightOrigin { index: 1, geoms: 21..21 } +provenance geometry 0..1: /World/Key +provenance geometry 1..2: /World/Floor +provenance geometry 2..4: /World/PlanterB +provenance geometry 4..6: /World/PlanterA +provenance geometry 6..21: /World/Grove +provenance mesh: MeshOrigin { geom_id: 1, slot: 0, baked: true, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 10492340787237780741, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 1: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 12249693463529756870, n_points: 8, n_indices: 24, n_uvs: None, smooth: false, material: 1 }), placements: 0, shared: true, displaced: false } +provenance mesh slot 2: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 12038934229465983880, n_points: 8, n_indices: 24, n_uvs: None, smooth: false, material: 2 }), placements: 0, shared: true, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/World/Cam"), cameras: ["/World/Cam"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/World/Cam"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/nested_instancing_usda-915b43a7369963b2-1.image b/crates/crust-core/tests/data/import_baselines/nested_instancing_usda-915b43a7369963b2-1.image new file mode 100644 index 000000000..603a6c224 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/nested_instancing_usda-915b43a7369963b2-1.image @@ -0,0 +1 @@ +480x270 16spp clamp-off 876c98e5bda352fd diff --git a/crates/crust-core/tests/data/import_baselines/nested_instancing_usda-df6640aca1d2b235-1.digest b/crates/crust-core/tests/data/import_baselines/nested_instancing_usda-df6640aca1d2b235-1.digest new file mode 100644 index 000000000..ad512e70d --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/nested_instancing_usda-df6640aca1d2b235-1.digest @@ -0,0 +1,55 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/World/Cam") +camera: Camera { origin: Vec3A(0.0, 3.4, 15.0), lower_left_corner: Vec3A(-4.530607, -0.34816408, 5.3851185), horizontal: Vec3A(9.061214, -0.0, 0.0), vertical: Vec3A(0.0, 5.058942, -0.62115985), u: Vec3A(1.0, -0.0, 0.0), v: Vec3A(0.0, 0.9925462, -0.121869326), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: Some("/Render/settings") +settings: RenderSettings { samples_per_pixel: 48, max_depth: 8, width: 480, height: 270, region: PixelRect { x0: 0, y0: 0, x1: 480, y1: 270 }, min_samples_per_pixel: 16, variance_threshold: 0.02, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 30.0, aperture: [20.955, 15.2908], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 10.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/nested_instancing.usda"], invisible_overrides: Some(0) } +layer: $DIR/nested_instancing.usda +warning: Warning { code: AssetUnsupportedByHost, kind: Skipped, count: 1, prims: [], message: "No asset loader: environment map $DIR/sky_gradient.exr ignored — the dome falls back to its uniform colour. Use Scene::from_usd_with_assets to supply one." } +lights: 2 +light 0: area name Some("/World/Key") lpe None pmf 0.5 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 1: dome name Some("/World/Sky") lpe None pmf 0.5 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 21 geometries, PrimitiveBreakdown { triangles: 4, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 9 } top level, PrimitiveBreakdown { triangles: 28, spheres: 3, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 15 } unique, motion false +geom 0: material #0 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:986409906e99ce0b camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=2:986409906e99ce0b +geom 1: material #1 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:f6fecef7f865e305 camera=2:f6fecef7f865e305 shadow=2:f6fecef7f865e305 indirect=2:f6fecef7f865e305 +geom 2: material #2 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:c39b723835719483 camera=1:c39b723835719483 shadow=1:c39b723835719483 indirect=1:c39b723835719483 +geom 3: material #3 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=12:8507dcd6df7db891 camera=12:8507dcd6df7db891 shadow=12:8507dcd6df7db891 indirect=12:8507dcd6df7db891 +geom 4: material #2 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:34db86a4181bc99b camera=1:34db86a4181bc99b shadow=1:34db86a4181bc99b indirect=1:34db86a4181bc99b +geom 5: material #3 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=12:2e59a4f39b6703b9 camera=12:2e59a4f39b6703b9 shadow=12:2e59a4f39b6703b9 indirect=12:2e59a4f39b6703b9 +geom 6: material #4 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=16:5eb5e682e31960a1 camera=16:5eb5e682e31960a1 shadow=16:5eb5e682e31960a1 indirect=16:5eb5e682e31960a1 +geom 7: material #2 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=0:cbf29ce484222325 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=0:cbf29ce484222325 +geom 8: material #4 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=0:cbf29ce484222325 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=0:cbf29ce484222325 +geom 9: material #4 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0772173 motion [] pieces all=16:93601f672d232a8a camera=16:93601f672d232a8a shadow=16:93601f672d232a8a indirect=16:93601f672d232a8a +geom 10: material #2 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0772173 motion [] pieces all=0:cbf29ce484222325 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=0:cbf29ce484222325 +geom 11: material #4 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0772173 motion [] pieces all=0:cbf29ce484222325 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=0:cbf29ce484222325 +geom 12: material #4 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.9472682 motion [] pieces all=16:b4f39ab97ac3b7ac camera=16:b4f39ab97ac3b7ac shadow=16:b4f39ab97ac3b7ac indirect=16:b4f39ab97ac3b7ac +geom 13: material #2 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.9472682 motion [] pieces all=0:cbf29ce484222325 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=0:cbf29ce484222325 +geom 14: material #4 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.9472682 motion [] pieces all=0:cbf29ce484222325 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=0:cbf29ce484222325 +geom 15: material #4 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0476896 motion [] pieces all=16:9a1c2df9f06cc828 camera=16:9a1c2df9f06cc828 shadow=16:9a1c2df9f06cc828 indirect=16:9a1c2df9f06cc828 +geom 16: material #2 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0476896 motion [] pieces all=0:cbf29ce484222325 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=0:cbf29ce484222325 +geom 17: material #4 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0476896 motion [] pieces all=0:cbf29ce484222325 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=0:cbf29ce484222325 +geom 18: material #4 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.98304754 motion [] pieces all=16:f8f87e14f3286bf5 camera=16:f8f87e14f3286bf5 shadow=16:f8f87e14f3286bf5 indirect=16:f8f87e14f3286bf5 +geom 19: material #2 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.98304754 motion [] pieces all=0:cbf29ce484222325 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=0:cbf29ce484222325 +geom 20: material #4 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.98304754 motion [] pieces all=0:cbf29ce484222325 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=0:cbf29ce484222325 +provenance material /World/Looks/Bark: MaterialOrigin { slots: [3, 5], displaced: false } +provenance material /World/Looks/Blossom: MaterialOrigin { slots: [2, 4, 7, 10, 13, 16, 19], displaced: false } +provenance material /World/Looks/Ground: MaterialOrigin { slots: [1], displaced: false } +provenance material /World/Looks/Leafy: MaterialOrigin { slots: [6, 8, 9, 11, 12, 14, 15, 17, 18, 20], displaced: false } +provenance light /World/Key: LightOrigin { index: 0, geoms: 0..1 } +provenance light /World/Sky: LightOrigin { index: 1, geoms: 21..21 } +provenance geometry 0..1: /World/Key +provenance geometry 1..2: /World/Floor +provenance geometry 2..4: /World/PlanterB +provenance geometry 4..6: /World/PlanterA +provenance geometry 6..21: /World/Grove +provenance mesh: MeshOrigin { geom_id: 1, slot: 0, baked: true, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 10492340787237780741, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 1: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 12249693463529756870, n_points: 8, n_indices: 24, n_uvs: None, smooth: false, material: 1 }), placements: 0, shared: true, displaced: false } +provenance mesh slot 2: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 12038934229465983880, n_points: 8, n_indices: 24, n_uvs: None, smooth: false, material: 2 }), placements: 0, shared: true, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/World/Cam"), cameras: ["/World/Cam"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/World/Cam"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/nested_instancing_usda-df6640aca1d2b235-1.image b/crates/crust-core/tests/data/import_baselines/nested_instancing_usda-df6640aca1d2b235-1.image new file mode 100644 index 000000000..603a6c224 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/nested_instancing_usda-df6640aca1d2b235-1.image @@ -0,0 +1 @@ +480x270 16spp clamp-off 876c98e5bda352fd diff --git a/crates/crust-core/tests/data/import_baselines/nested_instancing_usda-e37604ffa926df8a-1.digest b/crates/crust-core/tests/data/import_baselines/nested_instancing_usda-e37604ffa926df8a-1.digest new file mode 100644 index 000000000..ad512e70d --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/nested_instancing_usda-e37604ffa926df8a-1.digest @@ -0,0 +1,55 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/World/Cam") +camera: Camera { origin: Vec3A(0.0, 3.4, 15.0), lower_left_corner: Vec3A(-4.530607, -0.34816408, 5.3851185), horizontal: Vec3A(9.061214, -0.0, 0.0), vertical: Vec3A(0.0, 5.058942, -0.62115985), u: Vec3A(1.0, -0.0, 0.0), v: Vec3A(0.0, 0.9925462, -0.121869326), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: Some("/Render/settings") +settings: RenderSettings { samples_per_pixel: 48, max_depth: 8, width: 480, height: 270, region: PixelRect { x0: 0, y0: 0, x1: 480, y1: 270 }, min_samples_per_pixel: 16, variance_threshold: 0.02, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 30.0, aperture: [20.955, 15.2908], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 10.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/nested_instancing.usda"], invisible_overrides: Some(0) } +layer: $DIR/nested_instancing.usda +warning: Warning { code: AssetUnsupportedByHost, kind: Skipped, count: 1, prims: [], message: "No asset loader: environment map $DIR/sky_gradient.exr ignored — the dome falls back to its uniform colour. Use Scene::from_usd_with_assets to supply one." } +lights: 2 +light 0: area name Some("/World/Key") lpe None pmf 0.5 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 1: dome name Some("/World/Sky") lpe None pmf 0.5 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 21 geometries, PrimitiveBreakdown { triangles: 4, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 9 } top level, PrimitiveBreakdown { triangles: 28, spheres: 3, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 15 } unique, motion false +geom 0: material #0 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:986409906e99ce0b camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=2:986409906e99ce0b +geom 1: material #1 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:f6fecef7f865e305 camera=2:f6fecef7f865e305 shadow=2:f6fecef7f865e305 indirect=2:f6fecef7f865e305 +geom 2: material #2 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:c39b723835719483 camera=1:c39b723835719483 shadow=1:c39b723835719483 indirect=1:c39b723835719483 +geom 3: material #3 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=12:8507dcd6df7db891 camera=12:8507dcd6df7db891 shadow=12:8507dcd6df7db891 indirect=12:8507dcd6df7db891 +geom 4: material #2 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:34db86a4181bc99b camera=1:34db86a4181bc99b shadow=1:34db86a4181bc99b indirect=1:34db86a4181bc99b +geom 5: material #3 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=12:2e59a4f39b6703b9 camera=12:2e59a4f39b6703b9 shadow=12:2e59a4f39b6703b9 indirect=12:2e59a4f39b6703b9 +geom 6: material #4 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=16:5eb5e682e31960a1 camera=16:5eb5e682e31960a1 shadow=16:5eb5e682e31960a1 indirect=16:5eb5e682e31960a1 +geom 7: material #2 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=0:cbf29ce484222325 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=0:cbf29ce484222325 +geom 8: material #4 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=0:cbf29ce484222325 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=0:cbf29ce484222325 +geom 9: material #4 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0772173 motion [] pieces all=16:93601f672d232a8a camera=16:93601f672d232a8a shadow=16:93601f672d232a8a indirect=16:93601f672d232a8a +geom 10: material #2 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0772173 motion [] pieces all=0:cbf29ce484222325 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=0:cbf29ce484222325 +geom 11: material #4 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0772173 motion [] pieces all=0:cbf29ce484222325 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=0:cbf29ce484222325 +geom 12: material #4 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.9472682 motion [] pieces all=16:b4f39ab97ac3b7ac camera=16:b4f39ab97ac3b7ac shadow=16:b4f39ab97ac3b7ac indirect=16:b4f39ab97ac3b7ac +geom 13: material #2 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.9472682 motion [] pieces all=0:cbf29ce484222325 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=0:cbf29ce484222325 +geom 14: material #4 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.9472682 motion [] pieces all=0:cbf29ce484222325 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=0:cbf29ce484222325 +geom 15: material #4 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0476896 motion [] pieces all=16:9a1c2df9f06cc828 camera=16:9a1c2df9f06cc828 shadow=16:9a1c2df9f06cc828 indirect=16:9a1c2df9f06cc828 +geom 16: material #2 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0476896 motion [] pieces all=0:cbf29ce484222325 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=0:cbf29ce484222325 +geom 17: material #4 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0476896 motion [] pieces all=0:cbf29ce484222325 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=0:cbf29ce484222325 +geom 18: material #4 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.98304754 motion [] pieces all=16:f8f87e14f3286bf5 camera=16:f8f87e14f3286bf5 shadow=16:f8f87e14f3286bf5 indirect=16:f8f87e14f3286bf5 +geom 19: material #2 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.98304754 motion [] pieces all=0:cbf29ce484222325 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=0:cbf29ce484222325 +geom 20: material #4 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.98304754 motion [] pieces all=0:cbf29ce484222325 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=0:cbf29ce484222325 +provenance material /World/Looks/Bark: MaterialOrigin { slots: [3, 5], displaced: false } +provenance material /World/Looks/Blossom: MaterialOrigin { slots: [2, 4, 7, 10, 13, 16, 19], displaced: false } +provenance material /World/Looks/Ground: MaterialOrigin { slots: [1], displaced: false } +provenance material /World/Looks/Leafy: MaterialOrigin { slots: [6, 8, 9, 11, 12, 14, 15, 17, 18, 20], displaced: false } +provenance light /World/Key: LightOrigin { index: 0, geoms: 0..1 } +provenance light /World/Sky: LightOrigin { index: 1, geoms: 21..21 } +provenance geometry 0..1: /World/Key +provenance geometry 1..2: /World/Floor +provenance geometry 2..4: /World/PlanterB +provenance geometry 4..6: /World/PlanterA +provenance geometry 6..21: /World/Grove +provenance mesh: MeshOrigin { geom_id: 1, slot: 0, baked: true, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 10492340787237780741, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 1: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 12249693463529756870, n_points: 8, n_indices: 24, n_uvs: None, smooth: false, material: 1 }), placements: 0, shared: true, displaced: false } +provenance mesh slot 2: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 12038934229465983880, n_points: 8, n_indices: 24, n_uvs: None, smooth: false, material: 2 }), placements: 0, shared: true, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/World/Cam"), cameras: ["/World/Cam"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/World/Cam"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/nested_instancing_usda-e37604ffa926df8a-1.image b/crates/crust-core/tests/data/import_baselines/nested_instancing_usda-e37604ffa926df8a-1.image new file mode 100644 index 000000000..603a6c224 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/nested_instancing_usda-e37604ffa926df8a-1.image @@ -0,0 +1 @@ +480x270 16spp clamp-off 876c98e5bda352fd diff --git a/crates/crust-core/tests/data/import_baselines/nested_instancing_usda-fda6a6f1c2f5b28e-1.digest b/crates/crust-core/tests/data/import_baselines/nested_instancing_usda-fda6a6f1c2f5b28e-1.digest new file mode 100644 index 000000000..505cfb9c8 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/nested_instancing_usda-fda6a6f1c2f5b28e-1.digest @@ -0,0 +1,54 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/World/Cam") +camera: Camera { origin: Vec3A(0.0, 3.4, 15.0), lower_left_corner: Vec3A(-4.530607, -0.34816408, 5.3851185), horizontal: Vec3A(9.061214, -0.0, 0.0), vertical: Vec3A(0.0, 5.058942, -0.62115985), u: Vec3A(1.0, -0.0, 0.0), v: Vec3A(0.0, 0.9925462, -0.121869326), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: Some("/Render/settings") +settings: RenderSettings { samples_per_pixel: 48, max_depth: 8, width: 480, height: 270, region: PixelRect { x0: 0, y0: 0, x1: 480, y1: 270 }, min_samples_per_pixel: 16, variance_threshold: 0.02, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 30.0, aperture: [20.955, 15.2908], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 10.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/nested_instancing.usda"], invisible_overrides: Some(0) } +layer: $DIR/nested_instancing.usda +lights: 2 +light 0: area name Some("/World/Key") lpe None pmf 0.5 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 1: dome name Some("/World/Sky") lpe None pmf 0.5 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 21 geometries, PrimitiveBreakdown { triangles: 4, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 9 } top level, PrimitiveBreakdown { triangles: 28, spheres: 3, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 15 } unique, motion false +geom 0: material #0 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:986409906e99ce0b camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=2:986409906e99ce0b +geom 1: material #1 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:f6fecef7f865e305 camera=2:f6fecef7f865e305 shadow=2:f6fecef7f865e305 indirect=2:f6fecef7f865e305 +geom 2: material #2 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:c39b723835719483 camera=1:c39b723835719483 shadow=1:c39b723835719483 indirect=1:c39b723835719483 +geom 3: material #3 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=12:8507dcd6df7db891 camera=12:8507dcd6df7db891 shadow=12:8507dcd6df7db891 indirect=12:8507dcd6df7db891 +geom 4: material #2 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:34db86a4181bc99b camera=1:34db86a4181bc99b shadow=1:34db86a4181bc99b indirect=1:34db86a4181bc99b +geom 5: material #3 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=12:2e59a4f39b6703b9 camera=12:2e59a4f39b6703b9 shadow=12:2e59a4f39b6703b9 indirect=12:2e59a4f39b6703b9 +geom 6: material #4 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=16:5eb5e682e31960a1 camera=16:5eb5e682e31960a1 shadow=16:5eb5e682e31960a1 indirect=16:5eb5e682e31960a1 +geom 7: material #2 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=0:cbf29ce484222325 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=0:cbf29ce484222325 +geom 8: material #4 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=0:cbf29ce484222325 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=0:cbf29ce484222325 +geom 9: material #4 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0772173 motion [] pieces all=16:93601f672d232a8a camera=16:93601f672d232a8a shadow=16:93601f672d232a8a indirect=16:93601f672d232a8a +geom 10: material #2 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0772173 motion [] pieces all=0:cbf29ce484222325 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=0:cbf29ce484222325 +geom 11: material #4 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0772173 motion [] pieces all=0:cbf29ce484222325 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=0:cbf29ce484222325 +geom 12: material #4 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.9472682 motion [] pieces all=16:b4f39ab97ac3b7ac camera=16:b4f39ab97ac3b7ac shadow=16:b4f39ab97ac3b7ac indirect=16:b4f39ab97ac3b7ac +geom 13: material #2 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.9472682 motion [] pieces all=0:cbf29ce484222325 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=0:cbf29ce484222325 +geom 14: material #4 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.9472682 motion [] pieces all=0:cbf29ce484222325 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=0:cbf29ce484222325 +geom 15: material #4 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0476896 motion [] pieces all=16:9a1c2df9f06cc828 camera=16:9a1c2df9f06cc828 shadow=16:9a1c2df9f06cc828 indirect=16:9a1c2df9f06cc828 +geom 16: material #2 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0476896 motion [] pieces all=0:cbf29ce484222325 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=0:cbf29ce484222325 +geom 17: material #4 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0476896 motion [] pieces all=0:cbf29ce484222325 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=0:cbf29ce484222325 +geom 18: material #4 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.98304754 motion [] pieces all=16:f8f87e14f3286bf5 camera=16:f8f87e14f3286bf5 shadow=16:f8f87e14f3286bf5 indirect=16:f8f87e14f3286bf5 +geom 19: material #2 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.98304754 motion [] pieces all=0:cbf29ce484222325 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=0:cbf29ce484222325 +geom 20: material #4 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.98304754 motion [] pieces all=0:cbf29ce484222325 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=0:cbf29ce484222325 +provenance material /World/Looks/Bark: MaterialOrigin { slots: [3, 5], displaced: false } +provenance material /World/Looks/Blossom: MaterialOrigin { slots: [2, 4, 7, 10, 13, 16, 19], displaced: false } +provenance material /World/Looks/Ground: MaterialOrigin { slots: [1], displaced: false } +provenance material /World/Looks/Leafy: MaterialOrigin { slots: [6, 8, 9, 11, 12, 14, 15, 17, 18, 20], displaced: false } +provenance light /World/Key: LightOrigin { index: 0, geoms: 0..1 } +provenance light /World/Sky: LightOrigin { index: 1, geoms: 21..21 } +provenance geometry 0..1: /World/Key +provenance geometry 1..2: /World/Floor +provenance geometry 2..4: /World/PlanterB +provenance geometry 4..6: /World/PlanterA +provenance geometry 6..21: /World/Grove +provenance mesh: MeshOrigin { geom_id: 1, slot: 0, baked: true, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 10492340787237780741, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 1: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 12249693463529756870, n_points: 8, n_indices: 24, n_uvs: None, smooth: false, material: 1 }), placements: 0, shared: true, displaced: false } +provenance mesh slot 2: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 12038934229465983880, n_points: 8, n_indices: 24, n_uvs: None, smooth: false, material: 2 }), placements: 0, shared: true, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: true, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/World/Cam"), cameras: ["/World/Cam"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/World/Cam"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/nested_instancing_usda-fda6a6f1c2f5b28e-1.image b/crates/crust-core/tests/data/import_baselines/nested_instancing_usda-fda6a6f1c2f5b28e-1.image new file mode 100644 index 000000000..679cae541 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/nested_instancing_usda-fda6a6f1c2f5b28e-1.image @@ -0,0 +1 @@ +480x270 16spp clamp-off 143cba56d9f80f8a diff --git a/crates/crust-core/tests/data/import_baselines/nested_instancing_usda-fff87a8b52b8e069-1.digest b/crates/crust-core/tests/data/import_baselines/nested_instancing_usda-fff87a8b52b8e069-1.digest new file mode 100644 index 000000000..ad512e70d --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/nested_instancing_usda-fff87a8b52b8e069-1.digest @@ -0,0 +1,55 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/World/Cam") +camera: Camera { origin: Vec3A(0.0, 3.4, 15.0), lower_left_corner: Vec3A(-4.530607, -0.34816408, 5.3851185), horizontal: Vec3A(9.061214, -0.0, 0.0), vertical: Vec3A(0.0, 5.058942, -0.62115985), u: Vec3A(1.0, -0.0, 0.0), v: Vec3A(0.0, 0.9925462, -0.121869326), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: Some("/Render/settings") +settings: RenderSettings { samples_per_pixel: 48, max_depth: 8, width: 480, height: 270, region: PixelRect { x0: 0, y0: 0, x1: 480, y1: 270 }, min_samples_per_pixel: 16, variance_threshold: 0.02, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 30.0, aperture: [20.955, 15.2908], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 10.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/nested_instancing.usda"], invisible_overrides: Some(0) } +layer: $DIR/nested_instancing.usda +warning: Warning { code: AssetUnsupportedByHost, kind: Skipped, count: 1, prims: [], message: "No asset loader: environment map $DIR/sky_gradient.exr ignored — the dome falls back to its uniform colour. Use Scene::from_usd_with_assets to supply one." } +lights: 2 +light 0: area name Some("/World/Key") lpe None pmf 0.5 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 1: dome name Some("/World/Sky") lpe None pmf 0.5 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 21 geometries, PrimitiveBreakdown { triangles: 4, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 9 } top level, PrimitiveBreakdown { triangles: 28, spheres: 3, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 15 } unique, motion false +geom 0: material #0 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:986409906e99ce0b camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=2:986409906e99ce0b +geom 1: material #1 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:f6fecef7f865e305 camera=2:f6fecef7f865e305 shadow=2:f6fecef7f865e305 indirect=2:f6fecef7f865e305 +geom 2: material #2 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:c39b723835719483 camera=1:c39b723835719483 shadow=1:c39b723835719483 indirect=1:c39b723835719483 +geom 3: material #3 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=12:8507dcd6df7db891 camera=12:8507dcd6df7db891 shadow=12:8507dcd6df7db891 indirect=12:8507dcd6df7db891 +geom 4: material #2 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:34db86a4181bc99b camera=1:34db86a4181bc99b shadow=1:34db86a4181bc99b indirect=1:34db86a4181bc99b +geom 5: material #3 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=12:2e59a4f39b6703b9 camera=12:2e59a4f39b6703b9 shadow=12:2e59a4f39b6703b9 indirect=12:2e59a4f39b6703b9 +geom 6: material #4 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=16:5eb5e682e31960a1 camera=16:5eb5e682e31960a1 shadow=16:5eb5e682e31960a1 indirect=16:5eb5e682e31960a1 +geom 7: material #2 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=0:cbf29ce484222325 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=0:cbf29ce484222325 +geom 8: material #4 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=0:cbf29ce484222325 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=0:cbf29ce484222325 +geom 9: material #4 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0772173 motion [] pieces all=16:93601f672d232a8a camera=16:93601f672d232a8a shadow=16:93601f672d232a8a indirect=16:93601f672d232a8a +geom 10: material #2 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0772173 motion [] pieces all=0:cbf29ce484222325 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=0:cbf29ce484222325 +geom 11: material #4 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0772173 motion [] pieces all=0:cbf29ce484222325 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=0:cbf29ce484222325 +geom 12: material #4 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.9472682 motion [] pieces all=16:b4f39ab97ac3b7ac camera=16:b4f39ab97ac3b7ac shadow=16:b4f39ab97ac3b7ac indirect=16:b4f39ab97ac3b7ac +geom 13: material #2 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.9472682 motion [] pieces all=0:cbf29ce484222325 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=0:cbf29ce484222325 +geom 14: material #4 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.9472682 motion [] pieces all=0:cbf29ce484222325 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=0:cbf29ce484222325 +geom 15: material #4 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0476896 motion [] pieces all=16:9a1c2df9f06cc828 camera=16:9a1c2df9f06cc828 shadow=16:9a1c2df9f06cc828 indirect=16:9a1c2df9f06cc828 +geom 16: material #2 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0476896 motion [] pieces all=0:cbf29ce484222325 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=0:cbf29ce484222325 +geom 17: material #4 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0476896 motion [] pieces all=0:cbf29ce484222325 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=0:cbf29ce484222325 +geom 18: material #4 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.98304754 motion [] pieces all=16:f8f87e14f3286bf5 camera=16:f8f87e14f3286bf5 shadow=16:f8f87e14f3286bf5 indirect=16:f8f87e14f3286bf5 +geom 19: material #2 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.98304754 motion [] pieces all=0:cbf29ce484222325 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=0:cbf29ce484222325 +geom 20: material #4 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.98304754 motion [] pieces all=0:cbf29ce484222325 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=0:cbf29ce484222325 +provenance material /World/Looks/Bark: MaterialOrigin { slots: [3, 5], displaced: false } +provenance material /World/Looks/Blossom: MaterialOrigin { slots: [2, 4, 7, 10, 13, 16, 19], displaced: false } +provenance material /World/Looks/Ground: MaterialOrigin { slots: [1], displaced: false } +provenance material /World/Looks/Leafy: MaterialOrigin { slots: [6, 8, 9, 11, 12, 14, 15, 17, 18, 20], displaced: false } +provenance light /World/Key: LightOrigin { index: 0, geoms: 0..1 } +provenance light /World/Sky: LightOrigin { index: 1, geoms: 21..21 } +provenance geometry 0..1: /World/Key +provenance geometry 1..2: /World/Floor +provenance geometry 2..4: /World/PlanterB +provenance geometry 4..6: /World/PlanterA +provenance geometry 6..21: /World/Grove +provenance mesh: MeshOrigin { geom_id: 1, slot: 0, baked: true, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 10492340787237780741, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 1: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 12249693463529756870, n_points: 8, n_indices: 24, n_uvs: None, smooth: false, material: 1 }), placements: 0, shared: true, displaced: false } +provenance mesh slot 2: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 12038934229465983880, n_points: 8, n_indices: 24, n_uvs: None, smooth: false, material: 2 }), placements: 0, shared: true, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/World/Cam"), cameras: ["/World/Cam"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/World/Cam"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/nested_instancing_usda-fff87a8b52b8e069-1.image b/crates/crust-core/tests/data/import_baselines/nested_instancing_usda-fff87a8b52b8e069-1.image new file mode 100644 index 000000000..603a6c224 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/nested_instancing_usda-fff87a8b52b8e069-1.image @@ -0,0 +1 @@ +480x270 16spp clamp-off 876c98e5bda352fd diff --git a/crates/crust-core/tests/data/import_baselines/nested_not_composed_usda-35cc6259e2a42af8-1.digest b/crates/crust-core/tests/data/import_baselines/nested_not_composed_usda-35cc6259e2a42af8-1.digest new file mode 100644 index 000000000..f08616e35 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/nested_not_composed_usda-35cc6259e2a42af8-1.digest @@ -0,0 +1,24 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: None +camera: Camera { origin: Vec3A(15.0, 3.0, 3.0), lower_left_corner: Vec3A(4.8863316, -0.044797063, 4.174048), horizontal: Vec3A(1.2295314, 0.0, -6.147657), vertical: Vec3A(-0.44830504, 3.4967792, -0.08966101), u: Vec3A(0.19611613, 0.0, -0.9805807), v: Vec3A(-0.1271232, 0.991561, -0.02542464), lens_radius: 0.05, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: Some("/Render/settings") +settings: RenderSettings { samples_per_pixel: 3, max_depth: 32, width: 8, height: 8, region: PixelRect { x0: 0, y0: 0, x1: 8, y1: 8 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: Some(PassSummary { path: "/Render/Passes/char", holdouts: 1, camera_hidden: 0 }) +source: Source { lens: None, depth_of_field: true, motion_blur: false, layer_stack: ["$DIR/nested_not_composed.usda"], invisible_overrides: Some(0) } +layer: $DIR/nested_not_composed.usda +warning: Warning { code: RenderPassNestedNotComposed, kind: Skipped, count: 1, prims: ["/Render/Passes/char"], message: "/Render/Passes/char: collection:matte includes /Sets.collection:hero, which a chunk of the streamed import does not compose — that nested collection contributes nothing there" } +warning: Warning { code: CameraMissing, kind: Skipped, count: 1, prims: [], message: "USD stage has no UsdGeomCamera — falling back to world::get_settings camera" } +lights: 0 +volumes: 0 +world: 3 geometries, PrimitiveBreakdown { triangles: 0, spheres: 3, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 0, spheres: 3, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:984632b55acb5495 camera=1:984632b55acb5495 shadow=1:984632b55acb5495 indirect=1:984632b55acb5495 +geom 1: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout true transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:468da3d80ce34d98 camera=1:468da3d80ce34d98 shadow=1:468da3d80ce34d98 indirect=1:468da3d80ce34d98 +geom 2: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:d23ac7aa026facc8 camera=1:d23ac7aa026facc8 shadow=1:d23ac7aa026facc8 indirect=1:d23ac7aa026facc8 +provenance geometry 0..1: /World/Prop +provenance geometry 1..2: /Chars/Sidekick +provenance geometry 2..3: /Chars/Hero +provenance spheres: [0, 1, 2] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: Some("/Render/Passes/char"), keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: None, cameras: [], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: None, offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/nested_not_composed_usda-35cc6259e2a42af8-1.image b/crates/crust-core/tests/data/import_baselines/nested_not_composed_usda-35cc6259e2a42af8-1.image new file mode 100644 index 000000000..8aad9360c --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/nested_not_composed_usda-35cc6259e2a42af8-1.image @@ -0,0 +1 @@ +8x8 16spp clamp-off 9fa9e040e0eedf25 diff --git a/crates/crust-core/tests/data/import_baselines/nested_not_composed_usda-c0a020bf777d3f88-1.digest b/crates/crust-core/tests/data/import_baselines/nested_not_composed_usda-c0a020bf777d3f88-1.digest new file mode 100644 index 000000000..f08616e35 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/nested_not_composed_usda-c0a020bf777d3f88-1.digest @@ -0,0 +1,24 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: None +camera: Camera { origin: Vec3A(15.0, 3.0, 3.0), lower_left_corner: Vec3A(4.8863316, -0.044797063, 4.174048), horizontal: Vec3A(1.2295314, 0.0, -6.147657), vertical: Vec3A(-0.44830504, 3.4967792, -0.08966101), u: Vec3A(0.19611613, 0.0, -0.9805807), v: Vec3A(-0.1271232, 0.991561, -0.02542464), lens_radius: 0.05, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: Some("/Render/settings") +settings: RenderSettings { samples_per_pixel: 3, max_depth: 32, width: 8, height: 8, region: PixelRect { x0: 0, y0: 0, x1: 8, y1: 8 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: Some(PassSummary { path: "/Render/Passes/char", holdouts: 1, camera_hidden: 0 }) +source: Source { lens: None, depth_of_field: true, motion_blur: false, layer_stack: ["$DIR/nested_not_composed.usda"], invisible_overrides: Some(0) } +layer: $DIR/nested_not_composed.usda +warning: Warning { code: RenderPassNestedNotComposed, kind: Skipped, count: 1, prims: ["/Render/Passes/char"], message: "/Render/Passes/char: collection:matte includes /Sets.collection:hero, which a chunk of the streamed import does not compose — that nested collection contributes nothing there" } +warning: Warning { code: CameraMissing, kind: Skipped, count: 1, prims: [], message: "USD stage has no UsdGeomCamera — falling back to world::get_settings camera" } +lights: 0 +volumes: 0 +world: 3 geometries, PrimitiveBreakdown { triangles: 0, spheres: 3, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 0, spheres: 3, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:984632b55acb5495 camera=1:984632b55acb5495 shadow=1:984632b55acb5495 indirect=1:984632b55acb5495 +geom 1: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout true transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:468da3d80ce34d98 camera=1:468da3d80ce34d98 shadow=1:468da3d80ce34d98 indirect=1:468da3d80ce34d98 +geom 2: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:d23ac7aa026facc8 camera=1:d23ac7aa026facc8 shadow=1:d23ac7aa026facc8 indirect=1:d23ac7aa026facc8 +provenance geometry 0..1: /World/Prop +provenance geometry 1..2: /Chars/Sidekick +provenance geometry 2..3: /Chars/Hero +provenance spheres: [0, 1, 2] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: Some("/Render/Passes/char"), keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: None, cameras: [], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: None, offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/nested_not_composed_usda-c0a020bf777d3f88-1.image b/crates/crust-core/tests/data/import_baselines/nested_not_composed_usda-c0a020bf777d3f88-1.image new file mode 100644 index 000000000..8aad9360c --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/nested_not_composed_usda-c0a020bf777d3f88-1.image @@ -0,0 +1 @@ +8x8 16spp clamp-off 9fa9e040e0eedf25 diff --git a/crates/crust-core/tests/data/import_baselines/nested_one_usda-bc56793ff0720fdc-1.digest b/crates/crust-core/tests/data/import_baselines/nested_one_usda-bc56793ff0720fdc-1.digest new file mode 100644 index 000000000..99de6d1cb --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/nested_one_usda-bc56793ff0720fdc-1.digest @@ -0,0 +1,20 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: None +camera: Camera { origin: Vec3A(15.0, 3.0, 3.0), lower_left_corner: Vec3A(4.8863316, -0.044797063, 4.174048), horizontal: Vec3A(1.2295314, 0.0, -6.147657), vertical: Vec3A(-0.44830504, 3.4967792, -0.08966101), u: Vec3A(0.19611613, 0.0, -0.9805807), v: Vec3A(-0.1271232, 0.991561, -0.02542464), lens_radius: 0.05, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: None +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 640, height: 360, region: PixelRect { x0: 0, y0: 0, x1: 640, y1: 360 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: None, depth_of_field: true, motion_blur: false, layer_stack: ["$DIR/nested_one.usda"], invisible_overrides: Some(0) } +layer: $DIR/nested_one.usda +warning: Warning { code: CameraMissing, kind: Skipped, count: 1, prims: [], message: "USD stage has no UsdGeomCamera — falling back to world::get_settings camera" } +lights: 0 +volumes: 0 +world: 2 geometries, PrimitiveBreakdown { triangles: 0, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 2 } top level, PrimitiveBreakdown { triangles: 0, spheres: 2, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 2 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:b4dfc0dd30bb66e5 camera=1:b4dfc0dd30bb66e5 shadow=1:b4dfc0dd30bb66e5 indirect=1:b4dfc0dd30bb66e5 +geom 1: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:10c777cd0dfa5779 camera=1:10c777cd0dfa5779 shadow=1:10c777cd0dfa5779 indirect=1:10c777cd0dfa5779 +provenance geometry 0..2: /W/Set/A +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: None, cameras: [], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: None, offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/nested_one_usda-bc56793ff0720fdc-1.image b/crates/crust-core/tests/data/import_baselines/nested_one_usda-bc56793ff0720fdc-1.image new file mode 100644 index 000000000..c734c5b1d --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/nested_one_usda-bc56793ff0720fdc-1.image @@ -0,0 +1 @@ +640x360 16spp clamp-off a04a09c0d4b5e325 diff --git a/crates/crust-core/tests/data/import_baselines/nested_proxy_target_materials_usda-aa86a76f3c3ba1b5-1.digest b/crates/crust-core/tests/data/import_baselines/nested_proxy_target_materials_usda-aa86a76f3c3ba1b5-1.digest new file mode 100644 index 000000000..cb24dc590 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/nested_proxy_target_materials_usda-aa86a76f3c3ba1b5-1.digest @@ -0,0 +1,35 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/World/Cam") +camera: Camera { origin: Vec3A(1.0, 1.0, 10.0), lower_left_corner: Vec3A(-1.7183647, -0.52908015, 0.0), horizontal: Vec3A(5.4367294, 0.0, 0.0), vertical: Vec3A(0.0, 3.0581603, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: None +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 640, height: 360, region: PixelRect { x0: 0, y0: 0, x1: 640, y1: 360 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 50.0, aperture: [20.955, 15.2908], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 10.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/nested_proxy_target_materials.usda"], invisible_overrides: Some(0) } +layer: $DIR/nested_proxy_target_materials.usda +lights: 0 +volumes: 0 +world: 5 geometries, PrimitiveBreakdown { triangles: 2, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 4 } top level, PrimitiveBreakdown { triangles: 6, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 6 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=4:9fd357dae73a17f8 camera=4:9fd357dae73a17f8 shadow=4:9fd357dae73a17f8 indirect=4:9fd357dae73a17f8 +geom 1: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=4:f0a04a35a27e23f8 camera=4:f0a04a35a27e23f8 shadow=4:f0a04a35a27e23f8 indirect=4:f0a04a35a27e23f8 +geom 2: material #1 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:61e4350a67ec8255 camera=2:61e4350a67ec8255 shadow=2:61e4350a67ec8255 indirect=2:61e4350a67ec8255 +geom 3: material #1 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:802f8cea72d34ba8 camera=2:802f8cea72d34ba8 shadow=2:802f8cea72d34ba8 indirect=2:802f8cea72d34ba8 +geom 4: material #2 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:61e4350a67ec8255 camera=2:61e4350a67ec8255 shadow=2:61e4350a67ec8255 indirect=2:61e4350a67ec8255 +provenance material /ArchiveAsset/Looks/Red: MaterialOrigin { slots: [4], displaced: false } +provenance material /Element/Scatter/Prototypes/Archive/Looks/Red: MaterialOrigin { slots: [2, 3], displaced: false } +provenance material read: ("/ArchiveAsset/Looks/Red", "/Element/Scatter/Prototypes/Archive/Looks/Red") +provenance material read: ("/ArchiveAsset/Looks/Red", "/__Prototype_0/Scatter/Prototypes/Archive/Looks/Red") +provenance material read: ("/ArchiveAsset/Looks/Red/S", "/Element/Scatter/Prototypes/Archive/Looks/Red") +provenance material read: ("/ArchiveAsset/Looks/Red/S", "/__Prototype_0/Scatter/Prototypes/Archive/Looks/Red") +provenance geometry 0..1: /World/E2 +provenance geometry 1..2: /World/E1 +provenance geometry 2..4: /Element/Scatter +provenance geometry 4..5: /ArchiveAsset/Piece1 +provenance mesh: MeshOrigin { geom_id: 4, slot: 2, baked: true, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 11573210918765220906, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 0 }), placements: 0, shared: true, displaced: false } +provenance mesh slot 1: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 11573210918765220906, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 1 }), placements: 0, shared: true, displaced: false } +provenance mesh slot 2: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 11573210918765220906, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 2 }), placements: 1, shared: false, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/World/Cam"), cameras: ["/World/Cam"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/World/Cam"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/nested_proxy_target_materials_usda-aa86a76f3c3ba1b5-1.image b/crates/crust-core/tests/data/import_baselines/nested_proxy_target_materials_usda-aa86a76f3c3ba1b5-1.image new file mode 100644 index 000000000..c734c5b1d --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/nested_proxy_target_materials_usda-aa86a76f3c3ba1b5-1.image @@ -0,0 +1 @@ +640x360 16spp clamp-off a04a09c0d4b5e325 diff --git a/crates/crust-core/tests/data/import_baselines/nested_scatter_usda-4724aa4d383273d2-1.digest b/crates/crust-core/tests/data/import_baselines/nested_scatter_usda-4724aa4d383273d2-1.digest new file mode 100644 index 000000000..339a98474 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/nested_scatter_usda-4724aa4d383273d2-1.digest @@ -0,0 +1,19 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/W/Cam") +camera: Camera { origin: Vec3A(0.0, 0.0, 0.0), lower_left_corner: Vec3A(-2.0955, -1.1787187, -10.0), horizontal: Vec3A(4.191, 0.0, 0.0), vertical: Vec3A(0.0, 2.3574374, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: Some("/Render/settings") +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 640, height: 360, region: PixelRect { x0: 0, y0: 0, x1: 640, y1: 360 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 50.0, aperture: [20.955, 11.787188], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 10.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/nested_scatter.usda"], invisible_overrides: Some(0) } +layer: $DIR/nested_scatter.usda +lights: 0 +volumes: 0 +world: 1 geometries, PrimitiveBreakdown { triangles: 0, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 1 } top level, PrimitiveBreakdown { triangles: 192, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 2 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=192:be113a5c086bbe99 camera=192:be113a5c086bbe99 shadow=192:be113a5c086bbe99 indirect=192:be113a5c086bbe99 +provenance geometry 0..1: /W/Outer +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 5078605137533740532, n_points: 98, n_indices: 576, n_uvs: None, smooth: true, material: 0 }), placements: 0, shared: true, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: Some(ScreenKey([0, 0, 0, 1153360542, 0, 0, 0, 3212836864, 0, 3193345094, 1065353216, 0, 3193345094, 0, 3212836864, 3186714319, 0, 1065353216, 3186714319, 0, 0, 3212836864, 1073741824, 3])), domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/W/Cam"), cameras: ["/W/Cam"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/W/Cam"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/nested_scatter_usda-4724aa4d383273d2-1.image b/crates/crust-core/tests/data/import_baselines/nested_scatter_usda-4724aa4d383273d2-1.image new file mode 100644 index 000000000..c734c5b1d --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/nested_scatter_usda-4724aa4d383273d2-1.image @@ -0,0 +1 @@ +640x360 16spp clamp-off a04a09c0d4b5e325 diff --git a/crates/crust-core/tests/data/import_baselines/nested_translate_usda-31c01e41ce7e4eb3-1.digest b/crates/crust-core/tests/data/import_baselines/nested_translate_usda-31c01e41ce7e4eb3-1.digest new file mode 100644 index 000000000..7ef3279eb --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/nested_translate_usda-31c01e41ce7e4eb3-1.digest @@ -0,0 +1,19 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: None +camera: Camera { origin: Vec3A(15.0, 3.0, 3.0), lower_left_corner: Vec3A(4.8863316, -0.044797063, 4.174048), horizontal: Vec3A(1.2295314, 0.0, -6.147657), vertical: Vec3A(-0.44830504, 3.4967792, -0.08966101), u: Vec3A(0.19611613, 0.0, -0.9805807), v: Vec3A(-0.1271232, 0.991561, -0.02542464), lens_radius: 0.05, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: None +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 640, height: 360, region: PixelRect { x0: 0, y0: 0, x1: 640, y1: 360 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: None, depth_of_field: true, motion_blur: false, layer_stack: ["$DIR/nested_translate.usda"], invisible_overrides: Some(0) } +layer: $DIR/nested_translate.usda +warning: Warning { code: CameraMissing, kind: Skipped, count: 1, prims: [], message: "USD stage has no UsdGeomCamera — falling back to world::get_settings camera" } +lights: 0 +volumes: 0 +world: 1 geometries, PrimitiveBreakdown { triangles: 0, spheres: 1, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 0, spheres: 1, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:6b9eeb1b56e0b798 camera=1:6b9eeb1b56e0b798 shadow=1:6b9eeb1b56e0b798 indirect=1:6b9eeb1b56e0b798 +provenance geometry 0..1: /World/A/B/S +provenance spheres: [0] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: None, cameras: [], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: None, offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/nested_translate_usda-31c01e41ce7e4eb3-1.image b/crates/crust-core/tests/data/import_baselines/nested_translate_usda-31c01e41ce7e4eb3-1.image new file mode 100644 index 000000000..c734c5b1d --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/nested_translate_usda-31c01e41ce7e4eb3-1.image @@ -0,0 +1 @@ +640x360 16spp clamp-off a04a09c0d4b5e325 diff --git a/crates/crust-core/tests/data/import_baselines/nested_two_usda-0fad6a8ff7f8520a-1.digest b/crates/crust-core/tests/data/import_baselines/nested_two_usda-0fad6a8ff7f8520a-1.digest new file mode 100644 index 000000000..a15e51208 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/nested_two_usda-0fad6a8ff7f8520a-1.digest @@ -0,0 +1,25 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: None +camera: Camera { origin: Vec3A(15.0, 3.0, 3.0), lower_left_corner: Vec3A(4.8863316, -0.044797063, 4.174048), horizontal: Vec3A(1.2295314, 0.0, -6.147657), vertical: Vec3A(-0.44830504, 3.4967792, -0.08966101), u: Vec3A(0.19611613, 0.0, -0.9805807), v: Vec3A(-0.1271232, 0.991561, -0.02542464), lens_radius: 0.05, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: None +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 640, height: 360, region: PixelRect { x0: 0, y0: 0, x1: 640, y1: 360 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: None, depth_of_field: true, motion_blur: false, layer_stack: ["$DIR/nested_two.usda"], invisible_overrides: Some(0) } +layer: $DIR/nested_two.usda +warning: Warning { code: CameraMissing, kind: Skipped, count: 1, prims: [], message: "USD stage has no UsdGeomCamera — falling back to world::get_settings camera" } +lights: 0 +volumes: 0 +world: 6 geometries, PrimitiveBreakdown { triangles: 0, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 6 } top level, PrimitiveBreakdown { triangles: 0, spheres: 2, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 6 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:429d4abb801c22d5 camera=1:429d4abb801c22d5 shadow=1:429d4abb801c22d5 indirect=1:429d4abb801c22d5 +geom 1: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:41af89000f14f1d5 camera=1:41af89000f14f1d5 shadow=1:41af89000f14f1d5 indirect=1:41af89000f14f1d5 +geom 2: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:b6410f10d092cf9f camera=1:b6410f10d092cf9f shadow=1:b6410f10d092cf9f indirect=1:b6410f10d092cf9f +geom 3: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:39345aa200c2bfe5 camera=1:39345aa200c2bfe5 shadow=1:39345aa200c2bfe5 indirect=1:39345aa200c2bfe5 +geom 4: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:b4dfc0dd30bb66e5 camera=1:b4dfc0dd30bb66e5 shadow=1:b4dfc0dd30bb66e5 indirect=1:b4dfc0dd30bb66e5 +geom 5: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:10c777cd0dfa5779 camera=1:10c777cd0dfa5779 shadow=1:10c777cd0dfa5779 indirect=1:10c777cd0dfa5779 +provenance geometry 0..3: /W/Set/B +provenance geometry 3..6: /W/Set/A +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: None, cameras: [], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: None, offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/nested_two_usda-0fad6a8ff7f8520a-1.image b/crates/crust-core/tests/data/import_baselines/nested_two_usda-0fad6a8ff7f8520a-1.image new file mode 100644 index 000000000..c734c5b1d --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/nested_two_usda-0fad6a8ff7f8520a-1.image @@ -0,0 +1 @@ +640x360 16spp clamp-off a04a09c0d4b5e325 diff --git a/crates/crust-core/tests/data/import_baselines/nested_usda-dbe832b66063cf24-1.digest b/crates/crust-core/tests/data/import_baselines/nested_usda-dbe832b66063cf24-1.digest new file mode 100644 index 000000000..d0ab17cef --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/nested_usda-dbe832b66063cf24-1.digest @@ -0,0 +1,230 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: None +camera: Camera { origin: Vec3A(15.0, 3.0, 3.0), lower_left_corner: Vec3A(4.8863316, -0.044797063, 4.174048), horizontal: Vec3A(1.2295314, 0.0, -6.147657), vertical: Vec3A(-0.44830504, 3.4967792, -0.08966101), u: Vec3A(0.19611613, 0.0, -0.9805807), v: Vec3A(-0.1271232, 0.991561, -0.02542464), lens_radius: 0.05, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: None +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 640, height: 360, region: PixelRect { x0: 0, y0: 0, x1: 640, y1: 360 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: None, depth_of_field: true, motion_blur: false, layer_stack: ["$DIR/nested.usda"], invisible_overrides: Some(0) } +layer: $DIR/nested.usda +warning: Warning { code: CameraMissing, kind: Skipped, count: 1, prims: [], message: "USD stage has no UsdGeomCamera — falling back to world::get_settings camera" } +lights: 0 +volumes: 0 +world: 140 geometries, PrimitiveBreakdown { triangles: 0, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 2 } top level, PrimitiveBreakdown { triangles: 140, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 75 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=420:fc91a638067120e4 camera=420:fc91a638067120e4 shadow=420:fc91a638067120e4 indirect=420:fc91a638067120e4 +geom 1: material #1 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=0:cbf29ce484222325 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=0:cbf29ce484222325 +geom 2: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=0:cbf29ce484222325 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=0:cbf29ce484222325 +geom 3: material #1 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=0:cbf29ce484222325 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=0:cbf29ce484222325 +geom 4: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=0:cbf29ce484222325 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=0:cbf29ce484222325 +geom 5: material #1 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=0:cbf29ce484222325 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=0:cbf29ce484222325 +geom 6: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=0:cbf29ce484222325 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=0:cbf29ce484222325 +geom 7: material #1 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=0:cbf29ce484222325 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=0:cbf29ce484222325 +geom 8: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=0:cbf29ce484222325 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=0:cbf29ce484222325 +geom 9: material #1 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=0:cbf29ce484222325 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=0:cbf29ce484222325 +geom 10: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=0:cbf29ce484222325 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=0:cbf29ce484222325 +geom 11: material #1 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=0:cbf29ce484222325 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=0:cbf29ce484222325 +geom 12: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=0:cbf29ce484222325 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=0:cbf29ce484222325 +geom 13: material #1 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=0:cbf29ce484222325 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=0:cbf29ce484222325 +geom 14: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=0:cbf29ce484222325 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=0:cbf29ce484222325 +geom 15: material #1 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=0:cbf29ce484222325 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=0:cbf29ce484222325 +geom 16: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=0:cbf29ce484222325 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=0:cbf29ce484222325 +geom 17: material #1 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=0:cbf29ce484222325 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=0:cbf29ce484222325 +geom 18: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=0:cbf29ce484222325 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=0:cbf29ce484222325 +geom 19: material #1 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=0:cbf29ce484222325 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=0:cbf29ce484222325 +geom 20: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=0:cbf29ce484222325 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=0:cbf29ce484222325 +geom 21: material #1 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=0:cbf29ce484222325 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=0:cbf29ce484222325 +geom 22: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=0:cbf29ce484222325 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=0:cbf29ce484222325 +geom 23: material #1 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=0:cbf29ce484222325 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=0:cbf29ce484222325 +geom 24: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=0:cbf29ce484222325 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=0:cbf29ce484222325 +geom 25: material #1 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=0:cbf29ce484222325 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=0:cbf29ce484222325 +geom 26: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=0:cbf29ce484222325 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=0:cbf29ce484222325 +geom 27: material #1 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=0:cbf29ce484222325 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=0:cbf29ce484222325 +geom 28: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=0:cbf29ce484222325 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=0:cbf29ce484222325 +geom 29: material #1 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=0:cbf29ce484222325 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=0:cbf29ce484222325 +geom 30: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=0:cbf29ce484222325 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=0:cbf29ce484222325 +geom 31: material #1 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=0:cbf29ce484222325 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=0:cbf29ce484222325 +geom 32: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=0:cbf29ce484222325 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=0:cbf29ce484222325 +geom 33: material #1 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=0:cbf29ce484222325 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=0:cbf29ce484222325 +geom 34: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=0:cbf29ce484222325 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=0:cbf29ce484222325 +geom 35: material #1 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=0:cbf29ce484222325 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=0:cbf29ce484222325 +geom 36: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=0:cbf29ce484222325 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=0:cbf29ce484222325 +geom 37: material #1 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=0:cbf29ce484222325 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=0:cbf29ce484222325 +geom 38: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=0:cbf29ce484222325 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=0:cbf29ce484222325 +geom 39: material #1 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=0:cbf29ce484222325 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=0:cbf29ce484222325 +geom 40: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=0:cbf29ce484222325 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=0:cbf29ce484222325 +geom 41: material #1 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=0:cbf29ce484222325 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=0:cbf29ce484222325 +geom 42: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=0:cbf29ce484222325 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=0:cbf29ce484222325 +geom 43: material #1 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=0:cbf29ce484222325 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=0:cbf29ce484222325 +geom 44: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=0:cbf29ce484222325 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=0:cbf29ce484222325 +geom 45: material #1 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=0:cbf29ce484222325 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=0:cbf29ce484222325 +geom 46: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=0:cbf29ce484222325 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=0:cbf29ce484222325 +geom 47: material #1 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=0:cbf29ce484222325 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=0:cbf29ce484222325 +geom 48: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=0:cbf29ce484222325 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=0:cbf29ce484222325 +geom 49: material #1 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=0:cbf29ce484222325 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=0:cbf29ce484222325 +geom 50: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=0:cbf29ce484222325 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=0:cbf29ce484222325 +geom 51: material #1 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=0:cbf29ce484222325 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=0:cbf29ce484222325 +geom 52: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=0:cbf29ce484222325 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=0:cbf29ce484222325 +geom 53: material #1 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=0:cbf29ce484222325 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=0:cbf29ce484222325 +geom 54: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=0:cbf29ce484222325 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=0:cbf29ce484222325 +geom 55: material #1 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=0:cbf29ce484222325 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=0:cbf29ce484222325 +geom 56: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=0:cbf29ce484222325 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=0:cbf29ce484222325 +geom 57: material #1 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=0:cbf29ce484222325 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=0:cbf29ce484222325 +geom 58: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=0:cbf29ce484222325 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=0:cbf29ce484222325 +geom 59: material #1 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=0:cbf29ce484222325 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=0:cbf29ce484222325 +geom 60: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=0:cbf29ce484222325 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=0:cbf29ce484222325 +geom 61: material #1 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=0:cbf29ce484222325 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=0:cbf29ce484222325 +geom 62: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=0:cbf29ce484222325 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=0:cbf29ce484222325 +geom 63: material #1 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=0:cbf29ce484222325 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=0:cbf29ce484222325 +geom 64: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=0:cbf29ce484222325 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=0:cbf29ce484222325 +geom 65: material #1 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=0:cbf29ce484222325 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=0:cbf29ce484222325 +geom 66: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=0:cbf29ce484222325 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=0:cbf29ce484222325 +geom 67: material #1 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=0:cbf29ce484222325 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=0:cbf29ce484222325 +geom 68: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=0:cbf29ce484222325 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=0:cbf29ce484222325 +geom 69: material #1 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=0:cbf29ce484222325 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=0:cbf29ce484222325 +geom 70: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=420:c442619f627011ed camera=420:c442619f627011ed shadow=420:c442619f627011ed indirect=420:c442619f627011ed +geom 71: material #1 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=0:cbf29ce484222325 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=0:cbf29ce484222325 +geom 72: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=0:cbf29ce484222325 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=0:cbf29ce484222325 +geom 73: material #1 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=0:cbf29ce484222325 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=0:cbf29ce484222325 +geom 74: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=0:cbf29ce484222325 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=0:cbf29ce484222325 +geom 75: material #1 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=0:cbf29ce484222325 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=0:cbf29ce484222325 +geom 76: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=0:cbf29ce484222325 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=0:cbf29ce484222325 +geom 77: material #1 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=0:cbf29ce484222325 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=0:cbf29ce484222325 +geom 78: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=0:cbf29ce484222325 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=0:cbf29ce484222325 +geom 79: material #1 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=0:cbf29ce484222325 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=0:cbf29ce484222325 +geom 80: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=0:cbf29ce484222325 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=0:cbf29ce484222325 +geom 81: material #1 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=0:cbf29ce484222325 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=0:cbf29ce484222325 +geom 82: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=0:cbf29ce484222325 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=0:cbf29ce484222325 +geom 83: material #1 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=0:cbf29ce484222325 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=0:cbf29ce484222325 +geom 84: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=0:cbf29ce484222325 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=0:cbf29ce484222325 +geom 85: material #1 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=0:cbf29ce484222325 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=0:cbf29ce484222325 +geom 86: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=0:cbf29ce484222325 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=0:cbf29ce484222325 +geom 87: material #1 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=0:cbf29ce484222325 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=0:cbf29ce484222325 +geom 88: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=0:cbf29ce484222325 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=0:cbf29ce484222325 +geom 89: material #1 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=0:cbf29ce484222325 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=0:cbf29ce484222325 +geom 90: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=0:cbf29ce484222325 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=0:cbf29ce484222325 +geom 91: material #1 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=0:cbf29ce484222325 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=0:cbf29ce484222325 +geom 92: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=0:cbf29ce484222325 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=0:cbf29ce484222325 +geom 93: material #1 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=0:cbf29ce484222325 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=0:cbf29ce484222325 +geom 94: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=0:cbf29ce484222325 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=0:cbf29ce484222325 +geom 95: material #1 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=0:cbf29ce484222325 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=0:cbf29ce484222325 +geom 96: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=0:cbf29ce484222325 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=0:cbf29ce484222325 +geom 97: material #1 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=0:cbf29ce484222325 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=0:cbf29ce484222325 +geom 98: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=0:cbf29ce484222325 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=0:cbf29ce484222325 +geom 99: material #1 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=0:cbf29ce484222325 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=0:cbf29ce484222325 +geom 100: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=0:cbf29ce484222325 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=0:cbf29ce484222325 +geom 101: material #1 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=0:cbf29ce484222325 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=0:cbf29ce484222325 +geom 102: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=0:cbf29ce484222325 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=0:cbf29ce484222325 +geom 103: material #1 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=0:cbf29ce484222325 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=0:cbf29ce484222325 +geom 104: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=0:cbf29ce484222325 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=0:cbf29ce484222325 +geom 105: material #1 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=0:cbf29ce484222325 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=0:cbf29ce484222325 +geom 106: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=0:cbf29ce484222325 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=0:cbf29ce484222325 +geom 107: material #1 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=0:cbf29ce484222325 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=0:cbf29ce484222325 +geom 108: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=0:cbf29ce484222325 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=0:cbf29ce484222325 +geom 109: material #1 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=0:cbf29ce484222325 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=0:cbf29ce484222325 +geom 110: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=0:cbf29ce484222325 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=0:cbf29ce484222325 +geom 111: material #1 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=0:cbf29ce484222325 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=0:cbf29ce484222325 +geom 112: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=0:cbf29ce484222325 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=0:cbf29ce484222325 +geom 113: material #1 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=0:cbf29ce484222325 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=0:cbf29ce484222325 +geom 114: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=0:cbf29ce484222325 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=0:cbf29ce484222325 +geom 115: material #1 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=0:cbf29ce484222325 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=0:cbf29ce484222325 +geom 116: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=0:cbf29ce484222325 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=0:cbf29ce484222325 +geom 117: material #1 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=0:cbf29ce484222325 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=0:cbf29ce484222325 +geom 118: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=0:cbf29ce484222325 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=0:cbf29ce484222325 +geom 119: material #1 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=0:cbf29ce484222325 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=0:cbf29ce484222325 +geom 120: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=0:cbf29ce484222325 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=0:cbf29ce484222325 +geom 121: material #1 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=0:cbf29ce484222325 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=0:cbf29ce484222325 +geom 122: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=0:cbf29ce484222325 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=0:cbf29ce484222325 +geom 123: material #1 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=0:cbf29ce484222325 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=0:cbf29ce484222325 +geom 124: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=0:cbf29ce484222325 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=0:cbf29ce484222325 +geom 125: material #1 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=0:cbf29ce484222325 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=0:cbf29ce484222325 +geom 126: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=0:cbf29ce484222325 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=0:cbf29ce484222325 +geom 127: material #1 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=0:cbf29ce484222325 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=0:cbf29ce484222325 +geom 128: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=0:cbf29ce484222325 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=0:cbf29ce484222325 +geom 129: material #1 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=0:cbf29ce484222325 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=0:cbf29ce484222325 +geom 130: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=0:cbf29ce484222325 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=0:cbf29ce484222325 +geom 131: material #1 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=0:cbf29ce484222325 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=0:cbf29ce484222325 +geom 132: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=0:cbf29ce484222325 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=0:cbf29ce484222325 +geom 133: material #1 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=0:cbf29ce484222325 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=0:cbf29ce484222325 +geom 134: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=0:cbf29ce484222325 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=0:cbf29ce484222325 +geom 135: material #1 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=0:cbf29ce484222325 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=0:cbf29ce484222325 +geom 136: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=0:cbf29ce484222325 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=0:cbf29ce484222325 +geom 137: material #1 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=0:cbf29ce484222325 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=0:cbf29ce484222325 +geom 138: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=0:cbf29ce484222325 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=0:cbf29ce484222325 +geom 139: material #1 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=0:cbf29ce484222325 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=0:cbf29ce484222325 +provenance material /W/Looks/Even: MaterialOrigin { slots: [1, 3, 5, 7, 9, 11, 13, 15, 17, 19, 21, 23, 25, 27, 29, 31, 33, 35, 37, 39, 41, 43, 45, 47, 49, 51, 53, 55, 57, 59, 61, 63, 65, 67, 69, 71, 73, 75, 77, 79, 81, 83, 85, 87, 89, 91, 93, 95, 97, 99, 101, 103, 105, 107, 109, 111, 113, 115, 117, 119, 121, 123, 125, 127, 129, 131, 133, 135, 137, 139], displaced: false } +provenance material /W/Looks/Odd: MaterialOrigin { slots: [0, 2, 4, 6, 8, 10, 12, 14, 16, 18, 20, 22, 24, 26, 28, 30, 32, 34, 36, 38, 40, 42, 44, 46, 48, 50, 52, 54, 56, 58, 60, 62, 64, 66, 68, 70, 72, 74, 76, 78, 80, 82, 84, 86, 88, 90, 92, 94, 96, 98, 100, 102, 104, 106, 108, 110, 112, 114, 116, 118, 120, 122, 124, 126, 128, 130, 132, 134, 136, 138], displaced: false } +provenance geometry 0..140: /W/Groves +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 9983431792377398331, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 0 }), placements: 0, shared: true, displaced: false } +provenance mesh slot 1: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 445393997096090275, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 1 }), placements: 0, shared: true, displaced: false } +provenance mesh slot 2: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 12530787508316231193, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 0 }), placements: 0, shared: true, displaced: false } +provenance mesh slot 3: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 2003607608452276953, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 1 }), placements: 0, shared: true, displaced: false } +provenance mesh slot 4: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 14655719404458108924, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 0 }), placements: 0, shared: true, displaced: false } +provenance mesh slot 5: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 8197086280809854330, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 1 }), placements: 0, shared: true, displaced: false } +provenance mesh slot 6: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 15226241633731644800, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 0 }), placements: 0, shared: true, displaced: false } +provenance mesh slot 7: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 1220030663393014154, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 1 }), placements: 0, shared: true, displaced: false } +provenance mesh slot 8: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 9671416021768249711, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 0 }), placements: 0, shared: true, displaced: false } +provenance mesh slot 9: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 713395937854610793, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 1 }), placements: 0, shared: true, displaced: false } +provenance mesh slot 10: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 9015895206046420096, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 0 }), placements: 0, shared: true, displaced: false } +provenance mesh slot 11: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 6053246308793941277, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 1 }), placements: 0, shared: true, displaced: false } +provenance mesh slot 12: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 3354812878111187853, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 0 }), placements: 0, shared: true, displaced: false } +provenance mesh slot 13: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 2143590123543198581, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 1 }), placements: 0, shared: true, displaced: false } +provenance mesh slot 14: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 12825708062627280916, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 0 }), placements: 0, shared: true, displaced: false } +provenance mesh slot 15: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 17390326888399512289, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 1 }), placements: 0, shared: true, displaced: false } +provenance mesh slot 16: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 5167343440688746005, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 0 }), placements: 0, shared: true, displaced: false } +provenance mesh slot 17: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 6431256199563153267, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 1 }), placements: 0, shared: true, displaced: false } +provenance mesh slot 18: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 17938759324587019490, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 0 }), placements: 0, shared: true, displaced: false } +provenance mesh slot 19: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 9338845809469782352, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 1 }), placements: 0, shared: true, displaced: false } +provenance mesh slot 20: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 5016274748741901678, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 0 }), placements: 0, shared: true, displaced: false } +provenance mesh slot 21: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 18148940518120066603, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 1 }), placements: 0, shared: true, displaced: false } +provenance mesh slot 22: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 4830200885891814983, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 0 }), placements: 0, shared: true, displaced: false } +provenance mesh slot 23: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 15766972410381609041, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 1 }), placements: 0, shared: true, displaced: false } +provenance mesh slot 24: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 9472872301105672276, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 0 }), placements: 0, shared: true, displaced: false } +provenance mesh slot 25: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 11414915196367845650, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 1 }), placements: 0, shared: true, displaced: false } +provenance mesh slot 26: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 9269437264134878215, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 0 }), placements: 0, shared: true, displaced: false } +provenance mesh slot 27: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 10241772988455119680, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 1 }), placements: 0, shared: true, displaced: false } +provenance mesh slot 28: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 6287388440238275734, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 0 }), placements: 0, shared: true, displaced: false } +provenance mesh slot 29: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 16540043469967507742, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 1 }), placements: 0, shared: true, displaced: false } +provenance mesh slot 30: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 12273703647221078853, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 0 }), placements: 0, shared: true, displaced: false } +provenance mesh slot 31: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 14885684870811093431, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 1 }), placements: 0, shared: true, displaced: false } +provenance mesh slot 32: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 11612700176135259559, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 0 }), placements: 0, shared: true, displaced: false } +provenance mesh slot 33: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 18124134558096145620, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 1 }), placements: 0, shared: true, displaced: false } +provenance mesh slot 34: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 1547305282937345631, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 0 }), placements: 0, shared: true, displaced: false } +provenance mesh slot 35: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 14319513361325090922, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 1 }), placements: 0, shared: true, displaced: false } +provenance mesh slot 36: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 12743050219495799660, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 0 }), placements: 0, shared: true, displaced: false } +provenance mesh slot 37: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 14564807414974621182, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 1 }), placements: 0, shared: true, displaced: false } +provenance mesh slot 38: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 15128490494491982350, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 0 }), placements: 0, shared: true, displaced: false } +provenance mesh slot 39: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 11141992223073874788, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 1 }), placements: 0, shared: true, displaced: false } +provenance mesh slot 40: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 2187686032361564554, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 0 }), placements: 0, shared: true, displaced: false } +provenance mesh slot 41: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 9703725567598092252, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 1 }), placements: 0, shared: true, displaced: false } +provenance mesh slot 42: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 6913685974256867465, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 0 }), placements: 0, shared: true, displaced: false } +provenance mesh slot 43: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 3100222640867777022, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 1 }), placements: 0, shared: true, displaced: false } +provenance mesh slot 44: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 5554913372606825388, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 0 }), placements: 0, shared: true, displaced: false } +provenance mesh slot 45: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 16649324141060687540, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 1 }), placements: 0, shared: true, displaced: false } +provenance mesh slot 46: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 2737295392186472633, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 0 }), placements: 0, shared: true, displaced: false } +provenance mesh slot 47: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 303054490942377425, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 1 }), placements: 0, shared: true, displaced: false } +provenance mesh slot 48: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 9767880336714203685, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 0 }), placements: 0, shared: true, displaced: false } +provenance mesh slot 49: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 6412687190128267277, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 1 }), placements: 0, shared: true, displaced: false } +provenance mesh slot 50: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 8058819299735866700, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 0 }), placements: 0, shared: true, displaced: false } +provenance mesh slot 51: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 11805635118953593289, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 1 }), placements: 0, shared: true, displaced: false } +provenance mesh slot 52: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 10587302289040357906, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 0 }), placements: 0, shared: true, displaced: false } +provenance mesh slot 53: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 915626683743930737, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 1 }), placements: 0, shared: true, displaced: false } +provenance mesh slot 54: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 2011260152324884985, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 0 }), placements: 0, shared: true, displaced: false } +provenance mesh slot 55: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 15004083201484757820, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 1 }), placements: 0, shared: true, displaced: false } +provenance mesh slot 56: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 4492824581372515845, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 0 }), placements: 0, shared: true, displaced: false } +provenance mesh slot 57: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 1556962713607594861, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 1 }), placements: 0, shared: true, displaced: false } +provenance mesh slot 58: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 13700768547374211392, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 0 }), placements: 0, shared: true, displaced: false } +provenance mesh slot 59: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 1736609624654126323, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 1 }), placements: 0, shared: true, displaced: false } +provenance mesh slot 60: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 7314348300970154562, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 0 }), placements: 0, shared: true, displaced: false } +provenance mesh slot 61: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 16137632259568160912, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 1 }), placements: 0, shared: true, displaced: false } +provenance mesh slot 62: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 5302950127304504092, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 0 }), placements: 0, shared: true, displaced: false } +provenance mesh slot 63: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 11033842897036242693, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 1 }), placements: 0, shared: true, displaced: false } +provenance mesh slot 64: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 1432794855324975849, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 0 }), placements: 0, shared: true, displaced: false } +provenance mesh slot 65: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 6417092498626891774, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 1 }), placements: 0, shared: true, displaced: false } +provenance mesh slot 66: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 15417142670901525198, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 0 }), placements: 0, shared: true, displaced: false } +provenance mesh slot 67: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 1660923941246006929, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 1 }), placements: 0, shared: true, displaced: false } +provenance mesh slot 68: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 7728745279061195760, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 0 }), placements: 0, shared: true, displaced: false } +provenance mesh slot 69: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 12950018545620570054, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 1 }), placements: 0, shared: true, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: None, cameras: [], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: None, offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/nested_usda-dbe832b66063cf24-1.image b/crates/crust-core/tests/data/import_baselines/nested_usda-dbe832b66063cf24-1.image new file mode 100644 index 000000000..c734c5b1d --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/nested_usda-dbe832b66063cf24-1.image @@ -0,0 +1 @@ +640x360 16spp clamp-off a04a09c0d4b5e325 diff --git a/crates/crust-core/tests/data/import_baselines/neural_usda-57a514ca820ab02c-1.digest b/crates/crust-core/tests/data/import_baselines/neural_usda-57a514ca820ab02c-1.digest new file mode 100644 index 000000000..661b36abc --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/neural_usda-57a514ca820ab02c-1.digest @@ -0,0 +1,28 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/World/Cam") +camera: Camera { origin: Vec3A(0.0, 4.0, 8.0), lower_left_corner: Vec3A(-2.0955, 2.4283752, -2.0), horizontal: Vec3A(4.191, 0.0, 0.0), vertical: Vec3A(0.0, 3.1432498, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: Some("/Render/settings") +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 32, height: 24, region: PixelRect { x0: 0, y0: 0, x1: 32, y1: 24 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Neural, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 50.0, aperture: [20.955, 15.2908], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 10.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/neural.usda"], invisible_overrides: Some(0) } +layer: $DIR/neural.usda +lights: 2 +light 0: area name Some("/World/B") lpe None pmf 0.5 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 1: area name Some("/World/A") lpe None pmf 0.5 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 3 geometries, PrimitiveBreakdown { triangles: 2, spheres: 2, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 2, spheres: 2, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +geom 0: material #0 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:dc2ad38d3c5952b5 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=1:dc2ad38d3c5952b5 +geom 1: material #1 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:31c97faa22d20ec1 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=1:31c97faa22d20ec1 +geom 2: material #2 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:aa8e840dbc8bc005 camera=2:aa8e840dbc8bc005 shadow=2:aa8e840dbc8bc005 indirect=2:aa8e840dbc8bc005 +provenance light /World/A: LightOrigin { index: 1, geoms: 1..2 } +provenance light /World/B: LightOrigin { index: 0, geoms: 0..1 } +provenance geometry 0..1: /World/B +provenance geometry 1..2: /World/A +provenance geometry 2..3: /World/Floor +provenance mesh: MeshOrigin { geom_id: 2, slot: 0, baked: true, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 5231292419457759674, n_points: 4, n_indices: 4, n_uvs: None, smooth: true, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/World/Cam"), cameras: ["/World/Cam"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/World/Cam"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/neural_usda-57a514ca820ab02c-1.image b/crates/crust-core/tests/data/import_baselines/neural_usda-57a514ca820ab02c-1.image new file mode 100644 index 000000000..493c7cfd3 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/neural_usda-57a514ca820ab02c-1.image @@ -0,0 +1 @@ +32x24 16spp clamp-off 6c1b85153837cba2 diff --git a/crates/crust-core/tests/data/import_baselines/ngon_usda-573da62ad402526c-1.digest b/crates/crust-core/tests/data/import_baselines/ngon_usda-573da62ad402526c-1.digest new file mode 100644 index 000000000..d586fe9e8 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/ngon_usda-573da62ad402526c-1.digest @@ -0,0 +1,21 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: None +camera: Camera { origin: Vec3A(15.0, 3.0, 3.0), lower_left_corner: Vec3A(4.8863316, -0.044797063, 4.174048), horizontal: Vec3A(1.2295314, 0.0, -6.147657), vertical: Vec3A(-0.44830504, 3.4967792, -0.08966101), u: Vec3A(0.19611613, 0.0, -0.9805807), v: Vec3A(-0.1271232, 0.991561, -0.02542464), lens_radius: 0.05, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: None +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 640, height: 360, region: PixelRect { x0: 0, y0: 0, x1: 640, y1: 360 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: None, depth_of_field: true, motion_blur: false, layer_stack: ["$DIR/ngon.usda"], invisible_overrides: Some(0) } +layer: $DIR/ngon.usda +warning: Warning { code: CameraMissing, kind: Skipped, count: 1, prims: [], message: "USD stage has no UsdGeomCamera — falling back to world::get_settings camera" } +lights: 0 +volumes: 0 +world: 1 geometries, PrimitiveBreakdown { triangles: 6, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 6, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=6:3965ea6f0f41df68 camera=6:3965ea6f0f41df68 shadow=6:3965ea6f0f41df68 indirect=6:3965ea6f0f41df68 +provenance geometry 0..1: /World/Mixed +provenance mesh: MeshOrigin { geom_id: 0, slot: 0, baked: true, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 612367198234246471, n_points: 12, n_indices: 12, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: None, cameras: [], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: None, offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/ngon_usda-573da62ad402526c-1.image b/crates/crust-core/tests/data/import_baselines/ngon_usda-573da62ad402526c-1.image new file mode 100644 index 000000000..c734c5b1d --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/ngon_usda-573da62ad402526c-1.image @@ -0,0 +1 @@ +640x360 16spp clamp-off a04a09c0d4b5e325 diff --git a/crates/crust-core/tests/data/import_baselines/nine_uniform_lights_usda-181564afd75bc784-1.digest b/crates/crust-core/tests/data/import_baselines/nine_uniform_lights_usda-181564afd75bc784-1.digest new file mode 100644 index 000000000..9bdb22d4f --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/nine_uniform_lights_usda-181564afd75bc784-1.digest @@ -0,0 +1,52 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/World/cam") +camera: Camera { origin: Vec3A(0.0, 0.0, 0.0), lower_left_corner: Vec3A(-2.7183647, -1.5290802, -10.0), horizontal: Vec3A(5.4367294, 0.0, 0.0), vertical: Vec3A(0.0, 3.0581603, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: Some("/Render/settings") +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 640, height: 360, region: PixelRect { x0: 0, y0: 0, x1: 640, y1: 360 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Uniform, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 50.0, aperture: [20.955, 15.2908], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 10.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/nine_uniform_lights.usda"], invisible_overrides: Some(0) } +layer: $DIR/nine_uniform_lights.usda +lights: 9 +light 0: area name Some("/World/l8") lpe None pmf 0.11111111 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 1: area name Some("/World/l7") lpe None pmf 0.11111111 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 2: area name Some("/World/l6") lpe None pmf 0.11111111 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 3: area name Some("/World/l5") lpe None pmf 0.11111111 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 4: area name Some("/World/l4") lpe None pmf 0.11111111 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 5: area name Some("/World/l3") lpe None pmf 0.11111111 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 6: area name Some("/World/l2") lpe None pmf 0.11111111 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 7: area name Some("/World/l1") lpe None pmf 0.11111111 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 8: area name Some("/World/l0") lpe None pmf 0.11111111 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 9 geometries, PrimitiveBreakdown { triangles: 0, spheres: 9, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 0, spheres: 9, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +geom 0: material #0 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:d511455fb7e615fa camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=1:d511455fb7e615fa +geom 1: material #1 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:c9fe977327bdf2f5 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=1:c9fe977327bdf2f5 +geom 2: material #2 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:58bf00e87d7312f5 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=1:58bf00e87d7312f5 +geom 3: material #3 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:2c088793c7ce8f75 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=1:2c088793c7ce8f75 +geom 4: material #4 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:77ac25de318f0e45 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=1:77ac25de318f0e45 +geom 5: material #5 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:6cae77c711424b95 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=1:6cae77c711424b95 +geom 6: material #6 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:8c10829006e198c8 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=1:8c10829006e198c8 +geom 7: material #7 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:ce1a4d77c8695945 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=1:ce1a4d77c8695945 +geom 8: material #8 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:e462dd7fec620d85 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=1:e462dd7fec620d85 +provenance light /World/l0: LightOrigin { index: 8, geoms: 8..9 } +provenance light /World/l1: LightOrigin { index: 7, geoms: 7..8 } +provenance light /World/l2: LightOrigin { index: 6, geoms: 6..7 } +provenance light /World/l3: LightOrigin { index: 5, geoms: 5..6 } +provenance light /World/l4: LightOrigin { index: 4, geoms: 4..5 } +provenance light /World/l5: LightOrigin { index: 3, geoms: 3..4 } +provenance light /World/l6: LightOrigin { index: 2, geoms: 2..3 } +provenance light /World/l7: LightOrigin { index: 1, geoms: 1..2 } +provenance light /World/l8: LightOrigin { index: 0, geoms: 0..1 } +provenance geometry 0..1: /World/l8 +provenance geometry 1..2: /World/l7 +provenance geometry 2..3: /World/l6 +provenance geometry 3..4: /World/l5 +provenance geometry 4..5: /World/l4 +provenance geometry 5..6: /World/l3 +provenance geometry 6..7: /World/l2 +provenance geometry 7..8: /World/l1 +provenance geometry 8..9: /World/l0 +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/World/cam"), cameras: ["/World/cam"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/World/cam"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/nine_uniform_lights_usda-181564afd75bc784-1.image b/crates/crust-core/tests/data/import_baselines/nine_uniform_lights_usda-181564afd75bc784-1.image new file mode 100644 index 000000000..c734c5b1d --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/nine_uniform_lights_usda-181564afd75bc784-1.image @@ -0,0 +1 @@ +640x360 16spp clamp-off a04a09c0d4b5e325 diff --git a/crates/crust-core/tests/data/import_baselines/no_camera_usda-08eaf78e1847bdbe-1.digest b/crates/crust-core/tests/data/import_baselines/no_camera_usda-08eaf78e1847bdbe-1.digest new file mode 100644 index 000000000..a517adee6 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/no_camera_usda-08eaf78e1847bdbe-1.digest @@ -0,0 +1,21 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/W/Cam") +camera: Camera { origin: Vec3A(0.0, 0.0, 0.0), lower_left_corner: Vec3A(-2.0955, -1.1787187, -10.0), horizontal: Vec3A(4.191, 0.0, 0.0), vertical: Vec3A(0.0, 2.3574374, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: Some("/Render/settings") +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 640, height: 360, region: PixelRect { x0: 0, y0: 0, x1: 640, y1: 360 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 50.0, aperture: [20.955, 11.787188], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 10.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/no_camera.usda"], invisible_overrides: Some(0) } +layer: $DIR/no_camera.usda +warning: Warning { code: SubdivAdaptiveNeedsCamera, kind: Approximated, count: 1, prims: [], message: "Adaptive subdivision (2 px) needs the render camera before the stage is read — name it with --camera or RenderSettings.camera, or a dicing camera with crust:dicingCamera. Using the uniform level 0" } +lights: 0 +volumes: 0 +world: 1 geometries, PrimitiveBreakdown { triangles: 12, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 12, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=12:8a43bbedf6dc6f25 camera=12:8a43bbedf6dc6f25 shadow=12:8a43bbedf6dc6f25 indirect=12:8a43bbedf6dc6f25 +provenance geometry 0..1: /W/Near +provenance mesh: MeshOrigin { geom_id: 0, slot: 0, baked: true, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 14289806633734265804, n_points: 8, n_indices: 24, n_uvs: None, smooth: true, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/W/Cam"), cameras: ["/W/Cam"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/W/Cam"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/no_camera_usda-08eaf78e1847bdbe-1.image b/crates/crust-core/tests/data/import_baselines/no_camera_usda-08eaf78e1847bdbe-1.image new file mode 100644 index 000000000..c734c5b1d --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/no_camera_usda-08eaf78e1847bdbe-1.image @@ -0,0 +1 @@ +640x360 16spp clamp-off a04a09c0d4b5e325 diff --git a/crates/crust-core/tests/data/import_baselines/no_camera_usda-2a7bfc7853b270c5-1.digest b/crates/crust-core/tests/data/import_baselines/no_camera_usda-2a7bfc7853b270c5-1.digest new file mode 100644 index 000000000..a19baac4b --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/no_camera_usda-2a7bfc7853b270c5-1.digest @@ -0,0 +1,17 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: None +camera: Camera { origin: Vec3A(15.0, 3.0, 3.0), lower_left_corner: Vec3A(4.8863316, -0.044797063, 4.174048), horizontal: Vec3A(1.2295314, 0.0, -6.147657), vertical: Vec3A(-0.44830504, 3.4967792, -0.08966101), u: Vec3A(0.19611613, 0.0, -0.9805807), v: Vec3A(-0.1271232, 0.991561, -0.02542464), lens_radius: 0.05, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: None +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 640, height: 360, region: PixelRect { x0: 0, y0: 0, x1: 640, y1: 360 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: None, depth_of_field: true, motion_blur: false, layer_stack: ["$DIR/no_camera.usda"], invisible_overrides: Some(0) } +layer: $DIR/no_camera.usda +warning: Warning { code: CameraMissing, kind: Skipped, count: 1, prims: [], message: "USD stage has no UsdGeomCamera — falling back to world::get_settings camera" } +lights: 0 +volumes: 0 +world: 0 geometries, PrimitiveBreakdown { triangles: 0, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 0, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: None, cameras: [], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: None, offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/no_camera_usda-2a7bfc7853b270c5-1.image b/crates/crust-core/tests/data/import_baselines/no_camera_usda-2a7bfc7853b270c5-1.image new file mode 100644 index 000000000..c734c5b1d --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/no_camera_usda-2a7bfc7853b270c5-1.image @@ -0,0 +1 @@ +640x360 16spp clamp-off a04a09c0d4b5e325 diff --git a/crates/crust-core/tests/data/import_baselines/no_camera_usda-5507d24332d7f188-1.digest b/crates/crust-core/tests/data/import_baselines/no_camera_usda-5507d24332d7f188-1.digest new file mode 100644 index 000000000..913b73fb1 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/no_camera_usda-5507d24332d7f188-1.digest @@ -0,0 +1,19 @@ +time: Some(10.25) +working space: Linear Rec.709 (sRGB) +camera path: None +camera: Camera { origin: Vec3A(15.0, 3.0, 3.0), lower_left_corner: Vec3A(4.8863316, -0.044797063, 4.174048), horizontal: Vec3A(1.2295314, 0.0, -6.147657), vertical: Vec3A(-0.44830504, 3.4967792, -0.08966101), u: Vec3A(0.19611613, 0.0, -0.9805807), v: Vec3A(-0.1271232, 0.991561, -0.02542464), lens_radius: 0.05, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: None +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 640, height: 360, region: PixelRect { x0: 0, y0: 0, x1: 640, y1: 360 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 10, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: None, depth_of_field: true, motion_blur: false, layer_stack: ["$DIR/no_camera.usda"], invisible_overrides: Some(0) } +layer: $DIR/no_camera.usda +warning: Warning { code: CameraMissing, kind: Skipped, count: 1, prims: [], message: "USD stage has no UsdGeomCamera — falling back to world::get_settings camera" } +lights: 0 +volumes: 0 +world: 1 geometries, PrimitiveBreakdown { triangles: 0, spheres: 1, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 0, spheres: 1, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:fb1e7d48790aec95 camera=1:fb1e7d48790aec95 shadow=1:fb1e7d48790aec95 indirect=1:fb1e7d48790aec95 +provenance geometry 0..1: /S +provenance spheres: [0] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: Some(10.25), camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: None, cameras: [], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: None, offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/no_camera_usda-5507d24332d7f188-1.image b/crates/crust-core/tests/data/import_baselines/no_camera_usda-5507d24332d7f188-1.image new file mode 100644 index 000000000..c734c5b1d --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/no_camera_usda-5507d24332d7f188-1.image @@ -0,0 +1 @@ +640x360 16spp clamp-off a04a09c0d4b5e325 diff --git a/crates/crust-core/tests/data/import_baselines/no_camera_usda-758b683c20791ceb-1.digest b/crates/crust-core/tests/data/import_baselines/no_camera_usda-758b683c20791ceb-1.digest new file mode 100644 index 000000000..0d1eb7fac --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/no_camera_usda-758b683c20791ceb-1.digest @@ -0,0 +1,19 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: None +camera: Camera { origin: Vec3A(15.0, 3.0, 3.0), lower_left_corner: Vec3A(4.8863316, -0.044797063, 4.174048), horizontal: Vec3A(1.2295314, 0.0, -6.147657), vertical: Vec3A(-0.44830504, 3.4967792, -0.08966101), u: Vec3A(0.19611613, 0.0, -0.9805807), v: Vec3A(-0.1271232, 0.991561, -0.02542464), lens_radius: 0.05, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: None +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 640, height: 360, region: PixelRect { x0: 0, y0: 0, x1: 640, y1: 360 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: None, depth_of_field: true, motion_blur: false, layer_stack: ["$DIR/no_camera.usda"], invisible_overrides: Some(0) } +layer: $DIR/no_camera.usda +warning: Warning { code: CameraMissing, kind: Skipped, count: 1, prims: [], message: "USD stage has no UsdGeomCamera — falling back to world::get_settings camera" } +lights: 0 +volumes: 0 +world: 1 geometries, PrimitiveBreakdown { triangles: 0, spheres: 1, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 0, spheres: 1, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:fb1e7d48790aec95 camera=1:fb1e7d48790aec95 shadow=1:fb1e7d48790aec95 indirect=1:fb1e7d48790aec95 +provenance geometry 0..1: /S +provenance spheres: [0] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: None, cameras: [], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: None, offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/no_camera_usda-758b683c20791ceb-1.image b/crates/crust-core/tests/data/import_baselines/no_camera_usda-758b683c20791ceb-1.image new file mode 100644 index 000000000..c734c5b1d --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/no_camera_usda-758b683c20791ceb-1.image @@ -0,0 +1 @@ +640x360 16spp clamp-off a04a09c0d4b5e325 diff --git a/crates/crust-core/tests/data/import_baselines/no_camera_usda-ac160dc389201eeb-1.digest b/crates/crust-core/tests/data/import_baselines/no_camera_usda-ac160dc389201eeb-1.digest new file mode 100644 index 000000000..b3556c681 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/no_camera_usda-ac160dc389201eeb-1.digest @@ -0,0 +1,19 @@ +time: Some(-1.5) +working space: Linear Rec.709 (sRGB) +camera path: None +camera: Camera { origin: Vec3A(15.0, 3.0, 3.0), lower_left_corner: Vec3A(4.8863316, -0.044797063, 4.174048), horizontal: Vec3A(1.2295314, 0.0, -6.147657), vertical: Vec3A(-0.44830504, 3.4967792, -0.08966101), u: Vec3A(0.19611613, 0.0, -0.9805807), v: Vec3A(-0.1271232, 0.991561, -0.02542464), lens_radius: 0.05, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: None +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 640, height: 360, region: PixelRect { x0: 0, y0: 0, x1: 640, y1: 360 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: -2, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: None, depth_of_field: true, motion_blur: false, layer_stack: ["$DIR/no_camera.usda"], invisible_overrides: Some(0) } +layer: $DIR/no_camera.usda +warning: Warning { code: CameraMissing, kind: Skipped, count: 1, prims: [], message: "USD stage has no UsdGeomCamera — falling back to world::get_settings camera" } +lights: 0 +volumes: 0 +world: 1 geometries, PrimitiveBreakdown { triangles: 0, spheres: 1, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 0, spheres: 1, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:fb1e7d48790aec95 camera=1:fb1e7d48790aec95 shadow=1:fb1e7d48790aec95 indirect=1:fb1e7d48790aec95 +provenance geometry 0..1: /S +provenance spheres: [0] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: Some(-1.5), camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: None, cameras: [], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: None, offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/no_camera_usda-ac160dc389201eeb-1.image b/crates/crust-core/tests/data/import_baselines/no_camera_usda-ac160dc389201eeb-1.image new file mode 100644 index 000000000..c734c5b1d --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/no_camera_usda-ac160dc389201eeb-1.image @@ -0,0 +1 @@ +640x360 16spp clamp-off a04a09c0d4b5e325 diff --git a/crates/crust-core/tests/data/import_baselines/no_camera_usda-af24412e492e9147-1.digest b/crates/crust-core/tests/data/import_baselines/no_camera_usda-af24412e492e9147-1.digest new file mode 100644 index 000000000..a19baac4b --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/no_camera_usda-af24412e492e9147-1.digest @@ -0,0 +1,17 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: None +camera: Camera { origin: Vec3A(15.0, 3.0, 3.0), lower_left_corner: Vec3A(4.8863316, -0.044797063, 4.174048), horizontal: Vec3A(1.2295314, 0.0, -6.147657), vertical: Vec3A(-0.44830504, 3.4967792, -0.08966101), u: Vec3A(0.19611613, 0.0, -0.9805807), v: Vec3A(-0.1271232, 0.991561, -0.02542464), lens_radius: 0.05, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: None +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 640, height: 360, region: PixelRect { x0: 0, y0: 0, x1: 640, y1: 360 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: None, depth_of_field: true, motion_blur: false, layer_stack: ["$DIR/no_camera.usda"], invisible_overrides: Some(0) } +layer: $DIR/no_camera.usda +warning: Warning { code: CameraMissing, kind: Skipped, count: 1, prims: [], message: "USD stage has no UsdGeomCamera — falling back to world::get_settings camera" } +lights: 0 +volumes: 0 +world: 0 geometries, PrimitiveBreakdown { triangles: 0, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 0, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: None, cameras: [], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: None, offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/no_camera_usda-af24412e492e9147-1.image b/crates/crust-core/tests/data/import_baselines/no_camera_usda-af24412e492e9147-1.image new file mode 100644 index 000000000..c734c5b1d --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/no_camera_usda-af24412e492e9147-1.image @@ -0,0 +1 @@ +640x360 16spp clamp-off a04a09c0d4b5e325 diff --git a/crates/crust-core/tests/data/import_baselines/no_camera_usda-f2e322198f5a52d6-1.digest b/crates/crust-core/tests/data/import_baselines/no_camera_usda-f2e322198f5a52d6-1.digest new file mode 100644 index 000000000..3f102c6c6 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/no_camera_usda-f2e322198f5a52d6-1.digest @@ -0,0 +1,19 @@ +time: Some(10.5) +working space: Linear Rec.709 (sRGB) +camera path: None +camera: Camera { origin: Vec3A(15.0, 3.0, 3.0), lower_left_corner: Vec3A(4.8863316, -0.044797063, 4.174048), horizontal: Vec3A(1.2295314, 0.0, -6.147657), vertical: Vec3A(-0.44830504, 3.4967792, -0.08966101), u: Vec3A(0.19611613, 0.0, -0.9805807), v: Vec3A(-0.1271232, 0.991561, -0.02542464), lens_radius: 0.05, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: None +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 640, height: 360, region: PixelRect { x0: 0, y0: 0, x1: 640, y1: 360 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 10, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: None, depth_of_field: true, motion_blur: false, layer_stack: ["$DIR/no_camera.usda"], invisible_overrides: Some(0) } +layer: $DIR/no_camera.usda +warning: Warning { code: CameraMissing, kind: Skipped, count: 1, prims: [], message: "USD stage has no UsdGeomCamera — falling back to world::get_settings camera" } +lights: 0 +volumes: 0 +world: 1 geometries, PrimitiveBreakdown { triangles: 0, spheres: 1, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 0, spheres: 1, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:fb1e7d48790aec95 camera=1:fb1e7d48790aec95 shadow=1:fb1e7d48790aec95 indirect=1:fb1e7d48790aec95 +provenance geometry 0..1: /S +provenance spheres: [0] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: Some(10.5), camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: None, cameras: [], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: None, offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/no_camera_usda-f2e322198f5a52d6-1.image b/crates/crust-core/tests/data/import_baselines/no_camera_usda-f2e322198f5a52d6-1.image new file mode 100644 index 000000000..c734c5b1d --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/no_camera_usda-f2e322198f5a52d6-1.image @@ -0,0 +1 @@ +640x360 16spp clamp-off a04a09c0d4b5e325 diff --git a/crates/crust-core/tests/data/import_baselines/no_frame_usda-06c9736b1ee41555-1.digest b/crates/crust-core/tests/data/import_baselines/no_frame_usda-06c9736b1ee41555-1.digest new file mode 100644 index 000000000..ea49767ea --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/no_frame_usda-06c9736b1ee41555-1.digest @@ -0,0 +1,25 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/World/cam") +camera: Camera { origin: Vec3A(0.0, 0.0, 8.0), lower_left_corner: Vec3A(-2.7183647, -1.5290802, -2.0), horizontal: Vec3A(5.4367294, 0.0, 0.0), vertical: Vec3A(0.0, 3.0581603, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: Some("/Render/settings") +settings: RenderSettings { samples_per_pixel: 16, max_depth: 2, width: 64, height: 36, region: PixelRect { x0: 0, y0: 0, x1: 64, y1: 36 }, min_samples_per_pixel: 16, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 50.0, aperture: [20.955, 15.2908], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 10.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/no_frame.usda"], invisible_overrides: Some(0) } +layer: $DIR/no_frame.usda +warning: Warning { code: TimeMotionNeedsFrame, kind: Skipped, count: 1, prims: ["/World/B"], message: "/World/cam opens its shutter (0 .. 0.5), but no frame was given: 2 drawn prims' time-sampled transforms are not evaluated over it and render sharp (the first at /World/B). Render a frame with -f" } +lights: 0 +volumes: 0 +world: 2 geometries, PrimitiveBreakdown { triangles: 0, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 2 } top level, PrimitiveBreakdown { triangles: 2, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 2 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:c4f12a34a7ba856d camera=2:c4f12a34a7ba856d shadow=2:c4f12a34a7ba856d indirect=2:c4f12a34a7ba856d +geom 1: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:c4f12a34a7ba856d camera=2:c4f12a34a7ba856d shadow=2:c4f12a34a7ba856d indirect=2:c4f12a34a7ba856d +provenance material /World/Glow: MaterialOrigin { slots: [0, 1], displaced: false } +provenance geometry 0..1: /World/B +provenance geometry 1..2: /World/A +provenance mesh: MeshOrigin { geom_id: 0, slot: 0, baked: false, moving: false } +provenance mesh: MeshOrigin { geom_id: 1, slot: 0, baked: false, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 18250419415378433236, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 0 }), placements: 2, shared: false, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/World/cam"), cameras: ["/World/cam"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/World/cam"), offsets: [0, 4602678819172646912], interval: None, query: true, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/no_frame_usda-06c9736b1ee41555-1.image b/crates/crust-core/tests/data/import_baselines/no_frame_usda-06c9736b1ee41555-1.image new file mode 100644 index 000000000..d0b251e8d --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/no_frame_usda-06c9736b1ee41555-1.image @@ -0,0 +1 @@ +64x36 16spp clamp-off 47afa48051e8e7f6 diff --git a/crates/crust-core/tests/data/import_baselines/no_kernel_usda-250e185a51aff6c5-1.digest b/crates/crust-core/tests/data/import_baselines/no_kernel_usda-250e185a51aff6c5-1.digest new file mode 100644 index 000000000..4af6ead9d --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/no_kernel_usda-250e185a51aff6c5-1.digest @@ -0,0 +1,28 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/World/cam") +camera: Camera { origin: Vec3A(0.0, 0.0, 0.0), lower_left_corner: Vec3A(-5.0, -3.75, -10.0), horizontal: Vec3A(10.0, 0.0, 0.0), vertical: Vec3A(0.0, 7.5, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: Some("/Render/settings") +settings: RenderSettings { samples_per_pixel: 16, max_depth: 2, width: 32, height: 24, region: PixelRect { x0: 0, y0: 0, x1: 32, y1: 24 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [AovProduct { prim_path: "/Render/p", name: "p.exr", vars: [AovVar { prim_path: "/Render/C", name: "C", channel_prefix: None, source: Color, components: 3, precision: Float, accumulation: Filtered, clear: 0.0, expression: None, raw: false, variance: false }, AovVar { prim_path: "/Render/matte", name: "matte", channel_prefix: None, source: Primvar(PrimvarSource { index: 0, components: 1, role: Float }), components: 1, precision: Float, accumulation: Filtered, clear: 0.0, expression: None, raw: false, variance: false }, AovVar { prim_path: "/Render/depth", name: "depth", channel_prefix: None, source: Depth, components: 1, precision: Float, accumulation: Closest, clear: inf, expression: None, raw: false, variance: false }, AovVar { prim_path: "/Render/depth_filtered", name: "depth_filtered", channel_prefix: None, source: Depth, components: 1, precision: Float, accumulation: Filtered, clear: inf, expression: None, raw: false, variance: false }, AovVar { prim_path: "/Render/variance", name: "variance", channel_prefix: None, source: Variance, components: 1, precision: Float, accumulation: Filtered, clear: 0.0, expression: None, raw: false, variance: false }, AovVar { prim_path: "/Render/soft_out", name: "soft_out", channel_prefix: None, source: Filter(FilterSource { display: true, filter: 0, output: 0, components: 1, radiance: false }), components: 1, precision: Float, accumulation: Filtered, clear: 0.0, expression: None, raw: false, variance: false }], attributes: [] }], precomp: Some(Precomp { sample_filters: [], display_filters: ["/Render/soft"], display: "beauty" }) } +pass: None +source: Source { lens: Some(Lens { focal_length: 24.0, aperture: [24.0, 18.0], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 10.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/no_kernel.usda"], invisible_overrides: Some(0) } +layer: $DIR/no_kernel.usda +warning: Warning { code: AssetUnsupportedByHost, kind: Skipped, count: 1, prims: [], message: "Asset loader does not decode light textures: $DIR/box.exr ignored — the light emits its uniform colour." } +warning: Warning { code: PrecompMissingKernel, kind: Skipped, count: 1, prims: ["/Render/soft"], message: "/Render/soft: kernel $DIR/box.exr could not be read; the filter passes its input through" } +lights: 1 +light 0: dome name Some("/World/sky") lpe None pmf 1.0 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 2 geometries, PrimitiveBreakdown { triangles: 4, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 4, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov Some((Some(0), false)) swapped false curves false scale 1.0 motion [] pieces all=2:2a13523c8e09c13d camera=2:2a13523c8e09c13d shadow=2:2a13523c8e09c13d indirect=2:2a13523c8e09c13d +geom 1: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:31db52e4afd4a225 camera=2:31db52e4afd4a225 shadow=2:31db52e4afd4a225 indirect=2:31db52e4afd4a225 +provenance light /World/sky: LightOrigin { index: 0, geoms: 0..0 } +provenance geometry 0..1: /World/Card +provenance geometry 1..2: /World/Wall +provenance mesh: MeshOrigin { geom_id: 0, slot: 0, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 1, slot: 1, baked: true, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 3430351340666728903, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 1: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 13118596165941616386, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: true, working: None, camera: Some("/World/cam"), cameras: ["/World/cam"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [("matte", 1)], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/World/cam"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/no_kernel_usda-250e185a51aff6c5-1.image b/crates/crust-core/tests/data/import_baselines/no_kernel_usda-250e185a51aff6c5-1.image new file mode 100644 index 000000000..f08c49d36 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/no_kernel_usda-250e185a51aff6c5-1.image @@ -0,0 +1 @@ +32x24 16spp clamp-off e72b7b7cff87e77d diff --git a/crates/crust-core/tests/data/import_baselines/no_products_usda-b2f39aa3f795faa2-1.digest b/crates/crust-core/tests/data/import_baselines/no_products_usda-b2f39aa3f795faa2-1.digest new file mode 100644 index 000000000..e8f0f0c84 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/no_products_usda-b2f39aa3f795faa2-1.digest @@ -0,0 +1,18 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/World/other") +camera: Camera { origin: Vec3A(0.0, 0.0, 0.0), lower_left_corner: Vec3A(-2.7183647, -1.5290802, -10.0), horizontal: Vec3A(5.4367294, 0.0, 0.0), vertical: Vec3A(0.0, 3.0581603, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: Some("/Render/settings") +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 64, height: 36, region: PixelRect { x0: 0, y0: 0, x1: 64, y1: 36 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 50.0, aperture: [20.955, 15.2908], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 10.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/no_products.usda"], invisible_overrides: Some(0) } +layer: $DIR/no_products.usda +lights: 0 +volumes: 0 +world: 1 geometries, PrimitiveBreakdown { triangles: 0, spheres: 1, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 0, spheres: 1, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:fb1e7d48790aec95 camera=1:fb1e7d48790aec95 shadow=1:fb1e7d48790aec95 indirect=1:fb1e7d48790aec95 +provenance geometry 0..1: /World/ball +provenance spheres: [0] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/World/other"), cameras: ["/World/other", "/World/cam"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/World/other"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/no_products_usda-b2f39aa3f795faa2-1.image b/crates/crust-core/tests/data/import_baselines/no_products_usda-b2f39aa3f795faa2-1.image new file mode 100644 index 000000000..f4ebc1648 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/no_products_usda-b2f39aa3f795faa2-1.image @@ -0,0 +1 @@ +64x36 16spp clamp-off 1028d44458cc9325 diff --git a/crates/crust-core/tests/data/import_baselines/no_var_authored_usda-7c630c4e6b264297-1.digest b/crates/crust-core/tests/data/import_baselines/no_var_authored_usda-7c630c4e6b264297-1.digest new file mode 100644 index 000000000..e8e49cb5d --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/no_var_authored_usda-7c630c4e6b264297-1.digest @@ -0,0 +1,24 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/World/cam") +camera: Camera { origin: Vec3A(0.0, 0.0, 10.0), lower_left_corner: Vec3A(-2.0955, -1.5716249, 0.0), horizontal: Vec3A(4.191, 0.0, 0.0), vertical: Vec3A(0.0, 3.1432498, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: Some("/Render/settings") +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 48, height: 36, region: PixelRect { x0: 0, y0: 0, x1: 48, y1: 36 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [AovProduct { prim_path: "/Render/p", name: "p.exr", vars: [AovVar { prim_path: "/Render/P", name: "P", channel_prefix: None, source: P, components: 3, precision: Float, accumulation: Closest, clear: 0.0, expression: None, raw: false, variance: false }, AovVar { prim_path: "/Render/depth", name: "depth", channel_prefix: None, source: Depth, components: 1, precision: Float, accumulation: Closest, clear: inf, expression: None, raw: false, variance: false }, AovVar { prim_path: "/Render/N", name: "N", channel_prefix: None, source: Normal, components: 3, precision: Float, accumulation: Filtered, clear: 0.0, expression: None, raw: false, variance: false }], attributes: [] }], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 50.0, aperture: [20.955, 15.2908], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 10.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/no_var_authored.usda"], invisible_overrides: Some(0) } +layer: $DIR/no_var_authored.usda +lights: 1 +light 0: dome name Some("/World/dome") lpe None pmf 1.0 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 2 geometries, PrimitiveBreakdown { triangles: 2, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 1 } top level, PrimitiveBreakdown { triangles: 2, spheres: 0, disks: 0, cylinders: 0, curve_segments: 1, cubic_curve_spans: 0, instances: 1 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: Some((false, false, [])), primvars: None } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves true scale 1.0 motion [] pieces all=1:a8881b13d8325a63 camera=1:a8881b13d8325a63 shadow=1:a8881b13d8325a63 indirect=1:a8881b13d8325a63 +geom 1: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:32f1a52c797bfee5 camera=2:32f1a52c797bfee5 shadow=2:32f1a52c797bfee5 indirect=2:32f1a52c797bfee5 +provenance light /World/dome: LightOrigin { index: 0, geoms: 2..2 } +provenance geometry 0..1: /World/hair +provenance geometry 1..2: /World/mesh +provenance mesh: MeshOrigin { geom_id: 1, slot: 0, baked: true, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 14414187199170096052, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/World/cam"), cameras: ["/World/cam"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/World/cam"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/no_var_authored_usda-7c630c4e6b264297-1.image b/crates/crust-core/tests/data/import_baselines/no_var_authored_usda-7c630c4e6b264297-1.image new file mode 100644 index 000000000..6e17c7cc4 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/no_var_authored_usda-7c630c4e6b264297-1.image @@ -0,0 +1 @@ +48x36 16spp clamp-off b92ef83454fdd3cb diff --git a/crates/crust-core/tests/data/import_baselines/no_var_bare_usda-0f6834e5d7411efd-1.digest b/crates/crust-core/tests/data/import_baselines/no_var_bare_usda-0f6834e5d7411efd-1.digest new file mode 100644 index 000000000..f3b8c01a3 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/no_var_bare_usda-0f6834e5d7411efd-1.digest @@ -0,0 +1,24 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/World/cam") +camera: Camera { origin: Vec3A(0.0, 0.0, 10.0), lower_left_corner: Vec3A(-2.0955, -1.5716249, 0.0), horizontal: Vec3A(4.191, 0.0, 0.0), vertical: Vec3A(0.0, 3.1432498, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: Some("/Render/settings") +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 48, height: 36, region: PixelRect { x0: 0, y0: 0, x1: 48, y1: 36 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [AovProduct { prim_path: "/Render/p", name: "p.exr", vars: [AovVar { prim_path: "/Render/P", name: "P", channel_prefix: None, source: P, components: 3, precision: Float, accumulation: Closest, clear: 0.0, expression: None, raw: false, variance: false }, AovVar { prim_path: "/Render/depth", name: "depth", channel_prefix: None, source: Depth, components: 1, precision: Float, accumulation: Closest, clear: inf, expression: None, raw: false, variance: false }, AovVar { prim_path: "/Render/N", name: "N", channel_prefix: None, source: Normal, components: 3, precision: Float, accumulation: Filtered, clear: 0.0, expression: None, raw: false, variance: false }], attributes: [] }], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 50.0, aperture: [20.955, 15.2908], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 10.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/no_var_bare.usda"], invisible_overrides: Some(0) } +layer: $DIR/no_var_bare.usda +lights: 1 +light 0: dome name Some("/World/dome") lpe None pmf 1.0 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 2 geometries, PrimitiveBreakdown { triangles: 2, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 1 } top level, PrimitiveBreakdown { triangles: 2, spheres: 0, disks: 0, cylinders: 0, curve_segments: 1, cubic_curve_spans: 0, instances: 1 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: Some((false, false, [])), primvars: None } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves true scale 1.0 motion [] pieces all=1:a8881b13d8325a63 camera=1:a8881b13d8325a63 shadow=1:a8881b13d8325a63 indirect=1:a8881b13d8325a63 +geom 1: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:32f1a52c797bfee5 camera=2:32f1a52c797bfee5 shadow=2:32f1a52c797bfee5 indirect=2:32f1a52c797bfee5 +provenance light /World/dome: LightOrigin { index: 0, geoms: 2..2 } +provenance geometry 0..1: /World/hair +provenance geometry 1..2: /World/mesh +provenance mesh: MeshOrigin { geom_id: 1, slot: 0, baked: true, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 14414187199170096052, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/World/cam"), cameras: ["/World/cam"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/World/cam"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/no_var_bare_usda-0f6834e5d7411efd-1.image b/crates/crust-core/tests/data/import_baselines/no_var_bare_usda-0f6834e5d7411efd-1.image new file mode 100644 index 000000000..6e17c7cc4 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/no_var_bare_usda-0f6834e5d7411efd-1.image @@ -0,0 +1 @@ +48x36 16spp clamp-off b92ef83454fdd3cb diff --git a/crates/crust-core/tests/data/import_baselines/non_finite_usda-b38223b4cd532638-1.digest b/crates/crust-core/tests/data/import_baselines/non_finite_usda-b38223b4cd532638-1.digest new file mode 100644 index 000000000..7ed742b50 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/non_finite_usda-b38223b4cd532638-1.digest @@ -0,0 +1,28 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/World/Cam") +camera: Camera { origin: Vec3A(0.0, 5.0, 6.0), lower_left_corner: Vec3A(-2.0000002, -2.9376645, -0.40261602), horizontal: Vec3A(4.0000005, -0.0, 0.0), vertical: Vec3A(0.0, 3.0731347, -2.560439), u: Vec3A(1.0, -0.0, 0.0), v: Vec3A(0.0, 0.76828355, -0.6401097), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: Some("/Render/settings") +settings: RenderSettings { samples_per_pixel: 16, max_depth: 2, width: 16, height: 16, region: PixelRect { x0: 0, y0: 0, x1: 16, y1: 16 }, min_samples_per_pixel: 16, variance_threshold: 0.0, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: None, light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 50.0, aperture: [20.0, 20.0], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 10.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/non_finite.usda"], invisible_overrides: Some(0) } +layer: $DIR/non_finite.usda +warning: Warning { code: LightNonFiniteInput, kind: Refused, count: 2, prims: ["/World/Sun", "/World/Key"], message: "/World/Sun: inputs:diffuse = NaN is not finite — using its fallback 1" } +lights: 2 +light 0: distant name Some("/World/Sun") lpe None pmf 0.5 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 0.5 } +light 1: area name Some("/World/Key") lpe None pmf 0.5 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 0.5 } +volumes: 0 +world: 2 geometries, PrimitiveBreakdown { triangles: 2, spheres: 1, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 2, spheres: 1, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +geom 0: material #0 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:ca080854f0bf27b5 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=1:ca080854f0bf27b5 +geom 1: material #1 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:fce6de5b675a55c5 camera=2:fce6de5b675a55c5 shadow=2:fce6de5b675a55c5 indirect=2:fce6de5b675a55c5 +provenance material /World/M: MaterialOrigin { slots: [1], displaced: false } +provenance light /World/Key: LightOrigin { index: 1, geoms: 0..1 } +provenance light /World/Sun: LightOrigin { index: 0, geoms: 0..0 } +provenance geometry 0..1: /World/Key +provenance geometry 1..2: /World/Floor +provenance mesh: MeshOrigin { geom_id: 1, slot: 0, baked: true, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 14903623499644419787, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/World/Cam"), cameras: ["/World/Cam"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/World/Cam"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/non_finite_usda-b38223b4cd532638-1.image b/crates/crust-core/tests/data/import_baselines/non_finite_usda-b38223b4cd532638-1.image new file mode 100644 index 000000000..0e9e829cc --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/non_finite_usda-b38223b4cd532638-1.image @@ -0,0 +1 @@ +16x16 16spp clamp-off 2c1e65f91e5a3148 diff --git a/crates/crust-core/tests/data/import_baselines/none_usda-3500dce365c976fb-1.digest b/crates/crust-core/tests/data/import_baselines/none_usda-3500dce365c976fb-1.digest new file mode 100644 index 000000000..abf15f078 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/none_usda-3500dce365c976fb-1.digest @@ -0,0 +1,26 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/World/cam") +camera: Camera { origin: Vec3A(0.0, 0.0, 0.0), lower_left_corner: Vec3A(-5.0, -3.75, -10.0), horizontal: Vec3A(10.0, 0.0, 0.0), vertical: Vec3A(0.0, 7.5, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: Some("/Render/settings") +settings: RenderSettings { samples_per_pixel: 16, max_depth: 2, width: 32, height: 24, region: PixelRect { x0: 0, y0: 0, x1: 32, y1: 24 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [AovProduct { prim_path: "/Render/p", name: "p.exr", vars: [AovVar { prim_path: "/Render/C", name: "C", channel_prefix: None, source: Color, components: 3, precision: Float, accumulation: Filtered, clear: 0.0, expression: None, raw: false, variance: false }, AovVar { prim_path: "/Render/matte", name: "matte", channel_prefix: None, source: Primvar(PrimvarSource { index: 0, components: 1, role: Float }), components: 1, precision: Float, accumulation: Filtered, clear: 0.0, expression: None, raw: false, variance: false }, AovVar { prim_path: "/Render/depth", name: "depth", channel_prefix: None, source: Depth, components: 1, precision: Float, accumulation: Closest, clear: inf, expression: None, raw: false, variance: false }, AovVar { prim_path: "/Render/depth_filtered", name: "depth_filtered", channel_prefix: None, source: Depth, components: 1, precision: Float, accumulation: Filtered, clear: inf, expression: None, raw: false, variance: false }, AovVar { prim_path: "/Render/variance", name: "variance", channel_prefix: None, source: Variance, components: 1, precision: Float, accumulation: Filtered, clear: 0.0, expression: None, raw: false, variance: false }], attributes: [] }], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 24.0, aperture: [24.0, 18.0], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 10.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/none.usda"], invisible_overrides: Some(0) } +layer: $DIR/none.usda +lights: 1 +light 0: dome name Some("/World/sky") lpe None pmf 1.0 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 2 geometries, PrimitiveBreakdown { triangles: 4, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 4, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov Some((Some(0), false)) swapped false curves false scale 1.0 motion [] pieces all=2:2a13523c8e09c13d camera=2:2a13523c8e09c13d shadow=2:2a13523c8e09c13d indirect=2:2a13523c8e09c13d +geom 1: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:31db52e4afd4a225 camera=2:31db52e4afd4a225 shadow=2:31db52e4afd4a225 indirect=2:31db52e4afd4a225 +provenance light /World/sky: LightOrigin { index: 0, geoms: 0..0 } +provenance geometry 0..1: /World/Card +provenance geometry 1..2: /World/Wall +provenance mesh: MeshOrigin { geom_id: 0, slot: 0, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 1, slot: 1, baked: true, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 3430351340666728903, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 1: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 13118596165941616386, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/World/cam"), cameras: ["/World/cam"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [("matte", 1)], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/World/cam"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/none_usda-3500dce365c976fb-1.image b/crates/crust-core/tests/data/import_baselines/none_usda-3500dce365c976fb-1.image new file mode 100644 index 000000000..f08c49d36 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/none_usda-3500dce365c976fb-1.image @@ -0,0 +1 @@ +32x24 16spp clamp-off e72b7b7cff87e77d diff --git a/crates/crust-core/tests/data/import_baselines/none_usda-8ca1039ef6a1af13-1.digest b/crates/crust-core/tests/data/import_baselines/none_usda-8ca1039ef6a1af13-1.digest new file mode 100644 index 000000000..20bc46597 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/none_usda-8ca1039ef6a1af13-1.digest @@ -0,0 +1,23 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: None +camera: Camera { origin: Vec3A(15.0, 3.0, 3.0), lower_left_corner: Vec3A(4.8863316, -0.044797063, 4.174048), horizontal: Vec3A(1.2295314, 0.0, -6.147657), vertical: Vec3A(-0.44830504, 3.4967792, -0.08966101), u: Vec3A(0.19611613, 0.0, -0.9805807), v: Vec3A(-0.1271232, 0.991561, -0.02542464), lens_radius: 0.05, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: None +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 640, height: 360, region: PixelRect { x0: 0, y0: 0, x1: 640, y1: 360 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: None, depth_of_field: true, motion_blur: false, layer_stack: ["$DIR/none.usda"], invisible_overrides: Some(0) } +layer: $DIR/none.usda +warning: Warning { code: CameraMissing, kind: Skipped, count: 1, prims: [], message: "USD stage has no UsdGeomCamera — falling back to world::get_settings camera" } +lights: 2 +light 0: dome name Some("/World/Sky") lpe None pmf 0.5 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 1: area name Some("/World/Visible") lpe None pmf 0.5 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 1 geometries, PrimitiveBreakdown { triangles: 0, spheres: 1, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 0, spheres: 1, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +geom 0: material #0 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:984632b55acb5495 camera=1:984632b55acb5495 shadow=1:984632b55acb5495 indirect=1:984632b55acb5495 +provenance light /World/Sky: LightOrigin { index: 0, geoms: 0..0 } +provenance light /World/Visible: LightOrigin { index: 1, geoms: 0..1 } +provenance geometry 0..1: /World/Visible +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: None, cameras: [], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: None, offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/none_usda-8ca1039ef6a1af13-1.image b/crates/crust-core/tests/data/import_baselines/none_usda-8ca1039ef6a1af13-1.image new file mode 100644 index 000000000..b1fb14759 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/none_usda-8ca1039ef6a1af13-1.image @@ -0,0 +1 @@ +640x360 16spp clamp-off 1e3a61612e840325 diff --git a/crates/crust-core/tests/data/import_baselines/none_usda-b2626a5c29f30d06-1.digest b/crates/crust-core/tests/data/import_baselines/none_usda-b2626a5c29f30d06-1.digest new file mode 100644 index 000000000..ce0cfb8f3 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/none_usda-b2626a5c29f30d06-1.digest @@ -0,0 +1,16 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/cam") +camera: Camera { origin: Vec3A(0.0, 0.0, 0.0), lower_left_corner: Vec3A(-2.7183647, -1.5290802, -10.0), horizontal: Vec3A(5.4367294, 0.0, 0.0), vertical: Vec3A(0.0, 3.0581603, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: None +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 640, height: 360, region: PixelRect { x0: 0, y0: 0, x1: 640, y1: 360 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 50.0, aperture: [20.955, 15.2908], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 10.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/none.usda"], invisible_overrides: Some(0) } +layer: $DIR/none.usda +lights: 0 +volumes: 0 +world: 0 geometries, PrimitiveBreakdown { triangles: 0, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 0, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/cam"), cameras: ["/cam"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/cam"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/none_usda-b2626a5c29f30d06-1.image b/crates/crust-core/tests/data/import_baselines/none_usda-b2626a5c29f30d06-1.image new file mode 100644 index 000000000..c734c5b1d --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/none_usda-b2626a5c29f30d06-1.image @@ -0,0 +1 @@ +640x360 16spp clamp-off a04a09c0d4b5e325 diff --git a/crates/crust-core/tests/data/import_baselines/norm_off_cylinder_usda-cad3a8a0bec58113-1.digest b/crates/crust-core/tests/data/import_baselines/norm_off_cylinder_usda-cad3a8a0bec58113-1.digest new file mode 100644 index 000000000..45ddaebb5 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/norm_off_cylinder_usda-cad3a8a0bec58113-1.digest @@ -0,0 +1,21 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: None +camera: Camera { origin: Vec3A(15.0, 3.0, 3.0), lower_left_corner: Vec3A(4.8863316, -0.044797063, 4.174048), horizontal: Vec3A(1.2295314, 0.0, -6.147657), vertical: Vec3A(-0.44830504, 3.4967792, -0.08966101), u: Vec3A(0.19611613, 0.0, -0.9805807), v: Vec3A(-0.1271232, 0.991561, -0.02542464), lens_radius: 0.05, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: None +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 640, height: 360, region: PixelRect { x0: 0, y0: 0, x1: 640, y1: 360 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: None, depth_of_field: true, motion_blur: false, layer_stack: ["$DIR/norm_off_cylinder.usda"], invisible_overrides: Some(0) } +layer: $DIR/norm_off_cylinder.usda +warning: Warning { code: CameraMissing, kind: Skipped, count: 1, prims: [], message: "USD stage has no UsdGeomCamera — falling back to world::get_settings camera" } +lights: 1 +light 0: area name Some("/World/L") lpe None pmf 1.0 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 1 geometries, PrimitiveBreakdown { triangles: 0, spheres: 0, disks: 0, cylinders: 1, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 0, spheres: 0, disks: 0, cylinders: 1, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +geom 0: material #0 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:3db6d4a460330f95 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=1:3db6d4a460330f95 +provenance light /World/L: LightOrigin { index: 0, geoms: 0..1 } +provenance geometry 0..1: /World/L +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: None, cameras: [], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: None, offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/norm_off_cylinder_usda-cad3a8a0bec58113-1.image b/crates/crust-core/tests/data/import_baselines/norm_off_cylinder_usda-cad3a8a0bec58113-1.image new file mode 100644 index 000000000..c734c5b1d --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/norm_off_cylinder_usda-cad3a8a0bec58113-1.image @@ -0,0 +1 @@ +640x360 16spp clamp-off a04a09c0d4b5e325 diff --git a/crates/crust-core/tests/data/import_baselines/norm_off_disk_usda-d4ac49b171982a5d-1.digest b/crates/crust-core/tests/data/import_baselines/norm_off_disk_usda-d4ac49b171982a5d-1.digest new file mode 100644 index 000000000..0c70ab7e0 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/norm_off_disk_usda-d4ac49b171982a5d-1.digest @@ -0,0 +1,21 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: None +camera: Camera { origin: Vec3A(15.0, 3.0, 3.0), lower_left_corner: Vec3A(4.8863316, -0.044797063, 4.174048), horizontal: Vec3A(1.2295314, 0.0, -6.147657), vertical: Vec3A(-0.44830504, 3.4967792, -0.08966101), u: Vec3A(0.19611613, 0.0, -0.9805807), v: Vec3A(-0.1271232, 0.991561, -0.02542464), lens_radius: 0.05, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: None +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 640, height: 360, region: PixelRect { x0: 0, y0: 0, x1: 640, y1: 360 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: None, depth_of_field: true, motion_blur: false, layer_stack: ["$DIR/norm_off_disk.usda"], invisible_overrides: Some(0) } +layer: $DIR/norm_off_disk.usda +warning: Warning { code: CameraMissing, kind: Skipped, count: 1, prims: [], message: "USD stage has no UsdGeomCamera — falling back to world::get_settings camera" } +lights: 1 +light 0: area name Some("/World/L") lpe None pmf 1.0 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 1 geometries, PrimitiveBreakdown { triangles: 0, spheres: 0, disks: 1, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 0, spheres: 0, disks: 1, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +geom 0: material #0 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:81f922b1ea201c01 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=1:81f922b1ea201c01 +provenance light /World/L: LightOrigin { index: 0, geoms: 0..1 } +provenance geometry 0..1: /World/L +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: None, cameras: [], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: None, offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/norm_off_disk_usda-d4ac49b171982a5d-1.image b/crates/crust-core/tests/data/import_baselines/norm_off_disk_usda-d4ac49b171982a5d-1.image new file mode 100644 index 000000000..c734c5b1d --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/norm_off_disk_usda-d4ac49b171982a5d-1.image @@ -0,0 +1 @@ +640x360 16spp clamp-off a04a09c0d4b5e325 diff --git a/crates/crust-core/tests/data/import_baselines/norm_off_rect_usda-7ca0616652c56bb1-1.digest b/crates/crust-core/tests/data/import_baselines/norm_off_rect_usda-7ca0616652c56bb1-1.digest new file mode 100644 index 000000000..9cbbcf5d4 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/norm_off_rect_usda-7ca0616652c56bb1-1.digest @@ -0,0 +1,21 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: None +camera: Camera { origin: Vec3A(15.0, 3.0, 3.0), lower_left_corner: Vec3A(4.8863316, -0.044797063, 4.174048), horizontal: Vec3A(1.2295314, 0.0, -6.147657), vertical: Vec3A(-0.44830504, 3.4967792, -0.08966101), u: Vec3A(0.19611613, 0.0, -0.9805807), v: Vec3A(-0.1271232, 0.991561, -0.02542464), lens_radius: 0.05, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: None +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 640, height: 360, region: PixelRect { x0: 0, y0: 0, x1: 640, y1: 360 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: None, depth_of_field: true, motion_blur: false, layer_stack: ["$DIR/norm_off_rect.usda"], invisible_overrides: Some(0) } +layer: $DIR/norm_off_rect.usda +warning: Warning { code: CameraMissing, kind: Skipped, count: 1, prims: [], message: "USD stage has no UsdGeomCamera — falling back to world::get_settings camera" } +lights: 1 +light 0: area name Some("/World/L") lpe None pmf 1.0 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 1 geometries, PrimitiveBreakdown { triangles: 2, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 2, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +geom 0: material #0 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:342c2dd553aadcf5 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=2:342c2dd553aadcf5 +provenance light /World/L: LightOrigin { index: 0, geoms: 0..1 } +provenance geometry 0..1: /World/L +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: None, cameras: [], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: None, offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/norm_off_rect_usda-7ca0616652c56bb1-1.image b/crates/crust-core/tests/data/import_baselines/norm_off_rect_usda-7ca0616652c56bb1-1.image new file mode 100644 index 000000000..c734c5b1d --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/norm_off_rect_usda-7ca0616652c56bb1-1.image @@ -0,0 +1 @@ +640x360 16spp clamp-off a04a09c0d4b5e325 diff --git a/crates/crust-core/tests/data/import_baselines/norm_off_sphere_usda-0abd6bba11da485f-1.digest b/crates/crust-core/tests/data/import_baselines/norm_off_sphere_usda-0abd6bba11da485f-1.digest new file mode 100644 index 000000000..c1f20dec2 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/norm_off_sphere_usda-0abd6bba11da485f-1.digest @@ -0,0 +1,21 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: None +camera: Camera { origin: Vec3A(15.0, 3.0, 3.0), lower_left_corner: Vec3A(4.8863316, -0.044797063, 4.174048), horizontal: Vec3A(1.2295314, 0.0, -6.147657), vertical: Vec3A(-0.44830504, 3.4967792, -0.08966101), u: Vec3A(0.19611613, 0.0, -0.9805807), v: Vec3A(-0.1271232, 0.991561, -0.02542464), lens_radius: 0.05, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: None +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 640, height: 360, region: PixelRect { x0: 0, y0: 0, x1: 640, y1: 360 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: None, depth_of_field: true, motion_blur: false, layer_stack: ["$DIR/norm_off_sphere.usda"], invisible_overrides: Some(0) } +layer: $DIR/norm_off_sphere.usda +warning: Warning { code: CameraMissing, kind: Skipped, count: 1, prims: [], message: "USD stage has no UsdGeomCamera — falling back to world::get_settings camera" } +lights: 1 +light 0: area name Some("/World/L") lpe None pmf 1.0 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 1 geometries, PrimitiveBreakdown { triangles: 0, spheres: 1, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 0, spheres: 1, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +geom 0: material #0 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:fb1e7d48790aec95 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=1:fb1e7d48790aec95 +provenance light /World/L: LightOrigin { index: 0, geoms: 0..1 } +provenance geometry 0..1: /World/L +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: None, cameras: [], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: None, offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/norm_off_sphere_usda-0abd6bba11da485f-1.image b/crates/crust-core/tests/data/import_baselines/norm_off_sphere_usda-0abd6bba11da485f-1.image new file mode 100644 index 000000000..c734c5b1d --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/norm_off_sphere_usda-0abd6bba11da485f-1.image @@ -0,0 +1 @@ +640x360 16spp clamp-off a04a09c0d4b5e325 diff --git a/crates/crust-core/tests/data/import_baselines/norm_on_cylinder_usda-f3dd54fd2e0d1929-1.digest b/crates/crust-core/tests/data/import_baselines/norm_on_cylinder_usda-f3dd54fd2e0d1929-1.digest new file mode 100644 index 000000000..baca84e02 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/norm_on_cylinder_usda-f3dd54fd2e0d1929-1.digest @@ -0,0 +1,21 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: None +camera: Camera { origin: Vec3A(15.0, 3.0, 3.0), lower_left_corner: Vec3A(4.8863316, -0.044797063, 4.174048), horizontal: Vec3A(1.2295314, 0.0, -6.147657), vertical: Vec3A(-0.44830504, 3.4967792, -0.08966101), u: Vec3A(0.19611613, 0.0, -0.9805807), v: Vec3A(-0.1271232, 0.991561, -0.02542464), lens_radius: 0.05, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: None +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 640, height: 360, region: PixelRect { x0: 0, y0: 0, x1: 640, y1: 360 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: None, depth_of_field: true, motion_blur: false, layer_stack: ["$DIR/norm_on_cylinder.usda"], invisible_overrides: Some(0) } +layer: $DIR/norm_on_cylinder.usda +warning: Warning { code: CameraMissing, kind: Skipped, count: 1, prims: [], message: "USD stage has no UsdGeomCamera — falling back to world::get_settings camera" } +lights: 1 +light 0: area name Some("/World/L") lpe None pmf 1.0 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 1 geometries, PrimitiveBreakdown { triangles: 0, spheres: 0, disks: 0, cylinders: 1, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 0, spheres: 0, disks: 0, cylinders: 1, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +geom 0: material #0 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:3db6d4a460330f95 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=1:3db6d4a460330f95 +provenance light /World/L: LightOrigin { index: 0, geoms: 0..1 } +provenance geometry 0..1: /World/L +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: None, cameras: [], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: None, offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/norm_on_cylinder_usda-f3dd54fd2e0d1929-1.image b/crates/crust-core/tests/data/import_baselines/norm_on_cylinder_usda-f3dd54fd2e0d1929-1.image new file mode 100644 index 000000000..c734c5b1d --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/norm_on_cylinder_usda-f3dd54fd2e0d1929-1.image @@ -0,0 +1 @@ +640x360 16spp clamp-off a04a09c0d4b5e325 diff --git a/crates/crust-core/tests/data/import_baselines/norm_on_disk_usda-80da988892a29bff-1.digest b/crates/crust-core/tests/data/import_baselines/norm_on_disk_usda-80da988892a29bff-1.digest new file mode 100644 index 000000000..e4aea7c10 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/norm_on_disk_usda-80da988892a29bff-1.digest @@ -0,0 +1,21 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: None +camera: Camera { origin: Vec3A(15.0, 3.0, 3.0), lower_left_corner: Vec3A(4.8863316, -0.044797063, 4.174048), horizontal: Vec3A(1.2295314, 0.0, -6.147657), vertical: Vec3A(-0.44830504, 3.4967792, -0.08966101), u: Vec3A(0.19611613, 0.0, -0.9805807), v: Vec3A(-0.1271232, 0.991561, -0.02542464), lens_radius: 0.05, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: None +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 640, height: 360, region: PixelRect { x0: 0, y0: 0, x1: 640, y1: 360 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: None, depth_of_field: true, motion_blur: false, layer_stack: ["$DIR/norm_on_disk.usda"], invisible_overrides: Some(0) } +layer: $DIR/norm_on_disk.usda +warning: Warning { code: CameraMissing, kind: Skipped, count: 1, prims: [], message: "USD stage has no UsdGeomCamera — falling back to world::get_settings camera" } +lights: 1 +light 0: area name Some("/World/L") lpe None pmf 1.0 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 1 geometries, PrimitiveBreakdown { triangles: 0, spheres: 0, disks: 1, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 0, spheres: 0, disks: 1, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +geom 0: material #0 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:81f922b1ea201c01 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=1:81f922b1ea201c01 +provenance light /World/L: LightOrigin { index: 0, geoms: 0..1 } +provenance geometry 0..1: /World/L +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: None, cameras: [], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: None, offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/norm_on_disk_usda-80da988892a29bff-1.image b/crates/crust-core/tests/data/import_baselines/norm_on_disk_usda-80da988892a29bff-1.image new file mode 100644 index 000000000..c734c5b1d --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/norm_on_disk_usda-80da988892a29bff-1.image @@ -0,0 +1 @@ +640x360 16spp clamp-off a04a09c0d4b5e325 diff --git a/crates/crust-core/tests/data/import_baselines/norm_on_rect_usda-0fb0cae5dd5fa17f-1.digest b/crates/crust-core/tests/data/import_baselines/norm_on_rect_usda-0fb0cae5dd5fa17f-1.digest new file mode 100644 index 000000000..710edf5d5 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/norm_on_rect_usda-0fb0cae5dd5fa17f-1.digest @@ -0,0 +1,21 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: None +camera: Camera { origin: Vec3A(15.0, 3.0, 3.0), lower_left_corner: Vec3A(4.8863316, -0.044797063, 4.174048), horizontal: Vec3A(1.2295314, 0.0, -6.147657), vertical: Vec3A(-0.44830504, 3.4967792, -0.08966101), u: Vec3A(0.19611613, 0.0, -0.9805807), v: Vec3A(-0.1271232, 0.991561, -0.02542464), lens_radius: 0.05, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: None +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 640, height: 360, region: PixelRect { x0: 0, y0: 0, x1: 640, y1: 360 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: None, depth_of_field: true, motion_blur: false, layer_stack: ["$DIR/norm_on_rect.usda"], invisible_overrides: Some(0) } +layer: $DIR/norm_on_rect.usda +warning: Warning { code: CameraMissing, kind: Skipped, count: 1, prims: [], message: "USD stage has no UsdGeomCamera — falling back to world::get_settings camera" } +lights: 1 +light 0: area name Some("/World/L") lpe None pmf 1.0 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 1 geometries, PrimitiveBreakdown { triangles: 2, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 2, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +geom 0: material #0 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:342c2dd553aadcf5 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=2:342c2dd553aadcf5 +provenance light /World/L: LightOrigin { index: 0, geoms: 0..1 } +provenance geometry 0..1: /World/L +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: None, cameras: [], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: None, offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/norm_on_rect_usda-0fb0cae5dd5fa17f-1.image b/crates/crust-core/tests/data/import_baselines/norm_on_rect_usda-0fb0cae5dd5fa17f-1.image new file mode 100644 index 000000000..c734c5b1d --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/norm_on_rect_usda-0fb0cae5dd5fa17f-1.image @@ -0,0 +1 @@ +640x360 16spp clamp-off a04a09c0d4b5e325 diff --git a/crates/crust-core/tests/data/import_baselines/norm_on_sphere_usda-a4e34a4e4682e3b5-1.digest b/crates/crust-core/tests/data/import_baselines/norm_on_sphere_usda-a4e34a4e4682e3b5-1.digest new file mode 100644 index 000000000..d1712bdfc --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/norm_on_sphere_usda-a4e34a4e4682e3b5-1.digest @@ -0,0 +1,21 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: None +camera: Camera { origin: Vec3A(15.0, 3.0, 3.0), lower_left_corner: Vec3A(4.8863316, -0.044797063, 4.174048), horizontal: Vec3A(1.2295314, 0.0, -6.147657), vertical: Vec3A(-0.44830504, 3.4967792, -0.08966101), u: Vec3A(0.19611613, 0.0, -0.9805807), v: Vec3A(-0.1271232, 0.991561, -0.02542464), lens_radius: 0.05, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: None +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 640, height: 360, region: PixelRect { x0: 0, y0: 0, x1: 640, y1: 360 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: None, depth_of_field: true, motion_blur: false, layer_stack: ["$DIR/norm_on_sphere.usda"], invisible_overrides: Some(0) } +layer: $DIR/norm_on_sphere.usda +warning: Warning { code: CameraMissing, kind: Skipped, count: 1, prims: [], message: "USD stage has no UsdGeomCamera — falling back to world::get_settings camera" } +lights: 1 +light 0: area name Some("/World/L") lpe None pmf 1.0 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 1 geometries, PrimitiveBreakdown { triangles: 0, spheres: 1, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 0, spheres: 1, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +geom 0: material #0 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:fb1e7d48790aec95 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=1:fb1e7d48790aec95 +provenance light /World/L: LightOrigin { index: 0, geoms: 0..1 } +provenance geometry 0..1: /World/L +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: None, cameras: [], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: None, offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/norm_on_sphere_usda-a4e34a4e4682e3b5-1.image b/crates/crust-core/tests/data/import_baselines/norm_on_sphere_usda-a4e34a4e4682e3b5-1.image new file mode 100644 index 000000000..c734c5b1d --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/norm_on_sphere_usda-a4e34a4e4682e3b5-1.image @@ -0,0 +1 @@ +640x360 16spp clamp-off a04a09c0d4b5e325 diff --git a/crates/crust-core/tests/data/import_baselines/normals_usda-eb98f1adc17331b3-1.digest b/crates/crust-core/tests/data/import_baselines/normals_usda-eb98f1adc17331b3-1.digest new file mode 100644 index 000000000..eb6187f62 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/normals_usda-eb98f1adc17331b3-1.digest @@ -0,0 +1,25 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: None +camera: Camera { origin: Vec3A(15.0, 3.0, 3.0), lower_left_corner: Vec3A(4.8863316, -0.044797063, 4.174048), horizontal: Vec3A(1.2295314, 0.0, -6.147657), vertical: Vec3A(-0.44830504, 3.4967792, -0.08966101), u: Vec3A(0.19611613, 0.0, -0.9805807), v: Vec3A(-0.1271232, 0.991561, -0.02542464), lens_radius: 0.05, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: None +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 640, height: 360, region: PixelRect { x0: 0, y0: 0, x1: 640, y1: 360 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: None, depth_of_field: true, motion_blur: false, layer_stack: ["$DIR/normals.usda"], invisible_overrides: Some(0) } +layer: $DIR/normals.usda +warning: Warning { code: CameraMissing, kind: Skipped, count: 1, prims: [], message: "USD stage has no UsdGeomCamera — falling back to world::get_settings camera" } +lights: 0 +volumes: 0 +world: 2 geometries, PrimitiveBreakdown { triangles: 14, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 14, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=12:967434bbd75361e5 camera=12:967434bbd75361e5 shadow=12:967434bbd75361e5 indirect=12:967434bbd75361e5 +geom 1: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:df2430fa56f27b69 camera=2:df2430fa56f27b69 shadow=2:df2430fa56f27b69 indirect=2:df2430fa56f27b69 +provenance geometry 0..1: /World/box/geo +provenance geometry 1..2: /World/slope +provenance mesh: MeshOrigin { geom_id: 0, slot: 0, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 1, slot: 1, baked: true, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 2634041098053373584, n_points: 8, n_indices: 24, n_uvs: None, smooth: true, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 1: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 1313731086437247865, n_points: 4, n_indices: 4, n_uvs: None, smooth: true, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: None, cameras: [], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: None, offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/normals_usda-eb98f1adc17331b3-1.image b/crates/crust-core/tests/data/import_baselines/normals_usda-eb98f1adc17331b3-1.image new file mode 100644 index 000000000..c734c5b1d --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/normals_usda-eb98f1adc17331b3-1.image @@ -0,0 +1 @@ +640x360 16spp clamp-off a04a09c0d4b5e325 diff --git a/crates/crust-core/tests/data/import_baselines/nothing_usda-05a76e84b550abac-1.digest b/crates/crust-core/tests/data/import_baselines/nothing_usda-05a76e84b550abac-1.digest new file mode 100644 index 000000000..78df2de92 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/nothing_usda-05a76e84b550abac-1.digest @@ -0,0 +1,30 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/World/Cam") +camera: Camera { origin: Vec3A(0.0, 1.2, 6.0), lower_left_corner: Vec3A(-5.6632595, -1.9855835, -4.0), horizontal: Vec3A(11.326519, 0.0, 0.0), vertical: Vec3A(0.0, 6.371167, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: Some("/Render/settings") +settings: RenderSettings { samples_per_pixel: 4, max_depth: 4, width: 32, height: 18, region: PixelRect { x0: 0, y0: 0, x1: 32, y1: 18 }, min_samples_per_pixel: 8, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [AovProduct { prim_path: "/Render/Products/beauty", name: "renders/aovs_beauty.exr", vars: [AovVar { prim_path: "/Render/Products/Vars/C", name: "C", channel_prefix: None, source: Color, components: 4, precision: Float, accumulation: Filtered, clear: 0.0, expression: None, raw: false, variance: false }, AovVar { prim_path: "/Render/Products/Vars/sampleCount", name: "sampleCount", channel_prefix: None, source: SampleCount, components: 1, precision: Float, accumulation: Filtered, clear: 0.0, expression: None, raw: false, variance: false }, AovVar { prim_path: "/Render/Products/Vars/variance", name: "variance", channel_prefix: None, source: Variance, components: 1, precision: Float, accumulation: Filtered, clear: 0.0, expression: None, raw: false, variance: false }], attributes: [("artist", "crust samples")] }, AovProduct { prim_path: "/Render/Products/data", name: "renders/aovs_data.exr", vars: [AovVar { prim_path: "/Render/Products/Vars/Z", name: "Z", channel_prefix: None, source: Depth, components: 1, precision: Float, accumulation: Closest, clear: inf, expression: None, raw: false, variance: false }, AovVar { prim_path: "/Render/Products/Vars/distance", name: "distance", channel_prefix: None, source: Distance, components: 1, precision: Float, accumulation: Closest, clear: inf, expression: None, raw: false, variance: false }, AovVar { prim_path: "/Render/Products/Vars/P", name: "P", channel_prefix: None, source: P, components: 3, precision: Float, accumulation: Closest, clear: 0.0, expression: None, raw: false, variance: false }, AovVar { prim_path: "/Render/Products/Vars/Peye", name: "Peye", channel_prefix: None, source: Peye, components: 3, precision: Float, accumulation: Closest, clear: 0.0, expression: None, raw: false, variance: false }, AovVar { prim_path: "/Render/Products/Vars/N", name: "N", channel_prefix: None, source: Normal, components: 3, precision: Half, accumulation: Filtered, clear: 0.0, expression: None, raw: false, variance: false }, AovVar { prim_path: "/Render/Products/Vars/Neye", name: "Neye", channel_prefix: None, source: Neye, components: 3, precision: Float, accumulation: Filtered, clear: 0.0, expression: None, raw: false, variance: false }, AovVar { prim_path: "/Render/Products/Vars/st", name: "st", channel_prefix: None, source: St, components: 2, precision: Float, accumulation: Filtered, clear: 0.0, expression: None, raw: false, variance: false }, AovVar { prim_path: "/Render/Products/Vars/alpha", name: "alpha", channel_prefix: None, source: Alpha, components: 1, precision: Float, accumulation: Filtered, clear: 0.0, expression: None, raw: false, variance: false }], attributes: [] }], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 24.0, aperture: [20.955, 15.2908], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 10.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/nothing.usda", "$ROOT/samples/aovs.usda"], invisible_overrides: Some(0) } +layer: $ROOT/samples/aovs.usda +layer: $DIR/nothing.usda +warning: Warning { code: AovUnknownSource, kind: Skipped, count: 1, prims: ["/Render/Products/Vars/diffuse_direct"], message: "/Render/Products/Vars/diffuse_direct: unknown raw source \"diffuse_direct\"; no channel written (crust's AOV names are listed in the user documentation, usd/aovs)" } +lights: 2 +light 0: dome name Some("/World/Sky") lpe None pmf 0.5 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 1: area name Some("/World/KeyLight") lpe None pmf 0.5 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 3 geometries, PrimitiveBreakdown { triangles: 4, spheres: 1, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 4, spheres: 1, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +geom 0: material #0 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:e8a5ea9ee1d32838 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=2:e8a5ea9ee1d32838 +geom 1: material #1 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:cadf82024fa5b745 camera=2:cadf82024fa5b745 shadow=2:cadf82024fa5b745 indirect=2:cadf82024fa5b745 +geom 2: material #1 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:ee76fd7ed45c4a85 camera=1:ee76fd7ed45c4a85 shadow=1:ee76fd7ed45c4a85 indirect=1:ee76fd7ed45c4a85 +provenance light /World/KeyLight: LightOrigin { index: 1, geoms: 0..1 } +provenance light /World/Sky: LightOrigin { index: 0, geoms: 0..0 } +provenance geometry 0..1: /World/KeyLight +provenance geometry 1..2: /World/Floor +provenance geometry 2..3: /World/Ball +provenance mesh: MeshOrigin { geom_id: 1, slot: 0, baked: true, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 12300483381263303556, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [2] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: true }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/World/Cam"), cameras: ["/World/Cam"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/World/Cam"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/nothing_usda-05a76e84b550abac-1.image b/crates/crust-core/tests/data/import_baselines/nothing_usda-05a76e84b550abac-1.image new file mode 100644 index 000000000..e5718bb57 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/nothing_usda-05a76e84b550abac-1.image @@ -0,0 +1 @@ +32x18 16spp clamp-off ddf40d7a272e6781 diff --git a/crates/crust-core/tests/data/import_baselines/nurbs_clean_usda-362cea70cf67e6cc-1.digest b/crates/crust-core/tests/data/import_baselines/nurbs_clean_usda-362cea70cf67e6cc-1.digest new file mode 100644 index 000000000..4df7f1569 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/nurbs_clean_usda-362cea70cf67e6cc-1.digest @@ -0,0 +1,18 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/World/cam") +camera: Camera { origin: Vec3A(0.0, 0.0, 0.0), lower_left_corner: Vec3A(-2.7183647, -1.5290802, -10.0), horizontal: Vec3A(5.4367294, 0.0, 0.0), vertical: Vec3A(0.0, 3.0581603, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: None +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 640, height: 360, region: PixelRect { x0: 0, y0: 0, x1: 640, y1: 360 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 50.0, aperture: [20.955, 15.2908], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 10.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/nurbs_clean.usda"], invisible_overrides: Some(0) } +layer: $DIR/nurbs_clean.usda +lights: 0 +volumes: 0 +world: 1 geometries, PrimitiveBreakdown { triangles: 0, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 1 } top level, PrimitiveBreakdown { triangles: 0, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 2, instances: 1 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: Some((false, false, [])), primvars: None } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves true scale 1.0 motion [] pieces all=2:fc096693f908fa55 camera=2:fc096693f908fa55 shadow=2:fc096693f908fa55 indirect=2:fc096693f908fa55 +provenance geometry 0..1: /World/whisker +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/World/cam"), cameras: ["/World/cam"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/World/cam"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/nurbs_clean_usda-362cea70cf67e6cc-1.image b/crates/crust-core/tests/data/import_baselines/nurbs_clean_usda-362cea70cf67e6cc-1.image new file mode 100644 index 000000000..c734c5b1d --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/nurbs_clean_usda-362cea70cf67e6cc-1.image @@ -0,0 +1 @@ +640x360 16spp clamp-off a04a09c0d4b5e325 diff --git a/crates/crust-core/tests/data/import_baselines/nurbs_empty_usda-af6c06cf5e078823-1.digest b/crates/crust-core/tests/data/import_baselines/nurbs_empty_usda-af6c06cf5e078823-1.digest new file mode 100644 index 000000000..2f9db850c --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/nurbs_empty_usda-af6c06cf5e078823-1.digest @@ -0,0 +1,17 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: None +camera: Camera { origin: Vec3A(15.0, 3.0, 3.0), lower_left_corner: Vec3A(4.8863316, -0.044797063, 4.174048), horizontal: Vec3A(1.2295314, 0.0, -6.147657), vertical: Vec3A(-0.44830504, 3.4967792, -0.08966101), u: Vec3A(0.19611613, 0.0, -0.9805807), v: Vec3A(-0.1271232, 0.991561, -0.02542464), lens_radius: 0.05, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: None +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 640, height: 360, region: PixelRect { x0: 0, y0: 0, x1: 640, y1: 360 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: None, depth_of_field: true, motion_blur: false, layer_stack: ["$DIR/nurbs_empty.usda"], invisible_overrides: Some(0) } +layer: $DIR/nurbs_empty.usda +warning: Warning { code: CameraMissing, kind: Skipped, count: 1, prims: [], message: "USD stage has no UsdGeomCamera — falling back to world::get_settings camera" } +lights: 0 +volumes: 0 +world: 0 geometries, PrimitiveBreakdown { triangles: 0, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 0, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: None, cameras: [], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: None, offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/nurbs_empty_usda-af6c06cf5e078823-1.image b/crates/crust-core/tests/data/import_baselines/nurbs_empty_usda-af6c06cf5e078823-1.image new file mode 100644 index 000000000..c734c5b1d --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/nurbs_empty_usda-af6c06cf5e078823-1.image @@ -0,0 +1 @@ +640x360 16spp clamp-off a04a09c0d4b5e325 diff --git a/crates/crust-core/tests/data/import_baselines/nurbs_full_usda-ee811943aa635f36-1.digest b/crates/crust-core/tests/data/import_baselines/nurbs_full_usda-ee811943aa635f36-1.digest new file mode 100644 index 000000000..8bf8429ab --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/nurbs_full_usda-ee811943aa635f36-1.digest @@ -0,0 +1,19 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: None +camera: Camera { origin: Vec3A(15.0, 3.0, 3.0), lower_left_corner: Vec3A(4.8863316, -0.044797063, 4.174048), horizontal: Vec3A(1.2295314, 0.0, -6.147657), vertical: Vec3A(-0.44830504, 3.4967792, -0.08966101), u: Vec3A(0.19611613, 0.0, -0.9805807), v: Vec3A(-0.1271232, 0.991561, -0.02542464), lens_radius: 0.05, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: None +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 640, height: 360, region: PixelRect { x0: 0, y0: 0, x1: 640, y1: 360 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: None, depth_of_field: true, motion_blur: false, layer_stack: ["$DIR/nurbs_full.usda"], invisible_overrides: Some(0) } +layer: $DIR/nurbs_full.usda +warning: Warning { code: CameraMissing, kind: Skipped, count: 1, prims: [], message: "USD stage has no UsdGeomCamera — falling back to world::get_settings camera" } +lights: 0 +volumes: 0 +world: 1 geometries, PrimitiveBreakdown { triangles: 0, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 1 } top level, PrimitiveBreakdown { triangles: 0, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 1, instances: 1 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: Some((false, false, [])), primvars: None } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves true scale 1.0 motion [] pieces all=1:54eca4df97173997 camera=1:54eca4df97173997 shadow=1:54eca4df97173997 indirect=1:54eca4df97173997 +provenance geometry 0..1: /W/C +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: None, cameras: [], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: None, offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/nurbs_full_usda-ee811943aa635f36-1.image b/crates/crust-core/tests/data/import_baselines/nurbs_full_usda-ee811943aa635f36-1.image new file mode 100644 index 000000000..c734c5b1d --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/nurbs_full_usda-ee811943aa635f36-1.image @@ -0,0 +1 @@ +640x360 16spp clamp-off a04a09c0d4b5e325 diff --git a/crates/crust-core/tests/data/import_baselines/nurbs_half_usda-26730abe8461e1ee-1.digest b/crates/crust-core/tests/data/import_baselines/nurbs_half_usda-26730abe8461e1ee-1.digest new file mode 100644 index 000000000..099dcec54 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/nurbs_half_usda-26730abe8461e1ee-1.digest @@ -0,0 +1,19 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: None +camera: Camera { origin: Vec3A(15.0, 3.0, 3.0), lower_left_corner: Vec3A(4.8863316, -0.044797063, 4.174048), horizontal: Vec3A(1.2295314, 0.0, -6.147657), vertical: Vec3A(-0.44830504, 3.4967792, -0.08966101), u: Vec3A(0.19611613, 0.0, -0.9805807), v: Vec3A(-0.1271232, 0.991561, -0.02542464), lens_radius: 0.05, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: None +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 640, height: 360, region: PixelRect { x0: 0, y0: 0, x1: 640, y1: 360 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: None, depth_of_field: true, motion_blur: false, layer_stack: ["$DIR/nurbs_half.usda"], invisible_overrides: Some(0) } +layer: $DIR/nurbs_half.usda +warning: Warning { code: CameraMissing, kind: Skipped, count: 1, prims: [], message: "USD stage has no UsdGeomCamera — falling back to world::get_settings camera" } +lights: 0 +volumes: 0 +world: 1 geometries, PrimitiveBreakdown { triangles: 0, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 1 } top level, PrimitiveBreakdown { triangles: 0, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 1, instances: 1 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: Some((false, false, [])), primvars: None } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves true scale 1.0 motion [] pieces all=1:7ed1a101867109a6 camera=1:7ed1a101867109a6 shadow=1:7ed1a101867109a6 indirect=1:7ed1a101867109a6 +provenance geometry 0..1: /W/C +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: None, cameras: [], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: None, offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/nurbs_half_usda-26730abe8461e1ee-1.image b/crates/crust-core/tests/data/import_baselines/nurbs_half_usda-26730abe8461e1ee-1.image new file mode 100644 index 000000000..c734c5b1d --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/nurbs_half_usda-26730abe8461e1ee-1.image @@ -0,0 +1 @@ +640x360 16spp clamp-off a04a09c0d4b5e325 diff --git a/crates/crust-core/tests/data/import_baselines/nurbs_malformed_usda-edaffca17525a0db-1.digest b/crates/crust-core/tests/data/import_baselines/nurbs_malformed_usda-edaffca17525a0db-1.digest new file mode 100644 index 000000000..35b5e335a --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/nurbs_malformed_usda-edaffca17525a0db-1.digest @@ -0,0 +1,22 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/World/cam") +camera: Camera { origin: Vec3A(0.0, 0.0, 0.0), lower_left_corner: Vec3A(-2.7183647, -1.5290802, -10.0), horizontal: Vec3A(5.4367294, 0.0, 0.0), vertical: Vec3A(0.0, 3.0581603, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: None +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 640, height: 360, region: PixelRect { x0: 0, y0: 0, x1: 640, y1: 360 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 50.0, aperture: [20.955, 15.2908], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 10.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/nurbs_malformed.usda"], invisible_overrides: Some(0) } +layer: $DIR/nurbs_malformed.usda +warning: Warning { code: CurvesInvalidKnots, kind: Skipped, count: 1, prims: ["/World/negative_count"], message: "NurbsCurves at /World/negative_count: 2 curves need one non-negative order each and count + order knots each (2 orders, 8 knots authored, 8 expected) — skipped" } +warning: Warning { code: CurvesRationalApproximated, kind: Approximated, count: 1, prims: ["/World/zero_weights"], message: "NurbsCurves at /World/zero_weights: pointWeights must be positive and finite — ignored, the curves are read as non-rational" } +lights: 0 +volumes: 0 +world: 2 geometries, PrimitiveBreakdown { triangles: 0, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 2 } top level, PrimitiveBreakdown { triangles: 0, spheres: 0, disks: 0, cylinders: 0, curve_segments: 2, cubic_curve_spans: 0, instances: 2 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: Some((false, false, [])), primvars: None } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves true scale 1.0 motion [] pieces all=1:a0d9e6d7e8386dc5 camera=1:a0d9e6d7e8386dc5 shadow=1:a0d9e6d7e8386dc5 indirect=1:a0d9e6d7e8386dc5 +geom 1: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: Some((false, false, [])), primvars: None } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves true scale 1.0 motion [] pieces all=1:a0d9e6d7e8386dc5 camera=1:a0d9e6d7e8386dc5 shadow=1:a0d9e6d7e8386dc5 indirect=1:a0d9e6d7e8386dc5 +provenance geometry 0..1: /World/zero_weights +provenance geometry 1..2: /World/basis_no_widths +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/World/cam"), cameras: ["/World/cam"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/World/cam"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/nurbs_malformed_usda-edaffca17525a0db-1.image b/crates/crust-core/tests/data/import_baselines/nurbs_malformed_usda-edaffca17525a0db-1.image new file mode 100644 index 000000000..c734c5b1d --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/nurbs_malformed_usda-edaffca17525a0db-1.image @@ -0,0 +1 @@ +640x360 16spp clamp-off a04a09c0d4b5e325 diff --git a/crates/crust-core/tests/data/import_baselines/nurbs_refused_usda-2cd12f986b06b3a5-1.digest b/crates/crust-core/tests/data/import_baselines/nurbs_refused_usda-2cd12f986b06b3a5-1.digest new file mode 100644 index 000000000..d9ffd62c3 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/nurbs_refused_usda-2cd12f986b06b3a5-1.digest @@ -0,0 +1,21 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/World/cam") +camera: Camera { origin: Vec3A(0.0, 0.0, 0.0), lower_left_corner: Vec3A(-2.7183647, -1.5290802, -10.0), horizontal: Vec3A(5.4367294, 0.0, 0.0), vertical: Vec3A(0.0, 3.0581603, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: None +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 640, height: 360, region: PixelRect { x0: 0, y0: 0, x1: 640, y1: 360 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 50.0, aperture: [20.955, 15.2908], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 10.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/nurbs_refused.usda"], invisible_overrides: Some(0) } +layer: $DIR/nurbs_refused.usda +warning: Warning { code: CurvesUnsupportedOrder, kind: Skipped, count: 1, prims: ["/World/quintic"], message: "NurbsCurves at /World/quintic: order 5 is not supported (2 | 3 | 4) — those curves skipped" } +warning: Warning { code: CurvesInvalidKnots, kind: Skipped, count: 1, prims: ["/World/short_knots"], message: "NurbsCurves at /World/short_knots: 1 curves need one non-negative order each and count + order knots each (1 orders, 6 knots authored, 8 expected) — skipped" } +warning: Warning { code: CurvesRationalApproximated, kind: Approximated, count: 1, prims: ["/World/rational"], message: "NurbsCurves at /World/rational: unequal pointWeights — the rational curves are approximated by polynomial spans" } +lights: 0 +volumes: 0 +world: 1 geometries, PrimitiveBreakdown { triangles: 0, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 1 } top level, PrimitiveBreakdown { triangles: 0, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 1, instances: 1 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: Some((false, false, [])), primvars: None } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves true scale 1.0 motion [] pieces all=1:fe32cba2116e1795 camera=1:fe32cba2116e1795 shadow=1:fe32cba2116e1795 indirect=1:fe32cba2116e1795 +provenance geometry 0..1: /World/rational +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/World/cam"), cameras: ["/World/cam"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/World/cam"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/nurbs_refused_usda-2cd12f986b06b3a5-1.image b/crates/crust-core/tests/data/import_baselines/nurbs_refused_usda-2cd12f986b06b3a5-1.image new file mode 100644 index 000000000..c734c5b1d --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/nurbs_refused_usda-2cd12f986b06b3a5-1.image @@ -0,0 +1 @@ +640x360 16spp clamp-off a04a09c0d4b5e325 diff --git a/crates/crust-core/tests/data/import_baselines/on_camera_usda-0e1653405c0b04b8-1.digest b/crates/crust-core/tests/data/import_baselines/on_camera_usda-0e1653405c0b04b8-1.digest new file mode 100644 index 000000000..5322d352c --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/on_camera_usda-0e1653405c0b04b8-1.digest @@ -0,0 +1,30 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/World/Cam") +camera: Camera { origin: Vec3A(0.0, 2.3, 8.5), lower_left_corner: Vec3A(-4.4023113, -1.5620966, -1.0554943), horizontal: Vec3A(8.804623, -0.0, 0.0), vertical: Vec3A(0.0, 4.9407306, -0.6943745), u: Vec3A(1.0, -0.0, 0.0), v: Vec3A(0.0, 0.9902681, -0.13917312), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: Some("/Render/settings") +settings: RenderSettings { samples_per_pixel: 32, max_depth: 8, width: 240, height: 136, region: PixelRect { x0: 0, y0: 0, x1: 240, y1: 136 }, min_samples_per_pixel: 16, variance_threshold: 0.02, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 28.0, aperture: [20.955, 13.97], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 10.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/on_camera.usda", "$ROOT/samples/dome_backdrop.usda"], invisible_overrides: Some(0) } +layer: $ROOT/samples/dome_backdrop.usda +layer: $DIR/on_camera.usda +lights: 1 +light 0: dome name Some("/World/Hdri") lpe None pmf 1.0 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 3 geometries, PrimitiveBreakdown { triangles: 2, spheres: 2, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 2, spheres: 2, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:f6fecef7f865e305 camera=2:f6fecef7f865e305 shadow=2:f6fecef7f865e305 indirect=2:f6fecef7f865e305 +geom 1: material #1 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:571f57a6ae5dd002 camera=1:571f57a6ae5dd002 shadow=1:571f57a6ae5dd002 indirect=1:571f57a6ae5dd002 +geom 2: material #2 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:bb4ca329e9417ce2 camera=1:bb4ca329e9417ce2 shadow=1:bb4ca329e9417ce2 indirect=1:bb4ca329e9417ce2 +provenance material /World/Looks/Clay: MaterialOrigin { slots: [1], displaced: false } +provenance material /World/Looks/Ground: MaterialOrigin { slots: [0], displaced: false } +provenance material /World/Looks/Mirror: MaterialOrigin { slots: [2], displaced: false } +provenance light /World/Hdri: LightOrigin { index: 0, geoms: 3..3 } +provenance geometry 0..1: /World/Floor +provenance geometry 1..2: /World/Matte +provenance geometry 2..3: /World/Mirror +provenance mesh: MeshOrigin { geom_id: 0, slot: 0, baked: true, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 10492340787237780741, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [1, 2] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/World/Cam"), cameras: ["/World/Cam"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/World/Cam"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/on_camera_usda-0e1653405c0b04b8-1.image b/crates/crust-core/tests/data/import_baselines/on_camera_usda-0e1653405c0b04b8-1.image new file mode 100644 index 000000000..9b1ded9a0 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/on_camera_usda-0e1653405c0b04b8-1.image @@ -0,0 +1 @@ +240x136 16spp clamp-off 2a2ae02b81d14fd2 diff --git a/crates/crust-core/tests/data/import_baselines/once_direct_usda-87536582b2725522-1.digest b/crates/crust-core/tests/data/import_baselines/once_direct_usda-87536582b2725522-1.digest new file mode 100644 index 000000000..e608d7949 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/once_direct_usda-87536582b2725522-1.digest @@ -0,0 +1,20 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/W/Cam") +camera: Camera { origin: Vec3A(0.0, 0.0, 0.0), lower_left_corner: Vec3A(-2.0955, -1.1787187, -10.0), horizontal: Vec3A(4.191, 0.0, 0.0), vertical: Vec3A(0.0, 2.3574374, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: Some("/Render/settings") +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 640, height: 360, region: PixelRect { x0: 0, y0: 0, x1: 640, y1: 360 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 50.0, aperture: [20.955, 11.787188], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 10.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/once_direct.usda"], invisible_overrides: Some(0) } +layer: $DIR/once_direct.usda +lights: 0 +volumes: 0 +world: 1 geometries, PrimitiveBreakdown { triangles: 768, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 768, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=768:bb9aeaae01563c51 camera=768:bb9aeaae01563c51 shadow=768:bb9aeaae01563c51 indirect=768:bb9aeaae01563c51 +provenance geometry 0..1: /W/Box +provenance mesh: MeshOrigin { geom_id: 0, slot: 0, baked: true, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 13487480004083563611, n_points: 386, n_indices: 2304, n_uvs: None, smooth: true, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: Some(ScreenKey([0, 0, 0, 1153360542, 0, 0, 0, 3212836864, 0, 3193345094, 1065353216, 0, 3193345094, 0, 3212836864, 3186714319, 0, 1065353216, 3186714319, 0, 0, 3212836864, 1073741824, 3])), domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/W/Cam"), cameras: ["/W/Cam"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/W/Cam"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/once_direct_usda-87536582b2725522-1.image b/crates/crust-core/tests/data/import_baselines/once_direct_usda-87536582b2725522-1.image new file mode 100644 index 000000000..c734c5b1d --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/once_direct_usda-87536582b2725522-1.image @@ -0,0 +1 @@ +640x360 16spp clamp-off a04a09c0d4b5e325 diff --git a/crates/crust-core/tests/data/import_baselines/once_instanced_usda-cfe757ff670cf1a4-1.digest b/crates/crust-core/tests/data/import_baselines/once_instanced_usda-cfe757ff670cf1a4-1.digest new file mode 100644 index 000000000..7200f2114 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/once_instanced_usda-cfe757ff670cf1a4-1.digest @@ -0,0 +1,19 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/W/Cam") +camera: Camera { origin: Vec3A(0.0, 0.0, 0.0), lower_left_corner: Vec3A(-2.0955, -1.1787187, -10.0), horizontal: Vec3A(4.191, 0.0, 0.0), vertical: Vec3A(0.0, 2.3574374, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: Some("/Render/settings") +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 640, height: 360, region: PixelRect { x0: 0, y0: 0, x1: 640, y1: 360 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 50.0, aperture: [20.955, 11.787188], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 10.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/once_instanced.usda"], invisible_overrides: Some(0) } +layer: $DIR/once_instanced.usda +lights: 0 +volumes: 0 +world: 1 geometries, PrimitiveBreakdown { triangles: 0, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 1 } top level, PrimitiveBreakdown { triangles: 768, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 1 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=768:bb9aeaae01563c51 camera=768:bb9aeaae01563c51 shadow=768:bb9aeaae01563c51 indirect=768:bb9aeaae01563c51 +provenance geometry 0..1: /W/Placed +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 13487480004083563611, n_points: 386, n_indices: 2304, n_uvs: None, smooth: true, material: 0 }), placements: 0, shared: true, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: Some(ScreenKey([0, 0, 0, 1153360542, 0, 0, 0, 3212836864, 0, 3193345094, 1065353216, 0, 3193345094, 0, 3212836864, 3186714319, 0, 1065353216, 3186714319, 0, 0, 3212836864, 1073741824, 3])), domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/W/Cam"), cameras: ["/W/Cam"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/W/Cam"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/once_instanced_usda-cfe757ff670cf1a4-1.image b/crates/crust-core/tests/data/import_baselines/once_instanced_usda-cfe757ff670cf1a4-1.image new file mode 100644 index 000000000..c734c5b1d --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/once_instanced_usda-cfe757ff670cf1a4-1.image @@ -0,0 +1 @@ +640x360 16spp clamp-off a04a09c0d4b5e325 diff --git a/crates/crust-core/tests/data/import_baselines/opacity_usda-18ffcc13eb92677a-1.digest b/crates/crust-core/tests/data/import_baselines/opacity_usda-18ffcc13eb92677a-1.digest new file mode 100644 index 000000000..d6ed2b93f --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/opacity_usda-18ffcc13eb92677a-1.digest @@ -0,0 +1,47 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: None +camera: Camera { origin: Vec3A(15.0, 3.0, 3.0), lower_left_corner: Vec3A(4.8863316, -0.044797063, 4.174048), horizontal: Vec3A(1.2295314, 0.0, -6.147657), vertical: Vec3A(-0.44830504, 3.4967792, -0.08966101), u: Vec3A(0.19611613, 0.0, -0.9805807), v: Vec3A(-0.1271232, 0.991561, -0.02542464), lens_radius: 0.05, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: None +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 640, height: 360, region: PixelRect { x0: 0, y0: 0, x1: 640, y1: 360 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: None, depth_of_field: true, motion_blur: false, layer_stack: ["$DIR/opacity.usda"], invisible_overrides: Some(0) } +layer: $DIR/opacity.usda +warning: Warning { code: CameraMissing, kind: Skipped, count: 1, prims: [], message: "USD stage has no UsdGeomCamera — falling back to world::get_settings camera" } +lights: 0 +volumes: 0 +world: 6 geometries, PrimitiveBreakdown { triangles: 12, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 12, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +geom 0: material #0 Signature { kind: "UsdPreviewSurface (textured)", cutout: true, straight: false, boundary: false, emits: false, uv: true, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv Some(0) shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:ebba237fe098b958 camera=2:ebba237fe098b958 shadow=2:ebba237fe098b958 indirect=2:ebba237fe098b958 +geom 1: material #1 Signature { kind: "UsdPreviewSurface (textured)", cutout: true, straight: false, boundary: false, emits: false, uv: true, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv Some(1) shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:39daafe3e8cfed58 camera=2:39daafe3e8cfed58 shadow=2:39daafe3e8cfed58 indirect=2:39daafe3e8cfed58 +geom 2: material #2 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:9d35beb8f32f58b8 camera=2:9d35beb8f32f58b8 shadow=2:9d35beb8f32f58b8 indirect=2:9d35beb8f32f58b8 +geom 3: material #3 Signature { kind: "OpenPBR", cutout: true, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:02ff87c392969355 camera=2:02ff87c392969355 shadow=2:02ff87c392969355 indirect=2:02ff87c392969355 +geom 4: material #4 Signature { kind: "UsdPreviewSurface (textured)", cutout: false, straight: false, boundary: false, emits: false, uv: true, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv Some(2) shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:584690846f530915 camera=2:584690846f530915 shadow=2:584690846f530915 indirect=2:584690846f530915 +geom 5: material #5 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:b7c5cd1ab1812038 camera=2:b7c5cd1ab1812038 shadow=2:b7c5cd1ab1812038 indirect=2:b7c5cd1ab1812038 +provenance material /W/Looks/Cutout: MaterialOrigin { slots: [3], displaced: false } +provenance material /W/Looks/Glass: MaterialOrigin { slots: [5], displaced: false } +provenance material /W/Looks/MaskedIn: MaterialOrigin { slots: [0], displaced: false } +provenance material /W/Looks/MaskedOut: MaterialOrigin { slots: [1], displaced: false } +provenance material /W/Looks/Opaque: MaterialOrigin { slots: [2], displaced: false } +provenance material /W/Looks/Textured: MaterialOrigin { slots: [4], displaced: false } +provenance geometry 0..1: /W/Geo/F +provenance geometry 1..2: /W/Geo/E +provenance geometry 2..3: /W/Geo/D +provenance geometry 3..4: /W/Geo/C +provenance geometry 4..5: /W/Geo/B +provenance geometry 5..6: /W/Geo/A +provenance mesh: MeshOrigin { geom_id: 0, slot: 0, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 1, slot: 1, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 2, slot: 2, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 3, slot: 3, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 4, slot: 4, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 5, slot: 5, baked: true, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 4299106042884866949, n_points: 4, n_indices: 4, n_uvs: Some(4), smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 1: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 6101488999021108127, n_points: 4, n_indices: 4, n_uvs: Some(4), smooth: false, material: 1 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 2: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 3070782736434146653, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 2 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 3: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 3224020731942780983, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 3 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 4: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 17114642930453504041, n_points: 4, n_indices: 4, n_uvs: Some(4), smooth: false, material: 4 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 5: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 10030907131019489195, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 5 }), placements: 1, shared: false, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: None, cameras: [], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: None, offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/opacity_usda-18ffcc13eb92677a-1.image b/crates/crust-core/tests/data/import_baselines/opacity_usda-18ffcc13eb92677a-1.image new file mode 100644 index 000000000..c734c5b1d --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/opacity_usda-18ffcc13eb92677a-1.image @@ -0,0 +1 @@ +640x360 16spp clamp-off a04a09c0d4b5e325 diff --git a/crates/crust-core/tests/data/import_baselines/openpbr_showcase_usda-0f7c1eaf15ef6726-1.digest b/crates/crust-core/tests/data/import_baselines/openpbr_showcase_usda-0f7c1eaf15ef6726-1.digest new file mode 100644 index 000000000..b7849bb10 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/openpbr_showcase_usda-0f7c1eaf15ef6726-1.digest @@ -0,0 +1,49 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/World/Cam") +camera: Camera { origin: Vec3A(0.0, 3.0, 22.0), lower_left_corner: Vec3A(-16.200468, -8.067126, 0.9153805), horizontal: Vec3A(32.400936, -0.0, 0.0), vertical: Vec3A(0.0, 18.150679, -1.6500617), u: Vec3A(1.0, -0.0, 0.0), v: Vec3A(0.0, 0.99589324, -0.09053575), lens_radius: 0.025, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: Some("/Render/settings") +settings: RenderSettings { samples_per_pixel: 4096, max_depth: 32, width: 1280, height: 720, region: PixelRect { x0: 0, y0: 0, x1: 1280, y1: 720 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 50.0, aperture: [73.63848, 41.42165], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 100.0, focus_distance: 22.0 }), depth_of_field: true, motion_blur: false, layer_stack: ["$DIR/openpbr_showcase.usda"], invisible_overrides: Some(0) } +layer: $DIR/openpbr_showcase.usda +lights: 3 +light 0: area name Some("/World/Light2") lpe None pmf 0.33333334 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 1: area name Some("/World/Light1") lpe None pmf 0.33333334 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 2: dome name Some("/World/Sky") lpe None pmf 0.33333334 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 10 geometries, PrimitiveBreakdown { triangles: 0, spheres: 10, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 0, spheres: 10, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +geom 0: material #0 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:e298ba4cf1964243 camera=1:e298ba4cf1964243 shadow=1:e298ba4cf1964243 indirect=1:e298ba4cf1964243 +geom 1: material #1 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:761998a3d7ecc51a camera=1:761998a3d7ecc51a shadow=1:761998a3d7ecc51a indirect=1:761998a3d7ecc51a +geom 2: material #2 Signature { kind: "OpenPBR", cutout: false, straight: true, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:ba47ef25e6123ada camera=1:ba47ef25e6123ada shadow=1:ba47ef25e6123ada indirect=1:ba47ef25e6123ada +geom 3: material #3 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:85c643d66a540f15 camera=1:85c643d66a540f15 shadow=1:85c643d66a540f15 indirect=1:85c643d66a540f15 +geom 4: material #4 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:a6bbcccef1f300c8 camera=1:a6bbcccef1f300c8 shadow=1:a6bbcccef1f300c8 indirect=1:a6bbcccef1f300c8 +geom 5: material #5 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:ee76fd7ed45c4a85 camera=1:ee76fd7ed45c4a85 shadow=1:ee76fd7ed45c4a85 indirect=1:ee76fd7ed45c4a85 +geom 6: material #6 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:2bc95f96a08720f8 camera=1:2bc95f96a08720f8 shadow=1:2bc95f96a08720f8 indirect=1:2bc95f96a08720f8 +geom 7: material #7 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:e7167c14b4ae6595 camera=1:e7167c14b4ae6595 shadow=1:e7167c14b4ae6595 indirect=1:e7167c14b4ae6595 +geom 8: material #8 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:60a1f9c471bdf29a camera=1:60a1f9c471bdf29a shadow=1:60a1f9c471bdf29a indirect=1:60a1f9c471bdf29a +geom 9: material #9 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:d216fc66bdebf473 camera=1:d216fc66bdebf473 shadow=1:d216fc66bdebf473 indirect=1:d216fc66bdebf473 +provenance material /World/Materials/chrome_metal: MaterialOrigin { slots: [8], displaced: false } +provenance material /World/Materials/green_glass_dispersion: MaterialOrigin { slots: [4], displaced: false } +provenance material /World/Materials/red_car_paint: MaterialOrigin { slots: [6], displaced: false } +provenance material /World/Materials/red_plastic: MaterialOrigin { slots: [7], displaced: false } +provenance material /World/Materials/soap_bubble: MaterialOrigin { slots: [2], displaced: false } +provenance material /World/Materials/velvet_cloth: MaterialOrigin { slots: [5], displaced: false } +provenance material /World/Materials/waxy_subsurface: MaterialOrigin { slots: [3], displaced: false } +provenance light /World/Light1: LightOrigin { index: 1, geoms: 1..2 } +provenance light /World/Light2: LightOrigin { index: 0, geoms: 0..1 } +provenance light /World/Sky: LightOrigin { index: 2, geoms: 10..10 } +provenance geometry 0..1: /World/Light2 +provenance geometry 1..2: /World/Light1 +provenance geometry 2..3: /World/Scene/sphere_soap_bubble +provenance geometry 3..4: /World/Scene/sphere_subsurface +provenance geometry 4..5: /World/Scene/sphere_glass +provenance geometry 5..6: /World/Scene/sphere_velvet +provenance geometry 6..7: /World/Scene/sphere_red_car_paint +provenance geometry 7..8: /World/Scene/sphere_red_plastic +provenance geometry 8..9: /World/Scene/sphere_chrome +provenance geometry 9..10: /World/Scene/ground +provenance spheres: [2, 3, 4, 5, 6, 7, 8, 9] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: true, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/World/Cam"), cameras: ["/World/Cam"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/World/Cam"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/openpbr_showcase_usda-0f7c1eaf15ef6726-1.image b/crates/crust-core/tests/data/import_baselines/openpbr_showcase_usda-0f7c1eaf15ef6726-1.image new file mode 100644 index 000000000..e1fc3a7a5 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/openpbr_showcase_usda-0f7c1eaf15ef6726-1.image @@ -0,0 +1 @@ +1280x720 16spp clamp-off 2473c06a3596627c diff --git a/crates/crust-core/tests/data/import_baselines/openpbr_showcase_usda-1dca66ecebc9d919-1.digest b/crates/crust-core/tests/data/import_baselines/openpbr_showcase_usda-1dca66ecebc9d919-1.digest new file mode 100644 index 000000000..200e34c08 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/openpbr_showcase_usda-1dca66ecebc9d919-1.digest @@ -0,0 +1,50 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/World/Cam") +camera: Camera { origin: Vec3A(0.0, 3.0, 22.0), lower_left_corner: Vec3A(-16.200468, -8.067126, 0.9153805), horizontal: Vec3A(32.400936, -0.0, 0.0), vertical: Vec3A(0.0, 18.150679, -1.6500617), u: Vec3A(1.0, -0.0, 0.0), v: Vec3A(0.0, 0.99589324, -0.09053575), lens_radius: 0.025, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: Some("/Render/settings") +settings: RenderSettings { samples_per_pixel: 4096, max_depth: 32, width: 1280, height: 720, region: PixelRect { x0: 0, y0: 0, x1: 1280, y1: 720 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 50.0, aperture: [73.63848, 41.42165], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 100.0, focus_distance: 22.0 }), depth_of_field: true, motion_blur: false, layer_stack: ["$DIR/openpbr_showcase.usda"], invisible_overrides: Some(0) } +layer: $DIR/openpbr_showcase.usda +warning: Warning { code: AssetUnsupportedByHost, kind: Skipped, count: 1, prims: [], message: "No asset loader: environment map $DIR/sky_gradient.exr ignored — the dome falls back to its uniform colour. Use Scene::from_usd_with_assets to supply one." } +lights: 3 +light 0: area name Some("/World/Light2") lpe None pmf 0.33333334 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 1: area name Some("/World/Light1") lpe None pmf 0.33333334 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 2: dome name Some("/World/Sky") lpe None pmf 0.33333334 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 10 geometries, PrimitiveBreakdown { triangles: 0, spheres: 10, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 0, spheres: 10, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +geom 0: material #0 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:e298ba4cf1964243 camera=1:e298ba4cf1964243 shadow=1:e298ba4cf1964243 indirect=1:e298ba4cf1964243 +geom 1: material #1 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:761998a3d7ecc51a camera=1:761998a3d7ecc51a shadow=1:761998a3d7ecc51a indirect=1:761998a3d7ecc51a +geom 2: material #2 Signature { kind: "OpenPBR", cutout: false, straight: true, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:ba47ef25e6123ada camera=1:ba47ef25e6123ada shadow=1:ba47ef25e6123ada indirect=1:ba47ef25e6123ada +geom 3: material #3 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:85c643d66a540f15 camera=1:85c643d66a540f15 shadow=1:85c643d66a540f15 indirect=1:85c643d66a540f15 +geom 4: material #4 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:a6bbcccef1f300c8 camera=1:a6bbcccef1f300c8 shadow=1:a6bbcccef1f300c8 indirect=1:a6bbcccef1f300c8 +geom 5: material #5 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:ee76fd7ed45c4a85 camera=1:ee76fd7ed45c4a85 shadow=1:ee76fd7ed45c4a85 indirect=1:ee76fd7ed45c4a85 +geom 6: material #6 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:2bc95f96a08720f8 camera=1:2bc95f96a08720f8 shadow=1:2bc95f96a08720f8 indirect=1:2bc95f96a08720f8 +geom 7: material #7 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:e7167c14b4ae6595 camera=1:e7167c14b4ae6595 shadow=1:e7167c14b4ae6595 indirect=1:e7167c14b4ae6595 +geom 8: material #8 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:60a1f9c471bdf29a camera=1:60a1f9c471bdf29a shadow=1:60a1f9c471bdf29a indirect=1:60a1f9c471bdf29a +geom 9: material #9 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:d216fc66bdebf473 camera=1:d216fc66bdebf473 shadow=1:d216fc66bdebf473 indirect=1:d216fc66bdebf473 +provenance material /World/Materials/chrome_metal: MaterialOrigin { slots: [8], displaced: false } +provenance material /World/Materials/green_glass_dispersion: MaterialOrigin { slots: [4], displaced: false } +provenance material /World/Materials/red_car_paint: MaterialOrigin { slots: [6], displaced: false } +provenance material /World/Materials/red_plastic: MaterialOrigin { slots: [7], displaced: false } +provenance material /World/Materials/soap_bubble: MaterialOrigin { slots: [2], displaced: false } +provenance material /World/Materials/velvet_cloth: MaterialOrigin { slots: [5], displaced: false } +provenance material /World/Materials/waxy_subsurface: MaterialOrigin { slots: [3], displaced: false } +provenance light /World/Light1: LightOrigin { index: 1, geoms: 1..2 } +provenance light /World/Light2: LightOrigin { index: 0, geoms: 0..1 } +provenance light /World/Sky: LightOrigin { index: 2, geoms: 10..10 } +provenance geometry 0..1: /World/Light2 +provenance geometry 1..2: /World/Light1 +provenance geometry 2..3: /World/Scene/sphere_soap_bubble +provenance geometry 3..4: /World/Scene/sphere_subsurface +provenance geometry 4..5: /World/Scene/sphere_glass +provenance geometry 5..6: /World/Scene/sphere_velvet +provenance geometry 6..7: /World/Scene/sphere_red_car_paint +provenance geometry 7..8: /World/Scene/sphere_red_plastic +provenance geometry 8..9: /World/Scene/sphere_chrome +provenance geometry 9..10: /World/Scene/ground +provenance spheres: [2, 3, 4, 5, 6, 7, 8, 9] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/World/Cam"), cameras: ["/World/Cam"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/World/Cam"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/openpbr_showcase_usda-1dca66ecebc9d919-1.image b/crates/crust-core/tests/data/import_baselines/openpbr_showcase_usda-1dca66ecebc9d919-1.image new file mode 100644 index 000000000..deb275a31 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/openpbr_showcase_usda-1dca66ecebc9d919-1.image @@ -0,0 +1 @@ +1280x720 16spp clamp-off 80b89a276ba11188 diff --git a/crates/crust-core/tests/data/import_baselines/openpbr_showcase_usda-1dca66ecebc9d919-2.digest b/crates/crust-core/tests/data/import_baselines/openpbr_showcase_usda-1dca66ecebc9d919-2.digest new file mode 100644 index 000000000..200e34c08 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/openpbr_showcase_usda-1dca66ecebc9d919-2.digest @@ -0,0 +1,50 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/World/Cam") +camera: Camera { origin: Vec3A(0.0, 3.0, 22.0), lower_left_corner: Vec3A(-16.200468, -8.067126, 0.9153805), horizontal: Vec3A(32.400936, -0.0, 0.0), vertical: Vec3A(0.0, 18.150679, -1.6500617), u: Vec3A(1.0, -0.0, 0.0), v: Vec3A(0.0, 0.99589324, -0.09053575), lens_radius: 0.025, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: Some("/Render/settings") +settings: RenderSettings { samples_per_pixel: 4096, max_depth: 32, width: 1280, height: 720, region: PixelRect { x0: 0, y0: 0, x1: 1280, y1: 720 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 50.0, aperture: [73.63848, 41.42165], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 100.0, focus_distance: 22.0 }), depth_of_field: true, motion_blur: false, layer_stack: ["$DIR/openpbr_showcase.usda"], invisible_overrides: Some(0) } +layer: $DIR/openpbr_showcase.usda +warning: Warning { code: AssetUnsupportedByHost, kind: Skipped, count: 1, prims: [], message: "No asset loader: environment map $DIR/sky_gradient.exr ignored — the dome falls back to its uniform colour. Use Scene::from_usd_with_assets to supply one." } +lights: 3 +light 0: area name Some("/World/Light2") lpe None pmf 0.33333334 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 1: area name Some("/World/Light1") lpe None pmf 0.33333334 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 2: dome name Some("/World/Sky") lpe None pmf 0.33333334 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 10 geometries, PrimitiveBreakdown { triangles: 0, spheres: 10, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 0, spheres: 10, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +geom 0: material #0 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:e298ba4cf1964243 camera=1:e298ba4cf1964243 shadow=1:e298ba4cf1964243 indirect=1:e298ba4cf1964243 +geom 1: material #1 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:761998a3d7ecc51a camera=1:761998a3d7ecc51a shadow=1:761998a3d7ecc51a indirect=1:761998a3d7ecc51a +geom 2: material #2 Signature { kind: "OpenPBR", cutout: false, straight: true, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:ba47ef25e6123ada camera=1:ba47ef25e6123ada shadow=1:ba47ef25e6123ada indirect=1:ba47ef25e6123ada +geom 3: material #3 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:85c643d66a540f15 camera=1:85c643d66a540f15 shadow=1:85c643d66a540f15 indirect=1:85c643d66a540f15 +geom 4: material #4 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:a6bbcccef1f300c8 camera=1:a6bbcccef1f300c8 shadow=1:a6bbcccef1f300c8 indirect=1:a6bbcccef1f300c8 +geom 5: material #5 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:ee76fd7ed45c4a85 camera=1:ee76fd7ed45c4a85 shadow=1:ee76fd7ed45c4a85 indirect=1:ee76fd7ed45c4a85 +geom 6: material #6 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:2bc95f96a08720f8 camera=1:2bc95f96a08720f8 shadow=1:2bc95f96a08720f8 indirect=1:2bc95f96a08720f8 +geom 7: material #7 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:e7167c14b4ae6595 camera=1:e7167c14b4ae6595 shadow=1:e7167c14b4ae6595 indirect=1:e7167c14b4ae6595 +geom 8: material #8 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:60a1f9c471bdf29a camera=1:60a1f9c471bdf29a shadow=1:60a1f9c471bdf29a indirect=1:60a1f9c471bdf29a +geom 9: material #9 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:d216fc66bdebf473 camera=1:d216fc66bdebf473 shadow=1:d216fc66bdebf473 indirect=1:d216fc66bdebf473 +provenance material /World/Materials/chrome_metal: MaterialOrigin { slots: [8], displaced: false } +provenance material /World/Materials/green_glass_dispersion: MaterialOrigin { slots: [4], displaced: false } +provenance material /World/Materials/red_car_paint: MaterialOrigin { slots: [6], displaced: false } +provenance material /World/Materials/red_plastic: MaterialOrigin { slots: [7], displaced: false } +provenance material /World/Materials/soap_bubble: MaterialOrigin { slots: [2], displaced: false } +provenance material /World/Materials/velvet_cloth: MaterialOrigin { slots: [5], displaced: false } +provenance material /World/Materials/waxy_subsurface: MaterialOrigin { slots: [3], displaced: false } +provenance light /World/Light1: LightOrigin { index: 1, geoms: 1..2 } +provenance light /World/Light2: LightOrigin { index: 0, geoms: 0..1 } +provenance light /World/Sky: LightOrigin { index: 2, geoms: 10..10 } +provenance geometry 0..1: /World/Light2 +provenance geometry 1..2: /World/Light1 +provenance geometry 2..3: /World/Scene/sphere_soap_bubble +provenance geometry 3..4: /World/Scene/sphere_subsurface +provenance geometry 4..5: /World/Scene/sphere_glass +provenance geometry 5..6: /World/Scene/sphere_velvet +provenance geometry 6..7: /World/Scene/sphere_red_car_paint +provenance geometry 7..8: /World/Scene/sphere_red_plastic +provenance geometry 8..9: /World/Scene/sphere_chrome +provenance geometry 9..10: /World/Scene/ground +provenance spheres: [2, 3, 4, 5, 6, 7, 8, 9] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/World/Cam"), cameras: ["/World/Cam"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/World/Cam"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/openpbr_showcase_usda-1dca66ecebc9d919-2.image b/crates/crust-core/tests/data/import_baselines/openpbr_showcase_usda-1dca66ecebc9d919-2.image new file mode 100644 index 000000000..deb275a31 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/openpbr_showcase_usda-1dca66ecebc9d919-2.image @@ -0,0 +1 @@ +1280x720 16spp clamp-off 80b89a276ba11188 diff --git a/crates/crust-core/tests/data/import_baselines/openpbr_showcase_usda-501b45e8f6131d21-1.digest b/crates/crust-core/tests/data/import_baselines/openpbr_showcase_usda-501b45e8f6131d21-1.digest new file mode 100644 index 000000000..200e34c08 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/openpbr_showcase_usda-501b45e8f6131d21-1.digest @@ -0,0 +1,50 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/World/Cam") +camera: Camera { origin: Vec3A(0.0, 3.0, 22.0), lower_left_corner: Vec3A(-16.200468, -8.067126, 0.9153805), horizontal: Vec3A(32.400936, -0.0, 0.0), vertical: Vec3A(0.0, 18.150679, -1.6500617), u: Vec3A(1.0, -0.0, 0.0), v: Vec3A(0.0, 0.99589324, -0.09053575), lens_radius: 0.025, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: Some("/Render/settings") +settings: RenderSettings { samples_per_pixel: 4096, max_depth: 32, width: 1280, height: 720, region: PixelRect { x0: 0, y0: 0, x1: 1280, y1: 720 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 50.0, aperture: [73.63848, 41.42165], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 100.0, focus_distance: 22.0 }), depth_of_field: true, motion_blur: false, layer_stack: ["$DIR/openpbr_showcase.usda"], invisible_overrides: Some(0) } +layer: $DIR/openpbr_showcase.usda +warning: Warning { code: AssetUnsupportedByHost, kind: Skipped, count: 1, prims: [], message: "No asset loader: environment map $DIR/sky_gradient.exr ignored — the dome falls back to its uniform colour. Use Scene::from_usd_with_assets to supply one." } +lights: 3 +light 0: area name Some("/World/Light2") lpe None pmf 0.33333334 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 1: area name Some("/World/Light1") lpe None pmf 0.33333334 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 2: dome name Some("/World/Sky") lpe None pmf 0.33333334 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 10 geometries, PrimitiveBreakdown { triangles: 0, spheres: 10, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 0, spheres: 10, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +geom 0: material #0 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:e298ba4cf1964243 camera=1:e298ba4cf1964243 shadow=1:e298ba4cf1964243 indirect=1:e298ba4cf1964243 +geom 1: material #1 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:761998a3d7ecc51a camera=1:761998a3d7ecc51a shadow=1:761998a3d7ecc51a indirect=1:761998a3d7ecc51a +geom 2: material #2 Signature { kind: "OpenPBR", cutout: false, straight: true, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:ba47ef25e6123ada camera=1:ba47ef25e6123ada shadow=1:ba47ef25e6123ada indirect=1:ba47ef25e6123ada +geom 3: material #3 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:85c643d66a540f15 camera=1:85c643d66a540f15 shadow=1:85c643d66a540f15 indirect=1:85c643d66a540f15 +geom 4: material #4 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:a6bbcccef1f300c8 camera=1:a6bbcccef1f300c8 shadow=1:a6bbcccef1f300c8 indirect=1:a6bbcccef1f300c8 +geom 5: material #5 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:ee76fd7ed45c4a85 camera=1:ee76fd7ed45c4a85 shadow=1:ee76fd7ed45c4a85 indirect=1:ee76fd7ed45c4a85 +geom 6: material #6 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:2bc95f96a08720f8 camera=1:2bc95f96a08720f8 shadow=1:2bc95f96a08720f8 indirect=1:2bc95f96a08720f8 +geom 7: material #7 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:e7167c14b4ae6595 camera=1:e7167c14b4ae6595 shadow=1:e7167c14b4ae6595 indirect=1:e7167c14b4ae6595 +geom 8: material #8 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:60a1f9c471bdf29a camera=1:60a1f9c471bdf29a shadow=1:60a1f9c471bdf29a indirect=1:60a1f9c471bdf29a +geom 9: material #9 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:d216fc66bdebf473 camera=1:d216fc66bdebf473 shadow=1:d216fc66bdebf473 indirect=1:d216fc66bdebf473 +provenance material /World/Materials/chrome_metal: MaterialOrigin { slots: [8], displaced: false } +provenance material /World/Materials/green_glass_dispersion: MaterialOrigin { slots: [4], displaced: false } +provenance material /World/Materials/red_car_paint: MaterialOrigin { slots: [6], displaced: false } +provenance material /World/Materials/red_plastic: MaterialOrigin { slots: [7], displaced: false } +provenance material /World/Materials/soap_bubble: MaterialOrigin { slots: [2], displaced: false } +provenance material /World/Materials/velvet_cloth: MaterialOrigin { slots: [5], displaced: false } +provenance material /World/Materials/waxy_subsurface: MaterialOrigin { slots: [3], displaced: false } +provenance light /World/Light1: LightOrigin { index: 1, geoms: 1..2 } +provenance light /World/Light2: LightOrigin { index: 0, geoms: 0..1 } +provenance light /World/Sky: LightOrigin { index: 2, geoms: 10..10 } +provenance geometry 0..1: /World/Light2 +provenance geometry 1..2: /World/Light1 +provenance geometry 2..3: /World/Scene/sphere_soap_bubble +provenance geometry 3..4: /World/Scene/sphere_subsurface +provenance geometry 4..5: /World/Scene/sphere_glass +provenance geometry 5..6: /World/Scene/sphere_velvet +provenance geometry 6..7: /World/Scene/sphere_red_car_paint +provenance geometry 7..8: /World/Scene/sphere_red_plastic +provenance geometry 8..9: /World/Scene/sphere_chrome +provenance geometry 9..10: /World/Scene/ground +provenance spheres: [2, 3, 4, 5, 6, 7, 8, 9] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/World/Cam"), cameras: ["/World/Cam"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/World/Cam"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/openpbr_showcase_usda-501b45e8f6131d21-1.image b/crates/crust-core/tests/data/import_baselines/openpbr_showcase_usda-501b45e8f6131d21-1.image new file mode 100644 index 000000000..deb275a31 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/openpbr_showcase_usda-501b45e8f6131d21-1.image @@ -0,0 +1 @@ +1280x720 16spp clamp-off 80b89a276ba11188 diff --git a/crates/crust-core/tests/data/import_baselines/openpbr_usda-876563da4aa0a57a-1.digest b/crates/crust-core/tests/data/import_baselines/openpbr_usda-876563da4aa0a57a-1.digest new file mode 100644 index 000000000..a19519fc0 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/openpbr_usda-876563da4aa0a57a-1.digest @@ -0,0 +1,20 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: None +camera: Camera { origin: Vec3A(15.0, 3.0, 3.0), lower_left_corner: Vec3A(4.8863316, -0.044797063, 4.174048), horizontal: Vec3A(1.2295314, 0.0, -6.147657), vertical: Vec3A(-0.44830504, 3.4967792, -0.08966101), u: Vec3A(0.19611613, 0.0, -0.9805807), v: Vec3A(-0.1271232, 0.991561, -0.02542464), lens_radius: 0.05, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: None +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 640, height: 360, region: PixelRect { x0: 0, y0: 0, x1: 640, y1: 360 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: None, depth_of_field: true, motion_blur: false, layer_stack: ["$DIR/openpbr.usda"], invisible_overrides: Some(0) } +layer: $DIR/openpbr.usda +warning: Warning { code: CameraMissing, kind: Skipped, count: 1, prims: [], message: "USD stage has no UsdGeomCamera — falling back to world::get_settings camera" } +lights: 0 +volumes: 0 +world: 1 geometries, PrimitiveBreakdown { triangles: 0, spheres: 1, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 0, spheres: 1, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:fb1e7d48790aec95 camera=1:fb1e7d48790aec95 shadow=1:fb1e7d48790aec95 indirect=1:fb1e7d48790aec95 +provenance material /World/Glow: MaterialOrigin { slots: [0], displaced: false } +provenance geometry 0..1: /World/Ball +provenance spheres: [0] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: None, cameras: [], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: None, offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/openpbr_usda-876563da4aa0a57a-1.image b/crates/crust-core/tests/data/import_baselines/openpbr_usda-876563da4aa0a57a-1.image new file mode 100644 index 000000000..fd9634619 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/openpbr_usda-876563da4aa0a57a-1.image @@ -0,0 +1 @@ +640x360 16spp clamp-off 21e948c8aba2e454 diff --git a/crates/crust-core/tests/data/import_baselines/other_lookdev_usda-31ecdc884f3fb603-1.digest b/crates/crust-core/tests/data/import_baselines/other_lookdev_usda-31ecdc884f3fb603-1.digest new file mode 100644 index 000000000..880b3978d --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/other_lookdev_usda-31ecdc884f3fb603-1.digest @@ -0,0 +1,40 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/scene/camera1") +camera: Camera { origin: Vec3A(0.0074343784, 1.9913422, 4.0133057), lower_left_corner: Vec3A(-8.881443, -3.0086517, -0.98669434), horizontal: Vec3A(17.777756, 0.0, 0.0), vertical: Vec3A(0.0, 9.999988, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: Some(Vec4(0.0, 0.0, -1.0, 3.9133058)), far: Some(Vec4(0.0, 0.0, 1.0, 9995.986)), planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: None +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 640, height: 360, region: PixelRect { x0: 0, y0: 0, x1: 640, y1: 360 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 12.700017, aperture: [25.4, 25.4], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 5.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/other_lookdev.usda", "$DIR/other.usda"], invisible_overrides: Some(0) } +layer: $DIR/other.usda +layer: $DIR/other_lookdev.usda +warning: Warning { code: MaterialFallbackDefault, kind: Skipped, count: 1, prims: ["/scene/Looks/initialShadingGroup"], message: "Material /scene/Looks/initialShadingGroup has no surface shader — using default grey OpenPBR" } +lights: 1 +light 0: dome name Some("/scene/Sky") lpe None pmf 1.0 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 5 geometries, PrimitiveBreakdown { triangles: 822, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 2 } top level, PrimitiveBreakdown { triangles: 1582, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 2 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 4.0 motion [] pieces all=10:88b22fc3345d5b05 camera=10:88b22fc3345d5b05 shadow=10:88b22fc3345d5b05 indirect=10:88b22fc3345d5b05 +geom 1: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.2 motion [] pieces all=760:c2b60a75c52c78b9 camera=760:c2b60a75c52c78b9 shadow=760:c2b60a75c52c78b9 indirect=760:c2b60a75c52c78b9 +geom 2: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=12:94a297badef437e1 camera=12:94a297badef437e1 shadow=12:94a297badef437e1 indirect=12:94a297badef437e1 +geom 3: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.25 motion [] pieces all=800:4a8c9f44d777e131 camera=800:4a8c9f44d777e131 shadow=800:4a8c9f44d777e131 indirect=800:4a8c9f44d777e131 +geom 4: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.3585339 motion [] pieces all=760:2344ecf63e12c441 camera=760:2344ecf63e12c441 shadow=760:2344ecf63e12c441 indirect=760:2344ecf63e12c441 +provenance material /scene/Looks/initialShadingGroup: MaterialOrigin { slots: [0, 1, 2, 3, 4], displaced: false } +provenance light /scene/Sky: LightOrigin { index: 0, geoms: 0..0 } +provenance geometry 0..1: /scene/pCube1 +provenance geometry 1..2: /scene/pSphere1 +provenance geometry 2..3: /scene/pCube2 +provenance geometry 3..4: /scene/pTorus1 +provenance geometry 4..5: /scene/pSphere2 +provenance mesh: MeshOrigin { geom_id: 0, slot: 0, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 1, slot: 1, baked: false, moving: false } +provenance mesh: MeshOrigin { geom_id: 2, slot: 2, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 3, slot: 3, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 4, slot: 1, baked: false, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 12343188411137242430, n_points: 8, n_indices: 20, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 1: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 17119738035130870988, n_points: 382, n_indices: 1560, n_uvs: None, smooth: false, material: 0 }), placements: 2, shared: false, displaced: false } +provenance mesh slot 2: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 1739488954094729910, n_points: 8, n_indices: 24, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 3: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 6096447469814747168, n_points: 400, n_indices: 1600, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: true }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/scene/camera1"), cameras: ["/scene/camera1"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/scene/camera1"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/other_lookdev_usda-31ecdc884f3fb603-1.image b/crates/crust-core/tests/data/import_baselines/other_lookdev_usda-31ecdc884f3fb603-1.image new file mode 100644 index 000000000..7172edbfe --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/other_lookdev_usda-31ecdc884f3fb603-1.image @@ -0,0 +1 @@ +640x360 16spp clamp-off 64ede904b11bab22 diff --git a/crates/crust-core/tests/data/import_baselines/other_op_usda-7a2444b60f22a636-1.digest b/crates/crust-core/tests/data/import_baselines/other_op_usda-7a2444b60f22a636-1.digest new file mode 100644 index 000000000..945462ad2 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/other_op_usda-7a2444b60f22a636-1.digest @@ -0,0 +1,23 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: None +camera: Camera { origin: Vec3A(15.0, 3.0, 3.0), lower_left_corner: Vec3A(4.8863316, -0.044797063, 4.174048), horizontal: Vec3A(1.2295314, 0.0, -6.147657), vertical: Vec3A(-0.44830504, 3.4967792, -0.08966101), u: Vec3A(0.19611613, 0.0, -0.9805807), v: Vec3A(-0.1271232, 0.991561, -0.02542464), lens_radius: 0.05, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: None +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 640, height: 360, region: PixelRect { x0: 0, y0: 0, x1: 640, y1: 360 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: None, depth_of_field: true, motion_blur: false, layer_stack: ["$DIR/other_op.usda"], invisible_overrides: Some(0) } +layer: $DIR/other_op.usda +warning: Warning { code: DisplacementUnevaluated, kind: Skipped, count: 1, prims: ["/World/Soil"], message: "Material /World/Soil: PxrDisplace.dispScalar is driven by /World/Soil/Blend (Some(\"PxrBlend\")), which crust does not evaluate — the surface is not displaced" } +warning: Warning { code: CameraMissing, kind: Skipped, count: 1, prims: [], message: "USD stage has no UsdGeomCamera — falling back to world::get_settings camera" } +lights: 0 +volumes: 0 +world: 1 geometries, PrimitiveBreakdown { triangles: 4, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 4, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=4:1c1a4717f2bf9d55 camera=4:1c1a4717f2bf9d55 shadow=4:1c1a4717f2bf9d55 indirect=4:1c1a4717f2bf9d55 +provenance material /World/Soil: MaterialOrigin { slots: [0], displaced: false } +provenance geometry 0..1: /World/Quads +provenance mesh: MeshOrigin { geom_id: 0, slot: 0, baked: true, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 18140786555293703923, n_points: 6, n_indices: 8, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: None, cameras: [], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: None, offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/other_op_usda-7a2444b60f22a636-1.image b/crates/crust-core/tests/data/import_baselines/other_op_usda-7a2444b60f22a636-1.image new file mode 100644 index 000000000..c734c5b1d --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/other_op_usda-7a2444b60f22a636-1.image @@ -0,0 +1 @@ +640x360 16spp clamp-off a04a09c0d4b5e325 diff --git a/crates/crust-core/tests/data/import_baselines/overflow_usda-c7dbcb2b55d9a450-1.digest b/crates/crust-core/tests/data/import_baselines/overflow_usda-c7dbcb2b55d9a450-1.digest new file mode 100644 index 000000000..7d18127f8 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/overflow_usda-c7dbcb2b55d9a450-1.digest @@ -0,0 +1,202 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: None +camera: Camera { origin: Vec3A(15.0, 3.0, 3.0), lower_left_corner: Vec3A(4.8863316, -0.044797063, 4.174048), horizontal: Vec3A(1.2295314, 0.0, -6.147657), vertical: Vec3A(-0.44830504, 3.4967792, -0.08966101), u: Vec3A(0.19611613, 0.0, -0.9805807), v: Vec3A(-0.1271232, 0.991561, -0.02542464), lens_radius: 0.05, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: None +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 640, height: 360, region: PixelRect { x0: 0, y0: 0, x1: 640, y1: 360 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: None, depth_of_field: true, motion_blur: false, layer_stack: ["$DIR/overflow.usda"], invisible_overrides: Some(0) } +layer: $DIR/overflow.usda +warning: Warning { code: CameraMissing, kind: Skipped, count: 1, prims: [], message: "USD stage has no UsdGeomCamera — falling back to world::get_settings camera" } +warning: Warning { code: LightLinkShadowLinkUnencodable, kind: Approximated, count: 2, prims: ["/World/L28", "/World/L29"], message: "/World/L28: collection:shadowLink cannot be encoded (2 occluder classes share crust's overflow bit and it includes only some) — shadowed by every occluder" } +lights: 31 +light 0: area name Some("/World/L0") lpe None pmf 0.032258064 shadow RayMask(4294967282) restricted true nee-only false twinned true gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 1: area name Some("/World/L1") lpe None pmf 0.032258064 shadow RayMask(4294967274) restricted true nee-only false twinned true gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 2: area name Some("/World/L2") lpe None pmf 0.032258064 shadow RayMask(4294967258) restricted true nee-only false twinned true gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 3: area name Some("/World/L3") lpe None pmf 0.032258064 shadow RayMask(4294967226) restricted true nee-only false twinned true gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 4: area name Some("/World/L4") lpe None pmf 0.032258064 shadow RayMask(4294967162) restricted true nee-only false twinned true gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 5: area name Some("/World/L5") lpe None pmf 0.032258064 shadow RayMask(4294967034) restricted true nee-only false twinned true gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 6: area name Some("/World/L6") lpe None pmf 0.032258064 shadow RayMask(4294966778) restricted true nee-only false twinned true gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 7: area name Some("/World/L7") lpe None pmf 0.032258064 shadow RayMask(4294966266) restricted true nee-only false twinned true gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 8: area name Some("/World/L8") lpe None pmf 0.032258064 shadow RayMask(4294965242) restricted true nee-only false twinned true gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 9: area name Some("/World/L9") lpe None pmf 0.032258064 shadow RayMask(4294963194) restricted true nee-only false twinned true gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 10: area name Some("/World/L10") lpe None pmf 0.032258064 shadow RayMask(4294959098) restricted true nee-only false twinned true gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 11: area name Some("/World/L11") lpe None pmf 0.032258064 shadow RayMask(4294950906) restricted true nee-only false twinned true gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 12: area name Some("/World/L12") lpe None pmf 0.032258064 shadow RayMask(4294934522) restricted true nee-only false twinned true gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 13: area name Some("/World/L13") lpe None pmf 0.032258064 shadow RayMask(4294901754) restricted true nee-only false twinned true gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 14: area name Some("/World/L14") lpe None pmf 0.032258064 shadow RayMask(4294836218) restricted true nee-only false twinned true gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 15: area name Some("/World/L15") lpe None pmf 0.032258064 shadow RayMask(4294705146) restricted true nee-only false twinned true gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 16: area name Some("/World/L16") lpe None pmf 0.032258064 shadow RayMask(4294443002) restricted true nee-only false twinned true gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 17: area name Some("/World/L17") lpe None pmf 0.032258064 shadow RayMask(4293918714) restricted true nee-only false twinned true gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 18: area name Some("/World/L18") lpe None pmf 0.032258064 shadow RayMask(4292870138) restricted true nee-only false twinned true gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 19: area name Some("/World/L19") lpe None pmf 0.032258064 shadow RayMask(4290772986) restricted true nee-only false twinned true gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 20: area name Some("/World/L20") lpe None pmf 0.032258064 shadow RayMask(4286578682) restricted true nee-only false twinned true gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 21: area name Some("/World/L21") lpe None pmf 0.032258064 shadow RayMask(4278190074) restricted true nee-only false twinned true gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 22: area name Some("/World/L22") lpe None pmf 0.032258064 shadow RayMask(4261412858) restricted true nee-only false twinned true gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 23: area name Some("/World/L23") lpe None pmf 0.032258064 shadow RayMask(4227858426) restricted true nee-only false twinned true gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 24: area name Some("/World/L24") lpe None pmf 0.032258064 shadow RayMask(4160749562) restricted true nee-only false twinned true gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 25: area name Some("/World/L25") lpe None pmf 0.032258064 shadow RayMask(4026531834) restricted true nee-only false twinned true gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 26: area name Some("/World/L26") lpe None pmf 0.032258064 shadow RayMask(3758096378) restricted true nee-only false twinned true gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 27: area name Some("/World/L27") lpe None pmf 0.032258064 shadow RayMask(3221225466) restricted true nee-only false twinned true gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 28: area name Some("/World/L28") lpe None pmf 0.032258064 shadow RayMask(4294967290) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 29: area name Some("/World/L29") lpe None pmf 0.032258064 shadow RayMask(4294967290) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 30: area name Some("/World/Free") lpe None pmf 0.032258064 shadow RayMask(4294967290) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 61 geometries, PrimitiveBreakdown { triangles: 0, spheres: 61, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 0, spheres: 61, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:5dc853d99dbdd1f5 camera=1:5dc853d99dbdd1f5 shadow=0:cbf29ce484222325 indirect=1:5dc853d99dbdd1f5 +geom 1: material #1 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:7fd943913c47476d camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=1:7fd943913c47476d +geom 2: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:41af89000f14f1d5 camera=1:41af89000f14f1d5 shadow=0:cbf29ce484222325 indirect=1:41af89000f14f1d5 +geom 3: material #2 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:2b322162aa7d3a4d camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=1:2b322162aa7d3a4d +geom 4: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:b766321c6a421f75 camera=1:b766321c6a421f75 shadow=0:cbf29ce484222325 indirect=1:b766321c6a421f75 +geom 5: material #3 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:48b006547ee755ed camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=1:48b006547ee755ed +geom 6: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:f79b9cd5e85cd295 camera=1:f79b9cd5e85cd295 shadow=0:cbf29ce484222325 indirect=1:f79b9cd5e85cd295 +geom 7: material #4 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:455b61b40e8f7b05 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=1:455b61b40e8f7b05 +geom 8: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:a806aee015561275 camera=1:a806aee015561275 shadow=0:cbf29ce484222325 indirect=1:a806aee015561275 +geom 9: material #5 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:a43c7a0b7ccf9165 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=1:a43c7a0b7ccf9165 +geom 10: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:86dbb4fc101d5155 camera=1:86dbb4fc101d5155 shadow=0:cbf29ce484222325 indirect=1:86dbb4fc101d5155 +geom 11: material #6 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:c802485783b94e45 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=1:c802485783b94e45 +geom 12: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:cb2f886d9f85dc6d camera=1:cb2f886d9f85dc6d shadow=0:cbf29ce484222325 indirect=1:cb2f886d9f85dc6d +geom 13: material #7 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:d1c0aaf82ed5a9cd camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=1:d1c0aaf82ed5a9cd +geom 14: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:21da3990f66c9d4d camera=1:21da3990f66c9d4d shadow=0:cbf29ce484222325 indirect=1:21da3990f66c9d4d +geom 15: material #8 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:d9c98d2b6ea6ae1d camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=1:d9c98d2b6ea6ae1d +geom 16: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:8bcd169568266ced camera=1:8bcd169568266ced shadow=0:cbf29ce484222325 indirect=1:8bcd169568266ced +geom 17: material #9 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:4cd1629cbacc6bad camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=1:4cd1629cbacc6bad +geom 18: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:2e637e728cf6f80d camera=1:2e637e728cf6f80d shadow=0:cbf29ce484222325 indirect=1:2e637e728cf6f80d +geom 19: material #10 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:732d4ebfd0292d5d camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=1:732d4ebfd0292d5d +geom 20: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:f014b5da84e09bed camera=1:f014b5da84e09bed shadow=0:cbf29ce484222325 indirect=1:f014b5da84e09bed +geom 21: material #11 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:066197ed2710c38d camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=1:066197ed2710c38d +geom 22: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:4e4d6bcce34c50b1 camera=1:4e4d6bcce34c50b1 shadow=0:cbf29ce484222325 indirect=1:4e4d6bcce34c50b1 +geom 23: material #12 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:0e003cea519b18a9 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=1:0e003cea519b18a9 +geom 24: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:679dc81198e23bb9 camera=1:679dc81198e23bb9 shadow=0:cbf29ce484222325 indirect=1:679dc81198e23bb9 +geom 25: material #13 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:6bf177db96f63741 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=1:6bf177db96f63741 +geom 26: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:99f90281b6d667e1 camera=1:99f90281b6d667e1 shadow=0:cbf29ce484222325 indirect=1:99f90281b6d667e1 +geom 27: material #14 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:4ca17e2d9b105bd9 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=1:4ca17e2d9b105bd9 +geom 28: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:2f0ca5390a665599 camera=1:2f0ca5390a665599 shadow=0:cbf29ce484222325 indirect=1:2f0ca5390a665599 +geom 29: material #15 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:0b6402fef2a02f21 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=1:0b6402fef2a02f21 +geom 30: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:9c74f34ec4e2eb31 camera=1:9c74f34ec4e2eb31 shadow=0:cbf29ce484222325 indirect=1:9c74f34ec4e2eb31 +geom 31: material #16 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:4a71e473076398a9 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=1:4a71e473076398a9 +geom 32: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:8343ab8304674fb9 camera=1:8343ab8304674fb9 shadow=0:cbf29ce484222325 indirect=1:8343ab8304674fb9 +geom 33: material #17 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:b05362e02a44d841 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=1:b05362e02a44d841 +geom 34: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:428723332f2d7a41 camera=1:428723332f2d7a41 shadow=0:cbf29ce484222325 indirect=1:428723332f2d7a41 +geom 35: material #18 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:5dbd8ce486269e39 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=1:5dbd8ce486269e39 +geom 36: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:62f4520e66d7d399 camera=1:62f4520e66d7d399 shadow=0:cbf29ce484222325 indirect=1:62f4520e66d7d399 +geom 37: material #19 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:5b6860d83f116fa1 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=1:5b6860d83f116fa1 +geom 38: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:1598df00f7985771 camera=1:1598df00f7985771 shadow=0:cbf29ce484222325 indirect=1:1598df00f7985771 +geom 39: material #20 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:894f3cfd91c21d69 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=1:894f3cfd91c21d69 +geom 40: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:ca403f60f5cb04b9 camera=1:ca403f60f5cb04b9 shadow=0:cbf29ce484222325 indirect=1:ca403f60f5cb04b9 +geom 41: material #21 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:138d2318ab847041 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=1:138d2318ab847041 +geom 42: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:5f4e89a345b78f21 camera=1:5f4e89a345b78f21 shadow=0:cbf29ce484222325 indirect=1:5f4e89a345b78f21 +geom 43: material #22 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:4ec44778cf6bb919 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=1:4ec44778cf6bb919 +geom 44: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:86d34934dbe3a60b camera=1:86d34934dbe3a60b shadow=0:cbf29ce484222325 indirect=1:86d34934dbe3a60b +geom 45: material #23 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:45684b0e504b8f1b camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=1:45684b0e504b8f1b +geom 46: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:35afdeee2393e007 camera=1:35afdeee2393e007 shadow=0:cbf29ce484222325 indirect=1:35afdeee2393e007 +geom 47: material #24 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:9bdebf6cdfa62577 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=1:9bdebf6cdfa62577 +geom 48: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:8b430b492dbd44e3 camera=1:8b430b492dbd44e3 shadow=0:cbf29ce484222325 indirect=1:8b430b492dbd44e3 +geom 49: material #25 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:da0e6b17a7debf53 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=1:da0e6b17a7debf53 +geom 50: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:b0445e12964a7327 camera=1:b0445e12964a7327 shadow=0:cbf29ce484222325 indirect=1:b0445e12964a7327 +geom 51: material #26 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:5fb44fd5323d5c17 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=1:5fb44fd5323d5c17 +geom 52: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:302f2b4fb64029eb camera=1:302f2b4fb64029eb shadow=0:cbf29ce484222325 indirect=1:302f2b4fb64029eb +geom 53: material #27 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:aff0206150028ceb camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=1:aff0206150028ceb +geom 54: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:ba0035dd2ddf0937 camera=1:ba0035dd2ddf0937 shadow=0:cbf29ce484222325 indirect=1:ba0035dd2ddf0937 +geom 55: material #28 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:b98593fe1d73f937 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=1:b98593fe1d73f937 +geom 56: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:bdce78bd12b1ce73 camera=1:bdce78bd12b1ce73 shadow=0:cbf29ce484222325 indirect=1:bdce78bd12b1ce73 +geom 57: material #29 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:c1d433cb89807cd3 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=1:c1d433cb89807cd3 +geom 58: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:263d9d8e4c138057 camera=1:263d9d8e4c138057 shadow=0:cbf29ce484222325 indirect=1:263d9d8e4c138057 +geom 59: material #30 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:f565a0a4d23dc1b7 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=1:f565a0a4d23dc1b7 +geom 60: material #31 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:4e54bfce8bcfbcfa camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=1:4e54bfce8bcfbcfa +provenance light /World/Free: LightOrigin { index: 30, geoms: 60..61 } +provenance light /World/L0: LightOrigin { index: 0, geoms: 1..2 } +provenance light /World/L1: LightOrigin { index: 1, geoms: 3..4 } +provenance light /World/L10: LightOrigin { index: 10, geoms: 21..22 } +provenance light /World/L11: LightOrigin { index: 11, geoms: 23..24 } +provenance light /World/L12: LightOrigin { index: 12, geoms: 25..26 } +provenance light /World/L13: LightOrigin { index: 13, geoms: 27..28 } +provenance light /World/L14: LightOrigin { index: 14, geoms: 29..30 } +provenance light /World/L15: LightOrigin { index: 15, geoms: 31..32 } +provenance light /World/L16: LightOrigin { index: 16, geoms: 33..34 } +provenance light /World/L17: LightOrigin { index: 17, geoms: 35..36 } +provenance light /World/L18: LightOrigin { index: 18, geoms: 37..38 } +provenance light /World/L19: LightOrigin { index: 19, geoms: 39..40 } +provenance light /World/L2: LightOrigin { index: 2, geoms: 5..6 } +provenance light /World/L20: LightOrigin { index: 20, geoms: 41..42 } +provenance light /World/L21: LightOrigin { index: 21, geoms: 43..44 } +provenance light /World/L22: LightOrigin { index: 22, geoms: 45..46 } +provenance light /World/L23: LightOrigin { index: 23, geoms: 47..48 } +provenance light /World/L24: LightOrigin { index: 24, geoms: 49..50 } +provenance light /World/L25: LightOrigin { index: 25, geoms: 51..52 } +provenance light /World/L26: LightOrigin { index: 26, geoms: 53..54 } +provenance light /World/L27: LightOrigin { index: 27, geoms: 55..56 } +provenance light /World/L28: LightOrigin { index: 28, geoms: 57..58 } +provenance light /World/L29: LightOrigin { index: 29, geoms: 59..60 } +provenance light /World/L3: LightOrigin { index: 3, geoms: 7..8 } +provenance light /World/L4: LightOrigin { index: 4, geoms: 9..10 } +provenance light /World/L5: LightOrigin { index: 5, geoms: 11..12 } +provenance light /World/L6: LightOrigin { index: 6, geoms: 13..14 } +provenance light /World/L7: LightOrigin { index: 7, geoms: 15..16 } +provenance light /World/L8: LightOrigin { index: 8, geoms: 17..18 } +provenance light /World/L9: LightOrigin { index: 9, geoms: 19..20 } +provenance geometry 0..1: /World/O0 +provenance geometry 1..2: /World/L0 +provenance geometry 2..3: /World/O1 +provenance geometry 3..4: /World/L1 +provenance geometry 4..5: /World/O2 +provenance geometry 5..6: /World/L2 +provenance geometry 6..7: /World/O3 +provenance geometry 7..8: /World/L3 +provenance geometry 8..9: /World/O4 +provenance geometry 9..10: /World/L4 +provenance geometry 10..11: /World/O5 +provenance geometry 11..12: /World/L5 +provenance geometry 12..13: /World/O6 +provenance geometry 13..14: /World/L6 +provenance geometry 14..15: /World/O7 +provenance geometry 15..16: /World/L7 +provenance geometry 16..17: /World/O8 +provenance geometry 17..18: /World/L8 +provenance geometry 18..19: /World/O9 +provenance geometry 19..20: /World/L9 +provenance geometry 20..21: /World/O10 +provenance geometry 21..22: /World/L10 +provenance geometry 22..23: /World/O11 +provenance geometry 23..24: /World/L11 +provenance geometry 24..25: /World/O12 +provenance geometry 25..26: /World/L12 +provenance geometry 26..27: /World/O13 +provenance geometry 27..28: /World/L13 +provenance geometry 28..29: /World/O14 +provenance geometry 29..30: /World/L14 +provenance geometry 30..31: /World/O15 +provenance geometry 31..32: /World/L15 +provenance geometry 32..33: /World/O16 +provenance geometry 33..34: /World/L16 +provenance geometry 34..35: /World/O17 +provenance geometry 35..36: /World/L17 +provenance geometry 36..37: /World/O18 +provenance geometry 37..38: /World/L18 +provenance geometry 38..39: /World/O19 +provenance geometry 39..40: /World/L19 +provenance geometry 40..41: /World/O20 +provenance geometry 41..42: /World/L20 +provenance geometry 42..43: /World/O21 +provenance geometry 43..44: /World/L21 +provenance geometry 44..45: /World/O22 +provenance geometry 45..46: /World/L22 +provenance geometry 46..47: /World/O23 +provenance geometry 47..48: /World/L23 +provenance geometry 48..49: /World/O24 +provenance geometry 49..50: /World/L24 +provenance geometry 50..51: /World/O25 +provenance geometry 51..52: /World/L25 +provenance geometry 52..53: /World/O26 +provenance geometry 53..54: /World/L26 +provenance geometry 54..55: /World/O27 +provenance geometry 55..56: /World/L27 +provenance geometry 56..57: /World/O28 +provenance geometry 57..58: /World/L28 +provenance geometry 58..59: /World/O29 +provenance geometry 59..60: /World/L29 +provenance geometry 60..61: /World/Free +provenance spheres: [0, 2, 4, 6, 8, 10, 12, 14, 16, 18, 20, 22, 24, 26, 28, 30, 32, 34, 36, 38, 40, 42, 44, 46, 48, 50, 52, 54, 56, 58] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: None, cameras: [], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: None, offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/overflow_usda-c7dbcb2b55d9a450-1.image b/crates/crust-core/tests/data/import_baselines/overflow_usda-c7dbcb2b55d9a450-1.image new file mode 100644 index 000000000..c734c5b1d --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/overflow_usda-c7dbcb2b55d9a450-1.image @@ -0,0 +1 @@ +640x360 16spp clamp-off a04a09c0d4b5e325 diff --git a/crates/crust-core/tests/data/import_baselines/override_usda-b67a66c0201ba59a-1.digest b/crates/crust-core/tests/data/import_baselines/override_usda-b67a66c0201ba59a-1.digest new file mode 100644 index 000000000..8832f3f26 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/override_usda-b67a66c0201ba59a-1.digest @@ -0,0 +1,36 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/scene/camera1") +camera: Camera { origin: Vec3A(0.0074343784, 1.9913422, 4.0133057), lower_left_corner: Vec3A(-639.99176, -358.0082, -355.9867), horizontal: Vec3A(1279.9984, 0.0, 0.0), vertical: Vec3A(0.0, 719.9991, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 31.750044, orthographic: false, clip: CameraClip { near: Some(Vec4(0.0, 0.0, -1.0, 3.9133058)), far: Some(Vec4(0.0, 0.0, 1.0, 9995.986)), planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: None +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 640, height: 360, region: PixelRect { x0: 0, y0: 0, x1: 640, y1: 360 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 12.700017, aperture: [25.4, 25.4], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.02, focus_distance: 360.0 }), depth_of_field: true, motion_blur: false, layer_stack: ["$DIR/override.usda", "$ROOT/samples/cornellbox.usda"], invisible_overrides: Some(1) } +layer: $ROOT/samples/cornellbox.usda +layer: $DIR/override.usda +warning: Warning { code: MaterialFallbackDefault, kind: Skipped, count: 1, prims: ["/scene/Looks/initialShadingGroup"], message: "Material /scene/Looks/initialShadingGroup has no surface shader — using default grey OpenPBR" } +lights: 1 +light 0: dome name Some("/scene/Sky") lpe None pmf 1.0 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 4 geometries, PrimitiveBreakdown { triangles: 22, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 2 } top level, PrimitiveBreakdown { triangles: 782, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 2 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 4.0 motion [] pieces all=10:88b22fc3345d5b05 camera=10:88b22fc3345d5b05 shadow=10:88b22fc3345d5b05 indirect=10:88b22fc3345d5b05 +geom 1: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.2 motion [] pieces all=760:c2b60a75c52c78b9 camera=760:c2b60a75c52c78b9 shadow=760:c2b60a75c52c78b9 indirect=760:c2b60a75c52c78b9 +geom 2: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=12:94a297badef437e1 camera=12:94a297badef437e1 shadow=12:94a297badef437e1 indirect=12:94a297badef437e1 +geom 3: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.3585339 motion [] pieces all=760:2344ecf63e12c441 camera=760:2344ecf63e12c441 shadow=760:2344ecf63e12c441 indirect=760:2344ecf63e12c441 +provenance material /scene/Looks/initialShadingGroup: MaterialOrigin { slots: [0, 1, 2, 3], displaced: false } +provenance light /scene/Sky: LightOrigin { index: 0, geoms: 0..0 } +provenance geometry 0..1: /scene/pCube1 +provenance geometry 1..2: /scene/pSphere1 +provenance geometry 2..3: /scene/pCube2 +provenance geometry 3..4: /scene/pSphere2 +provenance mesh: MeshOrigin { geom_id: 0, slot: 0, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 1, slot: 1, baked: false, moving: false } +provenance mesh: MeshOrigin { geom_id: 2, slot: 2, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 3, slot: 1, baked: false, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 12343188411137242430, n_points: 8, n_indices: 20, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 1: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 17119738035130870988, n_points: 382, n_indices: 1560, n_uvs: None, smooth: false, material: 0 }), placements: 2, shared: false, displaced: false } +provenance mesh slot 2: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 1739488954094729910, n_points: 8, n_indices: 24, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: true, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/scene/camera1"), cameras: ["/scene/camera1"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/scene/camera1"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/override_usda-b67a66c0201ba59a-1.image b/crates/crust-core/tests/data/import_baselines/override_usda-b67a66c0201ba59a-1.image new file mode 100644 index 000000000..163c33547 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/override_usda-b67a66c0201ba59a-1.image @@ -0,0 +1 @@ +640x360 16spp clamp-off 0cd5fb8c1b32ce89 diff --git a/crates/crust-core/tests/data/import_baselines/overrides_usda-e08388bc2f33304d-1.digest b/crates/crust-core/tests/data/import_baselines/overrides_usda-e08388bc2f33304d-1.digest new file mode 100644 index 000000000..7367edd2a --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/overrides_usda-e08388bc2f33304d-1.digest @@ -0,0 +1,19 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/World/cam") +camera: Camera { origin: Vec3A(0.0, 0.0, 5.0), lower_left_corner: Vec3A(-2.7183647, -1.5290802, -5.0), horizontal: Vec3A(5.4367294, 0.0, 0.0), vertical: Vec3A(0.0, 3.0581603, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: Some("/Render/settings") +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 32, height: 18, region: PixelRect { x0: 0, y0: 0, x1: 32, y1: 18 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [AovProduct { prim_path: "/Render/a", name: "a.exr", vars: [AovVar { prim_path: "/Render/beauty", name: "beauty", channel_prefix: None, source: Color, components: 4, precision: Float, accumulation: Filtered, clear: 0.0, expression: None, raw: false, variance: false }], attributes: [] }], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 50.0, aperture: [20.955, 15.2908], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 10.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/overrides.usda"], invisible_overrides: Some(0) } +layer: $DIR/overrides.usda +warning: Warning { code: ProductCameraMismatch, kind: Skipped, count: 2, prims: ["/Render/b", "/Render/c"], message: "/Render/b: renders through /World/cam at 64x36, but the render is /World/cam at 32x18 (the first product's); crust renders one camera and resolution per stage, so no file is written for it" } +lights: 0 +volumes: 0 +world: 1 geometries, PrimitiveBreakdown { triangles: 0, spheres: 1, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 0, spheres: 1, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:fb1e7d48790aec95 camera=1:fb1e7d48790aec95 shadow=1:fb1e7d48790aec95 indirect=1:fb1e7d48790aec95 +provenance geometry 0..1: /World/ball +provenance spheres: [0] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/World/cam"), cameras: ["/World/other", "/World/cam"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/World/cam"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/overrides_usda-e08388bc2f33304d-1.image b/crates/crust-core/tests/data/import_baselines/overrides_usda-e08388bc2f33304d-1.image new file mode 100644 index 000000000..3013e04d8 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/overrides_usda-e08388bc2f33304d-1.image @@ -0,0 +1 @@ +32x18 16spp clamp-off 988ca9561494bf25 diff --git a/crates/crust-core/tests/data/import_baselines/partial_link_usda-0b6b5eacc86557dc-1.digest b/crates/crust-core/tests/data/import_baselines/partial_link_usda-0b6b5eacc86557dc-1.digest new file mode 100644 index 000000000..8e6cf3a42 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/partial_link_usda-0b6b5eacc86557dc-1.digest @@ -0,0 +1,23 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: None +camera: Camera { origin: Vec3A(15.0, 3.0, 3.0), lower_left_corner: Vec3A(4.8863316, -0.044797063, 4.174048), horizontal: Vec3A(1.2295314, 0.0, -6.147657), vertical: Vec3A(-0.44830504, 3.4967792, -0.08966101), u: Vec3A(0.19611613, 0.0, -0.9805807), v: Vec3A(-0.1271232, 0.991561, -0.02542464), lens_radius: 0.05, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: None +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 640, height: 360, region: PixelRect { x0: 0, y0: 0, x1: 640, y1: 360 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: None, depth_of_field: true, motion_blur: false, layer_stack: ["$DIR/partial_link.usda"], invisible_overrides: Some(0) } +layer: $DIR/partial_link.usda +warning: Warning { code: CameraMissing, kind: Skipped, count: 1, prims: [], message: "USD stage has no UsdGeomCamera — falling back to world::get_settings camera" } +lights: 1 +light 0: dome name Some("/World/Sky") lpe None pmf 1.0 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 2 geometries, PrimitiveBreakdown { triangles: 0, spheres: 2, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 0, spheres: 2, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 0 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:fb1e7d48790aec95 camera=1:fb1e7d48790aec95 shadow=1:fb1e7d48790aec95 indirect=1:fb1e7d48790aec95 +geom 1: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 1 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:fb1e7d48790aec95 camera=1:fb1e7d48790aec95 shadow=1:fb1e7d48790aec95 indirect=1:fb1e7d48790aec95 +provenance light /World/Sky: LightOrigin { index: 0, geoms: 2..2 } +provenance geometry 0..1: /World/B +provenance geometry 1..2: /World/A +provenance spheres: [0, 1] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: None, cameras: [], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: None, offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/partial_link_usda-0b6b5eacc86557dc-1.image b/crates/crust-core/tests/data/import_baselines/partial_link_usda-0b6b5eacc86557dc-1.image new file mode 100644 index 000000000..ef6a3bc1a --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/partial_link_usda-0b6b5eacc86557dc-1.image @@ -0,0 +1 @@ +640x360 16spp clamp-off 82fd92b977974e05 diff --git a/crates/crust-core/tests/data/import_baselines/pass_payload_usda-08d0e4051511c08a-1.digest b/crates/crust-core/tests/data/import_baselines/pass_payload_usda-08d0e4051511c08a-1.digest new file mode 100644 index 000000000..c495c0c3f --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/pass_payload_usda-08d0e4051511c08a-1.digest @@ -0,0 +1,24 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: None +camera: Camera { origin: Vec3A(15.0, 3.0, 3.0), lower_left_corner: Vec3A(4.8863316, -0.044797063, 4.174048), horizontal: Vec3A(1.2295314, 0.0, -6.147657), vertical: Vec3A(-0.44830504, 3.4967792, -0.08966101), u: Vec3A(0.19611613, 0.0, -0.9805807), v: Vec3A(-0.1271232, 0.991561, -0.02542464), lens_radius: 0.05, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: Some("/Render/settings") +settings: RenderSettings { samples_per_pixel: 3, max_depth: 32, width: 8, height: 8, region: PixelRect { x0: 0, y0: 0, x1: 8, y1: 8 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: Some(PassSummary { path: "/Render/Passes/fromPayload", holdouts: 3, camera_hidden: 0 }) +source: Source { lens: None, depth_of_field: true, motion_blur: false, layer_stack: ["$DIR/pass_payload.usda"], invisible_overrides: Some(0) } +layer: $DIR/matte_payload.usda +layer: $DIR/pass_payload.usda +warning: Warning { code: CameraMissing, kind: Skipped, count: 1, prims: [], message: "USD stage has no UsdGeomCamera — falling back to world::get_settings camera" } +lights: 0 +volumes: 0 +world: 3 geometries, PrimitiveBreakdown { triangles: 0, spheres: 3, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 0, spheres: 3, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout true transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:d51ecb642f0c8e15 camera=1:d51ecb642f0c8e15 shadow=1:d51ecb642f0c8e15 indirect=1:d51ecb642f0c8e15 +geom 1: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout true transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:468da3d80ce34d98 camera=1:468da3d80ce34d98 shadow=1:468da3d80ce34d98 indirect=1:468da3d80ce34d98 +geom 2: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout true transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:984632b55acb5495 camera=1:984632b55acb5495 shadow=1:984632b55acb5495 indirect=1:984632b55acb5495 +provenance geometry 0..1: /World/Prop2 +provenance geometry 1..2: /World/Prop1 +provenance geometry 2..3: /World/Prop0 +provenance spheres: [0, 1, 2] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: Some("/Render/Passes/fromPayload"), keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: None, cameras: [], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: None, offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/pass_payload_usda-08d0e4051511c08a-1.image b/crates/crust-core/tests/data/import_baselines/pass_payload_usda-08d0e4051511c08a-1.image new file mode 100644 index 000000000..8aad9360c --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/pass_payload_usda-08d0e4051511c08a-1.image @@ -0,0 +1 @@ +8x8 16spp clamp-off 9fa9e040e0eedf25 diff --git a/crates/crust-core/tests/data/import_baselines/pass_payload_usda-1eb9585660585792-1.digest b/crates/crust-core/tests/data/import_baselines/pass_payload_usda-1eb9585660585792-1.digest new file mode 100644 index 000000000..c495c0c3f --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/pass_payload_usda-1eb9585660585792-1.digest @@ -0,0 +1,24 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: None +camera: Camera { origin: Vec3A(15.0, 3.0, 3.0), lower_left_corner: Vec3A(4.8863316, -0.044797063, 4.174048), horizontal: Vec3A(1.2295314, 0.0, -6.147657), vertical: Vec3A(-0.44830504, 3.4967792, -0.08966101), u: Vec3A(0.19611613, 0.0, -0.9805807), v: Vec3A(-0.1271232, 0.991561, -0.02542464), lens_radius: 0.05, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: Some("/Render/settings") +settings: RenderSettings { samples_per_pixel: 3, max_depth: 32, width: 8, height: 8, region: PixelRect { x0: 0, y0: 0, x1: 8, y1: 8 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: Some(PassSummary { path: "/Render/Passes/fromPayload", holdouts: 3, camera_hidden: 0 }) +source: Source { lens: None, depth_of_field: true, motion_blur: false, layer_stack: ["$DIR/pass_payload.usda"], invisible_overrides: Some(0) } +layer: $DIR/matte_payload.usda +layer: $DIR/pass_payload.usda +warning: Warning { code: CameraMissing, kind: Skipped, count: 1, prims: [], message: "USD stage has no UsdGeomCamera — falling back to world::get_settings camera" } +lights: 0 +volumes: 0 +world: 3 geometries, PrimitiveBreakdown { triangles: 0, spheres: 3, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 0, spheres: 3, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout true transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:d51ecb642f0c8e15 camera=1:d51ecb642f0c8e15 shadow=1:d51ecb642f0c8e15 indirect=1:d51ecb642f0c8e15 +geom 1: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout true transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:468da3d80ce34d98 camera=1:468da3d80ce34d98 shadow=1:468da3d80ce34d98 indirect=1:468da3d80ce34d98 +geom 2: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout true transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:984632b55acb5495 camera=1:984632b55acb5495 shadow=1:984632b55acb5495 indirect=1:984632b55acb5495 +provenance geometry 0..1: /World/Prop2 +provenance geometry 1..2: /World/Prop1 +provenance geometry 2..3: /World/Prop0 +provenance spheres: [0, 1, 2] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: Some("/Render/Passes/fromPayload"), keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: None, cameras: [], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: None, offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/pass_payload_usda-1eb9585660585792-1.image b/crates/crust-core/tests/data/import_baselines/pass_payload_usda-1eb9585660585792-1.image new file mode 100644 index 000000000..8aad9360c --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/pass_payload_usda-1eb9585660585792-1.image @@ -0,0 +1 @@ +8x8 16spp clamp-off 9fa9e040e0eedf25 diff --git a/crates/crust-core/tests/data/import_baselines/passes_dome_twice_usda-0b80861de0309489-1.digest b/crates/crust-core/tests/data/import_baselines/passes_dome_twice_usda-0b80861de0309489-1.digest new file mode 100644 index 000000000..dcff1c5b1 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/passes_dome_twice_usda-0b80861de0309489-1.digest @@ -0,0 +1,35 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/World/Cam") +camera: Camera { origin: Vec3A(0.0, 1.6, 7.0), lower_left_corner: Vec3A(-4.530607, -2.3153963, -2.5480032), horizontal: Vec3A(9.061214, -0.0, 0.0), vertical: Vec3A(0.0, 5.0473304, -0.7093561), u: Vec3A(1.0, -0.0, 0.0), v: Vec3A(0.0, 0.9902681, -0.13917312), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: Some("/Render/settings") +settings: RenderSettings { samples_per_pixel: 64, max_depth: 4, width: 160, height: 90, region: PixelRect { x0: 0, y0: 0, x1: 160, y1: 90 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [AovProduct { prim_path: "/Render/Products/props", name: "props.exr", vars: [AovVar { prim_path: "/Render/Vars/color", name: "color", channel_prefix: None, source: Color, components: 4, precision: Float, accumulation: Filtered, clear: 0.0, expression: None, raw: false, variance: false }], attributes: [] }], precomp: None } +pass: Some(PassSummary { path: "/Render/Passes/charDome", holdouts: 3, camera_hidden: 0 }) +source: Source { lens: Some(Lens { focal_length: 30.0, aperture: [20.955, 15.2908], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 10.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/passes_dome_twice.usda"], invisible_overrides: Some(0) } +layer: $DIR/passes_dome_twice.usda +lights: 2 +light 0: dome name Some("/World/Sky") lpe None pmf 0.5 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 1: area name Some("/World/Key") lpe None pmf 0.5 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 5 geometries, PrimitiveBreakdown { triangles: 14, spheres: 3, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 14, spheres: 3, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +geom 0: material #0 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:3d65c4a843c183d8 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=1:3d65c4a843c183d8 +geom 1: material #1 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout true transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:0fb1fc996bb64f06 camera=1:0fb1fc996bb64f06 shadow=1:0fb1fc996bb64f06 indirect=1:0fb1fc996bb64f06 +geom 2: material #2 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout true transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=12:1b27d3862a39596d camera=12:1b27d3862a39596d shadow=12:1b27d3862a39596d indirect=12:1b27d3862a39596d +geom 3: material #2 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:9366fea1438aeb8c camera=1:9366fea1438aeb8c shadow=1:9366fea1438aeb8c indirect=1:9366fea1438aeb8c +geom 4: material #2 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout true transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:be0b97004c4d3e85 camera=2:be0b97004c4d3e85 shadow=2:be0b97004c4d3e85 indirect=2:be0b97004c4d3e85 +provenance material /World/Looks/Mirror: MaterialOrigin { slots: [1], displaced: false } +provenance light /World/Key: LightOrigin { index: 1, geoms: 0..1 } +provenance light /World/Sky: LightOrigin { index: 0, geoms: 0..0 } +provenance geometry 0..1: /World/Key +provenance geometry 1..2: /World/Props/MirrorBall +provenance geometry 2..3: /World/Props/Crate +provenance geometry 3..4: /World/Chars/Hero +provenance geometry 4..5: /World/Set/Floor +provenance mesh: MeshOrigin { geom_id: 2, slot: 0, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 4, slot: 1, baked: true, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 11523204089106361411, n_points: 8, n_indices: 24, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 1: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 8416296582947184296, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [1, 3] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: Some("/Render/Passes/charDome"), keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/World/Cam"), cameras: ["/World/Cam"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/World/Cam"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/passes_dome_twice_usda-0b80861de0309489-1.image b/crates/crust-core/tests/data/import_baselines/passes_dome_twice_usda-0b80861de0309489-1.image new file mode 100644 index 000000000..f3308c5f4 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/passes_dome_twice_usda-0b80861de0309489-1.image @@ -0,0 +1 @@ +160x90 16spp clamp-off ff9997f401c32c9b diff --git a/crates/crust-core/tests/data/import_baselines/passes_dome_twice_usda-bdae79d96585e6fd-1.digest b/crates/crust-core/tests/data/import_baselines/passes_dome_twice_usda-bdae79d96585e6fd-1.digest new file mode 100644 index 000000000..10b288e3b --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/passes_dome_twice_usda-bdae79d96585e6fd-1.digest @@ -0,0 +1,35 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/World/Cam") +camera: Camera { origin: Vec3A(0.0, 1.6, 7.0), lower_left_corner: Vec3A(-4.530607, -2.3153963, -2.5480032), horizontal: Vec3A(9.061214, -0.0, 0.0), vertical: Vec3A(0.0, 5.0473304, -0.7093561), u: Vec3A(1.0, -0.0, 0.0), v: Vec3A(0.0, 0.9902681, -0.13917312), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: Some("/Render/settings") +settings: RenderSettings { samples_per_pixel: 64, max_depth: 4, width: 160, height: 90, region: PixelRect { x0: 0, y0: 0, x1: 160, y1: 90 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [AovProduct { prim_path: "/Render/Products/props", name: "props.exr", vars: [AovVar { prim_path: "/Render/Vars/color", name: "color", channel_prefix: None, source: Color, components: 4, precision: Float, accumulation: Filtered, clear: 0.0, expression: None, raw: false, variance: false }], attributes: [] }], precomp: None } +pass: Some(PassSummary { path: "/Render/Passes/dome", holdouts: 4, camera_hidden: 0 }) +source: Source { lens: Some(Lens { focal_length: 30.0, aperture: [20.955, 15.2908], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 10.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/passes_dome_twice.usda"], invisible_overrides: Some(0) } +layer: $DIR/passes_dome_twice.usda +lights: 2 +light 0: dome name Some("/World/Sky") lpe None pmf 0.5 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 1: area name Some("/World/Key") lpe None pmf 0.5 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 5 geometries, PrimitiveBreakdown { triangles: 14, spheres: 3, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 14, spheres: 3, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +geom 0: material #0 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:3d65c4a843c183d8 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=1:3d65c4a843c183d8 +geom 1: material #1 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout true transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:0fb1fc996bb64f06 camera=1:0fb1fc996bb64f06 shadow=1:0fb1fc996bb64f06 indirect=1:0fb1fc996bb64f06 +geom 2: material #2 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout true transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=12:1b27d3862a39596d camera=12:1b27d3862a39596d shadow=12:1b27d3862a39596d indirect=12:1b27d3862a39596d +geom 3: material #2 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout true transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:9366fea1438aeb8c camera=1:9366fea1438aeb8c shadow=1:9366fea1438aeb8c indirect=1:9366fea1438aeb8c +geom 4: material #2 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout true transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:be0b97004c4d3e85 camera=2:be0b97004c4d3e85 shadow=2:be0b97004c4d3e85 indirect=2:be0b97004c4d3e85 +provenance material /World/Looks/Mirror: MaterialOrigin { slots: [1], displaced: false } +provenance light /World/Key: LightOrigin { index: 1, geoms: 0..1 } +provenance light /World/Sky: LightOrigin { index: 0, geoms: 0..0 } +provenance geometry 0..1: /World/Key +provenance geometry 1..2: /World/Props/MirrorBall +provenance geometry 2..3: /World/Props/Crate +provenance geometry 3..4: /World/Chars/Hero +provenance geometry 4..5: /World/Set/Floor +provenance mesh: MeshOrigin { geom_id: 2, slot: 0, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 4, slot: 1, baked: true, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 11523204089106361411, n_points: 8, n_indices: 24, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 1: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 8416296582947184296, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [1, 3] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: Some("/Render/Passes/dome"), keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/World/Cam"), cameras: ["/World/Cam"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/World/Cam"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/passes_dome_twice_usda-bdae79d96585e6fd-1.image b/crates/crust-core/tests/data/import_baselines/passes_dome_twice_usda-bdae79d96585e6fd-1.image new file mode 100644 index 000000000..f5af96874 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/passes_dome_twice_usda-bdae79d96585e6fd-1.image @@ -0,0 +1 @@ +160x90 16spp clamp-off 7ed7cd2fc6b96859 diff --git a/crates/crust-core/tests/data/import_baselines/passes_dome_twice_usda-c05e0c1783414e94-1.digest b/crates/crust-core/tests/data/import_baselines/passes_dome_twice_usda-c05e0c1783414e94-1.digest new file mode 100644 index 000000000..4dd00666a --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/passes_dome_twice_usda-c05e0c1783414e94-1.digest @@ -0,0 +1,35 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/World/Cam") +camera: Camera { origin: Vec3A(0.0, 1.6, 7.0), lower_left_corner: Vec3A(-4.530607, -2.3153963, -2.5480032), horizontal: Vec3A(9.061214, -0.0, 0.0), vertical: Vec3A(0.0, 5.0473304, -0.7093561), u: Vec3A(1.0, -0.0, 0.0), v: Vec3A(0.0, 0.9902681, -0.13917312), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: Some("/Render/settings") +settings: RenderSettings { samples_per_pixel: 64, max_depth: 4, width: 160, height: 90, region: PixelRect { x0: 0, y0: 0, x1: 160, y1: 90 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [AovProduct { prim_path: "/Render/Products/props", name: "props.exr", vars: [AovVar { prim_path: "/Render/Vars/color", name: "color", channel_prefix: None, source: Color, components: 4, precision: Float, accumulation: Filtered, clear: 0.0, expression: None, raw: false, variance: false }], attributes: [] }], precomp: None } +pass: Some(PassSummary { path: "/Render/Passes/props", holdouts: 1, camera_hidden: 0 }) +source: Source { lens: Some(Lens { focal_length: 30.0, aperture: [20.955, 15.2908], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 10.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/passes_dome_twice.usda"], invisible_overrides: Some(0) } +layer: $DIR/passes_dome_twice.usda +lights: 2 +light 0: dome name Some("/World/Sky") lpe None pmf 0.5 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 1: area name Some("/World/Key") lpe None pmf 0.5 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 5 geometries, PrimitiveBreakdown { triangles: 14, spheres: 3, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 14, spheres: 3, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +geom 0: material #0 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:3d65c4a843c183d8 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=1:3d65c4a843c183d8 +geom 1: material #1 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:0fb1fc996bb64f06 camera=1:0fb1fc996bb64f06 shadow=1:0fb1fc996bb64f06 indirect=1:0fb1fc996bb64f06 +geom 2: material #2 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=12:1b27d3862a39596d camera=12:1b27d3862a39596d shadow=12:1b27d3862a39596d indirect=12:1b27d3862a39596d +geom 3: material #2 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout true transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:9366fea1438aeb8c camera=1:9366fea1438aeb8c shadow=1:9366fea1438aeb8c indirect=1:9366fea1438aeb8c +geom 4: material #2 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:be0b97004c4d3e85 camera=2:be0b97004c4d3e85 shadow=2:be0b97004c4d3e85 indirect=2:be0b97004c4d3e85 +provenance material /World/Looks/Mirror: MaterialOrigin { slots: [1], displaced: false } +provenance light /World/Key: LightOrigin { index: 1, geoms: 0..1 } +provenance light /World/Sky: LightOrigin { index: 0, geoms: 0..0 } +provenance geometry 0..1: /World/Key +provenance geometry 1..2: /World/Props/MirrorBall +provenance geometry 2..3: /World/Props/Crate +provenance geometry 3..4: /World/Chars/Hero +provenance geometry 4..5: /World/Set/Floor +provenance mesh: MeshOrigin { geom_id: 2, slot: 0, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 4, slot: 1, baked: true, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 11523204089106361411, n_points: 8, n_indices: 24, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 1: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 8416296582947184296, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [1, 3] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: Some("/Render/Passes/props"), keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/World/Cam"), cameras: ["/World/Cam"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/World/Cam"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/passes_dome_twice_usda-c05e0c1783414e94-1.image b/crates/crust-core/tests/data/import_baselines/passes_dome_twice_usda-c05e0c1783414e94-1.image new file mode 100644 index 000000000..c13b4afd5 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/passes_dome_twice_usda-c05e0c1783414e94-1.image @@ -0,0 +1 @@ +160x90 16spp clamp-off c7f0a23e13ad7fb3 diff --git a/crates/crust-core/tests/data/import_baselines/passes_dome_twice_usda-e9d62fba57fc58f7-1.digest b/crates/crust-core/tests/data/import_baselines/passes_dome_twice_usda-e9d62fba57fc58f7-1.digest new file mode 100644 index 000000000..7a796c19f --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/passes_dome_twice_usda-e9d62fba57fc58f7-1.digest @@ -0,0 +1,35 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/World/Cam") +camera: Camera { origin: Vec3A(0.0, 1.6, 7.0), lower_left_corner: Vec3A(-4.530607, -2.3153963, -2.5480032), horizontal: Vec3A(9.061214, -0.0, 0.0), vertical: Vec3A(0.0, 5.0473304, -0.7093561), u: Vec3A(1.0, -0.0, 0.0), v: Vec3A(0.0, 0.9902681, -0.13917312), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: Some("/Render/settings") +settings: RenderSettings { samples_per_pixel: 64, max_depth: 4, width: 160, height: 90, region: PixelRect { x0: 0, y0: 0, x1: 160, y1: 90 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [AovProduct { prim_path: "/Render/Products/props", name: "props.exr", vars: [AovVar { prim_path: "/Render/Vars/color", name: "color", channel_prefix: None, source: Color, components: 4, precision: Float, accumulation: Filtered, clear: 0.0, expression: None, raw: false, variance: false }], attributes: [] }], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 30.0, aperture: [20.955, 15.2908], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 10.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/passes_dome_twice.usda"], invisible_overrides: Some(0) } +layer: $DIR/passes_dome_twice.usda +lights: 2 +light 0: dome name Some("/World/Sky") lpe None pmf 0.5 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 1: area name Some("/World/Key") lpe None pmf 0.5 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 5 geometries, PrimitiveBreakdown { triangles: 14, spheres: 3, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 14, spheres: 3, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +geom 0: material #0 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:3d65c4a843c183d8 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=1:3d65c4a843c183d8 +geom 1: material #1 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:0fb1fc996bb64f06 camera=1:0fb1fc996bb64f06 shadow=1:0fb1fc996bb64f06 indirect=1:0fb1fc996bb64f06 +geom 2: material #2 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=12:1b27d3862a39596d camera=12:1b27d3862a39596d shadow=12:1b27d3862a39596d indirect=12:1b27d3862a39596d +geom 3: material #2 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:9366fea1438aeb8c camera=1:9366fea1438aeb8c shadow=1:9366fea1438aeb8c indirect=1:9366fea1438aeb8c +geom 4: material #2 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:be0b97004c4d3e85 camera=2:be0b97004c4d3e85 shadow=2:be0b97004c4d3e85 indirect=2:be0b97004c4d3e85 +provenance material /World/Looks/Mirror: MaterialOrigin { slots: [1], displaced: false } +provenance light /World/Key: LightOrigin { index: 1, geoms: 0..1 } +provenance light /World/Sky: LightOrigin { index: 0, geoms: 0..0 } +provenance geometry 0..1: /World/Key +provenance geometry 1..2: /World/Props/MirrorBall +provenance geometry 2..3: /World/Props/Crate +provenance geometry 3..4: /World/Chars/Hero +provenance geometry 4..5: /World/Set/Floor +provenance mesh: MeshOrigin { geom_id: 2, slot: 0, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 4, slot: 1, baked: true, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 11523204089106361411, n_points: 8, n_indices: 24, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 1: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 8416296582947184296, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [1, 3] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/World/Cam"), cameras: ["/World/Cam"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/World/Cam"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/passes_dome_twice_usda-e9d62fba57fc58f7-1.image b/crates/crust-core/tests/data/import_baselines/passes_dome_twice_usda-e9d62fba57fc58f7-1.image new file mode 100644 index 000000000..a78e01ae7 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/passes_dome_twice_usda-e9d62fba57fc58f7-1.image @@ -0,0 +1 @@ +160x90 16spp clamp-off c795054d39051d29 diff --git a/crates/crust-core/tests/data/import_baselines/passes_hidden_in_back_usda-5e69798956b67766-1.digest b/crates/crust-core/tests/data/import_baselines/passes_hidden_in_back_usda-5e69798956b67766-1.digest new file mode 100644 index 000000000..95dce9149 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/passes_hidden_in_back_usda-5e69798956b67766-1.digest @@ -0,0 +1,35 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/World/Cam") +camera: Camera { origin: Vec3A(0.0, 1.6, 7.0), lower_left_corner: Vec3A(-4.530607, -2.3153963, -2.5480032), horizontal: Vec3A(9.061214, -0.0, 0.0), vertical: Vec3A(0.0, 5.0473304, -0.7093561), u: Vec3A(1.0, -0.0, 0.0), v: Vec3A(0.0, 0.9902681, -0.13917312), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: Some("/Render/settings") +settings: RenderSettings { samples_per_pixel: 64, max_depth: 4, width: 160, height: 90, region: PixelRect { x0: 0, y0: 0, x1: 160, y1: 90 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [AovProduct { prim_path: "/Render/Products/props", name: "props.exr", vars: [AovVar { prim_path: "/Render/Vars/color", name: "color", channel_prefix: None, source: Color, components: 4, precision: Float, accumulation: Filtered, clear: 0.0, expression: None, raw: false, variance: false }], attributes: [] }], precomp: None } +pass: Some(PassSummary { path: "/Render/Passes/propsBack", holdouts: 0, camera_hidden: 1 }) +source: Source { lens: Some(Lens { focal_length: 30.0, aperture: [20.955, 15.2908], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 10.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/passes_hidden_in_back.usda"], invisible_overrides: Some(0) } +layer: $DIR/passes_hidden_in_back.usda +lights: 2 +light 0: dome name Some("/World/Sky") lpe None pmf 0.5 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 1: area name Some("/World/Key") lpe None pmf 0.5 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 5 geometries, PrimitiveBreakdown { triangles: 14, spheres: 3, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 14, spheres: 3, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +geom 0: material #0 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:3d65c4a843c183d8 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=1:3d65c4a843c183d8 +geom 1: material #1 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:0fb1fc996bb64f06 camera=1:0fb1fc996bb64f06 shadow=1:0fb1fc996bb64f06 indirect=1:0fb1fc996bb64f06 +geom 2: material #2 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=12:1b27d3862a39596d camera=12:1b27d3862a39596d shadow=12:1b27d3862a39596d indirect=12:1b27d3862a39596d +geom 3: material #2 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:9366fea1438aeb8c camera=0:cbf29ce484222325 shadow=1:9366fea1438aeb8c indirect=1:9366fea1438aeb8c +geom 4: material #2 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:be0b97004c4d3e85 camera=2:be0b97004c4d3e85 shadow=2:be0b97004c4d3e85 indirect=2:be0b97004c4d3e85 +provenance material /World/Looks/Mirror: MaterialOrigin { slots: [1], displaced: false } +provenance light /World/Key: LightOrigin { index: 1, geoms: 0..1 } +provenance light /World/Sky: LightOrigin { index: 0, geoms: 0..0 } +provenance geometry 0..1: /World/Key +provenance geometry 1..2: /World/Props/MirrorBall +provenance geometry 2..3: /World/Props/Crate +provenance geometry 3..4: /World/Chars/Hero +provenance geometry 4..5: /World/Set/Floor +provenance mesh: MeshOrigin { geom_id: 2, slot: 0, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 4, slot: 1, baked: true, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 11523204089106361411, n_points: 8, n_indices: 24, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 1: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 8416296582947184296, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [1, 3] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: Some("/Render/Passes/propsBack"), keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/World/Cam"), cameras: ["/World/Cam"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/World/Cam"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/passes_hidden_in_back_usda-5e69798956b67766-1.image b/crates/crust-core/tests/data/import_baselines/passes_hidden_in_back_usda-5e69798956b67766-1.image new file mode 100644 index 000000000..6252140b5 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/passes_hidden_in_back_usda-5e69798956b67766-1.image @@ -0,0 +1 @@ +160x90 16spp clamp-off f9e1234baa5d4ee3 diff --git a/crates/crust-core/tests/data/import_baselines/passes_hidden_in_back_usda-5e69798956b67766-2.digest b/crates/crust-core/tests/data/import_baselines/passes_hidden_in_back_usda-5e69798956b67766-2.digest new file mode 100644 index 000000000..95dce9149 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/passes_hidden_in_back_usda-5e69798956b67766-2.digest @@ -0,0 +1,35 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/World/Cam") +camera: Camera { origin: Vec3A(0.0, 1.6, 7.0), lower_left_corner: Vec3A(-4.530607, -2.3153963, -2.5480032), horizontal: Vec3A(9.061214, -0.0, 0.0), vertical: Vec3A(0.0, 5.0473304, -0.7093561), u: Vec3A(1.0, -0.0, 0.0), v: Vec3A(0.0, 0.9902681, -0.13917312), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: Some("/Render/settings") +settings: RenderSettings { samples_per_pixel: 64, max_depth: 4, width: 160, height: 90, region: PixelRect { x0: 0, y0: 0, x1: 160, y1: 90 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [AovProduct { prim_path: "/Render/Products/props", name: "props.exr", vars: [AovVar { prim_path: "/Render/Vars/color", name: "color", channel_prefix: None, source: Color, components: 4, precision: Float, accumulation: Filtered, clear: 0.0, expression: None, raw: false, variance: false }], attributes: [] }], precomp: None } +pass: Some(PassSummary { path: "/Render/Passes/propsBack", holdouts: 0, camera_hidden: 1 }) +source: Source { lens: Some(Lens { focal_length: 30.0, aperture: [20.955, 15.2908], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 10.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/passes_hidden_in_back.usda"], invisible_overrides: Some(0) } +layer: $DIR/passes_hidden_in_back.usda +lights: 2 +light 0: dome name Some("/World/Sky") lpe None pmf 0.5 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 1: area name Some("/World/Key") lpe None pmf 0.5 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 5 geometries, PrimitiveBreakdown { triangles: 14, spheres: 3, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 14, spheres: 3, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +geom 0: material #0 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:3d65c4a843c183d8 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=1:3d65c4a843c183d8 +geom 1: material #1 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:0fb1fc996bb64f06 camera=1:0fb1fc996bb64f06 shadow=1:0fb1fc996bb64f06 indirect=1:0fb1fc996bb64f06 +geom 2: material #2 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=12:1b27d3862a39596d camera=12:1b27d3862a39596d shadow=12:1b27d3862a39596d indirect=12:1b27d3862a39596d +geom 3: material #2 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:9366fea1438aeb8c camera=0:cbf29ce484222325 shadow=1:9366fea1438aeb8c indirect=1:9366fea1438aeb8c +geom 4: material #2 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:be0b97004c4d3e85 camera=2:be0b97004c4d3e85 shadow=2:be0b97004c4d3e85 indirect=2:be0b97004c4d3e85 +provenance material /World/Looks/Mirror: MaterialOrigin { slots: [1], displaced: false } +provenance light /World/Key: LightOrigin { index: 1, geoms: 0..1 } +provenance light /World/Sky: LightOrigin { index: 0, geoms: 0..0 } +provenance geometry 0..1: /World/Key +provenance geometry 1..2: /World/Props/MirrorBall +provenance geometry 2..3: /World/Props/Crate +provenance geometry 3..4: /World/Chars/Hero +provenance geometry 4..5: /World/Set/Floor +provenance mesh: MeshOrigin { geom_id: 2, slot: 0, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 4, slot: 1, baked: true, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 11523204089106361411, n_points: 8, n_indices: 24, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 1: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 8416296582947184296, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [1, 3] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: Some("/Render/Passes/propsBack"), keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/World/Cam"), cameras: ["/World/Cam"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/World/Cam"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/passes_hidden_in_back_usda-5e69798956b67766-2.image b/crates/crust-core/tests/data/import_baselines/passes_hidden_in_back_usda-5e69798956b67766-2.image new file mode 100644 index 000000000..6252140b5 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/passes_hidden_in_back_usda-5e69798956b67766-2.image @@ -0,0 +1 @@ +160x90 16spp clamp-off f9e1234baa5d4ee3 diff --git a/crates/crust-core/tests/data/import_baselines/passes_hidden_in_back_usda-ad65d77e744f59b2-1.digest b/crates/crust-core/tests/data/import_baselines/passes_hidden_in_back_usda-ad65d77e744f59b2-1.digest new file mode 100644 index 000000000..30c87b6a8 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/passes_hidden_in_back_usda-ad65d77e744f59b2-1.digest @@ -0,0 +1,35 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/World/Cam") +camera: Camera { origin: Vec3A(0.0, 1.6, 7.0), lower_left_corner: Vec3A(-4.530607, -2.3153963, -2.5480032), horizontal: Vec3A(9.061214, -0.0, 0.0), vertical: Vec3A(0.0, 5.0473304, -0.7093561), u: Vec3A(1.0, -0.0, 0.0), v: Vec3A(0.0, 0.9902681, -0.13917312), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: Some("/Render/settings") +settings: RenderSettings { samples_per_pixel: 64, max_depth: 4, width: 160, height: 90, region: PixelRect { x0: 0, y0: 0, x1: 160, y1: 90 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [AovProduct { prim_path: "/Render/Products/props", name: "props.exr", vars: [AovVar { prim_path: "/Render/Vars/color", name: "color", channel_prefix: None, source: Color, components: 4, precision: Float, accumulation: Filtered, clear: 0.0, expression: None, raw: false, variance: false }], attributes: [] }], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 30.0, aperture: [20.955, 15.2908], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 10.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/passes_hidden_in_back.usda"], invisible_overrides: Some(0) } +layer: $DIR/passes_hidden_in_back.usda +lights: 2 +light 0: dome name Some("/World/Sky") lpe None pmf 0.5 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 1: area name Some("/World/Key") lpe None pmf 0.5 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 5 geometries, PrimitiveBreakdown { triangles: 14, spheres: 3, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 14, spheres: 3, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +geom 0: material #0 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:3d65c4a843c183d8 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=1:3d65c4a843c183d8 +geom 1: material #1 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:0fb1fc996bb64f06 camera=1:0fb1fc996bb64f06 shadow=1:0fb1fc996bb64f06 indirect=1:0fb1fc996bb64f06 +geom 2: material #2 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=12:1b27d3862a39596d camera=12:1b27d3862a39596d shadow=12:1b27d3862a39596d indirect=12:1b27d3862a39596d +geom 3: material #2 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:9366fea1438aeb8c camera=1:9366fea1438aeb8c shadow=1:9366fea1438aeb8c indirect=1:9366fea1438aeb8c +geom 4: material #2 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:be0b97004c4d3e85 camera=2:be0b97004c4d3e85 shadow=2:be0b97004c4d3e85 indirect=2:be0b97004c4d3e85 +provenance material /World/Looks/Mirror: MaterialOrigin { slots: [1], displaced: false } +provenance light /World/Key: LightOrigin { index: 1, geoms: 0..1 } +provenance light /World/Sky: LightOrigin { index: 0, geoms: 0..0 } +provenance geometry 0..1: /World/Key +provenance geometry 1..2: /World/Props/MirrorBall +provenance geometry 2..3: /World/Props/Crate +provenance geometry 3..4: /World/Chars/Hero +provenance geometry 4..5: /World/Set/Floor +provenance mesh: MeshOrigin { geom_id: 2, slot: 0, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 4, slot: 1, baked: true, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 11523204089106361411, n_points: 8, n_indices: 24, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 1: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 8416296582947184296, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [1, 3] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/World/Cam"), cameras: ["/World/Cam"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/World/Cam"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/passes_hidden_in_back_usda-ad65d77e744f59b2-1.image b/crates/crust-core/tests/data/import_baselines/passes_hidden_in_back_usda-ad65d77e744f59b2-1.image new file mode 100644 index 000000000..a78e01ae7 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/passes_hidden_in_back_usda-ad65d77e744f59b2-1.image @@ -0,0 +1 @@ +160x90 16spp clamp-off c795054d39051d29 diff --git a/crates/crust-core/tests/data/import_baselines/passes_hidden_in_back_usda-ad65d77e744f59b2-2.digest b/crates/crust-core/tests/data/import_baselines/passes_hidden_in_back_usda-ad65d77e744f59b2-2.digest new file mode 100644 index 000000000..30c87b6a8 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/passes_hidden_in_back_usda-ad65d77e744f59b2-2.digest @@ -0,0 +1,35 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/World/Cam") +camera: Camera { origin: Vec3A(0.0, 1.6, 7.0), lower_left_corner: Vec3A(-4.530607, -2.3153963, -2.5480032), horizontal: Vec3A(9.061214, -0.0, 0.0), vertical: Vec3A(0.0, 5.0473304, -0.7093561), u: Vec3A(1.0, -0.0, 0.0), v: Vec3A(0.0, 0.9902681, -0.13917312), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: Some("/Render/settings") +settings: RenderSettings { samples_per_pixel: 64, max_depth: 4, width: 160, height: 90, region: PixelRect { x0: 0, y0: 0, x1: 160, y1: 90 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [AovProduct { prim_path: "/Render/Products/props", name: "props.exr", vars: [AovVar { prim_path: "/Render/Vars/color", name: "color", channel_prefix: None, source: Color, components: 4, precision: Float, accumulation: Filtered, clear: 0.0, expression: None, raw: false, variance: false }], attributes: [] }], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 30.0, aperture: [20.955, 15.2908], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 10.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/passes_hidden_in_back.usda"], invisible_overrides: Some(0) } +layer: $DIR/passes_hidden_in_back.usda +lights: 2 +light 0: dome name Some("/World/Sky") lpe None pmf 0.5 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 1: area name Some("/World/Key") lpe None pmf 0.5 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 5 geometries, PrimitiveBreakdown { triangles: 14, spheres: 3, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 14, spheres: 3, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +geom 0: material #0 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:3d65c4a843c183d8 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=1:3d65c4a843c183d8 +geom 1: material #1 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:0fb1fc996bb64f06 camera=1:0fb1fc996bb64f06 shadow=1:0fb1fc996bb64f06 indirect=1:0fb1fc996bb64f06 +geom 2: material #2 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=12:1b27d3862a39596d camera=12:1b27d3862a39596d shadow=12:1b27d3862a39596d indirect=12:1b27d3862a39596d +geom 3: material #2 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:9366fea1438aeb8c camera=1:9366fea1438aeb8c shadow=1:9366fea1438aeb8c indirect=1:9366fea1438aeb8c +geom 4: material #2 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:be0b97004c4d3e85 camera=2:be0b97004c4d3e85 shadow=2:be0b97004c4d3e85 indirect=2:be0b97004c4d3e85 +provenance material /World/Looks/Mirror: MaterialOrigin { slots: [1], displaced: false } +provenance light /World/Key: LightOrigin { index: 1, geoms: 0..1 } +provenance light /World/Sky: LightOrigin { index: 0, geoms: 0..0 } +provenance geometry 0..1: /World/Key +provenance geometry 1..2: /World/Props/MirrorBall +provenance geometry 2..3: /World/Props/Crate +provenance geometry 3..4: /World/Chars/Hero +provenance geometry 4..5: /World/Set/Floor +provenance mesh: MeshOrigin { geom_id: 2, slot: 0, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 4, slot: 1, baked: true, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 11523204089106361411, n_points: 8, n_indices: 24, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 1: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 8416296582947184296, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [1, 3] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/World/Cam"), cameras: ["/World/Cam"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/World/Cam"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/passes_hidden_in_back_usda-ad65d77e744f59b2-2.image b/crates/crust-core/tests/data/import_baselines/passes_hidden_in_back_usda-ad65d77e744f59b2-2.image new file mode 100644 index 000000000..a78e01ae7 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/passes_hidden_in_back_usda-ad65d77e744f59b2-2.image @@ -0,0 +1 @@ +160x90 16spp clamp-off c795054d39051d29 diff --git a/crates/crust-core/tests/data/import_baselines/passes_hidden_in_back_usda-e4f2c0c97dbe1a55-1.digest b/crates/crust-core/tests/data/import_baselines/passes_hidden_in_back_usda-e4f2c0c97dbe1a55-1.digest new file mode 100644 index 000000000..704d18515 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/passes_hidden_in_back_usda-e4f2c0c97dbe1a55-1.digest @@ -0,0 +1,35 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/World/Cam") +camera: Camera { origin: Vec3A(0.0, 1.6, 7.0), lower_left_corner: Vec3A(-4.530607, -2.3153963, -2.5480032), horizontal: Vec3A(9.061214, -0.0, 0.0), vertical: Vec3A(0.0, 5.0473304, -0.7093561), u: Vec3A(1.0, -0.0, 0.0), v: Vec3A(0.0, 0.9902681, -0.13917312), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: Some("/Render/charSettings") +settings: RenderSettings { samples_per_pixel: 64, max_depth: 4, width: 160, height: 90, region: PixelRect { x0: 0, y0: 0, x1: 160, y1: 90 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [AovProduct { prim_path: "/Render/Products/char", name: "char.exr", vars: [AovVar { prim_path: "/Render/Vars/color", name: "color", channel_prefix: None, source: Color, components: 4, precision: Float, accumulation: Filtered, clear: 0.0, expression: None, raw: false, variance: false }], attributes: [] }], precomp: None } +pass: Some(PassSummary { path: "/Render/Passes/char", holdouts: 3, camera_hidden: 0 }) +source: Source { lens: Some(Lens { focal_length: 30.0, aperture: [20.955, 15.2908], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 10.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/passes_hidden_in_back.usda"], invisible_overrides: Some(0) } +layer: $DIR/passes_hidden_in_back.usda +lights: 2 +light 0: dome name Some("/World/Sky") lpe None pmf 0.5 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 1: area name Some("/World/Key") lpe None pmf 0.5 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 5 geometries, PrimitiveBreakdown { triangles: 14, spheres: 3, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 14, spheres: 3, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +geom 0: material #0 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:3d65c4a843c183d8 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=1:3d65c4a843c183d8 +geom 1: material #1 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout true transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:0fb1fc996bb64f06 camera=1:0fb1fc996bb64f06 shadow=1:0fb1fc996bb64f06 indirect=1:0fb1fc996bb64f06 +geom 2: material #2 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout true transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=12:1b27d3862a39596d camera=12:1b27d3862a39596d shadow=12:1b27d3862a39596d indirect=12:1b27d3862a39596d +geom 3: material #2 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:9366fea1438aeb8c camera=1:9366fea1438aeb8c shadow=1:9366fea1438aeb8c indirect=1:9366fea1438aeb8c +geom 4: material #2 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout true transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:be0b97004c4d3e85 camera=2:be0b97004c4d3e85 shadow=2:be0b97004c4d3e85 indirect=2:be0b97004c4d3e85 +provenance material /World/Looks/Mirror: MaterialOrigin { slots: [1], displaced: false } +provenance light /World/Key: LightOrigin { index: 1, geoms: 0..1 } +provenance light /World/Sky: LightOrigin { index: 0, geoms: 0..0 } +provenance geometry 0..1: /World/Key +provenance geometry 1..2: /World/Props/MirrorBall +provenance geometry 2..3: /World/Props/Crate +provenance geometry 3..4: /World/Chars/Hero +provenance geometry 4..5: /World/Set/Floor +provenance mesh: MeshOrigin { geom_id: 2, slot: 0, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 4, slot: 1, baked: true, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 11523204089106361411, n_points: 8, n_indices: 24, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 1: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 8416296582947184296, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [1, 3] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: Some("/Render/Passes/char"), keep_geometry: false }, render_settings: Some("/Render/charSettings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/World/Cam"), cameras: ["/World/Cam"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/World/Cam"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/passes_hidden_in_back_usda-e4f2c0c97dbe1a55-1.image b/crates/crust-core/tests/data/import_baselines/passes_hidden_in_back_usda-e4f2c0c97dbe1a55-1.image new file mode 100644 index 000000000..dcfec9d74 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/passes_hidden_in_back_usda-e4f2c0c97dbe1a55-1.image @@ -0,0 +1 @@ +160x90 16spp clamp-off b2d9bbb91a775474 diff --git a/crates/crust-core/tests/data/import_baselines/passes_hidden_in_back_usda-e4f2c0c97dbe1a55-2.digest b/crates/crust-core/tests/data/import_baselines/passes_hidden_in_back_usda-e4f2c0c97dbe1a55-2.digest new file mode 100644 index 000000000..704d18515 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/passes_hidden_in_back_usda-e4f2c0c97dbe1a55-2.digest @@ -0,0 +1,35 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/World/Cam") +camera: Camera { origin: Vec3A(0.0, 1.6, 7.0), lower_left_corner: Vec3A(-4.530607, -2.3153963, -2.5480032), horizontal: Vec3A(9.061214, -0.0, 0.0), vertical: Vec3A(0.0, 5.0473304, -0.7093561), u: Vec3A(1.0, -0.0, 0.0), v: Vec3A(0.0, 0.9902681, -0.13917312), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: Some("/Render/charSettings") +settings: RenderSettings { samples_per_pixel: 64, max_depth: 4, width: 160, height: 90, region: PixelRect { x0: 0, y0: 0, x1: 160, y1: 90 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [AovProduct { prim_path: "/Render/Products/char", name: "char.exr", vars: [AovVar { prim_path: "/Render/Vars/color", name: "color", channel_prefix: None, source: Color, components: 4, precision: Float, accumulation: Filtered, clear: 0.0, expression: None, raw: false, variance: false }], attributes: [] }], precomp: None } +pass: Some(PassSummary { path: "/Render/Passes/char", holdouts: 3, camera_hidden: 0 }) +source: Source { lens: Some(Lens { focal_length: 30.0, aperture: [20.955, 15.2908], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 10.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/passes_hidden_in_back.usda"], invisible_overrides: Some(0) } +layer: $DIR/passes_hidden_in_back.usda +lights: 2 +light 0: dome name Some("/World/Sky") lpe None pmf 0.5 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 1: area name Some("/World/Key") lpe None pmf 0.5 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 5 geometries, PrimitiveBreakdown { triangles: 14, spheres: 3, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 14, spheres: 3, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +geom 0: material #0 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:3d65c4a843c183d8 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=1:3d65c4a843c183d8 +geom 1: material #1 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout true transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:0fb1fc996bb64f06 camera=1:0fb1fc996bb64f06 shadow=1:0fb1fc996bb64f06 indirect=1:0fb1fc996bb64f06 +geom 2: material #2 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout true transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=12:1b27d3862a39596d camera=12:1b27d3862a39596d shadow=12:1b27d3862a39596d indirect=12:1b27d3862a39596d +geom 3: material #2 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:9366fea1438aeb8c camera=1:9366fea1438aeb8c shadow=1:9366fea1438aeb8c indirect=1:9366fea1438aeb8c +geom 4: material #2 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout true transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:be0b97004c4d3e85 camera=2:be0b97004c4d3e85 shadow=2:be0b97004c4d3e85 indirect=2:be0b97004c4d3e85 +provenance material /World/Looks/Mirror: MaterialOrigin { slots: [1], displaced: false } +provenance light /World/Key: LightOrigin { index: 1, geoms: 0..1 } +provenance light /World/Sky: LightOrigin { index: 0, geoms: 0..0 } +provenance geometry 0..1: /World/Key +provenance geometry 1..2: /World/Props/MirrorBall +provenance geometry 2..3: /World/Props/Crate +provenance geometry 3..4: /World/Chars/Hero +provenance geometry 4..5: /World/Set/Floor +provenance mesh: MeshOrigin { geom_id: 2, slot: 0, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 4, slot: 1, baked: true, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 11523204089106361411, n_points: 8, n_indices: 24, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 1: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 8416296582947184296, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [1, 3] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: Some("/Render/Passes/char"), keep_geometry: false }, render_settings: Some("/Render/charSettings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/World/Cam"), cameras: ["/World/Cam"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/World/Cam"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/passes_hidden_in_back_usda-e4f2c0c97dbe1a55-2.image b/crates/crust-core/tests/data/import_baselines/passes_hidden_in_back_usda-e4f2c0c97dbe1a55-2.image new file mode 100644 index 000000000..dcfec9d74 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/passes_hidden_in_back_usda-e4f2c0c97dbe1a55-2.image @@ -0,0 +1 @@ +160x90 16spp clamp-off b2d9bbb91a775474 diff --git a/crates/crust-core/tests/data/import_baselines/passes_usda-562a5b3a04949a47-1.digest b/crates/crust-core/tests/data/import_baselines/passes_usda-562a5b3a04949a47-1.digest new file mode 100644 index 000000000..2d50ef508 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/passes_usda-562a5b3a04949a47-1.digest @@ -0,0 +1,26 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/World/cam") +camera: Camera { origin: Vec3A(0.0, 0.0, 0.0), lower_left_corner: Vec3A(-5.0, -3.75, -10.0), horizontal: Vec3A(10.0, 0.0, 0.0), vertical: Vec3A(0.0, 7.5, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: Some("/Render/settings") +settings: RenderSettings { samples_per_pixel: 16, max_depth: 2, width: 32, height: 24, region: PixelRect { x0: 0, y0: 0, x1: 32, y1: 24 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [AovProduct { prim_path: "/Render/p", name: "p.exr", vars: [AovVar { prim_path: "/Render/C", name: "C", channel_prefix: None, source: Color, components: 3, precision: Float, accumulation: Filtered, clear: 0.0, expression: None, raw: false, variance: false }, AovVar { prim_path: "/Render/matte", name: "matte", channel_prefix: None, source: Primvar(PrimvarSource { index: 0, components: 1, role: Float }), components: 1, precision: Float, accumulation: Filtered, clear: 0.0, expression: None, raw: false, variance: false }, AovVar { prim_path: "/Render/depth", name: "depth", channel_prefix: None, source: Depth, components: 1, precision: Float, accumulation: Closest, clear: inf, expression: None, raw: false, variance: false }, AovVar { prim_path: "/Render/depth_filtered", name: "depth_filtered", channel_prefix: None, source: Depth, components: 1, precision: Float, accumulation: Filtered, clear: inf, expression: None, raw: false, variance: false }, AovVar { prim_path: "/Render/variance", name: "variance", channel_prefix: None, source: Variance, components: 1, precision: Float, accumulation: Filtered, clear: 0.0, expression: None, raw: false, variance: false }, AovVar { prim_path: "/Render/look_out", name: "look_out", channel_prefix: None, source: Filter(FilterSource { display: false, filter: 0, output: 0, components: 3, radiance: true }), components: 3, precision: Float, accumulation: Filtered, clear: 0.0, expression: None, raw: false, variance: false }], attributes: [] }], precomp: Some(Precomp { sample_filters: ["/Render/look"], display_filters: [], display: "beauty" }) } +pass: Some(PassSummary { path: "/Render/a", holdouts: 0, camera_hidden: 0 }) +source: Source { lens: Some(Lens { focal_length: 24.0, aperture: [24.0, 18.0], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 10.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/passes.usda"], invisible_overrides: Some(0) } +layer: $DIR/passes.usda +lights: 1 +light 0: dome name Some("/World/sky") lpe None pmf 1.0 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 2 geometries, PrimitiveBreakdown { triangles: 4, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 4, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov Some((Some(0), false)) swapped false curves false scale 1.0 motion [] pieces all=2:2a13523c8e09c13d camera=2:2a13523c8e09c13d shadow=2:2a13523c8e09c13d indirect=2:2a13523c8e09c13d +geom 1: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:31db52e4afd4a225 camera=2:31db52e4afd4a225 shadow=2:31db52e4afd4a225 indirect=2:31db52e4afd4a225 +provenance light /World/sky: LightOrigin { index: 0, geoms: 0..0 } +provenance geometry 0..1: /World/Card +provenance geometry 1..2: /World/Wall +provenance mesh: MeshOrigin { geom_id: 0, slot: 0, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 1, slot: 1, baked: true, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 3430351340666728903, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 1: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 13118596165941616386, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: Some("/Render/a"), keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: true, working: None, camera: Some("/World/cam"), cameras: ["/World/cam"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [("matte", 1)], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/World/cam"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/passes_usda-562a5b3a04949a47-1.image b/crates/crust-core/tests/data/import_baselines/passes_usda-562a5b3a04949a47-1.image new file mode 100644 index 000000000..f08c49d36 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/passes_usda-562a5b3a04949a47-1.image @@ -0,0 +1 @@ +32x24 16spp clamp-off e72b7b7cff87e77d diff --git a/crates/crust-core/tests/data/import_baselines/passes_usda-aaa6ef1b16e7d6b6-1.digest b/crates/crust-core/tests/data/import_baselines/passes_usda-aaa6ef1b16e7d6b6-1.digest new file mode 100644 index 000000000..48f780d8a --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/passes_usda-aaa6ef1b16e7d6b6-1.digest @@ -0,0 +1,27 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/World/cam") +camera: Camera { origin: Vec3A(0.0, 0.0, 0.0), lower_left_corner: Vec3A(-5.0, -3.75, -10.0), horizontal: Vec3A(10.0, 0.0, 0.0), vertical: Vec3A(0.0, 7.5, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: Some("/Render/other") +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 32, height: 24, region: PixelRect { x0: 0, y0: 0, x1: 32, y1: 24 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [AovProduct { prim_path: "/Render/p", name: "p.exr", vars: [AovVar { prim_path: "/Render/C", name: "C", channel_prefix: None, source: Color, components: 3, precision: Float, accumulation: Filtered, clear: 0.0, expression: None, raw: false, variance: false }, AovVar { prim_path: "/Render/matte", name: "matte", channel_prefix: None, source: Primvar(PrimvarSource { index: 0, components: 1, role: Float }), components: 1, precision: Float, accumulation: Filtered, clear: 0.0, expression: None, raw: false, variance: false }, AovVar { prim_path: "/Render/depth", name: "depth", channel_prefix: None, source: Depth, components: 1, precision: Float, accumulation: Closest, clear: inf, expression: None, raw: false, variance: false }, AovVar { prim_path: "/Render/depth_filtered", name: "depth_filtered", channel_prefix: None, source: Depth, components: 1, precision: Float, accumulation: Filtered, clear: inf, expression: None, raw: false, variance: false }, AovVar { prim_path: "/Render/variance", name: "variance", channel_prefix: None, source: Variance, components: 1, precision: Float, accumulation: Filtered, clear: 0.0, expression: None, raw: false, variance: false }], attributes: [] }], precomp: Some(Precomp { sample_filters: [], display_filters: ["/Render/soft"], display: "beauty" }) } +pass: Some(PassSummary { path: "/Render/b", holdouts: 0, camera_hidden: 0 }) +source: Source { lens: Some(Lens { focal_length: 24.0, aperture: [24.0, 18.0], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 10.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/passes.usda"], invisible_overrides: Some(0) } +layer: $DIR/passes.usda +warning: Warning { code: PrecompUnknownFilter, kind: Skipped, count: 1, prims: ["/Render/look_out"], message: "/Render/look_out: crust:filter targets /Render/look, which is in neither crust:sampleFilters nor crust:displayFilters; no channel written" } +lights: 1 +light 0: dome name Some("/World/sky") lpe None pmf 1.0 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 2 geometries, PrimitiveBreakdown { triangles: 4, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 4, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov Some((Some(0), false)) swapped false curves false scale 1.0 motion [] pieces all=2:2a13523c8e09c13d camera=2:2a13523c8e09c13d shadow=2:2a13523c8e09c13d indirect=2:2a13523c8e09c13d +geom 1: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:31db52e4afd4a225 camera=2:31db52e4afd4a225 shadow=2:31db52e4afd4a225 indirect=2:31db52e4afd4a225 +provenance light /World/sky: LightOrigin { index: 0, geoms: 0..0 } +provenance geometry 0..1: /World/Card +provenance geometry 1..2: /World/Wall +provenance mesh: MeshOrigin { geom_id: 0, slot: 0, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 1, slot: 1, baked: true, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 3430351340666728903, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 1: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 13118596165941616386, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: Some("/Render/b"), keep_geometry: false }, render_settings: Some("/Render/other"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: true, working: None, camera: Some("/World/cam"), cameras: ["/World/cam"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [("matte", 1)], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/World/cam"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/passes_usda-aaa6ef1b16e7d6b6-1.image b/crates/crust-core/tests/data/import_baselines/passes_usda-aaa6ef1b16e7d6b6-1.image new file mode 100644 index 000000000..45a729bc6 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/passes_usda-aaa6ef1b16e7d6b6-1.image @@ -0,0 +1 @@ +32x24 16spp clamp-off a4dfebf308d21bdf diff --git a/crates/crust-core/tests/data/import_baselines/payload_camera_usda-ff33ccc1b50862a6-1.digest b/crates/crust-core/tests/data/import_baselines/payload_camera_usda-ff33ccc1b50862a6-1.digest new file mode 100644 index 000000000..1b511e554 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/payload_camera_usda-ff33ccc1b50862a6-1.digest @@ -0,0 +1,19 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/World/cam") +camera: Camera { origin: Vec3A(0.0, 0.0, 5.0), lower_left_corner: Vec3A(-2.29362, -1.5290802, -5.0), horizontal: Vec3A(4.58724, 0.0, 0.0), vertical: Vec3A(0.0, 3.0581603, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: Some("/Render/settings") +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 48, height: 32, region: PixelRect { x0: 0, y0: 0, x1: 48, y1: 32 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [AovProduct { prim_path: "/Render/p", name: "p.exr", vars: [AovVar { prim_path: "/Render/beauty", name: "beauty", channel_prefix: None, source: Color, components: 4, precision: Float, accumulation: Filtered, clear: 0.0, expression: None, raw: false, variance: false }], attributes: [] }], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 50.0, aperture: [20.955, 15.2908], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 10.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/payload_camera.usda"], invisible_overrides: Some(0) } +layer: $DIR/payload_camera.usda +layer: $DIR/payload_camera_payload.usda +lights: 0 +volumes: 0 +world: 1 geometries, PrimitiveBreakdown { triangles: 0, spheres: 1, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 0, spheres: 1, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:fb1e7d48790aec95 camera=1:fb1e7d48790aec95 shadow=1:fb1e7d48790aec95 indirect=1:fb1e7d48790aec95 +provenance geometry 0..1: /World/ball +provenance spheres: [0] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/World/cam"), cameras: ["/World/cam"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/World/cam"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/payload_camera_usda-ff33ccc1b50862a6-1.image b/crates/crust-core/tests/data/import_baselines/payload_camera_usda-ff33ccc1b50862a6-1.image new file mode 100644 index 000000000..73127af8f --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/payload_camera_usda-ff33ccc1b50862a6-1.image @@ -0,0 +1 @@ +48x32 16spp clamp-off 68685c488793c325 diff --git a/crates/crust-core/tests/data/import_baselines/payload_links_usda-f941f0e5247354e6-1.digest b/crates/crust-core/tests/data/import_baselines/payload_links_usda-f941f0e5247354e6-1.digest new file mode 100644 index 000000000..fcc33dd9b --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/payload_links_usda-f941f0e5247354e6-1.digest @@ -0,0 +1,25 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/World/Cam") +camera: Camera { origin: Vec3A(0.0, 6.0, 0.0), lower_left_corner: Vec3A(-5.142858, -4.0, 5.142858), horizontal: Vec3A(10.285716, -0.0, 0.0), vertical: Vec3A(0.0, 2.2838878e-15, -10.285716), u: Vec3A(1.0, -0.0, 0.0), v: Vec3A(0.0, 2.220446e-16, -1.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: Some("/Render/settings") +settings: RenderSettings { samples_per_pixel: 16, max_depth: 1, width: 16, height: 16, region: PixelRect { x0: 0, y0: 0, x1: 16, y1: 16 }, min_samples_per_pixel: 16, variance_threshold: 0.0, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: None, light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 35.0, aperture: [36.0, 36.0], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 10.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/payload_links.usda"], invisible_overrides: Some(0) } +layer: $DIR/payload_links.usda +layer: $DIR/payload_links_layer.usda +lights: 0 +volumes: 0 +world: 3 geometries, PrimitiveBreakdown { triangles: 2, spheres: 2, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 2, spheres: 2, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +geom 0: material #0 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=0:cbf29ce484222325 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=0:cbf29ce484222325 +geom 1: material #1 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:ee76fd7ed45c4a85 camera=1:ee76fd7ed45c4a85 shadow=1:ee76fd7ed45c4a85 indirect=1:ee76fd7ed45c4a85 +geom 2: material #1 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:fce6de5b675a55c5 camera=2:fce6de5b675a55c5 shadow=2:fce6de5b675a55c5 indirect=2:fce6de5b675a55c5 +provenance geometry 0..1: /World/Key +provenance geometry 1..2: /World/Hero +provenance geometry 2..3: /World/Floor +provenance mesh: MeshOrigin { geom_id: 2, slot: 0, baked: true, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 14903623499644419787, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [1] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/World/Cam"), cameras: ["/World/Cam"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/World/Cam"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/payload_links_usda-f941f0e5247354e6-1.image b/crates/crust-core/tests/data/import_baselines/payload_links_usda-f941f0e5247354e6-1.image new file mode 100644 index 000000000..0b1b824a5 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/payload_links_usda-f941f0e5247354e6-1.image @@ -0,0 +1 @@ +16x16 16spp clamp-off 7e8e0fa784351325 diff --git a/crates/crust-core/tests/data/import_baselines/payload_usda-af189ff27792ed9c-1.digest b/crates/crust-core/tests/data/import_baselines/payload_usda-af189ff27792ed9c-1.digest new file mode 100644 index 000000000..4540872f3 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/payload_usda-af189ff27792ed9c-1.digest @@ -0,0 +1,37 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: None +camera: Camera { origin: Vec3A(15.0, 3.0, 3.0), lower_left_corner: Vec3A(4.8863316, -0.044797063, 4.174048), horizontal: Vec3A(1.2295314, 0.0, -6.147657), vertical: Vec3A(-0.44830504, 3.4967792, -0.08966101), u: Vec3A(0.19611613, 0.0, -0.9805807), v: Vec3A(-0.1271232, 0.991561, -0.02542464), lens_radius: 0.05, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: None +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 640, height: 360, region: PixelRect { x0: 0, y0: 0, x1: 640, y1: 360 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: None, depth_of_field: true, motion_blur: false, layer_stack: ["$DIR/payload.usda"], invisible_overrides: Some(0) } +layer: $DIR/b.usda +layer: $DIR/payload.usda +warning: Warning { code: CameraMissing, kind: Skipped, count: 1, prims: [], message: "USD stage has no UsdGeomCamera — falling back to world::get_settings camera" } +lights: 0 +volumes: 0 +world: 4 geometries, PrimitiveBreakdown { triangles: 8, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 8, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:658935472ec9d838 camera=2:658935472ec9d838 shadow=2:658935472ec9d838 indirect=2:658935472ec9d838 +geom 1: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:71682785a2d90a85 camera=2:71682785a2d90a85 shadow=2:71682785a2d90a85 indirect=2:71682785a2d90a85 +geom 2: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:e52d9a39978026c5 camera=2:e52d9a39978026c5 shadow=2:e52d9a39978026c5 indirect=2:e52d9a39978026c5 +geom 3: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:7f0030950a4845b8 camera=2:7f0030950a4845b8 shadow=2:7f0030950a4845b8 indirect=2:7f0030950a4845b8 +provenance material /World/B/Looks/Blue: MaterialOrigin { slots: [0, 1, 2, 3], displaced: false } +provenance material read: ("/B/Looks/Blue", "/World/B/Looks/Blue") +provenance material read: ("/B/Looks/Blue/S", "/World/B/Looks/Blue") +provenance geometry 0..1: /World/A/Quad +provenance geometry 1..2: /World/B/Geo/Quad +provenance geometry 2..3: /World/C/Quad +provenance geometry 3..4: /World/D/Quad +provenance mesh: MeshOrigin { geom_id: 0, slot: 0, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 1, slot: 1, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 2, slot: 2, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 3, slot: 3, baked: true, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 5062424276489054560, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 1: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 9056688765093257811, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 2: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 204846636954257726, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 3: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 10907505002769619754, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: None, cameras: [], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: None, offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/payload_usda-af189ff27792ed9c-1.image b/crates/crust-core/tests/data/import_baselines/payload_usda-af189ff27792ed9c-1.image new file mode 100644 index 000000000..c734c5b1d --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/payload_usda-af189ff27792ed9c-1.image @@ -0,0 +1 @@ +640x360 16spp clamp-off a04a09c0d4b5e325 diff --git a/crates/crust-core/tests/data/import_baselines/photometric_usda-644b1d1ebbe4cb72-1.digest b/crates/crust-core/tests/data/import_baselines/photometric_usda-644b1d1ebbe4cb72-1.digest new file mode 100644 index 000000000..02f195571 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/photometric_usda-644b1d1ebbe4cb72-1.digest @@ -0,0 +1,16 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/cam") +camera: Camera { origin: Vec3A(0.0, 0.0, 0.0), lower_left_corner: Vec3A(-2.7183647, -1.5290802, -10.0), horizontal: Vec3A(5.4367294, 0.0, 0.0), vertical: Vec3A(0.0, 3.0581603, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: None +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 640, height: 360, region: PixelRect { x0: 0, y0: 0, x1: 640, y1: 360 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.5 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 50.0, aperture: [20.955, 15.2908], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 10.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/photometric.usda"], invisible_overrides: Some(0) } +layer: $DIR/photometric.usda +lights: 0 +volumes: 0 +world: 0 geometries, PrimitiveBreakdown { triangles: 0, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 0, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/cam"), cameras: ["/cam"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/cam"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/photometric_usda-644b1d1ebbe4cb72-1.image b/crates/crust-core/tests/data/import_baselines/photometric_usda-644b1d1ebbe4cb72-1.image new file mode 100644 index 000000000..c734c5b1d --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/photometric_usda-644b1d1ebbe4cb72-1.image @@ -0,0 +1 @@ +640x360 16spp clamp-off a04a09c0d4b5e325 diff --git a/crates/crust-core/tests/data/import_baselines/pinhole_unauthored_usda-ecde60dead7180c2-1.digest b/crates/crust-core/tests/data/import_baselines/pinhole_unauthored_usda-ecde60dead7180c2-1.digest new file mode 100644 index 000000000..8d6f21b9a --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/pinhole_unauthored_usda-ecde60dead7180c2-1.digest @@ -0,0 +1,16 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/World/Cam") +camera: Camera { origin: Vec3A(0.0, 0.0, 0.0), lower_left_corner: Vec3A(-2.7183647, -1.5290802, -10.0), horizontal: Vec3A(5.4367294, 0.0, 0.0), vertical: Vec3A(0.0, 3.0581603, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: None +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 640, height: 360, region: PixelRect { x0: 0, y0: 0, x1: 640, y1: 360 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 50.0, aperture: [20.955, 15.2908], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 10.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/pinhole_unauthored.usda"], invisible_overrides: Some(0) } +layer: $DIR/pinhole_unauthored.usda +lights: 0 +volumes: 0 +world: 0 geometries, PrimitiveBreakdown { triangles: 0, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 0, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/World/Cam"), cameras: ["/World/Cam"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/World/Cam"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/pinhole_unauthored_usda-ecde60dead7180c2-1.image b/crates/crust-core/tests/data/import_baselines/pinhole_unauthored_usda-ecde60dead7180c2-1.image new file mode 100644 index 000000000..c734c5b1d --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/pinhole_unauthored_usda-ecde60dead7180c2-1.image @@ -0,0 +1 @@ +640x360 16spp clamp-off a04a09c0d4b5e325 diff --git a/crates/crust-core/tests/data/import_baselines/pinhole_zero_usda-9f676d1852dc7168-1.digest b/crates/crust-core/tests/data/import_baselines/pinhole_zero_usda-9f676d1852dc7168-1.digest new file mode 100644 index 000000000..b601b3b44 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/pinhole_zero_usda-9f676d1852dc7168-1.digest @@ -0,0 +1,16 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/World/Cam") +camera: Camera { origin: Vec3A(0.0, 0.0, 0.0), lower_left_corner: Vec3A(-2.7183647, -1.5290802, -10.0), horizontal: Vec3A(5.4367294, 0.0, 0.0), vertical: Vec3A(0.0, 3.0581603, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: None +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 640, height: 360, region: PixelRect { x0: 0, y0: 0, x1: 640, y1: 360 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 50.0, aperture: [20.955, 15.2908], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 10.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/pinhole_zero.usda"], invisible_overrides: Some(0) } +layer: $DIR/pinhole_zero.usda +lights: 0 +volumes: 0 +world: 0 geometries, PrimitiveBreakdown { triangles: 0, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 0, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/World/Cam"), cameras: ["/World/Cam"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/World/Cam"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/pinhole_zero_usda-9f676d1852dc7168-1.image b/crates/crust-core/tests/data/import_baselines/pinhole_zero_usda-9f676d1852dc7168-1.image new file mode 100644 index 000000000..c734c5b1d --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/pinhole_zero_usda-9f676d1852dc7168-1.image @@ -0,0 +1 @@ +640x360 16spp clamp-off a04a09c0d4b5e325 diff --git a/crates/crust-core/tests/data/import_baselines/pivot_stack_usda-eabcdb11552ea0a9-1.digest b/crates/crust-core/tests/data/import_baselines/pivot_stack_usda-eabcdb11552ea0a9-1.digest new file mode 100644 index 000000000..9b32a3fc6 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/pivot_stack_usda-eabcdb11552ea0a9-1.digest @@ -0,0 +1,21 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: None +camera: Camera { origin: Vec3A(15.0, 3.0, 3.0), lower_left_corner: Vec3A(4.8863316, -0.044797063, 4.174048), horizontal: Vec3A(1.2295314, 0.0, -6.147657), vertical: Vec3A(-0.44830504, 3.4967792, -0.08966101), u: Vec3A(0.19611613, 0.0, -0.9805807), v: Vec3A(-0.1271232, 0.991561, -0.02542464), lens_radius: 0.05, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: None +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 640, height: 360, region: PixelRect { x0: 0, y0: 0, x1: 640, y1: 360 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: None, depth_of_field: true, motion_blur: false, layer_stack: ["$DIR/pivot_stack.usda"], invisible_overrides: Some(0) } +layer: $DIR/pivot_stack.usda +warning: Warning { code: CameraMissing, kind: Skipped, count: 1, prims: [], message: "USD stage has no UsdGeomCamera — falling back to world::get_settings camera" } +lights: 0 +volumes: 0 +world: 1 geometries, PrimitiveBreakdown { triangles: 1, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 1, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 2.0 motion [] pieces all=1:211f1bd4edf051b5 camera=1:211f1bd4edf051b5 shadow=1:211f1bd4edf051b5 indirect=1:211f1bd4edf051b5 +provenance geometry 0..1: /M +provenance mesh: MeshOrigin { geom_id: 0, slot: 0, baked: true, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 8649346730649907223, n_points: 3, n_indices: 3, n_uvs: None, smooth: true, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: None, cameras: [], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: None, offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/pivot_stack_usda-eabcdb11552ea0a9-1.image b/crates/crust-core/tests/data/import_baselines/pivot_stack_usda-eabcdb11552ea0a9-1.image new file mode 100644 index 000000000..c734c5b1d --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/pivot_stack_usda-eabcdb11552ea0a9-1.image @@ -0,0 +1 @@ +640x360 16spp clamp-off a04a09c0d4b5e325 diff --git a/crates/crust-core/tests/data/import_baselines/pixel_filter_usda-c618794e70f5ffe3-1.digest b/crates/crust-core/tests/data/import_baselines/pixel_filter_usda-c618794e70f5ffe3-1.digest new file mode 100644 index 000000000..0572e6802 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/pixel_filter_usda-c618794e70f5ffe3-1.digest @@ -0,0 +1,19 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: None +camera: Camera { origin: Vec3A(15.0, 3.0, 3.0), lower_left_corner: Vec3A(4.8863316, -0.044797063, 4.174048), horizontal: Vec3A(1.2295314, 0.0, -6.147657), vertical: Vec3A(-0.44830504, 3.4967792, -0.08966101), u: Vec3A(0.19611613, 0.0, -0.9805807), v: Vec3A(-0.1271232, 0.991561, -0.02542464), lens_radius: 0.05, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: Some("/Render/settings") +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 64, height: 64, region: PixelRect { x0: 0, y0: 0, x1: 64, y1: 64 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Mitchell { radius: 1.25 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: None, depth_of_field: true, motion_blur: false, layer_stack: ["$DIR/pixel_filter.usda"], invisible_overrides: Some(0) } +layer: $DIR/pixel_filter.usda +warning: Warning { code: CameraMissing, kind: Skipped, count: 1, prims: [], message: "USD stage has no UsdGeomCamera — falling back to world::get_settings camera" } +lights: 0 +volumes: 0 +world: 1 geometries, PrimitiveBreakdown { triangles: 0, spheres: 1, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 0, spheres: 1, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:984632b55acb5495 camera=1:984632b55acb5495 shadow=1:984632b55acb5495 indirect=1:984632b55acb5495 +provenance geometry 0..1: /W/s +provenance spheres: [0] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: None, cameras: [], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: None, offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/pixel_filter_usda-c618794e70f5ffe3-1.image b/crates/crust-core/tests/data/import_baselines/pixel_filter_usda-c618794e70f5ffe3-1.image new file mode 100644 index 000000000..aac9ec548 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/pixel_filter_usda-c618794e70f5ffe3-1.image @@ -0,0 +1 @@ +64x64 16spp clamp-off 68c00ea49d512325 diff --git a/crates/crust-core/tests/data/import_baselines/place_once_usda-66a0c16b42b4539e-1.digest b/crates/crust-core/tests/data/import_baselines/place_once_usda-66a0c16b42b4539e-1.digest new file mode 100644 index 000000000..0b0fa8cbe --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/place_once_usda-66a0c16b42b4539e-1.digest @@ -0,0 +1,21 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: None +camera: Camera { origin: Vec3A(15.0, 3.0, 3.0), lower_left_corner: Vec3A(4.8863316, -0.044797063, 4.174048), horizontal: Vec3A(1.2295314, 0.0, -6.147657), vertical: Vec3A(-0.44830504, 3.4967792, -0.08966101), u: Vec3A(0.19611613, 0.0, -0.9805807), v: Vec3A(-0.1271232, 0.991561, -0.02542464), lens_radius: 0.05, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: None +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 640, height: 360, region: PixelRect { x0: 0, y0: 0, x1: 640, y1: 360 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: None, depth_of_field: true, motion_blur: false, layer_stack: ["$DIR/place_once.usda"], invisible_overrides: Some(0) } +layer: $DIR/place_once.usda +warning: Warning { code: CameraMissing, kind: Skipped, count: 1, prims: [], message: "USD stage has no UsdGeomCamera — falling back to world::get_settings camera" } +lights: 0 +volumes: 0 +world: 1 geometries, PrimitiveBreakdown { triangles: 2, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 2, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:32f1a52c797bfee5 camera=2:32f1a52c797bfee5 shadow=2:32f1a52c797bfee5 indirect=2:32f1a52c797bfee5 +provenance geometry 0..1: /World/A +provenance mesh: MeshOrigin { geom_id: 0, slot: 0, baked: true, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 14414187199170096052, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: None, cameras: [], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: None, offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/place_once_usda-66a0c16b42b4539e-1.image b/crates/crust-core/tests/data/import_baselines/place_once_usda-66a0c16b42b4539e-1.image new file mode 100644 index 000000000..c734c5b1d --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/place_once_usda-66a0c16b42b4539e-1.image @@ -0,0 +1 @@ +640x360 16spp clamp-off a04a09c0d4b5e325 diff --git a/crates/crust-core/tests/data/import_baselines/place_twice_usda-c4ce4deb59d3727f-1.digest b/crates/crust-core/tests/data/import_baselines/place_twice_usda-c4ce4deb59d3727f-1.digest new file mode 100644 index 000000000..d6a73b897 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/place_twice_usda-c4ce4deb59d3727f-1.digest @@ -0,0 +1,24 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: None +camera: Camera { origin: Vec3A(15.0, 3.0, 3.0), lower_left_corner: Vec3A(4.8863316, -0.044797063, 4.174048), horizontal: Vec3A(1.2295314, 0.0, -6.147657), vertical: Vec3A(-0.44830504, 3.4967792, -0.08966101), u: Vec3A(0.19611613, 0.0, -0.9805807), v: Vec3A(-0.1271232, 0.991561, -0.02542464), lens_radius: 0.05, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: None +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 640, height: 360, region: PixelRect { x0: 0, y0: 0, x1: 640, y1: 360 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: None, depth_of_field: true, motion_blur: false, layer_stack: ["$DIR/place_twice.usda"], invisible_overrides: Some(0) } +layer: $DIR/place_twice.usda +warning: Warning { code: CameraMissing, kind: Skipped, count: 1, prims: [], message: "USD stage has no UsdGeomCamera — falling back to world::get_settings camera" } +lights: 0 +volumes: 0 +world: 2 geometries, PrimitiveBreakdown { triangles: 0, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 2 } top level, PrimitiveBreakdown { triangles: 2, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 2 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:65007873fa9d3575 camera=2:65007873fa9d3575 shadow=2:65007873fa9d3575 indirect=2:65007873fa9d3575 +geom 1: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:fea6097467ee7e75 camera=2:fea6097467ee7e75 shadow=2:fea6097467ee7e75 indirect=2:fea6097467ee7e75 +provenance geometry 0..1: /World/B +provenance geometry 1..2: /World/A +provenance mesh: MeshOrigin { geom_id: 0, slot: 0, baked: false, moving: false } +provenance mesh: MeshOrigin { geom_id: 1, slot: 0, baked: false, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 14414187199170096052, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 0 }), placements: 2, shared: false, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: None, cameras: [], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: None, offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/place_twice_usda-c4ce4deb59d3727f-1.image b/crates/crust-core/tests/data/import_baselines/place_twice_usda-c4ce4deb59d3727f-1.image new file mode 100644 index 000000000..c734c5b1d --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/place_twice_usda-c4ce4deb59d3727f-1.image @@ -0,0 +1 @@ +640x360 16spp clamp-off a04a09c0d4b5e325 diff --git a/crates/crust-core/tests/data/import_baselines/placed_usda-000d21c7a8ef61e5-1.digest b/crates/crust-core/tests/data/import_baselines/placed_usda-000d21c7a8ef61e5-1.digest new file mode 100644 index 000000000..23f242626 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/placed_usda-000d21c7a8ef61e5-1.digest @@ -0,0 +1,582 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/World/Cam") +camera: Camera { origin: Vec3A(0.0, 4.0, 14.0), lower_left_corner: Vec3A(-6.371167, -0.2474451, 4.0), horizontal: Vec3A(12.742334, 0.0, 0.0), vertical: Vec3A(0.0, 8.49489, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: Some("/Render/settings") +settings: RenderSettings { samples_per_pixel: 128, max_depth: 3, width: 48, height: 32, region: PixelRect { x0: 0, y0: 0, x1: 48, y1: 32 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 18.0, aperture: [20.955, 15.2908], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 10.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/placed.usda", "$DIR/stage.usda", "$DIR/table.usda"], invisible_overrides: Some(0) } +layer: $DIR/crate.usda +layer: $DIR/placed.usda +layer: $DIR/stage.usda +layer: $DIR/stone_a.usda +layer: $DIR/table.usda +lights: 1 +light 0: dome name Some("/World/Sky") lpe None pmf 1.0 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 515 geometries, PrimitiveBreakdown { triangles: 166, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 506 } top level, PrimitiveBreakdown { triangles: 190, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 506 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.9198966 motion [] pieces all=12:8f86cf4d3de0a4be camera=12:8f86cf4d3de0a4be shadow=12:8f86cf4d3de0a4be indirect=12:8f86cf4d3de0a4be +geom 1: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0305899 motion [] pieces all=12:e66bb53a75208231 camera=12:e66bb53a75208231 shadow=12:e66bb53a75208231 indirect=12:e66bb53a75208231 +geom 2: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.80761653 motion [] pieces all=12:cafe08f8ed490f8b camera=12:cafe08f8ed490f8b shadow=12:cafe08f8ed490f8b indirect=12:cafe08f8ed490f8b +geom 3: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.1970719 motion [] pieces all=12:c342eb1ab5252c81 camera=12:c342eb1ab5252c81 shadow=12:c342eb1ab5252c81 indirect=12:c342eb1ab5252c81 +geom 4: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.963177 motion [] pieces all=12:42d7c5618530e165 camera=12:42d7c5618530e165 shadow=12:42d7c5618530e165 indirect=12:42d7c5618530e165 +geom 5: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0862687 motion [] pieces all=12:c72bf19ac3a432ba camera=12:c72bf19ac3a432ba shadow=12:c72bf19ac3a432ba indirect=12:c72bf19ac3a432ba +geom 6: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.86197156 motion [] pieces all=12:ef9c13525501136f camera=12:ef9c13525501136f shadow=12:ef9c13525501136f indirect=12:ef9c13525501136f +geom 7: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.1224174 motion [] pieces all=12:9383d6e069c61393 camera=12:9383d6e069c61393 shadow=12:9383d6e069c61393 indirect=12:9383d6e069c61393 +geom 8: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.93918896 motion [] pieces all=12:0c34fb3dc833bbda camera=12:0c34fb3dc833bbda shadow=12:0c34fb3dc833bbda indirect=12:0c34fb3dc833bbda +geom 9: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0004358 motion [] pieces all=12:9b3f847c0cb0cd92 camera=12:9b3f847c0cb0cd92 shadow=12:9b3f847c0cb0cd92 indirect=12:9b3f847c0cb0cd92 +geom 10: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.8467555 motion [] pieces all=12:3546692626167615 camera=12:3546692626167615 shadow=12:3546692626167615 indirect=12:3546692626167615 +geom 11: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.1551725 motion [] pieces all=12:7b3cf94423c5a334 camera=12:7b3cf94423c5a334 shadow=12:7b3cf94423c5a334 indirect=12:7b3cf94423c5a334 +geom 12: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.1497699 motion [] pieces all=12:22c0716ae2394a24 camera=12:22c0716ae2394a24 shadow=12:22c0716ae2394a24 indirect=12:22c0716ae2394a24 +geom 13: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.8964347 motion [] pieces all=12:acb6db608bf7d336 camera=12:acb6db608bf7d336 shadow=12:acb6db608bf7d336 indirect=12:acb6db608bf7d336 +geom 14: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.99409664 motion [] pieces all=12:80184ce5a0f6ff90 camera=12:80184ce5a0f6ff90 shadow=12:80184ce5a0f6ff90 indirect=12:80184ce5a0f6ff90 +geom 15: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0602818 motion [] pieces all=12:9077d05e272e462e camera=12:9077d05e272e462e shadow=12:9077d05e272e462e indirect=12:9077d05e272e462e +geom 16: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.8165746 motion [] pieces all=12:c7798492ed81ead2 camera=12:c7798492ed81ead2 shadow=12:c7798492ed81ead2 indirect=12:c7798492ed81ead2 +geom 17: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.185862 motion [] pieces all=12:76ef11ab58b881cf camera=12:76ef11ab58b881cf shadow=12:76ef11ab58b881cf indirect=12:76ef11ab58b881cf +geom 18: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.90825385 motion [] pieces all=12:b11c8059a4f78828 camera=12:b11c8059a4f78828 shadow=12:b11c8059a4f78828 indirect=12:b11c8059a4f78828 +geom 19: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0466157 motion [] pieces all=12:4c78b606d82fde81 camera=12:4c78b606d82fde81 shadow=12:4c78b606d82fde81 indirect=12:4c78b606d82fde81 +geom 20: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.8676628 motion [] pieces all=12:e4d56e9d67a32804 camera=12:e4d56e9d67a32804 shadow=12:e4d56e9d67a32804 indirect=12:e4d56e9d67a32804 +geom 21: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.1077697 motion [] pieces all=12:5edb35b517dae0e7 camera=12:5edb35b517dae0e7 shadow=12:5edb35b517dae0e7 indirect=12:5edb35b517dae0e7 +geom 22: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.9589491 motion [] pieces all=12:97d6c586e6e2dc49 camera=12:97d6c586e6e2dc49 shadow=12:97d6c586e6e2dc49 indirect=12:97d6c586e6e2dc49 +geom 23: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0986547 motion [] pieces all=12:7f540302e5545003 camera=12:7f540302e5545003 shadow=12:7f540302e5545003 indirect=12:7f540302e5545003 +geom 24: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0194517 motion [] pieces all=12:16ec68731c43f142 camera=12:16ec68731c43f142 shadow=12:16ec68731c43f142 indirect=12:16ec68731c43f142 +geom 25: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.9282847 motion [] pieces all=12:14f614e8ebe0dcf8 camera=12:14f614e8ebe0dcf8 shadow=12:14f614e8ebe0dcf8 indirect=12:14f614e8ebe0dcf8 +geom 26: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.83393276 motion [] pieces all=12:a7af304c99144724 camera=12:a7af304c99144724 shadow=12:a7af304c99144724 indirect=12:a7af304c99144724 +geom 27: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.1724943 motion [] pieces all=12:fbe48c9886ef4dfd camera=12:fbe48c9886ef4dfd shadow=12:fbe48c9886ef4dfd indirect=12:fbe48c9886ef4dfd +geom 28: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.1332576 motion [] pieces all=12:33e287034dcdf96e camera=12:33e287034dcdf96e shadow=12:33e287034dcdf96e indirect=12:33e287034dcdf96e +geom 29: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.88563997 motion [] pieces all=12:cd385fe41f937705 camera=12:cd385fe41f937705 shadow=12:cd385fe41f937705 indirect=12:cd385fe41f937705 +geom 30: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0721581 motion [] pieces all=12:6dbbb099a165d649 camera=12:6dbbb099a165d649 shadow=12:6dbbb099a165d649 indirect=12:6dbbb099a165d649 +geom 31: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.9777899 motion [] pieces all=12:fc13243eae506891 camera=12:fc13243eae506891 shadow=12:fc13243eae506891 indirect=12:fc13243eae506891 +geom 32: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0129611 motion [] pieces all=12:491466e0fc3a4669 camera=12:491466e0fc3a4669 shadow=12:491466e0fc3a4669 indirect=12:491466e0fc3a4669 +geom 33: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.9323666 motion [] pieces all=12:d941508ae063fc80 camera=12:d941508ae063fc80 shadow=12:d941508ae063fc80 indirect=12:d941508ae063fc80 +geom 34: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.1642841 motion [] pieces all=12:f8b0c715f45040ce camera=12:f8b0c715f45040ce shadow=12:f8b0c715f45040ce indirect=12:f8b0c715f45040ce +geom 35: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.8258158 motion [] pieces all=12:d8a2810400964e69 camera=12:d8a2810400964e69 shadow=12:d8a2810400964e69 indirect=12:d8a2810400964e69 +geom 36: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.9815157 motion [] pieces all=12:7e7abb0d54e97e3a camera=12:7e7abb0d54e97e3a shadow=12:7e7abb0d54e97e3a indirect=12:7e7abb0d54e97e3a +geom 37: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0684702 motion [] pieces all=12:5fba33859532d38c camera=12:5fba33859532d38c shadow=12:5fba33859532d38c indirect=12:5fba33859532d38c +geom 38: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.8804485 motion [] pieces all=12:5de3ec134d858a13 camera=12:5de3ec134d858a13 shadow=12:5de3ec134d858a13 indirect=12:5de3ec134d858a13 +geom 39: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.1292882 motion [] pieces all=12:1d6e4d2d51024d6f camera=12:1d6e4d2d51024d6f shadow=12:1d6e4d2d51024d6f indirect=12:1d6e4d2d51024d6f +geom 40: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0904281 motion [] pieces all=12:2c7d445b7cbbeb5a camera=12:2c7d445b7cbbeb5a shadow=12:2c7d445b7cbbeb5a indirect=12:2c7d445b7cbbeb5a +geom 41: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.95109177 motion [] pieces all=12:f4e55998fda1349a camera=12:f4e55998fda1349a shadow=12:f4e55998fda1349a indirect=12:f4e55998fda1349a +geom 42: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.8707162 motion [] pieces all=12:dc27b2c1768e0377 camera=12:dc27b2c1768e0377 shadow=12:dc27b2c1768e0377 indirect=12:dc27b2c1768e0377 +geom 43: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.1031078 motion [] pieces all=12:35c80535cbf1f2fd camera=12:35c80535cbf1f2fd shadow=12:35c80535cbf1f2fd indirect=12:35c80535cbf1f2fd +geom 44: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0388685 motion [] pieces all=12:886378b76ed5aca8 camera=12:886378b76ed5aca8 shadow=12:886378b76ed5aca8 indirect=12:886378b76ed5aca8 +geom 45: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.901714 motion [] pieces all=12:751cf54edd7dfdc5 camera=12:751cf54edd7dfdc5 shadow=12:751cf54edd7dfdc5 indirect=12:751cf54edd7dfdc5 +geom 46: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.8202469 motion [] pieces all=12:960506265eecdbff camera=12:960506265eecdbff shadow=12:960506265eecdbff indirect=12:960506265eecdbff +geom 47: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.1797804 motion [] pieces all=12:b2eb8798a10d3740 camera=12:b2eb8798a10d3740 shadow=12:b2eb8798a10d3740 indirect=12:b2eb8798a10d3740 +geom 48: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0557002 motion [] pieces all=12:ffdd72877d5a8ed8 camera=12:ffdd72877d5a8ed8 shadow=12:ffdd72877d5a8ed8 indirect=12:ffdd72877d5a8ed8 +geom 49: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.99147755 motion [] pieces all=12:2ee3aa5a2800f1f9 camera=12:2ee3aa5a2800f1f9 shadow=12:2ee3aa5a2800f1f9 indirect=12:2ee3aa5a2800f1f9 +geom 50: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.889924 motion [] pieces all=12:967e26b3c8259c3b camera=12:967e26b3c8259c3b shadow=12:967e26b3c8259c3b indirect=12:967e26b3c8259c3b +geom 51: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.1376337 motion [] pieces all=12:1ec7654e4990b3a5 camera=12:1ec7654e4990b3a5 shadow=12:1ec7654e4990b3a5 indirect=12:1ec7654e4990b3a5 +geom 52: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.1620266 motion [] pieces all=12:5a857240f17c6c96 camera=12:5a857240f17c6c96 shadow=12:5a857240f17c6c96 indirect=12:5a857240f17c6c96 +geom 53: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.8375265 motion [] pieces all=12:3e3a69032ccae095 camera=12:3e3a69032ccae095 shadow=12:3e3a69032ccae095 indirect=12:3e3a69032ccae095 +geom 54: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0117956 motion [] pieces all=12:bcc5376d7659c27b camera=12:bcc5376d7659c27b shadow=12:bcc5376d7659c27b indirect=12:bcc5376d7659c27b +geom 55: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.9484714 motion [] pieces all=12:30b23a9815d4ca0c camera=12:30b23a9815d4ca0c shadow=12:30b23a9815d4ca0c indirect=12:30b23a9815d4ca0c +geom 56: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.1933364 motion [] pieces all=12:baf6dec6a20fd898 camera=12:baf6dec6a20fd898 shadow=12:baf6dec6a20fd898 indirect=12:baf6dec6a20fd898 +geom 57: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.80067986 motion [] pieces all=12:a256e5a31d141fbb camera=12:a256e5a31d141fbb shadow=12:a256e5a31d141fbb indirect=12:a256e5a31d141fbb +geom 58: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.91378754 motion [] pieces all=12:7b3638ec8ec226f3 camera=12:7b3638ec8ec226f3 shadow=12:7b3638ec8ec226f3 indirect=12:7b3638ec8ec226f3 +geom 59: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0327148 motion [] pieces all=12:8329464f2a0e552a camera=12:8329464f2a0e552a shadow=12:8329464f2a0e552a indirect=12:8329464f2a0e552a +geom 60: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0755835 motion [] pieces all=12:d5a356f1a0c2d77b camera=12:d5a356f1a0c2d77b shadow=12:d5a356f1a0c2d77b indirect=12:d5a356f1a0c2d77b +geom 61: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.9723327 motion [] pieces all=12:d514b87e03ffee7b camera=12:d514b87e03ffee7b shadow=12:d514b87e03ffee7b indirect=12:d514b87e03ffee7b +geom 62: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.1167125 motion [] pieces all=12:0f2b003d7a547d30 camera=12:0f2b003d7a547d30 shadow=12:0f2b003d7a547d30 indirect=12:0f2b003d7a547d30 +geom 63: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.8544235 motion [] pieces all=12:3267177e35799915 camera=12:3267177e35799915 shadow=12:3267177e35799915 indirect=12:3267177e35799915 +geom 64: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0798023 motion [] pieces all=12:6f8fe55a972f6cfb camera=12:6f8fe55a972f6cfb shadow=12:6f8fe55a972f6cfb indirect=12:6f8fe55a972f6cfb +geom 65: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.9712375 motion [] pieces all=12:f40fba814caa8834 camera=12:f40fba814caa8834 shadow=12:f40fba814caa8834 indirect=12:f40fba814caa8834 +geom 66: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.1139917 motion [] pieces all=12:561b850d4d03d266 camera=12:561b850d4d03d266 shadow=12:561b850d4d03d266 indirect=12:561b850d4d03d266 +geom 67: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.85122913 motion [] pieces all=12:9087c09bce33af50 camera=12:9087c09bce33af50 shadow=12:9087c09bce33af50 indirect=12:9087c09bce33af50 +geom 68: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.1885562 motion [] pieces all=12:4fccf5f8b70e3596 camera=12:4fccf5f8b70e3596 shadow=12:4fccf5f8b70e3596 indirect=12:4fccf5f8b70e3596 +geom 69: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.80447584 motion [] pieces all=12:3dde2ce14ea1b0bc camera=12:3dde2ce14ea1b0bc shadow=12:3dde2ce14ea1b0bc indirect=12:3dde2ce14ea1b0bc +geom 70: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.9174675 motion [] pieces all=12:44fd55888c88adb7 camera=12:44fd55888c88adb7 shadow=12:44fd55888c88adb7 indirect=12:44fd55888c88adb7 +geom 71: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0344483 motion [] pieces all=12:4842477acc590222 camera=12:4842477acc590222 shadow=12:4842477acc590222 indirect=12:4842477acc590222 +geom 72: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.98861605 motion [] pieces all=12:762fd153f249af87 camera=12:762fd153f249af87 shadow=12:762fd153f249af87 indirect=12:762fd153f249af87 +geom 73: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.051196 motion [] pieces all=12:eccd17b2d02980d1 camera=12:eccd17b2d02980d1 shadow=12:eccd17b2d02980d1 indirect=12:eccd17b2d02980d1 +geom 74: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.1431856 motion [] pieces all=12:cf5f77eee5e0dcdb camera=12:cf5f77eee5e0dcdb shadow=12:cf5f77eee5e0dcdb indirect=12:cf5f77eee5e0dcdb +geom 75: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.8935088 motion [] pieces all=12:43a790a8d4e8b610 camera=12:43a790a8d4e8b610 shadow=12:43a790a8d4e8b610 indirect=12:43a790a8d4e8b610 +geom 76: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0067637 motion [] pieces all=12:1d40a4dd67adf488 camera=12:1d40a4dd67adf488 shadow=12:1d40a4dd67adf488 indirect=12:1d40a4dd67adf488 +geom 77: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.9466897 motion [] pieces all=12:7a683d3007a1ed5e camera=12:7a683d3007a1ed5e shadow=12:7a683d3007a1ed5e indirect=12:7a683d3007a1ed5e +geom 78: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.8417045 motion [] pieces all=12:88909f96d5ee288a camera=12:88909f96d5ee288a shadow=12:88909f96d5ee288a indirect=12:88909f96d5ee288a +geom 79: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.1568236 motion [] pieces all=12:115c326f01b92bfe camera=12:115c326f01b92bfe shadow=12:115c326f01b92bfe indirect=12:115c326f01b92bfe +geom 80: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.1771487 motion [] pieces all=12:39bd3f3c3adce371 camera=12:39bd3f3c3adce371 shadow=12:39bd3f3c3adce371 indirect=12:39bd3f3c3adce371 +geom 81: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.8248694 motion [] pieces all=12:290ce0c482dc7657 camera=12:290ce0c482dc7657 shadow=12:290ce0c482dc7657 indirect=12:290ce0c482dc7657 +geom 82: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0426874 motion [] pieces all=12:af9fa19c59df0bd6 camera=12:af9fa19c59df0bd6 shadow=12:af9fa19c59df0bd6 indirect=12:af9fa19c59df0bd6 +geom 83: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.9049352 motion [] pieces all=12:a99ecfd3f7c65ca0 camera=12:a99ecfd3f7c65ca0 shadow=12:a99ecfd3f7c65ca0 indirect=12:a99ecfd3f7c65ca0 +geom 84: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.95452625 motion [] pieces all=12:f5245c00b3544032 camera=12:f5245c00b3544032 shadow=12:f5245c00b3544032 indirect=12:f5245c00b3544032 +geom 85: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0915264 motion [] pieces all=12:47eed1ca926f8b10 camera=12:47eed1ca926f8b10 shadow=12:47eed1ca926f8b10 indirect=12:47eed1ca926f8b10 +geom 86: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.1045474 motion [] pieces all=12:0688c4f72d38b384 camera=12:0688c4f72d38b384 shadow=12:0688c4f72d38b384 indirect=12:0688c4f72d38b384 +geom 87: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.8725518 motion [] pieces all=12:c2e7bc33d7a8c5b2 camera=12:c2e7bc33d7a8c5b2 shadow=12:c2e7bc33d7a8c5b2 indirect=12:c2e7bc33d7a8c5b2 +geom 88: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0181686 motion [] pieces all=12:f4afa9450cd6e224 camera=12:f4afa9450cd6e224 shadow=12:f4afa9450cd6e224 indirect=12:f4afa9450cd6e224 +geom 89: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.9343883 motion [] pieces all=12:494592bd94b5a9df camera=12:494592bd94b5a9df shadow=12:494592bd94b5a9df indirect=12:494592bd94b5a9df +geom 90: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.83113366 motion [] pieces all=12:d25193c91b0a6495 camera=12:d25193c91b0a6495 shadow=12:d25193c91b0a6495 indirect=12:d25193c91b0a6495 +geom 91: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.1682378 motion [] pieces all=12:e609713fd5e033b1 camera=12:e609713fd5e033b1 shadow=12:e609713fd5e033b1 indirect=12:e609713fd5e033b1 +geom 92: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.9857126 motion [] pieces all=12:24e9d2ac0b6d05de camera=12:24e9d2ac0b6d05de shadow=12:24e9d2ac0b6d05de indirect=12:24e9d2ac0b6d05de +geom 93: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.064941 motion [] pieces all=12:9c77d3fdd548cde9 camera=12:9c77d3fdd548cde9 shadow=12:9c77d3fdd548cde9 indirect=12:9c77d3fdd548cde9 +geom 94: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.1276315 motion [] pieces all=12:6a61385d5bf407f2 camera=12:6a61385d5bf407f2 shadow=12:6a61385d5bf407f2 indirect=12:6a61385d5bf407f2 +geom 95: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.8756145 motion [] pieces all=12:457b1b57aa64f197 camera=12:457b1b57aa64f197 shadow=12:457b1b57aa64f197 indirect=12:457b1b57aa64f197 +geom 96: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.8499425 motion [] pieces all=12:240ee7e5411cb290 camera=12:240ee7e5411cb290 shadow=12:240ee7e5411cb290 indirect=12:240ee7e5411cb290 +geom 97: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.1509483 motion [] pieces all=12:46995ea9d2503b27 camera=12:46995ea9d2503b27 shadow=12:46995ea9d2503b27 indirect=12:46995ea9d2503b27 +geom 98: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.94094956 motion [] pieces all=12:179a8f1495361014 camera=12:179a8f1495361014 shadow=12:179a8f1495361014 indirect=12:179a8f1495361014 +geom 99: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0043019 motion [] pieces all=12:44d8059bb5ebeafd camera=12:44d8059bb5ebeafd shadow=12:44d8059bb5ebeafd indirect=12:44d8059bb5ebeafd +geom 100: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.99898595 motion [] pieces all=12:39afd130699e7cb0 camera=12:39afd130699e7cb0 shadow=12:39afd130699e7cb0 indirect=12:39afd130699e7cb0 +geom 101: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0590571 motion [] pieces all=12:851d5fe50f73febb camera=12:851d5fe50f73febb shadow=12:851d5fe50f73febb indirect=12:851d5fe50f73febb +geom 102: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.1460913 motion [] pieces all=12:b2bbe54d40ea2858 camera=12:b2bbe54d40ea2858 shadow=12:b2bbe54d40ea2858 indirect=12:b2bbe54d40ea2858 +geom 103: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.89929354 motion [] pieces all=12:9f234f91478565dc camera=12:9f234f91478565dc shadow=12:9f234f91478565dc indirect=12:9f234f91478565dc +geom 104: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.85810405 motion [] pieces all=12:f5ddaa8b8ec2d5ba camera=12:f5ddaa8b8ec2d5ba shadow=12:f5ddaa8b8ec2d5ba indirect=12:f5ddaa8b8ec2d5ba +geom 105: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.1191708 motion [] pieces all=12:fd81245dade038dd camera=12:fd81245dade038dd shadow=12:fd81245dade038dd indirect=12:fd81245dade038dd +geom 106: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.9670763 motion [] pieces all=12:5f19edb4d365becb camera=12:5f19edb4d365becb shadow=12:5f19edb4d365becb indirect=12:5f19edb4d365becb +geom 107: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0835859 motion [] pieces all=12:a7ef0a5c0822aea9 camera=12:a7ef0a5c0822aea9 shadow=12:a7ef0a5c0822aea9 indirect=12:a7ef0a5c0822aea9 +geom 108: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0251201 motion [] pieces all=12:02e3b167ee551aca camera=12:02e3b167ee551aca shadow=12:02e3b167ee551aca indirect=12:02e3b167ee551aca +geom 109: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.92380166 motion [] pieces all=12:49c99c416191e8fc camera=12:49c99c416191e8fc shadow=12:49c99c416191e8fc indirect=12:49c99c416191e8fc +geom 110: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.80997515 motion [] pieces all=12:7806740db5f7a3b4 camera=12:7806740db5f7a3b4 shadow=12:7806740db5f7a3b4 indirect=12:7806740db5f7a3b4 +geom 111: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.196669 motion [] pieces all=12:33f9eda18b718998 camera=12:33f9eda18b718998 shadow=12:33f9eda18b718998 indirect=12:33f9eda18b718998 +geom 112: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0473372 motion [] pieces all=12:13ee4568c7b295b0 camera=12:13ee4568c7b295b0 shadow=12:13ee4568c7b295b0 indirect=12:13ee4568c7b295b0 +geom 113: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.9111734 motion [] pieces all=12:77b49a7464b6c21d camera=12:77b49a7464b6c21d shadow=12:77b49a7464b6c21d indirect=12:77b49a7464b6c21d +geom 114: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.81260014 motion [] pieces all=12:46b90f2f6c5b01aa camera=12:46b90f2f6c5b01aa shadow=12:46b90f2f6c5b01aa indirect=12:46b90f2f6c5b01aa +geom 115: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.1814731 motion [] pieces all=12:c63d0e917a0d989f camera=12:c63d0e917a0d989f shadow=12:c63d0e917a0d989f indirect=12:c63d0e917a0d989f +geom 116: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.86434513 motion [] pieces all=12:a3cc00053a7ef3a8 camera=12:a3cc00053a7ef3a8 shadow=12:a3cc00053a7ef3a8 indirect=12:a3cc00053a7ef3a8 +geom 117: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.1114343 motion [] pieces all=12:f25eb690e86a3faf camera=12:f25eb690e86a3faf shadow=12:f25eb690e86a3faf indirect=12:f25eb690e86a3faf +geom 118: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.9615702 motion [] pieces all=12:20da365171867c09 camera=12:20da365171867c09 shadow=12:20da365171867c09 indirect=12:20da365171867c09 +geom 119: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0959495 motion [] pieces all=12:1b3eb4dbcd685c8e camera=12:1b3eb4dbcd685c8e shadow=12:1b3eb4dbcd685c8e indirect=12:1b3eb4dbcd685c8e +geom 120: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.8354707 motion [] pieces all=12:2771b114b3cb81f2 camera=12:2771b114b3cb81f2 shadow=12:2771b114b3cb81f2 indirect=12:2771b114b3cb81f2 +geom 121: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.1718415 motion [] pieces all=12:549b697395f67d5f camera=12:549b697395f67d5f shadow=12:549b697395f67d5f indirect=12:549b697395f67d5f +geom 122: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0247468 motion [] pieces all=12:67782d0321db6e7c camera=12:67782d0321db6e7c shadow=12:67782d0321db6e7c indirect=12:67782d0321db6e7c +geom 123: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.92719936 motion [] pieces all=12:eff1f703285588bb camera=12:eff1f703285588bb shadow=12:eff1f703285588bb indirect=12:eff1f703285588bb +geom 124: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.8833256 motion [] pieces all=12:63a01dbcca8c40f1 camera=12:63a01dbcca8c40f1 shadow=12:63a01dbcca8c40f1 indirect=12:63a01dbcca8c40f1 +geom 125: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.1371192 motion [] pieces all=12:20cbc0b9606168ad camera=12:20cbc0b9606168ad shadow=12:20cbc0b9606168ad indirect=12:20cbc0b9606168ad +geom 126: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0695919 motion [] pieces all=12:8b86fdfeb224bbde camera=12:8b86fdfeb224bbde shadow=12:8b86fdfeb224bbde indirect=12:8b86fdfeb224bbde +geom 127: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.9810916 motion [] pieces all=12:3eb84805d52408b2 camera=12:3eb84805d52408b2 shadow=12:3eb84805d52408b2 indirect=12:3eb84805d52408b2 +geom 128: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.89378047 motion [] pieces all=12:0e25638f44f2c28f camera=12:0e25638f44f2c28f shadow=12:0e25638f44f2c28f indirect=12:0e25638f44f2c28f +geom 129: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.1481593 motion [] pieces all=12:edc967ed7fcb5bf2 camera=12:edc967ed7fcb5bf2 shadow=12:edc967ed7fcb5bf2 indirect=12:edc967ed7fcb5bf2 +geom 130: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.99644405 motion [] pieces all=12:0328f89349c80237 camera=12:0328f89349c80237 shadow=12:0328f89349c80237 indirect=12:0328f89349c80237 +geom 131: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0609381 motion [] pieces all=12:faa929e226849927 camera=12:faa929e226849927 shadow=12:faa929e226849927 indirect=12:faa929e226849927 +geom 132: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.8451959 motion [] pieces all=12:8d3793620c188989 camera=12:8d3793620c188989 shadow=12:8d3793620c188989 indirect=12:8d3793620c188989 +geom 133: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.1544647 motion [] pieces all=12:711a86dde1d9e9f5 camera=12:711a86dde1d9e9f5 shadow=12:711a86dde1d9e9f5 indirect=12:711a86dde1d9e9f5 +geom 134: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.93837684 motion [] pieces all=12:41703b3e850f923f camera=12:41703b3e850f923f shadow=12:41703b3e850f923f indirect=12:41703b3e850f923f +geom 135: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0019761 motion [] pieces all=12:43326dfbf5ed847b camera=12:43326dfbf5ed847b shadow=12:43326dfbf5ed847b indirect=12:43326dfbf5ed847b +geom 136: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0852681 motion [] pieces all=12:9cd66f3a212611a5 camera=12:9cd66f3a212611a5 shadow=12:9cd66f3a212611a5 indirect=12:9cd66f3a212611a5 +geom 137: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.9644266 motion [] pieces all=12:bbc8da567d79b5a4 camera=12:bbc8da567d79b5a4 shadow=12:bbc8da567d79b5a4 indirect=12:bbc8da567d79b5a4 +geom 138: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.85994047 motion [] pieces all=12:a2f2d962a60b6159 camera=12:a2f2d962a60b6159 shadow=12:a2f2d962a60b6159 indirect=12:a2f2d962a60b6159 +geom 139: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.1246288 motion [] pieces all=12:994b4349fed39f01 camera=12:994b4349fed39f01 shadow=12:994b4349fed39f01 indirect=12:994b4349fed39f01 +geom 140: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.1996474 motion [] pieces all=12:1d2acd7fea759ad5 camera=12:1d2acd7fea759ad5 shadow=12:1d2acd7fea759ad5 indirect=12:1d2acd7fea759ad5 +geom 141: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.80840766 motion [] pieces all=12:9cf7a9afbcc4c4eb camera=12:9cf7a9afbcc4c4eb shadow=12:9cf7a9afbcc4c4eb indirect=12:9cf7a9afbcc4c4eb +geom 142: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0290962 motion [] pieces all=12:0efc6eea9e359221 camera=12:0efc6eea9e359221 shadow=12:0efc6eea9e359221 indirect=12:0efc6eea9e359221 +geom 143: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.92069584 motion [] pieces all=12:78475427d360b5c1 camera=12:78475427d360b5c1 shadow=12:78475427d360b5c1 indirect=12:78475427d360b5c1 +geom 144: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.8324499 motion [] pieces all=12:14aef30e6187ee0a camera=12:14aef30e6187ee0a shadow=12:14aef30e6187ee0a indirect=12:14aef30e6187ee0a +geom 145: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.1735862 motion [] pieces all=12:ee21943afb6f553a camera=12:ee21943afb6f553a shadow=12:ee21943afb6f553a indirect=12:ee21943afb6f553a +geom 146: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0211544 motion [] pieces all=12:349cc8052c0114c0 camera=12:349cc8052c0114c0 shadow=12:349cc8052c0114c0 indirect=12:349cc8052c0114c0 +geom 147: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.9301207 motion [] pieces all=12:255047cec943c8ea camera=12:255047cec943c8ea shadow=12:255047cec943c8ea indirect=12:255047cec943c8ea +geom 148: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.8862441 motion [] pieces all=12:216ff56f5952ffb9 camera=12:216ff56f5952ffb9 shadow=12:216ff56f5952ffb9 indirect=12:216ff56f5952ffb9 +geom 149: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.132182 motion [] pieces all=12:977965ada455e4f1 camera=12:977965ada455e4f1 shadow=12:977965ada455e4f1 indirect=12:977965ada455e4f1 +geom 150: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0742184 motion [] pieces all=12:770f0c83da095904 camera=12:770f0c83da095904 shadow=12:770f0c83da095904 indirect=12:770f0c83da095904 +geom 151: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.97561026 motion [] pieces all=12:c5fabfbf16b885c5 camera=12:c5fabfbf16b885c5 shadow=12:c5fabfbf16b885c5 indirect=12:c5fabfbf16b885c5 +geom 152: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.9072775 motion [] pieces all=12:8a4dd57e0a2ebf5a camera=12:8a4dd57e0a2ebf5a shadow=12:8a4dd57e0a2ebf5a indirect=12:8a4dd57e0a2ebf5a +geom 153: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0440699 motion [] pieces all=12:fae5024a9d175702 camera=12:fae5024a9d175702 shadow=12:fae5024a9d175702 indirect=12:fae5024a9d175702 +geom 154: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.1860485 motion [] pieces all=12:c0662045e1066fd4 camera=12:c0662045e1066fd4 shadow=12:c0662045e1066fd4 indirect=12:c0662045e1066fd4 +geom 155: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.8176735 motion [] pieces all=12:964c32758295df10 camera=12:964c32758295df10 shadow=12:964c32758295df10 indirect=12:964c32758295df10 +geom 156: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.1087489 motion [] pieces all=12:36f2818add7f21f3 camera=12:36f2818add7f21f3 shadow=12:36f2818add7f21f3 indirect=12:36f2818add7f21f3 +geom 157: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.86653197 motion [] pieces all=12:cdcff1bea7fd276f camera=12:cdcff1bea7fd276f shadow=12:cdcff1bea7fd276f indirect=12:cdcff1bea7fd276f +geom 158: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0970074 motion [] pieces all=12:fcf63aa7fde4ba86 camera=12:fcf63aa7fde4ba86 shadow=12:fcf63aa7fde4ba86 indirect=12:fcf63aa7fde4ba86 +geom 159: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.95737 motion [] pieces all=12:c2b5677cce7af786 camera=12:c2b5677cce7af786 shadow=12:c2b5677cce7af786 indirect=12:c2b5677cce7af786 +geom 160: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.9006957 motion [] pieces all=12:a4d08541f65f13d0 camera=12:a4d08541f65f13d0 shadow=12:a4d08541f65f13d0 indirect=12:a4d08541f65f13d0 +geom 161: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0394226 motion [] pieces all=12:aec0b7091efa616e camera=12:aec0b7091efa616e shadow=12:aec0b7091efa616e indirect=12:aec0b7091efa616e +geom 162: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.8203825 motion [] pieces all=12:6ee376a13e855160 camera=12:6ee376a13e855160 shadow=12:6ee376a13e855160 indirect=12:6ee376a13e855160 +geom 163: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.1781385 motion [] pieces all=12:f7de28adc35d4412 camera=12:f7de28adc35d4412 shadow=12:f7de28adc35d4412 indirect=12:f7de28adc35d4412 +geom 164: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.9523008 motion [] pieces all=12:cf43ed179dc3924a camera=12:cf43ed179dc3924a shadow=12:cf43ed179dc3924a indirect=12:cf43ed179dc3924a +geom 165: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0878727 motion [] pieces all=12:29a010f95988b1ff camera=12:29a010f95988b1ff shadow=12:29a010f95988b1ff indirect=12:29a010f95988b1ff +geom 166: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.870276 motion [] pieces all=12:7d4d135c4e5575bc camera=12:7d4d135c4e5575bc shadow=12:7d4d135c4e5575bc indirect=12:7d4d135c4e5575bc +geom 167: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.1014793 motion [] pieces all=12:b8aeb1e4f672a5ff camera=12:b8aeb1e4f672a5ff shadow=12:b8aeb1e4f672a5ff indirect=12:b8aeb1e4f672a5ff +geom 168: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0663404 motion [] pieces all=12:3fc1e7e5eda56504 camera=12:3fc1e7e5eda56504 shadow=12:3fc1e7e5eda56504 indirect=12:3fc1e7e5eda56504 +geom 169: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.9835009 motion [] pieces all=12:b54d22d3f354e111 camera=12:b54d22d3f354e111 shadow=12:b54d22d3f354e111 indirect=12:b54d22d3f354e111 +geom 170: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.8794718 motion [] pieces all=12:408b284cc8506940 camera=12:408b284cc8506940 shadow=12:408b284cc8506940 indirect=12:408b284cc8506940 +geom 171: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.1306928 motion [] pieces all=12:de5dfb646742a1db camera=12:de5dfb646742a1db shadow=12:de5dfb646742a1db indirect=12:de5dfb646742a1db +geom 172: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.9336199 motion [] pieces all=12:5224fff33dc68baa camera=12:5224fff33dc68baa shadow=12:5224fff33dc68baa indirect=12:5224fff33dc68baa +geom 173: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0149 motion [] pieces all=12:0714a1e0c1ddbe53 camera=12:0714a1e0c1ddbe53 shadow=12:0714a1e0c1ddbe53 indirect=12:0714a1e0c1ddbe53 +geom 174: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.1634011 motion [] pieces all=12:f7c2b3abcef602ba camera=12:f7c2b3abcef602ba shadow=12:f7c2b3abcef602ba indirect=12:f7c2b3abcef602ba +geom 175: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.8278751 motion [] pieces all=12:ba74d4a6ddc13413 camera=12:ba74d4a6ddc13413 shadow=12:ba74d4a6ddc13413 indirect=12:ba74d4a6ddc13413 +geom 176: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.9143611 motion [] pieces all=12:3a2bdd7c0fb5f8ce camera=12:3a2bdd7c0fb5f8ce shadow=12:3a2bdd7c0fb5f8ce indirect=12:3a2bdd7c0fb5f8ce +geom 177: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0329576 motion [] pieces all=12:11ca701bf16fe232 camera=12:11ca701bf16fe232 shadow=12:11ca701bf16fe232 indirect=12:11ca701bf16fe232 +geom 178: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.8021616 motion [] pieces all=12:65dc48dd0f9b6325 camera=12:65dc48dd0f9b6325 shadow=12:65dc48dd0f9b6325 indirect=12:65dc48dd0f9b6325 +geom 179: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.1908746 motion [] pieces all=12:a76505a088379c90 camera=12:a76505a088379c90 shadow=12:a76505a088379c90 indirect=12:a76505a088379c90 +geom 180: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.8557867 motion [] pieces all=12:0b5931f61e2fde7b camera=12:0b5931f61e2fde7b shadow=12:0b5931f61e2fde7b indirect=12:0b5931f61e2fde7b +geom 181: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.1185493 motion [] pieces all=12:66c42813f507eeab camera=12:66c42813f507eeab shadow=12:66c42813f507eeab indirect=12:66c42813f507eeab +geom 182: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0776385 motion [] pieces all=12:be1587344eda2fd6 camera=12:be1587344eda2fd6 shadow=12:be1587344eda2fd6 indirect=12:be1587344eda2fd6 +geom 183: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.9741755 motion [] pieces all=12:448895cb3061af12 camera=12:448895cb3061af12 shadow=12:448895cb3061af12 indirect=12:448895cb3061af12 +geom 184: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.99330175 motion [] pieces all=12:39b4ee326d610473 camera=12:39b4ee326d610473 shadow=12:39b4ee326d610473 indirect=12:39b4ee326d610473 +geom 185: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0531924 motion [] pieces all=12:3c158e4e7535abbc camera=12:3c158e4e7535abbc shadow=12:3c158e4e7535abbc indirect=12:3c158e4e7535abbc +geom 186: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.88838124 motion [] pieces all=12:d9b2ca0588546949 camera=12:d9b2ca0588546949 shadow=12:d9b2ca0588546949 indirect=12:d9b2ca0588546949 +geom 187: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.1391544 motion [] pieces all=12:ed34bede1177e284 camera=12:ed34bede1177e284 shadow=12:ed34bede1177e284 indirect=12:ed34bede1177e284 +geom 188: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.1601088 motion [] pieces all=12:9cc2f1d7ab8d7d44 camera=12:9cc2f1d7ab8d7d44 shadow=12:9cc2f1d7ab8d7d44 indirect=12:9cc2f1d7ab8d7d44 +geom 189: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.8400457 motion [] pieces all=12:5e864a5674913774 camera=12:5e864a5674913774 shadow=12:5e864a5674913774 indirect=12:5e864a5674913774 +geom 190: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.94724274 motion [] pieces all=12:962d5b14f56713cc camera=12:962d5b14f56713cc shadow=12:962d5b14f56713cc indirect=12:962d5b14f56713cc +geom 191: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0101744 motion [] pieces all=12:65f43cff20a54d3e camera=12:65f43cff20a54d3e shadow=12:65f43cff20a54d3e indirect=12:65f43cff20a54d3e +geom 192: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.9785322 motion [] pieces all=12:f68b9cc33a7d5338 camera=12:f68b9cc33a7d5338 shadow=12:f68b9cc33a7d5338 indirect=12:f68b9cc33a7d5338 +geom 193: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.071331 motion [] pieces all=12:eab5a7efb85d5e4a camera=12:eab5a7efb85d5e4a shadow=12:eab5a7efb85d5e4a indirect=12:eab5a7efb85d5e4a +geom 194: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.1346846 motion [] pieces all=12:0da43c8009876e7c camera=12:0da43c8009876e7c shadow=12:0da43c8009876e7c indirect=12:0da43c8009876e7c +geom 195: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.881264 motion [] pieces all=12:367e7648236970f0 camera=12:367e7648236970f0 shadow=12:367e7648236970f0 indirect=12:367e7648236970f0 +geom 196: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.9258513 motion [] pieces all=12:653bbd1417548840 camera=12:653bbd1417548840 shadow=12:653bbd1417548840 indirect=12:653bbd1417548840 +geom 197: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0232607 motion [] pieces all=12:a1e5481b53abbea3 camera=12:a1e5481b53abbea3 shadow=12:a1e5481b53abbea3 indirect=12:a1e5481b53abbea3 +geom 198: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.1690427 motion [] pieces all=12:f1c8dee848ecdaa4 camera=12:f1c8dee848ecdaa4 shadow=12:f1c8dee848ecdaa4 indirect=12:f1c8dee848ecdaa4 +geom 199: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.83644116 motion [] pieces all=12:d34f9568f35b8d65 camera=12:d34f9568f35b8d65 shadow=12:d34f9568f35b8d65 indirect=12:d34f9568f35b8d65 +geom 200: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0487949 motion [] pieces all=12:a85c3a6a8169fe53 camera=12:a85c3a6a8169fe53 shadow=12:a85c3a6a8169fe53 indirect=12:a85c3a6a8169fe53 +geom 201: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.9108869 motion [] pieces all=12:2e6ec2c4aff7ce16 camera=12:2e6ec2c4aff7ce16 shadow=12:2e6ec2c4aff7ce16 indirect=12:2e6ec2c4aff7ce16 +geom 202: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.1842942 motion [] pieces all=12:9831981e2548b336 camera=12:9831981e2548b336 shadow=12:9831981e2548b336 indirect=12:9831981e2548b336 +geom 203: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.8154444 motion [] pieces all=12:2cd5888551e5130f camera=12:2cd5888551e5130f shadow=12:2cd5888551e5130f indirect=12:2cd5888551e5130f +geom 204: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.9596241 motion [] pieces all=12:371ac302b036e0a3 camera=12:371ac302b036e0a3 shadow=12:371ac302b036e0a3 indirect=12:371ac302b036e0a3 +geom 205: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0944769 motion [] pieces all=12:a1e579be7bb587a6 camera=12:a1e579be7bb587a6 shadow=12:a1e579be7bb587a6 indirect=12:a1e579be7bb587a6 +geom 206: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.8640111 motion [] pieces all=12:8cf77265a8ab0d6f camera=12:8cf77265a8ab0d6f shadow=12:8cf77265a8ab0d6f indirect=12:8cf77265a8ab0d6f +geom 207: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.1104012 motion [] pieces all=12:58e1e64a98666438 camera=12:58e1e64a98666438 shadow=12:58e1e64a98666438 indirect=12:58e1e64a98666438 +geom 208: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0280448 motion [] pieces all=12:2a0d228155d99032 camera=12:2a0d228155d99032 shadow=12:2a0d228155d99032 indirect=12:2a0d228155d99032 +geom 209: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.9222475 motion [] pieces all=12:b4f0b641e643bed2 camera=12:b4f0b641e643bed2 shadow=12:b4f0b641e643bed2 indirect=12:b4f0b641e643bed2 +geom 210: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.81186414 motion [] pieces all=12:a9878ed81373a6aa camera=12:a9878ed81373a6aa shadow=12:a9878ed81373a6aa indirect=12:a9878ed81373a6aa +geom 211: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.1950524 motion [] pieces all=12:d6c19f21ac2efe7f camera=12:d6c19f21ac2efe7f shadow=12:d6c19f21ac2efe7f indirect=12:d6c19f21ac2efe7f +geom 212: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.9686117 motion [] pieces all=12:d0de2f053819698d camera=12:d0de2f053819698d shadow=12:d0de2f053819698d indirect=12:d0de2f053819698d +geom 213: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0823318 motion [] pieces all=12:f807af028fb0d843 camera=12:f807af028fb0d843 shadow=12:f807af028fb0d843 indirect=12:f807af028fb0d843 +geom 214: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.1214556 motion [] pieces all=12:8fb69b3b22f5e5b7 camera=12:8fb69b3b22f5e5b7 shadow=12:8fb69b3b22f5e5b7 indirect=12:8fb69b3b22f5e5b7 +geom 215: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.8576933 motion [] pieces all=12:9902fabfe4a31e6f camera=12:9902fabfe4a31e6f shadow=12:9902fabfe4a31e6f indirect=12:9902fabfe4a31e6f +geom 216: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.1524206 motion [] pieces all=12:ec824708a5b52e94 camera=12:ec824708a5b52e94 shadow=12:ec824708a5b52e94 indirect=12:ec824708a5b52e94 +geom 217: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.8480765 motion [] pieces all=12:54fb9c61f3afdf2d camera=12:54fb9c61f3afdf2d shadow=12:54fb9c61f3afdf2d indirect=12:54fb9c61f3afdf2d +geom 218: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.9426124 motion [] pieces all=12:dc76d1a704fcd63a camera=12:dc76d1a704fcd63a shadow=12:dc76d1a704fcd63a indirect=12:dc76d1a704fcd63a +geom 219: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.005768 motion [] pieces all=12:f676c0196c74e2e4 camera=12:f676c0196c74e2e4 shadow=12:f676c0196c74e2e4 indirect=12:f676c0196c74e2e4 +geom 220: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0575837 motion [] pieces all=12:24d3f120f3e4d77a camera=12:24d3f120f3e4d77a shadow=12:24d3f120f3e4d77a indirect=12:24d3f120f3e4d77a +geom 221: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.9969108 motion [] pieces all=12:e761c1efe402c472 camera=12:e761c1efe402c472 shadow=12:e761c1efe402c472 indirect=12:e761c1efe402c472 +geom 222: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.1440821 motion [] pieces all=12:cf73015e4f75c6b0 camera=12:cf73015e4f75c6b0 shadow=12:cf73015e4f75c6b0 indirect=12:cf73015e4f75c6b0 +geom 223: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.8969591 motion [] pieces all=12:d0956b3fca49292a camera=12:d0956b3fca49292a shadow=12:d0956b3fca49292a indirect=12:d0956b3fca49292a +geom 224: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0371333 motion [] pieces all=12:d8193163489bb44b camera=12:d8193163489bb44b shadow=12:d8193163489bb44b indirect=12:d8193163489bb44b +geom 225: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.9161684 motion [] pieces all=12:477cf4558da91635 camera=12:477cf4558da91635 shadow=12:477cf4558da91635 indirect=12:477cf4558da91635 +geom 226: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.1905285 motion [] pieces all=12:a410b51f47a5ffb6 camera=12:a410b51f47a5ffb6 shadow=12:a410b51f47a5ffb6 indirect=12:a410b51f47a5ffb6 +geom 227: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.80562985 motion [] pieces all=12:c45d199c982978f4 camera=12:c45d199c982978f4 shadow=12:c45d199c982978f4 indirect=12:c45d199c982978f4 +geom 228: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0785401 motion [] pieces all=12:55548a55e18adb38 camera=12:55548a55e18adb38 shadow=12:55548a55e18adb38 indirect=12:55548a55e18adb38 +geom 229: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.9693134 motion [] pieces all=12:218000652a85aad8 camera=12:218000652a85aad8 shadow=12:218000652a85aad8 indirect=12:218000652a85aad8 +geom 230: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.1149917 motion [] pieces all=12:5c8721a6ccf52af9 camera=12:5c8721a6ccf52af9 shadow=12:5c8721a6ccf52af9 indirect=12:5c8721a6ccf52af9 +geom 231: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.8525659 motion [] pieces all=12:5b4e1f5ec23952dd camera=12:5b4e1f5ec23952dd shadow=12:5b4e1f5ec23952dd indirect=12:5b4e1f5ec23952dd +geom 232: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.1412258 motion [] pieces all=12:2a4304d591b25fc9 camera=12:2a4304d591b25fc9 shadow=12:2a4304d591b25fc9 indirect=12:2a4304d591b25fc9 +geom 233: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.89183074 motion [] pieces all=12:52cdc20762bb5ebb camera=12:52cdc20762bb5ebb shadow=12:52cdc20762bb5ebb indirect=12:52cdc20762bb5ebb +geom 234: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.99022824 motion [] pieces all=12:3d37ca5710e536ba camera=12:3d37ca5710e536ba shadow=12:3d37ca5710e536ba indirect=12:3d37ca5710e536ba +geom 235: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0531183 motion [] pieces all=12:e0d91d54fe3ddd42 camera=12:e0d91d54fe3ddd42 shadow=12:e0d91d54fe3ddd42 indirect=12:e0d91d54fe3ddd42 +geom 236: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.1585552 motion [] pieces all=12:4a181c7dff378ae5 camera=12:4a181c7dff378ae5 shadow=12:4a181c7dff378ae5 indirect=12:4a181c7dff378ae5 +geom 237: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.8428183 motion [] pieces all=12:b7fa070d5b1acaa3 camera=12:b7fa070d5b1acaa3 shadow=12:b7fa070d5b1acaa3 indirect=12:b7fa070d5b1acaa3 +geom 238: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.94464326 motion [] pieces all=12:182e332994e443d3 camera=12:182e332994e443d3 shadow=12:182e332994e443d3 indirect=12:182e332994e443d3 +geom 239: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0091645 motion [] pieces all=12:497495488a8f9926 camera=12:497495488a8f9926 shadow=12:497495488a8f9926 indirect=12:497495488a8f9926 +geom 240: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.016648 motion [] pieces all=12:4bfe924b2992d41e camera=12:4bfe924b2992d41e shadow=12:4bfe924b2992d41e indirect=12:4bfe924b2992d41e +geom 241: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.9367166 motion [] pieces all=12:cfd883bd32fe687e camera=12:cfd883bd32fe687e shadow=12:cfd883bd32fe687e indirect=12:cfd883bd32fe687e +geom 242: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.165766 motion [] pieces all=12:f080efe60f98f622 camera=12:f080efe60f98f622 shadow=12:f080efe60f98f622 indirect=12:f080efe60f98f622 +geom 243: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.8287125 motion [] pieces all=12:c1e89fb5a0e9b74d camera=12:c1e89fb5a0e9b74d shadow=12:c1e89fb5a0e9b74d indirect=12:c1e89fb5a0e9b74d +geom 244: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0626551 motion [] pieces all=12:00de2f136a6548eb camera=12:00de2f136a6548eb shadow=12:00de2f136a6548eb indirect=12:00de2f136a6548eb +geom 245: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.98738736 motion [] pieces all=12:32c7be68c9881ec9 camera=12:32c7be68c9881ec9 shadow=12:32c7be68c9881ec9 indirect=12:32c7be68c9881ec9 +geom 246: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.1254724 motion [] pieces all=12:cf7615fec99cc55a camera=12:cf7615fec99cc55a shadow=12:cf7615fec99cc55a indirect=12:cf7615fec99cc55a +geom 247: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.8768998 motion [] pieces all=12:0f5b07ce8c46fea6 camera=12:0f5b07ce8c46fea6 shadow=12:0f5b07ce8c46fea6 indirect=12:0f5b07ce8c46fea6 +geom 248: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.1756799 motion [] pieces all=12:2663e8227fb24a79 camera=12:2663e8227fb24a79 shadow=12:2663e8227fb24a79 indirect=12:2663e8227fb24a79 +geom 249: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.8233719 motion [] pieces all=12:3b6f7097bfff15c1 camera=12:3b6f7097bfff15c1 shadow=12:3b6f7097bfff15c1 indirect=12:3b6f7097bfff15c1 +geom 250: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0409974 motion [] pieces all=12:b6b10b6d55ba8c97 camera=12:b6b10b6d55ba8c97 shadow=12:b6b10b6d55ba8c97 indirect=12:b6b10b6d55ba8c97 +geom 251: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.9038803 motion [] pieces all=12:b355d8f5b5238438 camera=12:b355d8f5b5238438 shadow=12:b355d8f5b5238438 indirect=12:b355d8f5b5238438 +geom 252: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0932336 motion [] pieces all=12:6ec8b9fb7b3d7a72 camera=12:6ec8b9fb7b3d7a72 shadow=12:6ec8b9fb7b3d7a72 indirect=12:6ec8b9fb7b3d7a72 +geom 253: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.9554085 motion [] pieces all=12:d0792a3a2618b4a2 camera=12:d0792a3a2618b4a2 shadow=12:d0792a3a2618b4a2 indirect=12:d0792a3a2618b4a2 +geom 254: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.87406343 motion [] pieces all=12:819ad0656b20e2bf camera=12:819ad0656b20e2bf shadow=12:819ad0656b20e2bf indirect=12:819ad0656b20e2bf +geom 255: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.1052995 motion [] pieces all=12:fff64aa232c9f86c camera=12:fff64aa232c9f86c shadow=12:fff64aa232c9f86c indirect=12:fff64aa232c9f86c +geom 256: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.9768473 motion [] pieces all=12:11fd407d6aab4445 camera=12:11fd407d6aab4445 shadow=12:11fd407d6aab4445 indirect=12:11fd407d6aab4445 +geom 257: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0729508 motion [] pieces all=12:a72cb8ec9ae50c56 camera=12:a72cb8ec9ae50c56 shadow=12:a72cb8ec9ae50c56 indirect=12:a72cb8ec9ae50c56 +geom 258: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.1338656 motion [] pieces all=12:97aee9f21062e128 camera=12:97aee9f21062e128 shadow=12:97aee9f21062e128 indirect=12:97aee9f21062e128 +geom 259: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.8844776 motion [] pieces all=12:6a1002885c8d7a12 camera=12:6a1002885c8d7a12 shadow=12:6a1002885c8d7a12 indirect=12:6a1002885c8d7a12 +geom 260: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.83347267 motion [] pieces all=12:cee182e759730390 camera=12:cee182e759730390 shadow=12:cee182e759730390 indirect=12:cee182e759730390 +geom 261: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.173328 motion [] pieces all=12:4013087b40e6ad61 camera=12:4013087b40e6ad61 shadow=12:4013087b40e6ad61 indirect=12:4013087b40e6ad61 +geom 262: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.92967904 motion [] pieces all=12:548c6ed2728c5a9f camera=12:548c6ed2728c5a9f shadow=12:548c6ed2728c5a9f indirect=12:548c6ed2728c5a9f +geom 263: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0202583 motion [] pieces all=12:43d11bf53a3b606f camera=12:43d11bf53a3b606f shadow=12:43d11bf53a3b606f indirect=12:43d11bf53a3b606f +geom 264: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.1067905 motion [] pieces all=12:0e6e0232710c9ceb camera=12:0e6e0232710c9ceb shadow=12:0e6e0232710c9ceb indirect=12:0e6e0232710c9ceb +geom 265: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.86866605 motion [] pieces all=12:238aced2eba03486 camera=12:238aced2eba03486 shadow=12:238aced2eba03486 indirect=12:238aced2eba03486 +geom 266: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.95813566 motion [] pieces all=12:93a01a8feb0ba82d camera=12:93a01a8feb0ba82d shadow=12:93a01a8feb0ba82d indirect=12:93a01a8feb0ba82d +geom 267: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0999786 motion [] pieces all=12:fdef8a38e3eea225 camera=12:fdef8a38e3eea225 shadow=12:fdef8a38e3eea225 indirect=12:fdef8a38e3eea225 +geom 268: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.1849983 motion [] pieces all=12:40c96ea349626ea6 camera=12:40c96ea349626ea6 shadow=12:40c96ea349626ea6 indirect=12:40c96ea349626ea6 +geom 269: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.8158234 motion [] pieces all=12:e7ea70beffae6450 camera=12:e7ea70beffae6450 shadow=12:e7ea70beffae6450 indirect=12:e7ea70beffae6450 +geom 270: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.90898705 motion [] pieces all=12:e783e85c7725ed85 camera=12:e783e85c7725ed85 shadow=12:e783e85c7725ed85 indirect=12:e783e85c7725ed85 +geom 271: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0457114 motion [] pieces all=12:63f784b3d50f1052 camera=12:63f784b3d50f1052 shadow=12:63f784b3d50f1052 indirect=12:63f784b3d50f1052 +geom 272: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.1491069 motion [] pieces all=12:944b697c71611990 camera=12:944b697c71611990 shadow=12:944b697c71611990 indirect=12:944b697c71611990 +geom 273: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.8953586 motion [] pieces all=12:fa070a10ac3464b3 camera=12:fa070a10ac3464b3 shadow=12:fa070a10ac3464b3 indirect=12:fa070a10ac3464b3 +geom 274: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.9947008 motion [] pieces all=12:8c64ed340c926d68 camera=12:8c64ed340c926d68 shadow=12:8c64ed340c926d68 indirect=12:8c64ed340c926d68 +geom 275: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0596404 motion [] pieces all=12:3f4c2e6570c01807 camera=12:3f4c2e6570c01807 shadow=12:3f4c2e6570c01807 indirect=12:3f4c2e6570c01807 +geom 276: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.9401493 motion [] pieces all=12:488975cd2b8db7e7 camera=12:488975cd2b8db7e7 shadow=12:488975cd2b8db7e7 indirect=12:488975cd2b8db7e7 +geom 277: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0007957 motion [] pieces all=12:e7e388955a5bb04e camera=12:e7e388955a5bb04e shadow=12:e7e388955a5bb04e indirect=12:e7e388955a5bb04e +geom 278: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.84572726 motion [] pieces all=12:8222aff79bdae433 camera=12:8222aff79bdae433 shadow=12:8222aff79bdae433 indirect=12:8222aff79bdae433 +geom 279: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.1560192 motion [] pieces all=12:909a1c152f5a7fb4 camera=12:909a1c152f5a7fb4 shadow=12:909a1c152f5a7fb4 indirect=12:909a1c152f5a7fb4 +geom 280: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.9637207 motion [] pieces all=12:07a3248bd4440601 camera=12:07a3248bd4440601 shadow=12:07a3248bd4440601 indirect=12:07a3248bd4440601 +geom 281: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.087206 motion [] pieces all=12:f7e9b7d82af723d0 camera=12:f7e9b7d82af723d0 shadow=12:f7e9b7d82af723d0 indirect=12:f7e9b7d82af723d0 +geom 282: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.1232283 motion [] pieces all=12:37257db134b12300 camera=12:37257db134b12300 shadow=12:37257db134b12300 indirect=12:37257db134b12300 +geom 283: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.8609516 motion [] pieces all=12:ff73408d4f6fd4d7 camera=12:ff73408d4f6fd4d7 shadow=12:ff73408d4f6fd4d7 indirect=12:ff73408d4f6fd4d7 +geom 284: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.9192827 motion [] pieces all=12:514e716757a5adc0 camera=12:514e716757a5adc0 shadow=12:514e716757a5adc0 indirect=12:514e716757a5adc0 +geom 285: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0298046 motion [] pieces all=12:abb11888f7f912e8 camera=12:abb11888f7f912e8 shadow=12:abb11888f7f912e8 indirect=12:abb11888f7f912e8 +geom 286: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.1977669 motion [] pieces all=12:017e24c64f0f05b2 camera=12:017e24c64f0f05b2 shadow=12:017e24c64f0f05b2 indirect=12:017e24c64f0f05b2 +geom 287: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.80649936 motion [] pieces all=12:ae5ecdbf15c7950a camera=12:ae5ecdbf15c7950a shadow=12:ae5ecdbf15c7950a indirect=12:ae5ecdbf15c7950a +geom 288: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.1386106 motion [] pieces all=12:6d1d96762e0b23da camera=12:6d1d96762e0b23da shadow=12:6d1d96762e0b23da indirect=12:6d1d96762e0b23da +geom 289: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.88983685 motion [] pieces all=12:d5944dc9e35306e1 camera=12:d5944dc9e35306e1 shadow=12:d5944dc9e35306e1 indirect=12:d5944dc9e35306e1 +geom 290: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.991385 motion [] pieces all=12:c51dabe9315b59c1 camera=12:c51dabe9315b59c1 shadow=12:c51dabe9315b59c1 indirect=12:c51dabe9315b59c1 +geom 291: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0554097 motion [] pieces all=12:505dc6b5b5e4d03d camera=12:505dc6b5b5e4d03d shadow=12:505dc6b5b5e4d03d indirect=12:505dc6b5b5e4d03d +geom 292: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.011579 motion [] pieces all=12:9a99085db0f74aaf camera=12:9a99085db0f74aaf shadow=12:9a99085db0f74aaf indirect=12:9a99085db0f74aaf +geom 293: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.9493576 motion [] pieces all=12:816daeae3d1a9ec5 camera=12:816daeae3d1a9ec5 shadow=12:816daeae3d1a9ec5 indirect=12:816daeae3d1a9ec5 +geom 294: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.161219 motion [] pieces all=12:6dc7d3c172c504b5 camera=12:6dc7d3c172c504b5 shadow=12:6dc7d3c172c504b5 indirect=12:6dc7d3c172c504b5 +geom 295: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.8384609 motion [] pieces all=12:8f7f2b180cfd06af camera=12:8f7f2b180cfd06af shadow=12:8f7f2b180cfd06af indirect=12:8f7f2b180cfd06af +geom 296: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.19291 motion [] pieces all=12:7a924d2c281ba283 camera=12:7a924d2c281ba283 shadow=12:7a924d2c281ba283 indirect=12:7a924d2c281ba283 +geom 297: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.80139834 motion [] pieces all=12:062debcce5b9470a camera=12:062debcce5b9470a shadow=12:062debcce5b9470a indirect=12:062debcce5b9470a +geom 298: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.91284966 motion [] pieces all=12:ea80bb011b37a984 camera=12:ea80bb011b37a984 shadow=12:ea80bb011b37a984 indirect=12:ea80bb011b37a984 +geom 299: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.031602 motion [] pieces all=12:ff0b0b15d0c181ce camera=12:ff0b0b15d0c181ce shadow=12:ff0b0b15d0c181ce indirect=12:ff0b0b15d0c181ce +geom 300: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.076497 motion [] pieces all=12:f6ec5506b81bea9b camera=12:f6ec5506b81bea9b shadow=12:f6ec5506b81bea9b indirect=12:f6ec5506b81bea9b +geom 301: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.97320867 motion [] pieces all=12:fced13594b0bcdfb camera=12:fced13594b0bcdfb shadow=12:fced13594b0bcdfb indirect=12:fced13594b0bcdfb +geom 302: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.1159608 motion [] pieces all=12:1e819660719474d8 camera=12:1e819660719474d8 shadow=12:1e819660719474d8 indirect=12:1e819660719474d8 +geom 303: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.8531368 motion [] pieces all=12:126e37df7ff77eb4 camera=12:126e37df7ff77eb4 shadow=12:126e37df7ff77eb4 indirect=12:126e37df7ff77eb4 +geom 304: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.98263747 motion [] pieces all=12:4c79de7fe0c13ea0 camera=12:4c79de7fe0c13ea0 shadow=12:4c79de7fe0c13ea0 indirect=12:4c79de7fe0c13ea0 +geom 305: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0678959 motion [] pieces all=12:46d0a7e15d6071ff camera=12:46d0a7e15d6071ff shadow=12:46d0a7e15d6071ff indirect=12:46d0a7e15d6071ff +geom 306: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.8811399 motion [] pieces all=12:33c2c46a6dbe77c1 camera=12:33c2c46a6dbe77c1 shadow=12:33c2c46a6dbe77c1 indirect=12:33c2c46a6dbe77c1 +geom 307: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.1288906 motion [] pieces all=12:43b32bee7a52b30e camera=12:43b32bee7a52b30e shadow=12:43b32bee7a52b30e indirect=12:43b32bee7a52b30e +geom 308: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0132886 motion [] pieces all=12:e57199f7c51b7eea camera=12:e57199f7c51b7eea shadow=12:e57199f7c51b7eea indirect=12:e57199f7c51b7eea +geom 309: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.9316937 motion [] pieces all=12:005e1a5ad92f9a2b camera=12:005e1a5ad92f9a2b shadow=12:005e1a5ad92f9a2b indirect=12:005e1a5ad92f9a2b +geom 310: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.1648556 motion [] pieces all=12:eebf0d8dfe1feee2 camera=12:eebf0d8dfe1feee2 shadow=12:eebf0d8dfe1feee2 indirect=12:eebf0d8dfe1feee2 +geom 311: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.82504475 motion [] pieces all=12:6575214d3b9ea1ea camera=12:6575214d3b9ea1ea shadow=12:6575214d3b9ea1ea indirect=12:6575214d3b9ea1ea +geom 312: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0375521 motion [] pieces all=12:6c66a970174a7752 camera=12:6c66a970174a7752 shadow=12:6c66a970174a7752 indirect=12:6c66a970174a7752 +geom 313: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.90262544 motion [] pieces all=12:261c2367beadc415 camera=12:261c2367beadc415 shadow=12:261c2367beadc415 indirect=12:261c2367beadc415 +geom 314: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.8189789 motion [] pieces all=12:33bfec7bae86f3a5 camera=12:33bfec7bae86f3a5 shadow=12:33bfec7bae86f3a5 indirect=12:33bfec7bae86f3a5 +geom 315: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.1807628 motion [] pieces all=12:5ea527b5a1b483dd camera=12:5ea527b5a1b483dd shadow=12:5ea527b5a1b483dd indirect=12:5ea527b5a1b483dd +geom 316: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0895107 motion [] pieces all=12:34f66a983d950003 camera=12:34f66a983d950003 shadow=12:34f66a983d950003 indirect=12:34f66a983d950003 +geom 317: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.9502792 motion [] pieces all=12:406e457dcfebe0fb camera=12:406e457dcfebe0fb shadow=12:406e457dcfebe0fb indirect=12:406e457dcfebe0fb +geom 318: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.8717746 motion [] pieces all=12:882e6bf9d50b435e camera=12:882e6bf9d50b435e shadow=12:882e6bf9d50b435e indirect=12:882e6bf9d50b435e +geom 319: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.1022806 motion [] pieces all=12:af292a085466ce4a camera=12:af292a085466ce4a shadow=12:af292a085466ce4a indirect=12:af292a085466ce4a +geom 320: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.1125914 motion [] pieces all=12:4bc553e1e8db5e20 camera=12:4bc553e1e8db5e20 shadow=12:4bc553e1e8db5e20 indirect=12:4bc553e1e8db5e20 +geom 321: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.8507036 motion [] pieces all=12:cb5343dbea2c9ba6 camera=12:cb5343dbea2c9ba6 shadow=12:cb5343dbea2c9ba6 indirect=12:cb5343dbea2c9ba6 +geom 322: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0811025 motion [] pieces all=12:81339deb7d3373c2 camera=12:81339deb7d3373c2 shadow=12:81339deb7d3373c2 indirect=12:81339deb7d3373c2 +geom 323: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.97089374 motion [] pieces all=12:0285ec2f5168c02f camera=12:0285ec2f5168c02f shadow=12:0285ec2f5168c02f indirect=12:0285ec2f5168c02f +geom 324: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.80321383 motion [] pieces all=12:4f385f4002cbef34 camera=12:4f385f4002cbef34 shadow=12:4f385f4002cbef34 indirect=12:4f385f4002cbef34 +geom 325: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.1880153 motion [] pieces all=12:1d9b67f5f6634b3f camera=12:1d9b67f5f6634b3f shadow=12:1d9b67f5f6634b3f indirect=12:1d9b67f5f6634b3f +geom 326: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.9187322 motion [] pieces all=12:149a6ca273e0fd79 camera=12:149a6ca273e0fd79 shadow=12:149a6ca273e0fd79 indirect=12:149a6ca273e0fd79 +geom 327: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0357703 motion [] pieces all=12:eb62f4494b2be49b camera=12:eb62f4494b2be49b shadow=12:eb62f4494b2be49b indirect=12:eb62f4494b2be49b +geom 328: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.8926734 motion [] pieces all=12:78843baf0013ffaa camera=12:78843baf0013ffaa shadow=12:78843baf0013ffaa indirect=12:78843baf0013ffaa +geom 329: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.1423489 motion [] pieces all=12:2d144148dd9ba911 camera=12:2d144148dd9ba911 shadow=12:2d144148dd9ba911 indirect=12:2d144148dd9ba911 +geom 330: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.9875227 motion [] pieces all=12:930d081d29556bd6 camera=12:930d081d29556bd6 shadow=12:930d081d29556bd6 indirect=12:930d081d29556bd6 +geom 331: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0504947 motion [] pieces all=12:1257f6e7c3b08a31 camera=12:1257f6e7c3b08a31 shadow=12:1257f6e7c3b08a31 indirect=12:1257f6e7c3b08a31 +geom 332: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0072688 motion [] pieces all=12:d5694522eff59d20 camera=12:d5694522eff59d20 shadow=12:d5694522eff59d20 indirect=12:d5694522eff59d20 +geom 333: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.9455354 motion [] pieces all=12:611e21d6917ae7e6 camera=12:611e21d6917ae7e6 shadow=12:611e21d6917ae7e6 indirect=12:611e21d6917ae7e6 +geom 334: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.8409919 motion [] pieces all=12:a48a2d8ae8bdfac6 camera=12:a48a2d8ae8bdfac6 shadow=12:a48a2d8ae8bdfac6 indirect=12:a48a2d8ae8bdfac6 +geom 335: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.1570698 motion [] pieces all=12:5d964214cf585b93 camera=12:5d964214cf585b93 shadow=12:5d964214cf585b93 indirect=12:5d964214cf585b93 +geom 336: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.8299381 motion [] pieces all=12:a9176c71ff6fb225 camera=12:a9176c71ff6fb225 shadow=12:a9176c71ff6fb225 indirect=12:a9176c71ff6fb225 +geom 337: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.1672927 motion [] pieces all=12:40356f96e9441616 camera=12:40356f96e9441616 shadow=12:40356f96e9441616 indirect=12:40356f96e9441616 +geom 338: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.9352113 motion [] pieces all=12:acbadaf1d2f5ba0d camera=12:acbadaf1d2f5ba0d shadow=12:acbadaf1d2f5ba0d indirect=12:acbadaf1d2f5ba0d +geom 339: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0174538 motion [] pieces all=12:3556aa08c7c7a4cb camera=12:3556aa08c7c7a4cb shadow=12:3556aa08c7c7a4cb indirect=12:3556aa08c7c7a4cb +geom 340: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0640922 motion [] pieces all=12:b216c43839554d22 camera=12:b216c43839554d22 shadow=12:b216c43839554d22 indirect=12:b216c43839554d22 +geom 341: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.98485225 motion [] pieces all=12:a7a0b37be67099fa camera=12:a7a0b37be67099fa shadow=12:a7a0b37be67099fa indirect=12:a7a0b37be67099fa +geom 342: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.8760297 motion [] pieces all=12:d93a0b99b5544913 camera=12:d93a0b99b5544913 shadow=12:d93a0b99b5544913 indirect=12:d93a0b99b5544913 +geom 343: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.1267965 motion [] pieces all=12:4b2bdd8f74989ed0 camera=12:4b2bdd8f74989ed0 shadow=12:4b2bdd8f74989ed0 indirect=12:4b2bdd8f74989ed0 +geom 344: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.9535157 motion [] pieces all=12:e483eb99e4899c43 camera=12:e483eb99e4899c43 shadow=12:e483eb99e4899c43 indirect=12:e483eb99e4899c43 +geom 345: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0909876 motion [] pieces all=12:33b2730e64cbcbf5 camera=12:33b2730e64cbcbf5 shadow=12:33b2730e64cbcbf5 indirect=12:33b2730e64cbcbf5 +geom 346: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.873239 motion [] pieces all=12:0d52bd81fe2cd696 camera=12:0d52bd81fe2cd696 shadow=12:0d52bd81fe2cd696 indirect=12:0d52bd81fe2cd696 +geom 347: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.1036613 motion [] pieces all=12:7a47f32f288f5cbe camera=12:7a47f32f288f5cbe shadow=12:7a47f32f288f5cbe indirect=12:7a47f32f288f5cbe +geom 348: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.823912 motion [] pieces all=12:609ac4562b806a10 camera=12:609ac4562b806a10 shadow=12:609ac4562b806a10 indirect=12:609ac4562b806a10 +geom 349: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.1773586 motion [] pieces all=12:8481eeed367ea601 camera=12:8481eeed367ea601 shadow=12:8481eeed367ea601 indirect=12:8481eeed367ea601 +geom 350: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0432719 motion [] pieces all=12:fef8a9c498c1091a camera=12:fef8a9c498c1091a shadow=12:fef8a9c498c1091a indirect=12:fef8a9c498c1091a +geom 351: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.9059112 motion [] pieces all=12:258ac525c3d14e49 camera=12:258ac525c3d14e49 shadow=12:258ac525c3d14e49 indirect=12:258ac525c3d14e49 +geom 352: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.8105323 motion [] pieces all=12:d72d3430c4224927 camera=12:d72d3430c4224927 shadow=12:d72d3430c4224927 indirect=12:d72d3430c4224927 +geom 353: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.1959983 motion [] pieces all=12:a4b68acb4f4a98cf camera=12:a4b68acb4f4a98cf shadow=12:a4b68acb4f4a98cf indirect=12:a4b68acb4f4a98cf +geom 354: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.924839 motion [] pieces all=12:cce102d01e4037c4 camera=12:cce102d01e4037c4 shadow=12:cce102d01e4037c4 indirect=12:cce102d01e4037c4 +geom 355: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.026029 motion [] pieces all=12:a31900d98450f4a2 camera=12:a31900d98450f4a2 shadow=12:a31900d98450f4a2 indirect=12:a31900d98450f4a2 +geom 356: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.85874945 motion [] pieces all=12:6947b56775598e2c camera=12:6947b56775598e2c shadow=12:6947b56775598e2c indirect=12:6947b56775598e2c +geom 357: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.1200635 motion [] pieces all=12:b1184ceaa666ca81 camera=12:b1184ceaa666ca81 shadow=12:b1184ceaa666ca81 indirect=12:b1184ceaa666ca81 +geom 358: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.96589327 motion [] pieces all=12:21486a0ccc379a21 camera=12:21486a0ccc379a21 shadow=12:21486a0ccc379a21 indirect=12:21486a0ccc379a21 +geom 359: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0838121 motion [] pieces all=12:8ba9ff414ecdc6d5 camera=12:8ba9ff414ecdc6d5 shadow=12:8ba9ff414ecdc6d5 indirect=12:8ba9ff414ecdc6d5 +geom 360: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0584942 motion [] pieces all=12:005bcfb5f838ccb5 camera=12:005bcfb5f838ccb5 shadow=12:005bcfb5f838ccb5 indirect=12:005bcfb5f838ccb5 +geom 361: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.9998037 motion [] pieces all=12:f350c74d843a70f1 camera=12:f350c74d843a70f1 shadow=12:f350c74d843a70f1 indirect=12:f350c74d843a70f1 +geom 362: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.89845294 motion [] pieces all=12:57221d2e110540bf camera=12:57221d2e110540bf shadow=12:57221d2e110540bf indirect=12:57221d2e110540bf +geom 363: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.1464553 motion [] pieces all=12:5fffae7196a90fdc camera=12:5fffae7196a90fdc shadow=12:5fffae7196a90fdc indirect=12:5fffae7196a90fdc +geom 364: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0036417 motion [] pieces all=12:d14878e07b7d99a6 camera=12:d14878e07b7d99a6 shadow=12:d14878e07b7d99a6 indirect=12:d14878e07b7d99a6 +geom 365: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.9418138 motion [] pieces all=12:def1468defc6d9cd camera=12:def1468defc6d9cd shadow=12:def1468defc6d9cd indirect=12:def1468defc6d9cd +geom 366: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.8484609 motion [] pieces all=12:12a273be369c651f camera=12:12a273be369c651f shadow=12:12a273be369c651f indirect=12:12a273be369c651f +geom 367: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.1505002 motion [] pieces all=12:777a26513d2ddea7 camera=12:777a26513d2ddea7 shadow=12:777a26513d2ddea7 indirect=12:777a26513d2ddea7 +geom 368: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.1124372 motion [] pieces all=12:7157de5db2f2966b camera=12:7157de5db2f2966b shadow=12:7157de5db2f2966b indirect=12:7157de5db2f2966b +geom 369: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.86513543 motion [] pieces all=12:6e9934c150dd6c1b camera=12:6e9934c150dd6c1b shadow=12:6e9934c150dd6c1b indirect=12:6e9934c150dd6c1b +geom 370: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.96190256 motion [] pieces all=12:2dadbf133c9582bd camera=12:2dadbf133c9582bd shadow=12:2dadbf133c9582bd indirect=12:2dadbf133c9582bd +geom 371: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0965079 motion [] pieces all=12:1eeed34d94b22845 camera=12:1eeed34d94b22845 shadow=12:1eeed34d94b22845 indirect=12:1eeed34d94b22845 +geom 372: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0477712 motion [] pieces all=12:0ac05b9c0a1b134d camera=12:0ac05b9c0a1b134d shadow=12:0ac05b9c0a1b134d indirect=12:0ac05b9c0a1b134d +geom 373: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.9117553 motion [] pieces all=12:96ed23f1b1eb9ecd camera=12:96ed23f1b1eb9ecd shadow=12:96ed23f1b1eb9ecd indirect=12:96ed23f1b1eb9ecd +geom 374: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.1822846 motion [] pieces all=12:a91baba5e9c0dee9 camera=12:a91baba5e9c0dee9 shadow=12:a91baba5e9c0dee9 indirect=12:a91baba5e9c0dee9 +geom 375: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.81359315 motion [] pieces all=12:a82e069c3f0c85e3 camera=12:a82e069c3f0c85e3 shadow=12:a82e069c3f0c85e3 indirect=12:a82e069c3f0c85e3 +geom 376: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.8348295 motion [] pieces all=12:d162e00ec8e3c215 camera=12:d162e00ec8e3c215 shadow=12:d162e00ec8e3c215 indirect=12:d162e00ec8e3c215 +geom 377: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.1710575 motion [] pieces all=12:a1133fe12560df78 camera=12:a1133fe12560df78 shadow=12:a1133fe12560df78 indirect=12:a1133fe12560df78 +geom 378: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.023812 motion [] pieces all=12:1f1e654fc23dbe55 camera=12:1f1e654fc23dbe55 shadow=12:1f1e654fc23dbe55 indirect=12:1f1e654fc23dbe55 +geom 379: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.9276315 motion [] pieces all=12:5424d4a8814c6375 camera=12:5424d4a8814c6375 shadow=12:5424d4a8814c6375 indirect=12:5424d4a8814c6375 +geom 380: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.98007417 motion [] pieces all=12:9522bde07f6ee731 camera=12:9522bde07f6ee731 shadow=12:9522bde07f6ee731 indirect=12:9522bde07f6ee731 +geom 381: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0695097 motion [] pieces all=12:180f3d3749531a56 camera=12:180f3d3749531a56 shadow=12:180f3d3749531a56 indirect=12:180f3d3749531a56 +geom 382: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.8843071 motion [] pieces all=12:6f5cd1f53e3ff728 camera=12:6f5cd1f53e3ff728 shadow=12:6f5cd1f53e3ff728 indirect=12:6f5cd1f53e3ff728 +geom 383: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.1362706 motion [] pieces all=12:2f9702b10330c304 camera=12:2f9702b10330c304 shadow=12:2f9702b10330c304 indirect=12:2f9702b10330c304 +geom 384: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0101188 motion [] pieces all=12:01b1e2d0d10843b9 camera=12:01b1e2d0d10843b9 shadow=12:01b1e2d0d10843b9 indirect=12:01b1e2d0d10843b9 +geom 385: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.9480209 motion [] pieces all=12:a3718136f8ac9b33 camera=12:a3718136f8ac9b33 shadow=12:a3718136f8ac9b33 indirect=12:a3718136f8ac9b33 +geom 386: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.8395415 motion [] pieces all=12:e61b673596194138 camera=12:e61b673596194138 shadow=12:e61b673596194138 indirect=12:e61b673596194138 +geom 387: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.1603119 motion [] pieces all=12:15579d5ba71f40e4 camera=12:15579d5ba71f40e4 shadow=12:15579d5ba71f40e4 indirect=12:15579d5ba71f40e4 +geom 388: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.992698 motion [] pieces all=12:6246034de965bd8b camera=12:6246034de965bd8b shadow=12:6246034de965bd8b indirect=12:6246034de965bd8b +geom 389: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0540782 motion [] pieces all=12:cc39ce91f2cadad2 camera=12:cc39ce91f2cadad2 shadow=12:cc39ce91f2cadad2 indirect=12:cc39ce91f2cadad2 +geom 390: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.1401312 motion [] pieces all=12:e33f879dfe0bf49e camera=12:e33f879dfe0bf49e shadow=12:e33f879dfe0bf49e indirect=12:e33f879dfe0bf49e +geom 391: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.8881962 motion [] pieces all=12:4e3dd2f45e265f30 camera=12:4e3dd2f45e265f30 shadow=12:4e3dd2f45e265f30 indirect=12:4e3dd2f45e265f30 +geom 392: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.8030794 motion [] pieces all=12:cf560123b8483fa3 camera=12:cf560123b8483fa3 shadow=12:cf560123b8483fa3 indirect=12:cf560123b8483fa3 +geom 393: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.1916865 motion [] pieces all=12:93307bb30e25f408 camera=12:93307bb30e25f408 shadow=12:93307bb30e25f408 indirect=12:93307bb30e25f408 +geom 394: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.9150232 motion [] pieces all=12:6fba751150ec4727 camera=12:6fba751150ec4727 shadow=12:6fba751150ec4727 indirect=12:6fba751150ec4727 +geom 395: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0336049 motion [] pieces all=12:4e5b5fb694ef1bf3 camera=12:4e5b5fb694ef1bf3 shadow=12:4e5b5fb694ef1bf3 indirect=12:4e5b5fb694ef1bf3 +geom 396: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.97491765 motion [] pieces all=12:276b8d85aca1a3e9 camera=12:276b8d85aca1a3e9 shadow=12:276b8d85aca1a3e9 indirect=12:276b8d85aca1a3e9 +geom 397: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0771285 motion [] pieces all=12:a4c3bbfbcb9c67a2 camera=12:a4c3bbfbcb9c67a2 shadow=12:a4c3bbfbcb9c67a2 indirect=12:a4c3bbfbcb9c67a2 +geom 398: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.1179042 motion [] pieces all=12:ccb5bcea08ceb25a camera=12:ccb5bcea08ceb25a shadow=12:ccb5bcea08ceb25a indirect=12:ccb5bcea08ceb25a +geom 399: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.8553025 motion [] pieces all=12:bac2e733548264d8 camera=12:bac2e733548264d8 shadow=12:bac2e733548264d8 indirect=12:bac2e733548264d8 +geom 400: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.82128096 motion [] pieces all=12:d0d4e2a58ed4d9ec camera=12:d0d4e2a58ed4d9ec shadow=12:d0d4e2a58ed4d9ec indirect=12:d0d4e2a58ed4d9ec +geom 401: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.1792935 motion [] pieces all=12:0de17972ba65c254 camera=12:0de17972ba65c254 shadow=12:0de17972ba65c254 indirect=12:0de17972ba65c254 +geom 402: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0401901 motion [] pieces all=12:cb0504e52836d3fe camera=12:cb0504e52836d3fe shadow=12:cb0504e52836d3fe indirect=12:cb0504e52836d3fe +geom 403: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.90141225 motion [] pieces all=12:60d437e84d0a53f0 camera=12:60d437e84d0a53f0 shadow=12:60d437e84d0a53f0 indirect=12:60d437e84d0a53f0 +geom 404: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.1005943 motion [] pieces all=12:1ecffa1ba99925c0 camera=12:1ecffa1ba99925c0 shadow=12:1ecffa1ba99925c0 indirect=12:1ecffa1ba99925c0 +geom 405: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.86883533 motion [] pieces all=12:ad799c2d305de2f9 camera=12:ad799c2d305de2f9 shadow=12:ad799c2d305de2f9 indirect=12:ad799c2d305de2f9 +geom 406: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.952475 motion [] pieces all=12:7dd378b8e4a2aa36 camera=12:7dd378b8e4a2aa36 shadow=12:7dd378b8e4a2aa36 indirect=12:7dd378b8e4a2aa36 +geom 407: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0887097 motion [] pieces all=12:c374efc1d0e8e23c camera=12:c374efc1d0e8e23c shadow=12:c374efc1d0e8e23c indirect=12:c374efc1d0e8e23c +geom 408: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.87827426 motion [] pieces all=12:ebf6baf3acbb7768 camera=12:ebf6baf3acbb7768 shadow=12:ebf6baf3acbb7768 indirect=12:ebf6baf3acbb7768 +geom 409: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.1302669 motion [] pieces all=12:304f505a4a86cc55 camera=12:304f505a4a86cc55 shadow=12:304f505a4a86cc55 indirect=12:304f505a4a86cc55 +geom 410: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.9838797 motion [] pieces all=12:b21a4d02fbf044fe camera=12:b21a4d02fbf044fe shadow=12:b21a4d02fbf044fe indirect=12:b21a4d02fbf044fe +geom 411: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.066421 motion [] pieces all=12:fd0d9cae806682eb camera=12:fd0d9cae806682eb shadow=12:fd0d9cae806682eb indirect=12:fd0d9cae806682eb +geom 412: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.82724553 motion [] pieces all=12:f3a26851e3a14430 camera=12:f3a26851e3a14430 shadow=12:f3a26851e3a14430 indirect=12:f3a26851e3a14430 +geom 413: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.1630746 motion [] pieces all=12:c76ca4f07283ba56 camera=12:c76ca4f07283ba56 shadow=12:c76ca4f07283ba56 indirect=12:c76ca4f07283ba56 +geom 414: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.9334531 motion [] pieces all=12:a4095d0f91d1dbce camera=12:a4095d0f91d1dbce shadow=12:a4095d0f91d1dbce indirect=12:a4095d0f91d1dbce +geom 415: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0141398 motion [] pieces all=12:d0d1389ea8f40b8a camera=12:d0d1389ea8f40b8a shadow=12:d0d1389ea8f40b8a indirect=12:d0d1389ea8f40b8a +geom 416: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.89513576 motion [] pieces all=12:3dafbaac68751923 camera=12:3dafbaac68751923 shadow=12:3dafbaac68751923 indirect=12:3dafbaac68751923 +geom 417: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.1475859 motion [] pieces all=12:9f710bfbf3df25ef camera=12:9f710bfbf3df25ef shadow=12:9f710bfbf3df25ef indirect=12:9f710bfbf3df25ef +geom 418: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0621774 motion [] pieces all=12:1d2e334e94d93089 camera=12:1d2e334e94d93089 shadow=12:1d2e334e94d93089 indirect=12:1d2e334e94d93089 +geom 419: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.9958263 motion [] pieces all=12:bb4d6096054796d8 camera=12:bb4d6096054796d8 shadow=12:bb4d6096054796d8 indirect=12:bb4d6096054796d8 +geom 420: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.93813705 motion [] pieces all=12:66386a626e17b76d camera=12:66386a626e17b76d shadow=12:66386a626e17b76d indirect=12:66386a626e17b76d +geom 421: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0026661 motion [] pieces all=12:43d0a792fbfee3eb camera=12:43d0a792fbfee3eb shadow=12:43d0a792fbfee3eb indirect=12:43d0a792fbfee3eb +geom 422: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.8441921 motion [] pieces all=12:dd63e9666863137e camera=12:dd63e9666863137e shadow=12:dd63e9666863137e indirect=12:dd63e9666863137e +geom 423: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.1533538 motion [] pieces all=12:5cb904f4e9bb8f67 camera=12:5cb904f4e9bb8f67 shadow=12:5cb904f4e9bb8f67 indirect=12:5cb904f4e9bb8f67 +geom 424: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.9651056 motion [] pieces all=12:4851fc6bb207fc6a camera=12:4851fc6bb207fc6a shadow=12:4851fc6bb207fc6a indirect=12:4851fc6bb207fc6a +geom 425: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0846107 motion [] pieces all=12:d93301565d39769a camera=12:d93301565d39769a shadow=12:d93301565d39769a indirect=12:d93301565d39769a +geom 426: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.1234391 motion [] pieces all=12:b7f8977aa22450b1 camera=12:b7f8977aa22450b1 shadow=12:b7f8977aa22450b1 indirect=12:b7f8977aa22450b1 +geom 427: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.8603886 motion [] pieces all=12:09a08e37ffa8932d camera=12:09a08e37ffa8932d shadow=12:09a08e37ffa8932d indirect=12:09a08e37ffa8932d +geom 428: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.9211374 motion [] pieces all=12:42b2aa796526643c camera=12:42b2aa796526643c shadow=12:42b2aa796526643c indirect=12:42b2aa796526643c +geom 429: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0282738 motion [] pieces all=12:eda0f4d4540ad71d camera=12:eda0f4d4540ad71d shadow=12:eda0f4d4540ad71d indirect=12:eda0f4d4540ad71d +geom 430: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.19869 motion [] pieces all=12:b390e73c2e13571d camera=12:b390e73c2e13571d shadow=12:b390e73c2e13571d indirect=12:b390e73c2e13571d +geom 431: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.8092543 motion [] pieces all=12:1a3f8088b34e4aaa camera=12:1a3f8088b34e4aaa shadow=12:1a3f8088b34e4aaa indirect=12:1a3f8088b34e4aaa +geom 432: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.93068063 motion [] pieces all=12:bea1c6a83b8fb2fc camera=12:bea1c6a83b8fb2fc shadow=12:bea1c6a83b8fb2fc indirect=12:bea1c6a83b8fb2fc +geom 433: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0208405 motion [] pieces all=12:7a06b77e2f10d46f camera=12:7a06b77e2f10d46f shadow=12:7a06b77e2f10d46f indirect=12:7a06b77e2f10d46f +geom 434: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.1745689 motion [] pieces all=12:97676d0cff45e177 camera=12:97676d0cff45e177 shadow=12:97676d0cff45e177 indirect=12:97676d0cff45e177 +geom 435: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.83135146 motion [] pieces all=12:705d411ef26746f7 camera=12:705d411ef26746f7 shadow=12:705d411ef26746f7 indirect=12:705d411ef26746f7 +geom 436: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.1314473 motion [] pieces all=12:5ad7f1d5c915512a camera=12:5ad7f1d5c915512a shadow=12:5ad7f1d5c915512a indirect=12:5ad7f1d5c915512a +geom 437: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.8867999 motion [] pieces all=12:8476adde76913396 camera=12:8476adde76913396 shadow=12:8476adde76913396 indirect=12:8476adde76913396 +geom 438: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0747112 motion [] pieces all=12:e7f5a973bccec9bc camera=12:e7f5a973bccec9bc shadow=12:e7f5a973bccec9bc indirect=12:e7f5a973bccec9bc +geom 439: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.97620165 motion [] pieces all=12:11415e4f4b31504d camera=12:11415e4f4b31504d shadow=12:11415e4f4b31504d indirect=12:11415e4f4b31504d +geom 440: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.81814355 motion [] pieces all=12:c369f1b75eea6930 camera=12:c369f1b75eea6930 shadow=12:c369f1b75eea6930 indirect=12:c369f1b75eea6930 +geom 441: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.1871269 motion [] pieces all=12:04bae91190b6a617 camera=12:04bae91190b6a617 shadow=12:04bae91190b6a617 indirect=12:04bae91190b6a617 +geom 442: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.9068257 motion [] pieces all=12:40cebd682433bc7a camera=12:40cebd682433bc7a shadow=12:40cebd682433bc7a indirect=12:40cebd682433bc7a +geom 443: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0449783 motion [] pieces all=12:74939d9d0c9a68ac camera=12:74939d9d0c9a68ac shadow=12:74939d9d0c9a68ac indirect=12:74939d9d0c9a68ac +geom 444: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.8661409 motion [] pieces all=12:1a5cbca5cfe676bc camera=12:1a5cbca5cfe676bc shadow=12:1a5cbca5cfe676bc indirect=12:1a5cbca5cfe676bc +geom 445: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.1079133 motion [] pieces all=12:9a5a9971e6dbdbdd camera=12:9a5a9971e6dbdbdd shadow=12:9a5a9971e6dbdbdd indirect=12:9a5a9971e6dbdbdd +geom 446: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.9565916 motion [] pieces all=12:ac7765639dbb6ac7 camera=12:ac7765639dbb6ac7 shadow=12:ac7765639dbb6ac7 indirect=12:ac7765639dbb6ac7 +geom 447: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0983777 motion [] pieces all=12:98a63c9336ee2b94 camera=12:98a63c9336ee2b94 shadow=12:98a63c9336ee2b94 indirect=12:98a63c9336ee2b94 +geom 448: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.969946 motion [] pieces all=12:85507e4ddce2dbc6 camera=12:85507e4ddce2dbc6 shadow=12:85507e4ddce2dbc6 indirect=12:85507e4ddce2dbc6 +geom 449: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0791402 motion [] pieces all=12:497dd3f3d36bf4b3 camera=12:497dd3f3d36bf4b3 shadow=12:497dd3f3d36bf4b3 indirect=12:497dd3f3d36bf4b3 +geom 450: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.1147938 motion [] pieces all=12:286593b41115d023 camera=12:286593b41115d023 shadow=12:286593b41115d023 indirect=12:286593b41115d023 +geom 451: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.8517827 motion [] pieces all=12:e223b6f2d797d785 camera=12:e223b6f2d797d785 shadow=12:e223b6f2d797d785 indirect=12:e223b6f2d797d785 +geom 452: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0364246 motion [] pieces all=12:197e95eb8561cce5 camera=12:197e95eb8561cce5 shadow=12:197e95eb8561cce5 indirect=12:197e95eb8561cce5 +geom 453: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.9164818 motion [] pieces all=12:4f29b6e7f178eec1 camera=12:4f29b6e7f178eec1 shadow=12:4f29b6e7f178eec1 indirect=12:4f29b6e7f178eec1 +geom 454: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.805457 motion [] pieces all=12:62d46e328c2118be camera=12:62d46e328c2118be shadow=12:62d46e328c2118be indirect=12:62d46e328c2118be +geom 455: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.1892269 motion [] pieces all=12:97e3d204c89712f3 camera=12:97e3d204c89712f3 shadow=12:97e3d204c89712f3 indirect=12:97e3d204c89712f3 +geom 456: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0083134 motion [] pieces all=12:3ede262e8b02235b camera=12:3ede262e8b02235b shadow=12:3ede262e8b02235b indirect=12:3ede262e8b02235b +geom 457: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.9442222 motion [] pieces all=12:0cf0a9bb1d2d0410 camera=12:0cf0a9bb1d2d0410 shadow=12:0cf0a9bb1d2d0410 indirect=12:0cf0a9bb1d2d0410 +geom 458: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.1586176 motion [] pieces all=12:7e4881ca0c7c6011 camera=12:7e4881ca0c7c6011 shadow=12:7e4881ca0c7c6011 indirect=12:7e4881ca0c7c6011 +geom 459: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.84321785 motion [] pieces all=12:1ab78d45283d65e6 camera=12:1ab78d45283d65e6 shadow=12:1ab78d45283d65e6 indirect=12:1ab78d45283d65e6 +geom 460: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0523099 motion [] pieces all=12:c37c57bae72e8dfa camera=12:c37c57bae72e8dfa shadow=12:c37c57bae72e8dfa indirect=12:c37c57bae72e8dfa +geom 461: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.9891003 motion [] pieces all=12:4afddb31fd04036c camera=12:4afddb31fd04036c shadow=12:4afddb31fd04036c indirect=12:4afddb31fd04036c +geom 462: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.1417663 motion [] pieces all=12:a48681853dc094a5 camera=12:a48681853dc094a5 shadow=12:a48681853dc094a5 indirect=12:a48681853dc094a5 +geom 463: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.8911673 motion [] pieces all=12:ec8c0fc9f54933e5 camera=12:ec8c0fc9f54933e5 shadow=12:ec8c0fc9f54933e5 indirect=12:ec8c0fc9f54933e5 +geom 464: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0637368 motion [] pieces all=12:603b51218f4125d8 camera=12:603b51218f4125d8 shadow=12:603b51218f4125d8 indirect=12:603b51218f4125d8 +geom 465: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.98671156 motion [] pieces all=12:2d07a5db98b98d2f camera=12:2d07a5db98b98d2f shadow=12:2d07a5db98b98d2f indirect=12:2d07a5db98b98d2f +geom 466: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.1258419 motion [] pieces all=12:782692002ac14fb0 camera=12:782692002ac14fb0 shadow=12:782692002ac14fb0 indirect=12:782692002ac14fb0 +geom 467: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.87781215 motion [] pieces all=12:c5121f3612bd75dc camera=12:c5121f3612bd75dc shadow=12:c5121f3612bd75dc indirect=12:c5121f3612bd75dc +geom 468: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.82933056 motion [] pieces all=12:b8b2a37b27ad55e1 camera=12:b8b2a37b27ad55e1 shadow=12:b8b2a37b27ad55e1 indirect=12:b8b2a37b27ad55e1 +geom 469: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.1671188 motion [] pieces all=12:e9ddfcb68e4e2c32 camera=12:e9ddfcb68e4e2c32 shadow=12:e9ddfcb68e4e2c32 indirect=12:e9ddfcb68e4e2c32 +geom 470: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0159265 motion [] pieces all=12:5952669ebcc3109f camera=12:5952669ebcc3109f shadow=12:5952669ebcc3109f indirect=12:5952669ebcc3109f +geom 471: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.9372265 motion [] pieces all=12:23e05c31053d2728 camera=12:23e05c31053d2728 shadow=12:23e05c31053d2728 indirect=12:23e05c31053d2728 +geom 472: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.1055912 motion [] pieces all=12:0c7e41d856d8269f camera=12:0c7e41d856d8269f shadow=12:0c7e41d856d8269f indirect=12:0c7e41d856d8269f +geom 473: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.8747676 motion [] pieces all=12:4dafbe2309e854ed camera=12:4dafbe2309e854ed shadow=12:4dafbe2309e854ed indirect=12:4dafbe2309e854ed +geom 474: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0922952 motion [] pieces all=12:7d6fa39dd87dc7c4 camera=12:7d6fa39dd87dc7c4 shadow=12:7d6fa39dd87dc7c4 indirect=12:7d6fa39dd87dc7c4 +geom 475: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.955663 motion [] pieces all=12:52cba7f8dddc2f02 camera=12:52cba7f8dddc2f02 shadow=12:52cba7f8dddc2f02 indirect=12:52cba7f8dddc2f02 +geom 476: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.1761495 motion [] pieces all=12:26a32d0a83946192 camera=12:26a32d0a83946192 shadow=12:26a32d0a83946192 indirect=12:26a32d0a83946192 +geom 477: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.8223541 motion [] pieces all=12:fd6339298e386d30 camera=12:fd6339298e386d30 shadow=12:fd6339298e386d30 indirect=12:fd6339298e386d30 +geom 478: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0418688 motion [] pieces all=12:9b5252cbcc47384a camera=12:9b5252cbcc47384a shadow=12:9b5252cbcc47384a indirect=12:9b5252cbcc47384a +geom 479: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.9039106 motion [] pieces all=12:756db00b963c4514 camera=12:756db00b963c4514 shadow=12:756db00b963c4514 indirect=12:756db00b963c4514 +geom 480: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.151993 motion [] pieces all=12:8ae04cebeee0d55b camera=12:8ae04cebeee0d55b shadow=12:8ae04cebeee0d55b indirect=12:8ae04cebeee0d55b +geom 481: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.8470864 motion [] pieces all=12:36fcfb562fc3fc33 camera=12:36fcfb562fc3fc33 shadow=12:36fcfb562fc3fc33 indirect=12:36fcfb562fc3fc33 +geom 482: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.94315344 motion [] pieces all=12:b50f22a9164da124 camera=12:b50f22a9164da124 shadow=12:b50f22a9164da124 indirect=12:b50f22a9164da124 +geom 483: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0047348 motion [] pieces all=12:166a5e7e8479c8a8 camera=12:166a5e7e8479c8a8 shadow=12:166a5e7e8479c8a8 indirect=12:166a5e7e8479c8a8 +geom 484: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.89837015 motion [] pieces all=12:5fb0ec785972805a camera=12:5fb0ec785972805a shadow=12:5fb0ec785972805a indirect=12:5fb0ec785972805a +geom 485: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.1450866 motion [] pieces all=12:71f9193833382069 camera=12:71f9193833382069 shadow=12:71f9193833382069 indirect=12:71f9193833382069 +geom 486: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0569787 motion [] pieces all=12:ecd163b06c9da77e camera=12:ecd163b06c9da77e shadow=12:ecd163b06c9da77e indirect=12:ecd163b06c9da77e +geom 487: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.9980022 motion [] pieces all=12:1a453d6acdd078c6 camera=12:1a453d6acdd078c6 shadow=12:1a453d6acdd078c6 indirect=12:1a453d6acdd078c6 +geom 488: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.8564381 motion [] pieces all=12:79a65f134dd0bfb6 camera=12:79a65f134dd0bfb6 shadow=12:79a65f134dd0bfb6 indirect=12:79a65f134dd0bfb6 +geom 489: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.1208076 motion [] pieces all=12:aefdaf5b2a91c5d0 camera=12:aefdaf5b2a91c5d0 shadow=12:aefdaf5b2a91c5d0 indirect=12:aefdaf5b2a91c5d0 +geom 490: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.9674158 motion [] pieces all=12:24f3994cd8a85671 camera=12:24f3994cd8a85671 shadow=12:24f3994cd8a85671 indirect=12:24f3994cd8a85671 +geom 491: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0813522 motion [] pieces all=12:10d768a99853baee camera=12:10d768a99853baee shadow=12:10d768a99853baee indirect=12:10d768a99853baee +geom 492: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.81100047 motion [] pieces all=12:d069173a3f83a20e camera=12:d069173a3f83a20e shadow=12:d069173a3f83a20e indirect=12:d069173a3f83a20e +geom 493: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.1944095 motion [] pieces all=12:cde2322d39edf9b3 camera=12:cde2322d39edf9b3 shadow=12:cde2322d39edf9b3 indirect=12:cde2322d39edf9b3 +geom 494: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.9230819 motion [] pieces all=12:640e67fa8d432964 camera=12:640e67fa8d432964 shadow=12:640e67fa8d432964 indirect=12:640e67fa8d432964 +geom 495: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0268614 motion [] pieces all=12:f72dd4065d4fed5e camera=12:f72dd4065d4fed5e shadow=12:f72dd4065d4fed5e indirect=12:f72dd4065d4fed5e +geom 496: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.1700572 motion [] pieces all=12:0ae6a4b3df895154 camera=12:0ae6a4b3df895154 shadow=12:0ae6a4b3df895154 indirect=12:0ae6a4b3df895154 +geom 497: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.8371957 motion [] pieces all=12:381779461269a22a camera=12:381779461269a22a shadow=12:381779461269a22a indirect=12:381779461269a22a +geom 498: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0221655 motion [] pieces all=12:1859584487e48a80 camera=12:1859584487e48a80 shadow=12:1859584487e48a80 indirect=12:1859584487e48a80 +geom 499: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.9253083 motion [] pieces all=12:7e05671613d27647 camera=12:7e05671613d27647 shadow=12:7e05671613d27647 indirect=12:7e05671613d27647 +geom 500: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=12:d69dc8407e39c57d camera=12:d69dc8407e39c57d shadow=12:d69dc8407e39c57d indirect=12:d69dc8407e39c57d +geom 501: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=12:108ece7556e2045d camera=12:108ece7556e2045d shadow=12:108ece7556e2045d indirect=12:108ece7556e2045d +geom 502: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=12:b6f2f6b932607ce5 camera=12:b6f2f6b932607ce5 shadow=12:b6f2f6b932607ce5 indirect=12:b6f2f6b932607ce5 +geom 503: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=12:18f7f442a8f08005 camera=12:18f7f442a8f08005 shadow=12:18f7f442a8f08005 indirect=12:18f7f442a8f08005 +geom 504: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=12:95835634df888e55 camera=12:95835634df888e55 shadow=12:95835634df888e55 indirect=12:95835634df888e55 +geom 505: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=12:26e126fb8d08607d camera=12:26e126fb8d08607d shadow=12:26e126fb8d08607d indirect=12:26e126fb8d08607d +geom 506: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=4:d3ae5d8c61eeefd5 camera=4:d3ae5d8c61eeefd5 shadow=4:d3ae5d8c61eeefd5 indirect=4:d3ae5d8c61eeefd5 +geom 507: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:02dee92ba923d022 camera=2:02dee92ba923d022 shadow=2:02dee92ba923d022 indirect=2:02dee92ba923d022 +geom 508: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:d420bef838b31092 camera=2:d420bef838b31092 shadow=2:d420bef838b31092 indirect=2:d420bef838b31092 +geom 509: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=128:7e7f92bf6cf1e8e1 camera=128:7e7f92bf6cf1e8e1 shadow=128:7e7f92bf6cf1e8e1 indirect=128:7e7f92bf6cf1e8e1 +geom 510: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:5fd3af8a8974e005 camera=2:5fd3af8a8974e005 shadow=2:5fd3af8a8974e005 indirect=2:5fd3af8a8974e005 +geom 511: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:9626b0f2f3e041c5 camera=2:9626b0f2f3e041c5 shadow=2:9626b0f2f3e041c5 indirect=2:9626b0f2f3e041c5 +geom 512: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=12:65eff1dac76e16e5 camera=12:65eff1dac76e16e5 shadow=12:65eff1dac76e16e5 indirect=12:65eff1dac76e16e5 +geom 513: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=12:c5bbf2f135b5e22b camera=12:c5bbf2f135b5e22b shadow=12:c5bbf2f135b5e22b indirect=12:c5bbf2f135b5e22b +geom 514: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:77f8032df1a5e1f5 camera=2:77f8032df1a5e1f5 shadow=2:77f8032df1a5e1f5 indirect=2:77f8032df1a5e1f5 +provenance arc source: /Crate +provenance arc source: /Crate/geo +provenance arc source: /World/abs/Prototypes/stone_a +provenance arc source: /_Cube +provenance light /World/Sky: LightOrigin { index: 0, geoms: 514..514 } +provenance geometry 0..500: /World/abs +provenance geometry 500..501: /World/pebble/geo +provenance geometry 501..502: /World/away/geo +provenance geometry 502..503: /World/box/geo +provenance geometry 503..504: /World/sunk/geo +provenance geometry 504..505: /World/rock/geo +provenance geometry 505..506: /World/vase/geo +provenance geometry 506..507: /World/steps/geo +provenance geometry 507..508: /World/field/geo +provenance geometry 508..509: /World/slope/geo +provenance geometry 509..510: /World/terrain/geo +provenance geometry 510..511: /World/shelf/geo +provenance geometry 511..512: /World/floor/geo +provenance geometry 512..513: /World/inst +provenance geometry 513..514: /World/crate/geo +provenance geometry 514..515: /World/table/geo +provenance mesh: MeshOrigin { geom_id: 500, slot: 1, baked: false, moving: false } +provenance mesh: MeshOrigin { geom_id: 501, slot: 1, baked: false, moving: false } +provenance mesh: MeshOrigin { geom_id: 502, slot: 1, baked: false, moving: false } +provenance mesh: MeshOrigin { geom_id: 503, slot: 1, baked: false, moving: false } +provenance mesh: MeshOrigin { geom_id: 504, slot: 2, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 505, slot: 3, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 506, slot: 4, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 507, slot: 5, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 508, slot: 6, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 509, slot: 7, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 510, slot: 8, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 511, slot: 9, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 513, slot: 1, baked: false, moving: false } +provenance mesh: MeshOrigin { geom_id: 514, slot: 10, baked: true, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 4345222167175548266, n_points: 8, n_indices: 24, n_uvs: None, smooth: true, material: 0 }), placements: 0, shared: true, displaced: false } +provenance mesh slot 1: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 2634041098053373584, n_points: 8, n_indices: 24, n_uvs: None, smooth: true, material: 0 }), placements: 5, shared: true, displaced: false } +provenance mesh slot 2: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 14470132405950877311, n_points: 8, n_indices: 24, n_uvs: None, smooth: true, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 3: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 1206830347127950734, n_points: 8, n_indices: 24, n_uvs: None, smooth: true, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 4: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 9519870911682368984, n_points: 6, n_indices: 8, n_uvs: None, smooth: true, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 5: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 1341889141698287293, n_points: 4, n_indices: 4, n_uvs: None, smooth: true, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 6: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 1313731086437247865, n_points: 4, n_indices: 4, n_uvs: None, smooth: true, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 7: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 15760070156626746114, n_points: 81, n_indices: 256, n_uvs: None, smooth: true, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 8: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 1050066994217133652, n_points: 4, n_indices: 4, n_uvs: None, smooth: true, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 9: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 14002714535549629103, n_points: 4, n_indices: 4, n_uvs: None, smooth: true, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 10: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 14095911038168715313, n_points: 4, n_indices: 4, n_uvs: None, smooth: true, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: true }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/World/Cam"), cameras: ["/World/Cam"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/World/Cam"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/placed_usda-000d21c7a8ef61e5-1.image b/crates/crust-core/tests/data/import_baselines/placed_usda-000d21c7a8ef61e5-1.image new file mode 100644 index 000000000..fd0242994 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/placed_usda-000d21c7a8ef61e5-1.image @@ -0,0 +1 @@ +48x32 16spp clamp-off e1aa85f418965034 diff --git a/crates/crust-core/tests/data/import_baselines/placed_usda-0ba3af4ffa595294-1.digest b/crates/crust-core/tests/data/import_baselines/placed_usda-0ba3af4ffa595294-1.digest new file mode 100644 index 000000000..019f6cc8f --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/placed_usda-0ba3af4ffa595294-1.digest @@ -0,0 +1,585 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/World/Cam") +camera: Camera { origin: Vec3A(0.0, 4.0, 14.0), lower_left_corner: Vec3A(-6.371167, -0.2474451, 4.0), horizontal: Vec3A(12.742334, 0.0, 0.0), vertical: Vec3A(0.0, 8.49489, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: Some("/Render/settings") +settings: RenderSettings { samples_per_pixel: 128, max_depth: 3, width: 48, height: 32, region: PixelRect { x0: 0, y0: 0, x1: 48, y1: 32 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 18.0, aperture: [20.955, 15.2908], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 10.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/placed.usda", "$DIR/stage.usda", "$DIR/table.usda"], invisible_overrides: Some(0) } +layer: $DIR/crate.usda +layer: $DIR/placed.usda +layer: $DIR/stage.usda +layer: $DIR/stone_a.usda +layer: $DIR/stone_b.usda +layer: $DIR/table.usda +lights: 1 +light 0: dome name Some("/World/Sky") lpe None pmf 1.0 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 515 geometries, PrimitiveBreakdown { triangles: 166, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 506 } top level, PrimitiveBreakdown { triangles: 202, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 506 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.85878265 motion [] pieces all=12:4a7ce981a77a45dc camera=12:4a7ce981a77a45dc shadow=12:4a7ce981a77a45dc indirect=12:4a7ce981a77a45dc +geom 1: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0621822 motion [] pieces all=12:7f460c3f4205f9d8 camera=12:7f460c3f4205f9d8 shadow=12:7f460c3f4205f9d8 indirect=12:7f460c3f4205f9d8 +geom 2: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.1032221 motion [] pieces all=12:1678416377c7163e camera=12:1678416377c7163e shadow=12:1678416377c7163e indirect=12:1678416377c7163e +geom 3: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.91270643 motion [] pieces all=12:d0cb6b37926ed352 camera=12:d0cb6b37926ed352 shadow=12:d0cb6b37926ed352 indirect=12:d0cb6b37926ed352 +geom 4: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.1810359 motion [] pieces all=12:c8a118140377ae27 camera=12:c8a118140377ae27 shadow=12:c8a118140377ae27 indirect=12:c8a118140377ae27 +geom 5: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.95435476 motion [] pieces all=12:4de24d48d37305d2 camera=12:4de24d48d37305d2 shadow=12:4de24d48d37305d2 indirect=12:4de24d48d37305d2 +geom 6: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0139806 motion [] pieces all=12:814a579d8c7da8cd camera=12:814a579d8c7da8cd shadow=12:814a579d8c7da8cd indirect=12:814a579d8c7da8cd +geom 7: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.8400603 motion [] pieces all=12:9ca5ad64753ef3c0 camera=12:9ca5ad64753ef3c0 shadow=12:9ca5ad64753ef3c0 indirect=12:9ca5ad64753ef3c0 +geom 8: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0940638 motion [] pieces all=12:34342a8c32990810 camera=12:34342a8c32990810 shadow=12:34342a8c32990810 indirect=12:34342a8c32990810 +geom 9: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.89853656 motion [] pieces all=12:785bfe70ff318b94 camera=12:785bfe70ff318b94 shadow=12:785bfe70ff318b94 indirect=12:785bfe70ff318b94 +geom 10: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.1342819 motion [] pieces all=12:a07f0d3a29048931 camera=12:a07f0d3a29048931 shadow=12:a07f0d3a29048931 indirect=12:a07f0d3a29048931 +geom 11: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.93690443 motion [] pieces all=12:766be6e075579cb7 camera=12:766be6e075579cb7 shadow=12:766be6e075579cb7 indirect=12:766be6e075579cb7 +geom 12: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0303864 motion [] pieces all=12:6b69c4fd088e2232 camera=12:6b69c4fd088e2232 shadow=12:6b69c4fd088e2232 indirect=12:6b69c4fd088e2232 +geom 13: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.82241315 motion [] pieces all=12:451ec0a7e7abca8e camera=12:451ec0a7e7abca8e shadow=12:451ec0a7e7abca8e indirect=12:451ec0a7e7abca8e +geom 14: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.1749351 motion [] pieces all=12:1de0b571a37add95 camera=12:1de0b571a37add95 shadow=12:1de0b571a37add95 indirect=12:1de0b571a37add95 +geom 15: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.9928434 motion [] pieces all=12:34144b6de162d3f1 camera=12:34144b6de162d3f1 shadow=12:34144b6de162d3f1 indirect=12:34144b6de162d3f1 +geom 16: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.1149167 motion [] pieces all=12:75cc396be4f74c43 camera=12:75cc396be4f74c43 shadow=12:75cc396be4f74c43 indirect=12:75cc396be4f74c43 +geom 17: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.9051679 motion [] pieces all=12:11ac031b5a9fcb45 camera=12:11ac031b5a9fcb45 shadow=12:11ac031b5a9fcb45 indirect=12:11ac031b5a9fcb45 +geom 18: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.8709032 motion [] pieces all=12:2eb8bdcddde357ea camera=12:2eb8bdcddde357ea shadow=12:2eb8bdcddde357ea indirect=12:2eb8bdcddde357ea +geom 19: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0726447 motion [] pieces all=12:5ca8b1c5a6c9256a camera=12:5ca8b1c5a6c9256a shadow=12:5ca8b1c5a6c9256a indirect=12:5ca8b1c5a6c9256a +geom 20: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.1990019 motion [] pieces all=12:6e614a0fc4193a3f camera=12:6e614a0fc4193a3f shadow=12:6e614a0fc4193a3f indirect=12:6e614a0fc4193a3f +geom 21: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.9691331 motion [] pieces all=12:7f1925a8fdf3055c camera=12:7f1925a8fdf3055c shadow=12:7f1925a8fdf3055c indirect=12:7f1925a8fdf3055c +geom 22: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.8318402 motion [] pieces all=12:938f605de903b72b camera=12:938f605de903b72b shadow=12:938f605de903b72b indirect=12:938f605de903b72b +geom 23: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0102566 motion [] pieces all=12:8b01eecfbf9be861 camera=12:8b01eecfbf9be861 shadow=12:8b01eecfbf9be861 indirect=12:8b01eecfbf9be861 +geom 24: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.9398477 motion [] pieces all=12:229863a3897bc078 camera=12:229863a3897bc078 shadow=12:229863a3897bc078 indirect=12:229863a3897bc078 +geom 25: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.1443847 motion [] pieces all=12:0facdd537ccb1ff3 camera=12:0facdd537ccb1ff3 shadow=12:0facdd537ccb1ff3 indirect=12:0facdd537ccb1ff3 +geom 26: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0771313 motion [] pieces all=12:7cdc2285c5be2896 camera=12:7cdc2285c5be2896 shadow=12:7cdc2285c5be2896 indirect=12:7cdc2285c5be2896 +geom 27: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.8794707 motion [] pieces all=12:b732854065b8be4e camera=12:b732854065b8be4e shadow=12:b732854065b8be4e indirect=12:b732854065b8be4e +geom 28: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0408598 motion [] pieces all=12:bd15480edc8344fb camera=12:bd15480edc8344fb shadow=12:bd15480edc8344fb indirect=12:bd15480edc8344fb +geom 29: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.80347484 motion [] pieces all=12:3c6b9aeb2bc81281 camera=12:3c6b9aeb2bc81281 shadow=12:3c6b9aeb2bc81281 indirect=12:3c6b9aeb2bc81281 +geom 30: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.1603166 motion [] pieces all=12:eafc6e18391e1865 camera=12:eafc6e18391e1865 shadow=12:eafc6e18391e1865 indirect=12:eafc6e18391e1865 +geom 31: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.97711354 motion [] pieces all=12:4e48165b1a134dbd camera=12:4e48165b1a134dbd shadow=12:4e48165b1a134dbd indirect=12:4e48165b1a134dbd +geom 32: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0898775 motion [] pieces all=12:0271a4c9d61474a9 camera=12:0271a4c9d61474a9 shadow=12:0271a4c9d61474a9 indirect=12:0271a4c9d61474a9 +geom 33: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.889788 motion [] pieces all=12:76c82251c6654ce2 camera=12:76c82251c6654ce2 shadow=12:76c82251c6654ce2 indirect=12:76c82251c6654ce2 +geom 34: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.1311787 motion [] pieces all=12:6994e9f854cf551a camera=12:6994e9f854cf551a shadow=12:6994e9f854cf551a indirect=12:6994e9f854cf551a +geom 35: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.92769957 motion [] pieces all=12:add4fd67decd334e camera=12:add4fd67decd334e shadow=12:add4fd67decd334e indirect=12:add4fd67decd334e +geom 36: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.99779445 motion [] pieces all=12:dea1bf20beaca038 camera=12:dea1bf20beaca038 shadow=12:dea1bf20beaca038 indirect=12:dea1bf20beaca038 +geom 37: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.1644945 motion [] pieces all=12:78275f6568c9b154 camera=12:78275f6568c9b154 shadow=12:78275f6568c9b154 indirect=12:78275f6568c9b154 +geom 38: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0367502 motion [] pieces all=12:f8bfcc83a9e04b61 camera=12:f8bfcc83a9e04b61 shadow=12:f8bfcc83a9e04b61 indirect=12:f8bfcc83a9e04b61 +geom 39: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.8137814 motion [] pieces all=12:17dcf06d16c013c2 camera=12:17dcf06d16c013c2 shadow=12:17dcf06d16c013c2 indirect=12:17dcf06d16c013c2 +geom 40: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.9602007 motion [] pieces all=12:44038257b67dcaed camera=12:44038257b67dcaed shadow=12:44038257b67dcaed indirect=12:44038257b67dcaed +geom 41: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.1858724 motion [] pieces all=12:8ea8668632df08c8 camera=12:8ea8668632df08c8 shadow=12:8ea8668632df08c8 indirect=12:8ea8668632df08c8 +geom 42: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.019928 motion [] pieces all=12:2bd0aa6cd6c1fb99 camera=12:2bd0aa6cd6c1fb99 shadow=12:2bd0aa6cd6c1fb99 indirect=12:2bd0aa6cd6c1fb99 +geom 43: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.84462976 motion [] pieces all=12:2b617ffce3e5d992 camera=12:2b617ffce3e5d992 shadow=12:2b617ffce3e5d992 indirect=12:2b617ffce3e5d992 +geom 44: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.8552069 motion [] pieces all=12:7b6b1c6c0b0aaaea camera=12:7b6b1c6c0b0aaaea shadow=12:7b6b1c6c0b0aaaea indirect=12:7b6b1c6c0b0aaaea +geom 45: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0555911 motion [] pieces all=12:d2373d90411234aa camera=12:d2373d90411234aa shadow=12:d2373d90411234aa indirect=12:d2373d90411234aa +geom 46: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.9198521 motion [] pieces all=12:e5bb129648fa7d1c camera=12:e5bb129648fa7d1c shadow=12:e5bb129648fa7d1c indirect=12:e5bb129648fa7d1c +geom 47: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.1088389 motion [] pieces all=12:e619752696c689e7 camera=12:e619752696c689e7 shadow=12:e619752696c689e7 indirect=12:e619752696c689e7 +geom 48: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.8677544 motion [] pieces all=12:83aa02b1796ba343 camera=12:83aa02b1796ba343 shadow=12:83aa02b1796ba343 indirect=12:83aa02b1796ba343 +geom 49: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0663643 motion [] pieces all=12:9ae3293fb9f3ca5a camera=12:9ae3293fb9f3ca5a shadow=12:9ae3293fb9f3ca5a indirect=12:9ae3293fb9f3ca5a +geom 50: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.1223677 motion [] pieces all=12:d9d35de722c3c6ec camera=12:d9d35de722c3c6ec shadow=12:d9d35de722c3c6ec indirect=12:d9d35de722c3c6ec +geom 51: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.90960747 motion [] pieces all=12:d02b83a3c060fad1 camera=12:d02b83a3c060fad1 shadow=12:d02b83a3c060fad1 indirect=12:d02b83a3c060fad1 +geom 52: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.9671436 motion [] pieces all=12:920e4e48fe7bab98 camera=12:920e4e48fe7bab98 shadow=12:920e4e48fe7bab98 indirect=12:920e4e48fe7bab98 +geom 53: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.1899202 motion [] pieces all=12:8c9e812715079f38 camera=12:8c9e812715079f38 shadow=12:8c9e812715079f38 indirect=12:8c9e812715079f38 +geom 54: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.82996446 motion [] pieces all=12:6ef5448dcc0e160d camera=12:6ef5448dcc0e160d shadow=12:6ef5448dcc0e160d indirect=12:6ef5448dcc0e160d +geom 55: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.002055 motion [] pieces all=12:3fe8cbfdaf1c6417 camera=12:3fe8cbfdaf1c6417 shadow=12:3fe8cbfdaf1c6417 indirect=12:3fe8cbfdaf1c6417 +geom 56: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0857158 motion [] pieces all=12:e67302e2ed4b28f9 camera=12:e67302e2ed4b28f9 shadow=12:e67302e2ed4b28f9 indirect=12:e67302e2ed4b28f9 +geom 57: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.88740104 motion [] pieces all=12:f20f660a4916e4e4 camera=12:f20f660a4916e4e4 shadow=12:f20f660a4916e4e4 indirect=12:f20f660a4916e4e4 +geom 58: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.1416987 motion [] pieces all=12:99e8c65e562d6012 camera=12:99e8c65e562d6012 shadow=12:99e8c65e562d6012 indirect=12:99e8c65e562d6012 +geom 59: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.9445792 motion [] pieces all=12:ad40b22766d03cd2 camera=12:ad40b22766d03cd2 shadow=12:ad40b22766d03cd2 indirect=12:ad40b22766d03cd2 +geom 60: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.8111404 motion [] pieces all=12:85cba3060b732cd8 camera=12:85cba3060b732cd8 shadow=12:85cba3060b732cd8 indirect=12:85cba3060b732cd8 +geom 61: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0472555 motion [] pieces all=12:8f3ca5d795e601ef camera=12:8f3ca5d795e601ef shadow=12:8f3ca5d795e601ef indirect=12:8f3ca5d795e601ef +geom 62: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.9834107 motion [] pieces all=12:5f5329c4ef00eff2 camera=12:5f5329c4ef00eff2 shadow=12:5f5329c4ef00eff2 indirect=12:5f5329c4ef00eff2 +geom 63: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.15213 motion [] pieces all=12:3209b77aa3a80b46 camera=12:3209b77aa3a80b46 shadow=12:3209b77aa3a80b46 indirect=12:3209b77aa3a80b46 +geom 64: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.8719985 motion [] pieces all=12:17f57c54b778828c camera=12:17f57c54b778828c shadow=12:17f57c54b778828c indirect=12:17f57c54b778828c +geom 65: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0701995 motion [] pieces all=12:48a256dda8ecd361 camera=12:48a256dda8ecd361 shadow=12:48a256dda8ecd361 indirect=12:48a256dda8ecd361 +geom 66: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.1159035 motion [] pieces all=12:72fd020ea58b153e camera=12:72fd020ea58b153e shadow=12:72fd020ea58b153e indirect=12:72fd020ea58b153e +geom 67: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.9000529 motion [] pieces all=12:47b2c1acbf8892e6 camera=12:47b2c1acbf8892e6 shadow=12:47b2c1acbf8892e6 indirect=12:47b2c1acbf8892e6 +geom 68: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.1961097 motion [] pieces all=12:aa6ed850c63cc77f camera=12:aa6ed850c63cc77f shadow=12:aa6ed850c63cc77f indirect=12:aa6ed850c63cc77f +geom 69: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.97268385 motion [] pieces all=12:bb1e10c5780055b4 camera=12:bb1e10c5780055b4 shadow=12:bb1e10c5780055b4 indirect=12:bb1e10c5780055b4 +geom 70: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.007599 motion [] pieces all=12:7bc15cac2f8ed050 camera=12:7bc15cac2f8ed050 shadow=12:7bc15cac2f8ed050 indirect=12:7bc15cac2f8ed050 +geom 71: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.83622175 motion [] pieces all=12:f145e1823753966c camera=12:f145e1823753966c shadow=12:f145e1823753966c indirect=12:f145e1823753966c +geom 72: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.97999376 motion [] pieces all=12:20a5f16b18da1d2a camera=12:20a5f16b18da1d2a shadow=12:20a5f16b18da1d2a indirect=12:20a5f16b18da1d2a +geom 73: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.157052 motion [] pieces all=12:6c0b93fdbad65f51 camera=12:6c0b93fdbad65f51 shadow=12:6c0b93fdbad65f51 indirect=12:6c0b93fdbad65f51 +geom 74: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.8027509 motion [] pieces all=12:6e04f0a388c19169 camera=12:6e04f0a388c19169 shadow=12:6e04f0a388c19169 indirect=12:6e04f0a388c19169 +geom 75: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0398135 motion [] pieces all=12:335d0f43c788f268 camera=12:335d0f43c788f268 shadow=12:335d0f43c788f268 indirect=12:335d0f43c788f268 +geom 76: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0810779 motion [] pieces all=12:6619b2b0af227fe6 camera=12:6619b2b0af227fe6 shadow=12:6619b2b0af227fe6 indirect=12:6619b2b0af227fe6 +geom 77: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.8756795 motion [] pieces all=12:273d169c3fb5ce59 camera=12:273d169c3fb5ce59 shadow=12:273d169c3fb5ce59 indirect=12:273d169c3fb5ce59 +geom 78: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.9414442 motion [] pieces all=12:07b8be091dbd60d6 camera=12:07b8be091dbd60d6 shadow=12:07b8be091dbd60d6 indirect=12:07b8be091dbd60d6 +geom 79: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.1482779 motion [] pieces all=12:8b309a8b9290fe5c camera=12:8b309a8b9290fe5c shadow=12:8b309a8b9290fe5c indirect=12:8b309a8b9290fe5c +geom 80: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.1694127 motion [] pieces all=12:10a7fcb8a85293bf camera=12:10a7fcb8a85293bf shadow=12:10a7fcb8a85293bf indirect=12:10a7fcb8a85293bf +geom 81: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.9905864 motion [] pieces all=12:83aa063b1bcad66f camera=12:83aa063b1bcad66f shadow=12:83aa063b1bcad66f indirect=12:83aa063b1bcad66f +geom 82: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.82180035 motion [] pieces all=12:6853effa08f0be98 camera=12:6853effa08f0be98 shadow=12:6853effa08f0be98 indirect=12:6853effa08f0be98 +geom 83: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0262914 motion [] pieces all=12:d03bc8fc77b265fb camera=12:d03bc8fc77b265fb shadow=12:d03bc8fc77b265fb indirect=12:d03bc8fc77b265fb +geom 84: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.89420116 motion [] pieces all=12:bffb0e91df369eb3 camera=12:bffb0e91df369eb3 shadow=12:bffb0e91df369eb3 indirect=12:bffb0e91df369eb3 +geom 85: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0970112 motion [] pieces all=12:532357dc8ee63993 camera=12:532357dc8ee63993 shadow=12:532357dc8ee63993 indirect=12:532357dc8ee63993 +geom 86: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.9321313 motion [] pieces all=12:5bfff795c5c2d6ec camera=12:5bfff795c5c2d6ec shadow=12:5bfff795c5c2d6ec indirect=12:5bfff795c5c2d6ec +geom 87: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.135688 motion [] pieces all=12:01b27ee45f00a876 camera=12:01b27ee45f00a876 shadow=12:01b27ee45f00a876 indirect=12:01b27ee45f00a876 +geom 88: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.175917 motion [] pieces all=12:72079b650dfcf00a camera=12:72079b650dfcf00a shadow=12:72079b650dfcf00a indirect=12:72079b650dfcf00a +geom 89: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.95032704 motion [] pieces all=12:4f6fa978607199cd camera=12:4f6fa978607199cd shadow=12:4f6fa978607199cd indirect=12:4f6fa978607199cd +geom 90: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.8417298 motion [] pieces all=12:fd288fa332aad02b camera=12:fd288fa332aad02b shadow=12:fd288fa332aad02b indirect=12:fd288fa332aad02b +geom 91: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0175012 motion [] pieces all=12:32c4b05995724f5e camera=12:32c4b05995724f5e shadow=12:32c4b05995724f5e indirect=12:32c4b05995724f5e +geom 92: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.918721 motion [] pieces all=12:763434be26bfda41 camera=12:763434be26bfda41 shadow=12:763434be26bfda41 indirect=12:763434be26bfda41 +geom 93: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.1000438 motion [] pieces all=12:25dde8bfef0eea1d camera=12:25dde8bfef0eea1d shadow=12:25dde8bfef0eea1d indirect=12:25dde8bfef0eea1d +geom 94: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0591766 motion [] pieces all=12:98652a7293840291 camera=12:98652a7293840291 shadow=12:98652a7293840291 indirect=12:98652a7293840291 +geom 95: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.8621936 motion [] pieces all=12:ec8a770e41a3e80a camera=12:ec8a770e41a3e80a shadow=12:ec8a770e41a3e80a indirect=12:ec8a770e41a3e80a +geom 96: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.94883096 motion [] pieces all=12:bb936f54ee6c3801 camera=12:bb936f54ee6c3801 shadow=12:bb936f54ee6c3801 indirect=12:bb936f54ee6c3801 +geom 97: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.1404362 motion [] pieces all=12:de86014d1714e81a camera=12:de86014d1714e81a shadow=12:de86014d1714e81a indirect=12:de86014d1714e81a +geom 98: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.88423145 motion [] pieces all=12:e0b588097e385a23 camera=12:e0b588097e385a23 shadow=12:e0b588097e385a23 indirect=12:e0b588097e385a23 +geom 99: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0829165 motion [] pieces all=12:28707fdf3f1974df camera=12:28707fdf3f1974df shadow=12:28707fdf3f1974df indirect=12:28707fdf3f1974df +geom 100: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.9865734 motion [] pieces all=12:f2c9c9b49837d37c camera=12:f2c9c9b49837d37c shadow=12:f2c9c9b49837d37c indirect=12:f2c9c9b49837d37c +geom 101: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.1531285 motion [] pieces all=12:46cbfb43498b43ef camera=12:46cbfb43498b43ef shadow=12:46cbfb43498b43ef indirect=12:46cbfb43498b43ef +geom 102: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.80742896 motion [] pieces all=12:af01706981ab9e99 camera=12:af01706981ab9e99 shadow=12:af01706981ab9e99 indirect=12:af01706981ab9e99 +geom 103: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0459248 motion [] pieces all=12:4084ca5564151117 camera=12:4084ca5564151117 shadow=12:4084ca5564151117 indirect=12:4084ca5564151117 +geom 104: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.96455026 motion [] pieces all=12:5b1c22f0903d14c2 camera=12:5b1c22f0903d14c2 shadow=12:5b1c22f0903d14c2 indirect=12:5b1c22f0903d14c2 +geom 105: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.1906883 motion [] pieces all=12:9b8e23b90d7bc661 camera=12:9b8e23b90d7bc661 shadow=12:9b8e23b90d7bc661 indirect=12:9b8e23b90d7bc661 +geom 106: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.82737714 motion [] pieces all=12:b01c89fe06e2248e camera=12:b01c89fe06e2248e shadow=12:b01c89fe06e2248e indirect=12:b01c89fe06e2248e +geom 107: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.004447 motion [] pieces all=12:db644fe8aac70f07 camera=12:db644fe8aac70f07 shadow=12:db644fe8aac70f07 indirect=12:db644fe8aac70f07 +geom 108: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.1191746 motion [] pieces all=12:c26ebabd712d9b23 camera=12:c26ebabd712d9b23 shadow=12:c26ebabd712d9b23 indirect=12:c26ebabd712d9b23 +geom 109: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.908148 motion [] pieces all=12:27980e7f7830ccd2 camera=12:27980e7f7830ccd2 shadow=12:27980e7f7830ccd2 indirect=12:27980e7f7830ccd2 +geom 110: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0637071 motion [] pieces all=12:97fcccf3b9163292 camera=12:97fcccf3b9163292 shadow=12:97fcccf3b9163292 indirect=12:97fcccf3b9163292 +geom 111: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.8640643 motion [] pieces all=12:3bc0d6686f7ce4f6 camera=12:3bc0d6686f7ce4f6 shadow=12:3bc0d6686f7ce4f6 indirect=12:3bc0d6686f7ce4f6 +geom 112: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.1681553 motion [] pieces all=12:6effaf94c0658204 camera=12:6effaf94c0658204 shadow=12:6effaf94c0658204 indirect=12:6effaf94c0658204 +geom 113: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.99509203 motion [] pieces all=12:a45cd07ae3adf7f4 camera=12:a45cd07ae3adf7f4 shadow=12:a45cd07ae3adf7f4 indirect=12:a45cd07ae3adf7f4 +geom 114: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.8169518 motion [] pieces all=12:b42f93ab67accdfc camera=12:b42f93ab67accdfc shadow=12:b42f93ab67accdfc indirect=12:b42f93ab67accdfc +geom 115: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0320978 motion [] pieces all=12:c6ebefe6c81a51fe camera=12:c6ebefe6c81a51fe shadow=12:c6ebefe6c81a51fe indirect=12:c6ebefe6c81a51fe +geom 116: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.1279283 motion [] pieces all=12:51e5bb657853370b camera=12:51e5bb657853370b shadow=12:51e5bb657853370b indirect=12:51e5bb657853370b +geom 117: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.93079096 motion [] pieces all=12:7c3221ea0c79b430 camera=12:7c3221ea0c79b430 shadow=12:7c3221ea0c79b430 indirect=12:7c3221ea0c79b430 +geom 118: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.8928701 motion [] pieces all=12:11e165819deb849a camera=12:11e165819deb849a shadow=12:11e165819deb849a indirect=12:11e165819deb849a +geom 119: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0925199 motion [] pieces all=12:ec49994f3f5403fa camera=12:ec49994f3f5403fa shadow=12:ec49994f3f5403fa indirect=12:ec49994f3f5403fa +geom 120: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0524871 motion [] pieces all=12:adcd7590e5ea37f9 camera=12:adcd7590e5ea37f9 shadow=12:adcd7590e5ea37f9 indirect=12:adcd7590e5ea37f9 +geom 121: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.850143 motion [] pieces all=12:fd2d2cff46adc729 camera=12:fd2d2cff46adc729 shadow=12:fd2d2cff46adc729 indirect=12:fd2d2cff46adc729 +geom 122: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.9240767 motion [] pieces all=12:b1fc118f860035e2 camera=12:b1fc118f860035e2 shadow=12:b1fc118f860035e2 indirect=12:b1fc118f860035e2 +geom 123: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.1098039 motion [] pieces all=12:21e0dbbbb7d98f1f camera=12:21e0dbbbb7d98f1f shadow=12:21e0dbbbb7d98f1f indirect=12:21e0dbbbb7d98f1f +geom 124: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0238377 motion [] pieces all=12:81e6ce74500b7382 camera=12:81e6ce74500b7382 shadow=12:81e6ce74500b7382 indirect=12:81e6ce74500b7382 +geom 125: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.8495114 motion [] pieces all=12:ab03f3849c00d57d camera=12:ab03f3849c00d57d shadow=12:ab03f3849c00d57d indirect=12:ab03f3849c00d57d +geom 126: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.95666397 motion [] pieces all=12:4f31cc20c2fc502d camera=12:4f31cc20c2fc502d shadow=12:4f31cc20c2fc502d indirect=12:4f31cc20c2fc502d +geom 127: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.1837139 motion [] pieces all=12:f2f318a7a6c68ac5 camera=12:f2f318a7a6c68ac5 shadow=12:f2f318a7a6c68ac5 indirect=12:f2f318a7a6c68ac5 +geom 128: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.1926862 motion [] pieces all=12:82c9eeedf01c7004 camera=12:82c9eeedf01c7004 shadow=12:82c9eeedf01c7004 indirect=12:82c9eeedf01c7004 +geom 129: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.962592 motion [] pieces all=12:d6e151ac9246ef0f camera=12:d6e151ac9246ef0f shadow=12:d6e151ac9246ef0f indirect=12:d6e151ac9246ef0f +geom 130: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.82533383 motion [] pieces all=12:755f28eaf805d90a camera=12:755f28eaf805d90a shadow=12:755f28eaf805d90a indirect=12:755f28eaf805d90a +geom 131: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0061023 motion [] pieces all=12:dfb011469500cec0 camera=12:dfb011469500cec0 shadow=12:dfb011469500cec0 indirect=12:dfb011469500cec0 +geom 132: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.064578 motion [] pieces all=12:f0f6e624dfc11f08 camera=12:f0f6e624dfc11f08 shadow=12:f0f6e624dfc11f08 indirect=12:f0f6e624dfc11f08 +geom 133: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.86366814 motion [] pieces all=12:1e61f625945f2b7e camera=12:1e61f625945f2b7e shadow=12:1e61f625945f2b7e indirect=12:1e61f625945f2b7e +geom 134: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.1203573 motion [] pieces all=12:4d98368ed07c3705 camera=12:4d98368ed07c3705 shadow=12:4d98368ed07c3705 indirect=12:4d98368ed07c3705 +geom 135: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.90657663 motion [] pieces all=12:10cfaeaa4676a80f camera=12:10cfaeaa4676a80f shadow=12:10cfaeaa4676a80f indirect=12:10cfaeaa4676a80f +geom 136: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.1550328 motion [] pieces all=12:9340b36715ba58c3 camera=12:9340b36715ba58c3 shadow=12:9340b36715ba58c3 indirect=12:9340b36715ba58c3 +geom 137: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.9854282 motion [] pieces all=12:b0b11a64e716ce86 camera=12:b0b11a64e716ce86 shadow=12:b0b11a64e716ce86 indirect=12:b0b11a64e716ce86 +geom 138: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.80875623 motion [] pieces all=12:e728cd3e0f0b59de camera=12:e728cd3e0f0b59de shadow=12:e728cd3e0f0b59de indirect=12:e728cd3e0f0b59de +geom 139: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0449554 motion [] pieces all=12:03cf3a8714b02f3e camera=12:03cf3a8714b02f3e shadow=12:03cf3a8714b02f3e indirect=12:03cf3a8714b02f3e +geom 140: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.9470196 motion [] pieces all=12:742a4a5265f2e174 camera=12:742a4a5265f2e174 shadow=12:742a4a5265f2e174 indirect=12:742a4a5265f2e174 +geom 141: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.1382898 motion [] pieces all=12:8411a2fb2e9c72e9 camera=12:8411a2fb2e9c72e9 shadow=12:8411a2fb2e9c72e9 indirect=12:8411a2fb2e9c72e9 +geom 142: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.08233 motion [] pieces all=12:ce124d789c85f942 camera=12:ce124d789c85f942 shadow=12:ce124d789c85f942 indirect=12:ce124d789c85f942 +geom 143: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.88240635 motion [] pieces all=12:bc84f8939fd1a67b camera=12:bc84f8939fd1a67b shadow=12:bc84f8939fd1a67b indirect=12:bc84f8939fd1a67b +geom 144: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0910163 motion [] pieces all=12:735f10cbe4e9e0e1 camera=12:735f10cbe4e9e0e1 shadow=12:735f10cbe4e9e0e1 indirect=12:735f10cbe4e9e0e1 +geom 145: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.891397 motion [] pieces all=12:9089250bc2fbc498 camera=12:9089250bc2fbc498 shadow=12:9089250bc2fbc498 indirect=12:9089250bc2fbc498 +geom 146: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.1255128 motion [] pieces all=12:19c184b970f4b55f camera=12:19c184b970f4b55f shadow=12:19c184b970f4b55f indirect=12:19c184b970f4b55f +geom 147: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.9289093 motion [] pieces all=12:45f31945727098eb camera=12:45f31945727098eb shadow=12:45f31945727098eb indirect=12:45f31945727098eb +geom 148: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.9954967 motion [] pieces all=12:3afdc403be4193b5 camera=12:3afdc403be4193b5 shadow=12:3afdc403be4193b5 indirect=12:3afdc403be4193b5 +geom 149: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.1661328 motion [] pieces all=12:860c97ea1e9411ae camera=12:860c97ea1e9411ae shadow=12:860c97ea1e9411ae indirect=12:860c97ea1e9411ae +geom 150: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0336131 motion [] pieces all=12:65ebbde758d3c842 camera=12:65ebbde758d3c842 shadow=12:65ebbde758d3c842 indirect=12:65ebbde758d3c842 +geom 151: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.8186712 motion [] pieces all=12:38aae369ffad3c06 camera=12:38aae369ffad3c06 shadow=12:38aae369ffad3c06 indirect=12:38aae369ffad3c06 +geom 152: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.95803475 motion [] pieces all=12:3395390f05de13fd camera=12:3395390f05de13fd shadow=12:3395390f05de13fd indirect=12:3395390f05de13fd +geom 153: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.1819226 motion [] pieces all=12:25c84cedce7d0f9a camera=12:25c84cedce7d0f9a shadow=12:25c84cedce7d0f9a indirect=12:25c84cedce7d0f9a +geom 154: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0225748 motion [] pieces all=12:10b490d82579b39f camera=12:10b490d82579b39f shadow=12:10b490d82579b39f indirect=12:10b490d82579b39f +geom 155: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.84697896 motion [] pieces all=12:23bd3abf1f35910b camera=12:23bd3abf1f35910b shadow=12:23bd3abf1f35910b indirect=12:23bd3abf1f35910b +geom 156: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.85211504 motion [] pieces all=12:352b893e9a6ea860 camera=12:352b893e9a6ea860 shadow=12:352b893e9a6ea860 indirect=12:352b893e9a6ea860 +geom 157: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0502137 motion [] pieces all=12:b34a1ea16c9885a7 camera=12:b34a1ea16c9885a7 shadow=12:b34a1ea16c9885a7 indirect=12:b34a1ea16c9885a7 +geom 158: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.9234214 motion [] pieces all=12:f51d68ae5f961f2d camera=12:f51d68ae5f961f2d shadow=12:f51d68ae5f961f2d indirect=12:f51d68ae5f961f2d +geom 159: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.1118971 motion [] pieces all=12:b02526eda81b650f camera=12:b02526eda81b650f shadow=12:b02526eda81b650f indirect=12:b02526eda81b650f +geom 160: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.97938997 motion [] pieces all=12:4bb9870ca968893d camera=12:4bb9870ca968893d shadow=12:4bb9870ca968893d indirect=12:4bb9870ca968893d +geom 161: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.1579045 motion [] pieces all=12:5258a6d91df0a920 camera=12:5258a6d91df0a920 shadow=12:5258a6d91df0a920 indirect=12:5258a6d91df0a920 +geom 162: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.8000809 motion [] pieces all=12:2a1e507dd321ea9c camera=12:2a1e507dd321ea9c shadow=12:2a1e507dd321ea9c indirect=12:2a1e507dd321ea9c +geom 163: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0382109 motion [] pieces all=12:1ab7a6c1dc8b709f camera=12:1ab7a6c1dc8b709f shadow=12:1ab7a6c1dc8b709f indirect=12:1ab7a6c1dc8b709f +geom 164: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.8771157 motion [] pieces all=12:cc4d7242a0b49d5c camera=12:cc4d7242a0b49d5c shadow=12:cc4d7242a0b49d5c indirect=12:cc4d7242a0b49d5c +geom 165: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0791079 motion [] pieces all=12:392eac8a650b2dcd camera=12:392eac8a650b2dcd shadow=12:392eac8a650b2dcd indirect=12:392eac8a650b2dcd +geom 166: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.1487879 motion [] pieces all=12:b6174f4912b978a2 camera=12:b6174f4912b978a2 shadow=12:b6174f4912b978a2 indirect=12:b6174f4912b978a2 +geom 167: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.9422264 motion [] pieces all=12:cebecb722d01d4d8 camera=12:cebecb722d01d4d8 shadow=12:cebecb722d01d4d8 indirect=12:cebecb722d01d4d8 +geom 168: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.9743466 motion [] pieces all=12:be59180dc534088d camera=12:be59180dc534088d shadow=12:be59180dc534088d indirect=12:be59180dc534088d +geom 169: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.1949431 motion [] pieces all=12:1525f8091b074a32 camera=12:1525f8091b074a32 shadow=12:1525f8091b074a32 indirect=12:1525f8091b074a32 +geom 170: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.83560526 motion [] pieces all=12:28be36472cb4c987 camera=12:28be36472cb4c987 shadow=12:28be36472cb4c987 indirect=12:28be36472cb4c987 +geom 171: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0081363 motion [] pieces all=12:585166650910cbbb camera=12:585166650910cbbb shadow=12:585166650910cbbb indirect=12:585166650910cbbb +geom 172: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.9029232 motion [] pieces all=12:dd267146945bc190 camera=12:dd267146945bc190 shadow=12:dd267146945bc190 indirect=12:dd267146945bc190 +geom 173: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.118102 motion [] pieces all=12:1239d0d8e46ffe85 camera=12:1239d0d8e46ffe85 shadow=12:1239d0d8e46ffe85 indirect=12:1239d0d8e46ffe85 +geom 174: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.8746201 motion [] pieces all=12:cdfab92d6aa1494a camera=12:cdfab92d6aa1494a shadow=12:cdfab92d6aa1494a indirect=12:cdfab92d6aa1494a +geom 175: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0708448 motion [] pieces all=12:b2680c7dda859f50 camera=12:b2680c7dda859f50 shadow=12:b2680c7dda859f50 indirect=12:b2680c7dda859f50 +geom 176: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.9880087 motion [] pieces all=12:3a2b898fc07b37bd camera=12:3a2b898fc07b37bd shadow=12:3a2b898fc07b37bd indirect=12:3a2b898fc07b37bd +geom 177: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.1707879 motion [] pieces all=12:c6a4245aecd3c9a8 camera=12:c6a4245aecd3c9a8 shadow=12:c6a4245aecd3c9a8 indirect=12:c6a4245aecd3c9a8 +geom 178: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0269582 motion [] pieces all=12:c81a3391e9438fb3 camera=12:c81a3391e9438fb3 shadow=12:c81a3391e9438fb3 indirect=12:c81a3391e9438fb3 +geom 179: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.8190116 motion [] pieces all=12:076956d87256099d camera=12:076956d87256099d shadow=12:076956d87256099d indirect=12:076956d87256099d +geom 180: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.1363039 motion [] pieces all=12:9a1c184fe73d870e camera=12:9a1c184fe73d870e shadow=12:9a1c184fe73d870e indirect=12:9a1c184fe73d870e +geom 181: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.9341822 motion [] pieces all=12:f795ffdf33c18e2c camera=12:f795ffdf33c18e2c shadow=12:f795ffdf33c18e2c indirect=12:f795ffdf33c18e2c +geom 182: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.89674604 motion [] pieces all=12:136585391a07be77 camera=12:136585391a07be77 shadow=12:136585391a07be77 indirect=12:136585391a07be77 +geom 183: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0987612 motion [] pieces all=12:ccf75507623c1cc4 camera=12:ccf75507623c1cc4 shadow=12:ccf75507623c1cc4 indirect=12:ccf75507623c1cc4 +geom 184: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.84349865 motion [] pieces all=12:bae223b2b20e1f6b camera=12:bae223b2b20e1f6b shadow=12:bae223b2b20e1f6b indirect=12:bae223b2b20e1f6b +geom 185: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0164981 motion [] pieces all=12:9d1c58d84ebe4148 camera=12:9d1c58d84ebe4148 shadow=12:9d1c58d84ebe4148 indirect=12:9d1c58d84ebe4148 +geom 186: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.1778265 motion [] pieces all=12:4961dc66973b1008 camera=12:4961dc66973b1008 shadow=12:4961dc66973b1008 indirect=12:4961dc66973b1008 +geom 187: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.9520481 motion [] pieces all=12:d339795f1f870466 camera=12:d339795f1f870466 shadow=12:d339795f1f870466 indirect=12:d339795f1f870466 +geom 188: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.1021974 motion [] pieces all=12:f4e128245bf14919 camera=12:f4e128245bf14919 shadow=12:f4e128245bf14919 indirect=12:f4e128245bf14919 +geom 189: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.9167874 motion [] pieces all=12:c0bfca042aab45fb camera=12:c0bfca042aab45fb shadow=12:c0bfca042aab45fb indirect=12:c0bfca042aab45fb +geom 190: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0569606 motion [] pieces all=12:c76d14ea349c799e camera=12:c76d14ea349c799e shadow=12:c76d14ea349c799e indirect=12:c76d14ea349c799e +geom 191: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.85977674 motion [] pieces all=12:4fd33a29857426f9 camera=12:4fd33a29857426f9 shadow=12:4fd33a29857426f9 indirect=12:4fd33a29857426f9 +geom 192: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.88807774 motion [] pieces all=12:6661e6cd86817300 camera=12:6661e6cd86817300 shadow=12:6661e6cd86817300 indirect=12:6661e6cd86817300 +geom 193: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0886104 motion [] pieces all=12:61d88a580f9a360f camera=12:61d88a580f9a360f shadow=12:61d88a580f9a360f indirect=12:61d88a580f9a360f +geom 194: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.92605865 motion [] pieces all=12:5e49c726aa63b62e camera=12:5e49c726aa63b62e shadow=12:5e49c726aa63b62e indirect=12:5e49c726aa63b62e +geom 195: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.1285533 motion [] pieces all=12:c6265c01a6173cf6 camera=12:c6265c01a6173cf6 shadow=12:c6265c01a6173cf6 indirect=12:c6265c01a6173cf6 +geom 196: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.8154051 motion [] pieces all=12:fe9dcf52fa72d89d camera=12:fe9dcf52fa72d89d shadow=12:fe9dcf52fa72d89d indirect=12:fe9dcf52fa72d89d +geom 197: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0349238 motion [] pieces all=12:c153f42637a0ee0b camera=12:c153f42637a0ee0b shadow=12:c153f42637a0ee0b indirect=12:c153f42637a0ee0b +geom 198: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.9985704 motion [] pieces all=12:577ea3f2f1ccab7e camera=12:577ea3f2f1ccab7e shadow=12:577ea3f2f1ccab7e indirect=12:577ea3f2f1ccab7e +geom 199: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.1633754 motion [] pieces all=12:588a35bec89e0211 camera=12:588a35bec89e0211 shadow=12:588a35bec89e0211 indirect=12:588a35bec89e0211 +geom 200: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0210811 motion [] pieces all=12:6db89d8e1f888429 camera=12:6db89d8e1f888429 shadow=12:6db89d8e1f888429 indirect=12:6db89d8e1f888429 +geom 201: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.8461877 motion [] pieces all=12:56087d563f8bd967 camera=12:56087d563f8bd967 shadow=12:56087d563f8bd967 indirect=12:56087d563f8bd967 +geom 202: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.1871427 motion [] pieces all=12:413ff9357cf73b46 camera=12:413ff9357cf73b46 shadow=12:413ff9357cf73b46 indirect=12:413ff9357cf73b46 +geom 203: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.9618171 motion [] pieces all=12:a4df3b74d1b7e417 camera=12:a4df3b74d1b7e417 shadow=12:a4df3b74d1b7e417 indirect=12:a4df3b74d1b7e417 +geom 204: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.8544117 motion [] pieces all=12:81d134080a391d34 camera=12:81d134080a391d34 shadow=12:81d134080a391d34 indirect=12:81d134080a391d34 +geom 205: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0538776 motion [] pieces all=12:cdd591466c48a045 camera=12:cdd591466c48a045 shadow=12:cdd591466c48a045 indirect=12:cdd591466c48a045 +geom 206: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.9216353 motion [] pieces all=12:5197ccb2f90ff927 camera=12:5197ccb2f90ff927 shadow=12:5197ccb2f90ff927 indirect=12:5197ccb2f90ff927 +geom 207: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.1075315 motion [] pieces all=12:25132335ecfb1b01 camera=12:25132335ecfb1b01 shadow=12:25132335ecfb1b01 indirect=12:25132335ecfb1b01 +geom 208: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0872079 motion [] pieces all=12:7b840845ca361767 camera=12:7b840845ca361767 shadow=12:7b840845ca361767 indirect=12:7b840845ca361767 +geom 209: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.8852057 motion [] pieces all=12:32b516719be20c73 camera=12:32b516719be20c73 shadow=12:32b516719be20c73 indirect=12:32b516719be20c73 +geom 210: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.94551605 motion [] pieces all=12:0db933057228feca camera=12:0db933057228feca shadow=12:0db933057228feca indirect=12:0db933057228feca +geom 211: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.142677 motion [] pieces all=12:c06a3e8bf1dd1fd7 camera=12:c06a3e8bf1dd1fd7 shadow=12:c06a3e8bf1dd1fd7 indirect=12:c06a3e8bf1dd1fd7 +geom 212: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.8108835 motion [] pieces all=12:59afde67d1fd5262 camera=12:59afde67d1fd5262 shadow=12:59afde67d1fd5262 indirect=12:59afde67d1fd5262 +geom 213: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0486338 motion [] pieces all=12:0b8e1836820cd7c7 camera=12:0b8e1836820cd7c7 shadow=12:0b8e1836820cd7c7 indirect=12:0b8e1836820cd7c7 +geom 214: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.1508546 motion [] pieces all=12:482cea3e7f58759f camera=12:482cea3e7f58759f shadow=12:482cea3e7f58759f indirect=12:482cea3e7f58759f +geom 215: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.98225904 motion [] pieces all=12:917e1e96a2593868 camera=12:917e1e96a2593868 shadow=12:917e1e96a2593868 indirect=12:917e1e96a2593868 +geom 216: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0013232 motion [] pieces all=12:bb814337882d332a camera=12:bb814337882d332a shadow=12:bb814337882d332a indirect=12:bb814337882d332a +geom 217: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.82953584 motion [] pieces all=12:c1818dc060fece37 camera=12:c1818dc060fece37 shadow=12:c1818dc060fece37 indirect=12:c1818dc060fece37 +geom 218: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.96780616 motion [] pieces all=12:ceee6719c8c5576f camera=12:ceee6719c8c5576f shadow=12:ceee6719c8c5576f indirect=12:ceee6719c8c5576f +geom 219: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.1880189 motion [] pieces all=12:e031398daf58c18b camera=12:e031398daf58c18b shadow=12:e031398daf58c18b indirect=12:e031398daf58c18b +geom 220: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0684357 motion [] pieces all=12:13e625c87f7b9de1 camera=12:13e625c87f7b9de1 shadow=12:13e625c87f7b9de1 indirect=12:13e625c87f7b9de1 +geom 221: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.8670508 motion [] pieces all=12:b17ac50a06fb09cf camera=12:b17ac50a06fb09cf shadow=12:b17ac50a06fb09cf indirect=12:b17ac50a06fb09cf +geom 222: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.9122747 motion [] pieces all=12:9fe4b5467c3985f2 camera=12:9fe4b5467c3985f2 shadow=12:9fe4b5467c3985f2 indirect=12:9fe4b5467c3985f2 +geom 223: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.1235007 motion [] pieces all=12:213e349ffed3ef45 camera=12:213e349ffed3ef45 shadow=12:213e349ffed3ef45 indirect=12:213e349ffed3ef45 +geom 224: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.1052475 motion [] pieces all=12:7a5aa6bf63582b7f camera=12:7a5aa6bf63582b7f shadow=12:7a5aa6bf63582b7f indirect=12:7a5aa6bf63582b7f +geom 225: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.91493386 motion [] pieces all=12:e823c6375468c302 camera=12:e823c6375468c302 shadow=12:e823c6375468c302 indirect=12:e823c6375468c302 +geom 226: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0600516 motion [] pieces all=12:3f827367b30fd32f camera=12:3f827367b30fd32f shadow=12:3f827367b30fd32f indirect=12:3f827367b30fd32f +geom 227: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.8565396 motion [] pieces all=12:edc051a4ba81ff1a camera=12:edc051a4ba81ff1a shadow=12:edc051a4ba81ff1a indirect=12:edc051a4ba81ff1a +geom 228: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.1781551 motion [] pieces all=12:d7d6ad0fbc0a651e camera=12:d7d6ad0fbc0a651e shadow=12:d7d6ad0fbc0a651e indirect=12:d7d6ad0fbc0a651e +geom 229: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.9561136 motion [] pieces all=12:9a8d9bfae8504444 camera=12:9a8d9bfae8504444 shadow=12:9a8d9bfae8504444 indirect=12:9a8d9bfae8504444 +geom 230: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0152485 motion [] pieces all=12:74ed3484d0897bb7 camera=12:74ed3484d0897bb7 shadow=12:74ed3484d0897bb7 indirect=12:74ed3484d0897bb7 +geom 231: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.83785546 motion [] pieces all=12:7820083d539ff0a5 camera=12:7820083d539ff0a5 shadow=12:7820083d539ff0a5 indirect=12:7820083d539ff0a5 +geom 232: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.1321036 motion [] pieces all=12:32644f7f4a0dd9a5 camera=12:32644f7f4a0dd9a5 shadow=12:32644f7f4a0dd9a5 indirect=12:32644f7f4a0dd9a5 +geom 233: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.9351158 motion [] pieces all=12:f45d4f4bd4f377de camera=12:f45d4f4bd4f377de shadow=12:f45d4f4bd4f377de indirect=12:f45d4f4bd4f377de +geom 234: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0956794 motion [] pieces all=12:991cb8ef7fc0c269 camera=12:991cb8ef7fc0c269 shadow=12:991cb8ef7fc0c269 indirect=12:991cb8ef7fc0c269 +geom 235: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.8970985 motion [] pieces all=12:afd9f4ad21867c23 camera=12:afd9f4ad21867c23 shadow=12:afd9f4ad21867c23 indirect=12:afd9f4ad21867c23 +geom 236: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.02853 motion [] pieces all=12:208c8f89501cd8f0 camera=12:208c8f89501cd8f0 shadow=12:208c8f89501cd8f0 indirect=12:208c8f89501cd8f0 +geom 237: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.8235092 motion [] pieces all=12:7aefbfb1e15bd016 camera=12:7aefbfb1e15bd016 shadow=12:7aefbfb1e15bd016 indirect=12:7aefbfb1e15bd016 +geom 238: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.99193966 motion [] pieces all=12:bb89f42f257bd060 camera=12:bb89f42f257bd060 shadow=12:bb89f42f257bd060 indirect=12:bb89f42f257bd060 +geom 239: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.1718959 motion [] pieces all=12:63e5738c01b10540 camera=12:63e5738c01b10540 shadow=12:63e5738c01b10540 indirect=12:63e5738c01b10540 +geom 240: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0755755 motion [] pieces all=12:bb56da62e7c19393 camera=12:bb56da62e7c19393 shadow=12:bb56da62e7c19393 indirect=12:bb56da62e7c19393 +geom 241: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.88047564 motion [] pieces all=12:5ddc08c2c6e7d3a9 camera=12:5ddc08c2c6e7d3a9 shadow=12:5ddc08c2c6e7d3a9 indirect=12:5ddc08c2c6e7d3a9 +geom 242: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.1464661 motion [] pieces all=12:6458562f18efff03 camera=12:6458562f18efff03 shadow=12:6458562f18efff03 indirect=12:6458562f18efff03 +geom 243: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.9384554 motion [] pieces all=12:a384c55c1a660f4e camera=12:a384c55c1a660f4e shadow=12:a384c55c1a660f4e indirect=12:a384c55c1a660f4e +geom 244: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.1616961 motion [] pieces all=12:2d1e0c61d29fa70b camera=12:2d1e0c61d29fa70b shadow=12:2d1e0c61d29fa70b indirect=12:2d1e0c61d29fa70b +geom 245: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.9759968 motion [] pieces all=12:9425c417737fd5e9 camera=12:9425c417737fd5e9 shadow=12:9425c417737fd5e9 indirect=12:9425c417737fd5e9 +geom 246: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.8051955 motion [] pieces all=12:9ac90bef18400244 camera=12:9ac90bef18400244 shadow=12:9ac90bef18400244 indirect=12:9ac90bef18400244 +geom 247: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0432919 motion [] pieces all=12:4044f6b741c006cc camera=12:4044f6b741c006cc shadow=12:4044f6b741c006cc indirect=12:4044f6b741c006cc +geom 248: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.97084296 motion [] pieces all=12:a8d8592b1585b96d camera=12:a8d8592b1585b96d shadow=12:a8d8592b1585b96d indirect=12:a8d8592b1585b96d +geom 249: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.1974218 motion [] pieces all=12:72ed049b9c7e7804 camera=12:72ed049b9c7e7804 shadow=12:72ed049b9c7e7804 indirect=12:72ed049b9c7e7804 +geom 250: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0113921 motion [] pieces all=12:9b9723ae8e480351 camera=12:9b9723ae8e480351 shadow=12:9b9723ae8e480351 indirect=12:9b9723ae8e480351 +geom 251: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.8333197 motion [] pieces all=12:4b75b219d7daf2f0 camera=12:4b75b219d7daf2f0 shadow=12:4b75b219d7daf2f0 indirect=12:4b75b219d7daf2f0 +geom 252: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.074719 motion [] pieces all=12:bc357fd197ae35b5 camera=12:bc357fd197ae35b5 shadow=12:bc357fd197ae35b5 indirect=12:bc357fd197ae35b5 +geom 253: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.86937106 motion [] pieces all=12:c3872ef028ca9f81 camera=12:c3872ef028ca9f81 shadow=12:c3872ef028ca9f81 indirect=12:c3872ef028ca9f81 +geom 254: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.1140252 motion [] pieces all=12:edbe8758c821f916 camera=12:edbe8758c821f916 shadow=12:edbe8758c821f916 indirect=12:edbe8758c821f916 +geom 255: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.90372217 motion [] pieces all=12:2db682e0fd404f06 camera=12:2db682e0fd404f06 shadow=12:2db682e0fd404f06 indirect=12:2db682e0fd404f06 +geom 256: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.1960179 motion [] pieces all=12:7ef94112ea36ed2d camera=12:7ef94112ea36ed2d shadow=12:7ef94112ea36ed2d indirect=12:7ef94112ea36ed2d +geom 257: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.9719331 motion [] pieces all=12:41785e5edaa7eda3 camera=12:41785e5edaa7eda3 shadow=12:41785e5edaa7eda3 indirect=12:41785e5edaa7eda3 +geom 258: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.8368746 motion [] pieces all=12:c739f1c7e67e7dba camera=12:c739f1c7e67e7dba shadow=12:c739f1c7e67e7dba indirect=12:c739f1c7e67e7dba +geom 259: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.006286 motion [] pieces all=12:3c46a98b12ebfede camera=12:3c46a98b12ebfede shadow=12:3c46a98b12ebfede indirect=12:3c46a98b12ebfede +geom 260: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.87269866 motion [] pieces all=12:0d86f0a60ce5c4be camera=12:0d86f0a60ce5c4be shadow=12:0d86f0a60ce5c4be indirect=12:0d86f0a60ce5c4be +geom 261: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.068789 motion [] pieces all=12:2fdd8ccea7f48e0f camera=12:2fdd8ccea7f48e0f shadow=12:2fdd8ccea7f48e0f indirect=12:2fdd8ccea7f48e0f +geom 262: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.90097797 motion [] pieces all=12:9efebc5efd8aa90c camera=12:9efebc5efd8aa90c shadow=12:9efebc5efd8aa90c indirect=12:9efebc5efd8aa90c +geom 263: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.1171288 motion [] pieces all=12:44da1332fd3c39ec camera=12:44da1332fd3c39ec shadow=12:44da1332fd3c39ec indirect=12:44da1332fd3c39ec +geom 264: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.80188435 motion [] pieces all=12:68536eafdd03c0d3 camera=12:68536eafdd03c0d3 shadow=12:68536eafdd03c0d3 indirect=12:68536eafdd03c0d3 +geom 265: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0399622 motion [] pieces all=12:e86598401d8c2418 camera=12:e86598401d8c2418 shadow=12:e86598401d8c2418 indirect=12:e86598401d8c2418 +geom 266: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.9805626 motion [] pieces all=12:8a339d45b59364a1 camera=12:8a339d45b59364a1 shadow=12:8a339d45b59364a1 indirect=12:8a339d45b59364a1 +geom 267: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.1569374 motion [] pieces all=12:5dec275d58d9c522 camera=12:5dec275d58d9c522 shadow=12:5dec275d58d9c522 indirect=12:5dec275d58d9c522 +geom 268: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0800215 motion [] pieces all=12:d5c13770bb53929a camera=12:d5c13770bb53929a shadow=12:d5c13770bb53929a indirect=12:d5c13770bb53929a +geom 269: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.8760262 motion [] pieces all=12:729362ace60503c4 camera=12:729362ace60503c4 shadow=12:729362ace60503c4 indirect=12:729362ace60503c4 +geom 270: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.1472989 motion [] pieces all=12:c8ac94e2d2861a4d camera=12:c8ac94e2d2861a4d shadow=12:c8ac94e2d2861a4d indirect=12:c8ac94e2d2861a4d +geom 271: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.9407554 motion [] pieces all=12:95485f026cb54470 camera=12:95485f026cb54470 shadow=12:95485f026cb54470 indirect=12:95485f026cb54470 +geom 272: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.1009302 motion [] pieces all=12:c83ea8fc891b2486 camera=12:c83ea8fc891b2486 shadow=12:c83ea8fc891b2486 indirect=12:c83ea8fc891b2486 +geom 273: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.91735595 motion [] pieces all=12:64595a54ff851514 camera=12:64595a54ff851514 shadow=12:64595a54ff851514 indirect=12:64595a54ff851514 +geom 274: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.8615117 motion [] pieces all=12:759264a28232e161 camera=12:759264a28232e161 shadow=12:759264a28232e161 indirect=12:759264a28232e161 +geom 275: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0580432 motion [] pieces all=12:07aef08a8bbcb556 camera=12:07aef08a8bbcb556 shadow=12:07aef08a8bbcb556 indirect=12:07aef08a8bbcb556 +geom 276: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.1752679 motion [] pieces all=12:f64038939c025ec9 camera=12:f64038939c025ec9 shadow=12:f64038939c025ec9 indirect=12:f64038939c025ec9 +geom 277: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.9511943 motion [] pieces all=12:ceea2ca65b70430f camera=12:ceea2ca65b70430f shadow=12:ceea2ca65b70430f indirect=12:ceea2ca65b70430f +geom 278: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.8411156 motion [] pieces all=12:53959d48a26e0a30 camera=12:53959d48a26e0a30 shadow=12:53959d48a26e0a30 indirect=12:53959d48a26e0a30 +geom 279: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0185847 motion [] pieces all=12:bfefa02fe65a1831 camera=12:bfefa02fe65a1831 shadow=12:bfefa02fe65a1831 indirect=12:bfefa02fe65a1831 +geom 280: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.8952794 motion [] pieces all=12:4253c830c9b48384 camera=12:4253c830c9b48384 shadow=12:4253c830c9b48384 indirect=12:4253c830c9b48384 +geom 281: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0977838 motion [] pieces all=12:a8a91023573c5fb6 camera=12:a8a91023573c5fb6 shadow=12:a8a91023573c5fb6 indirect=12:a8a91023573c5fb6 +geom 282: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.93132013 motion [] pieces all=12:ab20d8004893a1b7 camera=12:ab20d8004893a1b7 shadow=12:ab20d8004893a1b7 indirect=12:ab20d8004893a1b7 +geom 283: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.1350319 motion [] pieces all=12:35684780a8aa604c camera=12:35684780a8aa604c shadow=12:35684780a8aa604c indirect=12:35684780a8aa604c +geom 284: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.1700913 motion [] pieces all=12:1b2b2f0a76dae5be camera=12:1b2b2f0a76dae5be shadow=12:1b2b2f0a76dae5be indirect=12:1b2b2f0a76dae5be +geom 285: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.98973143 motion [] pieces all=12:9363d6e83440a30e camera=12:9363d6e83440a30e shadow=12:9363d6e83440a30e indirect=12:9363d6e83440a30e +geom 286: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.8203359 motion [] pieces all=12:11ce1f8b598787b8 camera=12:11ce1f8b598787b8 shadow=12:11ce1f8b598787b8 indirect=12:11ce1f8b598787b8 +geom 287: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0250272 motion [] pieces all=12:fa3c452781ce60ed camera=12:fa3c452781ce60ed shadow=12:fa3c452781ce60ed indirect=12:fa3c452781ce60ed +geom 288: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.1674495 motion [] pieces all=12:fd34f39acedb0f6d camera=12:fd34f39acedb0f6d shadow=12:fd34f39acedb0f6d indirect=12:fd34f39acedb0f6d +geom 289: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.9944751 motion [] pieces all=12:ab339c1f36e9a37f camera=12:ab339c1f36e9a37f shadow=12:ab339c1f36e9a37f indirect=12:ab339c1f36e9a37f +geom 290: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.8160475 motion [] pieces all=12:faba7f48933eb63b camera=12:faba7f48933eb63b shadow=12:faba7f48933eb63b indirect=12:faba7f48933eb63b +geom 291: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0315133 motion [] pieces all=12:00c28819e1e2c5bb camera=12:00c28819e1e2c5bb shadow=12:00c28819e1e2c5bb indirect=12:00c28819e1e2c5bb +geom 292: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.1272889 motion [] pieces all=12:011d21c84dac2204 camera=12:011d21c84dac2204 shadow=12:011d21c84dac2204 indirect=12:011d21c84dac2204 +geom 293: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.9298853 motion [] pieces all=12:ed2d531f9c6e0f1e camera=12:ed2d531f9c6e0f1e shadow=12:ed2d531f9c6e0f1e indirect=12:ed2d531f9c6e0f1e +geom 294: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.89336187 motion [] pieces all=12:303d01582adb6926 camera=12:303d01582adb6926 shadow=12:303d01582adb6926 indirect=12:303d01582adb6926 +geom 295: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0932086 motion [] pieces all=12:d754ca033ea5f334 camera=12:d754ca033ea5f334 shadow=12:d754ca033ea5f334 indirect=12:d754ca033ea5f334 +geom 296: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.1831675 motion [] pieces all=12:7b5673acb31cffab camera=12:7b5673acb31cffab shadow=12:7b5673acb31cffab indirect=12:7b5673acb31cffab +geom 297: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.9571099 motion [] pieces all=12:c04c9a210d9ac42c camera=12:c04c9a210d9ac42c shadow=12:c04c9a210d9ac42c indirect=12:c04c9a210d9ac42c +geom 298: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.8489394 motion [] pieces all=12:b362ab2f14ad8729 camera=12:b362ab2f14ad8729 shadow=12:b362ab2f14ad8729 indirect=12:b362ab2f14ad8729 +geom 299: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0247332 motion [] pieces all=12:d58f01b21912562d camera=12:d58f01b21912562d shadow=12:d58f01b21912562d indirect=12:d58f01b21912562d +geom 300: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0518057 motion [] pieces all=12:773d4f8301a97718 camera=12:773d4f8301a97718 shadow=12:773d4f8301a97718 indirect=12:773d4f8301a97718 +geom 301: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.8515276 motion [] pieces all=12:f7f211c80bbe9987 camera=12:f7f211c80bbe9987 shadow=12:f7f211c80bbe9987 indirect=12:f7f211c80bbe9987 +geom 302: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.1107516 motion [] pieces all=12:413138d09bdf6da3 camera=12:413138d09bdf6da3 shadow=12:413138d09bdf6da3 indirect=12:413138d09bdf6da3 +geom 303: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.9245568 motion [] pieces all=12:35361337983f5c87 camera=12:35361337983f5c87 shadow=12:35361337983f5c87 indirect=12:35361337983f5c87 +geom 304: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.8064761 motion [] pieces all=12:d36f8b10fc5540a3 camera=12:d36f8b10fc5540a3 shadow=12:d36f8b10fc5540a3 indirect=12:d36f8b10fc5540a3 +geom 305: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0463852 motion [] pieces all=12:f0b35604f43d8769 camera=12:f0b35604f43d8769 shadow=12:f0b35604f43d8769 indirect=12:f0b35604f43d8769 +geom 306: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.9871673 motion [] pieces all=12:1542ac8428b70b7d camera=12:1542ac8428b70b7d shadow=12:1542ac8428b70b7d indirect=12:1542ac8428b70b7d +geom 307: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.1544694 motion [] pieces all=12:c02164a11c0f20ff camera=12:c02164a11c0f20ff shadow=12:c02164a11c0f20ff indirect=12:c02164a11c0f20ff +geom 308: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.1391888 motion [] pieces all=12:08ef44fdf26154fd camera=12:08ef44fdf26154fd shadow=12:08ef44fdf26154fd indirect=12:08ef44fdf26154fd +geom 309: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.94927794 motion [] pieces all=12:b480e163a6d7b43d camera=12:b480e163a6d7b43d shadow=12:b480e163a6d7b43d indirect=12:b480e163a6d7b43d +geom 310: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.88299996 motion [] pieces all=12:fd795f69452dfb7d camera=12:fd795f69452dfb7d shadow=12:fd795f69452dfb7d indirect=12:fd795f69452dfb7d +geom 311: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0837138 motion [] pieces all=12:07a65993c415e00b camera=12:07a65993c415e00b shadow=12:07a65993c415e00b indirect=12:07a65993c415e00b +geom 312: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.9655494 motion [] pieces all=12:9d30e03131ae69ea camera=12:9d30e03131ae69ea shadow=12:9d30e03131ae69ea indirect=12:9d30e03131ae69ea +geom 313: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.1918095 motion [] pieces all=12:9992bceb7a41c4a1 camera=12:9992bceb7a41c4a1 shadow=12:9992bceb7a41c4a1 indirect=12:9992bceb7a41c4a1 +geom 314: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.82658696 motion [] pieces all=12:aa84a7700af23eeb camera=12:aa84a7700af23eeb shadow=12:aa84a7700af23eeb indirect=12:aa84a7700af23eeb +geom 315: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.003477 motion [] pieces all=12:358870b07fad707c camera=12:358870b07fad707c shadow=12:358870b07fad707c indirect=12:358870b07fad707c +geom 316: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.90877247 motion [] pieces all=12:153c26a3e5d79be6 camera=12:153c26a3e5d79be6 shadow=12:153c26a3e5d79be6 indirect=12:153c26a3e5d79be6 +geom 317: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.1198851 motion [] pieces all=12:4739d2865ecbfe92 camera=12:4739d2865ecbfe92 shadow=12:4739d2865ecbfe92 indirect=12:4739d2865ecbfe92 +geom 318: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.8655879 motion [] pieces all=12:1428f855a52642da camera=12:1428f855a52642da shadow=12:1428f855a52642da indirect=12:1428f855a52642da +geom 319: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0628493 motion [] pieces all=12:4ece504caa014439 camera=12:4ece504caa014439 shadow=12:4ece504caa014439 indirect=12:4ece504caa014439 +geom 320: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.95324653 motion [] pieces all=12:2bbf59106c28eb51 camera=12:2bbf59106c28eb51 shadow=12:2bbf59106c28eb51 indirect=12:2bbf59106c28eb51 +geom 321: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.1803721 motion [] pieces all=12:afb2e456749f5911 camera=12:afb2e456749f5911 shadow=12:afb2e456749f5911 indirect=12:afb2e456749f5911 +geom 322: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.8395308 motion [] pieces all=12:47bac0965f5e9d9a camera=12:47bac0965f5e9d9a shadow=12:47bac0965f5e9d9a indirect=12:47bac0965f5e9d9a +geom 323: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0130584 motion [] pieces all=12:09dd7f8b2863be44 camera=12:09dd7f8b2863be44 shadow=12:09dd7f8b2863be44 indirect=12:09dd7f8b2863be44 +geom 324: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.1041565 motion [] pieces all=12:25b843fbc8abdb98 camera=12:25b843fbc8abdb98 shadow=12:25b843fbc8abdb98 indirect=12:25b843fbc8abdb98 +geom 325: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.9134453 motion [] pieces all=12:7d38378fb4460ed1 camera=12:7d38378fb4460ed1 shadow=12:7d38378fb4460ed1 indirect=12:7d38378fb4460ed1 +geom 326: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0614399 motion [] pieces all=12:a848ed9111a5013b camera=12:a848ed9111a5013b shadow=12:a848ed9111a5013b indirect=12:a848ed9111a5013b +geom 327: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.85823053 motion [] pieces all=12:6ee721ffdf88ae79 camera=12:6ee721ffdf88ae79 shadow=12:6ee721ffdf88ae79 indirect=12:6ee721ffdf88ae79 +geom 328: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.936712 motion [] pieces all=12:ef4a813e18fea482 camera=12:ef4a813e18fea482 shadow=12:ef4a813e18fea482 indirect=12:ef4a813e18fea482 +geom 329: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.1334993 motion [] pieces all=12:c23552c1f8aa86d2 camera=12:c23552c1f8aa86d2 shadow=12:c23552c1f8aa86d2 indirect=12:c23552c1f8aa86d2 +geom 330: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.89959896 motion [] pieces all=12:31f0caeb42fceb86 camera=12:31f0caeb42fceb86 shadow=12:31f0caeb42fceb86 indirect=12:31f0caeb42fceb86 +geom 331: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0947691 motion [] pieces all=12:8cdb77e250b483a5 camera=12:8cdb77e250b483a5 shadow=12:8cdb77e250b483a5 indirect=12:8cdb77e250b483a5 +geom 332: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.9932519 motion [] pieces all=12:30c656e652cb3fc5 camera=12:30c656e652cb3fc5 shadow=12:30c656e652cb3fc5 indirect=12:30c656e652cb3fc5 +geom 333: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.1736686 motion [] pieces all=12:08c52334a63e71bd camera=12:08c52334a63e71bd shadow=12:08c52334a63e71bd indirect=12:08c52334a63e71bd +geom 334: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.82319313 motion [] pieces all=12:9f55b0342e7934e7 camera=12:9f55b0342e7934e7 shadow=12:9f55b0342e7934e7 indirect=12:9f55b0342e7934e7 +geom 335: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0311788 motion [] pieces all=12:936d83383dcc36b4 camera=12:936d83383dcc36b4 shadow=12:936d83383dcc36b4 indirect=12:936d83383dcc36b4 +geom 336: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.96970755 motion [] pieces all=12:d1a3d36dfb753bf3 camera=12:d1a3d36dfb753bf3 shadow=12:d1a3d36dfb753bf3 indirect=12:d1a3d36dfb753bf3 +geom 337: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.1994032 motion [] pieces all=12:6f48c38438da84f1 camera=12:6f48c38438da84f1 shadow=12:6f48c38438da84f1 indirect=12:6f48c38438da84f1 +geom 338: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0095578 motion [] pieces all=12:d6563115596f0832 camera=12:d6563115596f0832 shadow=12:d6563115596f0832 indirect=12:d6563115596f0832 +geom 339: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.83265966 motion [] pieces all=12:29c65ea859ccdd32 camera=12:29c65ea859ccdd32 shadow=12:29c65ea859ccdd32 indirect=12:29c65ea859ccdd32 +geom 340: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.1146677 motion [] pieces all=12:f6ef5ad0332644eb camera=12:f6ef5ad0332644eb shadow=12:f6ef5ad0332644eb indirect=12:f6ef5ad0332644eb +geom 341: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.9060483 motion [] pieces all=12:032ef09f4e12ee09 camera=12:032ef09f4e12ee09 shadow=12:032ef09f4e12ee09 indirect=12:032ef09f4e12ee09 +geom 342: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.8715011 motion [] pieces all=12:2434801cd60e7d55 camera=12:2434801cd60e7d55 shadow=12:2434801cd60e7d55 indirect=12:2434801cd60e7d55 +geom 343: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0730761 motion [] pieces all=12:e9c8b018b06c06d5 camera=12:e9c8b018b06c06d5 shadow=12:e9c8b018b06c06d5 indirect=12:e9c8b018b06c06d5 +geom 344: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.144711 motion [] pieces all=12:dafa525be249a82e camera=12:dafa525be249a82e shadow=12:dafa525be249a82e indirect=12:dafa525be249a82e +geom 345: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.9396499 motion [] pieces all=12:e3bf42c4df92fdf6 camera=12:e3bf42c4df92fdf6 shadow=12:e3bf42c4df92fdf6 indirect=12:e3bf42c4df92fdf6 +geom 346: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.87830245 motion [] pieces all=12:e05e545270a5b4cd camera=12:e05e545270a5b4cd shadow=12:e05e545270a5b4cd indirect=12:e05e545270a5b4cd +geom 347: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0774072 motion [] pieces all=12:7b1273cc00a71821 camera=12:7b1273cc00a71821 shadow=12:7b1273cc00a71821 indirect=12:7b1273cc00a71821 +geom 348: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.1595094 motion [] pieces all=12:00b602c13a33afb1 camera=12:00b602c13a33afb1 shadow=12:00b602c13a33afb1 indirect=12:00b602c13a33afb1 +geom 349: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.9774113 motion [] pieces all=12:14c2ccdaccabe430 camera=12:14c2ccdaccabe430 shadow=12:14c2ccdaccabe430 indirect=12:14c2ccdaccabe430 +geom 350: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.80443263 motion [] pieces all=12:cb7bdd79e8bdd35e camera=12:cb7bdd79e8bdd35e shadow=12:cb7bdd79e8bdd35e indirect=12:cb7bdd79e8bdd35e +geom 351: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0417179 motion [] pieces all=12:65c9a3b77813c7af camera=12:65c9a3b77813c7af shadow=12:65c9a3b77813c7af indirect=12:65c9a3b77813c7af +geom 352: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.9441597 motion [] pieces all=12:cdc0fc41ad6d11be camera=12:cdc0fc41ad6d11be shadow=12:cdc0fc41ad6d11be indirect=12:cdc0fc41ad6d11be +geom 353: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.1411242 motion [] pieces all=12:d307143a31b155e4 camera=12:d307143a31b155e4 shadow=12:d307143a31b155e4 indirect=12:d307143a31b155e4 +geom 354: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.88616794 motion [] pieces all=12:ffef26e3115f7bd9 camera=12:ffef26e3115f7bd9 shadow=12:ffef26e3115f7bd9 indirect=12:ffef26e3115f7bd9 +geom 355: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0846527 motion [] pieces all=12:0b4cdc992e8d3c02 camera=12:0b4cdc992e8d3c02 shadow=12:0b4cdc992e8d3c02 indirect=12:0b4cdc992e8d3c02 +geom 356: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0483505 motion [] pieces all=12:1a387756d87c1dd8 camera=12:1a387756d87c1dd8 shadow=12:1a387756d87c1dd8 indirect=12:1a387756d87c1dd8 +geom 357: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.8123259 motion [] pieces all=12:dd6cc842bd958a6f camera=12:dd6cc842bd958a6f shadow=12:dd6cc842bd958a6f indirect=12:dd6cc842bd958a6f +geom 358: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.9839657 motion [] pieces all=12:391ae068d0dc3073 camera=12:391ae068d0dc3073 shadow=12:391ae068d0dc3073 indirect=12:391ae068d0dc3073 +geom 359: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.1526456 motion [] pieces all=12:ab3848fd3fbcd653 camera=12:ab3848fd3fbcd653 shadow=12:ab3848fd3fbcd653 indirect=12:ab3848fd3fbcd653 +geom 360: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.83097094 motion [] pieces all=12:d936d19e6eb82d6f camera=12:d936d19e6eb82d6f shadow=12:d936d19e6eb82d6f indirect=12:d936d19e6eb82d6f +geom 361: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0027986 motion [] pieces all=12:f8e7da458d7c6081 camera=12:f8e7da458d7c6081 shadow=12:f8e7da458d7c6081 indirect=12:f8e7da458d7c6081 +geom 362: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.1892936 motion [] pieces all=12:0859b82f849b3ae3 camera=12:0859b82f849b3ae3 shadow=12:0859b82f849b3ae3 indirect=12:0859b82f849b3ae3 +geom 363: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.96597666 motion [] pieces all=12:f5a8a4efac21dfae camera=12:f5a8a4efac21dfae shadow=12:f5a8a4efac21dfae indirect=12:f5a8a4efac21dfae +geom 364: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.9101751 motion [] pieces all=12:80f46130780a6ac1 camera=12:80f46130780a6ac1 shadow=12:80f46130780a6ac1 indirect=12:80f46130780a6ac1 +geom 365: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.1226641 motion [] pieces all=12:beafc7e2b0a8d02c camera=12:beafc7e2b0a8d02c shadow=12:beafc7e2b0a8d02c indirect=12:beafc7e2b0a8d02c +geom 366: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.8686439 motion [] pieces all=12:705d4995600cdd9e camera=12:705d4995600cdd9e shadow=12:705d4995600cdd9e indirect=12:705d4995600cdd9e +geom 367: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0671728 motion [] pieces all=12:0d6a8440abe61f87 camera=12:0d6a8440abe61f87 shadow=12:0d6a8440abe61f87 indirect=12:0d6a8440abe61f87 +geom 368: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.9975117 motion [] pieces all=12:58ca6c77fdca91c8 camera=12:58ca6c77fdca91c8 shadow=12:58ca6c77fdca91c8 indirect=12:58ca6c77fdca91c8 +geom 369: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.1649209 motion [] pieces all=12:9c148e002530a8b1 camera=12:9c148e002530a8b1 shadow=12:9c148e002530a8b1 indirect=12:9c148e002530a8b1 +geom 370: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.8132517 motion [] pieces all=12:c9424813ca82b364 camera=12:c9424813ca82b364 shadow=12:c9424813ca82b364 indirect=12:c9424813ca82b364 +geom 371: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0366043 motion [] pieces all=12:8f19a10c9e0156a0 camera=12:8f19a10c9e0156a0 shadow=12:8f19a10c9e0156a0 indirect=12:8f19a10c9e0156a0 +geom 372: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.08927 motion [] pieces all=12:890b266c0ffdf83d camera=12:890b266c0ffdf83d shadow=12:890b266c0ffdf83d indirect=12:890b266c0ffdf83d +geom 373: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.8905551 motion [] pieces all=12:4551f0bfcbe0e0cd camera=12:4551f0bfcbe0e0cd shadow=12:4551f0bfcbe0e0cd indirect=12:4551f0bfcbe0e0cd +geom 374: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.926747 motion [] pieces all=12:fa158accaab54e90 camera=12:fa158accaab54e90 shadow=12:fa158accaab54e90 indirect=12:fa158accaab54e90 +geom 375: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.1298649 motion [] pieces all=12:a6dae76b89ba4e55 camera=12:a6dae76b89ba4e55 shadow=12:a6dae76b89ba4e55 indirect=12:a6dae76b89ba4e55 +geom 376: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.1081444 motion [] pieces all=12:672ec58da613282b camera=12:672ec58da613282b shadow=12:672ec58da613282b indirect=12:672ec58da613282b +geom 377: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.9192359 motion [] pieces all=12:666b78070432f4ce camera=12:666b78070432f4ce shadow=12:666b78070432f4ce indirect=12:666b78070432f4ce +geom 378: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.8560345 motion [] pieces all=12:3bc417154a557314 camera=12:3bc417154a557314 shadow=12:3bc417154a557314 indirect=12:3bc417154a557314 +geom 379: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0552392 motion [] pieces all=12:2808534dcec513a8 camera=12:2808534dcec513a8 shadow=12:2808534dcec513a8 indirect=12:2808534dcec513a8 +geom 380: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0194297 motion [] pieces all=12:e331af7ed0cca98e camera=12:e331af7ed0cca98e shadow=12:e331af7ed0cca98e indirect=12:e331af7ed0cca98e +geom 381: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.8443029 motion [] pieces all=12:79a7a6eb92724741 camera=12:79a7a6eb92724741 shadow=12:79a7a6eb92724741 indirect=12:79a7a6eb92724741 +geom 382: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.1850733 motion [] pieces all=12:baf797eb7016c596 camera=12:baf797eb7016c596 shadow=12:baf797eb7016c596 indirect=12:baf797eb7016c596 +geom 383: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.9599828 motion [] pieces all=12:81d7733cd92daf20 camera=12:81d7733cd92daf20 shadow=12:81d7733cd92daf20 indirect=12:81d7733cd92daf20 +geom 384: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0148157 motion [] pieces all=12:2fef9fe94b0383fb camera=12:2fef9fe94b0383fb shadow=12:2fef9fe94b0383fb indirect=12:2fef9fe94b0383fb +geom 385: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.83852637 motion [] pieces all=12:141cb27a7df0a0ad camera=12:141cb27a7df0a0ad shadow=12:141cb27a7df0a0ad indirect=12:141cb27a7df0a0ad +geom 386: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.1796043 motion [] pieces all=12:056390c13a0468f0 camera=12:056390c13a0468f0 shadow=12:056390c13a0468f0 indirect=12:056390c13a0468f0 +geom 387: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.954916 motion [] pieces all=12:6d029812b34edb05 camera=12:6d029812b34edb05 shadow=12:6d029812b34edb05 indirect=12:6d029812b34edb05 +geom 388: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0602692 motion [] pieces all=12:6da6a2c07b039303 camera=12:6da6a2c07b039303 shadow=12:6da6a2c07b039303 indirect=12:6da6a2c07b039303 +geom 389: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.8570703 motion [] pieces all=12:afdcbfdfe4ae7f82 camera=12:afdcbfdfe4ae7f82 shadow=12:afdcbfdfe4ae7f82 indirect=12:afdcbfdfe4ae7f82 +geom 390: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.1060176 motion [] pieces all=12:1c946733b3e52630 camera=12:1c946733b3e52630 shadow=12:1c946733b3e52630 indirect=12:1c946733b3e52630 +geom 391: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.91467035 motion [] pieces all=12:73d8825b5a7e8845 camera=12:73d8825b5a7e8845 shadow=12:73d8825b5a7e8845 indirect=12:73d8825b5a7e8845 +geom 392: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.93563294 motion [] pieces all=12:122727326b7b6a9f camera=12:122727326b7b6a9f shadow=12:122727326b7b6a9f indirect=12:122727326b7b6a9f +geom 393: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.1315463 motion [] pieces all=12:aabc14dd128d0b48 camera=12:aabc14dd128d0b48 shadow=12:aabc14dd128d0b48 indirect=12:aabc14dd128d0b48 +geom 394: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.89784366 motion [] pieces all=12:b5d143b77d3600ae camera=12:b5d143b77d3600ae shadow=12:b5d143b77d3600ae indirect=12:b5d143b77d3600ae +geom 395: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.096456 motion [] pieces all=12:220e6e61a4ddfde8 camera=12:220e6e61a4ddfde8 shadow=12:220e6e61a4ddfde8 indirect=12:220e6e61a4ddfde8 +geom 396: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.99132615 motion [] pieces all=12:0877462098af8038 camera=12:0877462098af8038 shadow=12:0877462098af8038 indirect=12:0877462098af8038 +geom 397: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.1730263 motion [] pieces all=12:df83d6d94c17e6b8 camera=12:df83d6d94c17e6b8 shadow=12:df83d6d94c17e6b8 indirect=12:df83d6d94c17e6b8 +geom 398: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.8244153 motion [] pieces all=12:ad860aeab2e2c935 camera=12:ad860aeab2e2c935 shadow=12:ad860aeab2e2c935 indirect=12:ad860aeab2e2c935 +geom 399: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0293186 motion [] pieces all=12:098d26f26ab4cdc9 camera=12:098d26f26ab4cdc9 shadow=12:098d26f26ab4cdc9 indirect=12:098d26f26ab4cdc9 +geom 400: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.93819076 motion [] pieces all=12:bc90496937b9aeb3 camera=12:bc90496937b9aeb3 shadow=12:bc90496937b9aeb3 indirect=12:bc90496937b9aeb3 +geom 401: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.145453 motion [] pieces all=12:0a2fa2950af15a14 camera=12:0a2fa2950af15a14 shadow=12:0a2fa2950af15a14 indirect=12:0a2fa2950af15a14 +geom 402: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0760617 motion [] pieces all=12:5c980803ec14876b camera=12:5c980803ec14876b shadow=12:5c980803ec14876b indirect=12:5c980803ec14876b +geom 403: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.88018495 motion [] pieces all=12:227bc7497b439253 camera=12:227bc7497b439253 shadow=12:227bc7497b439253 indirect=12:227bc7497b439253 +geom 404: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.8054993 motion [] pieces all=12:d3af00a207ca39e1 camera=12:d3af00a207ca39e1 shadow=12:d3af00a207ca39e1 indirect=12:d3af00a207ca39e1 +geom 405: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0428715 motion [] pieces all=12:b116b391d5ec4a9f camera=12:b116b391d5ec4a9f shadow=12:b116b391d5ec4a9f indirect=12:b116b391d5ec4a9f +geom 406: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.97505593 motion [] pieces all=12:507f71e6516ea3f3 camera=12:507f71e6516ea3f3 shadow=12:507f71e6516ea3f3 indirect=12:507f71e6516ea3f3 +geom 407: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.1619347 motion [] pieces all=12:66e8ba3aa8bc1735 camera=12:66e8ba3aa8bc1735 shadow=12:66e8ba3aa8bc1735 indirect=12:66e8ba3aa8bc1735 +geom 408: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.1126888 motion [] pieces all=12:bc33a24c467e404e camera=12:bc33a24c467e404e shadow=12:bc33a24c467e404e indirect=12:bc33a24c467e404e +geom 409: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.9045982 motion [] pieces all=12:b91a2dc653021aad camera=12:b91a2dc653021aad shadow=12:b91a2dc653021aad indirect=12:b91a2dc653021aad +geom 410: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.8699642 motion [] pieces all=12:57554cce79f6e878 camera=12:57554cce79f6e878 shadow=12:57554cce79f6e878 indirect=12:57554cce79f6e878 +geom 411: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0737642 motion [] pieces all=12:32afc8c737faa35e camera=12:32afc8c737faa35e shadow=12:32afc8c737faa35e indirect=12:32afc8c737faa35e +geom 412: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.1979295 motion [] pieces all=12:aa92a7d192d28661 camera=12:aa92a7d192d28661 shadow=12:aa92a7d192d28661 indirect=12:aa92a7d192d28661 +geom 413: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.97159874 motion [] pieces all=12:6d28d5b373962462 camera=12:6d28d5b373962462 shadow=12:6d28d5b373962462 indirect=12:6d28d5b373962462 +geom 414: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.83408374 motion [] pieces all=12:65922ac78d162bb7 camera=12:65922ac78d162bb7 shadow=12:65922ac78d162bb7 indirect=12:65922ac78d162bb7 +geom 415: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0117619 motion [] pieces all=12:ce1f02ebf37af17b camera=12:ce1f02ebf37af17b shadow=12:ce1f02ebf37af17b indirect=12:ce1f02ebf37af17b +geom 416: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0003383 motion [] pieces all=12:c8794b4c74afb9a1 camera=12:c8794b4c74afb9a1 shadow=12:c8794b4c74afb9a1 indirect=12:c8794b4c74afb9a1 +geom 417: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.8288469 motion [] pieces all=12:abffad9d7edc7bfa camera=12:abffad9d7edc7bfa shadow=12:abffad9d7edc7bfa indirect=12:abffad9d7edc7bfa +geom 418: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.1883179 motion [] pieces all=12:08526b521cd4dac8 camera=12:08526b521cd4dac8 shadow=12:08526b521cd4dac8 indirect=12:08526b521cd4dac8 +geom 419: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.9687418 motion [] pieces all=12:2975f403fd7949ea camera=12:2975f403fd7949ea shadow=12:2975f403fd7949ea indirect=12:2975f403fd7949ea +geom 420: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0672565 motion [] pieces all=12:4aaaaf2d74efe628 camera=12:4aaaaf2d74efe628 shadow=12:4aaaaf2d74efe628 indirect=12:4aaaaf2d74efe628 +geom 421: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.8659016 motion [] pieces all=12:64469fdb4fc3f8e4 camera=12:64469fdb4fc3f8e4 shadow=12:64469fdb4fc3f8e4 indirect=12:64469fdb4fc3f8e4 +geom 422: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.1248933 motion [] pieces all=12:72cba155a16d19f2 camera=12:72cba155a16d19f2 shadow=12:72cba155a16d19f2 indirect=12:72cba155a16d19f2 +geom 423: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.9111701 motion [] pieces all=12:cf750aa289b112b4 camera=12:cf750aa289b112b4 shadow=12:cf750aa289b112b4 indirect=12:cf750aa289b112b4 +geom 424: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.1502215 motion [] pieces all=12:9f4be5474c18839a camera=12:9f4be5474c18839a shadow=12:9f4be5474c18839a indirect=12:9f4be5474c18839a +geom 425: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.98130584 motion [] pieces all=12:44cc37892c0aac6c camera=12:44cc37892c0aac6c shadow=12:44cc37892c0aac6c indirect=12:44cc37892c0aac6c +geom 426: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.809897 motion [] pieces all=12:e2163cc9d66f65ad camera=12:e2163cc9d66f65ad shadow=12:e2163cc9d66f65ad indirect=12:e2163cc9d66f65ad +geom 427: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0497544 motion [] pieces all=12:4f9f3cca056877d5 camera=12:4f9f3cca056877d5 shadow=12:4f9f3cca056877d5 indirect=12:4f9f3cca056877d5 +geom 428: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.88484913 motion [] pieces all=12:a4e96d78b15e4783 camera=12:a4e96d78b15e4783 shadow=12:a4e96d78b15e4783 indirect=12:a4e96d78b15e4783 +geom 429: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.086017 motion [] pieces all=12:1a79d66b82f03931 camera=12:1a79d66b82f03931 shadow=12:1a79d66b82f03931 indirect=12:1a79d66b82f03931 +geom 430: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.94636273 motion [] pieces all=12:e15a364822110916 camera=12:e15a364822110916 shadow=12:e15a364822110916 indirect=12:e15a364822110916 +geom 431: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.1435866 motion [] pieces all=12:8eb7d818e16490b4 camera=12:8eb7d818e16490b4 shadow=12:8eb7d818e16490b4 indirect=12:8eb7d818e16490b4 +geom 432: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.162658 motion [] pieces all=12:adec49d7acdaa98c camera=12:adec49d7acdaa98c shadow=12:adec49d7acdaa98c indirect=12:adec49d7acdaa98c +geom 433: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.9994693 motion [] pieces all=12:56fe5586c476d86a camera=12:56fe5586c476d86a shadow=12:56fe5586c476d86a indirect=12:56fe5586c476d86a +geom 434: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.8147701 motion [] pieces all=12:379c04aebe7f1235 camera=12:379c04aebe7f1235 shadow=12:379c04aebe7f1235 indirect=12:379c04aebe7f1235 +geom 435: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0359036 motion [] pieces all=12:9c82e3fb093d4ce9 camera=12:9c82e3fb093d4ce9 shadow=12:9c82e3fb093d4ce9 indirect=12:9c82e3fb093d4ce9 +geom 436: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.8887091 motion [] pieces all=12:4dd067039b14a09c camera=12:4dd067039b14a09c shadow=12:4dd067039b14a09c indirect=12:4dd067039b14a09c +geom 437: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0876021 motion [] pieces all=12:adcec1df06892adf camera=12:adcec1df06892adf shadow=12:adcec1df06892adf indirect=12:adcec1df06892adf +geom 438: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.92500865 motion [] pieces all=12:b4c4604968242fa3 camera=12:b4c4604968242fa3 shadow=12:b4c4604968242fa3 indirect=12:b4c4604968242fa3 +geom 439: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.1294218 motion [] pieces all=12:4a609af6806ca295 camera=12:4a609af6806ca295 shadow=12:4a609af6806ca295 indirect=12:4a609af6806ca295 +geom 440: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0544837 motion [] pieces all=12:c23c1fb37b974306 camera=12:c23c1fb37b974306 shadow=12:c23c1fb37b974306 indirect=12:c23c1fb37b974306 +geom 441: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.85322666 motion [] pieces all=12:9e79208227e8d6cd camera=12:9e79208227e8d6cd shadow=12:9e79208227e8d6cd indirect=12:9e79208227e8d6cd +geom 442: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.1068927 motion [] pieces all=12:7ae5927276c6ba2c camera=12:7ae5927276c6ba2c shadow=12:7ae5927276c6ba2c indirect=12:7ae5927276c6ba2c +geom 443: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.9205585 motion [] pieces all=12:0b3aafe345a0fc45 camera=12:0b3aafe345a0fc45 shadow=12:0b3aafe345a0fc45 indirect=12:0b3aafe345a0fc45 +geom 444: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.9615073 motion [] pieces all=12:b590e9680cfcf69b camera=12:b590e9680cfcf69b shadow=12:b590e9680cfcf69b indirect=12:b590e9680cfcf69b +geom 445: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.1863831 motion [] pieces all=12:338cd24ef03c39cc camera=12:338cd24ef03c39cc shadow=12:338cd24ef03c39cc indirect=12:338cd24ef03c39cc +geom 446: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0211514 motion [] pieces all=12:98f5251456624a50 camera=12:98f5251456624a50 shadow=12:98f5251456624a50 indirect=12:98f5251456624a50 +geom 447: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.8459975 motion [] pieces all=12:0c67e1d32d3ef619 camera=12:0c67e1d32d3ef619 shadow=12:0c67e1d32d3ef619 indirect=12:0c67e1d32d3ef619 +geom 448: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0576196 motion [] pieces all=12:4ea44925b3c1e288 camera=12:4ea44925b3c1e288 shadow=12:4ea44925b3c1e288 indirect=12:4ea44925b3c1e288 +geom 449: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.8603616 motion [] pieces all=12:f6920f3031014110 camera=12:f6920f3031014110 shadow=12:f6920f3031014110 indirect=12:f6920f3031014110 +geom 450: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.916093 motion [] pieces all=12:314acc86767b75be camera=12:314acc86767b75be shadow=12:314acc86767b75be indirect=12:314acc86767b75be +geom 451: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.1027862 motion [] pieces all=12:a5c6a2b4211228b4 camera=12:a5c6a2b4211228b4 shadow=12:a5c6a2b4211228b4 indirect=12:a5c6a2b4211228b4 +geom 452: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0158173 motion [] pieces all=12:fa63ac2b5b212ccf camera=12:fa63ac2b5b212ccf shadow=12:fa63ac2b5b212ccf indirect=12:fa63ac2b5b212ccf +geom 453: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.84249794 motion [] pieces all=12:6cb710a9166cea3b camera=12:6cb710a9166cea3b shadow=12:6cb710a9166cea3b indirect=12:6cb710a9166cea3b +geom 454: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.95259416 motion [] pieces all=12:d0d64e17ba8b2e19 camera=12:d0d64e17ba8b2e19 shadow=12:d0d64e17ba8b2e19 indirect=12:d0d64e17ba8b2e19 +geom 455: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.177041 motion [] pieces all=12:e50f6b41d2063936 camera=12:e50f6b41d2063936 shadow=12:e50f6b41d2063936 indirect=12:e50f6b41d2063936 +geom 456: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.98853946 motion [] pieces all=12:e1d294c3739628d6 camera=12:e1d294c3739628d6 shadow=12:e1d294c3739628d6 indirect=12:e1d294c3739628d6 +geom 457: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.1716862 motion [] pieces all=12:b70a6f6cd8365893 camera=12:b70a6f6cd8365893 shadow=12:b70a6f6cd8365893 indirect=12:b70a6f6cd8365893 +geom 458: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0277379 motion [] pieces all=12:7bfd8e5388306aac camera=12:7bfd8e5388306aac shadow=12:7bfd8e5388306aac indirect=12:7bfd8e5388306aac +geom 459: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.8197726 motion [] pieces all=12:7940e440986f801e camera=12:7940e440986f801e shadow=12:7940e440986f801e indirect=12:7940e440986f801e +geom 460: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.9332185 motion [] pieces all=12:03245fe6d030611d camera=12:03245fe6d030611d shadow=12:03245fe6d030611d indirect=12:03245fe6d030611d +geom 461: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.13736 motion [] pieces all=12:f2ba281ed3aae295 camera=12:f2ba281ed3aae295 shadow=12:f2ba281ed3aae295 indirect=12:f2ba281ed3aae295 +geom 462: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0995164 motion [] pieces all=12:c4c4dcfd707d3c11 camera=12:c4c4dcfd707d3c11 shadow=12:c4c4dcfd707d3c11 indirect=12:c4c4dcfd707d3c11 +geom 463: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.8955281 motion [] pieces all=12:8281013d9729ef87 camera=12:8281013d9729ef87 shadow=12:8281013d9729ef87 indirect=12:8281013d9729ef87 +geom 464: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0386182 motion [] pieces all=12:9020fdcfd0f904f8 camera=12:9020fdcfd0f904f8 shadow=12:9020fdcfd0f904f8 indirect=12:9020fdcfd0f904f8 +geom 465: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.8011433 motion [] pieces all=12:3df400dfa596b784 camera=12:3df400dfa596b784 shadow=12:3df400dfa596b784 indirect=12:3df400dfa596b784 +geom 466: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.1588373 motion [] pieces all=12:825be0825bb78942 camera=12:825be0825bb78942 shadow=12:825be0825bb78942 indirect=12:825be0825bb78942 +geom 467: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.97848713 motion [] pieces all=12:496c70829654c4ad camera=12:496c70829654c4ad shadow=12:496c70829654c4ad indirect=12:496c70829654c4ad +geom 468: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.078893 motion [] pieces all=12:8e473c96049d4ce5 camera=12:8e473c96049d4ce5 shadow=12:8e473c96049d4ce5 indirect=12:8e473c96049d4ce5 +geom 469: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.8776698 motion [] pieces all=12:31b0d625172cced4 camera=12:31b0d625172cced4 shadow=12:31b0d625172cced4 indirect=12:31b0d625172cced4 +geom 470: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.1497374 motion [] pieces all=12:99f90e7b0335cc78 camera=12:99f90e7b0335cc78 shadow=12:99f90e7b0335cc78 indirect=12:99f90e7b0335cc78 +geom 471: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.9434472 motion [] pieces all=12:f8b99415ec3b4a01 camera=12:f8b99415ec3b4a01 shadow=12:f8b99415ec3b4a01 indirect=12:f8b99415ec3b4a01 +geom 472: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.008965 motion [] pieces all=12:7419f019bce0185d camera=12:7419f019bce0185d shadow=12:7419f019bce0185d indirect=12:7419f019bce0185d +geom 473: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.8347222 motion [] pieces all=12:f3469fffaebfe5df camera=12:f3469fffaebfe5df shadow=12:f3469fffaebfe5df indirect=12:f3469fffaebfe5df +geom 474: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.9736176 motion [] pieces all=12:2a370fa3fd7c6578 camera=12:2a370fa3fd7c6578 shadow=12:2a370fa3fd7c6578 indirect=12:2a370fa3fd7c6578 +geom 475: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.194048 motion [] pieces all=12:14a4f24efb34e5aa camera=12:14a4f24efb34e5aa shadow=12:14a4f24efb34e5aa indirect=12:14a4f24efb34e5aa +geom 476: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.1172101 motion [] pieces all=12:75a1bbe21f2f2a92 camera=12:75a1bbe21f2f2a92 shadow=12:75a1bbe21f2f2a92 indirect=12:75a1bbe21f2f2a92 +geom 477: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.9016529 motion [] pieces all=12:f3b463cc424bac99 camera=12:f3b463cc424bac99 shadow=12:f3b463cc424bac99 indirect=12:f3b463cc424bac99 +geom 478: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0714942 motion [] pieces all=12:6b354034c9ec2cd5 camera=12:6b354034c9ec2cd5 shadow=12:6b354034c9ec2cd5 indirect=12:6b354034c9ec2cd5 +geom 479: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.8737748 motion [] pieces all=12:d075fa22d99bb7ac camera=12:d075fa22d99bb7ac shadow=12:d075fa22d99bb7ac indirect=12:d075fa22d99bb7ac +geom 480: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.94839287 motion [] pieces all=12:4cd336396f07691c camera=12:4cd336396f07691c shadow=12:4cd336396f07691c indirect=12:4cd336396f07691c +geom 481: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.1380712 motion [] pieces all=12:d28ac67a5b89dd52 camera=12:d28ac67a5b89dd52 shadow=12:d28ac67a5b89dd52 indirect=12:d28ac67a5b89dd52 +geom 482: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0818378 motion [] pieces all=12:659c3931ffe0ed13 camera=12:659c3931ffe0ed13 shadow=12:659c3931ffe0ed13 indirect=12:659c3931ffe0ed13 +geom 483: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.8819798 motion [] pieces all=12:9d3c7aa0dc25bba3 camera=12:9d3c7aa0dc25bba3 shadow=12:9d3c7aa0dc25bba3 indirect=12:9d3c7aa0dc25bba3 +geom 484: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.9850546 motion [] pieces all=12:2e0ffb221f8316a9 camera=12:2e0ffb221f8316a9 shadow=12:2e0ffb221f8316a9 indirect=12:2e0ffb221f8316a9 +geom 485: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.1558986 motion [] pieces all=12:ba1b52094e1cba75 camera=12:ba1b52094e1cba75 shadow=12:ba1b52094e1cba75 indirect=12:ba1b52094e1cba75 +geom 486: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0442858 motion [] pieces all=12:05884e6f56e90f18 camera=12:05884e6f56e90f18 shadow=12:05884e6f56e90f18 indirect=12:05884e6f56e90f18 +geom 487: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.8084655 motion [] pieces all=12:0c4d353d946d289e camera=12:0c4d353d946d289e shadow=12:0c4d353d946d289e indirect=12:0c4d353d946d289e +geom 488: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.9071614 motion [] pieces all=12:0c914562b95c142a camera=12:0c914562b95c142a shadow=12:0c914562b95c142a indirect=12:0c914562b95c142a +geom 489: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.1215858 motion [] pieces all=12:608393a38181b910 camera=12:608393a38181b910 shadow=12:608393a38181b910 indirect=12:608393a38181b910 +geom 490: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0652461 motion [] pieces all=12:37ba959337baf522 camera=12:37ba959337baf522 shadow=12:37ba959337baf522 indirect=12:37ba959337baf522 +geom 491: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.86263853 motion [] pieces all=12:81ab49539d02aa1a camera=12:81ab49539d02aa1a shadow=12:81ab49539d02aa1a indirect=12:81ab49539d02aa1a +geom 492: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0047668 motion [] pieces all=12:bd1d49961c2be85a camera=12:bd1d49961c2be85a shadow=12:bd1d49961c2be85a indirect=12:bd1d49961c2be85a +geom 493: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.82622164 motion [] pieces all=12:2661072845eff293 camera=12:2661072845eff293 shadow=12:2661072845eff293 indirect=12:2661072845eff293 +geom 494: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.1931825 motion [] pieces all=12:7a6c25050428c811 camera=12:7a6c25050428c811 shadow=12:7a6c25050428c811 indirect=12:7a6c25050428c811 +geom 495: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.96331364 motion [] pieces all=12:50ad6dd7a2bbe1ff camera=12:50ad6dd7a2bbe1ff shadow=12:50ad6dd7a2bbe1ff indirect=12:50ad6dd7a2bbe1ff +geom 496: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.1113799 motion [] pieces all=12:a5305f50a191fac8 camera=12:a5305f50a191fac8 shadow=12:a5305f50a191fac8 indirect=12:a5305f50a191fac8 +geom 497: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.9225683 motion [] pieces all=12:6850c50534ac1e03 camera=12:6850c50534ac1e03 shadow=12:6850c50534ac1e03 indirect=12:6850c50534ac1e03 +geom 498: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0511969 motion [] pieces all=12:67de18a85d693a42 camera=12:67de18a85d693a42 shadow=12:67de18a85d693a42 indirect=12:67de18a85d693a42 +geom 499: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.8524485 motion [] pieces all=12:c21884d879c77cea camera=12:c21884d879c77cea shadow=12:c21884d879c77cea indirect=12:c21884d879c77cea +geom 500: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=12:d69dc8407e39c57d camera=12:d69dc8407e39c57d shadow=12:d69dc8407e39c57d indirect=12:d69dc8407e39c57d +geom 501: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=12:108ece7556e2045d camera=12:108ece7556e2045d shadow=12:108ece7556e2045d indirect=12:108ece7556e2045d +geom 502: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=12:b6f2f6b932607ce5 camera=12:b6f2f6b932607ce5 shadow=12:b6f2f6b932607ce5 indirect=12:b6f2f6b932607ce5 +geom 503: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=12:18f7f442a8f08005 camera=12:18f7f442a8f08005 shadow=12:18f7f442a8f08005 indirect=12:18f7f442a8f08005 +geom 504: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=12:95835634df888e55 camera=12:95835634df888e55 shadow=12:95835634df888e55 indirect=12:95835634df888e55 +geom 505: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=12:26e126fb8d08607d camera=12:26e126fb8d08607d shadow=12:26e126fb8d08607d indirect=12:26e126fb8d08607d +geom 506: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=4:d3ae5d8c61eeefd5 camera=4:d3ae5d8c61eeefd5 shadow=4:d3ae5d8c61eeefd5 indirect=4:d3ae5d8c61eeefd5 +geom 507: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:02dee92ba923d022 camera=2:02dee92ba923d022 shadow=2:02dee92ba923d022 indirect=2:02dee92ba923d022 +geom 508: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:d420bef838b31092 camera=2:d420bef838b31092 shadow=2:d420bef838b31092 indirect=2:d420bef838b31092 +geom 509: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=128:7e7f92bf6cf1e8e1 camera=128:7e7f92bf6cf1e8e1 shadow=128:7e7f92bf6cf1e8e1 indirect=128:7e7f92bf6cf1e8e1 +geom 510: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:5fd3af8a8974e005 camera=2:5fd3af8a8974e005 shadow=2:5fd3af8a8974e005 indirect=2:5fd3af8a8974e005 +geom 511: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:9626b0f2f3e041c5 camera=2:9626b0f2f3e041c5 shadow=2:9626b0f2f3e041c5 indirect=2:9626b0f2f3e041c5 +geom 512: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=12:65eff1dac76e16e5 camera=12:65eff1dac76e16e5 shadow=12:65eff1dac76e16e5 indirect=12:65eff1dac76e16e5 +geom 513: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=12:c5bbf2f135b5e22b camera=12:c5bbf2f135b5e22b shadow=12:c5bbf2f135b5e22b indirect=12:c5bbf2f135b5e22b +geom 514: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:77f8032df1a5e1f5 camera=2:77f8032df1a5e1f5 shadow=2:77f8032df1a5e1f5 indirect=2:77f8032df1a5e1f5 +provenance arc source: /Crate +provenance arc source: /Crate/geo +provenance arc source: /World/stones/Prototypes/stone_a +provenance arc source: /World/stones/Prototypes/stone_b +provenance arc source: /_Cube +provenance light /World/Sky: LightOrigin { index: 0, geoms: 514..514 } +provenance geometry 0..500: /World/stones +provenance geometry 500..501: /World/pebble/geo +provenance geometry 501..502: /World/away/geo +provenance geometry 502..503: /World/box/geo +provenance geometry 503..504: /World/sunk/geo +provenance geometry 504..505: /World/rock/geo +provenance geometry 505..506: /World/vase/geo +provenance geometry 506..507: /World/steps/geo +provenance geometry 507..508: /World/field/geo +provenance geometry 508..509: /World/slope/geo +provenance geometry 509..510: /World/terrain/geo +provenance geometry 510..511: /World/shelf/geo +provenance geometry 511..512: /World/floor/geo +provenance geometry 512..513: /World/inst +provenance geometry 513..514: /World/crate/geo +provenance geometry 514..515: /World/table/geo +provenance mesh: MeshOrigin { geom_id: 500, slot: 2, baked: false, moving: false } +provenance mesh: MeshOrigin { geom_id: 501, slot: 2, baked: false, moving: false } +provenance mesh: MeshOrigin { geom_id: 502, slot: 2, baked: false, moving: false } +provenance mesh: MeshOrigin { geom_id: 503, slot: 2, baked: false, moving: false } +provenance mesh: MeshOrigin { geom_id: 504, slot: 3, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 505, slot: 4, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 506, slot: 5, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 507, slot: 6, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 508, slot: 7, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 509, slot: 8, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 510, slot: 9, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 511, slot: 10, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 513, slot: 2, baked: false, moving: false } +provenance mesh: MeshOrigin { geom_id: 514, slot: 11, baked: true, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 4345222167175548266, n_points: 8, n_indices: 24, n_uvs: None, smooth: true, material: 0 }), placements: 0, shared: true, displaced: false } +provenance mesh slot 1: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 735706973108043347, n_points: 8, n_indices: 24, n_uvs: None, smooth: true, material: 0 }), placements: 0, shared: true, displaced: false } +provenance mesh slot 2: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 2634041098053373584, n_points: 8, n_indices: 24, n_uvs: None, smooth: true, material: 0 }), placements: 5, shared: true, displaced: false } +provenance mesh slot 3: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 14470132405950877311, n_points: 8, n_indices: 24, n_uvs: None, smooth: true, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 4: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 1206830347127950734, n_points: 8, n_indices: 24, n_uvs: None, smooth: true, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 5: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 9519870911682368984, n_points: 6, n_indices: 8, n_uvs: None, smooth: true, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 6: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 1341889141698287293, n_points: 4, n_indices: 4, n_uvs: None, smooth: true, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 7: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 1313731086437247865, n_points: 4, n_indices: 4, n_uvs: None, smooth: true, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 8: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 15760070156626746114, n_points: 81, n_indices: 256, n_uvs: None, smooth: true, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 9: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 1050066994217133652, n_points: 4, n_indices: 4, n_uvs: None, smooth: true, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 10: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 14002714535549629103, n_points: 4, n_indices: 4, n_uvs: None, smooth: true, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 11: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 14095911038168715313, n_points: 4, n_indices: 4, n_uvs: None, smooth: true, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: true }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/World/Cam"), cameras: ["/World/Cam"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/World/Cam"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/placed_usda-0ba3af4ffa595294-1.image b/crates/crust-core/tests/data/import_baselines/placed_usda-0ba3af4ffa595294-1.image new file mode 100644 index 000000000..9bef1c83f --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/placed_usda-0ba3af4ffa595294-1.image @@ -0,0 +1 @@ +48x32 16spp clamp-off 3ded2d1d29c7426f diff --git a/crates/crust-core/tests/data/import_baselines/placed_usda-503a8ea6d52670c0-1.digest b/crates/crust-core/tests/data/import_baselines/placed_usda-503a8ea6d52670c0-1.digest new file mode 100644 index 000000000..39ac096fd --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/placed_usda-503a8ea6d52670c0-1.digest @@ -0,0 +1,78 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/World/Cam") +camera: Camera { origin: Vec3A(0.0, 4.0, 14.0), lower_left_corner: Vec3A(-6.371167, -0.2474451, 4.0), horizontal: Vec3A(12.742334, 0.0, 0.0), vertical: Vec3A(0.0, 8.49489, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: Some("/Render/settings") +settings: RenderSettings { samples_per_pixel: 128, max_depth: 3, width: 48, height: 32, region: PixelRect { x0: 0, y0: 0, x1: 48, y1: 32 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 18.0, aperture: [20.955, 15.2908], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 10.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/placed.usda", "$DIR/stage.usda", "$DIR/table.usda"], invisible_overrides: Some(0) } +layer: $DIR/crate.usda +layer: $DIR/placed.usda +layer: $DIR/stage.usda +layer: $DIR/table.usda +lights: 1 +light 0: dome name Some("/World/Sky") lpe None pmf 1.0 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 15 geometries, PrimitiveBreakdown { triangles: 166, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 6 } top level, PrimitiveBreakdown { triangles: 178, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 6 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=12:d69dc8407e39c57d camera=12:d69dc8407e39c57d shadow=12:d69dc8407e39c57d indirect=12:d69dc8407e39c57d +geom 1: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=12:108ece7556e2045d camera=12:108ece7556e2045d shadow=12:108ece7556e2045d indirect=12:108ece7556e2045d +geom 2: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=12:b6f2f6b932607ce5 camera=12:b6f2f6b932607ce5 shadow=12:b6f2f6b932607ce5 indirect=12:b6f2f6b932607ce5 +geom 3: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=12:18f7f442a8f08005 camera=12:18f7f442a8f08005 shadow=12:18f7f442a8f08005 indirect=12:18f7f442a8f08005 +geom 4: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=12:95835634df888e55 camera=12:95835634df888e55 shadow=12:95835634df888e55 indirect=12:95835634df888e55 +geom 5: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=12:26e126fb8d08607d camera=12:26e126fb8d08607d shadow=12:26e126fb8d08607d indirect=12:26e126fb8d08607d +geom 6: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=4:d3ae5d8c61eeefd5 camera=4:d3ae5d8c61eeefd5 shadow=4:d3ae5d8c61eeefd5 indirect=4:d3ae5d8c61eeefd5 +geom 7: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:02dee92ba923d022 camera=2:02dee92ba923d022 shadow=2:02dee92ba923d022 indirect=2:02dee92ba923d022 +geom 8: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:d420bef838b31092 camera=2:d420bef838b31092 shadow=2:d420bef838b31092 indirect=2:d420bef838b31092 +geom 9: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=128:7e7f92bf6cf1e8e1 camera=128:7e7f92bf6cf1e8e1 shadow=128:7e7f92bf6cf1e8e1 indirect=128:7e7f92bf6cf1e8e1 +geom 10: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:5fd3af8a8974e005 camera=2:5fd3af8a8974e005 shadow=2:5fd3af8a8974e005 indirect=2:5fd3af8a8974e005 +geom 11: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:9626b0f2f3e041c5 camera=2:9626b0f2f3e041c5 shadow=2:9626b0f2f3e041c5 indirect=2:9626b0f2f3e041c5 +geom 12: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=12:65eff1dac76e16e5 camera=12:65eff1dac76e16e5 shadow=12:65eff1dac76e16e5 indirect=12:65eff1dac76e16e5 +geom 13: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=12:c5bbf2f135b5e22b camera=12:c5bbf2f135b5e22b shadow=12:c5bbf2f135b5e22b indirect=12:c5bbf2f135b5e22b +geom 14: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:77f8032df1a5e1f5 camera=2:77f8032df1a5e1f5 shadow=2:77f8032df1a5e1f5 indirect=2:77f8032df1a5e1f5 +provenance arc source: /Crate +provenance arc source: /Crate/geo +provenance arc source: /_Cube +provenance light /World/Sky: LightOrigin { index: 0, geoms: 14..14 } +provenance geometry 0..1: /World/pebble/geo +provenance geometry 1..2: /World/away/geo +provenance geometry 2..3: /World/box/geo +provenance geometry 3..4: /World/sunk/geo +provenance geometry 4..5: /World/rock/geo +provenance geometry 5..6: /World/vase/geo +provenance geometry 6..7: /World/steps/geo +provenance geometry 7..8: /World/field/geo +provenance geometry 8..9: /World/slope/geo +provenance geometry 9..10: /World/terrain/geo +provenance geometry 10..11: /World/shelf/geo +provenance geometry 11..12: /World/floor/geo +provenance geometry 12..13: /World/inst +provenance geometry 13..14: /World/crate/geo +provenance geometry 14..15: /World/table/geo +provenance mesh: MeshOrigin { geom_id: 0, slot: 0, baked: false, moving: false } +provenance mesh: MeshOrigin { geom_id: 1, slot: 0, baked: false, moving: false } +provenance mesh: MeshOrigin { geom_id: 2, slot: 0, baked: false, moving: false } +provenance mesh: MeshOrigin { geom_id: 3, slot: 0, baked: false, moving: false } +provenance mesh: MeshOrigin { geom_id: 4, slot: 1, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 5, slot: 2, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 6, slot: 3, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 7, slot: 4, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 8, slot: 5, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 9, slot: 6, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 10, slot: 7, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 11, slot: 8, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 13, slot: 0, baked: false, moving: false } +provenance mesh: MeshOrigin { geom_id: 14, slot: 9, baked: true, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 2634041098053373584, n_points: 8, n_indices: 24, n_uvs: None, smooth: true, material: 0 }), placements: 5, shared: true, displaced: false } +provenance mesh slot 1: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 14470132405950877311, n_points: 8, n_indices: 24, n_uvs: None, smooth: true, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 2: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 1206830347127950734, n_points: 8, n_indices: 24, n_uvs: None, smooth: true, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 3: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 9519870911682368984, n_points: 6, n_indices: 8, n_uvs: None, smooth: true, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 4: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 1341889141698287293, n_points: 4, n_indices: 4, n_uvs: None, smooth: true, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 5: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 1313731086437247865, n_points: 4, n_indices: 4, n_uvs: None, smooth: true, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 6: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 15760070156626746114, n_points: 81, n_indices: 256, n_uvs: None, smooth: true, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 7: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 1050066994217133652, n_points: 4, n_indices: 4, n_uvs: None, smooth: true, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 8: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 14002714535549629103, n_points: 4, n_indices: 4, n_uvs: None, smooth: true, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 9: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 14095911038168715313, n_points: 4, n_indices: 4, n_uvs: None, smooth: true, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: true }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/World/Cam"), cameras: ["/World/Cam"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/World/Cam"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/placed_usda-503a8ea6d52670c0-1.image b/crates/crust-core/tests/data/import_baselines/placed_usda-503a8ea6d52670c0-1.image new file mode 100644 index 000000000..9c00d41e4 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/placed_usda-503a8ea6d52670c0-1.image @@ -0,0 +1 @@ +48x32 16spp clamp-off d07945c7d875794f diff --git a/crates/crust-core/tests/data/import_baselines/placed_usda-63f0ce074fafa44d-1.digest b/crates/crust-core/tests/data/import_baselines/placed_usda-63f0ce074fafa44d-1.digest new file mode 100644 index 000000000..40c63c33c --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/placed_usda-63f0ce074fafa44d-1.digest @@ -0,0 +1,78 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/World/Cam") +camera: Camera { origin: Vec3A(0.0, 4.0, 14.0), lower_left_corner: Vec3A(-6.371167, -0.2474451, 4.0), horizontal: Vec3A(12.742334, 0.0, 0.0), vertical: Vec3A(0.0, 8.49489, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: Some("/Render/settings") +settings: RenderSettings { samples_per_pixel: 128, max_depth: 3, width: 48, height: 32, region: PixelRect { x0: 0, y0: 0, x1: 48, y1: 32 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 18.0, aperture: [20.955, 15.2908], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 10.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/placed.usda", "$DIR/stage.usda", "$DIR/table.usda"], invisible_overrides: Some(0) } +layer: $DIR/crate.usda +layer: $DIR/placed.usda +layer: $DIR/stage.usda +layer: $DIR/table.usda +lights: 1 +light 0: dome name Some("/World/Sky") lpe None pmf 1.0 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 15 geometries, PrimitiveBreakdown { triangles: 166, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 6 } top level, PrimitiveBreakdown { triangles: 178, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 6 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=12:d69dc8407e39c57d camera=12:d69dc8407e39c57d shadow=12:d69dc8407e39c57d indirect=12:d69dc8407e39c57d +geom 1: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=12:108ece7556e2045d camera=12:108ece7556e2045d shadow=12:108ece7556e2045d indirect=12:108ece7556e2045d +geom 2: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=12:b6f2f6b932607ce5 camera=12:b6f2f6b932607ce5 shadow=12:b6f2f6b932607ce5 indirect=12:b6f2f6b932607ce5 +geom 3: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=12:18f7f442a8f08005 camera=12:18f7f442a8f08005 shadow=12:18f7f442a8f08005 indirect=12:18f7f442a8f08005 +geom 4: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=12:95835634df888e55 camera=12:95835634df888e55 shadow=12:95835634df888e55 indirect=12:95835634df888e55 +geom 5: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=12:26e126fb8d08607d camera=12:26e126fb8d08607d shadow=12:26e126fb8d08607d indirect=12:26e126fb8d08607d +geom 6: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=4:d3ae5d8c61eeefd5 camera=4:d3ae5d8c61eeefd5 shadow=4:d3ae5d8c61eeefd5 indirect=4:d3ae5d8c61eeefd5 +geom 7: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:02dee92ba923d022 camera=2:02dee92ba923d022 shadow=2:02dee92ba923d022 indirect=2:02dee92ba923d022 +geom 8: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:d420bef838b31092 camera=2:d420bef838b31092 shadow=2:d420bef838b31092 indirect=2:d420bef838b31092 +geom 9: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=128:7e7f92bf6cf1e8e1 camera=128:7e7f92bf6cf1e8e1 shadow=128:7e7f92bf6cf1e8e1 indirect=128:7e7f92bf6cf1e8e1 +geom 10: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:5fd3af8a8974e005 camera=2:5fd3af8a8974e005 shadow=2:5fd3af8a8974e005 indirect=2:5fd3af8a8974e005 +geom 11: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:9626b0f2f3e041c5 camera=2:9626b0f2f3e041c5 shadow=2:9626b0f2f3e041c5 indirect=2:9626b0f2f3e041c5 +geom 12: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=12:65eff1dac76e16e5 camera=12:65eff1dac76e16e5 shadow=12:65eff1dac76e16e5 indirect=12:65eff1dac76e16e5 +geom 13: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=12:c5bbf2f135b5e22b camera=12:c5bbf2f135b5e22b shadow=12:c5bbf2f135b5e22b indirect=12:c5bbf2f135b5e22b +geom 14: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:a8d87f10866c6975 camera=2:a8d87f10866c6975 shadow=2:a8d87f10866c6975 indirect=2:a8d87f10866c6975 +provenance arc source: /Crate +provenance arc source: /Crate/geo +provenance arc source: /_Cube +provenance light /World/Sky: LightOrigin { index: 0, geoms: 14..14 } +provenance geometry 0..1: /World/pebble/geo +provenance geometry 1..2: /World/away/geo +provenance geometry 2..3: /World/box/geo +provenance geometry 3..4: /World/sunk/geo +provenance geometry 4..5: /World/rock/geo +provenance geometry 5..6: /World/vase/geo +provenance geometry 6..7: /World/steps/geo +provenance geometry 7..8: /World/field/geo +provenance geometry 8..9: /World/slope/geo +provenance geometry 9..10: /World/terrain/geo +provenance geometry 10..11: /World/shelf/geo +provenance geometry 11..12: /World/floor/geo +provenance geometry 12..13: /World/inst +provenance geometry 13..14: /World/crate/geo +provenance geometry 14..15: /World/table/geo +provenance mesh: MeshOrigin { geom_id: 0, slot: 0, baked: false, moving: false } +provenance mesh: MeshOrigin { geom_id: 1, slot: 0, baked: false, moving: false } +provenance mesh: MeshOrigin { geom_id: 2, slot: 0, baked: false, moving: false } +provenance mesh: MeshOrigin { geom_id: 3, slot: 0, baked: false, moving: false } +provenance mesh: MeshOrigin { geom_id: 4, slot: 1, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 5, slot: 2, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 6, slot: 3, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 7, slot: 4, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 8, slot: 5, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 9, slot: 6, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 10, slot: 7, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 11, slot: 8, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 13, slot: 0, baked: false, moving: false } +provenance mesh: MeshOrigin { geom_id: 14, slot: 9, baked: true, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 2634041098053373584, n_points: 8, n_indices: 24, n_uvs: None, smooth: true, material: 0 }), placements: 5, shared: true, displaced: false } +provenance mesh slot 1: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 14470132405950877311, n_points: 8, n_indices: 24, n_uvs: None, smooth: true, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 2: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 1206830347127950734, n_points: 8, n_indices: 24, n_uvs: None, smooth: true, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 3: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 9519870911682368984, n_points: 6, n_indices: 8, n_uvs: None, smooth: true, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 4: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 1341889141698287293, n_points: 4, n_indices: 4, n_uvs: None, smooth: true, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 5: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 1313731086437247865, n_points: 4, n_indices: 4, n_uvs: None, smooth: true, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 6: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 15760070156626746114, n_points: 81, n_indices: 256, n_uvs: None, smooth: true, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 7: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 1050066994217133652, n_points: 4, n_indices: 4, n_uvs: None, smooth: true, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 8: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 14002714535549629103, n_points: 4, n_indices: 4, n_uvs: None, smooth: true, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 9: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 14095911038168715313, n_points: 4, n_indices: 4, n_uvs: None, smooth: true, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: true }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/World/Cam"), cameras: ["/World/Cam"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/World/Cam"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/placed_usda-63f0ce074fafa44d-1.image b/crates/crust-core/tests/data/import_baselines/placed_usda-63f0ce074fafa44d-1.image new file mode 100644 index 000000000..acafa1d31 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/placed_usda-63f0ce074fafa44d-1.image @@ -0,0 +1 @@ +48x32 16spp clamp-off 337d834a81c72ff3 diff --git a/crates/crust-core/tests/data/import_baselines/placed_usda-6fa96be933bc04d8-1.digest b/crates/crust-core/tests/data/import_baselines/placed_usda-6fa96be933bc04d8-1.digest new file mode 100644 index 000000000..a5729b95a --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/placed_usda-6fa96be933bc04d8-1.digest @@ -0,0 +1,684 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/World/Cam") +camera: Camera { origin: Vec3A(0.0, 4.0, 14.0), lower_left_corner: Vec3A(-6.371167, -0.2474451, 4.0), horizontal: Vec3A(12.742334, 0.0, 0.0), vertical: Vec3A(0.0, 8.49489, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: Some("/Render/settings") +settings: RenderSettings { samples_per_pixel: 128, max_depth: 3, width: 48, height: 32, region: PixelRect { x0: 0, y0: 0, x1: 48, y1: 32 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 18.0, aperture: [20.955, 15.2908], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 10.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/placed.usda", "$DIR/stage.usda", "$DIR/table.usda"], invisible_overrides: Some(0) } +layer: $DIR/crate.usda +layer: $DIR/placed.usda +layer: $DIR/stage.usda +layer: $DIR/stone_a.usda +layer: $DIR/table.usda +lights: 1 +light 0: dome name Some("/World/Sky") lpe None pmf 1.0 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 615 geometries, PrimitiveBreakdown { triangles: 166, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 606 } top level, PrimitiveBreakdown { triangles: 190, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 606 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.8990609 motion [] pieces all=12:44b1d82c21842e3b camera=12:44b1d82c21842e3b shadow=12:44b1d82c21842e3b indirect=12:44b1d82c21842e3b +geom 1: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0628142 motion [] pieces all=12:fed5ab87cac668b9 camera=12:fed5ab87cac668b9 shadow=12:fed5ab87cac668b9 indirect=12:fed5ab87cac668b9 +geom 2: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.94923806 motion [] pieces all=12:1ad12ee89da48838 camera=12:1ad12ee89da48838 shadow=12:1ad12ee89da48838 indirect=12:1ad12ee89da48838 +geom 3: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.1124884 motion [] pieces all=12:8ee6a452b05da0cd camera=12:8ee6a452b05da0cd shadow=12:8ee6a452b05da0cd indirect=12:8ee6a452b05da0cd +geom 4: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.187099 motion [] pieces all=12:cbc4fb39bd570db1 camera=12:cbc4fb39bd570db1 shadow=12:cbc4fb39bd570db1 indirect=12:cbc4fb39bd570db1 +geom 5: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.9952836 motion [] pieces all=12:c0123fbd9a45557d camera=12:c0123fbd9a45557d shadow=12:c0123fbd9a45557d indirect=12:c0123fbd9a45557d +geom 6: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.80443853 motion [] pieces all=12:3ea10226bab9624f camera=12:3ea10226bab9624f shadow=12:3ea10226bab9624f indirect=12:3ea10226bab9624f +geom 7: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0070286 motion [] pieces all=12:e3be496ac4b3262b camera=12:e3be496ac4b3262b shadow=12:e3be496ac4b3262b indirect=12:e3be496ac4b3262b +geom 8: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.1720115 motion [] pieces all=12:ea04bb3ba81dc81b camera=12:ea04bb3ba81dc81b shadow=12:ea04bb3ba81dc81b indirect=12:ea04bb3ba81dc81b +geom 9: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.96482605 motion [] pieces all=12:31ff273f8175725c camera=12:31ff273f8175725c shadow=12:31ff273f8175725c indirect=12:31ff273f8175725c +geom 10: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.8443385 motion [] pieces all=12:020ce5728e3ef7a9 camera=12:020ce5728e3ef7a9 shadow=12:020ce5728e3ef7a9 indirect=12:020ce5728e3ef7a9 +geom 11: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0417223 motion [] pieces all=12:71e1303c0b742528 camera=12:71e1303c0b742528 shadow=12:71e1303c0b742528 indirect=12:71e1303c0b742528 +geom 12: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.8748417 motion [] pieces all=12:d637039e9d57d597 camera=12:d637039e9d57d597 shadow=12:d637039e9d57d597 indirect=12:d637039e9d57d597 +geom 13: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0863136 motion [] pieces all=12:6c752ae6b68c691b camera=12:6c752ae6b68c691b shadow=12:6c752ae6b68c691b indirect=12:6c752ae6b68c691b +geom 14: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.91278625 motion [] pieces all=12:6fc83c3207a84644 camera=12:6fc83c3207a84644 shadow=12:6fc83c3207a84644 indirect=12:6fc83c3207a84644 +geom 15: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.1320257 motion [] pieces all=12:11ca234ef3c6c516 camera=12:11ca234ef3c6c516 shadow=12:11ca234ef3c6c516 indirect=12:11ca234ef3c6c516 +geom 16: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.1384283 motion [] pieces all=12:11fb92adc381d6ce camera=12:11fb92adc381d6ce shadow=12:11fb92adc381d6ce indirect=12:11fb92adc381d6ce +geom 17: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.9022886 motion [] pieces all=12:da9d2cdf99248ed0 camera=12:da9d2cdf99248ed0 shadow=12:da9d2cdf99248ed0 indirect=12:da9d2cdf99248ed0 +geom 18: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.8560681 motion [] pieces all=12:d605449360347e25 camera=12:d605449360347e25 shadow=12:d605449360347e25 indirect=12:d605449360347e25 +geom 19: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0914848 motion [] pieces all=12:dfe5a25bbcf4b12e camera=12:dfe5a25bbcf4b12e shadow=12:dfe5a25bbcf4b12e indirect=12:dfe5a25bbcf4b12e +geom 20: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.1542208 motion [] pieces all=12:14ea4f92c6d4e02f camera=12:14ea4f92c6d4e02f shadow=12:14ea4f92c6d4e02f indirect=12:14ea4f92c6d4e02f +geom 21: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.95115894 motion [] pieces all=12:6239451bd4199ef0 camera=12:6239451bd4199ef0 shadow=12:6239451bd4199ef0 indirect=12:6239451bd4199ef0 +geom 22: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.8291241 motion [] pieces all=12:b2ecb8be3c02cdb8 camera=12:b2ecb8be3c02cdb8 shadow=12:b2ecb8be3c02cdb8 indirect=12:b2ecb8be3c02cdb8 +geom 23: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0308899 motion [] pieces all=12:b2203d5336aff19a camera=12:b2203d5336aff19a shadow=12:b2203d5336aff19a indirect=12:b2203d5336aff19a +geom 24: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.9334562 motion [] pieces all=12:32c8c79560b759ed camera=12:32c8c79560b759ed shadow=12:32c8c79560b759ed indirect=12:32c8c79560b759ed +geom 25: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.1137878 motion [] pieces all=12:106810481c557f7c camera=12:106810481c557f7c shadow=12:106810481c557f7c indirect=12:106810481c557f7c +geom 26: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0543976 motion [] pieces all=12:e4160405b004d185 camera=12:e4160405b004d185 shadow=12:e4160405b004d185 indirect=12:e4160405b004d185 +geom 27: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.87682164 motion [] pieces all=12:5073fc610cea0791 camera=12:5073fc610cea0791 shadow=12:5073fc610cea0791 indirect=12:5073fc610cea0791 +geom 28: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.016827 motion [] pieces all=12:60d592a4f07b6a38 camera=12:60d592a4f07b6a38 shadow=12:60d592a4f07b6a38 indirect=12:60d592a4f07b6a38 +geom 29: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.8125884 motion [] pieces all=12:fc685efde84de305 camera=12:fc685efde84de305 shadow=12:fc685efde84de305 indirect=12:fc685efde84de305 +geom 30: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.1979452 motion [] pieces all=12:70f20ca832b921a0 camera=12:70f20ca832b921a0 shadow=12:70f20ca832b921a0 indirect=12:70f20ca832b921a0 +geom 31: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.98569065 motion [] pieces all=12:4e49d8cc8f68c48f camera=12:4e49d8cc8f68c48f shadow=12:4e49d8cc8f68c48f indirect=12:4e49d8cc8f68c48f +geom 32: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.92193866 motion [] pieces all=12:a9d2072a14a53f18 camera=12:a9d2072a14a53f18 shadow=12:a9d2072a14a53f18 indirect=12:a9d2072a14a53f18 +geom 33: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.126033 motion [] pieces all=12:94fbd92676dc25b2 camera=12:94fbd92676dc25b2 shadow=12:94fbd92676dc25b2 indirect=12:94fbd92676dc25b2 +geom 34: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0781286 motion [] pieces all=12:725c4008f76a8de9 camera=12:725c4008f76a8de9 shadow=12:725c4008f76a8de9 indirect=12:725c4008f76a8de9 +geom 35: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.8665554 motion [] pieces all=12:c2145267f981f560 camera=12:c2145267f981f560 shadow=12:c2145267f981f560 indirect=12:c2145267f981f560 +geom 36: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.8436374 motion [] pieces all=12:d589d64853d7469a camera=12:d589d64853d7469a shadow=12:d589d64853d7469a indirect=12:d589d64853d7469a +geom 37: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0491575 motion [] pieces all=12:aeacc5b54993e3a4 camera=12:aeacc5b54993e3a4 shadow=12:aeacc5b54993e3a4 indirect=12:aeacc5b54993e3a4 +geom 38: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.970894 motion [] pieces all=12:6cd44b701cec5a02 camera=12:6cd44b701cec5a02 shadow=12:6cd44b701cec5a02 indirect=12:6cd44b701cec5a02 +geom 39: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.1674632 motion [] pieces all=12:c26619c821514720 camera=12:c26619c821514720 shadow=12:c26619c821514720 indirect=12:c26619c821514720 +geom 40: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.9387685 motion [] pieces all=12:2d0aafd941588f2b camera=12:2d0aafd941588f2b shadow=12:2d0aafd941588f2b indirect=12:2d0aafd941588f2b +geom 41: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.1010078 motion [] pieces all=12:d0ebcbdb15f7fc1f camera=12:d0ebcbdb15f7fc1f shadow=12:d0ebcbdb15f7fc1f indirect=12:d0ebcbdb15f7fc1f +geom 42: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0749352 motion [] pieces all=12:2df2fea1349e73fc camera=12:2df2fea1349e73fc shadow=12:2df2fea1349e73fc indirect=12:2df2fea1349e73fc +geom 43: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.8877842 motion [] pieces all=12:85e256d14e3e430b camera=12:85e256d14e3e430b shadow=12:85e256d14e3e430b indirect=12:85e256d14e3e430b +geom 44: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.987708 motion [] pieces all=12:bf1d02dea2d1adfc camera=12:bf1d02dea2d1adfc shadow=12:bf1d02dea2d1adfc indirect=12:bf1d02dea2d1adfc +geom 45: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.1782725 motion [] pieces all=12:eed6675f2e2d35ad camera=12:eed6675f2e2d35ad shadow=12:eed6675f2e2d35ad indirect=12:eed6675f2e2d35ad +geom 46: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0043731 motion [] pieces all=12:6b90bf535f4983cb camera=12:6b90bf535f4983cb shadow=12:6b90bf535f4983cb indirect=12:6b90bf535f4983cb +geom 47: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.80755323 motion [] pieces all=12:449e89141d8d6a91 camera=12:449e89141d8d6a91 shadow=12:449e89141d8d6a91 indirect=12:449e89141d8d6a91 +geom 48: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.83668417 motion [] pieces all=12:1db7296c740d63f1 camera=12:1db7296c740d63f1 shadow=12:1db7296c740d63f1 indirect=12:1db7296c740d63f1 +geom 49: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0351386 motion [] pieces all=12:2c6575c259c9b975 camera=12:2c6575c259c9b975 shadow=12:2c6575c259c9b975 indirect=12:2c6575c259c9b975 +geom 50: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.1581647 motion [] pieces all=12:bbc8a606fa4d000f camera=12:bbc8a606fa4d000f shadow=12:bbc8a606fa4d000f indirect=12:bbc8a606fa4d000f +geom 51: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.9576694 motion [] pieces all=12:91e829c376771d11 camera=12:91e829c376771d11 shadow=12:91e829c376771d11 indirect=12:91e829c376771d11 +geom 52: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0958747 motion [] pieces all=12:b40ab56cf498811d camera=12:b40ab56cf498811d shadow=12:b40ab56cf498811d indirect=12:b40ab56cf498811d +geom 53: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.85897017 motion [] pieces all=12:52808830e6104150 camera=12:52808830e6104150 shadow=12:52808830e6104150 indirect=12:52808830e6104150 +geom 54: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.91061383 motion [] pieces all=12:02326fdedd732d8c camera=12:02326fdedd732d8c shadow=12:02326fdedd732d8c indirect=12:02326fdedd732d8c +geom 55: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.1471994 motion [] pieces all=12:8c147f4b5d226330 camera=12:8c147f4b5d226330 shadow=12:8c147f4b5d226330 indirect=12:8c147f4b5d226330 +geom 56: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.1935827 motion [] pieces all=12:911e56b8319ba4c0 camera=12:911e56b8319ba4c0 shadow=12:911e56b8319ba4c0 indirect=12:911e56b8319ba4c0 +geom 57: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.980042 motion [] pieces all=12:c275ab0655ce50b5 camera=12:c275ab0655ce50b5 shadow=12:c275ab0655ce50b5 indirect=12:c275ab0655ce50b5 +geom 58: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0233157 motion [] pieces all=12:5a0565096cbe550a camera=12:5a0565096cbe550a shadow=12:5a0565096cbe550a indirect=12:5a0565096cbe550a +geom 59: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.8224425 motion [] pieces all=12:c5fd305f31d8a644 camera=12:c5fd305f31d8a644 shadow=12:c5fd305f31d8a644 indirect=12:c5fd305f31d8a644 +geom 60: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0592008 motion [] pieces all=12:b6f978c24e98ef94 camera=12:b6f978c24e98ef94 shadow=12:b6f978c24e98ef94 indirect=12:b6f978c24e98ef94 +geom 61: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.8817098 motion [] pieces all=12:0ce0d9cf2f434c36 camera=12:0ce0d9cf2f434c36 shadow=12:0ce0d9cf2f434c36 indirect=12:0ce0d9cf2f434c36 +geom 62: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.9295446 motion [] pieces all=12:2c015ffa5baf0735 camera=12:2c015ffa5baf0735 shadow=12:2c015ffa5baf0735 indirect=12:2c015ffa5baf0735 +geom 63: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.1193067 motion [] pieces all=12:56c847b2ff301f79 camera=12:56c847b2ff301f79 shadow=12:56c847b2ff301f79 indirect=12:56c847b2ff301f79 +geom 64: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.1518211 motion [] pieces all=12:627009bd45ed48c0 camera=12:627009bd45ed48c0 shadow=12:627009bd45ed48c0 indirect=12:627009bd45ed48c0 +geom 65: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.9556986 motion [] pieces all=12:07e637ff927077f1 camera=12:07e637ff927077f1 shadow=12:07e637ff927077f1 indirect=12:07e637ff927077f1 +geom 66: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0273238 motion [] pieces all=12:ca2d07dbc8c81ea8 camera=12:ca2d07dbc8c81ea8 shadow=12:ca2d07dbc8c81ea8 indirect=12:ca2d07dbc8c81ea8 +geom 67: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.8273176 motion [] pieces all=12:d0c7b5616de963a3 camera=12:d0c7b5616de963a3 shadow=12:d0c7b5616de963a3 indirect=12:d0c7b5616de963a3 +geom 68: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.1410161 motion [] pieces all=12:cc604b00584b0eef camera=12:cc604b00584b0eef shadow=12:cc604b00584b0eef indirect=12:cc604b00584b0eef +geom 69: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.9045178 motion [] pieces all=12:cffb35b8cc4f6741 camera=12:cffb35b8cc4f6741 shadow=12:cffb35b8cc4f6741 indirect=12:cffb35b8cc4f6741 +geom 70: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0891551 motion [] pieces all=12:e467d215ef374063 camera=12:e467d215ef374063 shadow=12:e467d215ef374063 indirect=12:e467d215ef374063 +geom 71: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.851863 motion [] pieces all=12:5a32a21db9151a91 camera=12:5a32a21db9151a91 shadow=12:5a32a21db9151a91 indirect=12:5a32a21db9151a91 +geom 72: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.1945997 motion [] pieces all=12:5cf4521db65fa38e camera=12:5cf4521db65fa38e shadow=12:5cf4521db65fa38e indirect=12:5cf4521db65fa38e +geom 73: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.9821077 motion [] pieces all=12:6f1610f26c0a9295 camera=12:6f1610f26c0a9295 shadow=12:6f1610f26c0a9295 indirect=12:6f1610f26c0a9295 +geom 74: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0151749 motion [] pieces all=12:72ad6327235e75f3 camera=12:72ad6327235e75f3 shadow=12:72ad6327235e75f3 indirect=12:72ad6327235e75f3 +geom 75: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.81593794 motion [] pieces all=12:cc0b48dc986c276b camera=12:cc0b48dc986c276b shadow=12:cc0b48dc986c276b indirect=12:cc0b48dc986c276b +geom 76: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0501194 motion [] pieces all=12:07608e830f73ad69 camera=12:07608e830f73ad69 shadow=12:07608e830f73ad69 indirect=12:07608e830f73ad69 +geom 77: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.8808431 motion [] pieces all=12:36acbe841ce3820a camera=12:36acbe841ce3820a shadow=12:36acbe841ce3820a indirect=12:36acbe841ce3820a +geom 78: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.9359924 motion [] pieces all=12:1e736443914ad79a camera=12:1e736443914ad79a shadow=12:1e736443914ad79a indirect=12:1e736443914ad79a +geom 79: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.1171876 motion [] pieces all=12:d69abdf928c43e4c camera=12:d69abdf928c43e4c shadow=12:d69abdf928c43e4c indirect=12:d69abdf928c43e4c +geom 80: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0380744 motion [] pieces all=12:91a0a7989b5b0ce7 camera=12:91a0a7989b5b0ce7 shadow=12:91a0a7989b5b0ce7 indirect=12:91a0a7989b5b0ce7 +geom 81: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.8486114 motion [] pieces all=12:0980b2d1daba7f90 camera=12:0980b2d1daba7f90 shadow=12:0980b2d1daba7f90 indirect=12:0980b2d1daba7f90 +geom 82: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.1718653 motion [] pieces all=12:7fa47bd767e3268e camera=12:7fa47bd767e3268e shadow=12:7fa47bd767e3268e indirect=12:7fa47bd767e3268e +geom 83: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.9663366 motion [] pieces all=12:a679b83e0b0cac09 camera=12:a679b83e0b0cac09 shadow=12:a679b83e0b0cac09 indirect=12:a679b83e0b0cac09 +geom 84: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.91593134 motion [] pieces all=12:18bd3540606dcc29 camera=12:18bd3540606dcc29 shadow=12:18bd3540606dcc29 indirect=12:18bd3540606dcc29 +geom 85: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.1349744 motion [] pieces all=12:575041f453c38bda camera=12:575041f453c38bda shadow=12:575041f453c38bda indirect=12:575041f453c38bda +geom 86: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0823053 motion [] pieces all=12:2e91b83be04794d4 camera=12:2e91b83be04794d4 shadow=12:2e91b83be04794d4 indirect=12:2e91b83be04794d4 +geom 87: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.8692073 motion [] pieces all=12:469b4983d898cee1 camera=12:469b4983d898cee1 shadow=12:469b4983d898cee1 indirect=12:469b4983d898cee1 +geom 88: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.1841434 motion [] pieces all=12:aa3a0729eb91a585 camera=12:aa3a0729eb91a585 shadow=12:aa3a0729eb91a585 indirect=12:aa3a0729eb91a585 +geom 89: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.9976128 motion [] pieces all=12:962d0873576941e8 camera=12:962d0873576941e8 shadow=12:962d0873576941e8 indirect=12:962d0873576941e8 +geom 90: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0106225 motion [] pieces all=12:206b577663e569fa camera=12:206b577663e569fa shadow=12:206b577663e569fa indirect=12:206b577663e569fa +geom 91: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.80188763 motion [] pieces all=12:086331f78e8a8d62 camera=12:086331f78e8a8d62 shadow=12:086331f78e8a8d62 indirect=12:086331f78e8a8d62 +geom 92: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.9451319 motion [] pieces all=12:6f6dcdd5eef02b6b camera=12:6f6dcdd5eef02b6b shadow=12:6f6dcdd5eef02b6b indirect=12:6f6dcdd5eef02b6b +geom 93: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.1072922 motion [] pieces all=12:7346966608d93537 camera=12:7346966608d93537 shadow=12:7346966608d93537 indirect=12:7346966608d93537 +geom 94: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.8943972 motion [] pieces all=12:6856d703c3e43835 camera=12:6856d703c3e43835 shadow=12:6856d703c3e43835 indirect=12:6856d703c3e43835 +geom 95: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0684817 motion [] pieces all=12:ab5e6b77fe0c146d camera=12:ab5e6b77fe0c146d shadow=12:ab5e6b77fe0c146d indirect=12:ab5e6b77fe0c146d +geom 96: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.1249955 motion [] pieces all=12:61de4bf9266dbc70 camera=12:61de4bf9266dbc70 shadow=12:61de4bf9266dbc70 indirect=12:61de4bf9266dbc70 +geom 97: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.9280391 motion [] pieces all=12:a3a90020585141c2 camera=12:a3a90020585141c2 shadow=12:a3a90020585141c2 indirect=12:a3a90020585141c2 +geom 98: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0595247 motion [] pieces all=12:50adb7a417da4de9 camera=12:50adb7a417da4de9 shadow=12:50adb7a417da4de9 indirect=12:50adb7a417da4de9 +geom 99: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.88450146 motion [] pieces all=12:fc56548e56001d3e camera=12:fc56548e56001d3e shadow=12:fc56548e56001d3e indirect=12:fc56548e56001d3e +geom 100: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.1892818 motion [] pieces all=12:3697012ed99d613b camera=12:3697012ed99d613b shadow=12:3697012ed99d613b indirect=12:3697012ed99d613b +geom 101: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.97749156 motion [] pieces all=12:683faf01facb6fb3 camera=12:683faf01facb6fb3 shadow=12:683faf01facb6fb3 indirect=12:683faf01facb6fb3 +geom 102: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0217395 motion [] pieces all=12:5a8360b0f2d16458 camera=12:5a8360b0f2d16458 shadow=12:5a8360b0f2d16458 indirect=12:5a8360b0f2d16458 +geom 103: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.82127976 motion [] pieces all=12:877a12bfa3c144e5 camera=12:877a12bfa3c144e5 shadow=12:877a12bfa3c144e5 indirect=12:877a12bfa3c144e5 +geom 104: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0994653 motion [] pieces all=12:b4170c138da5d199 camera=12:b4170c138da5d199 shadow=12:b4170c138da5d199 indirect=12:b4170c138da5d199 +geom 105: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.8608528 motion [] pieces all=12:2979926551fa98a4 camera=12:2979926551fa98a4 shadow=12:2979926551fa98a4 indirect=12:2979926551fa98a4 +geom 106: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.90750545 motion [] pieces all=12:242fbeee47e18ad0 camera=12:242fbeee47e18ad0 shadow=12:242fbeee47e18ad0 indirect=12:242fbeee47e18ad0 +geom 107: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.1456926 motion [] pieces all=12:fbc5064855c1a80b camera=12:fbc5064855c1a80b shadow=12:fbc5064855c1a80b indirect=12:fbc5064855c1a80b +geom 108: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.1613561 motion [] pieces all=12:282530007653267c camera=12:282530007653267c shadow=12:282530007653267c indirect=12:282530007653267c +geom 109: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.96178114 motion [] pieces all=12:992eedf417885372 camera=12:992eedf417885372 shadow=12:992eedf417885372 indirect=12:992eedf417885372 +geom 110: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0319483 motion [] pieces all=12:f429f4fc21c6cb92 camera=12:f429f4fc21c6cb92 shadow=12:f429f4fc21c6cb92 indirect=12:f429f4fc21c6cb92 +geom 111: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.8326967 motion [] pieces all=12:13f9a9a2245582b7 camera=12:13f9a9a2245582b7 shadow=12:13f9a9a2245582b7 indirect=12:13f9a9a2245582b7 +geom 112: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.1289089 motion [] pieces all=12:43c1e0cf79e4483b camera=12:43c1e0cf79e4483b shadow=12:43c1e0cf79e4483b indirect=12:43c1e0cf79e4483b +geom 113: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.92041624 motion [] pieces all=12:51d3d5c61e6a99f8 camera=12:51d3d5c61e6a99f8 shadow=12:51d3d5c61e6a99f8 indirect=12:51d3d5c61e6a99f8 +geom 114: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.8645451 motion [] pieces all=12:bcf6210474f896ef camera=12:bcf6210474f896ef shadow=12:bcf6210474f896ef indirect=12:bcf6210474f896ef +geom 115: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0773754 motion [] pieces all=12:c1392d4205fdb1ef camera=12:c1392d4205fdb1ef shadow=12:c1392d4205fdb1ef indirect=12:c1392d4205fdb1ef +geom 116: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.045711 motion [] pieces all=12:0a23c800457414d4 camera=12:0a23c800457414d4 shadow=12:0a23c800457414d4 indirect=12:0a23c800457414d4 +geom 117: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.8394264 motion [] pieces all=12:33b52eca5a4cb014 camera=12:33b52eca5a4cb014 shadow=12:33b52eca5a4cb014 indirect=12:33b52eca5a4cb014 +geom 118: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.1634734 motion [] pieces all=12:9a92559e3f552c1d camera=12:9a92559e3f552c1d shadow=12:9a92559e3f552c1d indirect=12:9a92559e3f552c1d +geom 119: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.97260165 motion [] pieces all=12:5f1c658842bda44c camera=12:5f1c658842bda44c shadow=12:5f1c658842bda44c indirect=12:5f1c658842bda44c +geom 120: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0030005 motion [] pieces all=12:a8a05b4db17e7783 camera=12:a8a05b4db17e7783 shadow=12:a8a05b4db17e7783 indirect=12:a8a05b4db17e7783 +geom 121: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.8094701 motion [] pieces all=12:e42a3e316ada230a camera=12:e42a3e316ada230a shadow=12:e42a3e316ada230a indirect=12:e42a3e316ada230a +geom 122: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.1763176 motion [] pieces all=12:24aacd00fe70b325 camera=12:24aacd00fe70b325 shadow=12:24aacd00fe70b325 indirect=12:24aacd00fe70b325 +geom 123: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.99154574 motion [] pieces all=12:b5cee23d150ae51f camera=12:b5cee23d150ae51f shadow=12:b5cee23d150ae51f indirect=12:b5cee23d150ae51f +geom 124: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.1031994 motion [] pieces all=12:e6beba0d18d503dc camera=12:e6beba0d18d503dc shadow=12:e6beba0d18d503dc indirect=12:e6beba0d18d503dc +geom 125: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.9406998 motion [] pieces all=12:3bf146f916dff98b camera=12:3bf146f916dff98b shadow=12:3bf146f916dff98b indirect=12:3bf146f916dff98b +geom 126: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.8914689 motion [] pieces all=12:cd694d9771b0bfd6 camera=12:cd694d9771b0bfd6 shadow=12:cd694d9771b0bfd6 indirect=12:cd694d9771b0bfd6 +geom 127: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0718373 motion [] pieces all=12:e7cc56c1a52f5951 camera=12:e7cc56c1a52f5951 shadow=12:e7cc56c1a52f5951 indirect=12:e7cc56c1a52f5951 +geom 128: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0973064 motion [] pieces all=12:9dd89cdb60cb79c8 camera=12:9dd89cdb60cb79c8 shadow=12:9dd89cdb60cb79c8 indirect=12:9dd89cdb60cb79c8 +geom 129: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.8618871 motion [] pieces all=12:2d16369067aeb476 camera=12:2d16369067aeb476 shadow=12:2d16369067aeb476 indirect=12:2d16369067aeb476 +geom 130: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.1439276 motion [] pieces all=12:39ea99048254fabc camera=12:39ea99048254fabc shadow=12:39ea99048254fabc indirect=12:39ea99048254fabc +geom 131: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.90927 motion [] pieces all=12:54142cf8eec16079 camera=12:54142cf8eec16079 shadow=12:54142cf8eec16079 indirect=12:54142cf8eec16079 +geom 132: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.8337335 motion [] pieces all=12:bcc6a15287527767 camera=12:bcc6a15287527767 shadow=12:bcc6a15287527767 indirect=12:bcc6a15287527767 +geom 133: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0330089 motion [] pieces all=12:5bff0a4f060392bd camera=12:5bff0a4f060392bd shadow=12:5bff0a4f060392bd indirect=12:5bff0a4f060392bd +geom 134: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.95969594 motion [] pieces all=12:25f39ed1572bbbe5 camera=12:25f39ed1572bbbe5 shadow=12:25f39ed1572bbbe5 indirect=12:25f39ed1572bbbe5 +geom 135: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.1606913 motion [] pieces all=12:10c7d51449429b12 camera=12:10c7d51449429b12 shadow=12:10c7d51449429b12 indirect=12:10c7d51449429b12 +geom 136: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.9255529 motion [] pieces all=12:2abf5fb6004de21c camera=12:2abf5fb6004de21c shadow=12:2abf5fb6004de21c indirect=12:2abf5fb6004de21c +geom 137: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.1223564 motion [] pieces all=12:19185f30669c7317 camera=12:19185f30669c7317 shadow=12:19185f30669c7317 indirect=12:19185f30669c7317 +geom 138: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.88656634 motion [] pieces all=12:ec4911562c030504 camera=12:ec4911562c030504 shadow=12:ec4911562c030504 indirect=12:ec4911562c030504 +geom 139: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0613629 motion [] pieces all=12:e1d59546316d5b09 camera=12:e1d59546316d5b09 shadow=12:e1d59546316d5b09 indirect=12:e1d59546316d5b09 +geom 140: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.81943786 motion [] pieces all=12:b1a1eb57240dc675 camera=12:b1a1eb57240dc675 shadow=12:b1a1eb57240dc675 indirect=12:b1a1eb57240dc675 +geom 141: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0191184 motion [] pieces all=12:6e040f68d8a65467 camera=12:6e040f68d8a65467 shadow=12:6e040f68d8a65467 indirect=12:6e040f68d8a65467 +geom 142: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.1875308 motion [] pieces all=12:c5dc406e9310222d camera=12:c5dc406e9310222d shadow=12:c5dc406e9310222d indirect=12:c5dc406e9310222d +geom 143: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.976491 motion [] pieces all=12:4119822a6602f329 camera=12:4119822a6602f329 shadow=12:4119822a6602f329 indirect=12:4119822a6602f329 +geom 144: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.8120902 motion [] pieces all=12:c8d3cfbfb004b08e camera=12:c8d3cfbfb004b08e shadow=12:c8d3cfbfb004b08e indirect=12:c8d3cfbfb004b08e +geom 145: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0007923 motion [] pieces all=12:67ce2cbfdc9194ce camera=12:67ce2cbfdc9194ce shadow=12:67ce2cbfdc9194ce indirect=12:67ce2cbfdc9194ce +geom 146: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.99281836 motion [] pieces all=12:f8f2078e2644f1a1 camera=12:f8f2078e2644f1a1 shadow=12:f8f2078e2644f1a1 indirect=12:f8f2078e2644f1a1 +geom 147: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.176658 motion [] pieces all=12:ef376b6547f56451 camera=12:ef376b6547f56451 shadow=12:ef376b6547f56451 indirect=12:ef376b6547f56451 +geom 148: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.8924503 motion [] pieces all=12:d69111261d18e075 camera=12:d69111261d18e075 shadow=12:d69111261d18e075 indirect=12:d69111261d18e075 +geom 149: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0700728 motion [] pieces all=12:a372d530867216db camera=12:a372d530867216db shadow=12:a372d530867216db indirect=12:a372d530867216db +geom 150: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.94251525 motion [] pieces all=12:23c82ca49f580f37 camera=12:23c82ca49f580f37 shadow=12:23c82ca49f580f37 indirect=12:23c82ca49f580f37 +geom 151: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.1053956 motion [] pieces all=12:ac586560f8843193 camera=12:ac586560f8843193 shadow=12:ac586560f8843193 indirect=12:ac586560f8843193 +geom 152: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.91936475 motion [] pieces all=12:e2d8a8d394d9df85 camera=12:e2d8a8d394d9df85 shadow=12:e2d8a8d394d9df85 indirect=12:e2d8a8d394d9df85 +geom 153: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.1310308 motion [] pieces all=12:b79a739e79cb47b9 camera=12:b79a739e79cb47b9 shadow=12:b79a739e79cb47b9 indirect=12:b79a739e79cb47b9 +geom 154: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.86296463 motion [] pieces all=12:d481e1f55ad71974 camera=12:d481e1f55ad71974 shadow=12:d481e1f55ad71974 indirect=12:d481e1f55ad71974 +geom 155: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0762703 motion [] pieces all=12:1b01bb54076296f7 camera=12:1b01bb54076296f7 shadow=12:1b01bb54076296f7 indirect=12:1b01bb54076296f7 +geom 156: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.97348756 motion [] pieces all=12:32857058fb9827d3 camera=12:32857058fb9827d3 shadow=12:32857058fb9827d3 indirect=12:32857058fb9827d3 +geom 157: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.165612 motion [] pieces all=12:62f5ee9eeddede05 camera=12:62f5ee9eeddede05 shadow=12:62f5ee9eeddede05 indirect=12:62f5ee9eeddede05 +geom 158: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.8385694 motion [] pieces all=12:77dee010df9fc7cd camera=12:77dee010df9fc7cd shadow=12:77dee010df9fc7cd indirect=12:77dee010df9fc7cd +geom 159: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0450324 motion [] pieces all=12:2ee41b672786304d camera=12:2ee41b672786304d shadow=12:2ee41b672786304d indirect=12:2ee41b672786304d +geom 160: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.8176951 motion [] pieces all=12:0561772a4ff65c87 camera=12:0561772a4ff65c87 shadow=12:0561772a4ff65c87 indirect=12:0561772a4ff65c87 +geom 161: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0138291 motion [] pieces all=12:ef5821d89ce4565d camera=12:ef5821d89ce4565d shadow=12:ef5821d89ce4565d indirect=12:ef5821d89ce4565d +geom 162: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.9841667 motion [] pieces all=12:5a634ac0a8ae7de6 camera=12:5a634ac0a8ae7de6 shadow=12:5a634ac0a8ae7de6 indirect=12:5a634ac0a8ae7de6 +geom 163: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.1964471 motion [] pieces all=12:66ba0a744c1efc12 camera=12:66ba0a744c1efc12 shadow=12:66ba0a744c1efc12 indirect=12:66ba0a744c1efc12 +geom 164: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.1159168 motion [] pieces all=12:e4bd4203afe37c4a camera=12:e4bd4203afe37c4a shadow=12:e4bd4203afe37c4a indirect=12:e4bd4203afe37c4a +geom 165: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.93555236 motion [] pieces all=12:0a1358778e16df6b camera=12:0a1358778e16df6b shadow=12:0a1358778e16df6b indirect=12:0a1358778e16df6b +geom 166: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.87922573 motion [] pieces all=12:773b51f23711364c camera=12:773b51f23711364c shadow=12:773b51f23711364c indirect=12:773b51f23711364c +geom 167: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0527939 motion [] pieces all=12:8b6cff22991bf619 camera=12:8b6cff22991bf619 shadow=12:8b6cff22991bf619 indirect=12:8b6cff22991bf619 +geom 168: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.95460325 motion [] pieces all=12:32178c7813f8f425 camera=12:32178c7813f8f425 shadow=12:32178c7813f8f425 indirect=12:32178c7813f8f425 +geom 169: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.1514285 motion [] pieces all=12:e3af80ec95de8f01 camera=12:e3af80ec95de8f01 shadow=12:e3af80ec95de8f01 indirect=12:e3af80ec95de8f01 +geom 170: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.8263571 motion [] pieces all=12:dd3cc15eabe3c6be camera=12:dd3cc15eabe3c6be shadow=12:dd3cc15eabe3c6be indirect=12:dd3cc15eabe3c6be +geom 171: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0257798 motion [] pieces all=12:146ff2ab5a4f5eaf camera=12:146ff2ab5a4f5eaf shadow=12:146ff2ab5a4f5eaf indirect=12:146ff2ab5a4f5eaf +geom 172: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.9050795 motion [] pieces all=12:512a6aff489f2358 camera=12:512a6aff489f2358 shadow=12:512a6aff489f2358 indirect=12:512a6aff489f2358 +geom 173: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.1431277 motion [] pieces all=12:ebc37111e1ab423c camera=12:ebc37111e1ab423c shadow=12:ebc37111e1ab423c indirect=12:ebc37111e1ab423c +geom 174: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.85037327 motion [] pieces all=12:0826f55a2356c316 camera=12:0826f55a2356c316 shadow=12:0826f55a2356c316 indirect=12:0826f55a2356c316 +geom 175: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0886608 motion [] pieces all=12:9b60aa7e84611f49 camera=12:9b60aa7e84611f49 shadow=12:9b60aa7e84611f49 indirect=12:9b60aa7e84611f49 +geom 176: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.1813707 motion [] pieces all=12:f3ef9040c0fcdf3d camera=12:f3ef9040c0fcdf3d shadow=12:f3ef9040c0fcdf3d indirect=12:f3ef9040c0fcdf3d +geom 177: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.9999963 motion [] pieces all=12:09a200c9652982c8 camera=12:09a200c9652982c8 shadow=12:09a200c9652982c8 indirect=12:09a200c9652982c8 +geom 178: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0124525 motion [] pieces all=12:a136c56e0b71be4a camera=12:a136c56e0b71be4a shadow=12:a136c56e0b71be4a indirect=12:a136c56e0b71be4a +geom 179: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.8002113 motion [] pieces all=12:4690649814f00d31 camera=12:4690649814f00d31 shadow=12:4690649814f00d31 indirect=12:4690649814f00d31 +geom 180: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.1088318 motion [] pieces all=12:c04e8ca47eb1ec4f camera=12:c04e8ca47eb1ec4f shadow=12:c04e8ca47eb1ec4f indirect=12:c04e8ca47eb1ec4f +geom 181: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.9462071 motion [] pieces all=12:d96b2fd766ab6a10 camera=12:d96b2fd766ab6a10 shadow=12:d96b2fd766ab6a10 indirect=12:d96b2fd766ab6a10 +geom 182: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0659335 motion [] pieces all=12:aa8098ee0435eb55 camera=12:aa8098ee0435eb55 shadow=12:aa8098ee0435eb55 indirect=12:aa8098ee0435eb55 +geom 183: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.8956352 motion [] pieces all=12:cf957c7a1e34da27 camera=12:cf957c7a1e34da27 shadow=12:cf957c7a1e34da27 indirect=12:cf957c7a1e34da27 +geom 184: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.9687358 motion [] pieces all=12:be3d559b466049a9 camera=12:be3d559b466049a9 shadow=12:be3d559b466049a9 indirect=12:be3d559b466049a9 +geom 185: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.1695193 motion [] pieces all=12:80bb8fee09ae42ac camera=12:80bb8fee09ae42ac shadow=12:80bb8fee09ae42ac indirect=12:80bb8fee09ae42ac +geom 186: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.8472522 motion [] pieces all=12:d40d42fa1fdb91da camera=12:d40d42fa1fdb91da shadow=12:d40d42fa1fdb91da indirect=12:d40d42fa1fdb91da +geom 187: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0403028 motion [] pieces all=12:da43b2a624d630d9 camera=12:da43b2a624d630d9 shadow=12:da43b2a624d630d9 indirect=12:da43b2a624d630d9 +geom 188: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.8716476 motion [] pieces all=12:7b1657c897e92643 camera=12:7b1657c897e92643 shadow=12:7b1657c897e92643 indirect=12:7b1657c897e92643 +geom 189: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0834341 motion [] pieces all=12:75fc41de1dd1f06b camera=12:75fc41de1dd1f06b shadow=12:75fc41de1dd1f06b indirect=12:75fc41de1dd1f06b +geom 190: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.1361494 motion [] pieces all=12:46b37caa81ee6fae camera=12:46b37caa81ee6fae shadow=12:46b37caa81ee6fae indirect=12:46b37caa81ee6fae +geom 191: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.9187317 motion [] pieces all=12:23778b55875d60e9 camera=12:23778b55875d60e9 shadow=12:23778b55875d60e9 indirect=12:23778b55875d60e9 +geom 192: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.9700638 motion [] pieces all=12:1c61c851a1784a7d camera=12:1c61c851a1784a7d shadow=12:1c61c851a1784a7d indirect=12:1c61c851a1784a7d +geom 193: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.1669755 motion [] pieces all=12:74a3c7fb112d835a camera=12:74a3c7fb112d835a shadow=12:74a3c7fb112d835a indirect=12:74a3c7fb112d835a +geom 194: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.840909 motion [] pieces all=12:8817791ca08859c3 camera=12:8817791ca08859c3 shadow=12:8817791ca08859c3 indirect=12:8817791ca08859c3 +geom 195: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0478053 motion [] pieces all=12:14925a47374bfb28 camera=12:14925a47374bfb28 shadow=12:14925a47374bfb28 indirect=12:14925a47374bfb28 +geom 196: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.8679575 motion [] pieces all=12:74a6d16ae159b9f1 camera=12:74a6d16ae159b9f1 shadow=12:74a6d16ae159b9f1 indirect=12:74a6d16ae159b9f1 +geom 197: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0806409 motion [] pieces all=12:3d7f59062f33263c camera=12:3d7f59062f33263c shadow=12:3d7f59062f33263c indirect=12:3d7f59062f33263c +geom 198: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.1279316 motion [] pieces all=12:57e16f8043e40405 camera=12:57e16f8043e40405 shadow=12:57e16f8043e40405 indirect=12:57e16f8043e40405 +geom 199: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.9248103 motion [] pieces all=12:74fce40b1f8c1868 camera=12:74fce40b1f8c1868 shadow=12:74fce40b1f8c1868 indirect=12:74fce40b1f8c1868 +geom 200: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0050641 motion [] pieces all=12:6628497d8751e005 camera=12:6628497d8751e005 shadow=12:6628497d8751e005 indirect=12:6628497d8751e005 +geom 201: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.80812913 motion [] pieces all=12:c00b6f37ed002e7e camera=12:c00b6f37ed002e7e shadow=12:c00b6f37ed002e7e indirect=12:c00b6f37ed002e7e +geom 202: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.99041194 motion [] pieces all=12:f6eb9c32d67acbf5 camera=12:f6eb9c32d67acbf5 shadow=12:f6eb9c32d67acbf5 indirect=12:f6eb9c32d67acbf5 +geom 203: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.1808091 motion [] pieces all=12:b5312a5cf19c08b1 camera=12:b5312a5cf19c08b1 shadow=12:b5312a5cf19c08b1 indirect=12:b5312a5cf19c08b1 +geom 204: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0731032 motion [] pieces all=12:1e958bfa6c666c5f camera=12:1e958bfa6c666c5f shadow=12:1e958bfa6c666c5f indirect=12:1e958bfa6c666c5f +geom 205: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.8903327 motion [] pieces all=12:495ccdc5bf5628ad camera=12:495ccdc5bf5628ad shadow=12:495ccdc5bf5628ad indirect=12:495ccdc5bf5628ad +geom 206: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.9400662 motion [] pieces all=12:53afcc82d9ab1338 camera=12:53afcc82d9ab1338 shadow=12:53afcc82d9ab1338 indirect=12:53afcc82d9ab1338 +geom 207: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.1023835 motion [] pieces all=12:50065c508a717272 camera=12:50065c508a717272 shadow=12:50065c508a717272 indirect=12:50065c508a717272 +geom 208: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.85646105 motion [] pieces all=12:9da520d2bd8ed3ec camera=12:9da520d2bd8ed3ec shadow=12:9da520d2bd8ed3ec indirect=12:9da520d2bd8ed3ec +geom 209: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0950128 motion [] pieces all=12:e81f368da828810b camera=12:e81f368da828810b shadow=12:e81f368da828810b indirect=12:e81f368da828810b +geom 210: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.1498275 motion [] pieces all=12:0980250d91952b42 camera=12:0980250d91952b42 shadow=12:0980250d91952b42 indirect=12:0980250d91952b42 +geom 211: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.9121352 motion [] pieces all=12:a8bf6cb97372cf62 camera=12:a8bf6cb97372cf62 shadow=12:a8bf6cb97372cf62 indirect=12:a8bf6cb97372cf62 +geom 212: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.03622 motion [] pieces all=12:af776500cab76d5b camera=12:af776500cab76d5b shadow=12:af776500cab76d5b indirect=12:af776500cab76d5b +geom 213: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.835448 motion [] pieces all=12:f1638667ca8e8ec4 camera=12:f1638667ca8e8ec4 shadow=12:f1638667ca8e8ec4 indirect=12:f1638667ca8e8ec4 +geom 214: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.9593388 motion [] pieces all=12:7676d07144c43de7 camera=12:7676d07144c43de7 shadow=12:7676d07144c43de7 indirect=12:7676d07144c43de7 +geom 215: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.1577525 motion [] pieces all=12:8b8e52c721dfce29 camera=12:8b8e52c721dfce29 shadow=12:8b8e52c721dfce29 indirect=12:8b8e52c721dfce29 +geom 216: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.9304924 motion [] pieces all=12:ee70521e7d2c349a camera=12:ee70521e7d2c349a shadow=12:ee70521e7d2c349a indirect=12:ee70521e7d2c349a +geom 217: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.1205963 motion [] pieces all=12:51b94b591533ff92 camera=12:51b94b591533ff92 shadow=12:51b94b591533ff92 indirect=12:51b94b591533ff92 +geom 218: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.8828603 motion [] pieces all=12:b628384cf4be0e6e camera=12:b628384cf4be0e6e shadow=12:b628384cf4be0e6e indirect=12:b628384cf4be0e6e +geom 219: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0570121 motion [] pieces all=12:70824faf512e9e8e camera=12:70824faf512e9e8e shadow=12:70824faf512e9e8e indirect=12:70824faf512e9e8e +geom 220: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0248929 motion [] pieces all=12:0583b46b924696d1 camera=12:0583b46b924696d1 shadow=12:0583b46b924696d1 indirect=12:0583b46b924696d1 +geom 221: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.82364476 motion [] pieces all=12:b9b76c3ebc95a3a2 camera=12:b9b76c3ebc95a3a2 shadow=12:b9b76c3ebc95a3a2 indirect=12:b9b76c3ebc95a3a2 +geom 222: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.97815925 motion [] pieces all=12:5a27bbd65a15a9a2 camera=12:5a27bbd65a15a9a2 shadow=12:5a27bbd65a15a9a2 indirect=12:5a27bbd65a15a9a2 +geom 223: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.1915545 motion [] pieces all=12:d0f739f7232ac014 camera=12:d0f739f7232ac014 shadow=12:d0f739f7232ac014 indirect=12:d0f739f7232ac014 +geom 224: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0647312 motion [] pieces all=12:b4a69b8b779b3e3b camera=12:b4a69b8b779b3e3b shadow=12:b4a69b8b779b3e3b indirect=12:b4a69b8b779b3e3b +geom 225: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.8980392 motion [] pieces all=12:d16b8205265ae78c camera=12:d16b8205265ae78c shadow=12:d16b8205265ae78c indirect=12:d16b8205265ae78c +geom 226: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.9472939 motion [] pieces all=12:14f705f5e7de03d9 camera=12:14f705f5e7de03d9 shadow=12:14f705f5e7de03d9 indirect=12:14f705f5e7de03d9 +geom 227: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.1099051 motion [] pieces all=12:1799f290d03300bd camera=12:1799f290d03300bd shadow=12:1799f290d03300bd indirect=12:1799f290d03300bd +geom 228: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0079887 motion [] pieces all=12:25b3b5ea71308ca9 camera=12:25b3b5ea71308ca9 shadow=12:25b3b5ea71308ca9 indirect=12:25b3b5ea71308ca9 +geom 229: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.80509245 motion [] pieces all=12:34af0fe66b45a4dd camera=12:34af0fe66b45a4dd shadow=12:34af0fe66b45a4dd indirect=12:34af0fe66b45a4dd +geom 230: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.99543554 motion [] pieces all=12:65081b63c09ed1e2 camera=12:65081b63c09ed1e2 shadow=12:65081b63c09ed1e2 indirect=12:65081b63c09ed1e2 +geom 231: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.1849796 motion [] pieces all=12:4c95128dd298f347 camera=12:4c95128dd298f347 shadow=12:4c95128dd298f347 indirect=12:4c95128dd298f347 +geom 232: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0425175 motion [] pieces all=12:d8689c42feaa55c0 camera=12:d8689c42feaa55c0 shadow=12:d8689c42feaa55c0 indirect=12:d8689c42feaa55c0 +geom 233: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.8462697 motion [] pieces all=12:5819bb99cb71939b camera=12:5819bb99cb71939b shadow=12:5819bb99cb71939b indirect=12:5819bb99cb71939b +geom 234: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.9625314 motion [] pieces all=12:22e52b3a51254194 camera=12:22e52b3a51254194 shadow=12:22e52b3a51254194 indirect=12:22e52b3a51254194 +geom 235: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.1735876 motion [] pieces all=12:946568eb332a1dc0 camera=12:946568eb332a1dc0 shadow=12:946568eb332a1dc0 indirect=12:946568eb332a1dc0 +geom 236: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.87271863 motion [] pieces all=12:01ebcbb670f1693c camera=12:01ebcbb670f1693c shadow=12:01ebcbb670f1693c indirect=12:01ebcbb670f1693c +geom 237: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0844595 motion [] pieces all=12:1bd65d19d2101668 camera=12:1bd65d19d2101668 shadow=12:1bd65d19d2101668 indirect=12:1bd65d19d2101668 +geom 238: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.132906 motion [] pieces all=12:7a1eeda135c15f81 camera=12:7a1eeda135c15f81 shadow=12:7a1eeda135c15f81 indirect=12:7a1eeda135c15f81 +geom 239: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.91505915 motion [] pieces all=12:22938515c35b5865 camera=12:22938515c35b5865 shadow=12:22938515c35b5865 indirect=12:22938515c35b5865 +geom 240: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.9004315 motion [] pieces all=12:ba2876def87d22bc camera=12:ba2876def87d22bc shadow=12:ba2876def87d22bc indirect=12:ba2876def87d22bc +geom 241: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.1393667 motion [] pieces all=12:3283b427be1693e3 camera=12:3283b427be1693e3 shadow=12:3283b427be1693e3 indirect=12:3283b427be1693e3 +geom 242: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.8539201 motion [] pieces all=12:5acf1dd4de1686eb camera=12:5acf1dd4de1686eb shadow=12:5acf1dd4de1686eb indirect=12:5acf1dd4de1686eb +geom 243: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0937418 motion [] pieces all=12:b235a5a47599d508 camera=12:b235a5a47599d508 shadow=12:b235a5a47599d508 indirect=12:b235a5a47599d508 +geom 244: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.029022 motion [] pieces all=12:bcadcd74a8ed38bd camera=12:bcadcd74a8ed38bd shadow=12:bcadcd74a8ed38bd indirect=12:bcadcd74a8ed38bd +geom 245: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.8305959 motion [] pieces all=12:bde378c89915d975 camera=12:bde378c89915d975 shadow=12:bde378c89915d975 indirect=12:bde378c89915d975 +geom 246: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.95166606 motion [] pieces all=12:abb23bbe6e2e9798 camera=12:abb23bbe6e2e9798 shadow=12:abb23bbe6e2e9798 indirect=12:abb23bbe6e2e9798 +geom 247: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.1561596 motion [] pieces all=12:bbac5e2ab38a0a4c camera=12:bbac5e2ab38a0a4c shadow=12:bbac5e2ab38a0a4c indirect=12:bbac5e2ab38a0a4c +geom 248: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0550859 motion [] pieces all=12:2d13e253c8aea5b0 camera=12:2d13e253c8aea5b0 shadow=12:2d13e253c8aea5b0 indirect=12:2d13e253c8aea5b0 +geom 249: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.87541723 motion [] pieces all=12:9ca37e11899435ba camera=12:9ca37e11899435ba shadow=12:9ca37e11899435ba indirect=12:9ca37e11899435ba +geom 250: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.93261766 motion [] pieces all=12:f43c358c78c458a3 camera=12:f43c358c78c458a3 shadow=12:f43c358c78c458a3 indirect=12:f43c358c78c458a3 +geom 251: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.1147367 motion [] pieces all=12:8b534baed1c55c1c camera=12:8b534baed1c55c1c shadow=12:8b534baed1c55c1c indirect=12:8b534baed1c55c1c +geom 252: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.8144639 motion [] pieces all=12:94166627f8bf425b camera=12:94166627f8bf425b shadow=12:94166627f8bf425b indirect=12:94166627f8bf425b +geom 253: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.017535 motion [] pieces all=12:5d4ba2fffcb76aeb camera=12:5d4ba2fffcb76aeb shadow=12:5d4ba2fffcb76aeb indirect=12:5d4ba2fffcb76aeb +geom 254: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.1993625 motion [] pieces all=12:0e6938f487ad2ab1 camera=12:0e6938f487ad2ab1 shadow=12:0e6938f487ad2ab1 indirect=12:0e6938f487ad2ab1 +geom 255: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.9869976 motion [] pieces all=12:b07fe9a4abb45d39 camera=12:b07fe9a4abb45d39 shadow=12:b07fe9a4abb45d39 indirect=12:b07fe9a4abb45d39 +geom 256: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.8976138 motion [] pieces all=12:8d7e162511de2890 camera=12:8d7e162511de2890 shadow=12:8d7e162511de2890 indirect=12:8d7e162511de2890 +geom 257: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0649716 motion [] pieces all=12:aff6dcf4cedfae74 camera=12:aff6dcf4cedfae74 shadow=12:aff6dcf4cedfae74 indirect=12:aff6dcf4cedfae74 +geom 258: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.1104784 motion [] pieces all=12:29b8bf5962bc8cc1 camera=12:29b8bf5962bc8cc1 shadow=12:29b8bf5962bc8cc1 indirect=12:29b8bf5962bc8cc1 +geom 259: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.9479979 motion [] pieces all=12:8b0d548408d83be3 camera=12:8b0d548408d83be3 shadow=12:8b0d548408d83be3 indirect=12:8b0d548408d83be3 +geom 260: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.1856079 motion [] pieces all=12:e00a2daeb0dc5773 camera=12:e00a2daeb0dc5773 shadow=12:e00a2daeb0dc5773 indirect=12:e00a2daeb0dc5773 +geom 261: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.9966615 motion [] pieces all=12:eacbebde0ac4be34 camera=12:eacbebde0ac4be34 shadow=12:eacbebde0ac4be34 indirect=12:eacbebde0ac4be34 +geom 262: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.008784 motion [] pieces all=12:061506dcebb713da camera=12:061506dcebb713da shadow=12:061506dcebb713da indirect=12:061506dcebb713da +geom 263: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.80612284 motion [] pieces all=12:b281d198ccf4899a camera=12:b281d198ccf4899a shadow=12:b281d198ccf4899a indirect=12:b281d198ccf4899a +geom 264: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.8459979 motion [] pieces all=12:61b97b1525ca63ab camera=12:61b97b1525ca63ab shadow=12:61b97b1525ca63ab indirect=12:61b97b1525ca63ab +geom 265: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.043507 motion [] pieces all=12:f4f3d9db5351f0da camera=12:f4f3d9db5351f0da shadow=12:f4f3d9db5351f0da indirect=12:f4f3d9db5351f0da +geom 266: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.96340424 motion [] pieces all=12:42354c2692a3f25a camera=12:42354c2692a3f25a shadow=12:42354c2692a3f25a indirect=12:42354c2692a3f25a +geom 267: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.1748652 motion [] pieces all=12:47beb55b66249ab7 camera=12:47beb55b66249ab7 shadow=12:47beb55b66249ab7 indirect=12:47beb55b66249ab7 +geom 268: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.1341846 motion [] pieces all=12:2acf3ad9500780d2 camera=12:2acf3ad9500780d2 shadow=12:2acf3ad9500780d2 indirect=12:2acf3ad9500780d2 +geom 269: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.91431093 motion [] pieces all=12:47f723f295039741 camera=12:47f723f295039741 shadow=12:47f723f295039741 indirect=12:47f723f295039741 +geom 270: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.87261844 motion [] pieces all=12:92404b2831c2fc0a camera=12:92404b2831c2fc0a shadow=12:92404b2831c2fc0a indirect=12:92404b2831c2fc0a +geom 271: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0856017 motion [] pieces all=12:1daa9c0a0e7613ef camera=12:1daa9c0a0e7613ef shadow=12:1daa9c0a0e7613ef indirect=12:1daa9c0a0e7613ef +geom 272: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0181116 motion [] pieces all=12:8d91bb4653d15e00 camera=12:8d91bb4653d15e00 shadow=12:8d91bb4653d15e00 indirect=12:8d91bb4653d15e00 +geom 273: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.8153746 motion [] pieces all=12:2d8e3081a9282759 camera=12:2d8e3081a9282759 shadow=12:2d8e3081a9282759 indirect=12:2d8e3081a9282759 +geom 274: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.1990607 motion [] pieces all=12:586da59f6e332d13 camera=12:586da59f6e332d13 shadow=12:586da59f6e332d13 indirect=12:586da59f6e332d13 +geom 275: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.98597044 motion [] pieces all=12:e50a26a68d500849 camera=12:e50a26a68d500849 shadow=12:e50a26a68d500849 indirect=12:e50a26a68d500849 +geom 276: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.1152201 motion [] pieces all=12:70cd607fb281155b camera=12:70cd607fb281155b shadow=12:70cd607fb281155b indirect=12:70cd607fb281155b +geom 277: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.931668 motion [] pieces all=12:da8e8e74af73e4ea camera=12:da8e8e74af73e4ea shadow=12:da8e8e74af73e4ea indirect=12:da8e8e74af73e4ea +geom 278: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.8761894 motion [] pieces all=12:fd72275ea873dee4 camera=12:fd72275ea873dee4 shadow=12:fd72275ea873dee4 indirect=12:fd72275ea873dee4 +geom 279: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0557864 motion [] pieces all=12:470f490986e17a77 camera=12:470f490986e17a77 shadow=12:470f490986e17a77 indirect=12:470f490986e17a77 +geom 280: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.1405109 motion [] pieces all=12:59370e12d5755731 camera=12:59370e12d5755731 shadow=12:59370e12d5755731 indirect=12:59370e12d5755731 +geom 281: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.9010066 motion [] pieces all=12:380fa8551ffb6866 camera=12:380fa8551ffb6866 shadow=12:380fa8551ffb6866 indirect=12:380fa8551ffb6866 +geom 282: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.853276 motion [] pieces all=12:8d7e3a01aab80447 camera=12:8d7e3a01aab80447 shadow=12:8d7e3a01aab80447 indirect=12:8d7e3a01aab80447 +geom 283: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.092354 motion [] pieces all=12:da8a90c914f57101 camera=12:da8a90c914f57101 shadow=12:da8a90c914f57101 indirect=12:da8a90c914f57101 +geom 284: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0288466 motion [] pieces all=12:15047e4ee0e66ea5 camera=12:15047e4ee0e66ea5 shadow=12:15047e4ee0e66ea5 indirect=12:15047e4ee0e66ea5 +geom 285: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.8301908 motion [] pieces all=12:075e03cedf539099 camera=12:075e03cedf539099 shadow=12:075e03cedf539099 indirect=12:075e03cedf539099 +geom 286: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.1549389 motion [] pieces all=12:875b52edc089022c camera=12:875b52edc089022c shadow=12:875b52edc089022c indirect=12:875b52edc089022c +geom 287: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.9525899 motion [] pieces all=12:a3648fda194f3d6a camera=12:a3648fda194f3d6a shadow=12:a3648fda194f3d6a indirect=12:a3648fda194f3d6a +geom 288: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.1800979 motion [] pieces all=12:7bd395b95c017f90 camera=12:7bd395b95c017f90 shadow=12:7bd395b95c017f90 indirect=12:7bd395b95c017f90 +geom 289: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.98930484 motion [] pieces all=12:5c234fdba64c55fb camera=12:5c234fdba64c55fb shadow=12:5c234fdba64c55fb indirect=12:5c234fdba64c55fb +geom 290: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0058508 motion [] pieces all=12:99b5f525f17a5d2b camera=12:99b5f525f17a5d2b shadow=12:99b5f525f17a5d2b indirect=12:99b5f525f17a5d2b +geom 291: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.80934966 motion [] pieces all=12:b18528583f50f544 camera=12:b18528583f50f544 shadow=12:b18528583f50f544 indirect=12:b18528583f50f544 +geom 292: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0723542 motion [] pieces all=12:e545cda533fc6168 camera=12:e545cda533fc6168 shadow=12:e545cda533fc6168 indirect=12:e545cda533fc6168 +geom 293: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.88943315 motion [] pieces all=12:d4436675f00e255d camera=12:d4436675f00e255d shadow=12:d4436675f00e255d indirect=12:d4436675f00e255d +geom 294: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.9393691 motion [] pieces all=12:7a70e5e9788bac59 camera=12:7a70e5e9788bac59 shadow=12:7a70e5e9788bac59 indirect=12:7a70e5e9788bac59 +geom 295: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.1018847 motion [] pieces all=12:72aecd176dd294b2 camera=12:72aecd176dd294b2 shadow=12:72aecd176dd294b2 indirect=12:72aecd176dd294b2 +geom 296: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.1271077 motion [] pieces all=12:a5bae6b41234ceee camera=12:a5bae6b41234ceee shadow=12:a5bae6b41234ceee indirect=12:a5bae6b41234ceee +geom 297: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.92361706 motion [] pieces all=12:eaa6fa1c6d9a45df camera=12:eaa6fa1c6d9a45df shadow=12:eaa6fa1c6d9a45df indirect=12:eaa6fa1c6d9a45df +geom 298: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.86828524 motion [] pieces all=12:fb6d3e396f9edccc camera=12:fb6d3e396f9edccc shadow=12:fb6d3e396f9edccc indirect=12:fb6d3e396f9edccc +geom 299: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.080165 motion [] pieces all=12:3981167a9afaed31 camera=12:3981167a9afaed31 shadow=12:3981167a9afaed31 indirect=12:3981167a9afaed31 +geom 300: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.8420056 motion [] pieces all=12:f01879aa38dfaa62 camera=12:f01879aa38dfaa62 shadow=12:f01879aa38dfaa62 indirect=12:f01879aa38dfaa62 +geom 301: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0469481 motion [] pieces all=12:f0ef2865a21ba558 camera=12:f0ef2865a21ba558 shadow=12:f0ef2865a21ba558 indirect=12:f0ef2865a21ba558 +geom 302: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.96943074 motion [] pieces all=12:cdcb8ace33a6aec9 camera=12:cdcb8ace33a6aec9 shadow=12:cdcb8ace33a6aec9 indirect=12:cdcb8ace33a6aec9 +geom 303: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.1660948 motion [] pieces all=12:48599737ac3bc04f camera=12:48599737ac3bc04f shadow=12:48599737ac3bc04f indirect=12:48599737ac3bc04f +geom 304: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.09405 motion [] pieces all=12:26310d6b07b25e91 camera=12:26310d6b07b25e91 shadow=12:26310d6b07b25e91 indirect=12:26310d6b07b25e91 +geom 305: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.8571627 motion [] pieces all=12:e42e7e45328ee2de camera=12:e42e7e45328ee2de shadow=12:e42e7e45328ee2de indirect=12:e42e7e45328ee2de +geom 306: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.1489058 motion [] pieces all=12:fce556df8ae069f5 camera=12:fce556df8ae069f5 shadow=12:fce556df8ae069f5 indirect=12:fce556df8ae069f5 +geom 307: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.9115789 motion [] pieces all=12:d99ab6395d650bb8 camera=12:d99ab6395d650bb8 shadow=12:d99ab6395d650bb8 indirect=12:d99ab6395d650bb8 +geom 308: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.8348978 motion [] pieces all=12:52b13c1bab4c2059 camera=12:52b13c1bab4c2059 shadow=12:52b13c1bab4c2059 indirect=12:52b13c1bab4c2059 +geom 309: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.037063 motion [] pieces all=12:5a5e9e6f46c77b6b camera=12:5a5e9e6f46c77b6b shadow=12:5a5e9e6f46c77b6b indirect=12:5a5e9e6f46c77b6b +geom 310: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.9582307 motion [] pieces all=12:d04f788325f07478 camera=12:d04f788325f07478 shadow=12:d04f788325f07478 indirect=12:d04f788325f07478 +geom 311: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.15666 motion [] pieces all=12:0e7c5cda0c214d4b camera=12:0e7c5cda0c214d4b shadow=12:0e7c5cda0c214d4b indirect=12:0e7c5cda0c214d4b +geom 312: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.8840452 motion [] pieces all=12:c7520d614b00725e camera=12:c7520d614b00725e shadow=12:c7520d614b00725e indirect=12:c7520d614b00725e +geom 313: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0573065 motion [] pieces all=12:140be7eb767d1260 camera=12:140be7eb767d1260 shadow=12:140be7eb767d1260 indirect=12:140be7eb767d1260 +geom 314: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.92969555 motion [] pieces all=12:2c1de0d51c514069 camera=12:2c1de0d51c514069 shadow=12:2c1de0d51c514069 indirect=12:2c1de0d51c514069 +geom 315: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.121772 motion [] pieces all=12:a3fdb3fcfeaa7d87 camera=12:a3fdb3fcfeaa7d87 shadow=12:a3fdb3fcfeaa7d87 indirect=12:a3fdb3fcfeaa7d87 +geom 316: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.190945 motion [] pieces all=12:a914d1c7729db355 camera=12:a914d1c7729db355 shadow=12:a914d1c7729db355 indirect=12:a914d1c7729db355 +geom 317: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.97935754 motion [] pieces all=12:16e3b207fb1b22a0 camera=12:16e3b207fb1b22a0 shadow=12:16e3b207fb1b22a0 indirect=12:16e3b207fb1b22a0 +geom 318: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.8246523 motion [] pieces all=12:01e6c02b8f972135 camera=12:01e6c02b8f972135 shadow=12:01e6c02b8f972135 indirect=12:01e6c02b8f972135 +geom 319: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0239916 motion [] pieces all=12:d43b6491478a1f7d camera=12:d43b6491478a1f7d shadow=12:d43b6491478a1f7d indirect=12:d43b6491478a1f7d +geom 320: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.1884352 motion [] pieces all=12:347af11d36714627 camera=12:347af11d36714627 shadow=12:347af11d36714627 indirect=12:347af11d36714627 +geom 321: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.97503936 motion [] pieces all=12:2b7fc13e663f28bf camera=12:2b7fc13e663f28bf shadow=12:2b7fc13e663f28bf indirect=12:2b7fc13e663f28bf +geom 322: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.819561 motion [] pieces all=12:5dad7bdd1aef5d3d camera=12:5dad7bdd1aef5d3d shadow=12:5dad7bdd1aef5d3d indirect=12:5dad7bdd1aef5d3d +geom 323: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0195632 motion [] pieces all=12:862f4285de9e660e camera=12:862f4285de9e660e shadow=12:862f4285de9e660e indirect=12:862f4285de9e660e +geom 324: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.88676405 motion [] pieces all=12:201d12df974ecda3 camera=12:201d12df974ecda3 shadow=12:201d12df974ecda3 indirect=12:201d12df974ecda3 +geom 325: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0623915 motion [] pieces all=12:9bd996455e58d035 camera=12:9bd996455e58d035 shadow=12:9bd996455e58d035 indirect=12:9bd996455e58d035 +geom 326: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.9264089 motion [] pieces all=12:05d5a32d6d81735d camera=12:05d5a32d6d81735d shadow=12:05d5a32d6d81735d indirect=12:05d5a32d6d81735d +geom 327: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.1226625 motion [] pieces all=12:5fce68e7a928f907 camera=12:5fce68e7a928f907 shadow=12:5fce68e7a928f907 indirect=12:5fce68e7a928f907 +geom 328: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0983305 motion [] pieces all=12:137d158da7ca1689 camera=12:137d158da7ca1689 shadow=12:137d158da7ca1689 indirect=12:137d158da7ca1689 +geom 329: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.8614528 motion [] pieces all=12:57188e87e047eeda camera=12:57188e87e047eeda shadow=12:57188e87e047eeda indirect=12:57188e87e047eeda +geom 330: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.1451486 motion [] pieces all=12:cea12d47b7505bd8 camera=12:cea12d47b7505bd8 shadow=12:cea12d47b7505bd8 indirect=12:cea12d47b7505bd8 +geom 331: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.90823436 motion [] pieces all=12:b021cc8434c6c39a camera=12:b021cc8434c6c39a shadow=12:b021cc8434c6c39a indirect=12:b021cc8434c6c39a +geom 332: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.96017826 motion [] pieces all=12:8318f31089c9a3b7 camera=12:8318f31089c9a3b7 shadow=12:8318f31089c9a3b7 indirect=12:8318f31089c9a3b7 +geom 333: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.1594942 motion [] pieces all=12:3ac194d9dfcc097d camera=12:3ac194d9dfcc097d shadow=12:3ac194d9dfcc097d indirect=12:3ac194d9dfcc097d +geom 334: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0338683 motion [] pieces all=12:cdf714527f413393 camera=12:cdf714527f413393 shadow=12:cdf714527f413393 indirect=12:cdf714527f413393 +geom 335: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.83283126 motion [] pieces all=12:d50dd33cec4a4c97 camera=12:d50dd33cec4a4c97 shadow=12:d50dd33cec4a4c97 indirect=12:d50dd33cec4a4c97 +geom 336: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.1062118 motion [] pieces all=12:7496923f4df8b213 camera=12:7496923f4df8b213 shadow=12:7496923f4df8b213 indirect=12:7496923f4df8b213 +geom 337: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.9429861 motion [] pieces all=12:0cba57c504d1d0be camera=12:0cba57c504d1d0be shadow=12:0cba57c504d1d0be indirect=12:0cba57c504d1d0be +geom 338: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.8931688 motion [] pieces all=12:54aca261c8533f7c camera=12:54aca261c8533f7c shadow=12:54aca261c8533f7c indirect=12:54aca261c8533f7c +geom 339: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.069382 motion [] pieces all=12:295582b101b1f8fd camera=12:295582b101b1f8fd shadow=12:295582b101b1f8fd indirect=12:295582b101b1f8fd +geom 340: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0006948 motion [] pieces all=12:b1668b48ade6af2d camera=12:b1668b48ade6af2d shadow=12:b1668b48ade6af2d indirect=12:b1668b48ade6af2d +geom 341: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.8111682 motion [] pieces all=12:90793edc6cc1babe camera=12:90793edc6cc1babe shadow=12:90793edc6cc1babe indirect=12:90793edc6cc1babe +geom 342: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.1774259 motion [] pieces all=12:550a3cd2c5f05144 camera=12:550a3cd2c5f05144 shadow=12:550a3cd2c5f05144 indirect=12:550a3cd2c5f05144 +geom 343: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.9936028 motion [] pieces all=12:b623e674b77e1c62 camera=12:b623e674b77e1c62 shadow=12:b623e674b77e1c62 indirect=12:b623e674b77e1c62 +geom 344: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.164632 motion [] pieces all=12:808ea8825c4e58a1 camera=12:808ea8825c4e58a1 shadow=12:808ea8825c4e58a1 indirect=12:808ea8825c4e58a1 +geom 345: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.97489834 motion [] pieces all=12:13ccb4f47d938444 camera=12:13ccb4f47d938444 shadow=12:13ccb4f47d938444 indirect=12:13ccb4f47d938444 +geom 346: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0438316 motion [] pieces all=12:e6a7c3ab22facd19 camera=12:e6a7c3ab22facd19 shadow=12:e6a7c3ab22facd19 indirect=12:e6a7c3ab22facd19 +geom 347: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.8375302 motion [] pieces all=12:c641a83671de4a6a camera=12:c641a83671de4a6a shadow=12:c641a83671de4a6a indirect=12:c641a83671de4a6a +geom 348: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.8639861 motion [] pieces all=12:71924d8657ecbff9 camera=12:71924d8657ecbff9 shadow=12:71924d8657ecbff9 indirect=12:71924d8657ecbff9 +geom 349: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0754395 motion [] pieces all=12:811b5f284bb9805b camera=12:811b5f284bb9805b shadow=12:811b5f284bb9805b indirect=12:811b5f284bb9805b +geom 350: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.1303952 motion [] pieces all=12:8d68ad1c2a04dee9 camera=12:8d68ad1c2a04dee9 shadow=12:8d68ad1c2a04dee9 indirect=12:8d68ad1c2a04dee9 +geom 351: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.91988903 motion [] pieces all=12:7d79472a51912b30 camera=12:7d79472a51912b30 shadow=12:7d79472a51912b30 indirect=12:7d79472a51912b30 +geom 352: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.1373861 motion [] pieces all=12:2f1f08a2602e8e70 camera=12:2f1f08a2602e8e70 shadow=12:2f1f08a2602e8e70 indirect=12:2f1f08a2602e8e70 +geom 353: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.9172575 motion [] pieces all=12:19b107d9e315e9af camera=12:19b107d9e315e9af shadow=12:19b107d9e315e9af indirect=12:19b107d9e315e9af +geom 354: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0840722 motion [] pieces all=12:52fab800a17a3f69 camera=12:52fab800a17a3f69 shadow=12:52fab800a17a3f69 indirect=12:52fab800a17a3f69 +geom 355: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.8707261 motion [] pieces all=12:afd5f03eba34b8e1 camera=12:afd5f03eba34b8e1 shadow=12:afd5f03eba34b8e1 indirect=12:afd5f03eba34b8e1 +geom 356: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0395759 motion [] pieces all=12:8b2587b4f5645a96 camera=12:8b2587b4f5645a96 shadow=12:8b2587b4f5645a96 indirect=12:8b2587b4f5645a96 +geom 357: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.84834194 motion [] pieces all=12:dad119f3e242e316 camera=12:dad119f3e242e316 shadow=12:dad119f3e242e316 indirect=12:dad119f3e242e316 +geom 358: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.96762294 motion [] pieces all=12:2c9a4c5360d1a0dc camera=12:2c9a4c5360d1a0dc shadow=12:2c9a4c5360d1a0dc indirect=12:2c9a4c5360d1a0dc +geom 359: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.16959 motion [] pieces all=12:5e334efc7b63fffa camera=12:5e334efc7b63fffa shadow=12:5e334efc7b63fffa indirect=12:5e334efc7b63fffa +geom 360: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.99900335 motion [] pieces all=12:169eb6deddcb5968 camera=12:169eb6deddcb5968 shadow=12:169eb6deddcb5968 indirect=12:169eb6deddcb5968 +geom 361: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.1827945 motion [] pieces all=12:b6a647632a83ca6f camera=12:b6a647632a83ca6f shadow=12:b6a647632a83ca6f indirect=12:b6a647632a83ca6f +geom 362: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0113558 motion [] pieces all=12:2a5a95e95cff591f camera=12:2a5a95e95cff591f shadow=12:2a5a95e95cff591f indirect=12:2a5a95e95cff591f +geom 363: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.8008391 motion [] pieces all=12:65b9decb74955a61 camera=12:65b9decb74955a61 shadow=12:65b9decb74955a61 indirect=12:65b9decb74955a61 +geom 364: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.89662963 motion [] pieces all=12:ecbfa6b9aa2b7e61 camera=12:ecbfa6b9aa2b7e61 shadow=12:ecbfa6b9aa2b7e61 indirect=12:ecbfa6b9aa2b7e61 +geom 365: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0664147 motion [] pieces all=12:e58a5866cc2bbe65 camera=12:e58a5866cc2bbe65 shadow=12:e58a5866cc2bbe65 indirect=12:e58a5866cc2bbe65 +geom 366: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.94571507 motion [] pieces all=12:49b1371584aec5ae camera=12:49b1371584aec5ae shadow=12:49b1371584aec5ae indirect=12:49b1371584aec5ae +geom 367: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.1083539 motion [] pieces all=12:558cde4bc58b2ab2 camera=12:558cde4bc58b2ab2 shadow=12:558cde4bc58b2ab2 indirect=12:558cde4bc58b2ab2 +geom 368: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0881029 motion [] pieces all=12:e6eeb955ef5b706f camera=12:e6eeb955ef5b706f shadow=12:e6eeb955ef5b706f indirect=12:e6eeb955ef5b706f +geom 369: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.8508443 motion [] pieces all=12:cda293becdc36cb3 camera=12:cda293becdc36cb3 shadow=12:cda293becdc36cb3 indirect=12:cda293becdc36cb3 +geom 370: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.90589935 motion [] pieces all=12:b6ccc539de6a40ae camera=12:b6ccc539de6a40ae shadow=12:b6ccc539de6a40ae indirect=12:b6ccc539de6a40ae +geom 371: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.1424141 motion [] pieces all=12:d0fce72aa7c9a6f5 camera=12:d0fce72aa7c9a6f5 shadow=12:d0fce72aa7c9a6f5 indirect=12:d0fce72aa7c9a6f5 +geom 372: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.1506156 motion [] pieces all=12:fb1f30c8a821079c camera=12:fb1f30c8a821079c shadow=12:fb1f30c8a821079c indirect=12:fb1f30c8a821079c +geom 373: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.9533634 motion [] pieces all=12:a20a363971cd40b8 camera=12:a20a363971cd40b8 shadow=12:a20a363971cd40b8 indirect=12:a20a363971cd40b8 +geom 374: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0258509 motion [] pieces all=12:a2b56395b2368c74 camera=12:a2b56395b2368c74 shadow=12:a2b56395b2368c74 indirect=12:a2b56395b2368c74 +geom 375: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.82571924 motion [] pieces all=12:4ab45dffd951ae31 camera=12:4ab45dffd951ae31 shadow=12:4ab45dffd951ae31 indirect=12:4ab45dffd951ae31 +geom 376: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.81869274 motion [] pieces all=12:ae2ea826833b422e camera=12:ae2ea826833b422e shadow=12:ae2ea826833b422e indirect=12:ae2ea826833b422e +geom 377: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0127542 motion [] pieces all=12:79db0c567bd34183 camera=12:79db0c567bd34183 shadow=12:79db0c567bd34183 indirect=12:79db0c567bd34183 +geom 378: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.98320615 motion [] pieces all=12:01b6096960d920cc camera=12:01b6096960d920cc shadow=12:01b6096960d920cc indirect=12:01b6096960d920cc +geom 379: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.1958272 motion [] pieces all=12:d3c8e4eef1f217f8 camera=12:d3c8e4eef1f217f8 shadow=12:d3c8e4eef1f217f8 indirect=12:d3c8e4eef1f217f8 +geom 380: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.1164564 motion [] pieces all=12:36eaefabb23528eb camera=12:36eaefabb23528eb shadow=12:36eaefabb23528eb indirect=12:36eaefabb23528eb +geom 381: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.9347236 motion [] pieces all=12:d594f813ad113d89 camera=12:d594f813ad113d89 shadow=12:d594f813ad113d89 indirect=12:d594f813ad113d89 +geom 382: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.8784035 motion [] pieces all=12:6f569e26a9b8cb38 camera=12:6f569e26a9b8cb38 shadow=12:6f569e26a9b8cb38 indirect=12:6f569e26a9b8cb38 +geom 383: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0521004 motion [] pieces all=12:a6a2c749796d646f camera=12:a6a2c749796d646f shadow=12:a6a2c749796d646f indirect=12:a6a2c749796d646f +geom 384: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0741146 motion [] pieces all=12:7ab3662ce3feca21 camera=12:7ab3662ce3feca21 shadow=12:7ab3662ce3feca21 indirect=12:7ab3662ce3feca21 +geom 385: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.88828635 motion [] pieces all=12:19a966d42c84dccd camera=12:19a966d42c84dccd shadow=12:19a966d42c84dccd indirect=12:19a966d42c84dccd +geom 386: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.9380987 motion [] pieces all=12:50dcd7a9666ad9e4 camera=12:50dcd7a9666ad9e4 shadow=12:50dcd7a9666ad9e4 indirect=12:50dcd7a9666ad9e4 +geom 387: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.1000046 motion [] pieces all=12:2726fcc411c50446 camera=12:2726fcc411c50446 shadow=12:2726fcc411c50446 indirect=12:2726fcc411c50446 +geom 388: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.003469 motion [] pieces all=12:de75fb09f46b0714 camera=12:de75fb09f46b0714 shadow=12:de75fb09f46b0714 indirect=12:de75fb09f46b0714 +geom 389: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.8069174 motion [] pieces all=12:09cc27f44483a284 camera=12:09cc27f44483a284 shadow=12:09cc27f44483a284 indirect=12:09cc27f44483a284 +geom 390: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.9884987 motion [] pieces all=12:c5a5bc7778ddb174 camera=12:c5a5bc7778ddb174 shadow=12:c5a5bc7778ddb174 indirect=12:c5a5bc7778ddb174 +geom 391: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.1792359 motion [] pieces all=12:5288286f976f8e48 camera=12:5288286f976f8e48 shadow=12:5288286f976f8e48 indirect=12:5288286f976f8e48 +geom 392: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.049391 motion [] pieces all=12:6d63eb55ab4ed63f camera=12:6d63eb55ab4ed63f shadow=12:6d63eb55ab4ed63f indirect=12:6d63eb55ab4ed63f +geom 393: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.8426635 motion [] pieces all=12:256647833c390e78 camera=12:256647833c390e78 shadow=12:256647833c390e78 indirect=12:256647833c390e78 +geom 394: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.971427 motion [] pieces all=12:8ae535fb31dee5f1 camera=12:8ae535fb31dee5f1 shadow=12:8ae535fb31dee5f1 indirect=12:8ae535fb31dee5f1 +geom 395: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.1684103 motion [] pieces all=12:5daae7246429889a camera=12:5daae7246429889a shadow=12:5daae7246429889a indirect=12:5daae7246429889a +geom 396: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.8659053 motion [] pieces all=12:0b754f94908852bf camera=12:0b754f94908852bf shadow=12:0b754f94908852bf indirect=12:0b754f94908852bf +geom 397: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0790608 motion [] pieces all=12:17c06b147aff1ed8 camera=12:17c06b147aff1ed8 shadow=12:17c06b147aff1ed8 indirect=12:17c06b147aff1ed8 +geom 398: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.1252201 motion [] pieces all=12:5f3d26d1633b786e camera=12:5f3d26d1633b786e shadow=12:5f3d26d1633b786e indirect=12:5f3d26d1633b786e +geom 399: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.9228201 motion [] pieces all=12:8a03effd358aa4f1 camera=12:8a03effd358aa4f1 shadow=12:8a03effd358aa4f1 indirect=12:8a03effd358aa4f1 +geom 400: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.92855155 motion [] pieces all=12:ca195dc2e6d1caba camera=12:ca195dc2e6d1caba shadow=12:ca195dc2e6d1caba indirect=12:ca195dc2e6d1caba +geom 401: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.1198676 motion [] pieces all=12:1659c9b2f2f68411 camera=12:1659c9b2f2f68411 shadow=12:1659c9b2f2f68411 indirect=12:1659c9b2f2f68411 +geom 402: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0583727 motion [] pieces all=12:5fadfea1e44f0e9c camera=12:5fadfea1e44f0e9c shadow=12:5fadfea1e44f0e9c indirect=12:5fadfea1e44f0e9c +geom 403: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.88229245 motion [] pieces all=12:7ab894825d77d5d3 camera=12:7ab894825d77d5d3 shadow=12:7ab894825d77d5d3 indirect=12:7ab894825d77d5d3 +geom 404: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.1928078 motion [] pieces all=12:3ee3d50b727e2a58 camera=12:3ee3d50b727e2a58 shadow=12:3ee3d50b727e2a58 indirect=12:3ee3d50b727e2a58 +geom 405: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.9810347 motion [] pieces all=12:d243e8f4b6019762 camera=12:d243e8f4b6019762 shadow=12:d243e8f4b6019762 indirect=12:d243e8f4b6019762 +geom 406: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.8228548 motion [] pieces all=12:0f3fac2ac5138c26 camera=12:0f3fac2ac5138c26 shadow=12:0f3fac2ac5138c26 indirect=12:0f3fac2ac5138c26 +geom 407: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0222763 motion [] pieces all=12:f36957ef1d5bf9f4 camera=12:f36957ef1d5bf9f4 shadow=12:f36957ef1d5bf9f4 indirect=12:f36957ef1d5bf9f4 +geom 408: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.9566892 motion [] pieces all=12:ce0e92808faa3bd0 camera=12:ce0e92808faa3bd0 shadow=12:ce0e92808faa3bd0 indirect=12:ce0e92808faa3bd0 +geom 409: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.1590903 motion [] pieces all=12:bb0aff4861d0e5c7 camera=12:bb0aff4861d0e5c7 shadow=12:bb0aff4861d0e5c7 indirect=12:bb0aff4861d0e5c7 +geom 410: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0355825 motion [] pieces all=12:0927cb148bc24760 camera=12:0927cb148bc24760 shadow=12:0927cb148bc24760 indirect=12:0927cb148bc24760 +geom 411: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.83733 motion [] pieces all=12:2ff48555423d38f5 camera=12:2ff48555423d38f5 shadow=12:2ff48555423d38f5 indirect=12:2ff48555423d38f5 +geom 412: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.9099854 motion [] pieces all=12:0f291e56c9c39d06 camera=12:0f291e56c9c39d06 shadow=12:0f291e56c9c39d06 indirect=12:0f291e56c9c39d06 +geom 413: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.1480556 motion [] pieces all=12:c6b48ac24a12c819 camera=12:c6b48ac24a12c819 shadow=12:c6b48ac24a12c819 indirect=12:c6b48ac24a12c819 +geom 414: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0967451 motion [] pieces all=12:b500eba6cee7a7f1 camera=12:b500eba6cee7a7f1 shadow=12:b500eba6cee7a7f1 indirect=12:b500eba6cee7a7f1 +geom 415: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.8585492 motion [] pieces all=12:cf6a1f614b3b7bcf camera=12:cf6a1f614b3b7bcf shadow=12:cf6a1f614b3b7bcf indirect=12:cf6a1f614b3b7bcf +geom 416: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0872761 motion [] pieces all=12:8bf0ee56c82758fd camera=12:8bf0ee56c82758fd shadow=12:8bf0ee56c82758fd indirect=12:8bf0ee56c82758fd +geom 417: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.8735011 motion [] pieces all=12:b0276b38bc801f05 camera=12:b0276b38bc801f05 shadow=12:b0276b38bc801f05 indirect=12:b0276b38bc801f05 +geom 418: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.1322085 motion [] pieces all=12:92013c8cf299ee3d camera=12:92013c8cf299ee3d shadow=12:92013c8cf299ee3d indirect=12:92013c8cf299ee3d +geom 419: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.91393906 motion [] pieces all=12:7a81fde75dbafdf4 camera=12:7a81fde75dbafdf4 shadow=12:7a81fde75dbafdf4 indirect=12:7a81fde75dbafdf4 +geom 420: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.1731441 motion [] pieces all=12:6ca24d9b1cb2bd35 camera=12:6ca24d9b1cb2bd35 shadow=12:6ca24d9b1cb2bd35 indirect=12:6ca24d9b1cb2bd35 +geom 421: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.9652642 motion [] pieces all=12:6b1346b4ec218dcd camera=12:6b1346b4ec218dcd shadow=12:6b1346b4ec218dcd indirect=12:6b1346b4ec218dcd +geom 422: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.84529215 motion [] pieces all=12:04df38a4c4503749 camera=12:04df38a4c4503749 shadow=12:04df38a4c4503749 indirect=12:04df38a4c4503749 +geom 423: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.040804 motion [] pieces all=12:435d97f0bf3e1929 camera=12:435d97f0bf3e1929 shadow=12:435d97f0bf3e1929 indirect=12:435d97f0bf3e1929 +geom 424: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.1115723 motion [] pieces all=12:7b623ed7ac966f41 camera=12:7b623ed7ac966f41 shadow=12:7b623ed7ac966f41 indirect=12:7b623ed7ac966f41 +geom 425: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.9487359 motion [] pieces all=12:a9ea55ada1928227 camera=12:a9ea55ada1928227 shadow=12:a9ea55ada1928227 indirect=12:a9ea55ada1928227 +geom 426: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.8999349 motion [] pieces all=12:25db60042db2e310 camera=12:25db60042db2e310 shadow=12:25db60042db2e310 indirect=12:25db60042db2e310 +geom 427: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0640092 motion [] pieces all=12:b9487da92f78a773 camera=12:b9487da92f78a773 shadow=12:b9487da92f78a773 indirect=12:b9487da92f78a773 +geom 428: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.99416155 motion [] pieces all=12:11c8047ca053be03 camera=12:11c8047ca053be03 shadow=12:11c8047ca053be03 indirect=12:11c8047ca053be03 +geom 429: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.1863627 motion [] pieces all=12:5b272fbb1291ff05 camera=12:5b272fbb1291ff05 shadow=12:5b272fbb1291ff05 indirect=12:5b272fbb1291ff05 +geom 430: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0074881 motion [] pieces all=12:fb4df4495b934d19 camera=12:fb4df4495b934d19 shadow=12:fb4df4495b934d19 indirect=12:fb4df4495b934d19 +geom 431: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.8032813 motion [] pieces all=12:80033bd0cc9a3656 camera=12:80033bd0cc9a3656 shadow=12:80033bd0cc9a3656 indirect=12:80033bd0cc9a3656 +geom 432: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.93390155 motion [] pieces all=12:ac76560929186009 camera=12:ac76560929186009 shadow=12:ac76560929186009 indirect=12:ac76560929186009 +geom 433: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.1131442 motion [] pieces all=12:51b165a6546bc415 camera=12:51b165a6546bc415 shadow=12:51b165a6546bc415 indirect=12:51b165a6546bc415 +geom 434: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.053656 motion [] pieces all=12:1a547d8c29cc4f3d camera=12:1a547d8c29cc4f3d shadow=12:1a547d8c29cc4f3d indirect=12:1a547d8c29cc4f3d +geom 435: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.8774742 motion [] pieces all=12:5d810e6a4b296cad camera=12:5d810e6a4b296cad shadow=12:5d810e6a4b296cad indirect=12:5d810e6a4b296cad +geom 436: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.1976509 motion [] pieces all=12:be9adb6d880c1229 camera=12:be9adb6d880c1229 shadow=12:be9adb6d880c1229 indirect=12:be9adb6d880c1229 +geom 437: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.9849389 motion [] pieces all=12:a46a1608942d758d camera=12:a46a1608942d758d shadow=12:a46a1608942d758d indirect=12:a46a1608942d758d +geom 438: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.813529 motion [] pieces all=12:fda70acf609042ce camera=12:fda70acf609042ce shadow=12:fda70acf609042ce indirect=12:fda70acf609042ce +geom 439: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0156319 motion [] pieces all=12:f41f0f54ec39adeb camera=12:f41f0f54ec39adeb shadow=12:f41f0f54ec39adeb indirect=12:f41f0f54ec39adeb +geom 440: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.95077723 motion [] pieces all=12:0a9eb720af1a3bd4 camera=12:0a9eb720af1a3bd4 shadow=12:0a9eb720af1a3bd4 indirect=12:0a9eb720af1a3bd4 +geom 441: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.1535623 motion [] pieces all=12:336c360aeef5faf5 camera=12:336c360aeef5faf5 shadow=12:336c360aeef5faf5 indirect=12:336c360aeef5faf5 +geom 442: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0297333 motion [] pieces all=12:645d7bb6a3b95bd8 camera=12:645d7bb6a3b95bd8 shadow=12:645d7bb6a3b95bd8 indirect=12:645d7bb6a3b95bd8 +geom 443: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.8287572 motion [] pieces all=12:4592c6855a292fea camera=12:4592c6855a292fea shadow=12:4592c6855a292fea indirect=12:4592c6855a292fea +geom 444: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.9023757 motion [] pieces all=12:e731c0a111cb98d1 camera=12:e731c0a111cb98d1 shadow=12:e731c0a111cb98d1 indirect=12:e731c0a111cb98d1 +geom 445: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.1376117 motion [] pieces all=12:37a20bbc2a1f4904 camera=12:37a20bbc2a1f4904 shadow=12:37a20bbc2a1f4904 indirect=12:37a20bbc2a1f4904 +geom 446: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0911936 motion [] pieces all=12:524b1b596a3fa5ef camera=12:524b1b596a3fa5ef shadow=12:524b1b596a3fa5ef indirect=12:524b1b596a3fa5ef +geom 447: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.85525686 motion [] pieces all=12:38e8539a12fb9b3f camera=12:38e8539a12fb9b3f shadow=12:38e8539a12fb9b3f indirect=12:38e8539a12fb9b3f +geom 448: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.8316441 motion [] pieces all=12:b405971f8aa011fc camera=12:b405971f8aa011fc shadow=12:b405971f8aa011fc indirect=12:b405971f8aa011fc +geom 449: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.032447 motion [] pieces all=12:db46adba899d5142 camera=12:db46adba899d5142 shadow=12:db46adba899d5142 indirect=12:db46adba899d5142 +geom 450: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.96151036 motion [] pieces all=12:5621f8ff01a34a29 camera=12:5621f8ff01a34a29 shadow=12:5621f8ff01a34a29 indirect=12:5621f8ff01a34a29 +geom 451: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.1623033 motion [] pieces all=12:aaf3da8f43a191f0 camera=12:aaf3da8f43a191f0 shadow=12:aaf3da8f43a191f0 indirect=12:aaf3da8f43a191f0 +geom 452: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.85963744 motion [] pieces all=12:0eb38e954d9f4621 camera=12:0eb38e954d9f4621 shadow=12:0eb38e954d9f4621 indirect=12:0eb38e954d9f4621 +geom 453: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.09886 motion [] pieces all=12:f380c5248da00ed3 camera=12:f380c5248da00ed3 shadow=12:f380c5248da00ed3 indirect=12:f380c5248da00ed3 +geom 454: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.9070294 motion [] pieces all=12:bb386147aa56f833 camera=12:bb386147aa56f833 shadow=12:bb386147aa56f833 indirect=12:bb386147aa56f833 +geom 455: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.1466872 motion [] pieces all=12:bc039ca1e5b269be camera=12:bc039ca1e5b269be shadow=12:bc039ca1e5b269be indirect=12:bc039ca1e5b269be +geom 456: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.9773077 motion [] pieces all=12:c359f8304ad10baa camera=12:c359f8304ad10baa shadow=12:c359f8304ad10baa indirect=12:c359f8304ad10baa +geom 457: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.190172 motion [] pieces all=12:789ebef75a5d6368 camera=12:789ebef75a5d6368 shadow=12:789ebef75a5d6368 indirect=12:789ebef75a5d6368 +geom 458: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0206813 motion [] pieces all=12:a95fcdbc04f1b322 camera=12:a95fcdbc04f1b322 shadow=12:a95fcdbc04f1b322 indirect=12:a95fcdbc04f1b322 +geom 459: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.8205765 motion [] pieces all=12:8cd061c77484d1f9 camera=12:8cd061c77484d1f9 shadow=12:8cd061c77484d1f9 indirect=12:8cd061c77484d1f9 +geom 460: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0603322 motion [] pieces all=12:21e3f6766dc4873c camera=12:21e3f6766dc4873c shadow=12:21e3f6766dc4873c indirect=12:21e3f6766dc4873c +geom 461: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.8858062 motion [] pieces all=12:8732059bb4b03c40 camera=12:8732059bb4b03c40 shadow=12:8732059bb4b03c40 indirect=12:8732059bb4b03c40 +geom 462: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.1239856 motion [] pieces all=12:d33603ce069a6fc7 camera=12:d33603ce069a6fc7 shadow=12:d33603ce069a6fc7 indirect=12:d33603ce069a6fc7 +geom 463: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.9266704 motion [] pieces all=12:f66e85ff299269a7 camera=12:f66e85ff299269a7 shadow=12:f66e85ff299269a7 indirect=12:f66e85ff299269a7 +geom 464: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.104276 motion [] pieces all=12:badf7e07917b3454 camera=12:badf7e07917b3454 shadow=12:badf7e07917b3454 indirect=12:badf7e07917b3454 +geom 465: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.9416502 motion [] pieces all=12:5bf162743147bb01 camera=12:5bf162743147bb01 shadow=12:5bf162743147bb01 indirect=12:5bf162743147bb01 +geom 466: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0707836 motion [] pieces all=12:16caa9eff55a3ae5 camera=12:16caa9eff55a3ae5 shadow=12:16caa9eff55a3ae5 indirect=12:16caa9eff55a3ae5 +geom 467: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.89121234 motion [] pieces all=12:906cd7ad75a17cbe camera=12:906cd7ad75a17cbe shadow=12:906cd7ad75a17cbe indirect=12:906cd7ad75a17cbe +geom 468: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.99138224 motion [] pieces all=12:e4a9a79b146978b5 camera=12:e4a9a79b146978b5 shadow=12:e4a9a79b146978b5 indirect=12:e4a9a79b146978b5 +geom 469: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.1752003 motion [] pieces all=12:264241ca86c16666 camera=12:264241ca86c16666 shadow=12:264241ca86c16666 indirect=12:264241ca86c16666 +geom 470: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.81064636 motion [] pieces all=12:f81fdb0030c2a9ca camera=12:f81fdb0030c2a9ca shadow=12:f81fdb0030c2a9ca indirect=12:f81fdb0030c2a9ca +geom 471: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0018771 motion [] pieces all=12:22b1a5c4d00823e2 camera=12:22b1a5c4d00823e2 shadow=12:22b1a5c4d00823e2 indirect=12:22b1a5c4d00823e2 +geom 472: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.1626403 motion [] pieces all=12:51194ccbf911a624 camera=12:51194ccbf911a624 shadow=12:51194ccbf911a624 indirect=12:51194ccbf911a624 +geom 473: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.9727246 motion [] pieces all=12:25244f833b6acce5 camera=12:25244f833b6acce5 shadow=12:25244f833b6acce5 indirect=12:25244f833b6acce5 +geom 474: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0468313 motion [] pieces all=12:ee742bd865ff2662 camera=12:ee742bd865ff2662 shadow=12:ee742bd865ff2662 indirect=12:ee742bd865ff2662 +geom 475: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.8404454 motion [] pieces all=12:0fa5506eb54d9ae8 camera=12:0fa5506eb54d9ae8 shadow=12:0fa5506eb54d9ae8 indirect=12:0fa5506eb54d9ae8 +geom 476: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.1281568 motion [] pieces all=12:8ddd449552ed69a5 camera=12:8ddd449552ed69a5 shadow=12:8ddd449552ed69a5 indirect=12:8ddd449552ed69a5 +geom 477: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.92151695 motion [] pieces all=12:444af567cb7d0162 camera=12:444af567cb7d0162 shadow=12:444af567cb7d0162 indirect=12:444af567cb7d0162 +geom 478: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0769413 motion [] pieces all=12:aa431d94ab3f48ae camera=12:aa431d94ab3f48ae shadow=12:aa431d94ab3f48ae indirect=12:aa431d94ab3f48ae +geom 479: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.8655292 motion [] pieces all=12:edb83e430474aae2 camera=12:edb83e430474aae2 shadow=12:edb83e430474aae2 indirect=12:edb83e430474aae2 +geom 480: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.85253334 motion [] pieces all=12:7d25e2d3928636c1 camera=12:7d25e2d3928636c1 shadow=12:7d25e2d3928636c1 indirect=12:7d25e2d3928636c1 +geom 481: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0899037 motion [] pieces all=12:b7c6bc423922f094 camera=12:b7c6bc423922f094 shadow=12:b7c6bc423922f094 indirect=12:b7c6bc423922f094 +geom 482: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.9033633 motion [] pieces all=12:c4c732f074943047 camera=12:c4c732f074943047 shadow=12:c4c732f074943047 indirect=12:c4c732f074943047 +geom 483: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.14154 motion [] pieces all=12:2bcc27e184983e9c camera=12:2bcc27e184983e9c shadow=12:2bcc27e184983e9c indirect=12:2bcc27e184983e9c +geom 484: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0275213 motion [] pieces all=12:819b70b7d45cf9b2 camera=12:819b70b7d45cf9b2 shadow=12:819b70b7d45cf9b2 indirect=12:819b70b7d45cf9b2 +geom 485: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.82741916 motion [] pieces all=12:9a9da58ac212404b camera=12:9a9da58ac212404b shadow=12:9a9da58ac212404b indirect=12:9a9da58ac212404b +geom 486: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.1528425 motion [] pieces all=12:a89f73997f111567 camera=12:a89f73997f111567 shadow=12:a89f73997f111567 indirect=12:a89f73997f111567 +geom 487: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.95527947 motion [] pieces all=12:bb01b61f711383d5 camera=12:bb01b61f711383d5 shadow=12:bb01b61f711383d5 indirect=12:bb01b61f711383d5 +geom 488: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.1944077 motion [] pieces all=12:2ffe0c3f28c236dc camera=12:2ffe0c3f28c236dc shadow=12:2ffe0c3f28c236dc indirect=12:2ffe0c3f28c236dc +geom 489: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.9815056 motion [] pieces all=12:91eb9411b9928e56 camera=12:91eb9411b9928e56 shadow=12:91eb9411b9928e56 indirect=12:91eb9411b9928e56 +geom 490: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0148056 motion [] pieces all=12:17138d3451f2bd4e camera=12:17138d3451f2bd4e shadow=12:17138d3451f2bd4e indirect=12:17138d3451f2bd4e +geom 491: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.816761 motion [] pieces all=12:306e835f81e541cb camera=12:306e835f81e541cb shadow=12:306e835f81e541cb indirect=12:306e835f81e541cb +geom 492: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.9368933 motion [] pieces all=12:a75accad21041f48 camera=12:a75accad21041f48 shadow=12:a75accad21041f48 indirect=12:a75accad21041f48 +geom 493: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.1182696 motion [] pieces all=12:a8b2727fdf034941 camera=12:a8b2727fdf034941 shadow=12:a8b2727fdf034941 indirect=12:a8b2727fdf034941 +geom 494: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.87989783 motion [] pieces all=12:d10d6ce818157f05 camera=12:d10d6ce818157f05 shadow=12:d10d6ce818157f05 indirect=12:d10d6ce818157f05 +geom 495: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0513932 motion [] pieces all=12:08aa1a6090cb19d8 camera=12:08aa1a6090cb19d8 shadow=12:08aa1a6090cb19d8 indirect=12:08aa1a6090cb19d8 +geom 496: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.1709273 motion [] pieces all=12:6cd171a4e9fa7dc0 camera=12:6cd171a4e9fa7dc0 shadow=12:6cd171a4e9fa7dc0 indirect=12:6cd171a4e9fa7dc0 +geom 497: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.96645564 motion [] pieces all=12:1ca8b562a4dc8ad4 camera=12:1ca8b562a4dc8ad4 shadow=12:1ca8b562a4dc8ad4 indirect=12:1ca8b562a4dc8ad4 +geom 498: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0384126 motion [] pieces all=12:bfd25e19e8bf0df8 camera=12:bfd25e19e8bf0df8 shadow=12:bfd25e19e8bf0df8 indirect=12:bfd25e19e8bf0df8 +geom 499: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.8496135 motion [] pieces all=12:cbc98d16444c9942 camera=12:cbc98d16444c9942 shadow=12:cbc98d16444c9942 indirect=12:cbc98d16444c9942 +geom 500: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0302348 motion [] pieces all=12:4e47456226ea853b camera=12:4e47456226ea853b shadow=12:4e47456226ea853b indirect=12:4e47456226ea853b +geom 501: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.9703491 motion [] pieces all=12:ee2f51c1cd819aa5 camera=12:ee2f51c1cd819aa5 shadow=12:ee2f51c1cd819aa5 indirect=12:ee2f51c1cd819aa5 +geom 502: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.8307657 motion [] pieces all=12:4456538a2171cd9c camera=12:4456538a2171cd9c shadow=12:4456538a2171cd9c indirect=12:4456538a2171cd9c +geom 503: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.1194483 motion [] pieces all=12:23ee1769174a108a camera=12:23ee1769174a108a shadow=12:23ee1769174a108a indirect=12:23ee1769174a108a +geom 504: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0775396 motion [] pieces all=12:a369bbc5ef22c736 camera=12:a369bbc5ef22c736 shadow=12:a369bbc5ef22c736 indirect=12:a369bbc5ef22c736 +geom 505: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.94118965 motion [] pieces all=12:3f9c2945e264a3a7 camera=12:3f9c2945e264a3a7 shadow=12:3f9c2945e264a3a7 indirect=12:3f9c2945e264a3a7 +geom 506: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.8952345 motion [] pieces all=12:728a445b371853d8 camera=12:728a445b371853d8 shadow=12:728a445b371853d8 indirect=12:728a445b371853d8 +geom 507: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.1544443 motion [] pieces all=12:086da29016ba95b0 camera=12:086da29016ba95b0 shadow=12:086da29016ba95b0 indirect=12:086da29016ba95b0 +geom 508: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0568454 motion [] pieces all=12:a3831c1aa822f259 camera=12:a3831c1aa822f259 shadow=12:a3831c1aa822f259 indirect=12:a3831c1aa822f259 +geom 509: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.91884345 motion [] pieces all=12:a4f6586fe5ef3e21 camera=12:a4f6586fe5ef3e21 shadow=12:a4f6586fe5ef3e21 indirect=12:a4f6586fe5ef3e21 +geom 510: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.8698318 motion [] pieces all=12:f0760d5faae11b3b camera=12:f0760d5faae11b3b shadow=12:f0760d5faae11b3b indirect=12:f0760d5faae11b3b +geom 511: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.1947867 motion [] pieces all=12:5b32133f4614fd46 camera=12:5b32133f4614fd46 shadow=12:5b32133f4614fd46 indirect=12:5b32133f4614fd46 +geom 512: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.9751468 motion [] pieces all=12:d51360056d6a17f1 camera=12:d51360056d6a17f1 shadow=12:d51360056d6a17f1 indirect=12:d51360056d6a17f1 +geom 513: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0068411 motion [] pieces all=12:d10eeeefb1edb19c camera=12:d10eeeefb1edb19c shadow=12:d10eeeefb1edb19c indirect=12:d10eeeefb1edb19c +geom 514: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.1298987 motion [] pieces all=12:e3f44cff56520c66 camera=12:e3f44cff56520c66 shadow=12:e3f44cff56520c66 indirect=12:e3f44cff56520c66 +geom 515: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.8074785 motion [] pieces all=12:76182490231cb2c0 camera=12:76182490231cb2c0 shadow=12:76182490231cb2c0 indirect=12:76182490231cb2c0 +geom 516: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.93526125 motion [] pieces all=12:4bdb31af636839b0 camera=12:4bdb31af636839b0 shadow=12:4bdb31af636839b0 indirect=12:4bdb31af636839b0 +geom 517: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0933704 motion [] pieces all=12:e1cd969552f25674 camera=12:e1cd969552f25674 shadow=12:e1cd969552f25674 indirect=12:e1cd969552f25674 +geom 518: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.1666417 motion [] pieces all=12:8cb23d264ba6bfbb camera=12:8cb23d264ba6bfbb shadow=12:8cb23d264ba6bfbb indirect=12:8cb23d264ba6bfbb +geom 519: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.8871478 motion [] pieces all=12:4a7858789cd9df8e camera=12:4a7858789cd9df8e shadow=12:4a7858789cd9df8e indirect=12:4a7858789cd9df8e +geom 520: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0460746 motion [] pieces all=12:6426416e8a5deb32 camera=12:6426416e8a5deb32 shadow=12:6426416e8a5deb32 indirect=12:6426416e8a5deb32 +geom 521: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.9511921 motion [] pieces all=12:f56b8604101514c9 camera=12:f56b8604101514c9 shadow=12:f56b8604101514c9 indirect=12:f56b8604101514c9 +geom 522: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.84485286 motion [] pieces all=12:db689d8c9a6cd4c8 camera=12:db689d8c9a6cd4c8 shadow=12:db689d8c9a6cd4c8 indirect=12:db689d8c9a6cd4c8 +geom 523: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.1097914 motion [] pieces all=12:f09788fda874e4f9 camera=12:f09788fda874e4f9 shadow=12:f09788fda874e4f9 indirect=12:f09788fda874e4f9 +geom 524: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.81755817 motion [] pieces all=12:111f011a0f808f01 camera=12:111f011a0f808f01 shadow=12:111f011a0f808f01 indirect=12:111f011a0f808f01 +geom 525: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.1459739 motion [] pieces all=12:43cd6550e6fe7eb3 camera=12:43cd6550e6fe7eb3 shadow=12:43cd6550e6fe7eb3 indirect=12:43cd6550e6fe7eb3 +geom 526: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0129569 motion [] pieces all=12:fc789e4c2f5a396d camera=12:fc789e4c2f5a396d shadow=12:fc789e4c2f5a396d indirect=12:fc789e4c2f5a396d +geom 527: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.9887796 motion [] pieces all=12:17b9413cef4977d1 camera=12:17b9413cef4977d1 shadow=12:17b9413cef4977d1 indirect=12:17b9413cef4977d1 +geom 528: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.1784618 motion [] pieces all=12:94146ea4b00252bf camera=12:94146ea4b00252bf shadow=12:94146ea4b00252bf indirect=12:94146ea4b00252bf +geom 529: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.8605717 motion [] pieces all=12:12a68d3d3b360732 camera=12:12a68d3d3b360732 shadow=12:12a68d3d3b360732 indirect=12:12a68d3d3b360732 +geom 530: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.90049964 motion [] pieces all=12:bbc25fd4b02e380f camera=12:bbc25fd4b02e380f shadow=12:bbc25fd4b02e380f indirect=12:bbc25fd4b02e380f +geom 531: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0697577 motion [] pieces all=12:c475c08b4f7c3376 camera=12:c475c08b4f7c3376 shadow=12:c475c08b4f7c3376 indirect=12:c475c08b4f7c3376 +geom 532: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.8753944 motion [] pieces all=12:f7430be8cddff05a camera=12:f7430be8cddff05a shadow=12:f7430be8cddff05a indirect=12:f7430be8cddff05a +geom 533: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.1720527 motion [] pieces all=12:5cd3ac711c786885 camera=12:5cd3ac711c786885 shadow=12:5cd3ac711c786885 indirect=12:5cd3ac711c786885 +geom 534: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0938879 motion [] pieces all=12:abf9f129ca95e4f5 camera=12:abf9f129ca95e4f5 shadow=12:abf9f129ca95e4f5 indirect=12:abf9f129ca95e4f5 +geom 535: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.9269793 motion [] pieces all=12:e657abaf59804d56 camera=12:e657abaf59804d56 shadow=12:e657abaf59804d56 indirect=12:e657abaf59804d56 +geom 536: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.8431831 motion [] pieces all=12:11fc198140ede24e camera=12:11fc198140ede24e shadow=12:11fc198140ede24e indirect=12:11fc198140ede24e +geom 537: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.1019206 motion [] pieces all=12:11cf76c922df119e camera=12:11cf76c922df119e shadow=12:11cf76c922df119e indirect=12:11cf76c922df119e +geom 538: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0432779 motion [] pieces all=12:c438f3c44f47c25d camera=12:c438f3c44f47c25d shadow=12:c438f3c44f47c25d indirect=12:c438f3c44f47c25d +geom 539: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.96232396 motion [] pieces all=12:13d8666cee5fecc3 camera=12:13d8666cee5fecc3 shadow=12:13d8666cee5fecc3 indirect=12:13d8666cee5fecc3 +geom 540: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.023567 motion [] pieces all=12:18c97bf35a8997a4 camera=12:18c97bf35a8997a4 shadow=12:18c97bf35a8997a4 indirect=12:18c97bf35a8997a4 +geom 541: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.9956807 motion [] pieces all=12:e75636321407dd22 camera=12:e75636321407dd22 shadow=12:e75636321407dd22 indirect=12:e75636321407dd22 +geom 542: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.8209068 motion [] pieces all=12:d4be977b87b8f2c5 camera=12:d4be977b87b8f2c5 shadow=12:d4be977b87b8f2c5 indirect=12:d4be977b87b8f2c5 +geom 543: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.1392137 motion [] pieces all=12:38f1366b090718c5 camera=12:38f1366b090718c5 shadow=12:38f1366b090718c5 indirect=12:38f1366b090718c5 +geom 544: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0633069 motion [] pieces all=12:af93a450dcaa3ed7 camera=12:af93a450dcaa3ed7 shadow=12:af93a450dcaa3ed7 indirect=12:af93a450dcaa3ed7 +geom 545: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.91163903 motion [] pieces all=12:e9eaf279b4fd310c camera=12:e9eaf279b4fd310c shadow=12:e9eaf279b4fd310c indirect=12:e9eaf279b4fd310c +geom 546: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.85597336 motion [] pieces all=12:75b84129502c9e93 camera=12:75b84129502c9e93 shadow=12:75b84129502c9e93 indirect=12:75b84129502c9e93 +geom 547: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.1847972 motion [] pieces all=12:848a7256c4a42f64 camera=12:848a7256c4a42f64 shadow=12:848a7256c4a42f64 indirect=12:848a7256c4a42f64 +geom 548: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0359192 motion [] pieces all=12:f9cd1e14b2117f7d camera=12:f9cd1e14b2117f7d shadow=12:f9cd1e14b2117f7d indirect=12:f9cd1e14b2117f7d +geom 549: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.96330434 motion [] pieces all=12:a240996e765dcaca camera=12:a240996e765dcaca shadow=12:a240996e765dcaca indirect=12:a240996e765dcaca +geom 550: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.8354984 motion [] pieces all=12:4d3480a3dfbefce8 camera=12:4d3480a3dfbefce8 shadow=12:4d3480a3dfbefce8 indirect=12:4d3480a3dfbefce8 +geom 551: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.1180665 motion [] pieces all=12:9066996782485a15 camera=12:9066996782485a15 shadow=12:9066996782485a15 indirect=12:9066996782485a15 +geom 552: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0866416 motion [] pieces all=12:8d4d3ecfaa01e70f camera=12:8d4d3ecfaa01e70f shadow=12:8d4d3ecfaa01e70f indirect=12:8d4d3ecfaa01e70f +geom 553: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.9495417 motion [] pieces all=12:15fb4a3bbaf8ba17 camera=12:15fb4a3bbaf8ba17 shadow=12:15fb4a3bbaf8ba17 indirect=12:15fb4a3bbaf8ba17 +geom 554: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.8930357 motion [] pieces all=12:d2b655f51fba3b60 camera=12:d2b655f51fba3b60 shadow=12:d2b655f51fba3b60 indirect=12:d2b655f51fba3b60 +geom 555: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.1609201 motion [] pieces all=12:9472cda2f739b9fb camera=12:9472cda2f739b9fb shadow=12:9472cda2f739b9fb indirect=12:9472cda2f739b9fb +geom 556: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0515589 motion [] pieces all=12:cd4b0efb6f96ae7a camera=12:cd4b0efb6f96ae7a shadow=12:cd4b0efb6f96ae7a indirect=12:cd4b0efb6f96ae7a +geom 557: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.91319627 motion [] pieces all=12:5a6276f8576a6b5a camera=12:5a6276f8576a6b5a shadow=12:5a6276f8576a6b5a indirect=12:5a6276f8576a6b5a +geom 558: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.8628024 motion [] pieces all=12:d3696c57874475d0 camera=12:d3696c57874475d0 shadow=12:d3696c57874475d0 indirect=12:d3696c57874475d0 +geom 559: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.1927012 motion [] pieces all=12:a2e82cef96955606 camera=12:a2e82cef96955606 shadow=12:a2e82cef96955606 indirect=12:a2e82cef96955606 +geom 560: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.9843564 motion [] pieces all=12:182c6d894be25135 camera=12:182c6d894be25135 shadow=12:182c6d894be25135 indirect=12:182c6d894be25135 +geom 561: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0001198 motion [] pieces all=12:7a9d4d3c8591c209 camera=12:7a9d4d3c8591c209 shadow=12:7a9d4d3c8591c209 indirect=12:7a9d4d3c8591c209 +geom 562: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.1337063 motion [] pieces all=12:4c1c1e515c79bdc3 camera=12:4c1c1e515c79bdc3 shadow=12:4c1c1e515c79bdc3 indirect=12:4c1c1e515c79bdc3 +geom 563: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.80129576 motion [] pieces all=12:7c756f7c6eb8a981 camera=12:7c756f7c6eb8a981 shadow=12:7c756f7c6eb8a981 indirect=12:7c756f7c6eb8a981 +geom 564: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.87433505 motion [] pieces all=12:4108f5b4686e35be camera=12:4108f5b4686e35be shadow=12:4108f5b4686e35be indirect=12:4108f5b4686e35be +geom 565: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.1975825 motion [] pieces all=12:4734019265471665 camera=12:4734019265471665 shadow=12:4734019265471665 indirect=12:4734019265471665 +geom 566: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0621684 motion [] pieces all=12:715804278013b789 camera=12:715804278013b789 shadow=12:715804278013b789 indirect=12:715804278013b789 +geom 567: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.9226387 motion [] pieces all=12:bb6f7c1e8cc4f1e2 camera=12:bb6f7c1e8cc4f1e2 shadow=12:bb6f7c1e8cc4f1e2 indirect=12:bb6f7c1e8cc4f1e2 +geom 568: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.8097593 motion [] pieces all=12:c268e5368146ae1f camera=12:c268e5368146ae1f shadow=12:c268e5368146ae1f indirect=12:c268e5368146ae1f +geom 569: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.127293 motion [] pieces all=12:457c05048f3f693d camera=12:457c05048f3f693d shadow=12:457c05048f3f693d indirect=12:457c05048f3f693d +geom 570: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0116408 motion [] pieces all=12:e703eedb7b026723 camera=12:e703eedb7b026723 shadow=12:e703eedb7b026723 indirect=12:e703eedb7b026723 +geom 571: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.97932434 motion [] pieces all=12:fd327f9bca95a0db camera=12:fd327f9bca95a0db shadow=12:fd327f9bca95a0db indirect=12:fd327f9bca95a0db +geom 572: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.82668763 motion [] pieces all=12:6d2ad38125bafc84 camera=12:6d2ad38125bafc84 shadow=12:6d2ad38125bafc84 indirect=12:6d2ad38125bafc84 +geom 573: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.1249206 motion [] pieces all=12:c9a251d6e544d9bf camera=12:c9a251d6e544d9bf shadow=12:c9a251d6e544d9bf indirect=12:c9a251d6e544d9bf +geom 574: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0261687 motion [] pieces all=12:20ba675322687129 camera=12:20ba675322687129 shadow=12:20ba675322687129 indirect=12:20ba675322687129 +geom 575: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.97264576 motion [] pieces all=12:ef6c1b9a2c6c864b camera=12:ef6c1b9a2c6c864b shadow=12:ef6c1b9a2c6c864b indirect=12:ef6c1b9a2c6c864b +geom 576: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.1511 motion [] pieces all=12:07fc7bc9d1792ccc camera=12:07fc7bc9d1792ccc shadow=12:07fc7bc9d1792ccc indirect=12:07fc7bc9d1792ccc +geom 577: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.89762646 motion [] pieces all=12:aa185da6e53f4927 camera=12:aa185da6e53f4927 shadow=12:aa185da6e53f4927 indirect=12:aa185da6e53f4927 +geom 578: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.94019973 motion [] pieces all=12:01b6b3d88c45c033 camera=12:01b6b3d88c45c033 shadow=12:01b6b3d88c45c033 indirect=12:01b6b3d88c45c033 +geom 579: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0800166 motion [] pieces all=12:a9bf056d392621b0 camera=12:a9bf056d392621b0 shadow=12:a9bf056d392621b0 indirect=12:a9bf056d392621b0 +geom 580: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.85747635 motion [] pieces all=12:94de06f236b8b820 camera=12:94de06f236b8b820 shadow=12:94de06f236b8b820 indirect=12:94de06f236b8b820 +geom 581: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.1759998 motion [] pieces all=12:92f726545f6a3ab5 camera=12:92f726545f6a3ab5 shadow=12:92f726545f6a3ab5 indirect=12:92f726545f6a3ab5 +geom 582: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0728099 motion [] pieces all=12:09e30d626f61ccf4 camera=12:09e30d626f61ccf4 shadow=12:09e30d626f61ccf4 indirect=12:09e30d626f61ccf4 +geom 583: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.9043027 motion [] pieces all=12:d53f7aff7fe21e21 camera=12:d53f7aff7fe21e21 shadow=12:d53f7aff7fe21e21 indirect=12:d53f7aff7fe21e21 +geom 584: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.8145665 motion [] pieces all=12:f2810bc8218d17d8 camera=12:f2810bc8218d17d8 shadow=12:f2810bc8218d17d8 indirect=12:f2810bc8218d17d8 +geom 585: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.1478072 motion [] pieces all=12:4aa5066447045ac2 camera=12:4aa5066447045ac2 shadow=12:4aa5066447045ac2 indirect=12:4aa5066447045ac2 +geom 586: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0164454 motion [] pieces all=12:0a5f20c20324f76e camera=12:0a5f20c20324f76e shadow=12:0a5f20c20324f76e indirect=12:0a5f20c20324f76e +geom 587: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.99306315 motion [] pieces all=12:ddcf41cfc3c6173f camera=12:ddcf41cfc3c6173f shadow=12:ddcf41cfc3c6173f indirect=12:ddcf41cfc3c6173f +geom 588: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.1079575 motion [] pieces all=12:0003a64b0b152a73 camera=12:0003a64b0b152a73 shadow=12:0003a64b0b152a73 indirect=12:0003a64b0b152a73 +geom 589: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.8493257 motion [] pieces all=12:cc9da69acf673059 camera=12:cc9da69acf673059 shadow=12:cc9da69acf673059 indirect=12:cc9da69acf673059 +geom 590: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.955672 motion [] pieces all=12:1516c749ba6d4473 camera=12:1516c749ba6d4473 shadow=12:1516c749ba6d4473 indirect=12:1516c749ba6d4473 +geom 591: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0495518 motion [] pieces all=12:6f60f8b334446267 camera=12:6f60f8b334446267 shadow=12:6f60f8b334446267 indirect=12:6f60f8b334446267 +geom 592: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.8838227 motion [] pieces all=12:26f088ca4a7afba0 camera=12:26f088ca4a7afba0 shadow=12:26f088ca4a7afba0 indirect=12:26f088ca4a7afba0 +geom 593: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.1644161 motion [] pieces all=12:548f82962b9f27a4 camera=12:548f82962b9f27a4 shadow=12:548f82962b9f27a4 indirect=12:548f82962b9f27a4 +geom 594: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0903423 motion [] pieces all=12:ee4bc3ad2dcc7fb4 camera=12:ee4bc3ad2dcc7fb4 shadow=12:ee4bc3ad2dcc7fb4 indirect=12:ee4bc3ad2dcc7fb4 +geom 595: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.9327857 motion [] pieces all=12:1d6114476eb4c674 camera=12:1d6114476eb4c674 shadow=12:1d6114476eb4c674 indirect=12:1d6114476eb4c674 +geom 596: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.95914304 motion [] pieces all=12:2b6d8b99d404bb45 camera=12:2b6d8b99d404bb45 shadow=12:2b6d8b99d404bb45 indirect=12:2b6d8b99d404bb45 +geom 597: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0385134 motion [] pieces all=12:1a072a290ef6a1af camera=12:1a072a290ef6a1af shadow=12:1a072a290ef6a1af indirect=12:1a072a290ef6a1af +geom 598: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.1047977 motion [] pieces all=12:d2ca3713572d5eae camera=12:d2ca3713572d5eae shadow=12:d2ca3713572d5eae indirect=12:d2ca3713572d5eae +geom 599: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.83981353 motion [] pieces all=12:8d980a8119c93b32 camera=12:8d980a8119c93b32 shadow=12:8d980a8119c93b32 indirect=12:8d980a8119c93b32 +geom 600: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=12:d69dc8407e39c57d camera=12:d69dc8407e39c57d shadow=12:d69dc8407e39c57d indirect=12:d69dc8407e39c57d +geom 601: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=12:108ece7556e2045d camera=12:108ece7556e2045d shadow=12:108ece7556e2045d indirect=12:108ece7556e2045d +geom 602: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=12:b6f2f6b932607ce5 camera=12:b6f2f6b932607ce5 shadow=12:b6f2f6b932607ce5 indirect=12:b6f2f6b932607ce5 +geom 603: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=12:18f7f442a8f08005 camera=12:18f7f442a8f08005 shadow=12:18f7f442a8f08005 indirect=12:18f7f442a8f08005 +geom 604: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=12:95835634df888e55 camera=12:95835634df888e55 shadow=12:95835634df888e55 indirect=12:95835634df888e55 +geom 605: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=12:26e126fb8d08607d camera=12:26e126fb8d08607d shadow=12:26e126fb8d08607d indirect=12:26e126fb8d08607d +geom 606: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=4:d3ae5d8c61eeefd5 camera=4:d3ae5d8c61eeefd5 shadow=4:d3ae5d8c61eeefd5 indirect=4:d3ae5d8c61eeefd5 +geom 607: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:02dee92ba923d022 camera=2:02dee92ba923d022 shadow=2:02dee92ba923d022 indirect=2:02dee92ba923d022 +geom 608: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:d420bef838b31092 camera=2:d420bef838b31092 shadow=2:d420bef838b31092 indirect=2:d420bef838b31092 +geom 609: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=128:7e7f92bf6cf1e8e1 camera=128:7e7f92bf6cf1e8e1 shadow=128:7e7f92bf6cf1e8e1 indirect=128:7e7f92bf6cf1e8e1 +geom 610: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:5fd3af8a8974e005 camera=2:5fd3af8a8974e005 shadow=2:5fd3af8a8974e005 indirect=2:5fd3af8a8974e005 +geom 611: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:9626b0f2f3e041c5 camera=2:9626b0f2f3e041c5 shadow=2:9626b0f2f3e041c5 indirect=2:9626b0f2f3e041c5 +geom 612: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=12:65eff1dac76e16e5 camera=12:65eff1dac76e16e5 shadow=12:65eff1dac76e16e5 indirect=12:65eff1dac76e16e5 +geom 613: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=12:c5bbf2f135b5e22b camera=12:c5bbf2f135b5e22b shadow=12:c5bbf2f135b5e22b indirect=12:c5bbf2f135b5e22b +geom 614: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:77f8032df1a5e1f5 camera=2:77f8032df1a5e1f5 shadow=2:77f8032df1a5e1f5 indirect=2:77f8032df1a5e1f5 +provenance arc source: /Crate +provenance arc source: /Crate/geo +provenance arc source: /World/dense/Prototypes/pebble +provenance arc source: /World/flat/Prototypes/stone_a +provenance arc source: /_Cube +provenance light /World/Sky: LightOrigin { index: 0, geoms: 614..614 } +provenance geometry 0..500: /World/flat +provenance geometry 500..600: /World/dense +provenance geometry 600..601: /World/pebble/geo +provenance geometry 601..602: /World/away/geo +provenance geometry 602..603: /World/box/geo +provenance geometry 603..604: /World/sunk/geo +provenance geometry 604..605: /World/rock/geo +provenance geometry 605..606: /World/vase/geo +provenance geometry 606..607: /World/steps/geo +provenance geometry 607..608: /World/field/geo +provenance geometry 608..609: /World/slope/geo +provenance geometry 609..610: /World/terrain/geo +provenance geometry 610..611: /World/shelf/geo +provenance geometry 611..612: /World/floor/geo +provenance geometry 612..613: /World/inst +provenance geometry 613..614: /World/crate/geo +provenance geometry 614..615: /World/table/geo +provenance mesh: MeshOrigin { geom_id: 600, slot: 1, baked: false, moving: false } +provenance mesh: MeshOrigin { geom_id: 601, slot: 1, baked: false, moving: false } +provenance mesh: MeshOrigin { geom_id: 602, slot: 1, baked: false, moving: false } +provenance mesh: MeshOrigin { geom_id: 603, slot: 1, baked: false, moving: false } +provenance mesh: MeshOrigin { geom_id: 604, slot: 2, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 605, slot: 3, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 606, slot: 4, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 607, slot: 5, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 608, slot: 6, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 609, slot: 7, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 610, slot: 8, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 611, slot: 9, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 613, slot: 1, baked: false, moving: false } +provenance mesh: MeshOrigin { geom_id: 614, slot: 10, baked: true, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 4345222167175548266, n_points: 8, n_indices: 24, n_uvs: None, smooth: true, material: 0 }), placements: 0, shared: true, displaced: false } +provenance mesh slot 1: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 2634041098053373584, n_points: 8, n_indices: 24, n_uvs: None, smooth: true, material: 0 }), placements: 5, shared: true, displaced: false } +provenance mesh slot 2: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 14470132405950877311, n_points: 8, n_indices: 24, n_uvs: None, smooth: true, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 3: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 1206830347127950734, n_points: 8, n_indices: 24, n_uvs: None, smooth: true, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 4: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 9519870911682368984, n_points: 6, n_indices: 8, n_uvs: None, smooth: true, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 5: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 1341889141698287293, n_points: 4, n_indices: 4, n_uvs: None, smooth: true, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 6: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 1313731086437247865, n_points: 4, n_indices: 4, n_uvs: None, smooth: true, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 7: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 15760070156626746114, n_points: 81, n_indices: 256, n_uvs: None, smooth: true, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 8: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 1050066994217133652, n_points: 4, n_indices: 4, n_uvs: None, smooth: true, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 9: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 14002714535549629103, n_points: 4, n_indices: 4, n_uvs: None, smooth: true, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 10: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 14095911038168715313, n_points: 4, n_indices: 4, n_uvs: None, smooth: true, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: true }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/World/Cam"), cameras: ["/World/Cam"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/World/Cam"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/placed_usda-6fa96be933bc04d8-1.image b/crates/crust-core/tests/data/import_baselines/placed_usda-6fa96be933bc04d8-1.image new file mode 100644 index 000000000..f438d4548 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/placed_usda-6fa96be933bc04d8-1.image @@ -0,0 +1 @@ +48x32 16spp clamp-off 2d0a48edac165805 diff --git a/crates/crust-core/tests/data/import_baselines/placed_usda-7ad6f5aa95ba8499-1.digest b/crates/crust-core/tests/data/import_baselines/placed_usda-7ad6f5aa95ba8499-1.digest new file mode 100644 index 000000000..39ac096fd --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/placed_usda-7ad6f5aa95ba8499-1.digest @@ -0,0 +1,78 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/World/Cam") +camera: Camera { origin: Vec3A(0.0, 4.0, 14.0), lower_left_corner: Vec3A(-6.371167, -0.2474451, 4.0), horizontal: Vec3A(12.742334, 0.0, 0.0), vertical: Vec3A(0.0, 8.49489, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: Some("/Render/settings") +settings: RenderSettings { samples_per_pixel: 128, max_depth: 3, width: 48, height: 32, region: PixelRect { x0: 0, y0: 0, x1: 48, y1: 32 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 18.0, aperture: [20.955, 15.2908], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 10.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/placed.usda", "$DIR/stage.usda", "$DIR/table.usda"], invisible_overrides: Some(0) } +layer: $DIR/crate.usda +layer: $DIR/placed.usda +layer: $DIR/stage.usda +layer: $DIR/table.usda +lights: 1 +light 0: dome name Some("/World/Sky") lpe None pmf 1.0 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 15 geometries, PrimitiveBreakdown { triangles: 166, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 6 } top level, PrimitiveBreakdown { triangles: 178, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 6 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=12:d69dc8407e39c57d camera=12:d69dc8407e39c57d shadow=12:d69dc8407e39c57d indirect=12:d69dc8407e39c57d +geom 1: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=12:108ece7556e2045d camera=12:108ece7556e2045d shadow=12:108ece7556e2045d indirect=12:108ece7556e2045d +geom 2: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=12:b6f2f6b932607ce5 camera=12:b6f2f6b932607ce5 shadow=12:b6f2f6b932607ce5 indirect=12:b6f2f6b932607ce5 +geom 3: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=12:18f7f442a8f08005 camera=12:18f7f442a8f08005 shadow=12:18f7f442a8f08005 indirect=12:18f7f442a8f08005 +geom 4: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=12:95835634df888e55 camera=12:95835634df888e55 shadow=12:95835634df888e55 indirect=12:95835634df888e55 +geom 5: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=12:26e126fb8d08607d camera=12:26e126fb8d08607d shadow=12:26e126fb8d08607d indirect=12:26e126fb8d08607d +geom 6: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=4:d3ae5d8c61eeefd5 camera=4:d3ae5d8c61eeefd5 shadow=4:d3ae5d8c61eeefd5 indirect=4:d3ae5d8c61eeefd5 +geom 7: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:02dee92ba923d022 camera=2:02dee92ba923d022 shadow=2:02dee92ba923d022 indirect=2:02dee92ba923d022 +geom 8: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:d420bef838b31092 camera=2:d420bef838b31092 shadow=2:d420bef838b31092 indirect=2:d420bef838b31092 +geom 9: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=128:7e7f92bf6cf1e8e1 camera=128:7e7f92bf6cf1e8e1 shadow=128:7e7f92bf6cf1e8e1 indirect=128:7e7f92bf6cf1e8e1 +geom 10: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:5fd3af8a8974e005 camera=2:5fd3af8a8974e005 shadow=2:5fd3af8a8974e005 indirect=2:5fd3af8a8974e005 +geom 11: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:9626b0f2f3e041c5 camera=2:9626b0f2f3e041c5 shadow=2:9626b0f2f3e041c5 indirect=2:9626b0f2f3e041c5 +geom 12: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=12:65eff1dac76e16e5 camera=12:65eff1dac76e16e5 shadow=12:65eff1dac76e16e5 indirect=12:65eff1dac76e16e5 +geom 13: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=12:c5bbf2f135b5e22b camera=12:c5bbf2f135b5e22b shadow=12:c5bbf2f135b5e22b indirect=12:c5bbf2f135b5e22b +geom 14: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:77f8032df1a5e1f5 camera=2:77f8032df1a5e1f5 shadow=2:77f8032df1a5e1f5 indirect=2:77f8032df1a5e1f5 +provenance arc source: /Crate +provenance arc source: /Crate/geo +provenance arc source: /_Cube +provenance light /World/Sky: LightOrigin { index: 0, geoms: 14..14 } +provenance geometry 0..1: /World/pebble/geo +provenance geometry 1..2: /World/away/geo +provenance geometry 2..3: /World/box/geo +provenance geometry 3..4: /World/sunk/geo +provenance geometry 4..5: /World/rock/geo +provenance geometry 5..6: /World/vase/geo +provenance geometry 6..7: /World/steps/geo +provenance geometry 7..8: /World/field/geo +provenance geometry 8..9: /World/slope/geo +provenance geometry 9..10: /World/terrain/geo +provenance geometry 10..11: /World/shelf/geo +provenance geometry 11..12: /World/floor/geo +provenance geometry 12..13: /World/inst +provenance geometry 13..14: /World/crate/geo +provenance geometry 14..15: /World/table/geo +provenance mesh: MeshOrigin { geom_id: 0, slot: 0, baked: false, moving: false } +provenance mesh: MeshOrigin { geom_id: 1, slot: 0, baked: false, moving: false } +provenance mesh: MeshOrigin { geom_id: 2, slot: 0, baked: false, moving: false } +provenance mesh: MeshOrigin { geom_id: 3, slot: 0, baked: false, moving: false } +provenance mesh: MeshOrigin { geom_id: 4, slot: 1, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 5, slot: 2, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 6, slot: 3, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 7, slot: 4, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 8, slot: 5, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 9, slot: 6, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 10, slot: 7, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 11, slot: 8, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 13, slot: 0, baked: false, moving: false } +provenance mesh: MeshOrigin { geom_id: 14, slot: 9, baked: true, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 2634041098053373584, n_points: 8, n_indices: 24, n_uvs: None, smooth: true, material: 0 }), placements: 5, shared: true, displaced: false } +provenance mesh slot 1: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 14470132405950877311, n_points: 8, n_indices: 24, n_uvs: None, smooth: true, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 2: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 1206830347127950734, n_points: 8, n_indices: 24, n_uvs: None, smooth: true, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 3: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 9519870911682368984, n_points: 6, n_indices: 8, n_uvs: None, smooth: true, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 4: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 1341889141698287293, n_points: 4, n_indices: 4, n_uvs: None, smooth: true, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 5: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 1313731086437247865, n_points: 4, n_indices: 4, n_uvs: None, smooth: true, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 6: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 15760070156626746114, n_points: 81, n_indices: 256, n_uvs: None, smooth: true, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 7: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 1050066994217133652, n_points: 4, n_indices: 4, n_uvs: None, smooth: true, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 8: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 14002714535549629103, n_points: 4, n_indices: 4, n_uvs: None, smooth: true, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 9: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 14095911038168715313, n_points: 4, n_indices: 4, n_uvs: None, smooth: true, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: true }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/World/Cam"), cameras: ["/World/Cam"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/World/Cam"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/placed_usda-7ad6f5aa95ba8499-1.image b/crates/crust-core/tests/data/import_baselines/placed_usda-7ad6f5aa95ba8499-1.image new file mode 100644 index 000000000..9c00d41e4 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/placed_usda-7ad6f5aa95ba8499-1.image @@ -0,0 +1 @@ +48x32 16spp clamp-off d07945c7d875794f diff --git a/crates/crust-core/tests/data/import_baselines/placed_usda-7c35981b427daf53-1.digest b/crates/crust-core/tests/data/import_baselines/placed_usda-7c35981b427daf53-1.digest new file mode 100644 index 000000000..43ce77028 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/placed_usda-7c35981b427daf53-1.digest @@ -0,0 +1,585 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/World/Cam") +camera: Camera { origin: Vec3A(0.0, 4.0, 14.0), lower_left_corner: Vec3A(-6.371167, -0.2474451, 4.0), horizontal: Vec3A(12.742334, 0.0, 0.0), vertical: Vec3A(0.0, 8.49489, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: Some("/Render/settings") +settings: RenderSettings { samples_per_pixel: 128, max_depth: 3, width: 48, height: 32, region: PixelRect { x0: 0, y0: 0, x1: 48, y1: 32 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 18.0, aperture: [20.955, 15.2908], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 10.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/placed.usda", "$DIR/stage.usda", "$DIR/table.usda"], invisible_overrides: Some(0) } +layer: $DIR/crate.usda +layer: $DIR/placed.usda +layer: $DIR/stage.usda +layer: $DIR/stone_a.usda +layer: $DIR/stone_b.usda +layer: $DIR/table.usda +lights: 1 +light 0: dome name Some("/World/Sky") lpe None pmf 1.0 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 515 geometries, PrimitiveBreakdown { triangles: 166, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 506 } top level, PrimitiveBreakdown { triangles: 202, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 506 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.1761441 motion [] pieces all=12:45a862dded98b1c6 camera=12:45a862dded98b1c6 shadow=12:45a862dded98b1c6 indirect=12:45a862dded98b1c6 +geom 1: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.8810865 motion [] pieces all=12:64944d265981058e camera=12:64944d265981058e shadow=12:64944d265981058e indirect=12:64944d265981058e +geom 2: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0232378 motion [] pieces all=12:3388e3ca138a3f1f camera=12:3388e3ca138a3f1f shadow=12:3388e3ca138a3f1f indirect=12:3388e3ca138a3f1f +geom 3: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.99894494 motion [] pieces all=12:fdfa25d8c193c4a0 camera=12:fdfa25d8c193c4a0 shadow=12:fdfa25d8c193c4a0 indirect=12:fdfa25d8c193c4a0 +geom 4: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.1065642 motion [] pieces all=12:6955ab4220a0f7f0 camera=12:6955ab4220a0f7f0 shadow=12:6955ab4220a0f7f0 indirect=12:6955ab4220a0f7f0 +geom 5: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.80337954 motion [] pieces all=12:e2e3eb04df83a72a camera=12:e2e3eb04df83a72a shadow=12:e2e3eb04df83a72a indirect=12:e2e3eb04df83a72a +geom 6: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0571522 motion [] pieces all=12:61f3b3daf13919ed camera=12:61f3b3daf13919ed shadow=12:61f3b3daf13919ed indirect=12:61f3b3daf13919ed +geom 7: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.9235039 motion [] pieces all=12:67d2180e9e401524 camera=12:67d2180e9e401524 shadow=12:67d2180e9e401524 indirect=12:67d2180e9e401524 +geom 8: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.97259986 motion [] pieces all=12:76d9e29bdce76947 camera=12:76d9e29bdce76947 shadow=12:76d9e29bdce76947 indirect=12:76d9e29bdce76947 +geom 9: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0333868 motion [] pieces all=12:f70acb4c14b57733 camera=12:f70acb4c14b57733 shadow=12:f70acb4c14b57733 indirect=12:f70acb4c14b57733 +geom 10: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.8712479 motion [] pieces all=12:a6e3103831c2bb95 camera=12:a6e3103831c2bb95 shadow=12:a6e3103831c2bb95 indirect=12:a6e3103831c2bb95 +geom 11: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.1695868 motion [] pieces all=12:b68f582acb9488d9 camera=12:b68f582acb9488d9 shadow=12:b68f582acb9488d9 indirect=12:b68f582acb9488d9 +geom 12: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.8319464 motion [] pieces all=12:acbc4ae83f658381 camera=12:acbc4ae83f658381 shadow=12:acbc4ae83f658381 indirect=12:acbc4ae83f658381 +geom 13: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.13118 motion [] pieces all=12:598aa1811e9041e8 camera=12:598aa1811e9041e8 shadow=12:598aa1811e9041e8 indirect=12:598aa1811e9041e8 +geom 14: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0985051 motion [] pieces all=12:e42f85275179f9eb camera=12:e42f85275179f9eb shadow=12:e42f85275179f9eb indirect=12:e42f85275179f9eb +geom 15: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.930394 motion [] pieces all=12:ecc186bbcfc12323 camera=12:ecc186bbcfc12323 shadow=12:ecc186bbcfc12323 indirect=12:ecc186bbcfc12323 +geom 16: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.1146806 motion [] pieces all=12:57da4df43fb578d2 camera=12:57da4df43fb578d2 shadow=12:57da4df43fb578d2 indirect=12:57da4df43fb578d2 +geom 17: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.8209351 motion [] pieces all=12:e25b06971fef82ac camera=12:e25b06971fef82ac shadow=12:e25b06971fef82ac indirect=12:e25b06971fef82ac +geom 18: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0663182 motion [] pieces all=12:b307914e162ebd94 camera=12:b307914e162ebd94 shadow=12:b307914e162ebd94 indirect=12:b307914e162ebd94 +geom 19: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.9115253 motion [] pieces all=12:24a6e636442db05b camera=12:24a6e636442db05b shadow=12:24a6e636442db05b indirect=12:24a6e636442db05b +geom 20: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.1879729 motion [] pieces all=12:481f9cd756cedde0 camera=12:481f9cd756cedde0 shadow=12:481f9cd756cedde0 indirect=12:481f9cd756cedde0 +geom 21: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.8957119 motion [] pieces all=12:2d4663e6184de452 camera=12:2d4663e6184de452 shadow=12:2d4663e6184de452 indirect=12:2d4663e6184de452 +geom 22: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0098108 motion [] pieces all=12:b0bb69961ba75478 camera=12:b0bb69961ba75478 shadow=12:b0bb69961ba75478 indirect=12:b0bb69961ba75478 +geom 23: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.98019165 motion [] pieces all=12:b9afdaa931bffdb6 camera=12:b9afdaa931bffdb6 shadow=12:b9afdaa931bffdb6 indirect=12:b9afdaa931bffdb6 +geom 24: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0813562 motion [] pieces all=12:f5d0fb106b756265 camera=12:f5d0fb106b756265 shadow=12:f5d0fb106b756265 indirect=12:f5d0fb106b756265 +geom 25: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.94515204 motion [] pieces all=12:089190d039cd8f05 camera=12:089190d039cd8f05 shadow=12:089190d039cd8f05 indirect=12:089190d039cd8f05 +geom 26: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.84345704 motion [] pieces all=12:e26f0d45af850c90 camera=12:e26f0d45af850c90 shadow=12:e26f0d45af850c90 indirect=12:e26f0d45af850c90 +geom 27: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.1462855 motion [] pieces all=12:b6f87466c44a00c9 camera=12:b6f87466c44a00c9 shadow=12:b6f87466c44a00c9 indirect=12:b6f87466c44a00c9 +geom 28: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.1544222 motion [] pieces all=12:797d242554fe864a camera=12:797d242554fe864a shadow=12:797d242554fe864a indirect=12:797d242554fe864a +geom 29: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.86153686 motion [] pieces all=12:be846117a4ea7801 camera=12:be846117a4ea7801 shadow=12:be846117a4ea7801 indirect=12:be846117a4ea7801 +geom 30: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0419827 motion [] pieces all=12:6ddf27426dad80b8 camera=12:6ddf27426dad80b8 shadow=12:6ddf27426dad80b8 indirect=12:6ddf27426dad80b8 +geom 31: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.9549145 motion [] pieces all=12:3f3d2de984f016e1 camera=12:3f3d2de984f016e1 shadow=12:3f3d2de984f016e1 indirect=12:3f3d2de984f016e1 +geom 32: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.1013982 motion [] pieces all=12:d325740a4c504329 camera=12:d325740a4c504329 shadow=12:d325740a4c504329 indirect=12:d325740a4c504329 +geom 33: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.8114375 motion [] pieces all=12:f529c99ebd35ea5e camera=12:f529c99ebd35ea5e shadow=12:f529c99ebd35ea5e indirect=12:f529c99ebd35ea5e +geom 34: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0561118 motion [] pieces all=12:3b32daf9fb97191e camera=12:3b32daf9fb97191e shadow=12:3b32daf9fb97191e indirect=12:3b32daf9fb97191e +geom 35: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.91436315 motion [] pieces all=12:9336514ad2a50746 camera=12:9336514ad2a50746 shadow=12:9336514ad2a50746 indirect=12:9336514ad2a50746 +geom 36: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.8854387 motion [] pieces all=12:ee06eb3bb41cf5e3 camera=12:ee06eb3bb41cf5e3 shadow=12:ee06eb3bb41cf5e3 indirect=12:ee06eb3bb41cf5e3 +geom 37: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.1826364 motion [] pieces all=12:6ab824c87ddbb42e camera=12:6ab824c87ddbb42e shadow=12:6ab824c87ddbb42e indirect=12:6ab824c87ddbb42e +geom 38: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.98780096 motion [] pieces all=12:3e246edc11785421 camera=12:3e246edc11785421 shadow=12:3e246edc11785421 indirect=12:3e246edc11785421 +geom 39: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0161881 motion [] pieces all=12:460bcfda839b7475 camera=12:460bcfda839b7475 shadow=12:460bcfda839b7475 indirect=12:460bcfda839b7475 +geom 40: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.1313198 motion [] pieces all=12:1df02a18f6ef0cb0 camera=12:1df02a18f6ef0cb0 shadow=12:1df02a18f6ef0cb0 indirect=12:1df02a18f6ef0cb0 +geom 41: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.8307075 motion [] pieces all=12:e5bd325c9cc63258 camera=12:e5bd325c9cc63258 shadow=12:e5bd325c9cc63258 indirect=12:e5bd325c9cc63258 +geom 42: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.93608296 motion [] pieces all=12:eaf20bfe2d9d2ea8 camera=12:eaf20bfe2d9d2ea8 shadow=12:eaf20bfe2d9d2ea8 indirect=12:eaf20bfe2d9d2ea8 +geom 43: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0927486 motion [] pieces all=12:0b46814b8788d10c camera=12:0b46814b8788d10c shadow=12:0b46814b8788d10c indirect=12:0b46814b8788d10c +geom 44: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.9677548 motion [] pieces all=12:a11085306be96c79 camera=12:a11085306be96c79 shadow=12:a11085306be96c79 indirect=12:a11085306be96c79 +geom 45: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0287622 motion [] pieces all=12:a2e4e83ee9235718 camera=12:a2e4e83ee9235718 shadow=12:a2e4e83ee9235718 indirect=12:a2e4e83ee9235718 +geom 46: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.867445 motion [] pieces all=12:52a12ca2ad2269a0 camera=12:52a12ca2ad2269a0 shadow=12:52a12ca2ad2269a0 indirect=12:52a12ca2ad2269a0 +geom 47: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.1652948 motion [] pieces all=12:8ac666cdc9aed126 camera=12:8ac666cdc9aed126 shadow=12:8ac666cdc9aed126 indirect=12:8ac666cdc9aed126 +geom 48: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.1573718 motion [] pieces all=12:dc22e4e0c3a563c5 camera=12:dc22e4e0c3a563c5 shadow=12:dc22e4e0c3a563c5 indirect=12:dc22e4e0c3a563c5 +geom 49: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.8516039 motion [] pieces all=12:d5439bf95adb5d29 camera=12:d5439bf95adb5d29 shadow=12:d5439bf95adb5d29 indirect=12:d5439bf95adb5d29 +geom 50: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.957956 motion [] pieces all=12:a2366eb57be17947 camera=12:a2366eb57be17947 shadow=12:a2366eb57be17947 indirect=12:a2366eb57be17947 +geom 51: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0476611 motion [] pieces all=12:aa424a427bf1da18 camera=12:aa424a427bf1da18 shadow=12:aa424a427bf1da18 indirect=12:aa424a427bf1da18 +geom 52: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.94141537 motion [] pieces all=12:439332df7477a2f0 camera=12:439332df7477a2f0 shadow=12:439332df7477a2f0 indirect=12:439332df7477a2f0 +geom 53: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0779837 motion [] pieces all=12:050de2f979a00214 camera=12:050de2f979a00214 shadow=12:050de2f979a00214 indirect=12:050de2f979a00214 +geom 54: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.84913945 motion [] pieces all=12:d359da50fe63fc4e camera=12:d359da50fe63fc4e shadow=12:d359da50fe63fc4e indirect=12:d359da50fe63fc4e +geom 55: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.1388466 motion [] pieces all=12:f274bc0e146ac6ec camera=12:f274bc0e146ac6ec shadow=12:f274bc0e146ac6ec indirect=12:f274bc0e146ac6ec +geom 56: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.81745243 motion [] pieces all=12:59b88eaab766334e camera=12:59b88eaab766334e shadow=12:59b88eaab766334e indirect=12:59b88eaab766334e +geom 57: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.1221887 motion [] pieces all=12:4391248690d8a96c camera=12:4391248690d8a96c shadow=12:4391248690d8a96c indirect=12:4391248690d8a96c +geom 58: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0737523 motion [] pieces all=12:5ca2a2dc5d2ca537 camera=12:5ca2a2dc5d2ca537 shadow=12:5ca2a2dc5d2ca537 indirect=12:5ca2a2dc5d2ca537 +geom 59: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.90149456 motion [] pieces all=12:c6c2782f00a068ab camera=12:c6c2782f00a068ab shadow=12:c6c2782f00a068ab indirect=12:c6c2782f00a068ab +geom 60: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.98508954 motion [] pieces all=12:75bc6455fa6a273c camera=12:75bc6455fa6a273c shadow=12:75bc6455fa6a273c indirect=12:75bc6455fa6a273c +geom 61: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0035064 motion [] pieces all=12:197384b40f7a87e2 camera=12:197384b40f7a87e2 shadow=12:197384b40f7a87e2 indirect=12:197384b40f7a87e2 +geom 62: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.8923537 motion [] pieces all=12:2b6626eb636f521c camera=12:2b6626eb636f521c shadow=12:2b6626eb636f521c indirect=12:2b6626eb636f521c +geom 63: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.1949198 motion [] pieces all=12:61af9c9b07f1116d camera=12:61af9c9b07f1116d shadow=12:61af9c9b07f1116d indirect=12:61af9c9b07f1116d +geom 64: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.1920719 motion [] pieces all=12:cfd846df87adb0da camera=12:cfd846df87adb0da shadow=12:cfd846df87adb0da indirect=12:cfd846df87adb0da +geom 65: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.8984334 motion [] pieces all=12:333d41a0dcb2e201 camera=12:333d41a0dcb2e201 shadow=12:333d41a0dcb2e201 indirect=12:333d41a0dcb2e201 +geom 66: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.9751323 motion [] pieces all=12:b7bdd232140c4521 camera=12:b7bdd232140c4521 shadow=12:b7bdd232140c4521 indirect=12:b7bdd232140c4521 +geom 67: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0087382 motion [] pieces all=12:d13ed6cfaf8f058c camera=12:d13ed6cfaf8f058c shadow=12:d13ed6cfaf8f058c indirect=12:d13ed6cfaf8f058c +geom 68: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0648361 motion [] pieces all=12:c21a4efa1141550f camera=12:c21a4efa1141550f shadow=12:c21a4efa1141550f indirect=12:c21a4efa1141550f +geom 69: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.90664405 motion [] pieces all=12:c2720b1e01aad493 camera=12:c2720b1e01aad493 shadow=12:c2720b1e01aad493 indirect=12:c2720b1e01aad493 +geom 70: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.1171777 motion [] pieces all=12:fad9d3b4cef64b24 camera=12:fad9d3b4cef64b24 shadow=12:fad9d3b4cef64b24 indirect=12:fad9d3b4cef64b24 +geom 71: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.824887 motion [] pieces all=12:f4410e325cd0afb1 camera=12:f4410e325cd0afb1 shadow=12:f4410e325cd0afb1 indirect=12:f4410e325cd0afb1 +geom 72: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.9516001 motion [] pieces all=12:cc84d88f692e85a6 camera=12:cc84d88f692e85a6 shadow=12:cc84d88f692e85a6 indirect=12:cc84d88f692e85a6 +geom 73: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0400816 motion [] pieces all=12:e22ab20fe11d8cfe camera=12:e22ab20fe11d8cfe shadow=12:e22ab20fe11d8cfe indirect=12:e22ab20fe11d8cfe +geom 74: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.8592531 motion [] pieces all=12:13c0a13a86e249ef camera=12:13c0a13a86e249ef shadow=12:13c0a13a86e249ef indirect=12:13c0a13a86e249ef +geom 75: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.1510249 motion [] pieces all=12:1937c664f4367544 camera=12:1937c664f4367544 shadow=12:1937c664f4367544 indirect=12:1937c664f4367544 +geom 76: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0866565 motion [] pieces all=12:5db5fb4d3b4d5b35 camera=12:5db5fb4d3b4d5b35 shadow=12:5db5fb4d3b4d5b35 indirect=12:5db5fb4d3b4d5b35 +geom 77: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.9487157 motion [] pieces all=12:d58005e750fb4342 camera=12:d58005e750fb4342 shadow=12:d58005e750fb4342 indirect=12:d58005e750fb4342 +geom 78: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.1492283 motion [] pieces all=12:0342164286461ee3 camera=12:0342164286461ee3 shadow=12:0342164286461ee3 indirect=12:0342164286461ee3 +geom 79: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.83977586 motion [] pieces all=12:c807827e3075e055 camera=12:c807827e3075e055 shadow=12:c807827e3075e055 indirect=12:c807827e3075e055 +geom 80: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0217434 motion [] pieces all=12:5285ac30cc4da062 camera=12:5285ac30cc4da062 shadow=12:5285ac30cc4da062 indirect=12:5285ac30cc4da062 +geom 81: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.9952757 motion [] pieces all=12:10bc56ab6511ed11 camera=12:10bc56ab6511ed11 shadow=12:10bc56ab6511ed11 indirect=12:10bc56ab6511ed11 +geom 82: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.87789065 motion [] pieces all=12:b7b3cff366213430 camera=12:b7b3cff366213430 shadow=12:b7b3cff366213430 indirect=12:b7b3cff366213430 +geom 83: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.179131 motion [] pieces all=12:26dba7352b5248dd camera=12:26dba7352b5248dd shadow=12:26dba7352b5248dd indirect=12:26dba7352b5248dd +geom 84: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.80048686 motion [] pieces all=12:ca11206893156c4a camera=12:ca11206893156c4a shadow=12:ca11206893156c4a indirect=12:ca11206893156c4a +geom 85: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.1101823 motion [] pieces all=12:956ae996e038f15c camera=12:956ae996e038f15c shadow=12:956ae996e038f15c indirect=12:956ae996e038f15c +geom 86: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.92086023 motion [] pieces all=12:bb66f238124bf21c camera=12:bb66f238124bf21c shadow=12:bb66f238124bf21c indirect=12:bb66f238124bf21c +geom 87: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0607451 motion [] pieces all=12:bfb452bde61271c1 camera=12:bfb452bde61271c1 shadow=12:bfb452bde61271c1 indirect=12:bfb452bde61271c1 +geom 88: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.1730204 motion [] pieces all=12:4202277f53e57a26 camera=12:4202277f53e57a26 shadow=12:4202277f53e57a26 indirect=12:4202277f53e57a26 +geom 89: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.8726802 motion [] pieces all=12:bfff37b52c3695b3 camera=12:bfff37b52c3695b3 shadow=12:bfff37b52c3695b3 indirect=12:bfff37b52c3695b3 +geom 90: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0355178 motion [] pieces all=12:d92670a1b5505f3f camera=12:d92670a1b5505f3f shadow=12:d92670a1b5505f3f indirect=12:d92670a1b5505f3f +geom 91: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.97155887 motion [] pieces all=12:038043fc4d8f3922 camera=12:038043fc4d8f3922 shadow=12:038043fc4d8f3922 indirect=12:038043fc4d8f3922 +geom 92: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.1275393 motion [] pieces all=12:21160187a4422810 camera=12:21160187a4422810 shadow=12:21160187a4422810 indirect=12:21160187a4422810 +geom 93: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.83525693 motion [] pieces all=12:222fd24745b9a688 camera=12:222fd24745b9a688 shadow=12:222fd24745b9a688 indirect=12:222fd24745b9a688 +geom 94: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0946484 motion [] pieces all=12:b93a89503d2db429 camera=12:b93a89503d2db429 shadow=12:b93a89503d2db429 indirect=12:b93a89503d2db429 +geom 95: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.92521805 motion [] pieces all=12:9deb2e0bd53286f5 camera=12:9deb2e0bd53286f5 shadow=12:9deb2e0bd53286f5 indirect=12:9deb2e0bd53286f5 +geom 96: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0792248 motion [] pieces all=12:c39dad0894dc3c01 camera=12:c39dad0894dc3c01 shadow=12:c39dad0894dc3c01 indirect=12:c39dad0894dc3c01 +geom 97: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.938952 motion [] pieces all=12:82dba3e562b9171c camera=12:82dba3e562b9171c shadow=12:82dba3e562b9171c indirect=12:82dba3e562b9171c +geom 98: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.8466961 motion [] pieces all=12:5771a39944397bbc camera=12:5771a39944397bbc shadow=12:5771a39944397bbc indirect=12:5771a39944397bbc +geom 99: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.1409111 motion [] pieces all=12:f4f5b1d34830c065 camera=12:f4f5b1d34830c065 shadow=12:f4f5b1d34830c065 indirect=12:f4f5b1d34830c065 +geom 100: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.1619297 motion [] pieces all=12:2ac55dd6a5129a82 camera=12:2ac55dd6a5129a82 shadow=12:2ac55dd6a5129a82 indirect=12:2ac55dd6a5129a82 +geom 101: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.8545255 motion [] pieces all=12:3318ba1c1ea6cb67 camera=12:3318ba1c1ea6cb67 shadow=12:3318ba1c1ea6cb67 indirect=12:3318ba1c1ea6cb67 +geom 102: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0461638 motion [] pieces all=12:abd06b6ac0d101a8 camera=12:abd06b6ac0d101a8 shadow=12:abd06b6ac0d101a8 indirect=12:abd06b6ac0d101a8 +geom 103: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.95997083 motion [] pieces all=12:0e766dd59c7864ea camera=12:0e766dd59c7864ea shadow=12:0e766dd59c7864ea indirect=12:0e766dd59c7864ea +geom 104: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.9838973 motion [] pieces all=12:4e51be9913a19574 camera=12:4e51be9913a19574 shadow=12:4e51be9913a19574 indirect=12:4e51be9913a19574 +geom 105: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0016983 motion [] pieces all=12:205b772513a5b2d0 camera=12:205b772513a5b2d0 shadow=12:205b772513a5b2d0 indirect=12:205b772513a5b2d0 +geom 106: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.1974854 motion [] pieces all=12:aafd38f582755d75 camera=12:aafd38f582755d75 shadow=12:aafd38f582755d75 indirect=12:aafd38f582755d75 +geom 107: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.89059156 motion [] pieces all=12:5e1c6ed9efae70da camera=12:5e1c6ed9efae70da shadow=12:5e1c6ed9efae70da indirect=12:5e1c6ed9efae70da +geom 108: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.1189466 motion [] pieces all=12:1ccc269c6db79208 camera=12:1ccc269c6db79208 shadow=12:1ccc269c6db79208 indirect=12:1ccc269c6db79208 +geom 109: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.81325066 motion [] pieces all=12:13bc64f0b3663db5 camera=12:13bc64f0b3663db5 shadow=12:13bc64f0b3663db5 indirect=12:13bc64f0b3663db5 +geom 110: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.069818 motion [] pieces all=12:932fe7987a89653d camera=12:932fe7987a89653d shadow=12:932fe7987a89653d indirect=12:932fe7987a89653d +geom 111: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.9038211 motion [] pieces all=12:90f5b972915f93b4 camera=12:90f5b972915f93b4 shadow=12:90f5b972915f93b4 indirect=12:90f5b972915f93b4 +geom 112: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.1853997 motion [] pieces all=12:8179b93651694931 camera=12:8179b93651694931 shadow=12:8179b93651694931 indirect=12:8179b93651694931 +geom 113: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.88160837 motion [] pieces all=12:069fc554995e3ee7 camera=12:069fc554995e3ee7 shadow=12:069fc554995e3ee7 indirect=12:069fc554995e3ee7 +geom 114: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0146524 motion [] pieces all=12:e176080f78b1eb15 camera=12:e176080f78b1eb15 shadow=12:e176080f78b1eb15 indirect=12:e176080f78b1eb15 +geom 115: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.99161226 motion [] pieces all=12:ef58b8a0de63d3c4 camera=12:ef58b8a0de63d3c4 shadow=12:ef58b8a0de63d3c4 indirect=12:ef58b8a0de63d3c4 +geom 116: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0511867 motion [] pieces all=12:4b16770c04cd474b camera=12:4b16770c04cd474b shadow=12:4b16770c04cd474b indirect=12:4b16770c04cd474b +geom 117: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.9171676 motion [] pieces all=12:609f6f3ddcf1af6d camera=12:609f6f3ddcf1af6d shadow=12:609f6f3ddcf1af6d indirect=12:609f6f3ddcf1af6d +geom 118: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.80908626 motion [] pieces all=12:4c035f8f3318d2f6 camera=12:4c035f8f3318d2f6 shadow=12:4c035f8f3318d2f6 indirect=12:4c035f8f3318d2f6 +geom 119: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.103263 motion [] pieces all=12:700889d040a6e4dd camera=12:700889d040a6e4dd shadow=12:700889d040a6e4dd indirect=12:700889d040a6e4dd +geom 120: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.8642026 motion [] pieces all=12:6e10e505ba86c48e camera=12:6e10e505ba86c48e shadow=12:6e10e505ba86c48e indirect=12:6e10e505ba86c48e +geom 121: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.1678903 motion [] pieces all=12:3582f8fba0915f4a camera=12:3582f8fba0915f4a shadow=12:3582f8fba0915f4a indirect=12:3582f8fba0915f4a +geom 122: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.9633117 motion [] pieces all=12:2040ef2ac8c3a93d camera=12:2040ef2ac8c3a93d shadow=12:2040ef2ac8c3a93d indirect=12:2040ef2ac8c3a93d +geom 123: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0253445 motion [] pieces all=12:a91be1fa2268d70b camera=12:a91be1fa2268d70b shadow=12:a91be1fa2268d70b indirect=12:a91be1fa2268d70b +geom 124: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.13635 motion [] pieces all=12:9e7372e64ec5bb9d camera=12:9e7372e64ec5bb9d shadow=12:9e7372e64ec5bb9d indirect=12:9e7372e64ec5bb9d +geom 125: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.8252184 motion [] pieces all=12:27afe71487c8acfc camera=12:27afe71487c8acfc shadow=12:27afe71487c8acfc indirect=12:27afe71487c8acfc +geom 126: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0885826 motion [] pieces all=12:c9ce7a955379bf47 camera=12:c9ce7a955379bf47 shadow=12:c9ce7a955379bf47 indirect=12:c9ce7a955379bf47 +geom 127: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.9313929 motion [] pieces all=12:f936746ea9fdaa67 camera=12:f936746ea9fdaa67 shadow=12:f936746ea9fdaa67 indirect=12:f936746ea9fdaa67 +geom 128: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0906614 motion [] pieces all=12:e6990c8db4ea9e79 camera=12:e6990c8db4ea9e79 shadow=12:e6990c8db4ea9e79 indirect=12:e6990c8db4ea9e79 +geom 129: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.93495494 motion [] pieces all=12:75b610907ba3ea9b camera=12:75b610907ba3ea9b shadow=12:75b610907ba3ea9b indirect=12:75b610907ba3ea9b +geom 130: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.82858384 motion [] pieces all=12:e78b8cafbe306a32 camera=12:e78b8cafbe306a32 shadow=12:e78b8cafbe306a32 indirect=12:e78b8cafbe306a32 +geom 131: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.1339966 motion [] pieces all=12:b9ac9a14840ed1f6 camera=12:b9ac9a14840ed1f6 shadow=12:b9ac9a14840ed1f6 indirect=12:b9ac9a14840ed1f6 +geom 132: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.8659113 motion [] pieces all=12:b1a9a739c1c000bc camera=12:b1a9a739c1c000bc shadow=12:b1a9a739c1c000bc indirect=12:b1a9a739c1c000bc +geom 133: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.1626551 motion [] pieces all=12:9f5c63d26cf251c1 camera=12:9f5c63d26cf251c1 shadow=12:9f5c63d26cf251c1 indirect=12:9f5c63d26cf251c1 +geom 134: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.96570367 motion [] pieces all=12:e82835f20fda3a2d camera=12:e82835f20fda3a2d shadow=12:e82835f20fda3a2d indirect=12:e82835f20fda3a2d +geom 135: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0299364 motion [] pieces all=12:a9c34018dedecc29 camera=12:a9c34018dedecc29 shadow=12:a9c34018dedecc29 indirect=12:a9c34018dedecc29 +geom 136: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0544772 motion [] pieces all=12:f171c63901b9cd24 camera=12:f171c63901b9cd24 shadow=12:f171c63901b9cd24 indirect=12:f171c63901b9cd24 +geom 137: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.9139284 motion [] pieces all=12:66942b3dbac18127 camera=12:66942b3dbac18127 shadow=12:66942b3dbac18127 indirect=12:66942b3dbac18127 +geom 138: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.103051 motion [] pieces all=12:0c9467685e6faf9b camera=12:0c9467685e6faf9b shadow=12:0c9467685e6faf9b indirect=12:0c9467685e6faf9b +geom 139: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.81037587 motion [] pieces all=12:4628207e87532cd9 camera=12:4628207e87532cd9 shadow=12:4628207e87532cd9 indirect=12:4628207e87532cd9 +geom 140: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0183249 motion [] pieces all=12:865fd372ca38e7d5 camera=12:865fd372ca38e7d5 shadow=12:865fd372ca38e7d5 indirect=12:865fd372ca38e7d5 +geom 141: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.99033916 motion [] pieces all=12:fd4547bf3f39772e camera=12:fd4547bf3f39772e shadow=12:fd4547bf3f39772e indirect=12:fd4547bf3f39772e +geom 142: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.1833695 motion [] pieces all=12:4718ab9f74de7af5 camera=12:4718ab9f74de7af5 shadow=12:4718ab9f74de7af5 indirect=12:4718ab9f74de7af5 +geom 143: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.8870931 motion [] pieces all=12:f073ad6af47da1b9 camera=12:f073ad6af47da1b9 shadow=12:f073ad6af47da1b9 indirect=12:f073ad6af47da1b9 +geom 144: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0751863 motion [] pieces all=12:469243371e3601c4 camera=12:469243371e3601c4 shadow=12:469243371e3601c4 indirect=12:469243371e3601c4 +geom 145: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.94338113 motion [] pieces all=12:242ede1ac82d2838 camera=12:242ede1ac82d2838 shadow=12:242ede1ac82d2838 indirect=12:242ede1ac82d2838 +geom 146: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.1404334 motion [] pieces all=12:6ae0e374492b1345 camera=12:6ae0e374492b1345 shadow=12:6ae0e374492b1345 indirect=12:6ae0e374492b1345 +geom 147: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.84811646 motion [] pieces all=12:7fc28f36f60f9e79 camera=12:7fc28f36f60f9e79 shadow=12:7fc28f36f60f9e79 indirect=12:7fc28f36f60f9e79 +geom 148: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.1578814 motion [] pieces all=12:004bab5661b3c514 camera=12:004bab5661b3c514 shadow=12:004bab5661b3c514 indirect=12:004bab5661b3c514 +geom 149: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.8510541 motion [] pieces all=12:06ee30278c301b97 camera=12:06ee30278c301b97 shadow=12:06ee30278c301b97 indirect=12:06ee30278c301b97 +geom 150: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.95639116 motion [] pieces all=12:0cc69f7eab6608d5 camera=12:0cc69f7eab6608d5 shadow=12:0cc69f7eab6608d5 indirect=12:0cc69f7eab6608d5 +geom 151: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0488136 motion [] pieces all=12:84683631bf3f2d7f camera=12:84683631bf3f2d7f shadow=12:84683631bf3f2d7f indirect=12:84683631bf3f2d7f +geom 152: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.1240493 motion [] pieces all=12:09e0339043c05885 camera=12:09e0339043c05885 shadow=12:09e0339043c05885 indirect=12:09e0339043c05885 +geom 153: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.81715965 motion [] pieces all=12:baff44b23fa2fe8c camera=12:baff44b23fa2fe8c shadow=12:baff44b23fa2fe8c indirect=12:baff44b23fa2fe8c +geom 154: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.072348 motion [] pieces all=12:7f07f015aba3675f camera=12:7f07f015aba3675f shadow=12:7f07f015aba3675f indirect=12:7f07f015aba3675f +geom 155: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.9028523 motion [] pieces all=12:e544345b30b64bce camera=12:e544345b30b64bce shadow=12:e544345b30b64bce indirect=12:e544345b30b64bce +geom 156: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.195409 motion [] pieces all=12:bf44779c62a0d1d9 camera=12:bf44779c62a0d1d9 shadow=12:bf44779c62a0d1d9 indirect=12:bf44779c62a0d1d9 +geom 157: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.8909322 motion [] pieces all=12:d9444d58a4aa29bf camera=12:d9444d58a4aa29bf shadow=12:d9444d58a4aa29bf indirect=12:d9444d58a4aa29bf +geom 158: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0053203 motion [] pieces all=12:f5a72299b44a6f83 camera=12:f5a72299b44a6f83 shadow=12:f5a72299b44a6f83 indirect=12:f5a72299b44a6f83 +geom 159: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.9874529 motion [] pieces all=12:478c430d181f0449 camera=12:478c430d181f0449 shadow=12:478c430d181f0449 indirect=12:478c430d181f0449 +geom 160: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.833996 motion [] pieces all=12:4f2c575953df9f82 camera=12:4f2c575953df9f82 shadow=12:4f2c575953df9f82 indirect=12:4f2c575953df9f82 +geom 161: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.129332 motion [] pieces all=12:858c4460ee11a801 camera=12:858c4460ee11a801 shadow=12:858c4460ee11a801 indirect=12:858c4460ee11a801 +geom 162: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.9295599 motion [] pieces all=12:e49c9cd7bb7700e3 camera=12:e49c9cd7bb7700e3 shadow=12:e49c9cd7bb7700e3 indirect=12:e49c9cd7bb7700e3 +geom 163: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0982622 motion [] pieces all=12:dc41ad73cd114385 camera=12:dc41ad73cd114385 shadow=12:dc41ad73cd114385 indirect=12:dc41ad73cd114385 +geom 164: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.97451484 motion [] pieces all=12:09af8565fc3d201d camera=12:09af8565fc3d201d shadow=12:09af8565fc3d201d indirect=12:09af8565fc3d201d +geom 165: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0320674 motion [] pieces all=12:9f9b6a360e10adbb camera=12:9f9b6a360e10adbb shadow=12:9f9b6a360e10adbb indirect=12:9f9b6a360e10adbb +geom 166: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.1709979 motion [] pieces all=12:99d2f51f4821115d camera=12:99d2f51f4821115d shadow=12:99d2f51f4821115d indirect=12:99d2f51f4821115d +geom 167: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.8691917 motion [] pieces all=12:0d56e690544efec0 camera=12:0d56e690544efec0 shadow=12:0d56e690544efec0 indirect=12:0d56e690544efec0 +geom 168: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.87965363 motion [] pieces all=12:827e12ddbf252fb5 camera=12:827e12ddbf252fb5 shadow=12:827e12ddbf252fb5 indirect=12:827e12ddbf252fb5 +geom 169: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.1770281 motion [] pieces all=12:88a6fafd5aaa039d camera=12:88a6fafd5aaa039d shadow=12:88a6fafd5aaa039d indirect=12:88a6fafd5aaa039d +geom 170: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.9975212 motion [] pieces all=12:f46016e89c458233 camera=12:f46016e89c458233 shadow=12:f46016e89c458233 indirect=12:f46016e89c458233 +geom 171: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0249971 motion [] pieces all=12:d662864dd505c55e camera=12:d662864dd505c55e shadow=12:d662864dd505c55e indirect=12:d662864dd505c55e +geom 172: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.92243314 motion [] pieces all=12:f342c3a2ed6b0950 camera=12:f342c3a2ed6b0950 shadow=12:f342c3a2ed6b0950 indirect=12:f342c3a2ed6b0950 +geom 173: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0585103 motion [] pieces all=12:ee7ff15f2424922f camera=12:ee7ff15f2424922f shadow=12:ee7ff15f2424922f indirect=12:ee7ff15f2424922f +geom 174: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.1082776 motion [] pieces all=12:86ef859898372a65 camera=12:86ef859898372a65 shadow=12:86ef859898372a65 indirect=12:86ef859898372a65 +geom 175: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.80569136 motion [] pieces all=12:9ec313ad6c2136d1 camera=12:9ec313ad6c2136d1 shadow=12:9ec313ad6c2136d1 indirect=12:9ec313ad6c2136d1 +geom 176: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.9787432 motion [] pieces all=12:2dde1f02614bce01 camera=12:2dde1f02614bce01 shadow=12:2dde1f02614bce01 indirect=12:2dde1f02614bce01 +geom 177: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0118738 motion [] pieces all=12:aafadba605d03110 camera=12:aafadba605d03110 shadow=12:aafadba605d03110 indirect=12:aafadba605d03110 +geom 178: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.89458597 motion [] pieces all=12:21e27892f962ac44 camera=12:21e27892f962ac44 shadow=12:21e27892f962ac44 indirect=12:21e27892f962ac44 +geom 179: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.190431 motion [] pieces all=12:6675c70617e67d8a camera=12:6675c70617e67d8a shadow=12:6675c70617e67d8a indirect=12:6675c70617e67d8a +geom 180: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0687202 motion [] pieces all=12:c5167e2e7d81c2ff camera=12:c5167e2e7d81c2ff shadow=12:c5167e2e7d81c2ff indirect=12:c5167e2e7d81c2ff +geom 181: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.91078526 motion [] pieces all=12:48e2cb88cfa05576 camera=12:48e2cb88cfa05576 shadow=12:48e2cb88cfa05576 indirect=12:48e2cb88cfa05576 +geom 182: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.1132085 motion [] pieces all=12:043069344a3076c2 camera=12:043069344a3076c2 shadow=12:043069344a3076c2 indirect=12:043069344a3076c2 +geom 183: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.81958956 motion [] pieces all=12:b6a3b6188b4b31bf camera=12:b6a3b6188b4b31bf shadow=12:b6a3b6188b4b31bf indirect=12:b6a3b6188b4b31bf +geom 184: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.95427895 motion [] pieces all=12:c001bd0dad9ff844 camera=12:c001bd0dad9ff844 shadow=12:c001bd0dad9ff844 indirect=12:c001bd0dad9ff844 +geom 185: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0434186 motion [] pieces all=12:0b59ff7e43848943 camera=12:0b59ff7e43848943 shadow=12:0b59ff7e43848943 indirect=12:0b59ff7e43848943 +geom 186: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.1551938 motion [] pieces all=12:5218f56e8786a8d1 camera=12:5218f56e8786a8d1 shadow=12:5218f56e8786a8d1 indirect=12:5218f56e8786a8d1 +geom 187: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.8595143 motion [] pieces all=12:4a7806cbcbb88531 camera=12:4a7806cbcbb88531 shadow=12:4a7806cbcbb88531 indirect=12:4a7806cbcbb88531 +geom 188: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.8408943 motion [] pieces all=12:7f3b442d9e722de1 camera=12:7f3b442d9e722de1 shadow=12:7f3b442d9e722de1 indirect=12:7f3b442d9e722de1 +geom 189: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.1452442 motion [] pieces all=12:e0d5bbe9bb208a1d camera=12:e0d5bbe9bb208a1d shadow=12:e0d5bbe9bb208a1d indirect=12:e0d5bbe9bb208a1d +geom 190: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.9464676 motion [] pieces all=12:b085d7918bf6355b camera=12:b085d7918bf6355b shadow=12:b085d7918bf6355b indirect=12:b085d7918bf6355b +geom 191: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0834273 motion [] pieces all=12:abe6c6954e3382a9 camera=12:abe6c6954e3382a9 shadow=12:abe6c6954e3382a9 indirect=12:abe6c6954e3382a9 +geom 192: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.8574602 motion [] pieces all=12:71ee11b13c594ff9 camera=12:71ee11b13c594ff9 shadow=12:71ee11b13c594ff9 indirect=12:71ee11b13c594ff9 +geom 193: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.151815 motion [] pieces all=12:dbe2a094f9f5dd6a camera=12:dbe2a094f9f5dd6a shadow=12:dbe2a094f9f5dd6a indirect=12:dbe2a094f9f5dd6a +geom 194: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0380479 motion [] pieces all=12:287aaeeaee0c366b camera=12:287aaeeaee0c366b shadow=12:287aaeeaee0c366b indirect=12:287aaeeaee0c366b +geom 195: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.95154804 motion [] pieces all=12:4846d4ce61cd070a camera=12:4846d4ce61cd070a shadow=12:4846d4ce61cd070a indirect=12:4846d4ce61cd070a +geom 196: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0853423 motion [] pieces all=12:668675de6db22ea9 camera=12:668675de6db22ea9 shadow=12:668675de6db22ea9 indirect=12:668675de6db22ea9 +geom 197: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.9481686 motion [] pieces all=12:b2176c9e3a8bd6be camera=12:b2176c9e3a8bd6be shadow=12:b2176c9e3a8bd6be indirect=12:b2176c9e3a8bd6be +geom 198: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.148388 motion [] pieces all=12:1b5bfe08d8aecf46 camera=12:1b5bfe08d8aecf46 shadow=12:1b5bfe08d8aecf46 indirect=12:1b5bfe08d8aecf46 +geom 199: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.8388503 motion [] pieces all=12:ed6a27aa851d98b4 camera=12:ed6a27aa851d98b4 shadow=12:ed6a27aa851d98b4 indirect=12:ed6a27aa851d98b4 +geom 200: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.1177161 motion [] pieces all=12:477f446ff91418fe camera=12:477f446ff91418fe shadow=12:477f446ff91418fe indirect=12:477f446ff91418fe +geom 201: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.821902 motion [] pieces all=12:e45df0929b4a7a20 camera=12:e45df0929b4a7a20 shadow=12:e45df0929b4a7a20 indirect=12:e45df0929b4a7a20 +geom 202: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.9081097 motion [] pieces all=12:d8ac1550c1d701d3 camera=12:d8ac1550c1d701d3 shadow=12:d8ac1550c1d701d3 indirect=12:d8ac1550c1d701d3 +geom 203: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0630432 motion [] pieces all=12:4bf7c09967756dab camera=12:4bf7c09967756dab shadow=12:4bf7c09967756dab indirect=12:4bf7c09967756dab +geom 204: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0076557 motion [] pieces all=12:4b743cdcfe182631 camera=12:4b743cdcfe182631 shadow=12:4b743cdcfe182631 indirect=12:4b743cdcfe182631 +geom 205: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.97757643 motion [] pieces all=12:ce244f01fc616d6d camera=12:ce244f01fc616d6d shadow=12:ce244f01fc616d6d indirect=12:ce244f01fc616d6d +geom 206: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.1927692 motion [] pieces all=12:3680ff2a1925c2b8 camera=12:3680ff2a1925c2b8 shadow=12:3680ff2a1925c2b8 indirect=12:3680ff2a1925c2b8 +geom 207: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.8998191 motion [] pieces all=12:631eb32618265a1d camera=12:631eb32618265a1d shadow=12:631eb32618265a1d indirect=12:631eb32618265a1d +geom 208: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0190506 motion [] pieces all=12:ecbbd67d5ea82535 camera=12:ecbbd67d5ea82535 shadow=12:ecbbd67d5ea82535 indirect=12:ecbbd67d5ea82535 +geom 209: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.99540603 motion [] pieces all=12:3ff8d546f9bdd0fb camera=12:3ff8d546f9bdd0fb shadow=12:3ff8d546f9bdd0fb indirect=12:3ff8d546f9bdd0fb +geom 210: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.1799959 motion [] pieces all=12:2317ef2a031d8f47 camera=12:2317ef2a031d8f47 shadow=12:2317ef2a031d8f47 indirect=12:2317ef2a031d8f47 +geom 211: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.87620467 motion [] pieces all=12:1779aa23bb0f9042 camera=12:1779aa23bb0f9042 shadow=12:1779aa23bb0f9042 indirect=12:1779aa23bb0f9042 +geom 212: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.1119057 motion [] pieces all=12:91f1de75efe1ff66 camera=12:91f1de75efe1ff66 shadow=12:91f1de75efe1ff66 indirect=12:91f1de75efe1ff66 +geom 213: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.8029353 motion [] pieces all=12:504fea94e49e26b5 camera=12:504fea94e49e26b5 shadow=12:504fea94e49e26b5 indirect=12:504fea94e49e26b5 +geom 214: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.9190664 motion [] pieces all=12:0efb54b7f23ac443 camera=12:0efb54b7f23ac443 shadow=12:0efb54b7f23ac443 indirect=12:0efb54b7f23ac443 +geom 215: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0612158 motion [] pieces all=12:55a92efc8135fc5d camera=12:55a92efc8135fc5d shadow=12:55a92efc8135fc5d indirect=12:55a92efc8135fc5d +geom 216: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.1734748 motion [] pieces all=12:a620be5aa9925d00 camera=12:a620be5aa9925d00 shadow=12:a620be5aa9925d00 indirect=12:a620be5aa9925d00 +geom 217: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.8742897 motion [] pieces all=12:c2fbfc60af19f0d0 camera=12:c2fbfc60af19f0d0 shadow=12:c2fbfc60af19f0d0 indirect=12:c2fbfc60af19f0d0 +geom 218: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0368638 motion [] pieces all=12:fd178773edcdb210 camera=12:fd178773edcdb210 shadow=12:fd178773edcdb210 indirect=12:fd178773edcdb210 +geom 219: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.9695358 motion [] pieces all=12:92c10878d7799c47 camera=12:92c10878d7799c47 shadow=12:92c10878d7799c47 indirect=12:92c10878d7799c47 +geom 220: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.83632326 motion [] pieces all=12:56eef0396f98b12d camera=12:56eef0396f98b12d shadow=12:56eef0396f98b12d indirect=12:56eef0396f98b12d +geom 221: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.125916 motion [] pieces all=12:2ee3e4102b2ca7c0 camera=12:2ee3e4102b2ca7c0 shadow=12:2ee3e4102b2ca7c0 indirect=12:2ee3e4102b2ca7c0 +geom 222: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.92677325 motion [] pieces all=12:9c793be4df2804bc camera=12:9c793be4df2804bc shadow=12:9c793be4df2804bc indirect=12:9c793be4df2804bc +geom 223: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.096751 motion [] pieces all=12:b6735b8f2a80f193 camera=12:b6735b8f2a80f193 shadow=12:b6735b8f2a80f193 indirect=12:b6735b8f2a80f193 +geom 224: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.99294955 motion [] pieces all=12:e14d605bbad5054b camera=12:e14d605bbad5054b shadow=12:e14d605bbad5054b indirect=12:e14d605bbad5054b +geom 225: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0129327 motion [] pieces all=12:ce70384139f3d953 camera=12:ce70384139f3d953 shadow=12:ce70384139f3d953 indirect=12:ce70384139f3d953 +geom 226: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.8834852 motion [] pieces all=12:f275b69e8465276d camera=12:f275b69e8465276d shadow=12:f275b69e8465276d indirect=12:f275b69e8465276d +geom 227: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.1862364 motion [] pieces all=12:73a525c8a7cfebfc camera=12:73a525c8a7cfebfc shadow=12:73a525c8a7cfebfc indirect=12:73a525c8a7cfebfc +geom 228: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.80695534 motion [] pieces all=12:4fc4787ac53c19ae camera=12:4fc4787ac53c19ae shadow=12:4fc4787ac53c19ae indirect=12:4fc4787ac53c19ae +geom 229: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.1052685 motion [] pieces all=12:5f526759f00f8bb1 camera=12:5f526759f00f8bb1 shadow=12:5f526759f00f8bb1 indirect=12:5f526759f00f8bb1 +geom 230: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0517714 motion [] pieces all=12:43a08224d7f3a5ff camera=12:43a08224d7f3a5ff shadow=12:43a08224d7f3a5ff indirect=12:43a08224d7f3a5ff +geom 231: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.9183691 motion [] pieces all=12:4e8261fe621a8754 camera=12:4e8261fe621a8754 shadow=12:4e8261fe621a8754 indirect=12:4e8261fe621a8754 +geom 232: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0896878 motion [] pieces all=12:2105a034e5acb921 camera=12:2105a034e5acb921 shadow=12:2105a034e5acb921 indirect=12:2105a034e5acb921 +geom 233: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.93423206 motion [] pieces all=12:47b70feddcfef5c4 camera=12:47b70feddcfef5c4 shadow=12:47b70feddcfef5c4 indirect=12:47b70feddcfef5c4 +geom 234: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.1348141 motion [] pieces all=12:c150c564a2f639e3 camera=12:c150c564a2f639e3 shadow=12:c150c564a2f639e3 indirect=12:c150c564a2f639e3 +geom 235: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.8272541 motion [] pieces all=12:9a036bb10f2a8c19 camera=12:9a036bb10f2a8c19 shadow=12:9a036bb10f2a8c19 indirect=12:9a036bb10f2a8c19 +geom 236: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.8628023 motion [] pieces all=12:df84cc6ab0cf1013 camera=12:df84cc6ab0cf1013 shadow=12:df84cc6ab0cf1013 indirect=12:df84cc6ab0cf1013 +geom 237: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.1667898 motion [] pieces all=12:ea055c935781e4b2 camera=12:ea055c935781e4b2 shadow=12:ea055c935781e4b2 indirect=12:ea055c935781e4b2 +geom 238: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0272492 motion [] pieces all=12:b666550bc7f3f2e3 camera=12:b666550bc7f3f2e3 shadow=12:b666550bc7f3f2e3 indirect=12:b666550bc7f3f2e3 +geom 239: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.9644636 motion [] pieces all=12:25b40fe1e3b33c13 camera=12:25b40fe1e3b33c13 shadow=12:25b40fe1e3b33c13 indirect=12:25b40fe1e3b33c13 +geom 240: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.9401488 motion [] pieces all=12:ef193e56f1c675ad camera=12:ef193e56f1c675ad shadow=12:ef193e56f1c675ad indirect=12:ef193e56f1c675ad +geom 241: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0806658 motion [] pieces all=12:6cd8d81131f613a5 camera=12:6cd8d81131f613a5 shadow=12:6cd8d81131f613a5 indirect=12:6cd8d81131f613a5 +geom 242: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.84431666 motion [] pieces all=12:75d58887322e3c92 camera=12:75d58887322e3c92 shadow=12:75d58887322e3c92 indirect=12:75d58887322e3c92 +geom 243: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.1427468 motion [] pieces all=12:ceb6c2a84e7313ea camera=12:ceb6c2a84e7313ea shadow=12:ceb6c2a84e7313ea indirect=12:ceb6c2a84e7313ea +geom 244: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.8558955 motion [] pieces all=12:966eb51da03b3092 camera=12:966eb51da03b3092 shadow=12:966eb51da03b3092 indirect=12:966eb51da03b3092 +geom 245: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.1608133 motion [] pieces all=12:4684046ad71d3941 camera=12:4684046ad71d3941 shadow=12:4684046ad71d3941 indirect=12:4684046ad71d3941 +geom 246: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0448556 motion [] pieces all=12:8909f2f12790188f camera=12:8909f2f12790188f shadow=12:8909f2f12790188f indirect=12:8909f2f12790188f +geom 247: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.9619815 motion [] pieces all=12:e68d935303781b60 camera=12:e68d935303781b60 shadow=12:e68d935303781b60 indirect=12:e68d935303781b60 +geom 248: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.9050406 motion [] pieces all=12:77e1fb7c3ccd3b72 camera=12:77e1fb7c3ccd3b72 shadow=12:77e1fb7c3ccd3b72 indirect=12:77e1fb7c3ccd3b72 +geom 249: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0704575 motion [] pieces all=12:bf814629e90eb2a6 camera=12:bf814629e90eb2a6 shadow=12:bf814629e90eb2a6 indirect=12:bf814629e90eb2a6 +geom 250: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.8142105 motion [] pieces all=12:3e101c8e3b9023da camera=12:3e101c8e3b9023da shadow=12:3e101c8e3b9023da indirect=12:3e101c8e3b9023da +geom 251: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.1210591 motion [] pieces all=12:adeb9df8e5336e1e camera=12:adeb9df8e5336e1e shadow=12:adeb9df8e5336e1e indirect=12:adeb9df8e5336e1e +geom 252: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0009634 motion [] pieces all=12:243ce4af91f5aa9f camera=12:243ce4af91f5aa9f shadow=12:243ce4af91f5aa9f indirect=12:243ce4af91f5aa9f +geom 253: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.9823128 motion [] pieces all=12:930bc470da7bfca0 camera=12:930bc470da7bfca0 shadow=12:930bc470da7bfca0 indirect=12:930bc470da7bfca0 +geom 254: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.1997087 motion [] pieces all=12:0eed12db9d57f617 camera=12:0eed12db9d57f617 shadow=12:0eed12db9d57f617 indirect=12:0eed12db9d57f617 +geom 255: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.8885824 motion [] pieces all=12:085bce0e053ac672 camera=12:085bce0e053ac672 shadow=12:085bce0e053ac672 indirect=12:085bce0e053ac672 +geom 256: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.1071253 motion [] pieces all=12:558e90753a1dbe0c camera=12:558e90753a1dbe0c shadow=12:558e90753a1dbe0c indirect=12:558e90753a1dbe0c +geom 257: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.80412865 motion [] pieces all=12:438f0ac0ef81a15c camera=12:438f0ac0ef81a15c shadow=12:438f0ac0ef81a15c indirect=12:438f0ac0ef81a15c +geom 258: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.056387 motion [] pieces all=12:532e9c68579ceebf camera=12:532e9c68579ceebf shadow=12:532e9c68579ceebf indirect=12:532e9c68579ceebf +geom 259: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.92466545 motion [] pieces all=12:8bd67b0e1ac0a9c5 camera=12:8bd67b0e1ac0a9c5 shadow=12:8bd67b0e1ac0a9c5 indirect=12:8bd67b0e1ac0a9c5 +geom 260: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0224771 motion [] pieces all=12:db8f1a9cc1fdd115 camera=12:db8f1a9cc1fdd115 shadow=12:db8f1a9cc1fdd115 indirect=12:db8f1a9cc1fdd115 +geom 261: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.9992335 motion [] pieces all=12:c12fef72270cd9b9 camera=12:c12fef72270cd9b9 shadow=12:c12fef72270cd9b9 indirect=12:c12fef72270cd9b9 +geom 262: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.8799568 motion [] pieces all=12:99f42a5ee0052055 camera=12:99f42a5ee0052055 shadow=12:99f42a5ee0052055 indirect=12:99f42a5ee0052055 +geom 263: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.1754391 motion [] pieces all=12:aec0913446abacc1 camera=12:aec0913446abacc1 shadow=12:aec0913446abacc1 indirect=12:aec0913446abacc1 +geom 264: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.1689945 motion [] pieces all=12:817419b742012466 camera=12:817419b742012466 shadow=12:817419b742012466 indirect=12:817419b742012466 +geom 265: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.8709754 motion [] pieces all=12:11dc946f2502073c camera=12:11dc946f2502073c shadow=12:11dc946f2502073c indirect=12:11dc946f2502073c +geom 266: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0341958 motion [] pieces all=12:2cdb9da3d277d7c3 camera=12:2cdb9da3d277d7c3 shadow=12:2cdb9da3d277d7c3 indirect=12:2cdb9da3d277d7c3 +geom 267: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.9728058 motion [] pieces all=12:adf045b7d32a2f1f camera=12:adf045b7d32a2f1f shadow=12:adf045b7d32a2f1f indirect=12:adf045b7d32a2f1f +geom 268: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.9305494 motion [] pieces all=12:8fdab00337b44101 camera=12:8fdab00337b44101 shadow=12:8fdab00337b44101 indirect=12:8fdab00337b44101 +geom 269: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0993541 motion [] pieces all=12:e9f74cbbc31e88ca camera=12:e9f74cbbc31e88ca shadow=12:e9f74cbbc31e88ca indirect=12:e9f74cbbc31e88ca +geom 270: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.1297429 motion [] pieces all=12:e6f58dc9a2c8cf31 camera=12:e6f58dc9a2c8cf31 shadow=12:e6f58dc9a2c8cf31 indirect=12:e6f58dc9a2c8cf31 +geom 271: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.8328105 motion [] pieces all=12:28fe4127d8309887 camera=12:28fe4127d8309887 shadow=12:28fe4127d8309887 indirect=12:28fe4127d8309887 +geom 272: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0407774 motion [] pieces all=12:d1adc814dd14ee88 camera=12:d1adc814dd14ee88 shadow=12:d1adc814dd14ee88 indirect=12:d1adc814dd14ee88 +geom 273: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.9556146 motion [] pieces all=12:6d24b8714ab18ccb camera=12:6d24b8714ab18ccb shadow=12:6d24b8714ab18ccb indirect=12:6d24b8714ab18ccb +geom 274: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.8622651 motion [] pieces all=12:4123fa223d783808 camera=12:4123fa223d783808 shadow=12:4123fa223d783808 indirect=12:4123fa223d783808 +geom 275: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.1533363 motion [] pieces all=12:b1d8d2f5c048d126 camera=12:b1d8d2f5c048d126 shadow=12:b1d8d2f5c048d126 indirect=12:b1d8d2f5c048d126 +geom 276: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0827482 motion [] pieces all=12:b34d3f2fea6ccf3f camera=12:b34d3f2fea6ccf3f shadow=12:b34d3f2fea6ccf3f indirect=12:b34d3f2fea6ccf3f +geom 277: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.94452286 motion [] pieces all=12:d7313d7a2c947b15 camera=12:d7313d7a2c947b15 shadow=12:d7313d7a2c947b15 indirect=12:d7313d7a2c947b15 +geom 278: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.84241277 motion [] pieces all=12:cf8f50c89c7848bf camera=12:cf8f50c89c7848bf shadow=12:cf8f50c89c7848bf indirect=12:cf8f50c89c7848bf +geom 279: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.145969 motion [] pieces all=12:fc6d0c5cd4ac480a camera=12:fc6d0c5cd4ac480a shadow=12:fc6d0c5cd4ac480a indirect=12:fc6d0c5cd4ac480a +geom 280: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.8967557 motion [] pieces all=12:01efc81ea2dc09da camera=12:01efc81ea2dc09da shadow=12:01efc81ea2dc09da indirect=12:01efc81ea2dc09da +geom 281: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.1884634 motion [] pieces all=12:985e2ace4f406785 camera=12:985e2ace4f406785 shadow=12:985e2ace4f406785 indirect=12:985e2ace4f406785 +geom 282: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0103384 motion [] pieces all=12:595d0b15b7883054 camera=12:595d0b15b7883054 shadow=12:595d0b15b7883054 indirect=12:595d0b15b7883054 +geom 283: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.9807979 motion [] pieces all=12:91c655586891aa6d camera=12:91c655586891aa6d shadow=12:91c655586891aa6d indirect=12:91c655586891aa6d +geom 284: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.91237754 motion [] pieces all=12:1f92e95a24a0a941 camera=12:1f92e95a24a0a941 shadow=12:1f92e95a24a0a941 indirect=12:1f92e95a24a0a941 +geom 285: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0665895 motion [] pieces all=12:24eed0a13c96f7c0 camera=12:24eed0a13c96f7c0 shadow=12:24eed0a13c96f7c0 indirect=12:24eed0a13c96f7c0 +geom 286: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.8213568 motion [] pieces all=12:3ace4e273389b040 camera=12:3ace4e273389b040 shadow=12:3ace4e273389b040 indirect=12:3ace4e273389b040 +geom 287: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.1155375 motion [] pieces all=12:a774e8fd544c302f camera=12:a774e8fd544c302f shadow=12:a774e8fd544c302f indirect=12:a774e8fd544c302f +geom 288: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0168831 motion [] pieces all=12:3b8dfe9ac6e074e4 camera=12:3b8dfe9ac6e074e4 shadow=12:3b8dfe9ac6e074e4 indirect=12:3b8dfe9ac6e074e4 +geom 289: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.9887352 motion [] pieces all=12:9cc4d9cc6beae0f8 camera=12:9cc4d9cc6beae0f8 shadow=12:9cc4d9cc6beae0f8 indirect=12:9cc4d9cc6beae0f8 +geom 290: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.88512194 motion [] pieces all=12:54452159c0cc6de1 camera=12:54452159c0cc6de1 shadow=12:54452159c0cc6de1 indirect=12:54452159c0cc6de1 +geom 291: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.1818812 motion [] pieces all=12:d8d6033726a0ae3c camera=12:d8d6033726a0ae3c shadow=12:d8d6033726a0ae3c indirect=12:d8d6033726a0ae3c +geom 292: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0553548 motion [] pieces all=12:14bad604a1de7065 camera=12:14bad604a1de7065 shadow=12:14bad604a1de7065 indirect=12:14bad604a1de7065 +geom 293: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.91546917 motion [] pieces all=12:c40b47e88849fe33 camera=12:c40b47e88849fe33 shadow=12:c40b47e88849fe33 indirect=12:c40b47e88849fe33 +geom 294: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.8122816 motion [] pieces all=12:2e893d2222249532 camera=12:2e893d2222249532 shadow=12:2e893d2222249532 indirect=12:2e893d2222249532 +geom 295: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.1005894 motion [] pieces all=12:bd58cb1520f6c589 camera=12:bd58cb1520f6c589 shadow=12:bd58cb1520f6c589 indirect=12:bd58cb1520f6c589 +geom 296: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.9684521 motion [] pieces all=12:5ee1a186ae2d9dd0 camera=12:5ee1a186ae2d9dd0 shadow=12:5ee1a186ae2d9dd0 indirect=12:5ee1a186ae2d9dd0 +geom 297: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0291594 motion [] pieces all=12:bbe60b405380df40 camera=12:bbe60b405380df40 shadow=12:bbe60b405380df40 indirect=12:bbe60b405380df40 +geom 298: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.868216 motion [] pieces all=12:1139e1c7e4a5e8fb camera=12:1139e1c7e4a5e8fb shadow=12:1139e1c7e4a5e8fb indirect=12:1139e1c7e4a5e8fb +geom 299: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.1648309 motion [] pieces all=12:f4d9f51838186556 camera=12:f4d9f51838186556 shadow=12:f4d9f51838186556 indirect=12:f4d9f51838186556 +geom 300: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.1327685 motion [] pieces all=12:6c7567952e89b197 camera=12:6c7567952e89b197 shadow=12:6c7567952e89b197 indirect=12:6c7567952e89b197 +geom 301: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.8302819 motion [] pieces all=12:78388d34aa653f58 camera=12:78388d34aa653f58 shadow=12:78388d34aa653f58 indirect=12:78388d34aa653f58 +geom 302: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.93690276 motion [] pieces all=12:b8ddd2c09893939a camera=12:b8ddd2c09893939a shadow=12:b8ddd2c09893939a indirect=12:b8ddd2c09893939a +geom 303: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0930607 motion [] pieces all=12:1439028a696a7d6a camera=12:1439028a696a7d6a shadow=12:1439028a696a7d6a indirect=12:1439028a696a7d6a +geom 304: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.98559374 motion [] pieces all=12:2d5a80cc0e242252 camera=12:2d5a80cc0e242252 shadow=12:2d5a80cc0e242252 indirect=12:2d5a80cc0e242252 +geom 305: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0042014 motion [] pieces all=12:ba32837f934d89a0 camera=12:ba32837f934d89a0 shadow=12:ba32837f934d89a0 indirect=12:ba32837f934d89a0 +geom 306: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.1942586 motion [] pieces all=12:eafe5de3bea88df7 camera=12:eafe5de3bea88df7 shadow=12:eafe5de3bea88df7 indirect=12:eafe5de3bea88df7 +geom 307: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.893466 motion [] pieces all=12:647780a6ed707c17 camera=12:647780a6ed707c17 shadow=12:647780a6ed707c17 indirect=12:647780a6ed707c17 +geom 308: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.90030926 motion [] pieces all=12:487b70fa9b392254 camera=12:487b70fa9b392254 shadow=12:487b70fa9b392254 indirect=12:487b70fa9b392254 +geom 309: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0744654 motion [] pieces all=12:d541c481d5fd43bf camera=12:d541c481d5fd43bf shadow=12:d541c481d5fd43bf indirect=12:d541c481d5fd43bf +geom 310: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.1226648 motion [] pieces all=12:631e3ff8dcda598a camera=12:631e3ff8dcda598a shadow=12:631e3ff8dcda598a indirect=12:631e3ff8dcda598a +geom 311: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.8183132 motion [] pieces all=12:4d8c861c7b334b12 camera=12:4d8c861c7b334b12 shadow=12:4d8c861c7b334b12 indirect=12:4d8c861c7b334b12 +geom 312: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0470083 motion [] pieces all=12:144bf5f952df3aae camera=12:144bf5f952df3aae shadow=12:144bf5f952df3aae indirect=12:144bf5f952df3aae +geom 313: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.9589237 motion [] pieces all=12:6f08e2f191c13829 camera=12:6f08e2f191c13829 shadow=12:6f08e2f191c13829 indirect=12:6f08e2f191c13829 +geom 314: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.1568285 motion [] pieces all=12:9ddb7a84275336f2 camera=12:9ddb7a84275336f2 shadow=12:9ddb7a84275336f2 indirect=12:9ddb7a84275336f2 +geom 315: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.8528369 motion [] pieces all=12:dc6f6b0e0689c4fe camera=12:dc6f6b0e0689c4fe shadow=12:dc6f6b0e0689c4fe indirect=12:dc6f6b0e0689c4fe +geom 316: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.1375338 motion [] pieces all=12:771d4bc7d8a2055c camera=12:771d4bc7d8a2055c shadow=12:771d4bc7d8a2055c indirect=12:771d4bc7d8a2055c +geom 317: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.84985673 motion [] pieces all=12:5f8f376f318e7dd6 camera=12:5f8f376f318e7dd6 shadow=12:5f8f376f318e7dd6 indirect=12:5f8f376f318e7dd6 +geom 318: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.94081056 motion [] pieces all=12:7a3fb26c1cd5533d camera=12:7a3fb26c1cd5533d shadow=12:7a3fb26c1cd5533d indirect=12:7a3fb26c1cd5533d +geom 319: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0773013 motion [] pieces all=12:d7fce092f6c85dec camera=12:d7fce092f6c85dec shadow=12:d7fce092f6c85dec indirect=12:d7fce092f6c85dec +geom 320: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.1783283 motion [] pieces all=12:37d30f1a46e449ff camera=12:37d30f1a46e449ff shadow=12:37d30f1a46e449ff indirect=12:37d30f1a46e449ff +geom 321: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.87658024 motion [] pieces all=12:14d43fd6bb0ff55d camera=12:14d43fd6bb0ff55d shadow=12:14d43fd6bb0ff55d indirect=12:14d43fd6bb0ff55d +geom 322: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0205542 motion [] pieces all=12:87481ae735713eaa camera=12:87481ae735713eaa shadow=12:87481ae735713eaa indirect=12:87481ae735713eaa +geom 323: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.99422103 motion [] pieces all=12:5bde4420dcb7830a camera=12:5bde4420dcb7830a shadow=12:5bde4420dcb7830a indirect=12:5bde4420dcb7830a +geom 324: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.9212079 motion [] pieces all=12:dd5d8187b0e11f4d camera=12:dd5d8187b0e11f4d shadow=12:dd5d8187b0e11f4d indirect=12:dd5d8187b0e11f4d +geom 325: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0596653 motion [] pieces all=12:a13d8d5031328858 camera=12:a13d8d5031328858 shadow=12:a13d8d5031328858 indirect=12:a13d8d5031328858 +geom 326: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.1097448 motion [] pieces all=12:df0336c5dc625715 camera=12:df0336c5dc625715 shadow=12:df0336c5dc625715 indirect=12:df0336c5dc625715 +geom 327: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.80082613 motion [] pieces all=12:7fdb2280b720b4e0 camera=12:7fdb2280b720b4e0 shadow=12:7fdb2280b720b4e0 indirect=12:7fdb2280b720b4e0 +geom 328: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.83511055 motion [] pieces all=12:8e6bbb989918f2d4 camera=12:8e6bbb989918f2d4 shadow=12:8e6bbb989918f2d4 indirect=12:8e6bbb989918f2d4 +geom 329: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.126959 motion [] pieces all=12:30f7453b0f345828 camera=12:30f7453b0f345828 shadow=12:30f7453b0f345828 indirect=12:30f7453b0f345828 +geom 330: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.92609227 motion [] pieces all=12:91f9f276b93f6466 camera=12:91f9f276b93f6466 shadow=12:91f9f276b93f6466 indirect=12:91f9f276b93f6466 +geom 331: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0945077 motion [] pieces all=12:d6b247f1e91ba686 camera=12:d6b247f1e91ba686 shadow=12:d6b247f1e91ba686 indirect=12:d6b247f1e91ba686 +geom 332: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0349877 motion [] pieces all=12:d5740e0bac5cd316 camera=12:d5740e0bac5cd316 shadow=12:d5740e0bac5cd316 indirect=12:d5740e0bac5cd316 +geom 333: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.9710804 motion [] pieces all=12:27d44de46e3dca54 camera=12:27d44de46e3dca54 shadow=12:27d44de46e3dca54 indirect=12:27d44de46e3dca54 +geom 334: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.8721167 motion [] pieces all=12:18228ff2b63f8c7d camera=12:18228ff2b63f8c7d shadow=12:18228ff2b63f8c7d indirect=12:18228ff2b63f8c7d +geom 335: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.1724524 motion [] pieces all=12:2ab0876e534f298f camera=12:2ab0876e534f298f shadow=12:2ab0876e534f298f indirect=12:2ab0876e534f298f +geom 336: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.8403497 motion [] pieces all=12:41a2c55a267ac5c4 camera=12:41a2c55a267ac5c4 shadow=12:41a2c55a267ac5c4 indirect=12:41a2c55a267ac5c4 +geom 337: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.1488395 motion [] pieces all=12:dfc161a8f6a92ea3 camera=12:dfc161a8f6a92ea3 shadow=12:dfc161a8f6a92ea3 indirect=12:dfc161a8f6a92ea3 +geom 338: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0872728 motion [] pieces all=12:4009af968809592a camera=12:4009af968809592a shadow=12:4009af968809592a indirect=12:4009af968809592a +geom 339: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.9498308 motion [] pieces all=12:d97514bcecdc5662 camera=12:d97514bcecdc5662 shadow=12:d97514bcecdc5662 indirect=12:d97514bcecdc5662 +geom 340: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.1501721 motion [] pieces all=12:d7c58849a10d0edf camera=12:d7c58849a10d0edf shadow=12:d7c58849a10d0edf indirect=12:d7c58849a10d0edf +geom 341: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.85824037 motion [] pieces all=12:aed050e32284fe6e camera=12:aed050e32284fe6e shadow=12:aed050e32284fe6e indirect=12:aed050e32284fe6e +geom 342: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.9529558 motion [] pieces all=12:ea1dbdb85f1f4d6d camera=12:ea1dbdb85f1f4d6d shadow=12:ea1dbdb85f1f4d6d indirect=12:ea1dbdb85f1f4d6d +geom 343: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0397669 motion [] pieces all=12:6babb56fe308d4cb camera=12:6babb56fe308d4cb shadow=12:6babb56fe308d4cb indirect=12:6babb56fe308d4cb +geom 344: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.1160651 motion [] pieces all=12:2957ca89e418c28f camera=12:2957ca89e418c28f shadow=12:2957ca89e418c28f indirect=12:2957ca89e418c28f +geom 345: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.8239306 motion [] pieces all=12:2e7f31d4fa464ed4 camera=12:2e7f31d4fa464ed4 shadow=12:2e7f31d4fa464ed4 indirect=12:2e7f31d4fa464ed4 +geom 346: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0655339 motion [] pieces all=12:b200843dc58e1388 camera=12:b200843dc58e1388 shadow=12:b200843dc58e1388 indirect=12:b200843dc58e1388 +geom 347: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.9071375 motion [] pieces all=12:249c549d82e9acea camera=12:249c549d82e9acea shadow=12:249c549d82e9acea indirect=12:249c549d82e9acea +geom 348: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0080239 motion [] pieces all=12:e170da844f0a982b camera=12:e170da844f0a982b shadow=12:e170da844f0a982b indirect=12:e170da844f0a982b +geom 349: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.97620225 motion [] pieces all=12:193709b6aa2f5d65 camera=12:193709b6aa2f5d65 shadow=12:193709b6aa2f5d65 indirect=12:193709b6aa2f5d65 +geom 350: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.89718294 motion [] pieces all=12:c4f52cbc70fa9dca camera=12:c4f52cbc70fa9dca shadow=12:c4f52cbc70fa9dca indirect=12:c4f52cbc70fa9dca +geom 351: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.191257 motion [] pieces all=12:9bcfc66882080152 camera=12:9bcfc66882080152 shadow=12:9bcfc66882080152 indirect=12:9bcfc66882080152 +geom 352: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.1368771 motion [] pieces all=12:17d409264b25aaa1 camera=12:17d409264b25aaa1 shadow=12:17d409264b25aaa1 indirect=12:17d409264b25aaa1 +geom 353: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.8263488 motion [] pieces all=12:c88cfa106e34b214 camera=12:c88cfa106e34b214 shadow=12:c88cfa106e34b214 indirect=12:c88cfa106e34b214 +geom 354: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.9322859 motion [] pieces all=12:72d56a4ceec9b227 camera=12:72d56a4ceec9b227 shadow=12:72d56a4ceec9b227 indirect=12:72d56a4ceec9b227 +geom 355: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0880939 motion [] pieces all=12:b195b52f8adf62a0 camera=12:b195b52f8adf62a0 shadow=12:b195b52f8adf62a0 indirect=12:b195b52f8adf62a0 +geom 356: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0262136 motion [] pieces all=12:45df4628c3eb5709 camera=12:45df4628c3eb5709 shadow=12:45df4628c3eb5709 indirect=12:45df4628c3eb5709 +geom 357: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.96307683 motion [] pieces all=12:345e61e8806a6778 camera=12:345e61e8806a6778 shadow=12:345e61e8806a6778 indirect=12:345e61e8806a6778 +geom 358: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.1681463 motion [] pieces all=12:86243dfecd6ed800 camera=12:86243dfecd6ed800 shadow=12:86243dfecd6ed800 indirect=12:86243dfecd6ed800 +geom 359: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.86502236 motion [] pieces all=12:343a16809805502c camera=12:343a16809805502c shadow=12:343a16809805502c indirect=12:343a16809805502c +geom 360: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.050149 motion [] pieces all=12:82646e4cfdf87acb camera=12:82646e4cfdf87acb shadow=12:82646e4cfdf87acb indirect=12:82646e4cfdf87acb +geom 361: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.9158084 motion [] pieces all=12:24aaf806f2e380e8 camera=12:24aaf806f2e380e8 shadow=12:24aaf806f2e380e8 indirect=12:24aaf806f2e380e8 +geom 362: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.8081211 motion [] pieces all=12:7cbe153faf6f8d7a camera=12:7cbe153faf6f8d7a shadow=12:7cbe153faf6f8d7a indirect=12:7cbe153faf6f8d7a +geom 363: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.1042663 motion [] pieces all=12:35a219666dea319c camera=12:35a219666dea319c shadow=12:35a219666dea319c indirect=12:35a219666dea319c +geom 364: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0155733 motion [] pieces all=12:e6d7079bdb47adab camera=12:e6d7079bdb47adab shadow=12:e6d7079bdb47adab indirect=12:e6d7079bdb47adab +geom 365: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.9908399 motion [] pieces all=12:e8c07fc49651ed38 camera=12:e8c07fc49651ed38 shadow=12:e8c07fc49651ed38 indirect=12:e8c07fc49651ed38 +geom 366: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.88250023 motion [] pieces all=12:f5e38f522feb37cb camera=12:f5e38f522feb37cb shadow=12:f5e38f522feb37cb indirect=12:f5e38f522feb37cb +geom 367: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.1847697 motion [] pieces all=12:fbc06fd87a8d291f camera=12:fbc06fd87a8d291f shadow=12:fbc06fd87a8d291f indirect=12:fbc06fd87a8d291f +geom 368: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.046034 motion [] pieces all=12:9f78122893426734 camera=12:9f78122893426734 shadow=12:9f78122893426734 indirect=12:9f78122893426734 +geom 369: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.96090317 motion [] pieces all=12:5694cc0009888a2a camera=12:5694cc0009888a2a shadow=12:5694cc0009888a2a indirect=12:5694cc0009888a2a +geom 370: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.85369337 motion [] pieces all=12:cc6149139636f173 camera=12:cc6149139636f173 shadow=12:cc6149139636f173 indirect=12:cc6149139636f173 +geom 371: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.1612246 motion [] pieces all=12:479fb480718c0a74 camera=12:479fb480718c0a74 shadow=12:479fb480718c0a74 indirect=12:479fb480718c0a74 +geom 372: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.1420475 motion [] pieces all=12:5011fcf9b2420f89 camera=12:5011fcf9b2420f89 shadow=12:5011fcf9b2420f89 indirect=12:5011fcf9b2420f89 +geom 373: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.8454647 motion [] pieces all=12:fe62212b32243903 camera=12:fe62212b32243903 shadow=12:fe62212b32243903 indirect=12:fe62212b32243903 +geom 374: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0787628 motion [] pieces all=12:c09b7779bc49b050 camera=12:c09b7779bc49b050 shadow=12:c09b7779bc49b050 indirect=12:c09b7779bc49b050 +geom 375: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.93800545 motion [] pieces all=12:29492bf11ee992b7 camera=12:29492bf11ee992b7 shadow=12:29492bf11ee992b7 indirect=12:29492bf11ee992b7 +geom 376: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0030414 motion [] pieces all=12:12425a2887a24940 camera=12:12425a2887a24940 shadow=12:12425a2887a24940 indirect=12:12425a2887a24940 +geom 377: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.983221 motion [] pieces all=12:c8dff14682474aff camera=12:c8dff14682474aff shadow=12:c8dff14682474aff indirect=12:c8dff14682474aff +geom 378: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.8891724 motion [] pieces all=12:1c2a82a18eb963f6 camera=12:1c2a82a18eb963f6 shadow=12:1c2a82a18eb963f6 indirect=12:1c2a82a18eb963f6 +geom 379: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.1983188 motion [] pieces all=12:0512533337d37dec camera=12:0512533337d37dec shadow=12:0512533337d37dec indirect=12:0512533337d37dec +geom 380: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0690044 motion [] pieces all=12:d7ddf5a4c50ddc75 camera=12:d7ddf5a4c50ddc75 shadow=12:d7ddf5a4c50ddc75 indirect=12:d7ddf5a4c50ddc75 +geom 381: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.9040715 motion [] pieces all=12:69a66701f2fff347 camera=12:69a66701f2fff347 shadow=12:69a66701f2fff347 indirect=12:69a66701f2fff347 +geom 382: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.8138704 motion [] pieces all=12:e569ce107be2c4d3 camera=12:e569ce107be2c4d3 shadow=12:e569ce107be2c4d3 indirect=12:e569ce107be2c4d3 +geom 383: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.1195462 motion [] pieces all=12:42484194db7c8a06 camera=12:42484194db7c8a06 shadow=12:42484194db7c8a06 indirect=12:42484194db7c8a06 +geom 384: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.9979357 motion [] pieces all=12:817b453870a3d419 camera=12:817b453870a3d419 shadow=12:817b453870a3d419 indirect=12:817b453870a3d419 +geom 385: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0240195 motion [] pieces all=12:2ced474f3777cf40 camera=12:2ced474f3777cf40 shadow=12:2ced474f3777cf40 indirect=12:2ced474f3777cf40 +geom 386: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.1780815 motion [] pieces all=12:9393967072a354e1 camera=12:9393967072a354e1 shadow=12:9393967072a354e1 indirect=12:9393967072a354e1 +geom 387: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.87838584 motion [] pieces all=12:027e2841751e5753 camera=12:027e2841751e5753 shadow=12:027e2841751e5753 indirect=12:027e2841751e5753 +geom 388: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.1091733 motion [] pieces all=12:2ed1840aa5cba15e camera=12:2ed1840aa5cba15e shadow=12:2ed1840aa5cba15e indirect=12:2ed1840aa5cba15e +geom 389: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.805113 motion [] pieces all=12:60447d059631efd4 camera=12:60447d059631efd4 shadow=12:60447d059631efd4 indirect=12:60447d059631efd4 +geom 390: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0589079 motion [] pieces all=12:e47acd5a96839e07 camera=12:e47acd5a96839e07 shadow=12:e47acd5a96839e07 indirect=12:e47acd5a96839e07 +geom 391: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.92295647 motion [] pieces all=12:7b43a30fb1dddcde camera=12:7b43a30fb1dddcde shadow=12:7b43a30fb1dddcde indirect=12:7b43a30fb1dddcde +geom 392: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.128148 motion [] pieces all=12:69a0ed79f1b361cf camera=12:69a0ed79f1b361cf shadow=12:69a0ed79f1b361cf indirect=12:69a0ed79f1b361cf +geom 393: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.83284235 motion [] pieces all=12:d0f91134dfad0a19 camera=12:d0f91134dfad0a19 shadow=12:d0f91134dfad0a19 indirect=12:d0f91134dfad0a19 +geom 394: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.92853355 motion [] pieces all=12:f81b7e7017cc610e camera=12:f81b7e7017cc610e shadow=12:f81b7e7017cc610e indirect=12:f81b7e7017cc610e +geom 395: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0970887 motion [] pieces all=12:78927457c90a0400 camera=12:78927457c90a0400 shadow=12:78927457c90a0400 indirect=12:78927457c90a0400 +geom 396: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0317997 motion [] pieces all=12:20b0fd0fc171807f camera=12:20b0fd0fc171807f shadow=12:20b0fd0fc171807f indirect=12:20b0fd0fc171807f +geom 397: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.97373277 motion [] pieces all=12:dcdf42631e7cd0a2 camera=12:dcdf42631e7cd0a2 shadow=12:dcdf42631e7cd0a2 indirect=12:dcdf42631e7cd0a2 +geom 398: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.1714392 motion [] pieces all=12:c472d0d4899eae67 camera=12:c472d0d4899eae67 shadow=12:c472d0d4899eae67 indirect=12:c472d0d4899eae67 +geom 399: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.8703055 motion [] pieces all=12:8267e610d01a5680 camera=12:8267e610d01a5680 shadow=12:8267e610d01a5680 indirect=12:8267e610d01a5680 +geom 400: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.1441025 motion [] pieces all=12:279b3e24a102bf1e camera=12:279b3e24a102bf1e shadow=12:279b3e24a102bf1e indirect=12:279b3e24a102bf1e +geom 401: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.84141374 motion [] pieces all=12:d17319b14aca9e2c camera=12:d17319b14aca9e2c shadow=12:d17319b14aca9e2c indirect=12:d17319b14aca9e2c +geom 402: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0838239 motion [] pieces all=12:96dd4c0357b42b14 camera=12:96dd4c0357b42b14 shadow=12:96dd4c0357b42b14 indirect=12:96dd4c0357b42b14 +geom 403: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.94532305 motion [] pieces all=12:f5fe4cb39a4686ce camera=12:f5fe4cb39a4686ce shadow=12:f5fe4cb39a4686ce indirect=12:f5fe4cb39a4686ce +geom 404: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.95378745 motion [] pieces all=12:8dd37214aa940697 camera=12:8dd37214aa940697 shadow=12:8dd37214aa940697 indirect=12:8dd37214aa940697 +geom 405: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0423332 motion [] pieces all=12:de1e755492a14152 camera=12:de1e755492a14152 shadow=12:de1e755492a14152 indirect=12:de1e755492a14152 +geom 406: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.1559403 motion [] pieces all=12:9249a94688f496e1 camera=12:9249a94688f496e1 shadow=12:9249a94688f496e1 indirect=12:9249a94688f496e1 +geom 407: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.8601882 motion [] pieces all=12:1283b0c1c55f493f camera=12:1283b0c1c55f493f shadow=12:1283b0c1c55f493f indirect=12:1283b0c1c55f493f +geom 408: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.1138958 motion [] pieces all=12:8c88dd3a0f244fe6 camera=12:8c88dd3a0f244fe6 shadow=12:8c88dd3a0f244fe6 indirect=12:8c88dd3a0f244fe6 +geom 409: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.8189872 motion [] pieces all=12:6fe3119800e2b724 camera=12:6fe3119800e2b724 shadow=12:6fe3119800e2b724 indirect=12:6fe3119800e2b724 +geom 410: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.90952617 motion [] pieces all=12:8c6a289ed18001c2 camera=12:8c6a289ed18001c2 shadow=12:8c6a289ed18001c2 indirect=12:8c6a289ed18001c2 +geom 411: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0676242 motion [] pieces all=12:48ef6b53ccf7f3ae camera=12:48ef6b53ccf7f3ae shadow=12:48ef6b53ccf7f3ae indirect=12:48ef6b53ccf7f3ae +geom 412: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.1898406 motion [] pieces all=12:b2408acca88da277 camera=12:b2408acca88da277 shadow=12:b2408acca88da277 indirect=12:b2408acca88da277 +geom 413: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.8942463 motion [] pieces all=12:6be4b9c1cca2d56a camera=12:6be4b9c1cca2d56a shadow=12:6be4b9c1cca2d56a indirect=12:6be4b9c1cca2d56a +geom 414: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.97924507 motion [] pieces all=12:225624b471d1e03b camera=12:225624b471d1e03b shadow=12:225624b471d1e03b indirect=12:225624b471d1e03b +geom 415: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0110332 motion [] pieces all=12:cca30bb094acd981 camera=12:cca30bb094acd981 shadow=12:cca30bb094acd981 indirect=12:cca30bb094acd981 +geom 416: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.81568116 motion [] pieces all=12:d0cafe097a17f591 camera=12:d0cafe097a17f591 shadow=12:d0cafe097a17f591 indirect=12:d0cafe097a17f591 +geom 417: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.1248193 motion [] pieces all=12:37a2bd30f2744dc6 camera=12:37a2bd30f2744dc6 shadow=12:37a2bd30f2744dc6 indirect=12:37a2bd30f2744dc6 +geom 418: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.9016662 motion [] pieces all=12:22706d0be71e9245 camera=12:22706d0be71e9245 shadow=12:22706d0be71e9245 indirect=12:22706d0be71e9245 +geom 419: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0732667 motion [] pieces all=12:40038908680d4401 camera=12:40038908680d4401 shadow=12:40038908680d4401 indirect=12:40038908680d4401 +geom 420: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0060534 motion [] pieces all=12:f41bc3293229b5c6 camera=12:f41bc3293229b5c6 shadow=12:f41bc3293229b5c6 indirect=12:f41bc3293229b5c6 +geom 421: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.98605454 motion [] pieces all=12:74201c06a60b7e79 camera=12:74201c06a60b7e79 shadow=12:74201c06a60b7e79 indirect=12:74201c06a60b7e79 +geom 422: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.8919946 motion [] pieces all=12:5f2730bf79a70fe6 camera=12:5f2730bf79a70fe6 shadow=12:5f2730bf79a70fe6 indirect=12:5f2730bf79a70fe6 +geom 423: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.19644 motion [] pieces all=12:3146e5e85b71495b camera=12:3146e5e85b71495b shadow=12:3146e5e85b71495b indirect=12:3146e5e85b71495b +geom 424: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.8503766 motion [] pieces all=12:08a48fe8aa435062 camera=12:08a48fe8aa435062 shadow=12:08a48fe8aa435062 indirect=12:08a48fe8aa435062 +geom 425: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.1588464 motion [] pieces all=12:42a78cff3d571444 camera=12:42a78cff3d571444 shadow=12:42a78cff3d571444 indirect=12:42a78cff3d571444 +geom 426: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.95724255 motion [] pieces all=12:a5085c33a6b177c9 camera=12:a5085c33a6b177c9 shadow=12:a5085c33a6b177c9 indirect=12:a5085c33a6b177c9 +geom 427: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0496792 motion [] pieces all=12:d237182b1562400a camera=12:d237182b1562400a shadow=12:d237182b1562400a indirect=12:d237182b1562400a +geom 428: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0764337 motion [] pieces all=12:1fc7edde3708a83c camera=12:1fc7edde3708a83c shadow=12:1fc7edde3708a83c indirect=12:1fc7edde3708a83c +geom 429: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.94295996 motion [] pieces all=12:49bee21585a46b48 camera=12:49bee21585a46b48 shadow=12:49bee21585a46b48 indirect=12:49bee21585a46b48 +geom 430: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.84723824 motion [] pieces all=12:f8f063c5827ba797 camera=12:f8f063c5827ba797 shadow=12:f8f063c5827ba797 indirect=12:f8f063c5827ba797 +geom 431: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.139218 motion [] pieces all=12:a397a5167452c818 camera=12:a397a5167452c818 shadow=12:a397a5167452c818 indirect=12:a397a5167452c818 +geom 432: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.8667562 motion [] pieces all=12:6dc7c0e793f4c492 camera=12:6dc7c0e793f4c492 shadow=12:6dc7c0e793f4c492 indirect=12:6dc7c0e793f4c492 +geom 433: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.1638904 motion [] pieces all=12:c005ed491d1abb17 camera=12:c005ed491d1abb17 shadow=12:c005ed491d1abb17 indirect=12:c005ed491d1abb17 +geom 434: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.96669084 motion [] pieces all=12:9a5425fe4964167c camera=12:9a5425fe4964167c shadow=12:9a5425fe4964167c indirect=12:9a5425fe4964167c +geom 435: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0310098 motion [] pieces all=12:422a73f3c3468e8a camera=12:422a73f3c3468e8a shadow=12:422a73f3c3468e8a indirect=12:422a73f3c3468e8a +geom 436: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.9359371 motion [] pieces all=12:c41f8c20a8cefe26 camera=12:c41f8c20a8cefe26 shadow=12:c41f8c20a8cefe26 indirect=12:c41f8c20a8cefe26 +geom 437: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0920191 motion [] pieces all=12:67da5a5117403cb0 camera=12:67da5a5117403cb0 shadow=12:67da5a5117403cb0 indirect=12:67da5a5117403cb0 +geom 438: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.1332088 motion [] pieces all=12:fc1749d615ff3503 camera=12:fc1749d615ff3503 shadow=12:fc1749d615ff3503 indirect=12:fc1749d615ff3503 +geom 439: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.82963383 motion [] pieces all=12:8923dc9c030f82cb camera=12:8923dc9c030f82cb shadow=12:8923dc9c030f82cb indirect=12:8923dc9c030f82cb +geom 440: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.989561 motion [] pieces all=12:53a4125ff63a0937 camera=12:53a4125ff63a0937 shadow=12:53a4125ff63a0937 indirect=12:53a4125ff63a0937 +geom 441: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0177096 motion [] pieces all=12:65f91049698d610a camera=12:65f91049698d610a shadow=12:65f91049698d610a indirect=12:65f91049698d610a +geom 442: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.1837815 motion [] pieces all=12:cdcb5a0d01d898da camera=12:cdcb5a0d01d898da shadow=12:cdcb5a0d01d898da indirect=12:cdcb5a0d01d898da +geom 443: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.88659936 motion [] pieces all=12:9499b7def0936290 camera=12:9499b7def0936290 shadow=12:9499b7def0936290 indirect=12:9499b7def0936290 +geom 444: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.91293037 motion [] pieces all=12:83e3abd6ac7f83a9 camera=12:83e3abd6ac7f83a9 shadow=12:83e3abd6ac7f83a9 indirect=12:83e3abd6ac7f83a9 +geom 445: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.053651 motion [] pieces all=12:b0a60d26f0688b94 camera=12:b0a60d26f0688b94 shadow=12:b0a60d26f0688b94 indirect=12:b0a60d26f0688b94 +geom 446: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.1022353 motion [] pieces all=12:a8aca66167227e3e camera=12:a8aca66167227e3e shadow=12:a8aca66167227e3e indirect=12:a8aca66167227e3e +geom 447: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.8098009 motion [] pieces all=12:d772aadd56b26362 camera=12:d772aadd56b26362 shadow=12:d772aadd56b26362 indirect=12:d772aadd56b26362 +geom 448: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.1986847 motion [] pieces all=12:c1d1ba87d4521c68 camera=12:c1d1ba87d4521c68 shadow=12:c1d1ba87d4521c68 indirect=12:c1d1ba87d4521c68 +geom 449: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.8879799 motion [] pieces all=12:1cb570eb6a8dbc6e camera=12:1cb570eb6a8dbc6e shadow=12:1cb570eb6a8dbc6e indirect=12:1cb570eb6a8dbc6e +geom 450: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.98173344 motion [] pieces all=12:7eee75fae3c2c38e camera=12:7eee75fae3c2c38e shadow=12:7eee75fae3c2c38e indirect=12:7eee75fae3c2c38e +geom 451: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0000744 motion [] pieces all=12:ded11bb563f60b18 camera=12:ded11bb563f60b18 shadow=12:ded11bb563f60b18 indirect=12:ded11bb563f60b18 +geom 452: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.1216958 motion [] pieces all=12:7d0ffec4d58dda61 camera=12:7d0ffec4d58dda61 shadow=12:7d0ffec4d58dda61 indirect=12:7d0ffec4d58dda61 +geom 453: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.81506497 motion [] pieces all=12:11b648c7989f69d4 camera=12:11b648c7989f69d4 shadow=12:11b648c7989f69d4 indirect=12:11b648c7989f69d4 +geom 454: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.9058803 motion [] pieces all=12:9cd46ed2bbcbe3f3 camera=12:9cd46ed2bbcbe3f3 shadow=12:9cd46ed2bbcbe3f3 indirect=12:9cd46ed2bbcbe3f3 +geom 455: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0716925 motion [] pieces all=12:e1619e0d048155ae camera=12:e1619e0d048155ae shadow=12:e1619e0d048155ae indirect=12:e1619e0d048155ae +geom 456: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.85529506 motion [] pieces all=12:02ba68249605a870 camera=12:02ba68249605a870 shadow=12:02ba68249605a870 indirect=12:02ba68249605a870 +geom 457: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.1597875 motion [] pieces all=12:a894986db251ee0f camera=12:a894986db251ee0f shadow=12:a894986db251ee0f indirect=12:a894986db251ee0f +geom 458: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0444325 motion [] pieces all=12:4a2250159785a6e2 camera=12:4a2250159785a6e2 shadow=12:4a2250159785a6e2 indirect=12:4a2250159785a6e2 +geom 459: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.9616838 motion [] pieces all=12:d1ec13b3e62f6e92 camera=12:d1ec13b3e62f6e92 shadow=12:d1ec13b3e62f6e92 indirect=12:d1ec13b3e62f6e92 +geom 460: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.93935156 motion [] pieces all=12:04ea79f01e5f9a59 camera=12:04ea79f01e5f9a59 shadow=12:04ea79f01e5f9a59 indirect=12:04ea79f01e5f9a59 +geom 461: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0803297 motion [] pieces all=12:bf10521f4ec2bbb3 camera=12:bf10521f4ec2bbb3 shadow=12:bf10521f4ec2bbb3 indirect=12:bf10521f4ec2bbb3 +geom 462: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.8450973 motion [] pieces all=12:2a5cfdaaddca44c2 camera=12:2a5cfdaaddca44c2 shadow=12:2a5cfdaaddca44c2 indirect=12:2a5cfdaaddca44c2 +geom 463: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.1432472 motion [] pieces all=12:fbc5ba1ad600edaa camera=12:fbc5ba1ad600edaa shadow=12:fbc5ba1ad600edaa indirect=12:fbc5ba1ad600edaa +geom 464: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.1353691 motion [] pieces all=12:049353c120cbebfc camera=12:049353c120cbebfc shadow=12:049353c120cbebfc indirect=12:049353c120cbebfc +geom 465: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.8273636 motion [] pieces all=12:3c3011131e7e8813 camera=12:3c3011131e7e8813 shadow=12:3c3011131e7e8813 indirect=12:3c3011131e7e8813 +geom 466: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0902855 motion [] pieces all=12:772930a049a7379c camera=12:772930a049a7379c shadow=12:772930a049a7379c indirect=12:772930a049a7379c +geom 467: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.93297297 motion [] pieces all=12:25b9c445d211692a camera=12:25b9c445d211692a shadow=12:25b9c445d211692a indirect=12:25b9c445d211692a +geom 468: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.027414 motion [] pieces all=12:740d229d84e9cff7 camera=12:740d229d84e9cff7 shadow=12:740d229d84e9cff7 indirect=12:740d229d84e9cff7 +geom 469: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.96549386 motion [] pieces all=12:0aaa0db013610e8a camera=12:0aaa0db013610e8a shadow=12:0aaa0db013610e8a indirect=12:0aaa0db013610e8a +geom 470: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.8634908 motion [] pieces all=12:2fbc17d887102e0e camera=12:2fbc17d887102e0e shadow=12:2fbc17d887102e0e indirect=12:2fbc17d887102e0e +geom 471: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.165813 motion [] pieces all=12:016baf1b7130dcdc camera=12:016baf1b7130dcdc shadow=12:016baf1b7130dcdc indirect=12:016baf1b7130dcdc +geom 472: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.9932002 motion [] pieces all=12:614b99fb4286ac07 camera=12:614b99fb4286ac07 shadow=12:614b99fb4286ac07 indirect=12:614b99fb4286ac07 +geom 473: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0138267 motion [] pieces all=12:7f75b45364112aba camera=12:7f75b45364112aba shadow=12:7f75b45364112aba indirect=12:7f75b45364112aba +geom 474: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.8838996 motion [] pieces all=12:188942be9177a3f5 camera=12:188942be9177a3f5 shadow=12:188942be9177a3f5 indirect=12:188942be9177a3f5 +geom 475: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.1870891 motion [] pieces all=12:7546e17f458e7da2 camera=12:7546e17f458e7da2 shadow=12:7546e17f458e7da2 indirect=12:7546e17f458e7da2 +geom 476: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.1059833 motion [] pieces all=12:26de3a63ac32d9c0 camera=12:26de3a63ac32d9c0 shadow=12:26de3a63ac32d9c0 indirect=12:26de3a63ac32d9c0 +geom 477: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.8076202 motion [] pieces all=12:e1c21f8a4b9a925f camera=12:e1c21f8a4b9a925f shadow=12:e1c21f8a4b9a925f indirect=12:e1c21f8a4b9a925f +geom 478: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.917528 motion [] pieces all=12:7e89e6fe71b7d5e1 camera=12:7e89e6fe71b7d5e1 shadow=12:7e89e6fe71b7d5e1 indirect=12:7e89e6fe71b7d5e1 +geom 479: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0525516 motion [] pieces all=12:2e4367fb76a93572 camera=12:2e4367fb76a93572 shadow=12:2e4367fb76a93572 indirect=12:2e4367fb76a93572 +geom 480: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.1471847 motion [] pieces all=12:487ee130369a3f18 camera=12:487ee130369a3f18 shadow=12:487ee130369a3f18 indirect=12:487ee130369a3f18 +geom 481: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.8377189 motion [] pieces all=12:81f60f5e764c9e94 camera=12:81f60f5e764c9e94 shadow=12:81f60f5e764c9e94 indirect=12:81f60f5e764c9e94 +geom 482: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.9474101 motion [] pieces all=12:26736fb3efaf0e8b camera=12:26736fb3efaf0e8b shadow=12:26736fb3efaf0e8b indirect=12:26736fb3efaf0e8b +geom 483: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.085121 motion [] pieces all=12:9661338d340c04ba camera=12:9661338d340c04ba shadow=12:9661338d340c04ba indirect=12:9661338d340c04ba +geom 484: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.856993 motion [] pieces all=12:dbdb91d39e8aae83 camera=12:dbdb91d39e8aae83 shadow=12:dbdb91d39e8aae83 indirect=12:dbdb91d39e8aae83 +geom 485: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.1528894 motion [] pieces all=12:77eb4b680ce04830 camera=12:77eb4b680ce04830 shadow=12:77eb4b680ce04830 indirect=12:77eb4b680ce04830 +geom 486: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.038916 motion [] pieces all=12:81a43a78bc1e73fd camera=12:81a43a78bc1e73fd shadow=12:81a43a78bc1e73fd indirect=12:81a43a78bc1e73fd +geom 487: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.9504711 motion [] pieces all=12:5ff064de78509a0a camera=12:5ff064de78509a0a shadow=12:5ff064de78509a0a indirect=12:5ff064de78509a0a +geom 488: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0637788 motion [] pieces all=12:559a1655469b6861 camera=12:559a1655469b6861 shadow=12:559a1655469b6861 indirect=12:559a1655469b6861 +geom 489: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.90910155 motion [] pieces all=12:44a0535ec759978f camera=12:44a0535ec759978f shadow=12:44a0535ec759978f indirect=12:44a0535ec759978f +geom 490: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.1182432 motion [] pieces all=12:8b8f0bbb4571f9ae camera=12:8b8f0bbb4571f9ae shadow=12:8b8f0bbb4571f9ae indirect=12:8b8f0bbb4571f9ae +geom 491: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.82327044 motion [] pieces all=12:044596a57f782592 camera=12:044596a57f782592 shadow=12:044596a57f782592 indirect=12:044596a57f782592 +geom 492: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.193281 motion [] pieces all=12:583665b31fb2f901 camera=12:583665b31fb2f901 shadow=12:583665b31fb2f901 indirect=12:583665b31fb2f901 +geom 493: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.8985092 motion [] pieces all=12:16ee9626140776f4 camera=12:16ee9626140776f4 shadow=12:16ee9626140776f4 indirect=12:16ee9626140776f4 +geom 494: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.9765626 motion [] pieces all=12:9ac81ebc0d4f4c1d camera=12:9ac81ebc0d4f4c1d shadow=12:9ac81ebc0d4f4c1d indirect=12:9ac81ebc0d4f4c1d +geom 495: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0068495 motion [] pieces all=12:b55004e8fe41a807 camera=12:b55004e8fe41a807 shadow=12:b55004e8fe41a807 indirect=12:b55004e8fe41a807 +geom 496: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.1257349 motion [] pieces all=12:794d02ae4d0bbc6b camera=12:794d02ae4d0bbc6b shadow=12:794d02ae4d0bbc6b indirect=12:794d02ae4d0bbc6b +geom 497: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.8368855 motion [] pieces all=12:978c75be788afc67 camera=12:978c75be788afc67 shadow=12:978c75be788afc67 indirect=12:978c75be788afc67 +geom 498: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.92759454 motion [] pieces all=12:8c8da1e4983b11c8 camera=12:8c8da1e4983b11c8 shadow=12:8c8da1e4983b11c8 indirect=12:8c8da1e4983b11c8 +geom 499: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0956422 motion [] pieces all=12:ac83c9c903ea15c9 camera=12:ac83c9c903ea15c9 shadow=12:ac83c9c903ea15c9 indirect=12:ac83c9c903ea15c9 +geom 500: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=12:d69dc8407e39c57d camera=12:d69dc8407e39c57d shadow=12:d69dc8407e39c57d indirect=12:d69dc8407e39c57d +geom 501: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=12:108ece7556e2045d camera=12:108ece7556e2045d shadow=12:108ece7556e2045d indirect=12:108ece7556e2045d +geom 502: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=12:b6f2f6b932607ce5 camera=12:b6f2f6b932607ce5 shadow=12:b6f2f6b932607ce5 indirect=12:b6f2f6b932607ce5 +geom 503: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=12:18f7f442a8f08005 camera=12:18f7f442a8f08005 shadow=12:18f7f442a8f08005 indirect=12:18f7f442a8f08005 +geom 504: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=12:95835634df888e55 camera=12:95835634df888e55 shadow=12:95835634df888e55 indirect=12:95835634df888e55 +geom 505: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=12:26e126fb8d08607d camera=12:26e126fb8d08607d shadow=12:26e126fb8d08607d indirect=12:26e126fb8d08607d +geom 506: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=4:d3ae5d8c61eeefd5 camera=4:d3ae5d8c61eeefd5 shadow=4:d3ae5d8c61eeefd5 indirect=4:d3ae5d8c61eeefd5 +geom 507: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:02dee92ba923d022 camera=2:02dee92ba923d022 shadow=2:02dee92ba923d022 indirect=2:02dee92ba923d022 +geom 508: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:d420bef838b31092 camera=2:d420bef838b31092 shadow=2:d420bef838b31092 indirect=2:d420bef838b31092 +geom 509: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=128:7e7f92bf6cf1e8e1 camera=128:7e7f92bf6cf1e8e1 shadow=128:7e7f92bf6cf1e8e1 indirect=128:7e7f92bf6cf1e8e1 +geom 510: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:5fd3af8a8974e005 camera=2:5fd3af8a8974e005 shadow=2:5fd3af8a8974e005 indirect=2:5fd3af8a8974e005 +geom 511: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:9626b0f2f3e041c5 camera=2:9626b0f2f3e041c5 shadow=2:9626b0f2f3e041c5 indirect=2:9626b0f2f3e041c5 +geom 512: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=12:65eff1dac76e16e5 camera=12:65eff1dac76e16e5 shadow=12:65eff1dac76e16e5 indirect=12:65eff1dac76e16e5 +geom 513: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=12:c5bbf2f135b5e22b camera=12:c5bbf2f135b5e22b shadow=12:c5bbf2f135b5e22b indirect=12:c5bbf2f135b5e22b +geom 514: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:77f8032df1a5e1f5 camera=2:77f8032df1a5e1f5 shadow=2:77f8032df1a5e1f5 indirect=2:77f8032df1a5e1f5 +provenance arc source: /Crate +provenance arc source: /Crate/geo +provenance arc source: /World/stones/Prototypes/stone_a +provenance arc source: /World/stones/Prototypes/stone_b +provenance arc source: /_Cube +provenance light /World/Sky: LightOrigin { index: 0, geoms: 514..514 } +provenance geometry 0..500: /World/stones +provenance geometry 500..501: /World/pebble/geo +provenance geometry 501..502: /World/away/geo +provenance geometry 502..503: /World/box/geo +provenance geometry 503..504: /World/sunk/geo +provenance geometry 504..505: /World/rock/geo +provenance geometry 505..506: /World/vase/geo +provenance geometry 506..507: /World/steps/geo +provenance geometry 507..508: /World/field/geo +provenance geometry 508..509: /World/slope/geo +provenance geometry 509..510: /World/terrain/geo +provenance geometry 510..511: /World/shelf/geo +provenance geometry 511..512: /World/floor/geo +provenance geometry 512..513: /World/inst +provenance geometry 513..514: /World/crate/geo +provenance geometry 514..515: /World/table/geo +provenance mesh: MeshOrigin { geom_id: 500, slot: 2, baked: false, moving: false } +provenance mesh: MeshOrigin { geom_id: 501, slot: 2, baked: false, moving: false } +provenance mesh: MeshOrigin { geom_id: 502, slot: 2, baked: false, moving: false } +provenance mesh: MeshOrigin { geom_id: 503, slot: 2, baked: false, moving: false } +provenance mesh: MeshOrigin { geom_id: 504, slot: 3, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 505, slot: 4, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 506, slot: 5, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 507, slot: 6, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 508, slot: 7, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 509, slot: 8, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 510, slot: 9, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 511, slot: 10, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 513, slot: 2, baked: false, moving: false } +provenance mesh: MeshOrigin { geom_id: 514, slot: 11, baked: true, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 4345222167175548266, n_points: 8, n_indices: 24, n_uvs: None, smooth: true, material: 0 }), placements: 0, shared: true, displaced: false } +provenance mesh slot 1: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 735706973108043347, n_points: 8, n_indices: 24, n_uvs: None, smooth: true, material: 0 }), placements: 0, shared: true, displaced: false } +provenance mesh slot 2: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 2634041098053373584, n_points: 8, n_indices: 24, n_uvs: None, smooth: true, material: 0 }), placements: 5, shared: true, displaced: false } +provenance mesh slot 3: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 14470132405950877311, n_points: 8, n_indices: 24, n_uvs: None, smooth: true, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 4: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 1206830347127950734, n_points: 8, n_indices: 24, n_uvs: None, smooth: true, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 5: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 9519870911682368984, n_points: 6, n_indices: 8, n_uvs: None, smooth: true, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 6: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 1341889141698287293, n_points: 4, n_indices: 4, n_uvs: None, smooth: true, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 7: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 1313731086437247865, n_points: 4, n_indices: 4, n_uvs: None, smooth: true, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 8: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 15760070156626746114, n_points: 81, n_indices: 256, n_uvs: None, smooth: true, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 9: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 1050066994217133652, n_points: 4, n_indices: 4, n_uvs: None, smooth: true, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 10: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 14002714535549629103, n_points: 4, n_indices: 4, n_uvs: None, smooth: true, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 11: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 14095911038168715313, n_points: 4, n_indices: 4, n_uvs: None, smooth: true, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: true }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/World/Cam"), cameras: ["/World/Cam"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/World/Cam"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/placed_usda-7c35981b427daf53-1.image b/crates/crust-core/tests/data/import_baselines/placed_usda-7c35981b427daf53-1.image new file mode 100644 index 000000000..d6302dd1b --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/placed_usda-7c35981b427daf53-1.image @@ -0,0 +1 @@ +48x32 16spp clamp-off 74128e666e058a48 diff --git a/crates/crust-core/tests/data/import_baselines/placed_usda-7c35981b427daf53-2.digest b/crates/crust-core/tests/data/import_baselines/placed_usda-7c35981b427daf53-2.digest new file mode 100644 index 000000000..43ce77028 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/placed_usda-7c35981b427daf53-2.digest @@ -0,0 +1,585 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/World/Cam") +camera: Camera { origin: Vec3A(0.0, 4.0, 14.0), lower_left_corner: Vec3A(-6.371167, -0.2474451, 4.0), horizontal: Vec3A(12.742334, 0.0, 0.0), vertical: Vec3A(0.0, 8.49489, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: Some("/Render/settings") +settings: RenderSettings { samples_per_pixel: 128, max_depth: 3, width: 48, height: 32, region: PixelRect { x0: 0, y0: 0, x1: 48, y1: 32 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 18.0, aperture: [20.955, 15.2908], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 10.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/placed.usda", "$DIR/stage.usda", "$DIR/table.usda"], invisible_overrides: Some(0) } +layer: $DIR/crate.usda +layer: $DIR/placed.usda +layer: $DIR/stage.usda +layer: $DIR/stone_a.usda +layer: $DIR/stone_b.usda +layer: $DIR/table.usda +lights: 1 +light 0: dome name Some("/World/Sky") lpe None pmf 1.0 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 515 geometries, PrimitiveBreakdown { triangles: 166, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 506 } top level, PrimitiveBreakdown { triangles: 202, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 506 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.1761441 motion [] pieces all=12:45a862dded98b1c6 camera=12:45a862dded98b1c6 shadow=12:45a862dded98b1c6 indirect=12:45a862dded98b1c6 +geom 1: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.8810865 motion [] pieces all=12:64944d265981058e camera=12:64944d265981058e shadow=12:64944d265981058e indirect=12:64944d265981058e +geom 2: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0232378 motion [] pieces all=12:3388e3ca138a3f1f camera=12:3388e3ca138a3f1f shadow=12:3388e3ca138a3f1f indirect=12:3388e3ca138a3f1f +geom 3: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.99894494 motion [] pieces all=12:fdfa25d8c193c4a0 camera=12:fdfa25d8c193c4a0 shadow=12:fdfa25d8c193c4a0 indirect=12:fdfa25d8c193c4a0 +geom 4: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.1065642 motion [] pieces all=12:6955ab4220a0f7f0 camera=12:6955ab4220a0f7f0 shadow=12:6955ab4220a0f7f0 indirect=12:6955ab4220a0f7f0 +geom 5: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.80337954 motion [] pieces all=12:e2e3eb04df83a72a camera=12:e2e3eb04df83a72a shadow=12:e2e3eb04df83a72a indirect=12:e2e3eb04df83a72a +geom 6: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0571522 motion [] pieces all=12:61f3b3daf13919ed camera=12:61f3b3daf13919ed shadow=12:61f3b3daf13919ed indirect=12:61f3b3daf13919ed +geom 7: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.9235039 motion [] pieces all=12:67d2180e9e401524 camera=12:67d2180e9e401524 shadow=12:67d2180e9e401524 indirect=12:67d2180e9e401524 +geom 8: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.97259986 motion [] pieces all=12:76d9e29bdce76947 camera=12:76d9e29bdce76947 shadow=12:76d9e29bdce76947 indirect=12:76d9e29bdce76947 +geom 9: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0333868 motion [] pieces all=12:f70acb4c14b57733 camera=12:f70acb4c14b57733 shadow=12:f70acb4c14b57733 indirect=12:f70acb4c14b57733 +geom 10: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.8712479 motion [] pieces all=12:a6e3103831c2bb95 camera=12:a6e3103831c2bb95 shadow=12:a6e3103831c2bb95 indirect=12:a6e3103831c2bb95 +geom 11: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.1695868 motion [] pieces all=12:b68f582acb9488d9 camera=12:b68f582acb9488d9 shadow=12:b68f582acb9488d9 indirect=12:b68f582acb9488d9 +geom 12: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.8319464 motion [] pieces all=12:acbc4ae83f658381 camera=12:acbc4ae83f658381 shadow=12:acbc4ae83f658381 indirect=12:acbc4ae83f658381 +geom 13: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.13118 motion [] pieces all=12:598aa1811e9041e8 camera=12:598aa1811e9041e8 shadow=12:598aa1811e9041e8 indirect=12:598aa1811e9041e8 +geom 14: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0985051 motion [] pieces all=12:e42f85275179f9eb camera=12:e42f85275179f9eb shadow=12:e42f85275179f9eb indirect=12:e42f85275179f9eb +geom 15: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.930394 motion [] pieces all=12:ecc186bbcfc12323 camera=12:ecc186bbcfc12323 shadow=12:ecc186bbcfc12323 indirect=12:ecc186bbcfc12323 +geom 16: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.1146806 motion [] pieces all=12:57da4df43fb578d2 camera=12:57da4df43fb578d2 shadow=12:57da4df43fb578d2 indirect=12:57da4df43fb578d2 +geom 17: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.8209351 motion [] pieces all=12:e25b06971fef82ac camera=12:e25b06971fef82ac shadow=12:e25b06971fef82ac indirect=12:e25b06971fef82ac +geom 18: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0663182 motion [] pieces all=12:b307914e162ebd94 camera=12:b307914e162ebd94 shadow=12:b307914e162ebd94 indirect=12:b307914e162ebd94 +geom 19: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.9115253 motion [] pieces all=12:24a6e636442db05b camera=12:24a6e636442db05b shadow=12:24a6e636442db05b indirect=12:24a6e636442db05b +geom 20: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.1879729 motion [] pieces all=12:481f9cd756cedde0 camera=12:481f9cd756cedde0 shadow=12:481f9cd756cedde0 indirect=12:481f9cd756cedde0 +geom 21: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.8957119 motion [] pieces all=12:2d4663e6184de452 camera=12:2d4663e6184de452 shadow=12:2d4663e6184de452 indirect=12:2d4663e6184de452 +geom 22: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0098108 motion [] pieces all=12:b0bb69961ba75478 camera=12:b0bb69961ba75478 shadow=12:b0bb69961ba75478 indirect=12:b0bb69961ba75478 +geom 23: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.98019165 motion [] pieces all=12:b9afdaa931bffdb6 camera=12:b9afdaa931bffdb6 shadow=12:b9afdaa931bffdb6 indirect=12:b9afdaa931bffdb6 +geom 24: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0813562 motion [] pieces all=12:f5d0fb106b756265 camera=12:f5d0fb106b756265 shadow=12:f5d0fb106b756265 indirect=12:f5d0fb106b756265 +geom 25: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.94515204 motion [] pieces all=12:089190d039cd8f05 camera=12:089190d039cd8f05 shadow=12:089190d039cd8f05 indirect=12:089190d039cd8f05 +geom 26: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.84345704 motion [] pieces all=12:e26f0d45af850c90 camera=12:e26f0d45af850c90 shadow=12:e26f0d45af850c90 indirect=12:e26f0d45af850c90 +geom 27: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.1462855 motion [] pieces all=12:b6f87466c44a00c9 camera=12:b6f87466c44a00c9 shadow=12:b6f87466c44a00c9 indirect=12:b6f87466c44a00c9 +geom 28: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.1544222 motion [] pieces all=12:797d242554fe864a camera=12:797d242554fe864a shadow=12:797d242554fe864a indirect=12:797d242554fe864a +geom 29: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.86153686 motion [] pieces all=12:be846117a4ea7801 camera=12:be846117a4ea7801 shadow=12:be846117a4ea7801 indirect=12:be846117a4ea7801 +geom 30: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0419827 motion [] pieces all=12:6ddf27426dad80b8 camera=12:6ddf27426dad80b8 shadow=12:6ddf27426dad80b8 indirect=12:6ddf27426dad80b8 +geom 31: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.9549145 motion [] pieces all=12:3f3d2de984f016e1 camera=12:3f3d2de984f016e1 shadow=12:3f3d2de984f016e1 indirect=12:3f3d2de984f016e1 +geom 32: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.1013982 motion [] pieces all=12:d325740a4c504329 camera=12:d325740a4c504329 shadow=12:d325740a4c504329 indirect=12:d325740a4c504329 +geom 33: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.8114375 motion [] pieces all=12:f529c99ebd35ea5e camera=12:f529c99ebd35ea5e shadow=12:f529c99ebd35ea5e indirect=12:f529c99ebd35ea5e +geom 34: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0561118 motion [] pieces all=12:3b32daf9fb97191e camera=12:3b32daf9fb97191e shadow=12:3b32daf9fb97191e indirect=12:3b32daf9fb97191e +geom 35: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.91436315 motion [] pieces all=12:9336514ad2a50746 camera=12:9336514ad2a50746 shadow=12:9336514ad2a50746 indirect=12:9336514ad2a50746 +geom 36: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.8854387 motion [] pieces all=12:ee06eb3bb41cf5e3 camera=12:ee06eb3bb41cf5e3 shadow=12:ee06eb3bb41cf5e3 indirect=12:ee06eb3bb41cf5e3 +geom 37: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.1826364 motion [] pieces all=12:6ab824c87ddbb42e camera=12:6ab824c87ddbb42e shadow=12:6ab824c87ddbb42e indirect=12:6ab824c87ddbb42e +geom 38: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.98780096 motion [] pieces all=12:3e246edc11785421 camera=12:3e246edc11785421 shadow=12:3e246edc11785421 indirect=12:3e246edc11785421 +geom 39: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0161881 motion [] pieces all=12:460bcfda839b7475 camera=12:460bcfda839b7475 shadow=12:460bcfda839b7475 indirect=12:460bcfda839b7475 +geom 40: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.1313198 motion [] pieces all=12:1df02a18f6ef0cb0 camera=12:1df02a18f6ef0cb0 shadow=12:1df02a18f6ef0cb0 indirect=12:1df02a18f6ef0cb0 +geom 41: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.8307075 motion [] pieces all=12:e5bd325c9cc63258 camera=12:e5bd325c9cc63258 shadow=12:e5bd325c9cc63258 indirect=12:e5bd325c9cc63258 +geom 42: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.93608296 motion [] pieces all=12:eaf20bfe2d9d2ea8 camera=12:eaf20bfe2d9d2ea8 shadow=12:eaf20bfe2d9d2ea8 indirect=12:eaf20bfe2d9d2ea8 +geom 43: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0927486 motion [] pieces all=12:0b46814b8788d10c camera=12:0b46814b8788d10c shadow=12:0b46814b8788d10c indirect=12:0b46814b8788d10c +geom 44: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.9677548 motion [] pieces all=12:a11085306be96c79 camera=12:a11085306be96c79 shadow=12:a11085306be96c79 indirect=12:a11085306be96c79 +geom 45: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0287622 motion [] pieces all=12:a2e4e83ee9235718 camera=12:a2e4e83ee9235718 shadow=12:a2e4e83ee9235718 indirect=12:a2e4e83ee9235718 +geom 46: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.867445 motion [] pieces all=12:52a12ca2ad2269a0 camera=12:52a12ca2ad2269a0 shadow=12:52a12ca2ad2269a0 indirect=12:52a12ca2ad2269a0 +geom 47: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.1652948 motion [] pieces all=12:8ac666cdc9aed126 camera=12:8ac666cdc9aed126 shadow=12:8ac666cdc9aed126 indirect=12:8ac666cdc9aed126 +geom 48: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.1573718 motion [] pieces all=12:dc22e4e0c3a563c5 camera=12:dc22e4e0c3a563c5 shadow=12:dc22e4e0c3a563c5 indirect=12:dc22e4e0c3a563c5 +geom 49: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.8516039 motion [] pieces all=12:d5439bf95adb5d29 camera=12:d5439bf95adb5d29 shadow=12:d5439bf95adb5d29 indirect=12:d5439bf95adb5d29 +geom 50: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.957956 motion [] pieces all=12:a2366eb57be17947 camera=12:a2366eb57be17947 shadow=12:a2366eb57be17947 indirect=12:a2366eb57be17947 +geom 51: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0476611 motion [] pieces all=12:aa424a427bf1da18 camera=12:aa424a427bf1da18 shadow=12:aa424a427bf1da18 indirect=12:aa424a427bf1da18 +geom 52: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.94141537 motion [] pieces all=12:439332df7477a2f0 camera=12:439332df7477a2f0 shadow=12:439332df7477a2f0 indirect=12:439332df7477a2f0 +geom 53: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0779837 motion [] pieces all=12:050de2f979a00214 camera=12:050de2f979a00214 shadow=12:050de2f979a00214 indirect=12:050de2f979a00214 +geom 54: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.84913945 motion [] pieces all=12:d359da50fe63fc4e camera=12:d359da50fe63fc4e shadow=12:d359da50fe63fc4e indirect=12:d359da50fe63fc4e +geom 55: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.1388466 motion [] pieces all=12:f274bc0e146ac6ec camera=12:f274bc0e146ac6ec shadow=12:f274bc0e146ac6ec indirect=12:f274bc0e146ac6ec +geom 56: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.81745243 motion [] pieces all=12:59b88eaab766334e camera=12:59b88eaab766334e shadow=12:59b88eaab766334e indirect=12:59b88eaab766334e +geom 57: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.1221887 motion [] pieces all=12:4391248690d8a96c camera=12:4391248690d8a96c shadow=12:4391248690d8a96c indirect=12:4391248690d8a96c +geom 58: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0737523 motion [] pieces all=12:5ca2a2dc5d2ca537 camera=12:5ca2a2dc5d2ca537 shadow=12:5ca2a2dc5d2ca537 indirect=12:5ca2a2dc5d2ca537 +geom 59: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.90149456 motion [] pieces all=12:c6c2782f00a068ab camera=12:c6c2782f00a068ab shadow=12:c6c2782f00a068ab indirect=12:c6c2782f00a068ab +geom 60: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.98508954 motion [] pieces all=12:75bc6455fa6a273c camera=12:75bc6455fa6a273c shadow=12:75bc6455fa6a273c indirect=12:75bc6455fa6a273c +geom 61: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0035064 motion [] pieces all=12:197384b40f7a87e2 camera=12:197384b40f7a87e2 shadow=12:197384b40f7a87e2 indirect=12:197384b40f7a87e2 +geom 62: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.8923537 motion [] pieces all=12:2b6626eb636f521c camera=12:2b6626eb636f521c shadow=12:2b6626eb636f521c indirect=12:2b6626eb636f521c +geom 63: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.1949198 motion [] pieces all=12:61af9c9b07f1116d camera=12:61af9c9b07f1116d shadow=12:61af9c9b07f1116d indirect=12:61af9c9b07f1116d +geom 64: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.1920719 motion [] pieces all=12:cfd846df87adb0da camera=12:cfd846df87adb0da shadow=12:cfd846df87adb0da indirect=12:cfd846df87adb0da +geom 65: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.8984334 motion [] pieces all=12:333d41a0dcb2e201 camera=12:333d41a0dcb2e201 shadow=12:333d41a0dcb2e201 indirect=12:333d41a0dcb2e201 +geom 66: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.9751323 motion [] pieces all=12:b7bdd232140c4521 camera=12:b7bdd232140c4521 shadow=12:b7bdd232140c4521 indirect=12:b7bdd232140c4521 +geom 67: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0087382 motion [] pieces all=12:d13ed6cfaf8f058c camera=12:d13ed6cfaf8f058c shadow=12:d13ed6cfaf8f058c indirect=12:d13ed6cfaf8f058c +geom 68: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0648361 motion [] pieces all=12:c21a4efa1141550f camera=12:c21a4efa1141550f shadow=12:c21a4efa1141550f indirect=12:c21a4efa1141550f +geom 69: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.90664405 motion [] pieces all=12:c2720b1e01aad493 camera=12:c2720b1e01aad493 shadow=12:c2720b1e01aad493 indirect=12:c2720b1e01aad493 +geom 70: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.1171777 motion [] pieces all=12:fad9d3b4cef64b24 camera=12:fad9d3b4cef64b24 shadow=12:fad9d3b4cef64b24 indirect=12:fad9d3b4cef64b24 +geom 71: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.824887 motion [] pieces all=12:f4410e325cd0afb1 camera=12:f4410e325cd0afb1 shadow=12:f4410e325cd0afb1 indirect=12:f4410e325cd0afb1 +geom 72: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.9516001 motion [] pieces all=12:cc84d88f692e85a6 camera=12:cc84d88f692e85a6 shadow=12:cc84d88f692e85a6 indirect=12:cc84d88f692e85a6 +geom 73: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0400816 motion [] pieces all=12:e22ab20fe11d8cfe camera=12:e22ab20fe11d8cfe shadow=12:e22ab20fe11d8cfe indirect=12:e22ab20fe11d8cfe +geom 74: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.8592531 motion [] pieces all=12:13c0a13a86e249ef camera=12:13c0a13a86e249ef shadow=12:13c0a13a86e249ef indirect=12:13c0a13a86e249ef +geom 75: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.1510249 motion [] pieces all=12:1937c664f4367544 camera=12:1937c664f4367544 shadow=12:1937c664f4367544 indirect=12:1937c664f4367544 +geom 76: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0866565 motion [] pieces all=12:5db5fb4d3b4d5b35 camera=12:5db5fb4d3b4d5b35 shadow=12:5db5fb4d3b4d5b35 indirect=12:5db5fb4d3b4d5b35 +geom 77: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.9487157 motion [] pieces all=12:d58005e750fb4342 camera=12:d58005e750fb4342 shadow=12:d58005e750fb4342 indirect=12:d58005e750fb4342 +geom 78: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.1492283 motion [] pieces all=12:0342164286461ee3 camera=12:0342164286461ee3 shadow=12:0342164286461ee3 indirect=12:0342164286461ee3 +geom 79: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.83977586 motion [] pieces all=12:c807827e3075e055 camera=12:c807827e3075e055 shadow=12:c807827e3075e055 indirect=12:c807827e3075e055 +geom 80: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0217434 motion [] pieces all=12:5285ac30cc4da062 camera=12:5285ac30cc4da062 shadow=12:5285ac30cc4da062 indirect=12:5285ac30cc4da062 +geom 81: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.9952757 motion [] pieces all=12:10bc56ab6511ed11 camera=12:10bc56ab6511ed11 shadow=12:10bc56ab6511ed11 indirect=12:10bc56ab6511ed11 +geom 82: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.87789065 motion [] pieces all=12:b7b3cff366213430 camera=12:b7b3cff366213430 shadow=12:b7b3cff366213430 indirect=12:b7b3cff366213430 +geom 83: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.179131 motion [] pieces all=12:26dba7352b5248dd camera=12:26dba7352b5248dd shadow=12:26dba7352b5248dd indirect=12:26dba7352b5248dd +geom 84: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.80048686 motion [] pieces all=12:ca11206893156c4a camera=12:ca11206893156c4a shadow=12:ca11206893156c4a indirect=12:ca11206893156c4a +geom 85: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.1101823 motion [] pieces all=12:956ae996e038f15c camera=12:956ae996e038f15c shadow=12:956ae996e038f15c indirect=12:956ae996e038f15c +geom 86: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.92086023 motion [] pieces all=12:bb66f238124bf21c camera=12:bb66f238124bf21c shadow=12:bb66f238124bf21c indirect=12:bb66f238124bf21c +geom 87: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0607451 motion [] pieces all=12:bfb452bde61271c1 camera=12:bfb452bde61271c1 shadow=12:bfb452bde61271c1 indirect=12:bfb452bde61271c1 +geom 88: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.1730204 motion [] pieces all=12:4202277f53e57a26 camera=12:4202277f53e57a26 shadow=12:4202277f53e57a26 indirect=12:4202277f53e57a26 +geom 89: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.8726802 motion [] pieces all=12:bfff37b52c3695b3 camera=12:bfff37b52c3695b3 shadow=12:bfff37b52c3695b3 indirect=12:bfff37b52c3695b3 +geom 90: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0355178 motion [] pieces all=12:d92670a1b5505f3f camera=12:d92670a1b5505f3f shadow=12:d92670a1b5505f3f indirect=12:d92670a1b5505f3f +geom 91: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.97155887 motion [] pieces all=12:038043fc4d8f3922 camera=12:038043fc4d8f3922 shadow=12:038043fc4d8f3922 indirect=12:038043fc4d8f3922 +geom 92: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.1275393 motion [] pieces all=12:21160187a4422810 camera=12:21160187a4422810 shadow=12:21160187a4422810 indirect=12:21160187a4422810 +geom 93: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.83525693 motion [] pieces all=12:222fd24745b9a688 camera=12:222fd24745b9a688 shadow=12:222fd24745b9a688 indirect=12:222fd24745b9a688 +geom 94: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0946484 motion [] pieces all=12:b93a89503d2db429 camera=12:b93a89503d2db429 shadow=12:b93a89503d2db429 indirect=12:b93a89503d2db429 +geom 95: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.92521805 motion [] pieces all=12:9deb2e0bd53286f5 camera=12:9deb2e0bd53286f5 shadow=12:9deb2e0bd53286f5 indirect=12:9deb2e0bd53286f5 +geom 96: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0792248 motion [] pieces all=12:c39dad0894dc3c01 camera=12:c39dad0894dc3c01 shadow=12:c39dad0894dc3c01 indirect=12:c39dad0894dc3c01 +geom 97: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.938952 motion [] pieces all=12:82dba3e562b9171c camera=12:82dba3e562b9171c shadow=12:82dba3e562b9171c indirect=12:82dba3e562b9171c +geom 98: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.8466961 motion [] pieces all=12:5771a39944397bbc camera=12:5771a39944397bbc shadow=12:5771a39944397bbc indirect=12:5771a39944397bbc +geom 99: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.1409111 motion [] pieces all=12:f4f5b1d34830c065 camera=12:f4f5b1d34830c065 shadow=12:f4f5b1d34830c065 indirect=12:f4f5b1d34830c065 +geom 100: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.1619297 motion [] pieces all=12:2ac55dd6a5129a82 camera=12:2ac55dd6a5129a82 shadow=12:2ac55dd6a5129a82 indirect=12:2ac55dd6a5129a82 +geom 101: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.8545255 motion [] pieces all=12:3318ba1c1ea6cb67 camera=12:3318ba1c1ea6cb67 shadow=12:3318ba1c1ea6cb67 indirect=12:3318ba1c1ea6cb67 +geom 102: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0461638 motion [] pieces all=12:abd06b6ac0d101a8 camera=12:abd06b6ac0d101a8 shadow=12:abd06b6ac0d101a8 indirect=12:abd06b6ac0d101a8 +geom 103: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.95997083 motion [] pieces all=12:0e766dd59c7864ea camera=12:0e766dd59c7864ea shadow=12:0e766dd59c7864ea indirect=12:0e766dd59c7864ea +geom 104: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.9838973 motion [] pieces all=12:4e51be9913a19574 camera=12:4e51be9913a19574 shadow=12:4e51be9913a19574 indirect=12:4e51be9913a19574 +geom 105: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0016983 motion [] pieces all=12:205b772513a5b2d0 camera=12:205b772513a5b2d0 shadow=12:205b772513a5b2d0 indirect=12:205b772513a5b2d0 +geom 106: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.1974854 motion [] pieces all=12:aafd38f582755d75 camera=12:aafd38f582755d75 shadow=12:aafd38f582755d75 indirect=12:aafd38f582755d75 +geom 107: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.89059156 motion [] pieces all=12:5e1c6ed9efae70da camera=12:5e1c6ed9efae70da shadow=12:5e1c6ed9efae70da indirect=12:5e1c6ed9efae70da +geom 108: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.1189466 motion [] pieces all=12:1ccc269c6db79208 camera=12:1ccc269c6db79208 shadow=12:1ccc269c6db79208 indirect=12:1ccc269c6db79208 +geom 109: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.81325066 motion [] pieces all=12:13bc64f0b3663db5 camera=12:13bc64f0b3663db5 shadow=12:13bc64f0b3663db5 indirect=12:13bc64f0b3663db5 +geom 110: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.069818 motion [] pieces all=12:932fe7987a89653d camera=12:932fe7987a89653d shadow=12:932fe7987a89653d indirect=12:932fe7987a89653d +geom 111: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.9038211 motion [] pieces all=12:90f5b972915f93b4 camera=12:90f5b972915f93b4 shadow=12:90f5b972915f93b4 indirect=12:90f5b972915f93b4 +geom 112: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.1853997 motion [] pieces all=12:8179b93651694931 camera=12:8179b93651694931 shadow=12:8179b93651694931 indirect=12:8179b93651694931 +geom 113: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.88160837 motion [] pieces all=12:069fc554995e3ee7 camera=12:069fc554995e3ee7 shadow=12:069fc554995e3ee7 indirect=12:069fc554995e3ee7 +geom 114: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0146524 motion [] pieces all=12:e176080f78b1eb15 camera=12:e176080f78b1eb15 shadow=12:e176080f78b1eb15 indirect=12:e176080f78b1eb15 +geom 115: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.99161226 motion [] pieces all=12:ef58b8a0de63d3c4 camera=12:ef58b8a0de63d3c4 shadow=12:ef58b8a0de63d3c4 indirect=12:ef58b8a0de63d3c4 +geom 116: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0511867 motion [] pieces all=12:4b16770c04cd474b camera=12:4b16770c04cd474b shadow=12:4b16770c04cd474b indirect=12:4b16770c04cd474b +geom 117: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.9171676 motion [] pieces all=12:609f6f3ddcf1af6d camera=12:609f6f3ddcf1af6d shadow=12:609f6f3ddcf1af6d indirect=12:609f6f3ddcf1af6d +geom 118: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.80908626 motion [] pieces all=12:4c035f8f3318d2f6 camera=12:4c035f8f3318d2f6 shadow=12:4c035f8f3318d2f6 indirect=12:4c035f8f3318d2f6 +geom 119: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.103263 motion [] pieces all=12:700889d040a6e4dd camera=12:700889d040a6e4dd shadow=12:700889d040a6e4dd indirect=12:700889d040a6e4dd +geom 120: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.8642026 motion [] pieces all=12:6e10e505ba86c48e camera=12:6e10e505ba86c48e shadow=12:6e10e505ba86c48e indirect=12:6e10e505ba86c48e +geom 121: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.1678903 motion [] pieces all=12:3582f8fba0915f4a camera=12:3582f8fba0915f4a shadow=12:3582f8fba0915f4a indirect=12:3582f8fba0915f4a +geom 122: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.9633117 motion [] pieces all=12:2040ef2ac8c3a93d camera=12:2040ef2ac8c3a93d shadow=12:2040ef2ac8c3a93d indirect=12:2040ef2ac8c3a93d +geom 123: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0253445 motion [] pieces all=12:a91be1fa2268d70b camera=12:a91be1fa2268d70b shadow=12:a91be1fa2268d70b indirect=12:a91be1fa2268d70b +geom 124: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.13635 motion [] pieces all=12:9e7372e64ec5bb9d camera=12:9e7372e64ec5bb9d shadow=12:9e7372e64ec5bb9d indirect=12:9e7372e64ec5bb9d +geom 125: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.8252184 motion [] pieces all=12:27afe71487c8acfc camera=12:27afe71487c8acfc shadow=12:27afe71487c8acfc indirect=12:27afe71487c8acfc +geom 126: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0885826 motion [] pieces all=12:c9ce7a955379bf47 camera=12:c9ce7a955379bf47 shadow=12:c9ce7a955379bf47 indirect=12:c9ce7a955379bf47 +geom 127: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.9313929 motion [] pieces all=12:f936746ea9fdaa67 camera=12:f936746ea9fdaa67 shadow=12:f936746ea9fdaa67 indirect=12:f936746ea9fdaa67 +geom 128: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0906614 motion [] pieces all=12:e6990c8db4ea9e79 camera=12:e6990c8db4ea9e79 shadow=12:e6990c8db4ea9e79 indirect=12:e6990c8db4ea9e79 +geom 129: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.93495494 motion [] pieces all=12:75b610907ba3ea9b camera=12:75b610907ba3ea9b shadow=12:75b610907ba3ea9b indirect=12:75b610907ba3ea9b +geom 130: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.82858384 motion [] pieces all=12:e78b8cafbe306a32 camera=12:e78b8cafbe306a32 shadow=12:e78b8cafbe306a32 indirect=12:e78b8cafbe306a32 +geom 131: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.1339966 motion [] pieces all=12:b9ac9a14840ed1f6 camera=12:b9ac9a14840ed1f6 shadow=12:b9ac9a14840ed1f6 indirect=12:b9ac9a14840ed1f6 +geom 132: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.8659113 motion [] pieces all=12:b1a9a739c1c000bc camera=12:b1a9a739c1c000bc shadow=12:b1a9a739c1c000bc indirect=12:b1a9a739c1c000bc +geom 133: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.1626551 motion [] pieces all=12:9f5c63d26cf251c1 camera=12:9f5c63d26cf251c1 shadow=12:9f5c63d26cf251c1 indirect=12:9f5c63d26cf251c1 +geom 134: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.96570367 motion [] pieces all=12:e82835f20fda3a2d camera=12:e82835f20fda3a2d shadow=12:e82835f20fda3a2d indirect=12:e82835f20fda3a2d +geom 135: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0299364 motion [] pieces all=12:a9c34018dedecc29 camera=12:a9c34018dedecc29 shadow=12:a9c34018dedecc29 indirect=12:a9c34018dedecc29 +geom 136: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0544772 motion [] pieces all=12:f171c63901b9cd24 camera=12:f171c63901b9cd24 shadow=12:f171c63901b9cd24 indirect=12:f171c63901b9cd24 +geom 137: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.9139284 motion [] pieces all=12:66942b3dbac18127 camera=12:66942b3dbac18127 shadow=12:66942b3dbac18127 indirect=12:66942b3dbac18127 +geom 138: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.103051 motion [] pieces all=12:0c9467685e6faf9b camera=12:0c9467685e6faf9b shadow=12:0c9467685e6faf9b indirect=12:0c9467685e6faf9b +geom 139: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.81037587 motion [] pieces all=12:4628207e87532cd9 camera=12:4628207e87532cd9 shadow=12:4628207e87532cd9 indirect=12:4628207e87532cd9 +geom 140: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0183249 motion [] pieces all=12:865fd372ca38e7d5 camera=12:865fd372ca38e7d5 shadow=12:865fd372ca38e7d5 indirect=12:865fd372ca38e7d5 +geom 141: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.99033916 motion [] pieces all=12:fd4547bf3f39772e camera=12:fd4547bf3f39772e shadow=12:fd4547bf3f39772e indirect=12:fd4547bf3f39772e +geom 142: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.1833695 motion [] pieces all=12:4718ab9f74de7af5 camera=12:4718ab9f74de7af5 shadow=12:4718ab9f74de7af5 indirect=12:4718ab9f74de7af5 +geom 143: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.8870931 motion [] pieces all=12:f073ad6af47da1b9 camera=12:f073ad6af47da1b9 shadow=12:f073ad6af47da1b9 indirect=12:f073ad6af47da1b9 +geom 144: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0751863 motion [] pieces all=12:469243371e3601c4 camera=12:469243371e3601c4 shadow=12:469243371e3601c4 indirect=12:469243371e3601c4 +geom 145: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.94338113 motion [] pieces all=12:242ede1ac82d2838 camera=12:242ede1ac82d2838 shadow=12:242ede1ac82d2838 indirect=12:242ede1ac82d2838 +geom 146: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.1404334 motion [] pieces all=12:6ae0e374492b1345 camera=12:6ae0e374492b1345 shadow=12:6ae0e374492b1345 indirect=12:6ae0e374492b1345 +geom 147: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.84811646 motion [] pieces all=12:7fc28f36f60f9e79 camera=12:7fc28f36f60f9e79 shadow=12:7fc28f36f60f9e79 indirect=12:7fc28f36f60f9e79 +geom 148: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.1578814 motion [] pieces all=12:004bab5661b3c514 camera=12:004bab5661b3c514 shadow=12:004bab5661b3c514 indirect=12:004bab5661b3c514 +geom 149: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.8510541 motion [] pieces all=12:06ee30278c301b97 camera=12:06ee30278c301b97 shadow=12:06ee30278c301b97 indirect=12:06ee30278c301b97 +geom 150: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.95639116 motion [] pieces all=12:0cc69f7eab6608d5 camera=12:0cc69f7eab6608d5 shadow=12:0cc69f7eab6608d5 indirect=12:0cc69f7eab6608d5 +geom 151: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0488136 motion [] pieces all=12:84683631bf3f2d7f camera=12:84683631bf3f2d7f shadow=12:84683631bf3f2d7f indirect=12:84683631bf3f2d7f +geom 152: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.1240493 motion [] pieces all=12:09e0339043c05885 camera=12:09e0339043c05885 shadow=12:09e0339043c05885 indirect=12:09e0339043c05885 +geom 153: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.81715965 motion [] pieces all=12:baff44b23fa2fe8c camera=12:baff44b23fa2fe8c shadow=12:baff44b23fa2fe8c indirect=12:baff44b23fa2fe8c +geom 154: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.072348 motion [] pieces all=12:7f07f015aba3675f camera=12:7f07f015aba3675f shadow=12:7f07f015aba3675f indirect=12:7f07f015aba3675f +geom 155: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.9028523 motion [] pieces all=12:e544345b30b64bce camera=12:e544345b30b64bce shadow=12:e544345b30b64bce indirect=12:e544345b30b64bce +geom 156: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.195409 motion [] pieces all=12:bf44779c62a0d1d9 camera=12:bf44779c62a0d1d9 shadow=12:bf44779c62a0d1d9 indirect=12:bf44779c62a0d1d9 +geom 157: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.8909322 motion [] pieces all=12:d9444d58a4aa29bf camera=12:d9444d58a4aa29bf shadow=12:d9444d58a4aa29bf indirect=12:d9444d58a4aa29bf +geom 158: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0053203 motion [] pieces all=12:f5a72299b44a6f83 camera=12:f5a72299b44a6f83 shadow=12:f5a72299b44a6f83 indirect=12:f5a72299b44a6f83 +geom 159: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.9874529 motion [] pieces all=12:478c430d181f0449 camera=12:478c430d181f0449 shadow=12:478c430d181f0449 indirect=12:478c430d181f0449 +geom 160: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.833996 motion [] pieces all=12:4f2c575953df9f82 camera=12:4f2c575953df9f82 shadow=12:4f2c575953df9f82 indirect=12:4f2c575953df9f82 +geom 161: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.129332 motion [] pieces all=12:858c4460ee11a801 camera=12:858c4460ee11a801 shadow=12:858c4460ee11a801 indirect=12:858c4460ee11a801 +geom 162: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.9295599 motion [] pieces all=12:e49c9cd7bb7700e3 camera=12:e49c9cd7bb7700e3 shadow=12:e49c9cd7bb7700e3 indirect=12:e49c9cd7bb7700e3 +geom 163: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0982622 motion [] pieces all=12:dc41ad73cd114385 camera=12:dc41ad73cd114385 shadow=12:dc41ad73cd114385 indirect=12:dc41ad73cd114385 +geom 164: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.97451484 motion [] pieces all=12:09af8565fc3d201d camera=12:09af8565fc3d201d shadow=12:09af8565fc3d201d indirect=12:09af8565fc3d201d +geom 165: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0320674 motion [] pieces all=12:9f9b6a360e10adbb camera=12:9f9b6a360e10adbb shadow=12:9f9b6a360e10adbb indirect=12:9f9b6a360e10adbb +geom 166: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.1709979 motion [] pieces all=12:99d2f51f4821115d camera=12:99d2f51f4821115d shadow=12:99d2f51f4821115d indirect=12:99d2f51f4821115d +geom 167: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.8691917 motion [] pieces all=12:0d56e690544efec0 camera=12:0d56e690544efec0 shadow=12:0d56e690544efec0 indirect=12:0d56e690544efec0 +geom 168: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.87965363 motion [] pieces all=12:827e12ddbf252fb5 camera=12:827e12ddbf252fb5 shadow=12:827e12ddbf252fb5 indirect=12:827e12ddbf252fb5 +geom 169: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.1770281 motion [] pieces all=12:88a6fafd5aaa039d camera=12:88a6fafd5aaa039d shadow=12:88a6fafd5aaa039d indirect=12:88a6fafd5aaa039d +geom 170: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.9975212 motion [] pieces all=12:f46016e89c458233 camera=12:f46016e89c458233 shadow=12:f46016e89c458233 indirect=12:f46016e89c458233 +geom 171: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0249971 motion [] pieces all=12:d662864dd505c55e camera=12:d662864dd505c55e shadow=12:d662864dd505c55e indirect=12:d662864dd505c55e +geom 172: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.92243314 motion [] pieces all=12:f342c3a2ed6b0950 camera=12:f342c3a2ed6b0950 shadow=12:f342c3a2ed6b0950 indirect=12:f342c3a2ed6b0950 +geom 173: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0585103 motion [] pieces all=12:ee7ff15f2424922f camera=12:ee7ff15f2424922f shadow=12:ee7ff15f2424922f indirect=12:ee7ff15f2424922f +geom 174: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.1082776 motion [] pieces all=12:86ef859898372a65 camera=12:86ef859898372a65 shadow=12:86ef859898372a65 indirect=12:86ef859898372a65 +geom 175: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.80569136 motion [] pieces all=12:9ec313ad6c2136d1 camera=12:9ec313ad6c2136d1 shadow=12:9ec313ad6c2136d1 indirect=12:9ec313ad6c2136d1 +geom 176: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.9787432 motion [] pieces all=12:2dde1f02614bce01 camera=12:2dde1f02614bce01 shadow=12:2dde1f02614bce01 indirect=12:2dde1f02614bce01 +geom 177: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0118738 motion [] pieces all=12:aafadba605d03110 camera=12:aafadba605d03110 shadow=12:aafadba605d03110 indirect=12:aafadba605d03110 +geom 178: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.89458597 motion [] pieces all=12:21e27892f962ac44 camera=12:21e27892f962ac44 shadow=12:21e27892f962ac44 indirect=12:21e27892f962ac44 +geom 179: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.190431 motion [] pieces all=12:6675c70617e67d8a camera=12:6675c70617e67d8a shadow=12:6675c70617e67d8a indirect=12:6675c70617e67d8a +geom 180: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0687202 motion [] pieces all=12:c5167e2e7d81c2ff camera=12:c5167e2e7d81c2ff shadow=12:c5167e2e7d81c2ff indirect=12:c5167e2e7d81c2ff +geom 181: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.91078526 motion [] pieces all=12:48e2cb88cfa05576 camera=12:48e2cb88cfa05576 shadow=12:48e2cb88cfa05576 indirect=12:48e2cb88cfa05576 +geom 182: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.1132085 motion [] pieces all=12:043069344a3076c2 camera=12:043069344a3076c2 shadow=12:043069344a3076c2 indirect=12:043069344a3076c2 +geom 183: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.81958956 motion [] pieces all=12:b6a3b6188b4b31bf camera=12:b6a3b6188b4b31bf shadow=12:b6a3b6188b4b31bf indirect=12:b6a3b6188b4b31bf +geom 184: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.95427895 motion [] pieces all=12:c001bd0dad9ff844 camera=12:c001bd0dad9ff844 shadow=12:c001bd0dad9ff844 indirect=12:c001bd0dad9ff844 +geom 185: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0434186 motion [] pieces all=12:0b59ff7e43848943 camera=12:0b59ff7e43848943 shadow=12:0b59ff7e43848943 indirect=12:0b59ff7e43848943 +geom 186: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.1551938 motion [] pieces all=12:5218f56e8786a8d1 camera=12:5218f56e8786a8d1 shadow=12:5218f56e8786a8d1 indirect=12:5218f56e8786a8d1 +geom 187: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.8595143 motion [] pieces all=12:4a7806cbcbb88531 camera=12:4a7806cbcbb88531 shadow=12:4a7806cbcbb88531 indirect=12:4a7806cbcbb88531 +geom 188: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.8408943 motion [] pieces all=12:7f3b442d9e722de1 camera=12:7f3b442d9e722de1 shadow=12:7f3b442d9e722de1 indirect=12:7f3b442d9e722de1 +geom 189: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.1452442 motion [] pieces all=12:e0d5bbe9bb208a1d camera=12:e0d5bbe9bb208a1d shadow=12:e0d5bbe9bb208a1d indirect=12:e0d5bbe9bb208a1d +geom 190: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.9464676 motion [] pieces all=12:b085d7918bf6355b camera=12:b085d7918bf6355b shadow=12:b085d7918bf6355b indirect=12:b085d7918bf6355b +geom 191: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0834273 motion [] pieces all=12:abe6c6954e3382a9 camera=12:abe6c6954e3382a9 shadow=12:abe6c6954e3382a9 indirect=12:abe6c6954e3382a9 +geom 192: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.8574602 motion [] pieces all=12:71ee11b13c594ff9 camera=12:71ee11b13c594ff9 shadow=12:71ee11b13c594ff9 indirect=12:71ee11b13c594ff9 +geom 193: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.151815 motion [] pieces all=12:dbe2a094f9f5dd6a camera=12:dbe2a094f9f5dd6a shadow=12:dbe2a094f9f5dd6a indirect=12:dbe2a094f9f5dd6a +geom 194: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0380479 motion [] pieces all=12:287aaeeaee0c366b camera=12:287aaeeaee0c366b shadow=12:287aaeeaee0c366b indirect=12:287aaeeaee0c366b +geom 195: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.95154804 motion [] pieces all=12:4846d4ce61cd070a camera=12:4846d4ce61cd070a shadow=12:4846d4ce61cd070a indirect=12:4846d4ce61cd070a +geom 196: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0853423 motion [] pieces all=12:668675de6db22ea9 camera=12:668675de6db22ea9 shadow=12:668675de6db22ea9 indirect=12:668675de6db22ea9 +geom 197: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.9481686 motion [] pieces all=12:b2176c9e3a8bd6be camera=12:b2176c9e3a8bd6be shadow=12:b2176c9e3a8bd6be indirect=12:b2176c9e3a8bd6be +geom 198: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.148388 motion [] pieces all=12:1b5bfe08d8aecf46 camera=12:1b5bfe08d8aecf46 shadow=12:1b5bfe08d8aecf46 indirect=12:1b5bfe08d8aecf46 +geom 199: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.8388503 motion [] pieces all=12:ed6a27aa851d98b4 camera=12:ed6a27aa851d98b4 shadow=12:ed6a27aa851d98b4 indirect=12:ed6a27aa851d98b4 +geom 200: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.1177161 motion [] pieces all=12:477f446ff91418fe camera=12:477f446ff91418fe shadow=12:477f446ff91418fe indirect=12:477f446ff91418fe +geom 201: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.821902 motion [] pieces all=12:e45df0929b4a7a20 camera=12:e45df0929b4a7a20 shadow=12:e45df0929b4a7a20 indirect=12:e45df0929b4a7a20 +geom 202: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.9081097 motion [] pieces all=12:d8ac1550c1d701d3 camera=12:d8ac1550c1d701d3 shadow=12:d8ac1550c1d701d3 indirect=12:d8ac1550c1d701d3 +geom 203: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0630432 motion [] pieces all=12:4bf7c09967756dab camera=12:4bf7c09967756dab shadow=12:4bf7c09967756dab indirect=12:4bf7c09967756dab +geom 204: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0076557 motion [] pieces all=12:4b743cdcfe182631 camera=12:4b743cdcfe182631 shadow=12:4b743cdcfe182631 indirect=12:4b743cdcfe182631 +geom 205: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.97757643 motion [] pieces all=12:ce244f01fc616d6d camera=12:ce244f01fc616d6d shadow=12:ce244f01fc616d6d indirect=12:ce244f01fc616d6d +geom 206: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.1927692 motion [] pieces all=12:3680ff2a1925c2b8 camera=12:3680ff2a1925c2b8 shadow=12:3680ff2a1925c2b8 indirect=12:3680ff2a1925c2b8 +geom 207: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.8998191 motion [] pieces all=12:631eb32618265a1d camera=12:631eb32618265a1d shadow=12:631eb32618265a1d indirect=12:631eb32618265a1d +geom 208: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0190506 motion [] pieces all=12:ecbbd67d5ea82535 camera=12:ecbbd67d5ea82535 shadow=12:ecbbd67d5ea82535 indirect=12:ecbbd67d5ea82535 +geom 209: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.99540603 motion [] pieces all=12:3ff8d546f9bdd0fb camera=12:3ff8d546f9bdd0fb shadow=12:3ff8d546f9bdd0fb indirect=12:3ff8d546f9bdd0fb +geom 210: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.1799959 motion [] pieces all=12:2317ef2a031d8f47 camera=12:2317ef2a031d8f47 shadow=12:2317ef2a031d8f47 indirect=12:2317ef2a031d8f47 +geom 211: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.87620467 motion [] pieces all=12:1779aa23bb0f9042 camera=12:1779aa23bb0f9042 shadow=12:1779aa23bb0f9042 indirect=12:1779aa23bb0f9042 +geom 212: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.1119057 motion [] pieces all=12:91f1de75efe1ff66 camera=12:91f1de75efe1ff66 shadow=12:91f1de75efe1ff66 indirect=12:91f1de75efe1ff66 +geom 213: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.8029353 motion [] pieces all=12:504fea94e49e26b5 camera=12:504fea94e49e26b5 shadow=12:504fea94e49e26b5 indirect=12:504fea94e49e26b5 +geom 214: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.9190664 motion [] pieces all=12:0efb54b7f23ac443 camera=12:0efb54b7f23ac443 shadow=12:0efb54b7f23ac443 indirect=12:0efb54b7f23ac443 +geom 215: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0612158 motion [] pieces all=12:55a92efc8135fc5d camera=12:55a92efc8135fc5d shadow=12:55a92efc8135fc5d indirect=12:55a92efc8135fc5d +geom 216: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.1734748 motion [] pieces all=12:a620be5aa9925d00 camera=12:a620be5aa9925d00 shadow=12:a620be5aa9925d00 indirect=12:a620be5aa9925d00 +geom 217: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.8742897 motion [] pieces all=12:c2fbfc60af19f0d0 camera=12:c2fbfc60af19f0d0 shadow=12:c2fbfc60af19f0d0 indirect=12:c2fbfc60af19f0d0 +geom 218: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0368638 motion [] pieces all=12:fd178773edcdb210 camera=12:fd178773edcdb210 shadow=12:fd178773edcdb210 indirect=12:fd178773edcdb210 +geom 219: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.9695358 motion [] pieces all=12:92c10878d7799c47 camera=12:92c10878d7799c47 shadow=12:92c10878d7799c47 indirect=12:92c10878d7799c47 +geom 220: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.83632326 motion [] pieces all=12:56eef0396f98b12d camera=12:56eef0396f98b12d shadow=12:56eef0396f98b12d indirect=12:56eef0396f98b12d +geom 221: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.125916 motion [] pieces all=12:2ee3e4102b2ca7c0 camera=12:2ee3e4102b2ca7c0 shadow=12:2ee3e4102b2ca7c0 indirect=12:2ee3e4102b2ca7c0 +geom 222: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.92677325 motion [] pieces all=12:9c793be4df2804bc camera=12:9c793be4df2804bc shadow=12:9c793be4df2804bc indirect=12:9c793be4df2804bc +geom 223: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.096751 motion [] pieces all=12:b6735b8f2a80f193 camera=12:b6735b8f2a80f193 shadow=12:b6735b8f2a80f193 indirect=12:b6735b8f2a80f193 +geom 224: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.99294955 motion [] pieces all=12:e14d605bbad5054b camera=12:e14d605bbad5054b shadow=12:e14d605bbad5054b indirect=12:e14d605bbad5054b +geom 225: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0129327 motion [] pieces all=12:ce70384139f3d953 camera=12:ce70384139f3d953 shadow=12:ce70384139f3d953 indirect=12:ce70384139f3d953 +geom 226: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.8834852 motion [] pieces all=12:f275b69e8465276d camera=12:f275b69e8465276d shadow=12:f275b69e8465276d indirect=12:f275b69e8465276d +geom 227: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.1862364 motion [] pieces all=12:73a525c8a7cfebfc camera=12:73a525c8a7cfebfc shadow=12:73a525c8a7cfebfc indirect=12:73a525c8a7cfebfc +geom 228: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.80695534 motion [] pieces all=12:4fc4787ac53c19ae camera=12:4fc4787ac53c19ae shadow=12:4fc4787ac53c19ae indirect=12:4fc4787ac53c19ae +geom 229: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.1052685 motion [] pieces all=12:5f526759f00f8bb1 camera=12:5f526759f00f8bb1 shadow=12:5f526759f00f8bb1 indirect=12:5f526759f00f8bb1 +geom 230: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0517714 motion [] pieces all=12:43a08224d7f3a5ff camera=12:43a08224d7f3a5ff shadow=12:43a08224d7f3a5ff indirect=12:43a08224d7f3a5ff +geom 231: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.9183691 motion [] pieces all=12:4e8261fe621a8754 camera=12:4e8261fe621a8754 shadow=12:4e8261fe621a8754 indirect=12:4e8261fe621a8754 +geom 232: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0896878 motion [] pieces all=12:2105a034e5acb921 camera=12:2105a034e5acb921 shadow=12:2105a034e5acb921 indirect=12:2105a034e5acb921 +geom 233: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.93423206 motion [] pieces all=12:47b70feddcfef5c4 camera=12:47b70feddcfef5c4 shadow=12:47b70feddcfef5c4 indirect=12:47b70feddcfef5c4 +geom 234: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.1348141 motion [] pieces all=12:c150c564a2f639e3 camera=12:c150c564a2f639e3 shadow=12:c150c564a2f639e3 indirect=12:c150c564a2f639e3 +geom 235: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.8272541 motion [] pieces all=12:9a036bb10f2a8c19 camera=12:9a036bb10f2a8c19 shadow=12:9a036bb10f2a8c19 indirect=12:9a036bb10f2a8c19 +geom 236: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.8628023 motion [] pieces all=12:df84cc6ab0cf1013 camera=12:df84cc6ab0cf1013 shadow=12:df84cc6ab0cf1013 indirect=12:df84cc6ab0cf1013 +geom 237: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.1667898 motion [] pieces all=12:ea055c935781e4b2 camera=12:ea055c935781e4b2 shadow=12:ea055c935781e4b2 indirect=12:ea055c935781e4b2 +geom 238: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0272492 motion [] pieces all=12:b666550bc7f3f2e3 camera=12:b666550bc7f3f2e3 shadow=12:b666550bc7f3f2e3 indirect=12:b666550bc7f3f2e3 +geom 239: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.9644636 motion [] pieces all=12:25b40fe1e3b33c13 camera=12:25b40fe1e3b33c13 shadow=12:25b40fe1e3b33c13 indirect=12:25b40fe1e3b33c13 +geom 240: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.9401488 motion [] pieces all=12:ef193e56f1c675ad camera=12:ef193e56f1c675ad shadow=12:ef193e56f1c675ad indirect=12:ef193e56f1c675ad +geom 241: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0806658 motion [] pieces all=12:6cd8d81131f613a5 camera=12:6cd8d81131f613a5 shadow=12:6cd8d81131f613a5 indirect=12:6cd8d81131f613a5 +geom 242: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.84431666 motion [] pieces all=12:75d58887322e3c92 camera=12:75d58887322e3c92 shadow=12:75d58887322e3c92 indirect=12:75d58887322e3c92 +geom 243: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.1427468 motion [] pieces all=12:ceb6c2a84e7313ea camera=12:ceb6c2a84e7313ea shadow=12:ceb6c2a84e7313ea indirect=12:ceb6c2a84e7313ea +geom 244: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.8558955 motion [] pieces all=12:966eb51da03b3092 camera=12:966eb51da03b3092 shadow=12:966eb51da03b3092 indirect=12:966eb51da03b3092 +geom 245: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.1608133 motion [] pieces all=12:4684046ad71d3941 camera=12:4684046ad71d3941 shadow=12:4684046ad71d3941 indirect=12:4684046ad71d3941 +geom 246: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0448556 motion [] pieces all=12:8909f2f12790188f camera=12:8909f2f12790188f shadow=12:8909f2f12790188f indirect=12:8909f2f12790188f +geom 247: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.9619815 motion [] pieces all=12:e68d935303781b60 camera=12:e68d935303781b60 shadow=12:e68d935303781b60 indirect=12:e68d935303781b60 +geom 248: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.9050406 motion [] pieces all=12:77e1fb7c3ccd3b72 camera=12:77e1fb7c3ccd3b72 shadow=12:77e1fb7c3ccd3b72 indirect=12:77e1fb7c3ccd3b72 +geom 249: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0704575 motion [] pieces all=12:bf814629e90eb2a6 camera=12:bf814629e90eb2a6 shadow=12:bf814629e90eb2a6 indirect=12:bf814629e90eb2a6 +geom 250: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.8142105 motion [] pieces all=12:3e101c8e3b9023da camera=12:3e101c8e3b9023da shadow=12:3e101c8e3b9023da indirect=12:3e101c8e3b9023da +geom 251: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.1210591 motion [] pieces all=12:adeb9df8e5336e1e camera=12:adeb9df8e5336e1e shadow=12:adeb9df8e5336e1e indirect=12:adeb9df8e5336e1e +geom 252: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0009634 motion [] pieces all=12:243ce4af91f5aa9f camera=12:243ce4af91f5aa9f shadow=12:243ce4af91f5aa9f indirect=12:243ce4af91f5aa9f +geom 253: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.9823128 motion [] pieces all=12:930bc470da7bfca0 camera=12:930bc470da7bfca0 shadow=12:930bc470da7bfca0 indirect=12:930bc470da7bfca0 +geom 254: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.1997087 motion [] pieces all=12:0eed12db9d57f617 camera=12:0eed12db9d57f617 shadow=12:0eed12db9d57f617 indirect=12:0eed12db9d57f617 +geom 255: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.8885824 motion [] pieces all=12:085bce0e053ac672 camera=12:085bce0e053ac672 shadow=12:085bce0e053ac672 indirect=12:085bce0e053ac672 +geom 256: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.1071253 motion [] pieces all=12:558e90753a1dbe0c camera=12:558e90753a1dbe0c shadow=12:558e90753a1dbe0c indirect=12:558e90753a1dbe0c +geom 257: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.80412865 motion [] pieces all=12:438f0ac0ef81a15c camera=12:438f0ac0ef81a15c shadow=12:438f0ac0ef81a15c indirect=12:438f0ac0ef81a15c +geom 258: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.056387 motion [] pieces all=12:532e9c68579ceebf camera=12:532e9c68579ceebf shadow=12:532e9c68579ceebf indirect=12:532e9c68579ceebf +geom 259: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.92466545 motion [] pieces all=12:8bd67b0e1ac0a9c5 camera=12:8bd67b0e1ac0a9c5 shadow=12:8bd67b0e1ac0a9c5 indirect=12:8bd67b0e1ac0a9c5 +geom 260: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0224771 motion [] pieces all=12:db8f1a9cc1fdd115 camera=12:db8f1a9cc1fdd115 shadow=12:db8f1a9cc1fdd115 indirect=12:db8f1a9cc1fdd115 +geom 261: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.9992335 motion [] pieces all=12:c12fef72270cd9b9 camera=12:c12fef72270cd9b9 shadow=12:c12fef72270cd9b9 indirect=12:c12fef72270cd9b9 +geom 262: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.8799568 motion [] pieces all=12:99f42a5ee0052055 camera=12:99f42a5ee0052055 shadow=12:99f42a5ee0052055 indirect=12:99f42a5ee0052055 +geom 263: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.1754391 motion [] pieces all=12:aec0913446abacc1 camera=12:aec0913446abacc1 shadow=12:aec0913446abacc1 indirect=12:aec0913446abacc1 +geom 264: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.1689945 motion [] pieces all=12:817419b742012466 camera=12:817419b742012466 shadow=12:817419b742012466 indirect=12:817419b742012466 +geom 265: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.8709754 motion [] pieces all=12:11dc946f2502073c camera=12:11dc946f2502073c shadow=12:11dc946f2502073c indirect=12:11dc946f2502073c +geom 266: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0341958 motion [] pieces all=12:2cdb9da3d277d7c3 camera=12:2cdb9da3d277d7c3 shadow=12:2cdb9da3d277d7c3 indirect=12:2cdb9da3d277d7c3 +geom 267: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.9728058 motion [] pieces all=12:adf045b7d32a2f1f camera=12:adf045b7d32a2f1f shadow=12:adf045b7d32a2f1f indirect=12:adf045b7d32a2f1f +geom 268: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.9305494 motion [] pieces all=12:8fdab00337b44101 camera=12:8fdab00337b44101 shadow=12:8fdab00337b44101 indirect=12:8fdab00337b44101 +geom 269: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0993541 motion [] pieces all=12:e9f74cbbc31e88ca camera=12:e9f74cbbc31e88ca shadow=12:e9f74cbbc31e88ca indirect=12:e9f74cbbc31e88ca +geom 270: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.1297429 motion [] pieces all=12:e6f58dc9a2c8cf31 camera=12:e6f58dc9a2c8cf31 shadow=12:e6f58dc9a2c8cf31 indirect=12:e6f58dc9a2c8cf31 +geom 271: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.8328105 motion [] pieces all=12:28fe4127d8309887 camera=12:28fe4127d8309887 shadow=12:28fe4127d8309887 indirect=12:28fe4127d8309887 +geom 272: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0407774 motion [] pieces all=12:d1adc814dd14ee88 camera=12:d1adc814dd14ee88 shadow=12:d1adc814dd14ee88 indirect=12:d1adc814dd14ee88 +geom 273: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.9556146 motion [] pieces all=12:6d24b8714ab18ccb camera=12:6d24b8714ab18ccb shadow=12:6d24b8714ab18ccb indirect=12:6d24b8714ab18ccb +geom 274: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.8622651 motion [] pieces all=12:4123fa223d783808 camera=12:4123fa223d783808 shadow=12:4123fa223d783808 indirect=12:4123fa223d783808 +geom 275: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.1533363 motion [] pieces all=12:b1d8d2f5c048d126 camera=12:b1d8d2f5c048d126 shadow=12:b1d8d2f5c048d126 indirect=12:b1d8d2f5c048d126 +geom 276: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0827482 motion [] pieces all=12:b34d3f2fea6ccf3f camera=12:b34d3f2fea6ccf3f shadow=12:b34d3f2fea6ccf3f indirect=12:b34d3f2fea6ccf3f +geom 277: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.94452286 motion [] pieces all=12:d7313d7a2c947b15 camera=12:d7313d7a2c947b15 shadow=12:d7313d7a2c947b15 indirect=12:d7313d7a2c947b15 +geom 278: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.84241277 motion [] pieces all=12:cf8f50c89c7848bf camera=12:cf8f50c89c7848bf shadow=12:cf8f50c89c7848bf indirect=12:cf8f50c89c7848bf +geom 279: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.145969 motion [] pieces all=12:fc6d0c5cd4ac480a camera=12:fc6d0c5cd4ac480a shadow=12:fc6d0c5cd4ac480a indirect=12:fc6d0c5cd4ac480a +geom 280: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.8967557 motion [] pieces all=12:01efc81ea2dc09da camera=12:01efc81ea2dc09da shadow=12:01efc81ea2dc09da indirect=12:01efc81ea2dc09da +geom 281: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.1884634 motion [] pieces all=12:985e2ace4f406785 camera=12:985e2ace4f406785 shadow=12:985e2ace4f406785 indirect=12:985e2ace4f406785 +geom 282: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0103384 motion [] pieces all=12:595d0b15b7883054 camera=12:595d0b15b7883054 shadow=12:595d0b15b7883054 indirect=12:595d0b15b7883054 +geom 283: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.9807979 motion [] pieces all=12:91c655586891aa6d camera=12:91c655586891aa6d shadow=12:91c655586891aa6d indirect=12:91c655586891aa6d +geom 284: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.91237754 motion [] pieces all=12:1f92e95a24a0a941 camera=12:1f92e95a24a0a941 shadow=12:1f92e95a24a0a941 indirect=12:1f92e95a24a0a941 +geom 285: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0665895 motion [] pieces all=12:24eed0a13c96f7c0 camera=12:24eed0a13c96f7c0 shadow=12:24eed0a13c96f7c0 indirect=12:24eed0a13c96f7c0 +geom 286: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.8213568 motion [] pieces all=12:3ace4e273389b040 camera=12:3ace4e273389b040 shadow=12:3ace4e273389b040 indirect=12:3ace4e273389b040 +geom 287: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.1155375 motion [] pieces all=12:a774e8fd544c302f camera=12:a774e8fd544c302f shadow=12:a774e8fd544c302f indirect=12:a774e8fd544c302f +geom 288: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0168831 motion [] pieces all=12:3b8dfe9ac6e074e4 camera=12:3b8dfe9ac6e074e4 shadow=12:3b8dfe9ac6e074e4 indirect=12:3b8dfe9ac6e074e4 +geom 289: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.9887352 motion [] pieces all=12:9cc4d9cc6beae0f8 camera=12:9cc4d9cc6beae0f8 shadow=12:9cc4d9cc6beae0f8 indirect=12:9cc4d9cc6beae0f8 +geom 290: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.88512194 motion [] pieces all=12:54452159c0cc6de1 camera=12:54452159c0cc6de1 shadow=12:54452159c0cc6de1 indirect=12:54452159c0cc6de1 +geom 291: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.1818812 motion [] pieces all=12:d8d6033726a0ae3c camera=12:d8d6033726a0ae3c shadow=12:d8d6033726a0ae3c indirect=12:d8d6033726a0ae3c +geom 292: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0553548 motion [] pieces all=12:14bad604a1de7065 camera=12:14bad604a1de7065 shadow=12:14bad604a1de7065 indirect=12:14bad604a1de7065 +geom 293: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.91546917 motion [] pieces all=12:c40b47e88849fe33 camera=12:c40b47e88849fe33 shadow=12:c40b47e88849fe33 indirect=12:c40b47e88849fe33 +geom 294: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.8122816 motion [] pieces all=12:2e893d2222249532 camera=12:2e893d2222249532 shadow=12:2e893d2222249532 indirect=12:2e893d2222249532 +geom 295: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.1005894 motion [] pieces all=12:bd58cb1520f6c589 camera=12:bd58cb1520f6c589 shadow=12:bd58cb1520f6c589 indirect=12:bd58cb1520f6c589 +geom 296: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.9684521 motion [] pieces all=12:5ee1a186ae2d9dd0 camera=12:5ee1a186ae2d9dd0 shadow=12:5ee1a186ae2d9dd0 indirect=12:5ee1a186ae2d9dd0 +geom 297: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0291594 motion [] pieces all=12:bbe60b405380df40 camera=12:bbe60b405380df40 shadow=12:bbe60b405380df40 indirect=12:bbe60b405380df40 +geom 298: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.868216 motion [] pieces all=12:1139e1c7e4a5e8fb camera=12:1139e1c7e4a5e8fb shadow=12:1139e1c7e4a5e8fb indirect=12:1139e1c7e4a5e8fb +geom 299: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.1648309 motion [] pieces all=12:f4d9f51838186556 camera=12:f4d9f51838186556 shadow=12:f4d9f51838186556 indirect=12:f4d9f51838186556 +geom 300: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.1327685 motion [] pieces all=12:6c7567952e89b197 camera=12:6c7567952e89b197 shadow=12:6c7567952e89b197 indirect=12:6c7567952e89b197 +geom 301: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.8302819 motion [] pieces all=12:78388d34aa653f58 camera=12:78388d34aa653f58 shadow=12:78388d34aa653f58 indirect=12:78388d34aa653f58 +geom 302: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.93690276 motion [] pieces all=12:b8ddd2c09893939a camera=12:b8ddd2c09893939a shadow=12:b8ddd2c09893939a indirect=12:b8ddd2c09893939a +geom 303: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0930607 motion [] pieces all=12:1439028a696a7d6a camera=12:1439028a696a7d6a shadow=12:1439028a696a7d6a indirect=12:1439028a696a7d6a +geom 304: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.98559374 motion [] pieces all=12:2d5a80cc0e242252 camera=12:2d5a80cc0e242252 shadow=12:2d5a80cc0e242252 indirect=12:2d5a80cc0e242252 +geom 305: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0042014 motion [] pieces all=12:ba32837f934d89a0 camera=12:ba32837f934d89a0 shadow=12:ba32837f934d89a0 indirect=12:ba32837f934d89a0 +geom 306: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.1942586 motion [] pieces all=12:eafe5de3bea88df7 camera=12:eafe5de3bea88df7 shadow=12:eafe5de3bea88df7 indirect=12:eafe5de3bea88df7 +geom 307: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.893466 motion [] pieces all=12:647780a6ed707c17 camera=12:647780a6ed707c17 shadow=12:647780a6ed707c17 indirect=12:647780a6ed707c17 +geom 308: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.90030926 motion [] pieces all=12:487b70fa9b392254 camera=12:487b70fa9b392254 shadow=12:487b70fa9b392254 indirect=12:487b70fa9b392254 +geom 309: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0744654 motion [] pieces all=12:d541c481d5fd43bf camera=12:d541c481d5fd43bf shadow=12:d541c481d5fd43bf indirect=12:d541c481d5fd43bf +geom 310: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.1226648 motion [] pieces all=12:631e3ff8dcda598a camera=12:631e3ff8dcda598a shadow=12:631e3ff8dcda598a indirect=12:631e3ff8dcda598a +geom 311: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.8183132 motion [] pieces all=12:4d8c861c7b334b12 camera=12:4d8c861c7b334b12 shadow=12:4d8c861c7b334b12 indirect=12:4d8c861c7b334b12 +geom 312: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0470083 motion [] pieces all=12:144bf5f952df3aae camera=12:144bf5f952df3aae shadow=12:144bf5f952df3aae indirect=12:144bf5f952df3aae +geom 313: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.9589237 motion [] pieces all=12:6f08e2f191c13829 camera=12:6f08e2f191c13829 shadow=12:6f08e2f191c13829 indirect=12:6f08e2f191c13829 +geom 314: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.1568285 motion [] pieces all=12:9ddb7a84275336f2 camera=12:9ddb7a84275336f2 shadow=12:9ddb7a84275336f2 indirect=12:9ddb7a84275336f2 +geom 315: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.8528369 motion [] pieces all=12:dc6f6b0e0689c4fe camera=12:dc6f6b0e0689c4fe shadow=12:dc6f6b0e0689c4fe indirect=12:dc6f6b0e0689c4fe +geom 316: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.1375338 motion [] pieces all=12:771d4bc7d8a2055c camera=12:771d4bc7d8a2055c shadow=12:771d4bc7d8a2055c indirect=12:771d4bc7d8a2055c +geom 317: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.84985673 motion [] pieces all=12:5f8f376f318e7dd6 camera=12:5f8f376f318e7dd6 shadow=12:5f8f376f318e7dd6 indirect=12:5f8f376f318e7dd6 +geom 318: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.94081056 motion [] pieces all=12:7a3fb26c1cd5533d camera=12:7a3fb26c1cd5533d shadow=12:7a3fb26c1cd5533d indirect=12:7a3fb26c1cd5533d +geom 319: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0773013 motion [] pieces all=12:d7fce092f6c85dec camera=12:d7fce092f6c85dec shadow=12:d7fce092f6c85dec indirect=12:d7fce092f6c85dec +geom 320: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.1783283 motion [] pieces all=12:37d30f1a46e449ff camera=12:37d30f1a46e449ff shadow=12:37d30f1a46e449ff indirect=12:37d30f1a46e449ff +geom 321: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.87658024 motion [] pieces all=12:14d43fd6bb0ff55d camera=12:14d43fd6bb0ff55d shadow=12:14d43fd6bb0ff55d indirect=12:14d43fd6bb0ff55d +geom 322: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0205542 motion [] pieces all=12:87481ae735713eaa camera=12:87481ae735713eaa shadow=12:87481ae735713eaa indirect=12:87481ae735713eaa +geom 323: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.99422103 motion [] pieces all=12:5bde4420dcb7830a camera=12:5bde4420dcb7830a shadow=12:5bde4420dcb7830a indirect=12:5bde4420dcb7830a +geom 324: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.9212079 motion [] pieces all=12:dd5d8187b0e11f4d camera=12:dd5d8187b0e11f4d shadow=12:dd5d8187b0e11f4d indirect=12:dd5d8187b0e11f4d +geom 325: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0596653 motion [] pieces all=12:a13d8d5031328858 camera=12:a13d8d5031328858 shadow=12:a13d8d5031328858 indirect=12:a13d8d5031328858 +geom 326: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.1097448 motion [] pieces all=12:df0336c5dc625715 camera=12:df0336c5dc625715 shadow=12:df0336c5dc625715 indirect=12:df0336c5dc625715 +geom 327: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.80082613 motion [] pieces all=12:7fdb2280b720b4e0 camera=12:7fdb2280b720b4e0 shadow=12:7fdb2280b720b4e0 indirect=12:7fdb2280b720b4e0 +geom 328: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.83511055 motion [] pieces all=12:8e6bbb989918f2d4 camera=12:8e6bbb989918f2d4 shadow=12:8e6bbb989918f2d4 indirect=12:8e6bbb989918f2d4 +geom 329: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.126959 motion [] pieces all=12:30f7453b0f345828 camera=12:30f7453b0f345828 shadow=12:30f7453b0f345828 indirect=12:30f7453b0f345828 +geom 330: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.92609227 motion [] pieces all=12:91f9f276b93f6466 camera=12:91f9f276b93f6466 shadow=12:91f9f276b93f6466 indirect=12:91f9f276b93f6466 +geom 331: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0945077 motion [] pieces all=12:d6b247f1e91ba686 camera=12:d6b247f1e91ba686 shadow=12:d6b247f1e91ba686 indirect=12:d6b247f1e91ba686 +geom 332: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0349877 motion [] pieces all=12:d5740e0bac5cd316 camera=12:d5740e0bac5cd316 shadow=12:d5740e0bac5cd316 indirect=12:d5740e0bac5cd316 +geom 333: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.9710804 motion [] pieces all=12:27d44de46e3dca54 camera=12:27d44de46e3dca54 shadow=12:27d44de46e3dca54 indirect=12:27d44de46e3dca54 +geom 334: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.8721167 motion [] pieces all=12:18228ff2b63f8c7d camera=12:18228ff2b63f8c7d shadow=12:18228ff2b63f8c7d indirect=12:18228ff2b63f8c7d +geom 335: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.1724524 motion [] pieces all=12:2ab0876e534f298f camera=12:2ab0876e534f298f shadow=12:2ab0876e534f298f indirect=12:2ab0876e534f298f +geom 336: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.8403497 motion [] pieces all=12:41a2c55a267ac5c4 camera=12:41a2c55a267ac5c4 shadow=12:41a2c55a267ac5c4 indirect=12:41a2c55a267ac5c4 +geom 337: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.1488395 motion [] pieces all=12:dfc161a8f6a92ea3 camera=12:dfc161a8f6a92ea3 shadow=12:dfc161a8f6a92ea3 indirect=12:dfc161a8f6a92ea3 +geom 338: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0872728 motion [] pieces all=12:4009af968809592a camera=12:4009af968809592a shadow=12:4009af968809592a indirect=12:4009af968809592a +geom 339: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.9498308 motion [] pieces all=12:d97514bcecdc5662 camera=12:d97514bcecdc5662 shadow=12:d97514bcecdc5662 indirect=12:d97514bcecdc5662 +geom 340: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.1501721 motion [] pieces all=12:d7c58849a10d0edf camera=12:d7c58849a10d0edf shadow=12:d7c58849a10d0edf indirect=12:d7c58849a10d0edf +geom 341: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.85824037 motion [] pieces all=12:aed050e32284fe6e camera=12:aed050e32284fe6e shadow=12:aed050e32284fe6e indirect=12:aed050e32284fe6e +geom 342: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.9529558 motion [] pieces all=12:ea1dbdb85f1f4d6d camera=12:ea1dbdb85f1f4d6d shadow=12:ea1dbdb85f1f4d6d indirect=12:ea1dbdb85f1f4d6d +geom 343: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0397669 motion [] pieces all=12:6babb56fe308d4cb camera=12:6babb56fe308d4cb shadow=12:6babb56fe308d4cb indirect=12:6babb56fe308d4cb +geom 344: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.1160651 motion [] pieces all=12:2957ca89e418c28f camera=12:2957ca89e418c28f shadow=12:2957ca89e418c28f indirect=12:2957ca89e418c28f +geom 345: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.8239306 motion [] pieces all=12:2e7f31d4fa464ed4 camera=12:2e7f31d4fa464ed4 shadow=12:2e7f31d4fa464ed4 indirect=12:2e7f31d4fa464ed4 +geom 346: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0655339 motion [] pieces all=12:b200843dc58e1388 camera=12:b200843dc58e1388 shadow=12:b200843dc58e1388 indirect=12:b200843dc58e1388 +geom 347: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.9071375 motion [] pieces all=12:249c549d82e9acea camera=12:249c549d82e9acea shadow=12:249c549d82e9acea indirect=12:249c549d82e9acea +geom 348: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0080239 motion [] pieces all=12:e170da844f0a982b camera=12:e170da844f0a982b shadow=12:e170da844f0a982b indirect=12:e170da844f0a982b +geom 349: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.97620225 motion [] pieces all=12:193709b6aa2f5d65 camera=12:193709b6aa2f5d65 shadow=12:193709b6aa2f5d65 indirect=12:193709b6aa2f5d65 +geom 350: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.89718294 motion [] pieces all=12:c4f52cbc70fa9dca camera=12:c4f52cbc70fa9dca shadow=12:c4f52cbc70fa9dca indirect=12:c4f52cbc70fa9dca +geom 351: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.191257 motion [] pieces all=12:9bcfc66882080152 camera=12:9bcfc66882080152 shadow=12:9bcfc66882080152 indirect=12:9bcfc66882080152 +geom 352: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.1368771 motion [] pieces all=12:17d409264b25aaa1 camera=12:17d409264b25aaa1 shadow=12:17d409264b25aaa1 indirect=12:17d409264b25aaa1 +geom 353: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.8263488 motion [] pieces all=12:c88cfa106e34b214 camera=12:c88cfa106e34b214 shadow=12:c88cfa106e34b214 indirect=12:c88cfa106e34b214 +geom 354: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.9322859 motion [] pieces all=12:72d56a4ceec9b227 camera=12:72d56a4ceec9b227 shadow=12:72d56a4ceec9b227 indirect=12:72d56a4ceec9b227 +geom 355: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0880939 motion [] pieces all=12:b195b52f8adf62a0 camera=12:b195b52f8adf62a0 shadow=12:b195b52f8adf62a0 indirect=12:b195b52f8adf62a0 +geom 356: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0262136 motion [] pieces all=12:45df4628c3eb5709 camera=12:45df4628c3eb5709 shadow=12:45df4628c3eb5709 indirect=12:45df4628c3eb5709 +geom 357: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.96307683 motion [] pieces all=12:345e61e8806a6778 camera=12:345e61e8806a6778 shadow=12:345e61e8806a6778 indirect=12:345e61e8806a6778 +geom 358: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.1681463 motion [] pieces all=12:86243dfecd6ed800 camera=12:86243dfecd6ed800 shadow=12:86243dfecd6ed800 indirect=12:86243dfecd6ed800 +geom 359: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.86502236 motion [] pieces all=12:343a16809805502c camera=12:343a16809805502c shadow=12:343a16809805502c indirect=12:343a16809805502c +geom 360: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.050149 motion [] pieces all=12:82646e4cfdf87acb camera=12:82646e4cfdf87acb shadow=12:82646e4cfdf87acb indirect=12:82646e4cfdf87acb +geom 361: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.9158084 motion [] pieces all=12:24aaf806f2e380e8 camera=12:24aaf806f2e380e8 shadow=12:24aaf806f2e380e8 indirect=12:24aaf806f2e380e8 +geom 362: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.8081211 motion [] pieces all=12:7cbe153faf6f8d7a camera=12:7cbe153faf6f8d7a shadow=12:7cbe153faf6f8d7a indirect=12:7cbe153faf6f8d7a +geom 363: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.1042663 motion [] pieces all=12:35a219666dea319c camera=12:35a219666dea319c shadow=12:35a219666dea319c indirect=12:35a219666dea319c +geom 364: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0155733 motion [] pieces all=12:e6d7079bdb47adab camera=12:e6d7079bdb47adab shadow=12:e6d7079bdb47adab indirect=12:e6d7079bdb47adab +geom 365: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.9908399 motion [] pieces all=12:e8c07fc49651ed38 camera=12:e8c07fc49651ed38 shadow=12:e8c07fc49651ed38 indirect=12:e8c07fc49651ed38 +geom 366: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.88250023 motion [] pieces all=12:f5e38f522feb37cb camera=12:f5e38f522feb37cb shadow=12:f5e38f522feb37cb indirect=12:f5e38f522feb37cb +geom 367: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.1847697 motion [] pieces all=12:fbc06fd87a8d291f camera=12:fbc06fd87a8d291f shadow=12:fbc06fd87a8d291f indirect=12:fbc06fd87a8d291f +geom 368: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.046034 motion [] pieces all=12:9f78122893426734 camera=12:9f78122893426734 shadow=12:9f78122893426734 indirect=12:9f78122893426734 +geom 369: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.96090317 motion [] pieces all=12:5694cc0009888a2a camera=12:5694cc0009888a2a shadow=12:5694cc0009888a2a indirect=12:5694cc0009888a2a +geom 370: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.85369337 motion [] pieces all=12:cc6149139636f173 camera=12:cc6149139636f173 shadow=12:cc6149139636f173 indirect=12:cc6149139636f173 +geom 371: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.1612246 motion [] pieces all=12:479fb480718c0a74 camera=12:479fb480718c0a74 shadow=12:479fb480718c0a74 indirect=12:479fb480718c0a74 +geom 372: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.1420475 motion [] pieces all=12:5011fcf9b2420f89 camera=12:5011fcf9b2420f89 shadow=12:5011fcf9b2420f89 indirect=12:5011fcf9b2420f89 +geom 373: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.8454647 motion [] pieces all=12:fe62212b32243903 camera=12:fe62212b32243903 shadow=12:fe62212b32243903 indirect=12:fe62212b32243903 +geom 374: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0787628 motion [] pieces all=12:c09b7779bc49b050 camera=12:c09b7779bc49b050 shadow=12:c09b7779bc49b050 indirect=12:c09b7779bc49b050 +geom 375: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.93800545 motion [] pieces all=12:29492bf11ee992b7 camera=12:29492bf11ee992b7 shadow=12:29492bf11ee992b7 indirect=12:29492bf11ee992b7 +geom 376: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0030414 motion [] pieces all=12:12425a2887a24940 camera=12:12425a2887a24940 shadow=12:12425a2887a24940 indirect=12:12425a2887a24940 +geom 377: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.983221 motion [] pieces all=12:c8dff14682474aff camera=12:c8dff14682474aff shadow=12:c8dff14682474aff indirect=12:c8dff14682474aff +geom 378: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.8891724 motion [] pieces all=12:1c2a82a18eb963f6 camera=12:1c2a82a18eb963f6 shadow=12:1c2a82a18eb963f6 indirect=12:1c2a82a18eb963f6 +geom 379: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.1983188 motion [] pieces all=12:0512533337d37dec camera=12:0512533337d37dec shadow=12:0512533337d37dec indirect=12:0512533337d37dec +geom 380: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0690044 motion [] pieces all=12:d7ddf5a4c50ddc75 camera=12:d7ddf5a4c50ddc75 shadow=12:d7ddf5a4c50ddc75 indirect=12:d7ddf5a4c50ddc75 +geom 381: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.9040715 motion [] pieces all=12:69a66701f2fff347 camera=12:69a66701f2fff347 shadow=12:69a66701f2fff347 indirect=12:69a66701f2fff347 +geom 382: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.8138704 motion [] pieces all=12:e569ce107be2c4d3 camera=12:e569ce107be2c4d3 shadow=12:e569ce107be2c4d3 indirect=12:e569ce107be2c4d3 +geom 383: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.1195462 motion [] pieces all=12:42484194db7c8a06 camera=12:42484194db7c8a06 shadow=12:42484194db7c8a06 indirect=12:42484194db7c8a06 +geom 384: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.9979357 motion [] pieces all=12:817b453870a3d419 camera=12:817b453870a3d419 shadow=12:817b453870a3d419 indirect=12:817b453870a3d419 +geom 385: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0240195 motion [] pieces all=12:2ced474f3777cf40 camera=12:2ced474f3777cf40 shadow=12:2ced474f3777cf40 indirect=12:2ced474f3777cf40 +geom 386: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.1780815 motion [] pieces all=12:9393967072a354e1 camera=12:9393967072a354e1 shadow=12:9393967072a354e1 indirect=12:9393967072a354e1 +geom 387: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.87838584 motion [] pieces all=12:027e2841751e5753 camera=12:027e2841751e5753 shadow=12:027e2841751e5753 indirect=12:027e2841751e5753 +geom 388: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.1091733 motion [] pieces all=12:2ed1840aa5cba15e camera=12:2ed1840aa5cba15e shadow=12:2ed1840aa5cba15e indirect=12:2ed1840aa5cba15e +geom 389: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.805113 motion [] pieces all=12:60447d059631efd4 camera=12:60447d059631efd4 shadow=12:60447d059631efd4 indirect=12:60447d059631efd4 +geom 390: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0589079 motion [] pieces all=12:e47acd5a96839e07 camera=12:e47acd5a96839e07 shadow=12:e47acd5a96839e07 indirect=12:e47acd5a96839e07 +geom 391: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.92295647 motion [] pieces all=12:7b43a30fb1dddcde camera=12:7b43a30fb1dddcde shadow=12:7b43a30fb1dddcde indirect=12:7b43a30fb1dddcde +geom 392: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.128148 motion [] pieces all=12:69a0ed79f1b361cf camera=12:69a0ed79f1b361cf shadow=12:69a0ed79f1b361cf indirect=12:69a0ed79f1b361cf +geom 393: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.83284235 motion [] pieces all=12:d0f91134dfad0a19 camera=12:d0f91134dfad0a19 shadow=12:d0f91134dfad0a19 indirect=12:d0f91134dfad0a19 +geom 394: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.92853355 motion [] pieces all=12:f81b7e7017cc610e camera=12:f81b7e7017cc610e shadow=12:f81b7e7017cc610e indirect=12:f81b7e7017cc610e +geom 395: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0970887 motion [] pieces all=12:78927457c90a0400 camera=12:78927457c90a0400 shadow=12:78927457c90a0400 indirect=12:78927457c90a0400 +geom 396: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0317997 motion [] pieces all=12:20b0fd0fc171807f camera=12:20b0fd0fc171807f shadow=12:20b0fd0fc171807f indirect=12:20b0fd0fc171807f +geom 397: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.97373277 motion [] pieces all=12:dcdf42631e7cd0a2 camera=12:dcdf42631e7cd0a2 shadow=12:dcdf42631e7cd0a2 indirect=12:dcdf42631e7cd0a2 +geom 398: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.1714392 motion [] pieces all=12:c472d0d4899eae67 camera=12:c472d0d4899eae67 shadow=12:c472d0d4899eae67 indirect=12:c472d0d4899eae67 +geom 399: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.8703055 motion [] pieces all=12:8267e610d01a5680 camera=12:8267e610d01a5680 shadow=12:8267e610d01a5680 indirect=12:8267e610d01a5680 +geom 400: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.1441025 motion [] pieces all=12:279b3e24a102bf1e camera=12:279b3e24a102bf1e shadow=12:279b3e24a102bf1e indirect=12:279b3e24a102bf1e +geom 401: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.84141374 motion [] pieces all=12:d17319b14aca9e2c camera=12:d17319b14aca9e2c shadow=12:d17319b14aca9e2c indirect=12:d17319b14aca9e2c +geom 402: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0838239 motion [] pieces all=12:96dd4c0357b42b14 camera=12:96dd4c0357b42b14 shadow=12:96dd4c0357b42b14 indirect=12:96dd4c0357b42b14 +geom 403: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.94532305 motion [] pieces all=12:f5fe4cb39a4686ce camera=12:f5fe4cb39a4686ce shadow=12:f5fe4cb39a4686ce indirect=12:f5fe4cb39a4686ce +geom 404: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.95378745 motion [] pieces all=12:8dd37214aa940697 camera=12:8dd37214aa940697 shadow=12:8dd37214aa940697 indirect=12:8dd37214aa940697 +geom 405: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0423332 motion [] pieces all=12:de1e755492a14152 camera=12:de1e755492a14152 shadow=12:de1e755492a14152 indirect=12:de1e755492a14152 +geom 406: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.1559403 motion [] pieces all=12:9249a94688f496e1 camera=12:9249a94688f496e1 shadow=12:9249a94688f496e1 indirect=12:9249a94688f496e1 +geom 407: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.8601882 motion [] pieces all=12:1283b0c1c55f493f camera=12:1283b0c1c55f493f shadow=12:1283b0c1c55f493f indirect=12:1283b0c1c55f493f +geom 408: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.1138958 motion [] pieces all=12:8c88dd3a0f244fe6 camera=12:8c88dd3a0f244fe6 shadow=12:8c88dd3a0f244fe6 indirect=12:8c88dd3a0f244fe6 +geom 409: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.8189872 motion [] pieces all=12:6fe3119800e2b724 camera=12:6fe3119800e2b724 shadow=12:6fe3119800e2b724 indirect=12:6fe3119800e2b724 +geom 410: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.90952617 motion [] pieces all=12:8c6a289ed18001c2 camera=12:8c6a289ed18001c2 shadow=12:8c6a289ed18001c2 indirect=12:8c6a289ed18001c2 +geom 411: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0676242 motion [] pieces all=12:48ef6b53ccf7f3ae camera=12:48ef6b53ccf7f3ae shadow=12:48ef6b53ccf7f3ae indirect=12:48ef6b53ccf7f3ae +geom 412: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.1898406 motion [] pieces all=12:b2408acca88da277 camera=12:b2408acca88da277 shadow=12:b2408acca88da277 indirect=12:b2408acca88da277 +geom 413: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.8942463 motion [] pieces all=12:6be4b9c1cca2d56a camera=12:6be4b9c1cca2d56a shadow=12:6be4b9c1cca2d56a indirect=12:6be4b9c1cca2d56a +geom 414: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.97924507 motion [] pieces all=12:225624b471d1e03b camera=12:225624b471d1e03b shadow=12:225624b471d1e03b indirect=12:225624b471d1e03b +geom 415: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0110332 motion [] pieces all=12:cca30bb094acd981 camera=12:cca30bb094acd981 shadow=12:cca30bb094acd981 indirect=12:cca30bb094acd981 +geom 416: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.81568116 motion [] pieces all=12:d0cafe097a17f591 camera=12:d0cafe097a17f591 shadow=12:d0cafe097a17f591 indirect=12:d0cafe097a17f591 +geom 417: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.1248193 motion [] pieces all=12:37a2bd30f2744dc6 camera=12:37a2bd30f2744dc6 shadow=12:37a2bd30f2744dc6 indirect=12:37a2bd30f2744dc6 +geom 418: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.9016662 motion [] pieces all=12:22706d0be71e9245 camera=12:22706d0be71e9245 shadow=12:22706d0be71e9245 indirect=12:22706d0be71e9245 +geom 419: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0732667 motion [] pieces all=12:40038908680d4401 camera=12:40038908680d4401 shadow=12:40038908680d4401 indirect=12:40038908680d4401 +geom 420: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0060534 motion [] pieces all=12:f41bc3293229b5c6 camera=12:f41bc3293229b5c6 shadow=12:f41bc3293229b5c6 indirect=12:f41bc3293229b5c6 +geom 421: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.98605454 motion [] pieces all=12:74201c06a60b7e79 camera=12:74201c06a60b7e79 shadow=12:74201c06a60b7e79 indirect=12:74201c06a60b7e79 +geom 422: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.8919946 motion [] pieces all=12:5f2730bf79a70fe6 camera=12:5f2730bf79a70fe6 shadow=12:5f2730bf79a70fe6 indirect=12:5f2730bf79a70fe6 +geom 423: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.19644 motion [] pieces all=12:3146e5e85b71495b camera=12:3146e5e85b71495b shadow=12:3146e5e85b71495b indirect=12:3146e5e85b71495b +geom 424: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.8503766 motion [] pieces all=12:08a48fe8aa435062 camera=12:08a48fe8aa435062 shadow=12:08a48fe8aa435062 indirect=12:08a48fe8aa435062 +geom 425: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.1588464 motion [] pieces all=12:42a78cff3d571444 camera=12:42a78cff3d571444 shadow=12:42a78cff3d571444 indirect=12:42a78cff3d571444 +geom 426: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.95724255 motion [] pieces all=12:a5085c33a6b177c9 camera=12:a5085c33a6b177c9 shadow=12:a5085c33a6b177c9 indirect=12:a5085c33a6b177c9 +geom 427: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0496792 motion [] pieces all=12:d237182b1562400a camera=12:d237182b1562400a shadow=12:d237182b1562400a indirect=12:d237182b1562400a +geom 428: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0764337 motion [] pieces all=12:1fc7edde3708a83c camera=12:1fc7edde3708a83c shadow=12:1fc7edde3708a83c indirect=12:1fc7edde3708a83c +geom 429: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.94295996 motion [] pieces all=12:49bee21585a46b48 camera=12:49bee21585a46b48 shadow=12:49bee21585a46b48 indirect=12:49bee21585a46b48 +geom 430: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.84723824 motion [] pieces all=12:f8f063c5827ba797 camera=12:f8f063c5827ba797 shadow=12:f8f063c5827ba797 indirect=12:f8f063c5827ba797 +geom 431: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.139218 motion [] pieces all=12:a397a5167452c818 camera=12:a397a5167452c818 shadow=12:a397a5167452c818 indirect=12:a397a5167452c818 +geom 432: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.8667562 motion [] pieces all=12:6dc7c0e793f4c492 camera=12:6dc7c0e793f4c492 shadow=12:6dc7c0e793f4c492 indirect=12:6dc7c0e793f4c492 +geom 433: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.1638904 motion [] pieces all=12:c005ed491d1abb17 camera=12:c005ed491d1abb17 shadow=12:c005ed491d1abb17 indirect=12:c005ed491d1abb17 +geom 434: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.96669084 motion [] pieces all=12:9a5425fe4964167c camera=12:9a5425fe4964167c shadow=12:9a5425fe4964167c indirect=12:9a5425fe4964167c +geom 435: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0310098 motion [] pieces all=12:422a73f3c3468e8a camera=12:422a73f3c3468e8a shadow=12:422a73f3c3468e8a indirect=12:422a73f3c3468e8a +geom 436: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.9359371 motion [] pieces all=12:c41f8c20a8cefe26 camera=12:c41f8c20a8cefe26 shadow=12:c41f8c20a8cefe26 indirect=12:c41f8c20a8cefe26 +geom 437: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0920191 motion [] pieces all=12:67da5a5117403cb0 camera=12:67da5a5117403cb0 shadow=12:67da5a5117403cb0 indirect=12:67da5a5117403cb0 +geom 438: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.1332088 motion [] pieces all=12:fc1749d615ff3503 camera=12:fc1749d615ff3503 shadow=12:fc1749d615ff3503 indirect=12:fc1749d615ff3503 +geom 439: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.82963383 motion [] pieces all=12:8923dc9c030f82cb camera=12:8923dc9c030f82cb shadow=12:8923dc9c030f82cb indirect=12:8923dc9c030f82cb +geom 440: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.989561 motion [] pieces all=12:53a4125ff63a0937 camera=12:53a4125ff63a0937 shadow=12:53a4125ff63a0937 indirect=12:53a4125ff63a0937 +geom 441: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0177096 motion [] pieces all=12:65f91049698d610a camera=12:65f91049698d610a shadow=12:65f91049698d610a indirect=12:65f91049698d610a +geom 442: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.1837815 motion [] pieces all=12:cdcb5a0d01d898da camera=12:cdcb5a0d01d898da shadow=12:cdcb5a0d01d898da indirect=12:cdcb5a0d01d898da +geom 443: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.88659936 motion [] pieces all=12:9499b7def0936290 camera=12:9499b7def0936290 shadow=12:9499b7def0936290 indirect=12:9499b7def0936290 +geom 444: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.91293037 motion [] pieces all=12:83e3abd6ac7f83a9 camera=12:83e3abd6ac7f83a9 shadow=12:83e3abd6ac7f83a9 indirect=12:83e3abd6ac7f83a9 +geom 445: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.053651 motion [] pieces all=12:b0a60d26f0688b94 camera=12:b0a60d26f0688b94 shadow=12:b0a60d26f0688b94 indirect=12:b0a60d26f0688b94 +geom 446: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.1022353 motion [] pieces all=12:a8aca66167227e3e camera=12:a8aca66167227e3e shadow=12:a8aca66167227e3e indirect=12:a8aca66167227e3e +geom 447: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.8098009 motion [] pieces all=12:d772aadd56b26362 camera=12:d772aadd56b26362 shadow=12:d772aadd56b26362 indirect=12:d772aadd56b26362 +geom 448: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.1986847 motion [] pieces all=12:c1d1ba87d4521c68 camera=12:c1d1ba87d4521c68 shadow=12:c1d1ba87d4521c68 indirect=12:c1d1ba87d4521c68 +geom 449: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.8879799 motion [] pieces all=12:1cb570eb6a8dbc6e camera=12:1cb570eb6a8dbc6e shadow=12:1cb570eb6a8dbc6e indirect=12:1cb570eb6a8dbc6e +geom 450: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.98173344 motion [] pieces all=12:7eee75fae3c2c38e camera=12:7eee75fae3c2c38e shadow=12:7eee75fae3c2c38e indirect=12:7eee75fae3c2c38e +geom 451: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0000744 motion [] pieces all=12:ded11bb563f60b18 camera=12:ded11bb563f60b18 shadow=12:ded11bb563f60b18 indirect=12:ded11bb563f60b18 +geom 452: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.1216958 motion [] pieces all=12:7d0ffec4d58dda61 camera=12:7d0ffec4d58dda61 shadow=12:7d0ffec4d58dda61 indirect=12:7d0ffec4d58dda61 +geom 453: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.81506497 motion [] pieces all=12:11b648c7989f69d4 camera=12:11b648c7989f69d4 shadow=12:11b648c7989f69d4 indirect=12:11b648c7989f69d4 +geom 454: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.9058803 motion [] pieces all=12:9cd46ed2bbcbe3f3 camera=12:9cd46ed2bbcbe3f3 shadow=12:9cd46ed2bbcbe3f3 indirect=12:9cd46ed2bbcbe3f3 +geom 455: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0716925 motion [] pieces all=12:e1619e0d048155ae camera=12:e1619e0d048155ae shadow=12:e1619e0d048155ae indirect=12:e1619e0d048155ae +geom 456: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.85529506 motion [] pieces all=12:02ba68249605a870 camera=12:02ba68249605a870 shadow=12:02ba68249605a870 indirect=12:02ba68249605a870 +geom 457: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.1597875 motion [] pieces all=12:a894986db251ee0f camera=12:a894986db251ee0f shadow=12:a894986db251ee0f indirect=12:a894986db251ee0f +geom 458: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0444325 motion [] pieces all=12:4a2250159785a6e2 camera=12:4a2250159785a6e2 shadow=12:4a2250159785a6e2 indirect=12:4a2250159785a6e2 +geom 459: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.9616838 motion [] pieces all=12:d1ec13b3e62f6e92 camera=12:d1ec13b3e62f6e92 shadow=12:d1ec13b3e62f6e92 indirect=12:d1ec13b3e62f6e92 +geom 460: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.93935156 motion [] pieces all=12:04ea79f01e5f9a59 camera=12:04ea79f01e5f9a59 shadow=12:04ea79f01e5f9a59 indirect=12:04ea79f01e5f9a59 +geom 461: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0803297 motion [] pieces all=12:bf10521f4ec2bbb3 camera=12:bf10521f4ec2bbb3 shadow=12:bf10521f4ec2bbb3 indirect=12:bf10521f4ec2bbb3 +geom 462: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.8450973 motion [] pieces all=12:2a5cfdaaddca44c2 camera=12:2a5cfdaaddca44c2 shadow=12:2a5cfdaaddca44c2 indirect=12:2a5cfdaaddca44c2 +geom 463: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.1432472 motion [] pieces all=12:fbc5ba1ad600edaa camera=12:fbc5ba1ad600edaa shadow=12:fbc5ba1ad600edaa indirect=12:fbc5ba1ad600edaa +geom 464: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.1353691 motion [] pieces all=12:049353c120cbebfc camera=12:049353c120cbebfc shadow=12:049353c120cbebfc indirect=12:049353c120cbebfc +geom 465: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.8273636 motion [] pieces all=12:3c3011131e7e8813 camera=12:3c3011131e7e8813 shadow=12:3c3011131e7e8813 indirect=12:3c3011131e7e8813 +geom 466: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0902855 motion [] pieces all=12:772930a049a7379c camera=12:772930a049a7379c shadow=12:772930a049a7379c indirect=12:772930a049a7379c +geom 467: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.93297297 motion [] pieces all=12:25b9c445d211692a camera=12:25b9c445d211692a shadow=12:25b9c445d211692a indirect=12:25b9c445d211692a +geom 468: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.027414 motion [] pieces all=12:740d229d84e9cff7 camera=12:740d229d84e9cff7 shadow=12:740d229d84e9cff7 indirect=12:740d229d84e9cff7 +geom 469: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.96549386 motion [] pieces all=12:0aaa0db013610e8a camera=12:0aaa0db013610e8a shadow=12:0aaa0db013610e8a indirect=12:0aaa0db013610e8a +geom 470: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.8634908 motion [] pieces all=12:2fbc17d887102e0e camera=12:2fbc17d887102e0e shadow=12:2fbc17d887102e0e indirect=12:2fbc17d887102e0e +geom 471: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.165813 motion [] pieces all=12:016baf1b7130dcdc camera=12:016baf1b7130dcdc shadow=12:016baf1b7130dcdc indirect=12:016baf1b7130dcdc +geom 472: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.9932002 motion [] pieces all=12:614b99fb4286ac07 camera=12:614b99fb4286ac07 shadow=12:614b99fb4286ac07 indirect=12:614b99fb4286ac07 +geom 473: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0138267 motion [] pieces all=12:7f75b45364112aba camera=12:7f75b45364112aba shadow=12:7f75b45364112aba indirect=12:7f75b45364112aba +geom 474: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.8838996 motion [] pieces all=12:188942be9177a3f5 camera=12:188942be9177a3f5 shadow=12:188942be9177a3f5 indirect=12:188942be9177a3f5 +geom 475: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.1870891 motion [] pieces all=12:7546e17f458e7da2 camera=12:7546e17f458e7da2 shadow=12:7546e17f458e7da2 indirect=12:7546e17f458e7da2 +geom 476: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.1059833 motion [] pieces all=12:26de3a63ac32d9c0 camera=12:26de3a63ac32d9c0 shadow=12:26de3a63ac32d9c0 indirect=12:26de3a63ac32d9c0 +geom 477: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.8076202 motion [] pieces all=12:e1c21f8a4b9a925f camera=12:e1c21f8a4b9a925f shadow=12:e1c21f8a4b9a925f indirect=12:e1c21f8a4b9a925f +geom 478: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.917528 motion [] pieces all=12:7e89e6fe71b7d5e1 camera=12:7e89e6fe71b7d5e1 shadow=12:7e89e6fe71b7d5e1 indirect=12:7e89e6fe71b7d5e1 +geom 479: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0525516 motion [] pieces all=12:2e4367fb76a93572 camera=12:2e4367fb76a93572 shadow=12:2e4367fb76a93572 indirect=12:2e4367fb76a93572 +geom 480: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.1471847 motion [] pieces all=12:487ee130369a3f18 camera=12:487ee130369a3f18 shadow=12:487ee130369a3f18 indirect=12:487ee130369a3f18 +geom 481: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.8377189 motion [] pieces all=12:81f60f5e764c9e94 camera=12:81f60f5e764c9e94 shadow=12:81f60f5e764c9e94 indirect=12:81f60f5e764c9e94 +geom 482: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.9474101 motion [] pieces all=12:26736fb3efaf0e8b camera=12:26736fb3efaf0e8b shadow=12:26736fb3efaf0e8b indirect=12:26736fb3efaf0e8b +geom 483: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.085121 motion [] pieces all=12:9661338d340c04ba camera=12:9661338d340c04ba shadow=12:9661338d340c04ba indirect=12:9661338d340c04ba +geom 484: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.856993 motion [] pieces all=12:dbdb91d39e8aae83 camera=12:dbdb91d39e8aae83 shadow=12:dbdb91d39e8aae83 indirect=12:dbdb91d39e8aae83 +geom 485: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.1528894 motion [] pieces all=12:77eb4b680ce04830 camera=12:77eb4b680ce04830 shadow=12:77eb4b680ce04830 indirect=12:77eb4b680ce04830 +geom 486: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.038916 motion [] pieces all=12:81a43a78bc1e73fd camera=12:81a43a78bc1e73fd shadow=12:81a43a78bc1e73fd indirect=12:81a43a78bc1e73fd +geom 487: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.9504711 motion [] pieces all=12:5ff064de78509a0a camera=12:5ff064de78509a0a shadow=12:5ff064de78509a0a indirect=12:5ff064de78509a0a +geom 488: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0637788 motion [] pieces all=12:559a1655469b6861 camera=12:559a1655469b6861 shadow=12:559a1655469b6861 indirect=12:559a1655469b6861 +geom 489: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.90910155 motion [] pieces all=12:44a0535ec759978f camera=12:44a0535ec759978f shadow=12:44a0535ec759978f indirect=12:44a0535ec759978f +geom 490: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.1182432 motion [] pieces all=12:8b8f0bbb4571f9ae camera=12:8b8f0bbb4571f9ae shadow=12:8b8f0bbb4571f9ae indirect=12:8b8f0bbb4571f9ae +geom 491: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.82327044 motion [] pieces all=12:044596a57f782592 camera=12:044596a57f782592 shadow=12:044596a57f782592 indirect=12:044596a57f782592 +geom 492: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.193281 motion [] pieces all=12:583665b31fb2f901 camera=12:583665b31fb2f901 shadow=12:583665b31fb2f901 indirect=12:583665b31fb2f901 +geom 493: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.8985092 motion [] pieces all=12:16ee9626140776f4 camera=12:16ee9626140776f4 shadow=12:16ee9626140776f4 indirect=12:16ee9626140776f4 +geom 494: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.9765626 motion [] pieces all=12:9ac81ebc0d4f4c1d camera=12:9ac81ebc0d4f4c1d shadow=12:9ac81ebc0d4f4c1d indirect=12:9ac81ebc0d4f4c1d +geom 495: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0068495 motion [] pieces all=12:b55004e8fe41a807 camera=12:b55004e8fe41a807 shadow=12:b55004e8fe41a807 indirect=12:b55004e8fe41a807 +geom 496: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.1257349 motion [] pieces all=12:794d02ae4d0bbc6b camera=12:794d02ae4d0bbc6b shadow=12:794d02ae4d0bbc6b indirect=12:794d02ae4d0bbc6b +geom 497: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.8368855 motion [] pieces all=12:978c75be788afc67 camera=12:978c75be788afc67 shadow=12:978c75be788afc67 indirect=12:978c75be788afc67 +geom 498: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.92759454 motion [] pieces all=12:8c8da1e4983b11c8 camera=12:8c8da1e4983b11c8 shadow=12:8c8da1e4983b11c8 indirect=12:8c8da1e4983b11c8 +geom 499: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0956422 motion [] pieces all=12:ac83c9c903ea15c9 camera=12:ac83c9c903ea15c9 shadow=12:ac83c9c903ea15c9 indirect=12:ac83c9c903ea15c9 +geom 500: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=12:d69dc8407e39c57d camera=12:d69dc8407e39c57d shadow=12:d69dc8407e39c57d indirect=12:d69dc8407e39c57d +geom 501: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=12:108ece7556e2045d camera=12:108ece7556e2045d shadow=12:108ece7556e2045d indirect=12:108ece7556e2045d +geom 502: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=12:b6f2f6b932607ce5 camera=12:b6f2f6b932607ce5 shadow=12:b6f2f6b932607ce5 indirect=12:b6f2f6b932607ce5 +geom 503: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=12:18f7f442a8f08005 camera=12:18f7f442a8f08005 shadow=12:18f7f442a8f08005 indirect=12:18f7f442a8f08005 +geom 504: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=12:95835634df888e55 camera=12:95835634df888e55 shadow=12:95835634df888e55 indirect=12:95835634df888e55 +geom 505: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=12:26e126fb8d08607d camera=12:26e126fb8d08607d shadow=12:26e126fb8d08607d indirect=12:26e126fb8d08607d +geom 506: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=4:d3ae5d8c61eeefd5 camera=4:d3ae5d8c61eeefd5 shadow=4:d3ae5d8c61eeefd5 indirect=4:d3ae5d8c61eeefd5 +geom 507: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:02dee92ba923d022 camera=2:02dee92ba923d022 shadow=2:02dee92ba923d022 indirect=2:02dee92ba923d022 +geom 508: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:d420bef838b31092 camera=2:d420bef838b31092 shadow=2:d420bef838b31092 indirect=2:d420bef838b31092 +geom 509: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=128:7e7f92bf6cf1e8e1 camera=128:7e7f92bf6cf1e8e1 shadow=128:7e7f92bf6cf1e8e1 indirect=128:7e7f92bf6cf1e8e1 +geom 510: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:5fd3af8a8974e005 camera=2:5fd3af8a8974e005 shadow=2:5fd3af8a8974e005 indirect=2:5fd3af8a8974e005 +geom 511: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:9626b0f2f3e041c5 camera=2:9626b0f2f3e041c5 shadow=2:9626b0f2f3e041c5 indirect=2:9626b0f2f3e041c5 +geom 512: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=12:65eff1dac76e16e5 camera=12:65eff1dac76e16e5 shadow=12:65eff1dac76e16e5 indirect=12:65eff1dac76e16e5 +geom 513: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=12:c5bbf2f135b5e22b camera=12:c5bbf2f135b5e22b shadow=12:c5bbf2f135b5e22b indirect=12:c5bbf2f135b5e22b +geom 514: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:77f8032df1a5e1f5 camera=2:77f8032df1a5e1f5 shadow=2:77f8032df1a5e1f5 indirect=2:77f8032df1a5e1f5 +provenance arc source: /Crate +provenance arc source: /Crate/geo +provenance arc source: /World/stones/Prototypes/stone_a +provenance arc source: /World/stones/Prototypes/stone_b +provenance arc source: /_Cube +provenance light /World/Sky: LightOrigin { index: 0, geoms: 514..514 } +provenance geometry 0..500: /World/stones +provenance geometry 500..501: /World/pebble/geo +provenance geometry 501..502: /World/away/geo +provenance geometry 502..503: /World/box/geo +provenance geometry 503..504: /World/sunk/geo +provenance geometry 504..505: /World/rock/geo +provenance geometry 505..506: /World/vase/geo +provenance geometry 506..507: /World/steps/geo +provenance geometry 507..508: /World/field/geo +provenance geometry 508..509: /World/slope/geo +provenance geometry 509..510: /World/terrain/geo +provenance geometry 510..511: /World/shelf/geo +provenance geometry 511..512: /World/floor/geo +provenance geometry 512..513: /World/inst +provenance geometry 513..514: /World/crate/geo +provenance geometry 514..515: /World/table/geo +provenance mesh: MeshOrigin { geom_id: 500, slot: 2, baked: false, moving: false } +provenance mesh: MeshOrigin { geom_id: 501, slot: 2, baked: false, moving: false } +provenance mesh: MeshOrigin { geom_id: 502, slot: 2, baked: false, moving: false } +provenance mesh: MeshOrigin { geom_id: 503, slot: 2, baked: false, moving: false } +provenance mesh: MeshOrigin { geom_id: 504, slot: 3, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 505, slot: 4, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 506, slot: 5, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 507, slot: 6, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 508, slot: 7, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 509, slot: 8, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 510, slot: 9, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 511, slot: 10, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 513, slot: 2, baked: false, moving: false } +provenance mesh: MeshOrigin { geom_id: 514, slot: 11, baked: true, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 4345222167175548266, n_points: 8, n_indices: 24, n_uvs: None, smooth: true, material: 0 }), placements: 0, shared: true, displaced: false } +provenance mesh slot 1: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 735706973108043347, n_points: 8, n_indices: 24, n_uvs: None, smooth: true, material: 0 }), placements: 0, shared: true, displaced: false } +provenance mesh slot 2: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 2634041098053373584, n_points: 8, n_indices: 24, n_uvs: None, smooth: true, material: 0 }), placements: 5, shared: true, displaced: false } +provenance mesh slot 3: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 14470132405950877311, n_points: 8, n_indices: 24, n_uvs: None, smooth: true, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 4: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 1206830347127950734, n_points: 8, n_indices: 24, n_uvs: None, smooth: true, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 5: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 9519870911682368984, n_points: 6, n_indices: 8, n_uvs: None, smooth: true, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 6: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 1341889141698287293, n_points: 4, n_indices: 4, n_uvs: None, smooth: true, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 7: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 1313731086437247865, n_points: 4, n_indices: 4, n_uvs: None, smooth: true, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 8: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 15760070156626746114, n_points: 81, n_indices: 256, n_uvs: None, smooth: true, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 9: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 1050066994217133652, n_points: 4, n_indices: 4, n_uvs: None, smooth: true, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 10: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 14002714535549629103, n_points: 4, n_indices: 4, n_uvs: None, smooth: true, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 11: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 14095911038168715313, n_points: 4, n_indices: 4, n_uvs: None, smooth: true, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: true }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/World/Cam"), cameras: ["/World/Cam"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/World/Cam"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/placed_usda-7c35981b427daf53-2.image b/crates/crust-core/tests/data/import_baselines/placed_usda-7c35981b427daf53-2.image new file mode 100644 index 000000000..d6302dd1b --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/placed_usda-7c35981b427daf53-2.image @@ -0,0 +1 @@ +48x32 16spp clamp-off 74128e666e058a48 diff --git a/crates/crust-core/tests/data/import_baselines/placed_usda-85cdaaa611ddcfb8-1.digest b/crates/crust-core/tests/data/import_baselines/placed_usda-85cdaaa611ddcfb8-1.digest new file mode 100644 index 000000000..39ac096fd --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/placed_usda-85cdaaa611ddcfb8-1.digest @@ -0,0 +1,78 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/World/Cam") +camera: Camera { origin: Vec3A(0.0, 4.0, 14.0), lower_left_corner: Vec3A(-6.371167, -0.2474451, 4.0), horizontal: Vec3A(12.742334, 0.0, 0.0), vertical: Vec3A(0.0, 8.49489, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: Some("/Render/settings") +settings: RenderSettings { samples_per_pixel: 128, max_depth: 3, width: 48, height: 32, region: PixelRect { x0: 0, y0: 0, x1: 48, y1: 32 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 18.0, aperture: [20.955, 15.2908], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 10.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/placed.usda", "$DIR/stage.usda", "$DIR/table.usda"], invisible_overrides: Some(0) } +layer: $DIR/crate.usda +layer: $DIR/placed.usda +layer: $DIR/stage.usda +layer: $DIR/table.usda +lights: 1 +light 0: dome name Some("/World/Sky") lpe None pmf 1.0 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 15 geometries, PrimitiveBreakdown { triangles: 166, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 6 } top level, PrimitiveBreakdown { triangles: 178, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 6 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=12:d69dc8407e39c57d camera=12:d69dc8407e39c57d shadow=12:d69dc8407e39c57d indirect=12:d69dc8407e39c57d +geom 1: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=12:108ece7556e2045d camera=12:108ece7556e2045d shadow=12:108ece7556e2045d indirect=12:108ece7556e2045d +geom 2: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=12:b6f2f6b932607ce5 camera=12:b6f2f6b932607ce5 shadow=12:b6f2f6b932607ce5 indirect=12:b6f2f6b932607ce5 +geom 3: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=12:18f7f442a8f08005 camera=12:18f7f442a8f08005 shadow=12:18f7f442a8f08005 indirect=12:18f7f442a8f08005 +geom 4: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=12:95835634df888e55 camera=12:95835634df888e55 shadow=12:95835634df888e55 indirect=12:95835634df888e55 +geom 5: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=12:26e126fb8d08607d camera=12:26e126fb8d08607d shadow=12:26e126fb8d08607d indirect=12:26e126fb8d08607d +geom 6: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=4:d3ae5d8c61eeefd5 camera=4:d3ae5d8c61eeefd5 shadow=4:d3ae5d8c61eeefd5 indirect=4:d3ae5d8c61eeefd5 +geom 7: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:02dee92ba923d022 camera=2:02dee92ba923d022 shadow=2:02dee92ba923d022 indirect=2:02dee92ba923d022 +geom 8: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:d420bef838b31092 camera=2:d420bef838b31092 shadow=2:d420bef838b31092 indirect=2:d420bef838b31092 +geom 9: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=128:7e7f92bf6cf1e8e1 camera=128:7e7f92bf6cf1e8e1 shadow=128:7e7f92bf6cf1e8e1 indirect=128:7e7f92bf6cf1e8e1 +geom 10: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:5fd3af8a8974e005 camera=2:5fd3af8a8974e005 shadow=2:5fd3af8a8974e005 indirect=2:5fd3af8a8974e005 +geom 11: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:9626b0f2f3e041c5 camera=2:9626b0f2f3e041c5 shadow=2:9626b0f2f3e041c5 indirect=2:9626b0f2f3e041c5 +geom 12: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=12:65eff1dac76e16e5 camera=12:65eff1dac76e16e5 shadow=12:65eff1dac76e16e5 indirect=12:65eff1dac76e16e5 +geom 13: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=12:c5bbf2f135b5e22b camera=12:c5bbf2f135b5e22b shadow=12:c5bbf2f135b5e22b indirect=12:c5bbf2f135b5e22b +geom 14: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:77f8032df1a5e1f5 camera=2:77f8032df1a5e1f5 shadow=2:77f8032df1a5e1f5 indirect=2:77f8032df1a5e1f5 +provenance arc source: /Crate +provenance arc source: /Crate/geo +provenance arc source: /_Cube +provenance light /World/Sky: LightOrigin { index: 0, geoms: 14..14 } +provenance geometry 0..1: /World/pebble/geo +provenance geometry 1..2: /World/away/geo +provenance geometry 2..3: /World/box/geo +provenance geometry 3..4: /World/sunk/geo +provenance geometry 4..5: /World/rock/geo +provenance geometry 5..6: /World/vase/geo +provenance geometry 6..7: /World/steps/geo +provenance geometry 7..8: /World/field/geo +provenance geometry 8..9: /World/slope/geo +provenance geometry 9..10: /World/terrain/geo +provenance geometry 10..11: /World/shelf/geo +provenance geometry 11..12: /World/floor/geo +provenance geometry 12..13: /World/inst +provenance geometry 13..14: /World/crate/geo +provenance geometry 14..15: /World/table/geo +provenance mesh: MeshOrigin { geom_id: 0, slot: 0, baked: false, moving: false } +provenance mesh: MeshOrigin { geom_id: 1, slot: 0, baked: false, moving: false } +provenance mesh: MeshOrigin { geom_id: 2, slot: 0, baked: false, moving: false } +provenance mesh: MeshOrigin { geom_id: 3, slot: 0, baked: false, moving: false } +provenance mesh: MeshOrigin { geom_id: 4, slot: 1, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 5, slot: 2, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 6, slot: 3, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 7, slot: 4, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 8, slot: 5, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 9, slot: 6, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 10, slot: 7, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 11, slot: 8, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 13, slot: 0, baked: false, moving: false } +provenance mesh: MeshOrigin { geom_id: 14, slot: 9, baked: true, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 2634041098053373584, n_points: 8, n_indices: 24, n_uvs: None, smooth: true, material: 0 }), placements: 5, shared: true, displaced: false } +provenance mesh slot 1: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 14470132405950877311, n_points: 8, n_indices: 24, n_uvs: None, smooth: true, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 2: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 1206830347127950734, n_points: 8, n_indices: 24, n_uvs: None, smooth: true, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 3: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 9519870911682368984, n_points: 6, n_indices: 8, n_uvs: None, smooth: true, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 4: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 1341889141698287293, n_points: 4, n_indices: 4, n_uvs: None, smooth: true, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 5: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 1313731086437247865, n_points: 4, n_indices: 4, n_uvs: None, smooth: true, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 6: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 15760070156626746114, n_points: 81, n_indices: 256, n_uvs: None, smooth: true, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 7: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 1050066994217133652, n_points: 4, n_indices: 4, n_uvs: None, smooth: true, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 8: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 14002714535549629103, n_points: 4, n_indices: 4, n_uvs: None, smooth: true, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 9: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 14095911038168715313, n_points: 4, n_indices: 4, n_uvs: None, smooth: true, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: true }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/World/Cam"), cameras: ["/World/Cam"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/World/Cam"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/placed_usda-85cdaaa611ddcfb8-1.image b/crates/crust-core/tests/data/import_baselines/placed_usda-85cdaaa611ddcfb8-1.image new file mode 100644 index 000000000..9c00d41e4 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/placed_usda-85cdaaa611ddcfb8-1.image @@ -0,0 +1 @@ +48x32 16spp clamp-off d07945c7d875794f diff --git a/crates/crust-core/tests/data/import_baselines/placed_usda-94944664ab7e307d-1.digest b/crates/crust-core/tests/data/import_baselines/placed_usda-94944664ab7e307d-1.digest new file mode 100644 index 000000000..39ac096fd --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/placed_usda-94944664ab7e307d-1.digest @@ -0,0 +1,78 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/World/Cam") +camera: Camera { origin: Vec3A(0.0, 4.0, 14.0), lower_left_corner: Vec3A(-6.371167, -0.2474451, 4.0), horizontal: Vec3A(12.742334, 0.0, 0.0), vertical: Vec3A(0.0, 8.49489, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: Some("/Render/settings") +settings: RenderSettings { samples_per_pixel: 128, max_depth: 3, width: 48, height: 32, region: PixelRect { x0: 0, y0: 0, x1: 48, y1: 32 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 18.0, aperture: [20.955, 15.2908], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 10.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/placed.usda", "$DIR/stage.usda", "$DIR/table.usda"], invisible_overrides: Some(0) } +layer: $DIR/crate.usda +layer: $DIR/placed.usda +layer: $DIR/stage.usda +layer: $DIR/table.usda +lights: 1 +light 0: dome name Some("/World/Sky") lpe None pmf 1.0 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 15 geometries, PrimitiveBreakdown { triangles: 166, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 6 } top level, PrimitiveBreakdown { triangles: 178, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 6 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=12:d69dc8407e39c57d camera=12:d69dc8407e39c57d shadow=12:d69dc8407e39c57d indirect=12:d69dc8407e39c57d +geom 1: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=12:108ece7556e2045d camera=12:108ece7556e2045d shadow=12:108ece7556e2045d indirect=12:108ece7556e2045d +geom 2: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=12:b6f2f6b932607ce5 camera=12:b6f2f6b932607ce5 shadow=12:b6f2f6b932607ce5 indirect=12:b6f2f6b932607ce5 +geom 3: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=12:18f7f442a8f08005 camera=12:18f7f442a8f08005 shadow=12:18f7f442a8f08005 indirect=12:18f7f442a8f08005 +geom 4: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=12:95835634df888e55 camera=12:95835634df888e55 shadow=12:95835634df888e55 indirect=12:95835634df888e55 +geom 5: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=12:26e126fb8d08607d camera=12:26e126fb8d08607d shadow=12:26e126fb8d08607d indirect=12:26e126fb8d08607d +geom 6: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=4:d3ae5d8c61eeefd5 camera=4:d3ae5d8c61eeefd5 shadow=4:d3ae5d8c61eeefd5 indirect=4:d3ae5d8c61eeefd5 +geom 7: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:02dee92ba923d022 camera=2:02dee92ba923d022 shadow=2:02dee92ba923d022 indirect=2:02dee92ba923d022 +geom 8: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:d420bef838b31092 camera=2:d420bef838b31092 shadow=2:d420bef838b31092 indirect=2:d420bef838b31092 +geom 9: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=128:7e7f92bf6cf1e8e1 camera=128:7e7f92bf6cf1e8e1 shadow=128:7e7f92bf6cf1e8e1 indirect=128:7e7f92bf6cf1e8e1 +geom 10: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:5fd3af8a8974e005 camera=2:5fd3af8a8974e005 shadow=2:5fd3af8a8974e005 indirect=2:5fd3af8a8974e005 +geom 11: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:9626b0f2f3e041c5 camera=2:9626b0f2f3e041c5 shadow=2:9626b0f2f3e041c5 indirect=2:9626b0f2f3e041c5 +geom 12: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=12:65eff1dac76e16e5 camera=12:65eff1dac76e16e5 shadow=12:65eff1dac76e16e5 indirect=12:65eff1dac76e16e5 +geom 13: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=12:c5bbf2f135b5e22b camera=12:c5bbf2f135b5e22b shadow=12:c5bbf2f135b5e22b indirect=12:c5bbf2f135b5e22b +geom 14: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:77f8032df1a5e1f5 camera=2:77f8032df1a5e1f5 shadow=2:77f8032df1a5e1f5 indirect=2:77f8032df1a5e1f5 +provenance arc source: /Crate +provenance arc source: /Crate/geo +provenance arc source: /_Cube +provenance light /World/Sky: LightOrigin { index: 0, geoms: 14..14 } +provenance geometry 0..1: /World/pebble/geo +provenance geometry 1..2: /World/away/geo +provenance geometry 2..3: /World/box/geo +provenance geometry 3..4: /World/sunk/geo +provenance geometry 4..5: /World/rock/geo +provenance geometry 5..6: /World/vase/geo +provenance geometry 6..7: /World/steps/geo +provenance geometry 7..8: /World/field/geo +provenance geometry 8..9: /World/slope/geo +provenance geometry 9..10: /World/terrain/geo +provenance geometry 10..11: /World/shelf/geo +provenance geometry 11..12: /World/floor/geo +provenance geometry 12..13: /World/inst +provenance geometry 13..14: /World/crate/geo +provenance geometry 14..15: /World/table/geo +provenance mesh: MeshOrigin { geom_id: 0, slot: 0, baked: false, moving: false } +provenance mesh: MeshOrigin { geom_id: 1, slot: 0, baked: false, moving: false } +provenance mesh: MeshOrigin { geom_id: 2, slot: 0, baked: false, moving: false } +provenance mesh: MeshOrigin { geom_id: 3, slot: 0, baked: false, moving: false } +provenance mesh: MeshOrigin { geom_id: 4, slot: 1, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 5, slot: 2, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 6, slot: 3, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 7, slot: 4, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 8, slot: 5, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 9, slot: 6, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 10, slot: 7, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 11, slot: 8, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 13, slot: 0, baked: false, moving: false } +provenance mesh: MeshOrigin { geom_id: 14, slot: 9, baked: true, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 2634041098053373584, n_points: 8, n_indices: 24, n_uvs: None, smooth: true, material: 0 }), placements: 5, shared: true, displaced: false } +provenance mesh slot 1: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 14470132405950877311, n_points: 8, n_indices: 24, n_uvs: None, smooth: true, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 2: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 1206830347127950734, n_points: 8, n_indices: 24, n_uvs: None, smooth: true, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 3: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 9519870911682368984, n_points: 6, n_indices: 8, n_uvs: None, smooth: true, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 4: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 1341889141698287293, n_points: 4, n_indices: 4, n_uvs: None, smooth: true, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 5: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 1313731086437247865, n_points: 4, n_indices: 4, n_uvs: None, smooth: true, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 6: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 15760070156626746114, n_points: 81, n_indices: 256, n_uvs: None, smooth: true, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 7: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 1050066994217133652, n_points: 4, n_indices: 4, n_uvs: None, smooth: true, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 8: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 14002714535549629103, n_points: 4, n_indices: 4, n_uvs: None, smooth: true, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 9: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 14095911038168715313, n_points: 4, n_indices: 4, n_uvs: None, smooth: true, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: true }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/World/Cam"), cameras: ["/World/Cam"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/World/Cam"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/placed_usda-94944664ab7e307d-1.image b/crates/crust-core/tests/data/import_baselines/placed_usda-94944664ab7e307d-1.image new file mode 100644 index 000000000..9c00d41e4 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/placed_usda-94944664ab7e307d-1.image @@ -0,0 +1 @@ +48x32 16spp clamp-off d07945c7d875794f diff --git a/crates/crust-core/tests/data/import_baselines/placed_usda-97fbc0f3fbe2c018-1.digest b/crates/crust-core/tests/data/import_baselines/placed_usda-97fbc0f3fbe2c018-1.digest new file mode 100644 index 000000000..39ac096fd --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/placed_usda-97fbc0f3fbe2c018-1.digest @@ -0,0 +1,78 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/World/Cam") +camera: Camera { origin: Vec3A(0.0, 4.0, 14.0), lower_left_corner: Vec3A(-6.371167, -0.2474451, 4.0), horizontal: Vec3A(12.742334, 0.0, 0.0), vertical: Vec3A(0.0, 8.49489, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: Some("/Render/settings") +settings: RenderSettings { samples_per_pixel: 128, max_depth: 3, width: 48, height: 32, region: PixelRect { x0: 0, y0: 0, x1: 48, y1: 32 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 18.0, aperture: [20.955, 15.2908], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 10.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/placed.usda", "$DIR/stage.usda", "$DIR/table.usda"], invisible_overrides: Some(0) } +layer: $DIR/crate.usda +layer: $DIR/placed.usda +layer: $DIR/stage.usda +layer: $DIR/table.usda +lights: 1 +light 0: dome name Some("/World/Sky") lpe None pmf 1.0 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 15 geometries, PrimitiveBreakdown { triangles: 166, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 6 } top level, PrimitiveBreakdown { triangles: 178, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 6 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=12:d69dc8407e39c57d camera=12:d69dc8407e39c57d shadow=12:d69dc8407e39c57d indirect=12:d69dc8407e39c57d +geom 1: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=12:108ece7556e2045d camera=12:108ece7556e2045d shadow=12:108ece7556e2045d indirect=12:108ece7556e2045d +geom 2: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=12:b6f2f6b932607ce5 camera=12:b6f2f6b932607ce5 shadow=12:b6f2f6b932607ce5 indirect=12:b6f2f6b932607ce5 +geom 3: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=12:18f7f442a8f08005 camera=12:18f7f442a8f08005 shadow=12:18f7f442a8f08005 indirect=12:18f7f442a8f08005 +geom 4: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=12:95835634df888e55 camera=12:95835634df888e55 shadow=12:95835634df888e55 indirect=12:95835634df888e55 +geom 5: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=12:26e126fb8d08607d camera=12:26e126fb8d08607d shadow=12:26e126fb8d08607d indirect=12:26e126fb8d08607d +geom 6: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=4:d3ae5d8c61eeefd5 camera=4:d3ae5d8c61eeefd5 shadow=4:d3ae5d8c61eeefd5 indirect=4:d3ae5d8c61eeefd5 +geom 7: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:02dee92ba923d022 camera=2:02dee92ba923d022 shadow=2:02dee92ba923d022 indirect=2:02dee92ba923d022 +geom 8: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:d420bef838b31092 camera=2:d420bef838b31092 shadow=2:d420bef838b31092 indirect=2:d420bef838b31092 +geom 9: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=128:7e7f92bf6cf1e8e1 camera=128:7e7f92bf6cf1e8e1 shadow=128:7e7f92bf6cf1e8e1 indirect=128:7e7f92bf6cf1e8e1 +geom 10: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:5fd3af8a8974e005 camera=2:5fd3af8a8974e005 shadow=2:5fd3af8a8974e005 indirect=2:5fd3af8a8974e005 +geom 11: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:9626b0f2f3e041c5 camera=2:9626b0f2f3e041c5 shadow=2:9626b0f2f3e041c5 indirect=2:9626b0f2f3e041c5 +geom 12: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=12:65eff1dac76e16e5 camera=12:65eff1dac76e16e5 shadow=12:65eff1dac76e16e5 indirect=12:65eff1dac76e16e5 +geom 13: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=12:c5bbf2f135b5e22b camera=12:c5bbf2f135b5e22b shadow=12:c5bbf2f135b5e22b indirect=12:c5bbf2f135b5e22b +geom 14: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:77f8032df1a5e1f5 camera=2:77f8032df1a5e1f5 shadow=2:77f8032df1a5e1f5 indirect=2:77f8032df1a5e1f5 +provenance arc source: /Crate +provenance arc source: /Crate/geo +provenance arc source: /_Cube +provenance light /World/Sky: LightOrigin { index: 0, geoms: 14..14 } +provenance geometry 0..1: /World/pebble/geo +provenance geometry 1..2: /World/away/geo +provenance geometry 2..3: /World/box/geo +provenance geometry 3..4: /World/sunk/geo +provenance geometry 4..5: /World/rock/geo +provenance geometry 5..6: /World/vase/geo +provenance geometry 6..7: /World/steps/geo +provenance geometry 7..8: /World/field/geo +provenance geometry 8..9: /World/slope/geo +provenance geometry 9..10: /World/terrain/geo +provenance geometry 10..11: /World/shelf/geo +provenance geometry 11..12: /World/floor/geo +provenance geometry 12..13: /World/inst +provenance geometry 13..14: /World/crate/geo +provenance geometry 14..15: /World/table/geo +provenance mesh: MeshOrigin { geom_id: 0, slot: 0, baked: false, moving: false } +provenance mesh: MeshOrigin { geom_id: 1, slot: 0, baked: false, moving: false } +provenance mesh: MeshOrigin { geom_id: 2, slot: 0, baked: false, moving: false } +provenance mesh: MeshOrigin { geom_id: 3, slot: 0, baked: false, moving: false } +provenance mesh: MeshOrigin { geom_id: 4, slot: 1, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 5, slot: 2, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 6, slot: 3, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 7, slot: 4, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 8, slot: 5, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 9, slot: 6, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 10, slot: 7, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 11, slot: 8, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 13, slot: 0, baked: false, moving: false } +provenance mesh: MeshOrigin { geom_id: 14, slot: 9, baked: true, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 2634041098053373584, n_points: 8, n_indices: 24, n_uvs: None, smooth: true, material: 0 }), placements: 5, shared: true, displaced: false } +provenance mesh slot 1: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 14470132405950877311, n_points: 8, n_indices: 24, n_uvs: None, smooth: true, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 2: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 1206830347127950734, n_points: 8, n_indices: 24, n_uvs: None, smooth: true, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 3: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 9519870911682368984, n_points: 6, n_indices: 8, n_uvs: None, smooth: true, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 4: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 1341889141698287293, n_points: 4, n_indices: 4, n_uvs: None, smooth: true, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 5: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 1313731086437247865, n_points: 4, n_indices: 4, n_uvs: None, smooth: true, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 6: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 15760070156626746114, n_points: 81, n_indices: 256, n_uvs: None, smooth: true, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 7: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 1050066994217133652, n_points: 4, n_indices: 4, n_uvs: None, smooth: true, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 8: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 14002714535549629103, n_points: 4, n_indices: 4, n_uvs: None, smooth: true, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 9: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 14095911038168715313, n_points: 4, n_indices: 4, n_uvs: None, smooth: true, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: true }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/World/Cam"), cameras: ["/World/Cam"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/World/Cam"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/placed_usda-97fbc0f3fbe2c018-1.image b/crates/crust-core/tests/data/import_baselines/placed_usda-97fbc0f3fbe2c018-1.image new file mode 100644 index 000000000..9c00d41e4 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/placed_usda-97fbc0f3fbe2c018-1.image @@ -0,0 +1 @@ +48x32 16spp clamp-off d07945c7d875794f diff --git a/crates/crust-core/tests/data/import_baselines/placed_usda-b9e166293d4eb014-1.digest b/crates/crust-core/tests/data/import_baselines/placed_usda-b9e166293d4eb014-1.digest new file mode 100644 index 000000000..39ac096fd --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/placed_usda-b9e166293d4eb014-1.digest @@ -0,0 +1,78 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/World/Cam") +camera: Camera { origin: Vec3A(0.0, 4.0, 14.0), lower_left_corner: Vec3A(-6.371167, -0.2474451, 4.0), horizontal: Vec3A(12.742334, 0.0, 0.0), vertical: Vec3A(0.0, 8.49489, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: Some("/Render/settings") +settings: RenderSettings { samples_per_pixel: 128, max_depth: 3, width: 48, height: 32, region: PixelRect { x0: 0, y0: 0, x1: 48, y1: 32 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 18.0, aperture: [20.955, 15.2908], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 10.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/placed.usda", "$DIR/stage.usda", "$DIR/table.usda"], invisible_overrides: Some(0) } +layer: $DIR/crate.usda +layer: $DIR/placed.usda +layer: $DIR/stage.usda +layer: $DIR/table.usda +lights: 1 +light 0: dome name Some("/World/Sky") lpe None pmf 1.0 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 15 geometries, PrimitiveBreakdown { triangles: 166, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 6 } top level, PrimitiveBreakdown { triangles: 178, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 6 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=12:d69dc8407e39c57d camera=12:d69dc8407e39c57d shadow=12:d69dc8407e39c57d indirect=12:d69dc8407e39c57d +geom 1: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=12:108ece7556e2045d camera=12:108ece7556e2045d shadow=12:108ece7556e2045d indirect=12:108ece7556e2045d +geom 2: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=12:b6f2f6b932607ce5 camera=12:b6f2f6b932607ce5 shadow=12:b6f2f6b932607ce5 indirect=12:b6f2f6b932607ce5 +geom 3: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=12:18f7f442a8f08005 camera=12:18f7f442a8f08005 shadow=12:18f7f442a8f08005 indirect=12:18f7f442a8f08005 +geom 4: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=12:95835634df888e55 camera=12:95835634df888e55 shadow=12:95835634df888e55 indirect=12:95835634df888e55 +geom 5: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=12:26e126fb8d08607d camera=12:26e126fb8d08607d shadow=12:26e126fb8d08607d indirect=12:26e126fb8d08607d +geom 6: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=4:d3ae5d8c61eeefd5 camera=4:d3ae5d8c61eeefd5 shadow=4:d3ae5d8c61eeefd5 indirect=4:d3ae5d8c61eeefd5 +geom 7: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:02dee92ba923d022 camera=2:02dee92ba923d022 shadow=2:02dee92ba923d022 indirect=2:02dee92ba923d022 +geom 8: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:d420bef838b31092 camera=2:d420bef838b31092 shadow=2:d420bef838b31092 indirect=2:d420bef838b31092 +geom 9: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=128:7e7f92bf6cf1e8e1 camera=128:7e7f92bf6cf1e8e1 shadow=128:7e7f92bf6cf1e8e1 indirect=128:7e7f92bf6cf1e8e1 +geom 10: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:5fd3af8a8974e005 camera=2:5fd3af8a8974e005 shadow=2:5fd3af8a8974e005 indirect=2:5fd3af8a8974e005 +geom 11: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:9626b0f2f3e041c5 camera=2:9626b0f2f3e041c5 shadow=2:9626b0f2f3e041c5 indirect=2:9626b0f2f3e041c5 +geom 12: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=12:65eff1dac76e16e5 camera=12:65eff1dac76e16e5 shadow=12:65eff1dac76e16e5 indirect=12:65eff1dac76e16e5 +geom 13: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=12:c5bbf2f135b5e22b camera=12:c5bbf2f135b5e22b shadow=12:c5bbf2f135b5e22b indirect=12:c5bbf2f135b5e22b +geom 14: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:77f8032df1a5e1f5 camera=2:77f8032df1a5e1f5 shadow=2:77f8032df1a5e1f5 indirect=2:77f8032df1a5e1f5 +provenance arc source: /Crate +provenance arc source: /Crate/geo +provenance arc source: /_Cube +provenance light /World/Sky: LightOrigin { index: 0, geoms: 14..14 } +provenance geometry 0..1: /World/pebble/geo +provenance geometry 1..2: /World/away/geo +provenance geometry 2..3: /World/box/geo +provenance geometry 3..4: /World/sunk/geo +provenance geometry 4..5: /World/rock/geo +provenance geometry 5..6: /World/vase/geo +provenance geometry 6..7: /World/steps/geo +provenance geometry 7..8: /World/field/geo +provenance geometry 8..9: /World/slope/geo +provenance geometry 9..10: /World/terrain/geo +provenance geometry 10..11: /World/shelf/geo +provenance geometry 11..12: /World/floor/geo +provenance geometry 12..13: /World/inst +provenance geometry 13..14: /World/crate/geo +provenance geometry 14..15: /World/table/geo +provenance mesh: MeshOrigin { geom_id: 0, slot: 0, baked: false, moving: false } +provenance mesh: MeshOrigin { geom_id: 1, slot: 0, baked: false, moving: false } +provenance mesh: MeshOrigin { geom_id: 2, slot: 0, baked: false, moving: false } +provenance mesh: MeshOrigin { geom_id: 3, slot: 0, baked: false, moving: false } +provenance mesh: MeshOrigin { geom_id: 4, slot: 1, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 5, slot: 2, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 6, slot: 3, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 7, slot: 4, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 8, slot: 5, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 9, slot: 6, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 10, slot: 7, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 11, slot: 8, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 13, slot: 0, baked: false, moving: false } +provenance mesh: MeshOrigin { geom_id: 14, slot: 9, baked: true, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 2634041098053373584, n_points: 8, n_indices: 24, n_uvs: None, smooth: true, material: 0 }), placements: 5, shared: true, displaced: false } +provenance mesh slot 1: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 14470132405950877311, n_points: 8, n_indices: 24, n_uvs: None, smooth: true, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 2: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 1206830347127950734, n_points: 8, n_indices: 24, n_uvs: None, smooth: true, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 3: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 9519870911682368984, n_points: 6, n_indices: 8, n_uvs: None, smooth: true, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 4: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 1341889141698287293, n_points: 4, n_indices: 4, n_uvs: None, smooth: true, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 5: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 1313731086437247865, n_points: 4, n_indices: 4, n_uvs: None, smooth: true, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 6: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 15760070156626746114, n_points: 81, n_indices: 256, n_uvs: None, smooth: true, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 7: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 1050066994217133652, n_points: 4, n_indices: 4, n_uvs: None, smooth: true, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 8: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 14002714535549629103, n_points: 4, n_indices: 4, n_uvs: None, smooth: true, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 9: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 14095911038168715313, n_points: 4, n_indices: 4, n_uvs: None, smooth: true, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: true }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/World/Cam"), cameras: ["/World/Cam"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/World/Cam"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/placed_usda-b9e166293d4eb014-1.image b/crates/crust-core/tests/data/import_baselines/placed_usda-b9e166293d4eb014-1.image new file mode 100644 index 000000000..9c00d41e4 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/placed_usda-b9e166293d4eb014-1.image @@ -0,0 +1 @@ +48x32 16spp clamp-off d07945c7d875794f diff --git a/crates/crust-core/tests/data/import_baselines/placed_usda-c1f420d2f8074d9e-1.digest b/crates/crust-core/tests/data/import_baselines/placed_usda-c1f420d2f8074d9e-1.digest new file mode 100644 index 000000000..39ac096fd --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/placed_usda-c1f420d2f8074d9e-1.digest @@ -0,0 +1,78 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/World/Cam") +camera: Camera { origin: Vec3A(0.0, 4.0, 14.0), lower_left_corner: Vec3A(-6.371167, -0.2474451, 4.0), horizontal: Vec3A(12.742334, 0.0, 0.0), vertical: Vec3A(0.0, 8.49489, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: Some("/Render/settings") +settings: RenderSettings { samples_per_pixel: 128, max_depth: 3, width: 48, height: 32, region: PixelRect { x0: 0, y0: 0, x1: 48, y1: 32 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 18.0, aperture: [20.955, 15.2908], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 10.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/placed.usda", "$DIR/stage.usda", "$DIR/table.usda"], invisible_overrides: Some(0) } +layer: $DIR/crate.usda +layer: $DIR/placed.usda +layer: $DIR/stage.usda +layer: $DIR/table.usda +lights: 1 +light 0: dome name Some("/World/Sky") lpe None pmf 1.0 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 15 geometries, PrimitiveBreakdown { triangles: 166, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 6 } top level, PrimitiveBreakdown { triangles: 178, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 6 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=12:d69dc8407e39c57d camera=12:d69dc8407e39c57d shadow=12:d69dc8407e39c57d indirect=12:d69dc8407e39c57d +geom 1: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=12:108ece7556e2045d camera=12:108ece7556e2045d shadow=12:108ece7556e2045d indirect=12:108ece7556e2045d +geom 2: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=12:b6f2f6b932607ce5 camera=12:b6f2f6b932607ce5 shadow=12:b6f2f6b932607ce5 indirect=12:b6f2f6b932607ce5 +geom 3: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=12:18f7f442a8f08005 camera=12:18f7f442a8f08005 shadow=12:18f7f442a8f08005 indirect=12:18f7f442a8f08005 +geom 4: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=12:95835634df888e55 camera=12:95835634df888e55 shadow=12:95835634df888e55 indirect=12:95835634df888e55 +geom 5: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=12:26e126fb8d08607d camera=12:26e126fb8d08607d shadow=12:26e126fb8d08607d indirect=12:26e126fb8d08607d +geom 6: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=4:d3ae5d8c61eeefd5 camera=4:d3ae5d8c61eeefd5 shadow=4:d3ae5d8c61eeefd5 indirect=4:d3ae5d8c61eeefd5 +geom 7: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:02dee92ba923d022 camera=2:02dee92ba923d022 shadow=2:02dee92ba923d022 indirect=2:02dee92ba923d022 +geom 8: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:d420bef838b31092 camera=2:d420bef838b31092 shadow=2:d420bef838b31092 indirect=2:d420bef838b31092 +geom 9: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=128:7e7f92bf6cf1e8e1 camera=128:7e7f92bf6cf1e8e1 shadow=128:7e7f92bf6cf1e8e1 indirect=128:7e7f92bf6cf1e8e1 +geom 10: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:5fd3af8a8974e005 camera=2:5fd3af8a8974e005 shadow=2:5fd3af8a8974e005 indirect=2:5fd3af8a8974e005 +geom 11: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:9626b0f2f3e041c5 camera=2:9626b0f2f3e041c5 shadow=2:9626b0f2f3e041c5 indirect=2:9626b0f2f3e041c5 +geom 12: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=12:65eff1dac76e16e5 camera=12:65eff1dac76e16e5 shadow=12:65eff1dac76e16e5 indirect=12:65eff1dac76e16e5 +geom 13: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=12:c5bbf2f135b5e22b camera=12:c5bbf2f135b5e22b shadow=12:c5bbf2f135b5e22b indirect=12:c5bbf2f135b5e22b +geom 14: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:77f8032df1a5e1f5 camera=2:77f8032df1a5e1f5 shadow=2:77f8032df1a5e1f5 indirect=2:77f8032df1a5e1f5 +provenance arc source: /Crate +provenance arc source: /Crate/geo +provenance arc source: /_Cube +provenance light /World/Sky: LightOrigin { index: 0, geoms: 14..14 } +provenance geometry 0..1: /World/pebble/geo +provenance geometry 1..2: /World/away/geo +provenance geometry 2..3: /World/box/geo +provenance geometry 3..4: /World/sunk/geo +provenance geometry 4..5: /World/rock/geo +provenance geometry 5..6: /World/vase/geo +provenance geometry 6..7: /World/steps/geo +provenance geometry 7..8: /World/field/geo +provenance geometry 8..9: /World/slope/geo +provenance geometry 9..10: /World/terrain/geo +provenance geometry 10..11: /World/shelf/geo +provenance geometry 11..12: /World/floor/geo +provenance geometry 12..13: /World/inst +provenance geometry 13..14: /World/crate/geo +provenance geometry 14..15: /World/table/geo +provenance mesh: MeshOrigin { geom_id: 0, slot: 0, baked: false, moving: false } +provenance mesh: MeshOrigin { geom_id: 1, slot: 0, baked: false, moving: false } +provenance mesh: MeshOrigin { geom_id: 2, slot: 0, baked: false, moving: false } +provenance mesh: MeshOrigin { geom_id: 3, slot: 0, baked: false, moving: false } +provenance mesh: MeshOrigin { geom_id: 4, slot: 1, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 5, slot: 2, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 6, slot: 3, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 7, slot: 4, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 8, slot: 5, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 9, slot: 6, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 10, slot: 7, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 11, slot: 8, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 13, slot: 0, baked: false, moving: false } +provenance mesh: MeshOrigin { geom_id: 14, slot: 9, baked: true, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 2634041098053373584, n_points: 8, n_indices: 24, n_uvs: None, smooth: true, material: 0 }), placements: 5, shared: true, displaced: false } +provenance mesh slot 1: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 14470132405950877311, n_points: 8, n_indices: 24, n_uvs: None, smooth: true, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 2: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 1206830347127950734, n_points: 8, n_indices: 24, n_uvs: None, smooth: true, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 3: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 9519870911682368984, n_points: 6, n_indices: 8, n_uvs: None, smooth: true, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 4: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 1341889141698287293, n_points: 4, n_indices: 4, n_uvs: None, smooth: true, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 5: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 1313731086437247865, n_points: 4, n_indices: 4, n_uvs: None, smooth: true, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 6: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 15760070156626746114, n_points: 81, n_indices: 256, n_uvs: None, smooth: true, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 7: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 1050066994217133652, n_points: 4, n_indices: 4, n_uvs: None, smooth: true, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 8: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 14002714535549629103, n_points: 4, n_indices: 4, n_uvs: None, smooth: true, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 9: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 14095911038168715313, n_points: 4, n_indices: 4, n_uvs: None, smooth: true, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: true }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/World/Cam"), cameras: ["/World/Cam"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/World/Cam"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/placed_usda-c1f420d2f8074d9e-1.image b/crates/crust-core/tests/data/import_baselines/placed_usda-c1f420d2f8074d9e-1.image new file mode 100644 index 000000000..9c00d41e4 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/placed_usda-c1f420d2f8074d9e-1.image @@ -0,0 +1 @@ +48x32 16spp clamp-off d07945c7d875794f diff --git a/crates/crust-core/tests/data/import_baselines/placed_usda-c1f420d2f8074d9e-2.digest b/crates/crust-core/tests/data/import_baselines/placed_usda-c1f420d2f8074d9e-2.digest new file mode 100644 index 000000000..39ac096fd --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/placed_usda-c1f420d2f8074d9e-2.digest @@ -0,0 +1,78 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/World/Cam") +camera: Camera { origin: Vec3A(0.0, 4.0, 14.0), lower_left_corner: Vec3A(-6.371167, -0.2474451, 4.0), horizontal: Vec3A(12.742334, 0.0, 0.0), vertical: Vec3A(0.0, 8.49489, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: Some("/Render/settings") +settings: RenderSettings { samples_per_pixel: 128, max_depth: 3, width: 48, height: 32, region: PixelRect { x0: 0, y0: 0, x1: 48, y1: 32 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 18.0, aperture: [20.955, 15.2908], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 10.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/placed.usda", "$DIR/stage.usda", "$DIR/table.usda"], invisible_overrides: Some(0) } +layer: $DIR/crate.usda +layer: $DIR/placed.usda +layer: $DIR/stage.usda +layer: $DIR/table.usda +lights: 1 +light 0: dome name Some("/World/Sky") lpe None pmf 1.0 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 15 geometries, PrimitiveBreakdown { triangles: 166, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 6 } top level, PrimitiveBreakdown { triangles: 178, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 6 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=12:d69dc8407e39c57d camera=12:d69dc8407e39c57d shadow=12:d69dc8407e39c57d indirect=12:d69dc8407e39c57d +geom 1: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=12:108ece7556e2045d camera=12:108ece7556e2045d shadow=12:108ece7556e2045d indirect=12:108ece7556e2045d +geom 2: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=12:b6f2f6b932607ce5 camera=12:b6f2f6b932607ce5 shadow=12:b6f2f6b932607ce5 indirect=12:b6f2f6b932607ce5 +geom 3: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=12:18f7f442a8f08005 camera=12:18f7f442a8f08005 shadow=12:18f7f442a8f08005 indirect=12:18f7f442a8f08005 +geom 4: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=12:95835634df888e55 camera=12:95835634df888e55 shadow=12:95835634df888e55 indirect=12:95835634df888e55 +geom 5: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=12:26e126fb8d08607d camera=12:26e126fb8d08607d shadow=12:26e126fb8d08607d indirect=12:26e126fb8d08607d +geom 6: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=4:d3ae5d8c61eeefd5 camera=4:d3ae5d8c61eeefd5 shadow=4:d3ae5d8c61eeefd5 indirect=4:d3ae5d8c61eeefd5 +geom 7: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:02dee92ba923d022 camera=2:02dee92ba923d022 shadow=2:02dee92ba923d022 indirect=2:02dee92ba923d022 +geom 8: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:d420bef838b31092 camera=2:d420bef838b31092 shadow=2:d420bef838b31092 indirect=2:d420bef838b31092 +geom 9: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=128:7e7f92bf6cf1e8e1 camera=128:7e7f92bf6cf1e8e1 shadow=128:7e7f92bf6cf1e8e1 indirect=128:7e7f92bf6cf1e8e1 +geom 10: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:5fd3af8a8974e005 camera=2:5fd3af8a8974e005 shadow=2:5fd3af8a8974e005 indirect=2:5fd3af8a8974e005 +geom 11: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:9626b0f2f3e041c5 camera=2:9626b0f2f3e041c5 shadow=2:9626b0f2f3e041c5 indirect=2:9626b0f2f3e041c5 +geom 12: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=12:65eff1dac76e16e5 camera=12:65eff1dac76e16e5 shadow=12:65eff1dac76e16e5 indirect=12:65eff1dac76e16e5 +geom 13: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=12:c5bbf2f135b5e22b camera=12:c5bbf2f135b5e22b shadow=12:c5bbf2f135b5e22b indirect=12:c5bbf2f135b5e22b +geom 14: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:77f8032df1a5e1f5 camera=2:77f8032df1a5e1f5 shadow=2:77f8032df1a5e1f5 indirect=2:77f8032df1a5e1f5 +provenance arc source: /Crate +provenance arc source: /Crate/geo +provenance arc source: /_Cube +provenance light /World/Sky: LightOrigin { index: 0, geoms: 14..14 } +provenance geometry 0..1: /World/pebble/geo +provenance geometry 1..2: /World/away/geo +provenance geometry 2..3: /World/box/geo +provenance geometry 3..4: /World/sunk/geo +provenance geometry 4..5: /World/rock/geo +provenance geometry 5..6: /World/vase/geo +provenance geometry 6..7: /World/steps/geo +provenance geometry 7..8: /World/field/geo +provenance geometry 8..9: /World/slope/geo +provenance geometry 9..10: /World/terrain/geo +provenance geometry 10..11: /World/shelf/geo +provenance geometry 11..12: /World/floor/geo +provenance geometry 12..13: /World/inst +provenance geometry 13..14: /World/crate/geo +provenance geometry 14..15: /World/table/geo +provenance mesh: MeshOrigin { geom_id: 0, slot: 0, baked: false, moving: false } +provenance mesh: MeshOrigin { geom_id: 1, slot: 0, baked: false, moving: false } +provenance mesh: MeshOrigin { geom_id: 2, slot: 0, baked: false, moving: false } +provenance mesh: MeshOrigin { geom_id: 3, slot: 0, baked: false, moving: false } +provenance mesh: MeshOrigin { geom_id: 4, slot: 1, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 5, slot: 2, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 6, slot: 3, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 7, slot: 4, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 8, slot: 5, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 9, slot: 6, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 10, slot: 7, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 11, slot: 8, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 13, slot: 0, baked: false, moving: false } +provenance mesh: MeshOrigin { geom_id: 14, slot: 9, baked: true, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 2634041098053373584, n_points: 8, n_indices: 24, n_uvs: None, smooth: true, material: 0 }), placements: 5, shared: true, displaced: false } +provenance mesh slot 1: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 14470132405950877311, n_points: 8, n_indices: 24, n_uvs: None, smooth: true, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 2: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 1206830347127950734, n_points: 8, n_indices: 24, n_uvs: None, smooth: true, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 3: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 9519870911682368984, n_points: 6, n_indices: 8, n_uvs: None, smooth: true, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 4: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 1341889141698287293, n_points: 4, n_indices: 4, n_uvs: None, smooth: true, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 5: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 1313731086437247865, n_points: 4, n_indices: 4, n_uvs: None, smooth: true, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 6: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 15760070156626746114, n_points: 81, n_indices: 256, n_uvs: None, smooth: true, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 7: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 1050066994217133652, n_points: 4, n_indices: 4, n_uvs: None, smooth: true, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 8: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 14002714535549629103, n_points: 4, n_indices: 4, n_uvs: None, smooth: true, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 9: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 14095911038168715313, n_points: 4, n_indices: 4, n_uvs: None, smooth: true, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: true }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/World/Cam"), cameras: ["/World/Cam"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/World/Cam"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/placed_usda-c1f420d2f8074d9e-2.image b/crates/crust-core/tests/data/import_baselines/placed_usda-c1f420d2f8074d9e-2.image new file mode 100644 index 000000000..9c00d41e4 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/placed_usda-c1f420d2f8074d9e-2.image @@ -0,0 +1 @@ +48x32 16spp clamp-off d07945c7d875794f diff --git a/crates/crust-core/tests/data/import_baselines/placed_usda-c1f420d2f8074d9e-3.digest b/crates/crust-core/tests/data/import_baselines/placed_usda-c1f420d2f8074d9e-3.digest new file mode 100644 index 000000000..39ac096fd --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/placed_usda-c1f420d2f8074d9e-3.digest @@ -0,0 +1,78 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/World/Cam") +camera: Camera { origin: Vec3A(0.0, 4.0, 14.0), lower_left_corner: Vec3A(-6.371167, -0.2474451, 4.0), horizontal: Vec3A(12.742334, 0.0, 0.0), vertical: Vec3A(0.0, 8.49489, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: Some("/Render/settings") +settings: RenderSettings { samples_per_pixel: 128, max_depth: 3, width: 48, height: 32, region: PixelRect { x0: 0, y0: 0, x1: 48, y1: 32 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 18.0, aperture: [20.955, 15.2908], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 10.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/placed.usda", "$DIR/stage.usda", "$DIR/table.usda"], invisible_overrides: Some(0) } +layer: $DIR/crate.usda +layer: $DIR/placed.usda +layer: $DIR/stage.usda +layer: $DIR/table.usda +lights: 1 +light 0: dome name Some("/World/Sky") lpe None pmf 1.0 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 15 geometries, PrimitiveBreakdown { triangles: 166, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 6 } top level, PrimitiveBreakdown { triangles: 178, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 6 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=12:d69dc8407e39c57d camera=12:d69dc8407e39c57d shadow=12:d69dc8407e39c57d indirect=12:d69dc8407e39c57d +geom 1: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=12:108ece7556e2045d camera=12:108ece7556e2045d shadow=12:108ece7556e2045d indirect=12:108ece7556e2045d +geom 2: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=12:b6f2f6b932607ce5 camera=12:b6f2f6b932607ce5 shadow=12:b6f2f6b932607ce5 indirect=12:b6f2f6b932607ce5 +geom 3: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=12:18f7f442a8f08005 camera=12:18f7f442a8f08005 shadow=12:18f7f442a8f08005 indirect=12:18f7f442a8f08005 +geom 4: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=12:95835634df888e55 camera=12:95835634df888e55 shadow=12:95835634df888e55 indirect=12:95835634df888e55 +geom 5: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=12:26e126fb8d08607d camera=12:26e126fb8d08607d shadow=12:26e126fb8d08607d indirect=12:26e126fb8d08607d +geom 6: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=4:d3ae5d8c61eeefd5 camera=4:d3ae5d8c61eeefd5 shadow=4:d3ae5d8c61eeefd5 indirect=4:d3ae5d8c61eeefd5 +geom 7: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:02dee92ba923d022 camera=2:02dee92ba923d022 shadow=2:02dee92ba923d022 indirect=2:02dee92ba923d022 +geom 8: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:d420bef838b31092 camera=2:d420bef838b31092 shadow=2:d420bef838b31092 indirect=2:d420bef838b31092 +geom 9: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=128:7e7f92bf6cf1e8e1 camera=128:7e7f92bf6cf1e8e1 shadow=128:7e7f92bf6cf1e8e1 indirect=128:7e7f92bf6cf1e8e1 +geom 10: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:5fd3af8a8974e005 camera=2:5fd3af8a8974e005 shadow=2:5fd3af8a8974e005 indirect=2:5fd3af8a8974e005 +geom 11: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:9626b0f2f3e041c5 camera=2:9626b0f2f3e041c5 shadow=2:9626b0f2f3e041c5 indirect=2:9626b0f2f3e041c5 +geom 12: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=12:65eff1dac76e16e5 camera=12:65eff1dac76e16e5 shadow=12:65eff1dac76e16e5 indirect=12:65eff1dac76e16e5 +geom 13: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=12:c5bbf2f135b5e22b camera=12:c5bbf2f135b5e22b shadow=12:c5bbf2f135b5e22b indirect=12:c5bbf2f135b5e22b +geom 14: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:77f8032df1a5e1f5 camera=2:77f8032df1a5e1f5 shadow=2:77f8032df1a5e1f5 indirect=2:77f8032df1a5e1f5 +provenance arc source: /Crate +provenance arc source: /Crate/geo +provenance arc source: /_Cube +provenance light /World/Sky: LightOrigin { index: 0, geoms: 14..14 } +provenance geometry 0..1: /World/pebble/geo +provenance geometry 1..2: /World/away/geo +provenance geometry 2..3: /World/box/geo +provenance geometry 3..4: /World/sunk/geo +provenance geometry 4..5: /World/rock/geo +provenance geometry 5..6: /World/vase/geo +provenance geometry 6..7: /World/steps/geo +provenance geometry 7..8: /World/field/geo +provenance geometry 8..9: /World/slope/geo +provenance geometry 9..10: /World/terrain/geo +provenance geometry 10..11: /World/shelf/geo +provenance geometry 11..12: /World/floor/geo +provenance geometry 12..13: /World/inst +provenance geometry 13..14: /World/crate/geo +provenance geometry 14..15: /World/table/geo +provenance mesh: MeshOrigin { geom_id: 0, slot: 0, baked: false, moving: false } +provenance mesh: MeshOrigin { geom_id: 1, slot: 0, baked: false, moving: false } +provenance mesh: MeshOrigin { geom_id: 2, slot: 0, baked: false, moving: false } +provenance mesh: MeshOrigin { geom_id: 3, slot: 0, baked: false, moving: false } +provenance mesh: MeshOrigin { geom_id: 4, slot: 1, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 5, slot: 2, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 6, slot: 3, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 7, slot: 4, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 8, slot: 5, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 9, slot: 6, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 10, slot: 7, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 11, slot: 8, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 13, slot: 0, baked: false, moving: false } +provenance mesh: MeshOrigin { geom_id: 14, slot: 9, baked: true, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 2634041098053373584, n_points: 8, n_indices: 24, n_uvs: None, smooth: true, material: 0 }), placements: 5, shared: true, displaced: false } +provenance mesh slot 1: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 14470132405950877311, n_points: 8, n_indices: 24, n_uvs: None, smooth: true, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 2: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 1206830347127950734, n_points: 8, n_indices: 24, n_uvs: None, smooth: true, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 3: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 9519870911682368984, n_points: 6, n_indices: 8, n_uvs: None, smooth: true, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 4: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 1341889141698287293, n_points: 4, n_indices: 4, n_uvs: None, smooth: true, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 5: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 1313731086437247865, n_points: 4, n_indices: 4, n_uvs: None, smooth: true, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 6: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 15760070156626746114, n_points: 81, n_indices: 256, n_uvs: None, smooth: true, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 7: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 1050066994217133652, n_points: 4, n_indices: 4, n_uvs: None, smooth: true, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 8: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 14002714535549629103, n_points: 4, n_indices: 4, n_uvs: None, smooth: true, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 9: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 14095911038168715313, n_points: 4, n_indices: 4, n_uvs: None, smooth: true, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: true }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/World/Cam"), cameras: ["/World/Cam"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/World/Cam"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/placed_usda-c1f420d2f8074d9e-3.image b/crates/crust-core/tests/data/import_baselines/placed_usda-c1f420d2f8074d9e-3.image new file mode 100644 index 000000000..9c00d41e4 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/placed_usda-c1f420d2f8074d9e-3.image @@ -0,0 +1 @@ +48x32 16spp clamp-off d07945c7d875794f diff --git a/crates/crust-core/tests/data/import_baselines/placed_usda-c316df83883a2080-1.digest b/crates/crust-core/tests/data/import_baselines/placed_usda-c316df83883a2080-1.digest new file mode 100644 index 000000000..39ac096fd --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/placed_usda-c316df83883a2080-1.digest @@ -0,0 +1,78 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/World/Cam") +camera: Camera { origin: Vec3A(0.0, 4.0, 14.0), lower_left_corner: Vec3A(-6.371167, -0.2474451, 4.0), horizontal: Vec3A(12.742334, 0.0, 0.0), vertical: Vec3A(0.0, 8.49489, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: Some("/Render/settings") +settings: RenderSettings { samples_per_pixel: 128, max_depth: 3, width: 48, height: 32, region: PixelRect { x0: 0, y0: 0, x1: 48, y1: 32 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 18.0, aperture: [20.955, 15.2908], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 10.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/placed.usda", "$DIR/stage.usda", "$DIR/table.usda"], invisible_overrides: Some(0) } +layer: $DIR/crate.usda +layer: $DIR/placed.usda +layer: $DIR/stage.usda +layer: $DIR/table.usda +lights: 1 +light 0: dome name Some("/World/Sky") lpe None pmf 1.0 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 15 geometries, PrimitiveBreakdown { triangles: 166, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 6 } top level, PrimitiveBreakdown { triangles: 178, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 6 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=12:d69dc8407e39c57d camera=12:d69dc8407e39c57d shadow=12:d69dc8407e39c57d indirect=12:d69dc8407e39c57d +geom 1: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=12:108ece7556e2045d camera=12:108ece7556e2045d shadow=12:108ece7556e2045d indirect=12:108ece7556e2045d +geom 2: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=12:b6f2f6b932607ce5 camera=12:b6f2f6b932607ce5 shadow=12:b6f2f6b932607ce5 indirect=12:b6f2f6b932607ce5 +geom 3: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=12:18f7f442a8f08005 camera=12:18f7f442a8f08005 shadow=12:18f7f442a8f08005 indirect=12:18f7f442a8f08005 +geom 4: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=12:95835634df888e55 camera=12:95835634df888e55 shadow=12:95835634df888e55 indirect=12:95835634df888e55 +geom 5: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=12:26e126fb8d08607d camera=12:26e126fb8d08607d shadow=12:26e126fb8d08607d indirect=12:26e126fb8d08607d +geom 6: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=4:d3ae5d8c61eeefd5 camera=4:d3ae5d8c61eeefd5 shadow=4:d3ae5d8c61eeefd5 indirect=4:d3ae5d8c61eeefd5 +geom 7: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:02dee92ba923d022 camera=2:02dee92ba923d022 shadow=2:02dee92ba923d022 indirect=2:02dee92ba923d022 +geom 8: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:d420bef838b31092 camera=2:d420bef838b31092 shadow=2:d420bef838b31092 indirect=2:d420bef838b31092 +geom 9: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=128:7e7f92bf6cf1e8e1 camera=128:7e7f92bf6cf1e8e1 shadow=128:7e7f92bf6cf1e8e1 indirect=128:7e7f92bf6cf1e8e1 +geom 10: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:5fd3af8a8974e005 camera=2:5fd3af8a8974e005 shadow=2:5fd3af8a8974e005 indirect=2:5fd3af8a8974e005 +geom 11: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:9626b0f2f3e041c5 camera=2:9626b0f2f3e041c5 shadow=2:9626b0f2f3e041c5 indirect=2:9626b0f2f3e041c5 +geom 12: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=12:65eff1dac76e16e5 camera=12:65eff1dac76e16e5 shadow=12:65eff1dac76e16e5 indirect=12:65eff1dac76e16e5 +geom 13: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=12:c5bbf2f135b5e22b camera=12:c5bbf2f135b5e22b shadow=12:c5bbf2f135b5e22b indirect=12:c5bbf2f135b5e22b +geom 14: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:77f8032df1a5e1f5 camera=2:77f8032df1a5e1f5 shadow=2:77f8032df1a5e1f5 indirect=2:77f8032df1a5e1f5 +provenance arc source: /Crate +provenance arc source: /Crate/geo +provenance arc source: /_Cube +provenance light /World/Sky: LightOrigin { index: 0, geoms: 14..14 } +provenance geometry 0..1: /World/pebble/geo +provenance geometry 1..2: /World/away/geo +provenance geometry 2..3: /World/box/geo +provenance geometry 3..4: /World/sunk/geo +provenance geometry 4..5: /World/rock/geo +provenance geometry 5..6: /World/vase/geo +provenance geometry 6..7: /World/steps/geo +provenance geometry 7..8: /World/field/geo +provenance geometry 8..9: /World/slope/geo +provenance geometry 9..10: /World/terrain/geo +provenance geometry 10..11: /World/shelf/geo +provenance geometry 11..12: /World/floor/geo +provenance geometry 12..13: /World/inst +provenance geometry 13..14: /World/crate/geo +provenance geometry 14..15: /World/table/geo +provenance mesh: MeshOrigin { geom_id: 0, slot: 0, baked: false, moving: false } +provenance mesh: MeshOrigin { geom_id: 1, slot: 0, baked: false, moving: false } +provenance mesh: MeshOrigin { geom_id: 2, slot: 0, baked: false, moving: false } +provenance mesh: MeshOrigin { geom_id: 3, slot: 0, baked: false, moving: false } +provenance mesh: MeshOrigin { geom_id: 4, slot: 1, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 5, slot: 2, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 6, slot: 3, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 7, slot: 4, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 8, slot: 5, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 9, slot: 6, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 10, slot: 7, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 11, slot: 8, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 13, slot: 0, baked: false, moving: false } +provenance mesh: MeshOrigin { geom_id: 14, slot: 9, baked: true, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 2634041098053373584, n_points: 8, n_indices: 24, n_uvs: None, smooth: true, material: 0 }), placements: 5, shared: true, displaced: false } +provenance mesh slot 1: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 14470132405950877311, n_points: 8, n_indices: 24, n_uvs: None, smooth: true, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 2: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 1206830347127950734, n_points: 8, n_indices: 24, n_uvs: None, smooth: true, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 3: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 9519870911682368984, n_points: 6, n_indices: 8, n_uvs: None, smooth: true, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 4: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 1341889141698287293, n_points: 4, n_indices: 4, n_uvs: None, smooth: true, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 5: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 1313731086437247865, n_points: 4, n_indices: 4, n_uvs: None, smooth: true, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 6: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 15760070156626746114, n_points: 81, n_indices: 256, n_uvs: None, smooth: true, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 7: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 1050066994217133652, n_points: 4, n_indices: 4, n_uvs: None, smooth: true, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 8: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 14002714535549629103, n_points: 4, n_indices: 4, n_uvs: None, smooth: true, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 9: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 14095911038168715313, n_points: 4, n_indices: 4, n_uvs: None, smooth: true, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: true }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/World/Cam"), cameras: ["/World/Cam"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/World/Cam"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/placed_usda-c316df83883a2080-1.image b/crates/crust-core/tests/data/import_baselines/placed_usda-c316df83883a2080-1.image new file mode 100644 index 000000000..9c00d41e4 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/placed_usda-c316df83883a2080-1.image @@ -0,0 +1 @@ +48x32 16spp clamp-off d07945c7d875794f diff --git a/crates/crust-core/tests/data/import_baselines/placed_usda-d17077acbffaca45-1.digest b/crates/crust-core/tests/data/import_baselines/placed_usda-d17077acbffaca45-1.digest new file mode 100644 index 000000000..39ac096fd --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/placed_usda-d17077acbffaca45-1.digest @@ -0,0 +1,78 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/World/Cam") +camera: Camera { origin: Vec3A(0.0, 4.0, 14.0), lower_left_corner: Vec3A(-6.371167, -0.2474451, 4.0), horizontal: Vec3A(12.742334, 0.0, 0.0), vertical: Vec3A(0.0, 8.49489, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: Some("/Render/settings") +settings: RenderSettings { samples_per_pixel: 128, max_depth: 3, width: 48, height: 32, region: PixelRect { x0: 0, y0: 0, x1: 48, y1: 32 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 18.0, aperture: [20.955, 15.2908], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 10.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/placed.usda", "$DIR/stage.usda", "$DIR/table.usda"], invisible_overrides: Some(0) } +layer: $DIR/crate.usda +layer: $DIR/placed.usda +layer: $DIR/stage.usda +layer: $DIR/table.usda +lights: 1 +light 0: dome name Some("/World/Sky") lpe None pmf 1.0 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 15 geometries, PrimitiveBreakdown { triangles: 166, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 6 } top level, PrimitiveBreakdown { triangles: 178, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 6 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=12:d69dc8407e39c57d camera=12:d69dc8407e39c57d shadow=12:d69dc8407e39c57d indirect=12:d69dc8407e39c57d +geom 1: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=12:108ece7556e2045d camera=12:108ece7556e2045d shadow=12:108ece7556e2045d indirect=12:108ece7556e2045d +geom 2: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=12:b6f2f6b932607ce5 camera=12:b6f2f6b932607ce5 shadow=12:b6f2f6b932607ce5 indirect=12:b6f2f6b932607ce5 +geom 3: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=12:18f7f442a8f08005 camera=12:18f7f442a8f08005 shadow=12:18f7f442a8f08005 indirect=12:18f7f442a8f08005 +geom 4: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=12:95835634df888e55 camera=12:95835634df888e55 shadow=12:95835634df888e55 indirect=12:95835634df888e55 +geom 5: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=12:26e126fb8d08607d camera=12:26e126fb8d08607d shadow=12:26e126fb8d08607d indirect=12:26e126fb8d08607d +geom 6: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=4:d3ae5d8c61eeefd5 camera=4:d3ae5d8c61eeefd5 shadow=4:d3ae5d8c61eeefd5 indirect=4:d3ae5d8c61eeefd5 +geom 7: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:02dee92ba923d022 camera=2:02dee92ba923d022 shadow=2:02dee92ba923d022 indirect=2:02dee92ba923d022 +geom 8: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:d420bef838b31092 camera=2:d420bef838b31092 shadow=2:d420bef838b31092 indirect=2:d420bef838b31092 +geom 9: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=128:7e7f92bf6cf1e8e1 camera=128:7e7f92bf6cf1e8e1 shadow=128:7e7f92bf6cf1e8e1 indirect=128:7e7f92bf6cf1e8e1 +geom 10: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:5fd3af8a8974e005 camera=2:5fd3af8a8974e005 shadow=2:5fd3af8a8974e005 indirect=2:5fd3af8a8974e005 +geom 11: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:9626b0f2f3e041c5 camera=2:9626b0f2f3e041c5 shadow=2:9626b0f2f3e041c5 indirect=2:9626b0f2f3e041c5 +geom 12: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=12:65eff1dac76e16e5 camera=12:65eff1dac76e16e5 shadow=12:65eff1dac76e16e5 indirect=12:65eff1dac76e16e5 +geom 13: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=12:c5bbf2f135b5e22b camera=12:c5bbf2f135b5e22b shadow=12:c5bbf2f135b5e22b indirect=12:c5bbf2f135b5e22b +geom 14: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:77f8032df1a5e1f5 camera=2:77f8032df1a5e1f5 shadow=2:77f8032df1a5e1f5 indirect=2:77f8032df1a5e1f5 +provenance arc source: /Crate +provenance arc source: /Crate/geo +provenance arc source: /_Cube +provenance light /World/Sky: LightOrigin { index: 0, geoms: 14..14 } +provenance geometry 0..1: /World/pebble/geo +provenance geometry 1..2: /World/away/geo +provenance geometry 2..3: /World/box/geo +provenance geometry 3..4: /World/sunk/geo +provenance geometry 4..5: /World/rock/geo +provenance geometry 5..6: /World/vase/geo +provenance geometry 6..7: /World/steps/geo +provenance geometry 7..8: /World/field/geo +provenance geometry 8..9: /World/slope/geo +provenance geometry 9..10: /World/terrain/geo +provenance geometry 10..11: /World/shelf/geo +provenance geometry 11..12: /World/floor/geo +provenance geometry 12..13: /World/inst +provenance geometry 13..14: /World/crate/geo +provenance geometry 14..15: /World/table/geo +provenance mesh: MeshOrigin { geom_id: 0, slot: 0, baked: false, moving: false } +provenance mesh: MeshOrigin { geom_id: 1, slot: 0, baked: false, moving: false } +provenance mesh: MeshOrigin { geom_id: 2, slot: 0, baked: false, moving: false } +provenance mesh: MeshOrigin { geom_id: 3, slot: 0, baked: false, moving: false } +provenance mesh: MeshOrigin { geom_id: 4, slot: 1, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 5, slot: 2, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 6, slot: 3, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 7, slot: 4, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 8, slot: 5, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 9, slot: 6, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 10, slot: 7, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 11, slot: 8, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 13, slot: 0, baked: false, moving: false } +provenance mesh: MeshOrigin { geom_id: 14, slot: 9, baked: true, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 2634041098053373584, n_points: 8, n_indices: 24, n_uvs: None, smooth: true, material: 0 }), placements: 5, shared: true, displaced: false } +provenance mesh slot 1: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 14470132405950877311, n_points: 8, n_indices: 24, n_uvs: None, smooth: true, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 2: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 1206830347127950734, n_points: 8, n_indices: 24, n_uvs: None, smooth: true, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 3: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 9519870911682368984, n_points: 6, n_indices: 8, n_uvs: None, smooth: true, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 4: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 1341889141698287293, n_points: 4, n_indices: 4, n_uvs: None, smooth: true, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 5: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 1313731086437247865, n_points: 4, n_indices: 4, n_uvs: None, smooth: true, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 6: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 15760070156626746114, n_points: 81, n_indices: 256, n_uvs: None, smooth: true, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 7: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 1050066994217133652, n_points: 4, n_indices: 4, n_uvs: None, smooth: true, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 8: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 14002714535549629103, n_points: 4, n_indices: 4, n_uvs: None, smooth: true, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 9: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 14095911038168715313, n_points: 4, n_indices: 4, n_uvs: None, smooth: true, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: true }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/World/Cam"), cameras: ["/World/Cam"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/World/Cam"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/placed_usda-d17077acbffaca45-1.image b/crates/crust-core/tests/data/import_baselines/placed_usda-d17077acbffaca45-1.image new file mode 100644 index 000000000..9c00d41e4 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/placed_usda-d17077acbffaca45-1.image @@ -0,0 +1 @@ +48x32 16spp clamp-off d07945c7d875794f diff --git a/crates/crust-core/tests/data/import_baselines/placed_usda-d4ecee5c0312cf96-1.digest b/crates/crust-core/tests/data/import_baselines/placed_usda-d4ecee5c0312cf96-1.digest new file mode 100644 index 000000000..39ac096fd --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/placed_usda-d4ecee5c0312cf96-1.digest @@ -0,0 +1,78 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/World/Cam") +camera: Camera { origin: Vec3A(0.0, 4.0, 14.0), lower_left_corner: Vec3A(-6.371167, -0.2474451, 4.0), horizontal: Vec3A(12.742334, 0.0, 0.0), vertical: Vec3A(0.0, 8.49489, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: Some("/Render/settings") +settings: RenderSettings { samples_per_pixel: 128, max_depth: 3, width: 48, height: 32, region: PixelRect { x0: 0, y0: 0, x1: 48, y1: 32 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 18.0, aperture: [20.955, 15.2908], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 10.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/placed.usda", "$DIR/stage.usda", "$DIR/table.usda"], invisible_overrides: Some(0) } +layer: $DIR/crate.usda +layer: $DIR/placed.usda +layer: $DIR/stage.usda +layer: $DIR/table.usda +lights: 1 +light 0: dome name Some("/World/Sky") lpe None pmf 1.0 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 15 geometries, PrimitiveBreakdown { triangles: 166, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 6 } top level, PrimitiveBreakdown { triangles: 178, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 6 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=12:d69dc8407e39c57d camera=12:d69dc8407e39c57d shadow=12:d69dc8407e39c57d indirect=12:d69dc8407e39c57d +geom 1: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=12:108ece7556e2045d camera=12:108ece7556e2045d shadow=12:108ece7556e2045d indirect=12:108ece7556e2045d +geom 2: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=12:b6f2f6b932607ce5 camera=12:b6f2f6b932607ce5 shadow=12:b6f2f6b932607ce5 indirect=12:b6f2f6b932607ce5 +geom 3: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=12:18f7f442a8f08005 camera=12:18f7f442a8f08005 shadow=12:18f7f442a8f08005 indirect=12:18f7f442a8f08005 +geom 4: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=12:95835634df888e55 camera=12:95835634df888e55 shadow=12:95835634df888e55 indirect=12:95835634df888e55 +geom 5: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=12:26e126fb8d08607d camera=12:26e126fb8d08607d shadow=12:26e126fb8d08607d indirect=12:26e126fb8d08607d +geom 6: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=4:d3ae5d8c61eeefd5 camera=4:d3ae5d8c61eeefd5 shadow=4:d3ae5d8c61eeefd5 indirect=4:d3ae5d8c61eeefd5 +geom 7: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:02dee92ba923d022 camera=2:02dee92ba923d022 shadow=2:02dee92ba923d022 indirect=2:02dee92ba923d022 +geom 8: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:d420bef838b31092 camera=2:d420bef838b31092 shadow=2:d420bef838b31092 indirect=2:d420bef838b31092 +geom 9: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=128:7e7f92bf6cf1e8e1 camera=128:7e7f92bf6cf1e8e1 shadow=128:7e7f92bf6cf1e8e1 indirect=128:7e7f92bf6cf1e8e1 +geom 10: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:5fd3af8a8974e005 camera=2:5fd3af8a8974e005 shadow=2:5fd3af8a8974e005 indirect=2:5fd3af8a8974e005 +geom 11: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:9626b0f2f3e041c5 camera=2:9626b0f2f3e041c5 shadow=2:9626b0f2f3e041c5 indirect=2:9626b0f2f3e041c5 +geom 12: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=12:65eff1dac76e16e5 camera=12:65eff1dac76e16e5 shadow=12:65eff1dac76e16e5 indirect=12:65eff1dac76e16e5 +geom 13: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=12:c5bbf2f135b5e22b camera=12:c5bbf2f135b5e22b shadow=12:c5bbf2f135b5e22b indirect=12:c5bbf2f135b5e22b +geom 14: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:77f8032df1a5e1f5 camera=2:77f8032df1a5e1f5 shadow=2:77f8032df1a5e1f5 indirect=2:77f8032df1a5e1f5 +provenance arc source: /Crate +provenance arc source: /Crate/geo +provenance arc source: /_Cube +provenance light /World/Sky: LightOrigin { index: 0, geoms: 14..14 } +provenance geometry 0..1: /World/pebble/geo +provenance geometry 1..2: /World/away/geo +provenance geometry 2..3: /World/box/geo +provenance geometry 3..4: /World/sunk/geo +provenance geometry 4..5: /World/rock/geo +provenance geometry 5..6: /World/vase/geo +provenance geometry 6..7: /World/steps/geo +provenance geometry 7..8: /World/field/geo +provenance geometry 8..9: /World/slope/geo +provenance geometry 9..10: /World/terrain/geo +provenance geometry 10..11: /World/shelf/geo +provenance geometry 11..12: /World/floor/geo +provenance geometry 12..13: /World/inst +provenance geometry 13..14: /World/crate/geo +provenance geometry 14..15: /World/table/geo +provenance mesh: MeshOrigin { geom_id: 0, slot: 0, baked: false, moving: false } +provenance mesh: MeshOrigin { geom_id: 1, slot: 0, baked: false, moving: false } +provenance mesh: MeshOrigin { geom_id: 2, slot: 0, baked: false, moving: false } +provenance mesh: MeshOrigin { geom_id: 3, slot: 0, baked: false, moving: false } +provenance mesh: MeshOrigin { geom_id: 4, slot: 1, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 5, slot: 2, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 6, slot: 3, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 7, slot: 4, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 8, slot: 5, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 9, slot: 6, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 10, slot: 7, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 11, slot: 8, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 13, slot: 0, baked: false, moving: false } +provenance mesh: MeshOrigin { geom_id: 14, slot: 9, baked: true, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 2634041098053373584, n_points: 8, n_indices: 24, n_uvs: None, smooth: true, material: 0 }), placements: 5, shared: true, displaced: false } +provenance mesh slot 1: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 14470132405950877311, n_points: 8, n_indices: 24, n_uvs: None, smooth: true, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 2: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 1206830347127950734, n_points: 8, n_indices: 24, n_uvs: None, smooth: true, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 3: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 9519870911682368984, n_points: 6, n_indices: 8, n_uvs: None, smooth: true, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 4: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 1341889141698287293, n_points: 4, n_indices: 4, n_uvs: None, smooth: true, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 5: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 1313731086437247865, n_points: 4, n_indices: 4, n_uvs: None, smooth: true, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 6: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 15760070156626746114, n_points: 81, n_indices: 256, n_uvs: None, smooth: true, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 7: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 1050066994217133652, n_points: 4, n_indices: 4, n_uvs: None, smooth: true, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 8: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 14002714535549629103, n_points: 4, n_indices: 4, n_uvs: None, smooth: true, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 9: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 14095911038168715313, n_points: 4, n_indices: 4, n_uvs: None, smooth: true, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: true }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/World/Cam"), cameras: ["/World/Cam"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/World/Cam"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/placed_usda-d4ecee5c0312cf96-1.image b/crates/crust-core/tests/data/import_baselines/placed_usda-d4ecee5c0312cf96-1.image new file mode 100644 index 000000000..9c00d41e4 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/placed_usda-d4ecee5c0312cf96-1.image @@ -0,0 +1 @@ +48x32 16spp clamp-off d07945c7d875794f diff --git a/crates/crust-core/tests/data/import_baselines/placed_usda-dc7b9c4f6886cafa-1.digest b/crates/crust-core/tests/data/import_baselines/placed_usda-dc7b9c4f6886cafa-1.digest new file mode 100644 index 000000000..39ac096fd --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/placed_usda-dc7b9c4f6886cafa-1.digest @@ -0,0 +1,78 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/World/Cam") +camera: Camera { origin: Vec3A(0.0, 4.0, 14.0), lower_left_corner: Vec3A(-6.371167, -0.2474451, 4.0), horizontal: Vec3A(12.742334, 0.0, 0.0), vertical: Vec3A(0.0, 8.49489, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: Some("/Render/settings") +settings: RenderSettings { samples_per_pixel: 128, max_depth: 3, width: 48, height: 32, region: PixelRect { x0: 0, y0: 0, x1: 48, y1: 32 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 18.0, aperture: [20.955, 15.2908], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 10.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/placed.usda", "$DIR/stage.usda", "$DIR/table.usda"], invisible_overrides: Some(0) } +layer: $DIR/crate.usda +layer: $DIR/placed.usda +layer: $DIR/stage.usda +layer: $DIR/table.usda +lights: 1 +light 0: dome name Some("/World/Sky") lpe None pmf 1.0 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 15 geometries, PrimitiveBreakdown { triangles: 166, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 6 } top level, PrimitiveBreakdown { triangles: 178, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 6 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=12:d69dc8407e39c57d camera=12:d69dc8407e39c57d shadow=12:d69dc8407e39c57d indirect=12:d69dc8407e39c57d +geom 1: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=12:108ece7556e2045d camera=12:108ece7556e2045d shadow=12:108ece7556e2045d indirect=12:108ece7556e2045d +geom 2: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=12:b6f2f6b932607ce5 camera=12:b6f2f6b932607ce5 shadow=12:b6f2f6b932607ce5 indirect=12:b6f2f6b932607ce5 +geom 3: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=12:18f7f442a8f08005 camera=12:18f7f442a8f08005 shadow=12:18f7f442a8f08005 indirect=12:18f7f442a8f08005 +geom 4: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=12:95835634df888e55 camera=12:95835634df888e55 shadow=12:95835634df888e55 indirect=12:95835634df888e55 +geom 5: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=12:26e126fb8d08607d camera=12:26e126fb8d08607d shadow=12:26e126fb8d08607d indirect=12:26e126fb8d08607d +geom 6: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=4:d3ae5d8c61eeefd5 camera=4:d3ae5d8c61eeefd5 shadow=4:d3ae5d8c61eeefd5 indirect=4:d3ae5d8c61eeefd5 +geom 7: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:02dee92ba923d022 camera=2:02dee92ba923d022 shadow=2:02dee92ba923d022 indirect=2:02dee92ba923d022 +geom 8: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:d420bef838b31092 camera=2:d420bef838b31092 shadow=2:d420bef838b31092 indirect=2:d420bef838b31092 +geom 9: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=128:7e7f92bf6cf1e8e1 camera=128:7e7f92bf6cf1e8e1 shadow=128:7e7f92bf6cf1e8e1 indirect=128:7e7f92bf6cf1e8e1 +geom 10: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:5fd3af8a8974e005 camera=2:5fd3af8a8974e005 shadow=2:5fd3af8a8974e005 indirect=2:5fd3af8a8974e005 +geom 11: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:9626b0f2f3e041c5 camera=2:9626b0f2f3e041c5 shadow=2:9626b0f2f3e041c5 indirect=2:9626b0f2f3e041c5 +geom 12: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=12:65eff1dac76e16e5 camera=12:65eff1dac76e16e5 shadow=12:65eff1dac76e16e5 indirect=12:65eff1dac76e16e5 +geom 13: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=12:c5bbf2f135b5e22b camera=12:c5bbf2f135b5e22b shadow=12:c5bbf2f135b5e22b indirect=12:c5bbf2f135b5e22b +geom 14: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:77f8032df1a5e1f5 camera=2:77f8032df1a5e1f5 shadow=2:77f8032df1a5e1f5 indirect=2:77f8032df1a5e1f5 +provenance arc source: /Crate +provenance arc source: /Crate/geo +provenance arc source: /_Cube +provenance light /World/Sky: LightOrigin { index: 0, geoms: 14..14 } +provenance geometry 0..1: /World/pebble/geo +provenance geometry 1..2: /World/away/geo +provenance geometry 2..3: /World/box/geo +provenance geometry 3..4: /World/sunk/geo +provenance geometry 4..5: /World/rock/geo +provenance geometry 5..6: /World/vase/geo +provenance geometry 6..7: /World/steps/geo +provenance geometry 7..8: /World/field/geo +provenance geometry 8..9: /World/slope/geo +provenance geometry 9..10: /World/terrain/geo +provenance geometry 10..11: /World/shelf/geo +provenance geometry 11..12: /World/floor/geo +provenance geometry 12..13: /World/inst +provenance geometry 13..14: /World/crate/geo +provenance geometry 14..15: /World/table/geo +provenance mesh: MeshOrigin { geom_id: 0, slot: 0, baked: false, moving: false } +provenance mesh: MeshOrigin { geom_id: 1, slot: 0, baked: false, moving: false } +provenance mesh: MeshOrigin { geom_id: 2, slot: 0, baked: false, moving: false } +provenance mesh: MeshOrigin { geom_id: 3, slot: 0, baked: false, moving: false } +provenance mesh: MeshOrigin { geom_id: 4, slot: 1, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 5, slot: 2, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 6, slot: 3, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 7, slot: 4, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 8, slot: 5, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 9, slot: 6, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 10, slot: 7, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 11, slot: 8, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 13, slot: 0, baked: false, moving: false } +provenance mesh: MeshOrigin { geom_id: 14, slot: 9, baked: true, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 2634041098053373584, n_points: 8, n_indices: 24, n_uvs: None, smooth: true, material: 0 }), placements: 5, shared: true, displaced: false } +provenance mesh slot 1: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 14470132405950877311, n_points: 8, n_indices: 24, n_uvs: None, smooth: true, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 2: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 1206830347127950734, n_points: 8, n_indices: 24, n_uvs: None, smooth: true, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 3: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 9519870911682368984, n_points: 6, n_indices: 8, n_uvs: None, smooth: true, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 4: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 1341889141698287293, n_points: 4, n_indices: 4, n_uvs: None, smooth: true, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 5: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 1313731086437247865, n_points: 4, n_indices: 4, n_uvs: None, smooth: true, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 6: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 15760070156626746114, n_points: 81, n_indices: 256, n_uvs: None, smooth: true, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 7: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 1050066994217133652, n_points: 4, n_indices: 4, n_uvs: None, smooth: true, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 8: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 14002714535549629103, n_points: 4, n_indices: 4, n_uvs: None, smooth: true, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 9: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 14095911038168715313, n_points: 4, n_indices: 4, n_uvs: None, smooth: true, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: true }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/World/Cam"), cameras: ["/World/Cam"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/World/Cam"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/placed_usda-dc7b9c4f6886cafa-1.image b/crates/crust-core/tests/data/import_baselines/placed_usda-dc7b9c4f6886cafa-1.image new file mode 100644 index 000000000..9c00d41e4 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/placed_usda-dc7b9c4f6886cafa-1.image @@ -0,0 +1 @@ +48x32 16spp clamp-off d07945c7d875794f diff --git a/crates/crust-core/tests/data/import_baselines/placed_usda-f5c13f6f8bb66ab5-1.digest b/crates/crust-core/tests/data/import_baselines/placed_usda-f5c13f6f8bb66ab5-1.digest new file mode 100644 index 000000000..c37a5fae9 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/placed_usda-f5c13f6f8bb66ab5-1.digest @@ -0,0 +1,180 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/World/Cam") +camera: Camera { origin: Vec3A(0.0, 4.0, 14.0), lower_left_corner: Vec3A(-6.371167, -0.2474451, 4.0), horizontal: Vec3A(12.742334, 0.0, 0.0), vertical: Vec3A(0.0, 8.49489, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: Some("/Render/settings") +settings: RenderSettings { samples_per_pixel: 128, max_depth: 3, width: 48, height: 32, region: PixelRect { x0: 0, y0: 0, x1: 48, y1: 32 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 18.0, aperture: [20.955, 15.2908], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 10.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/placed.usda", "$DIR/stage.usda", "$DIR/table.usda"], invisible_overrides: Some(0) } +layer: $DIR/crate.usda +layer: $DIR/placed.usda +layer: $DIR/stage.usda +layer: $DIR/table.usda +lights: 1 +light 0: dome name Some("/World/Sky") lpe None pmf 1.0 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 115 geometries, PrimitiveBreakdown { triangles: 166, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 106 } top level, PrimitiveBreakdown { triangles: 178, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 106 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0302348 motion [] pieces all=12:4e47456226ea853b camera=12:4e47456226ea853b shadow=12:4e47456226ea853b indirect=12:4e47456226ea853b +geom 1: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.9703491 motion [] pieces all=12:ee2f51c1cd819aa5 camera=12:ee2f51c1cd819aa5 shadow=12:ee2f51c1cd819aa5 indirect=12:ee2f51c1cd819aa5 +geom 2: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.8307657 motion [] pieces all=12:4456538a2171cd9c camera=12:4456538a2171cd9c shadow=12:4456538a2171cd9c indirect=12:4456538a2171cd9c +geom 3: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.1194483 motion [] pieces all=12:23ee1769174a108a camera=12:23ee1769174a108a shadow=12:23ee1769174a108a indirect=12:23ee1769174a108a +geom 4: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0775396 motion [] pieces all=12:a369bbc5ef22c736 camera=12:a369bbc5ef22c736 shadow=12:a369bbc5ef22c736 indirect=12:a369bbc5ef22c736 +geom 5: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.94118965 motion [] pieces all=12:3f9c2945e264a3a7 camera=12:3f9c2945e264a3a7 shadow=12:3f9c2945e264a3a7 indirect=12:3f9c2945e264a3a7 +geom 6: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.8952345 motion [] pieces all=12:728a445b371853d8 camera=12:728a445b371853d8 shadow=12:728a445b371853d8 indirect=12:728a445b371853d8 +geom 7: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.1544443 motion [] pieces all=12:086da29016ba95b0 camera=12:086da29016ba95b0 shadow=12:086da29016ba95b0 indirect=12:086da29016ba95b0 +geom 8: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0568454 motion [] pieces all=12:a3831c1aa822f259 camera=12:a3831c1aa822f259 shadow=12:a3831c1aa822f259 indirect=12:a3831c1aa822f259 +geom 9: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.91884345 motion [] pieces all=12:a4f6586fe5ef3e21 camera=12:a4f6586fe5ef3e21 shadow=12:a4f6586fe5ef3e21 indirect=12:a4f6586fe5ef3e21 +geom 10: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.8698318 motion [] pieces all=12:f0760d5faae11b3b camera=12:f0760d5faae11b3b shadow=12:f0760d5faae11b3b indirect=12:f0760d5faae11b3b +geom 11: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.1947867 motion [] pieces all=12:5b32133f4614fd46 camera=12:5b32133f4614fd46 shadow=12:5b32133f4614fd46 indirect=12:5b32133f4614fd46 +geom 12: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.9751468 motion [] pieces all=12:d51360056d6a17f1 camera=12:d51360056d6a17f1 shadow=12:d51360056d6a17f1 indirect=12:d51360056d6a17f1 +geom 13: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0068411 motion [] pieces all=12:d10eeeefb1edb19c camera=12:d10eeeefb1edb19c shadow=12:d10eeeefb1edb19c indirect=12:d10eeeefb1edb19c +geom 14: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.1298987 motion [] pieces all=12:e3f44cff56520c66 camera=12:e3f44cff56520c66 shadow=12:e3f44cff56520c66 indirect=12:e3f44cff56520c66 +geom 15: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.8074785 motion [] pieces all=12:76182490231cb2c0 camera=12:76182490231cb2c0 shadow=12:76182490231cb2c0 indirect=12:76182490231cb2c0 +geom 16: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.93526125 motion [] pieces all=12:4bdb31af636839b0 camera=12:4bdb31af636839b0 shadow=12:4bdb31af636839b0 indirect=12:4bdb31af636839b0 +geom 17: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0933704 motion [] pieces all=12:e1cd969552f25674 camera=12:e1cd969552f25674 shadow=12:e1cd969552f25674 indirect=12:e1cd969552f25674 +geom 18: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.1666417 motion [] pieces all=12:8cb23d264ba6bfbb camera=12:8cb23d264ba6bfbb shadow=12:8cb23d264ba6bfbb indirect=12:8cb23d264ba6bfbb +geom 19: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.8871478 motion [] pieces all=12:4a7858789cd9df8e camera=12:4a7858789cd9df8e shadow=12:4a7858789cd9df8e indirect=12:4a7858789cd9df8e +geom 20: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0460746 motion [] pieces all=12:6426416e8a5deb32 camera=12:6426416e8a5deb32 shadow=12:6426416e8a5deb32 indirect=12:6426416e8a5deb32 +geom 21: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.9511921 motion [] pieces all=12:f56b8604101514c9 camera=12:f56b8604101514c9 shadow=12:f56b8604101514c9 indirect=12:f56b8604101514c9 +geom 22: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.84485286 motion [] pieces all=12:db689d8c9a6cd4c8 camera=12:db689d8c9a6cd4c8 shadow=12:db689d8c9a6cd4c8 indirect=12:db689d8c9a6cd4c8 +geom 23: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.1097914 motion [] pieces all=12:f09788fda874e4f9 camera=12:f09788fda874e4f9 shadow=12:f09788fda874e4f9 indirect=12:f09788fda874e4f9 +geom 24: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.81755817 motion [] pieces all=12:111f011a0f808f01 camera=12:111f011a0f808f01 shadow=12:111f011a0f808f01 indirect=12:111f011a0f808f01 +geom 25: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.1459739 motion [] pieces all=12:43cd6550e6fe7eb3 camera=12:43cd6550e6fe7eb3 shadow=12:43cd6550e6fe7eb3 indirect=12:43cd6550e6fe7eb3 +geom 26: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0129569 motion [] pieces all=12:fc789e4c2f5a396d camera=12:fc789e4c2f5a396d shadow=12:fc789e4c2f5a396d indirect=12:fc789e4c2f5a396d +geom 27: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.9887796 motion [] pieces all=12:17b9413cef4977d1 camera=12:17b9413cef4977d1 shadow=12:17b9413cef4977d1 indirect=12:17b9413cef4977d1 +geom 28: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.1784618 motion [] pieces all=12:94146ea4b00252bf camera=12:94146ea4b00252bf shadow=12:94146ea4b00252bf indirect=12:94146ea4b00252bf +geom 29: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.8605717 motion [] pieces all=12:12a68d3d3b360732 camera=12:12a68d3d3b360732 shadow=12:12a68d3d3b360732 indirect=12:12a68d3d3b360732 +geom 30: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.90049964 motion [] pieces all=12:bbc25fd4b02e380f camera=12:bbc25fd4b02e380f shadow=12:bbc25fd4b02e380f indirect=12:bbc25fd4b02e380f +geom 31: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0697577 motion [] pieces all=12:c475c08b4f7c3376 camera=12:c475c08b4f7c3376 shadow=12:c475c08b4f7c3376 indirect=12:c475c08b4f7c3376 +geom 32: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.8753944 motion [] pieces all=12:f7430be8cddff05a camera=12:f7430be8cddff05a shadow=12:f7430be8cddff05a indirect=12:f7430be8cddff05a +geom 33: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.1720527 motion [] pieces all=12:5cd3ac711c786885 camera=12:5cd3ac711c786885 shadow=12:5cd3ac711c786885 indirect=12:5cd3ac711c786885 +geom 34: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0938879 motion [] pieces all=12:abf9f129ca95e4f5 camera=12:abf9f129ca95e4f5 shadow=12:abf9f129ca95e4f5 indirect=12:abf9f129ca95e4f5 +geom 35: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.9269793 motion [] pieces all=12:e657abaf59804d56 camera=12:e657abaf59804d56 shadow=12:e657abaf59804d56 indirect=12:e657abaf59804d56 +geom 36: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.8431831 motion [] pieces all=12:11fc198140ede24e camera=12:11fc198140ede24e shadow=12:11fc198140ede24e indirect=12:11fc198140ede24e +geom 37: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.1019206 motion [] pieces all=12:11cf76c922df119e camera=12:11cf76c922df119e shadow=12:11cf76c922df119e indirect=12:11cf76c922df119e +geom 38: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0432779 motion [] pieces all=12:c438f3c44f47c25d camera=12:c438f3c44f47c25d shadow=12:c438f3c44f47c25d indirect=12:c438f3c44f47c25d +geom 39: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.96232396 motion [] pieces all=12:13d8666cee5fecc3 camera=12:13d8666cee5fecc3 shadow=12:13d8666cee5fecc3 indirect=12:13d8666cee5fecc3 +geom 40: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.023567 motion [] pieces all=12:18c97bf35a8997a4 camera=12:18c97bf35a8997a4 shadow=12:18c97bf35a8997a4 indirect=12:18c97bf35a8997a4 +geom 41: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.9956807 motion [] pieces all=12:e75636321407dd22 camera=12:e75636321407dd22 shadow=12:e75636321407dd22 indirect=12:e75636321407dd22 +geom 42: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.8209068 motion [] pieces all=12:d4be977b87b8f2c5 camera=12:d4be977b87b8f2c5 shadow=12:d4be977b87b8f2c5 indirect=12:d4be977b87b8f2c5 +geom 43: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.1392137 motion [] pieces all=12:38f1366b090718c5 camera=12:38f1366b090718c5 shadow=12:38f1366b090718c5 indirect=12:38f1366b090718c5 +geom 44: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0633069 motion [] pieces all=12:af93a450dcaa3ed7 camera=12:af93a450dcaa3ed7 shadow=12:af93a450dcaa3ed7 indirect=12:af93a450dcaa3ed7 +geom 45: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.91163903 motion [] pieces all=12:e9eaf279b4fd310c camera=12:e9eaf279b4fd310c shadow=12:e9eaf279b4fd310c indirect=12:e9eaf279b4fd310c +geom 46: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.85597336 motion [] pieces all=12:75b84129502c9e93 camera=12:75b84129502c9e93 shadow=12:75b84129502c9e93 indirect=12:75b84129502c9e93 +geom 47: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.1847972 motion [] pieces all=12:848a7256c4a42f64 camera=12:848a7256c4a42f64 shadow=12:848a7256c4a42f64 indirect=12:848a7256c4a42f64 +geom 48: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0359192 motion [] pieces all=12:f9cd1e14b2117f7d camera=12:f9cd1e14b2117f7d shadow=12:f9cd1e14b2117f7d indirect=12:f9cd1e14b2117f7d +geom 49: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.96330434 motion [] pieces all=12:a240996e765dcaca camera=12:a240996e765dcaca shadow=12:a240996e765dcaca indirect=12:a240996e765dcaca +geom 50: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.8354984 motion [] pieces all=12:4d3480a3dfbefce8 camera=12:4d3480a3dfbefce8 shadow=12:4d3480a3dfbefce8 indirect=12:4d3480a3dfbefce8 +geom 51: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.1180665 motion [] pieces all=12:9066996782485a15 camera=12:9066996782485a15 shadow=12:9066996782485a15 indirect=12:9066996782485a15 +geom 52: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0866416 motion [] pieces all=12:8d4d3ecfaa01e70f camera=12:8d4d3ecfaa01e70f shadow=12:8d4d3ecfaa01e70f indirect=12:8d4d3ecfaa01e70f +geom 53: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.9495417 motion [] pieces all=12:15fb4a3bbaf8ba17 camera=12:15fb4a3bbaf8ba17 shadow=12:15fb4a3bbaf8ba17 indirect=12:15fb4a3bbaf8ba17 +geom 54: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.8930357 motion [] pieces all=12:d2b655f51fba3b60 camera=12:d2b655f51fba3b60 shadow=12:d2b655f51fba3b60 indirect=12:d2b655f51fba3b60 +geom 55: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.1609201 motion [] pieces all=12:9472cda2f739b9fb camera=12:9472cda2f739b9fb shadow=12:9472cda2f739b9fb indirect=12:9472cda2f739b9fb +geom 56: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0515589 motion [] pieces all=12:cd4b0efb6f96ae7a camera=12:cd4b0efb6f96ae7a shadow=12:cd4b0efb6f96ae7a indirect=12:cd4b0efb6f96ae7a +geom 57: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.91319627 motion [] pieces all=12:5a6276f8576a6b5a camera=12:5a6276f8576a6b5a shadow=12:5a6276f8576a6b5a indirect=12:5a6276f8576a6b5a +geom 58: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.8628024 motion [] pieces all=12:d3696c57874475d0 camera=12:d3696c57874475d0 shadow=12:d3696c57874475d0 indirect=12:d3696c57874475d0 +geom 59: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.1927012 motion [] pieces all=12:a2e82cef96955606 camera=12:a2e82cef96955606 shadow=12:a2e82cef96955606 indirect=12:a2e82cef96955606 +geom 60: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.9843564 motion [] pieces all=12:182c6d894be25135 camera=12:182c6d894be25135 shadow=12:182c6d894be25135 indirect=12:182c6d894be25135 +geom 61: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0001198 motion [] pieces all=12:7a9d4d3c8591c209 camera=12:7a9d4d3c8591c209 shadow=12:7a9d4d3c8591c209 indirect=12:7a9d4d3c8591c209 +geom 62: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.1337063 motion [] pieces all=12:4c1c1e515c79bdc3 camera=12:4c1c1e515c79bdc3 shadow=12:4c1c1e515c79bdc3 indirect=12:4c1c1e515c79bdc3 +geom 63: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.80129576 motion [] pieces all=12:7c756f7c6eb8a981 camera=12:7c756f7c6eb8a981 shadow=12:7c756f7c6eb8a981 indirect=12:7c756f7c6eb8a981 +geom 64: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.87433505 motion [] pieces all=12:4108f5b4686e35be camera=12:4108f5b4686e35be shadow=12:4108f5b4686e35be indirect=12:4108f5b4686e35be +geom 65: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.1975825 motion [] pieces all=12:4734019265471665 camera=12:4734019265471665 shadow=12:4734019265471665 indirect=12:4734019265471665 +geom 66: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0621684 motion [] pieces all=12:715804278013b789 camera=12:715804278013b789 shadow=12:715804278013b789 indirect=12:715804278013b789 +geom 67: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.9226387 motion [] pieces all=12:bb6f7c1e8cc4f1e2 camera=12:bb6f7c1e8cc4f1e2 shadow=12:bb6f7c1e8cc4f1e2 indirect=12:bb6f7c1e8cc4f1e2 +geom 68: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.8097593 motion [] pieces all=12:c268e5368146ae1f camera=12:c268e5368146ae1f shadow=12:c268e5368146ae1f indirect=12:c268e5368146ae1f +geom 69: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.127293 motion [] pieces all=12:457c05048f3f693d camera=12:457c05048f3f693d shadow=12:457c05048f3f693d indirect=12:457c05048f3f693d +geom 70: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0116408 motion [] pieces all=12:e703eedb7b026723 camera=12:e703eedb7b026723 shadow=12:e703eedb7b026723 indirect=12:e703eedb7b026723 +geom 71: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.97932434 motion [] pieces all=12:fd327f9bca95a0db camera=12:fd327f9bca95a0db shadow=12:fd327f9bca95a0db indirect=12:fd327f9bca95a0db +geom 72: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.82668763 motion [] pieces all=12:6d2ad38125bafc84 camera=12:6d2ad38125bafc84 shadow=12:6d2ad38125bafc84 indirect=12:6d2ad38125bafc84 +geom 73: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.1249206 motion [] pieces all=12:c9a251d6e544d9bf camera=12:c9a251d6e544d9bf shadow=12:c9a251d6e544d9bf indirect=12:c9a251d6e544d9bf +geom 74: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0261687 motion [] pieces all=12:20ba675322687129 camera=12:20ba675322687129 shadow=12:20ba675322687129 indirect=12:20ba675322687129 +geom 75: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.97264576 motion [] pieces all=12:ef6c1b9a2c6c864b camera=12:ef6c1b9a2c6c864b shadow=12:ef6c1b9a2c6c864b indirect=12:ef6c1b9a2c6c864b +geom 76: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.1511 motion [] pieces all=12:07fc7bc9d1792ccc camera=12:07fc7bc9d1792ccc shadow=12:07fc7bc9d1792ccc indirect=12:07fc7bc9d1792ccc +geom 77: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.89762646 motion [] pieces all=12:aa185da6e53f4927 camera=12:aa185da6e53f4927 shadow=12:aa185da6e53f4927 indirect=12:aa185da6e53f4927 +geom 78: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.94019973 motion [] pieces all=12:01b6b3d88c45c033 camera=12:01b6b3d88c45c033 shadow=12:01b6b3d88c45c033 indirect=12:01b6b3d88c45c033 +geom 79: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0800166 motion [] pieces all=12:a9bf056d392621b0 camera=12:a9bf056d392621b0 shadow=12:a9bf056d392621b0 indirect=12:a9bf056d392621b0 +geom 80: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.85747635 motion [] pieces all=12:94de06f236b8b820 camera=12:94de06f236b8b820 shadow=12:94de06f236b8b820 indirect=12:94de06f236b8b820 +geom 81: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.1759998 motion [] pieces all=12:92f726545f6a3ab5 camera=12:92f726545f6a3ab5 shadow=12:92f726545f6a3ab5 indirect=12:92f726545f6a3ab5 +geom 82: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0728099 motion [] pieces all=12:09e30d626f61ccf4 camera=12:09e30d626f61ccf4 shadow=12:09e30d626f61ccf4 indirect=12:09e30d626f61ccf4 +geom 83: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.9043027 motion [] pieces all=12:d53f7aff7fe21e21 camera=12:d53f7aff7fe21e21 shadow=12:d53f7aff7fe21e21 indirect=12:d53f7aff7fe21e21 +geom 84: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.8145665 motion [] pieces all=12:f2810bc8218d17d8 camera=12:f2810bc8218d17d8 shadow=12:f2810bc8218d17d8 indirect=12:f2810bc8218d17d8 +geom 85: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.1478072 motion [] pieces all=12:4aa5066447045ac2 camera=12:4aa5066447045ac2 shadow=12:4aa5066447045ac2 indirect=12:4aa5066447045ac2 +geom 86: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0164454 motion [] pieces all=12:0a5f20c20324f76e camera=12:0a5f20c20324f76e shadow=12:0a5f20c20324f76e indirect=12:0a5f20c20324f76e +geom 87: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.99306315 motion [] pieces all=12:ddcf41cfc3c6173f camera=12:ddcf41cfc3c6173f shadow=12:ddcf41cfc3c6173f indirect=12:ddcf41cfc3c6173f +geom 88: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.1079575 motion [] pieces all=12:0003a64b0b152a73 camera=12:0003a64b0b152a73 shadow=12:0003a64b0b152a73 indirect=12:0003a64b0b152a73 +geom 89: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.8493257 motion [] pieces all=12:cc9da69acf673059 camera=12:cc9da69acf673059 shadow=12:cc9da69acf673059 indirect=12:cc9da69acf673059 +geom 90: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.955672 motion [] pieces all=12:1516c749ba6d4473 camera=12:1516c749ba6d4473 shadow=12:1516c749ba6d4473 indirect=12:1516c749ba6d4473 +geom 91: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0495518 motion [] pieces all=12:6f60f8b334446267 camera=12:6f60f8b334446267 shadow=12:6f60f8b334446267 indirect=12:6f60f8b334446267 +geom 92: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.8838227 motion [] pieces all=12:26f088ca4a7afba0 camera=12:26f088ca4a7afba0 shadow=12:26f088ca4a7afba0 indirect=12:26f088ca4a7afba0 +geom 93: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.1644161 motion [] pieces all=12:548f82962b9f27a4 camera=12:548f82962b9f27a4 shadow=12:548f82962b9f27a4 indirect=12:548f82962b9f27a4 +geom 94: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0903423 motion [] pieces all=12:ee4bc3ad2dcc7fb4 camera=12:ee4bc3ad2dcc7fb4 shadow=12:ee4bc3ad2dcc7fb4 indirect=12:ee4bc3ad2dcc7fb4 +geom 95: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.9327857 motion [] pieces all=12:1d6114476eb4c674 camera=12:1d6114476eb4c674 shadow=12:1d6114476eb4c674 indirect=12:1d6114476eb4c674 +geom 96: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.95914304 motion [] pieces all=12:2b6d8b99d404bb45 camera=12:2b6d8b99d404bb45 shadow=12:2b6d8b99d404bb45 indirect=12:2b6d8b99d404bb45 +geom 97: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0385134 motion [] pieces all=12:1a072a290ef6a1af camera=12:1a072a290ef6a1af shadow=12:1a072a290ef6a1af indirect=12:1a072a290ef6a1af +geom 98: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.1047977 motion [] pieces all=12:d2ca3713572d5eae camera=12:d2ca3713572d5eae shadow=12:d2ca3713572d5eae indirect=12:d2ca3713572d5eae +geom 99: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.83981353 motion [] pieces all=12:8d980a8119c93b32 camera=12:8d980a8119c93b32 shadow=12:8d980a8119c93b32 indirect=12:8d980a8119c93b32 +geom 100: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=12:d69dc8407e39c57d camera=12:d69dc8407e39c57d shadow=12:d69dc8407e39c57d indirect=12:d69dc8407e39c57d +geom 101: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=12:108ece7556e2045d camera=12:108ece7556e2045d shadow=12:108ece7556e2045d indirect=12:108ece7556e2045d +geom 102: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=12:b6f2f6b932607ce5 camera=12:b6f2f6b932607ce5 shadow=12:b6f2f6b932607ce5 indirect=12:b6f2f6b932607ce5 +geom 103: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=12:18f7f442a8f08005 camera=12:18f7f442a8f08005 shadow=12:18f7f442a8f08005 indirect=12:18f7f442a8f08005 +geom 104: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=12:95835634df888e55 camera=12:95835634df888e55 shadow=12:95835634df888e55 indirect=12:95835634df888e55 +geom 105: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=12:26e126fb8d08607d camera=12:26e126fb8d08607d shadow=12:26e126fb8d08607d indirect=12:26e126fb8d08607d +geom 106: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=4:d3ae5d8c61eeefd5 camera=4:d3ae5d8c61eeefd5 shadow=4:d3ae5d8c61eeefd5 indirect=4:d3ae5d8c61eeefd5 +geom 107: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:02dee92ba923d022 camera=2:02dee92ba923d022 shadow=2:02dee92ba923d022 indirect=2:02dee92ba923d022 +geom 108: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:d420bef838b31092 camera=2:d420bef838b31092 shadow=2:d420bef838b31092 indirect=2:d420bef838b31092 +geom 109: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=128:7e7f92bf6cf1e8e1 camera=128:7e7f92bf6cf1e8e1 shadow=128:7e7f92bf6cf1e8e1 indirect=128:7e7f92bf6cf1e8e1 +geom 110: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:5fd3af8a8974e005 camera=2:5fd3af8a8974e005 shadow=2:5fd3af8a8974e005 indirect=2:5fd3af8a8974e005 +geom 111: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:9626b0f2f3e041c5 camera=2:9626b0f2f3e041c5 shadow=2:9626b0f2f3e041c5 indirect=2:9626b0f2f3e041c5 +geom 112: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=12:65eff1dac76e16e5 camera=12:65eff1dac76e16e5 shadow=12:65eff1dac76e16e5 indirect=12:65eff1dac76e16e5 +geom 113: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=12:c5bbf2f135b5e22b camera=12:c5bbf2f135b5e22b shadow=12:c5bbf2f135b5e22b indirect=12:c5bbf2f135b5e22b +geom 114: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:77f8032df1a5e1f5 camera=2:77f8032df1a5e1f5 shadow=2:77f8032df1a5e1f5 indirect=2:77f8032df1a5e1f5 +provenance arc source: /Crate +provenance arc source: /Crate/geo +provenance arc source: /World/dense/Prototypes/pebble +provenance arc source: /_Cube +provenance light /World/Sky: LightOrigin { index: 0, geoms: 114..114 } +provenance geometry 0..100: /World/dense +provenance geometry 100..101: /World/pebble/geo +provenance geometry 101..102: /World/away/geo +provenance geometry 102..103: /World/box/geo +provenance geometry 103..104: /World/sunk/geo +provenance geometry 104..105: /World/rock/geo +provenance geometry 105..106: /World/vase/geo +provenance geometry 106..107: /World/steps/geo +provenance geometry 107..108: /World/field/geo +provenance geometry 108..109: /World/slope/geo +provenance geometry 109..110: /World/terrain/geo +provenance geometry 110..111: /World/shelf/geo +provenance geometry 111..112: /World/floor/geo +provenance geometry 112..113: /World/inst +provenance geometry 113..114: /World/crate/geo +provenance geometry 114..115: /World/table/geo +provenance mesh: MeshOrigin { geom_id: 100, slot: 0, baked: false, moving: false } +provenance mesh: MeshOrigin { geom_id: 101, slot: 0, baked: false, moving: false } +provenance mesh: MeshOrigin { geom_id: 102, slot: 0, baked: false, moving: false } +provenance mesh: MeshOrigin { geom_id: 103, slot: 0, baked: false, moving: false } +provenance mesh: MeshOrigin { geom_id: 104, slot: 1, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 105, slot: 2, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 106, slot: 3, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 107, slot: 4, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 108, slot: 5, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 109, slot: 6, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 110, slot: 7, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 111, slot: 8, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 113, slot: 0, baked: false, moving: false } +provenance mesh: MeshOrigin { geom_id: 114, slot: 9, baked: true, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 2634041098053373584, n_points: 8, n_indices: 24, n_uvs: None, smooth: true, material: 0 }), placements: 5, shared: true, displaced: false } +provenance mesh slot 1: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 14470132405950877311, n_points: 8, n_indices: 24, n_uvs: None, smooth: true, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 2: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 1206830347127950734, n_points: 8, n_indices: 24, n_uvs: None, smooth: true, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 3: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 9519870911682368984, n_points: 6, n_indices: 8, n_uvs: None, smooth: true, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 4: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 1341889141698287293, n_points: 4, n_indices: 4, n_uvs: None, smooth: true, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 5: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 1313731086437247865, n_points: 4, n_indices: 4, n_uvs: None, smooth: true, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 6: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 15760070156626746114, n_points: 81, n_indices: 256, n_uvs: None, smooth: true, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 7: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 1050066994217133652, n_points: 4, n_indices: 4, n_uvs: None, smooth: true, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 8: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 14002714535549629103, n_points: 4, n_indices: 4, n_uvs: None, smooth: true, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 9: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 14095911038168715313, n_points: 4, n_indices: 4, n_uvs: None, smooth: true, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: true }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/World/Cam"), cameras: ["/World/Cam"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/World/Cam"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/placed_usda-f5c13f6f8bb66ab5-1.image b/crates/crust-core/tests/data/import_baselines/placed_usda-f5c13f6f8bb66ab5-1.image new file mode 100644 index 000000000..4bd718235 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/placed_usda-f5c13f6f8bb66ab5-1.image @@ -0,0 +1 @@ +48x32 16spp clamp-off b48d11f44c4cc2e3 diff --git a/crates/crust-core/tests/data/import_baselines/placements_usda-275bfd0cb4688e5d-1.digest b/crates/crust-core/tests/data/import_baselines/placements_usda-275bfd0cb4688e5d-1.digest new file mode 100644 index 000000000..ed56e4820 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/placements_usda-275bfd0cb4688e5d-1.digest @@ -0,0 +1,31 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/World/cam") +camera: Camera { origin: Vec3A(0.0, 0.0, 10.0), lower_left_corner: Vec3A(-2.0955, -1.5716249, 0.0), horizontal: Vec3A(4.191, 0.0, 0.0), vertical: Vec3A(0.0, 3.1432498, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: Some("/Render/settings") +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 48, height: 36, region: PixelRect { x0: 0, y0: 0, x1: 48, y1: 36 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [AovProduct { prim_path: "/Render/p", name: "p.exr", vars: [AovVar { prim_path: "/Render/P", name: "P", channel_prefix: None, source: P, components: 3, precision: Float, accumulation: Closest, clear: 0.0, expression: None, raw: false, variance: false }, AovVar { prim_path: "/Render/Pref", name: "Pref", channel_prefix: None, source: Primvar(PrimvarSource { index: 0, components: 3, role: Vector }), components: 3, precision: Float, accumulation: Closest, clear: 0.0, expression: None, raw: false, variance: false }], attributes: [] }], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 50.0, aperture: [20.955, 15.2908], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 10.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/placements.usda"], invisible_overrides: Some(0) } +layer: $DIR/placements.usda +lights: 1 +light 0: dome name Some("/World/dome") lpe None pmf 1.0 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 8 geometries, PrimitiveBreakdown { triangles: 0, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 8 } top level, PrimitiveBreakdown { triangles: 4, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 8 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov Some((Some(0), false)) swapped false curves false scale 1.0 motion [] pieces all=2:f5e0ec2a6ccb450b camera=2:f5e0ec2a6ccb450b shadow=2:f5e0ec2a6ccb450b indirect=2:f5e0ec2a6ccb450b +geom 1: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov Some((Some(1), false)) swapped false curves false scale 1.0 motion [] pieces all=2:e87bd710c180b19d camera=2:e87bd710c180b19d shadow=2:e87bd710c180b19d indirect=2:e87bd710c180b19d +geom 2: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov Some((Some(0), false)) swapped false curves false scale 1.0 motion [] pieces all=2:b4eaf3018eb97dcb camera=2:b4eaf3018eb97dcb shadow=2:b4eaf3018eb97dcb indirect=2:b4eaf3018eb97dcb +geom 3: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov Some((Some(1), false)) swapped false curves false scale 1.0 motion [] pieces all=2:65649e45c2a14ee5 camera=2:65649e45c2a14ee5 shadow=2:65649e45c2a14ee5 indirect=2:65649e45c2a14ee5 +geom 4: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov Some((Some(0), false)) swapped false curves false scale 1.0 motion [] pieces all=2:b7cfe822e7d973dd camera=2:b7cfe822e7d973dd shadow=2:b7cfe822e7d973dd indirect=2:b7cfe822e7d973dd +geom 5: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov Some((Some(1), false)) swapped false curves false scale 1.0 motion [] pieces all=2:93ecb0fad19a3320 camera=2:93ecb0fad19a3320 shadow=2:93ecb0fad19a3320 indirect=2:93ecb0fad19a3320 +geom 6: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov Some((Some(0), false)) swapped false curves false scale 1.0 motion [] pieces all=2:2ad6f988c7cf63dd camera=2:2ad6f988c7cf63dd shadow=2:2ad6f988c7cf63dd indirect=2:2ad6f988c7cf63dd +geom 7: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov Some((Some(1), false)) swapped false curves false scale 1.0 motion [] pieces all=2:cd8fb527bc7b2520 camera=2:cd8fb527bc7b2520 shadow=2:cd8fb527bc7b2520 indirect=2:cd8fb527bc7b2520 +provenance light /World/dome: LightOrigin { index: 0, geoms: 8..8 } +provenance geometry 0..4: /World/scatter +provenance geometry 4..6: /World/mirrored +provenance geometry 6..8: /World/left +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 18409182714597880266, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 0 }), placements: 0, shared: true, displaced: false } +provenance mesh slot 1: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 3180332025478702472, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 0 }), placements: 0, shared: true, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/World/cam"), cameras: ["/World/cam"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [("rest", 3)], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/World/cam"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/placements_usda-275bfd0cb4688e5d-1.image b/crates/crust-core/tests/data/import_baselines/placements_usda-275bfd0cb4688e5d-1.image new file mode 100644 index 000000000..8e0aab65a --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/placements_usda-275bfd0cb4688e5d-1.image @@ -0,0 +1 @@ +48x36 16spp clamp-off de7ad47d695d9a8a diff --git a/crates/crust-core/tests/data/import_baselines/plane_usda-e5035e45dccaf24c-1.digest b/crates/crust-core/tests/data/import_baselines/plane_usda-e5035e45dccaf24c-1.digest new file mode 100644 index 000000000..21a3cd43a --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/plane_usda-e5035e45dccaf24c-1.digest @@ -0,0 +1,18 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/World/Cam") +camera: Camera { origin: Vec3A(0.0, 0.0, 5.0), lower_left_corner: Vec3A(-0.27183646, -0.15290801, -5.0), horizontal: Vec3A(0.5436729, 0.0, 0.0), vertical: Vec3A(0.0, 0.30581602, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, -1.0, -3.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 1 } } +settings prim: None +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 640, height: 360, region: PixelRect { x0: 0, y0: 0, x1: 640, y1: 360 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 500.0, aperture: [20.955, 15.2908], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 10.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/plane.usda"], invisible_overrides: Some(0) } +layer: $DIR/plane.usda +lights: 0 +volumes: 0 +world: 1 geometries, PrimitiveBreakdown { triangles: 0, spheres: 1, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 0, spheres: 1, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:d5fa2ac5108a1585 camera=1:d5fa2ac5108a1585 shadow=1:d5fa2ac5108a1585 indirect=1:d5fa2ac5108a1585 +provenance geometry 0..1: /World/Ball +provenance spheres: [0] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/World/Cam"), cameras: ["/World/Cam"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/World/Cam"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/plane_usda-e5035e45dccaf24c-1.image b/crates/crust-core/tests/data/import_baselines/plane_usda-e5035e45dccaf24c-1.image new file mode 100644 index 000000000..c734c5b1d --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/plane_usda-e5035e45dccaf24c-1.image @@ -0,0 +1 @@ +640x360 16spp clamp-off a04a09c0d4b5e325 diff --git a/crates/crust-core/tests/data/import_baselines/planes_usda-b941e449ca4a031a-1.digest b/crates/crust-core/tests/data/import_baselines/planes_usda-b941e449ca4a031a-1.digest new file mode 100644 index 000000000..992d069d1 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/planes_usda-b941e449ca4a031a-1.digest @@ -0,0 +1,19 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/World/Cam") +camera: Camera { origin: Vec3A(0.0, 0.0, 5.0), lower_left_corner: Vec3A(-0.27183646, -0.15290801, -5.0), horizontal: Vec3A(0.5436729, 0.0, 0.0), vertical: Vec3A(0.0, 0.30581602, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, -1.0, 4.0), Vec4(0.0, 0.0, -1.0, 4.0), Vec4(0.0, 0.0, -1.0, 4.0), Vec4(0.0, 0.0, -1.0, 4.0), Vec4(0.0, 0.0, -1.0, 4.0), Vec4(0.0, 0.0, -1.0, 4.0), Vec4(0.0, 0.0, -1.0, 4.0), Vec4(0.0, 0.0, -1.0, 4.0)], count: 8 } } +settings prim: None +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 640, height: 360, region: PixelRect { x0: 0, y0: 0, x1: 640, y1: 360 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 500.0, aperture: [20.955, 15.2908], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 10.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/planes.usda"], invisible_overrides: Some(0) } +layer: $DIR/planes.usda +warning: Warning { code: CameraTooManyClippingPlanes, kind: Approximated, count: 1, prims: ["/World/Cam"], message: "/World/Cam: clippingPlanes authors 9 planes; crust honours the first 8 and ignores the other 1" } +lights: 0 +volumes: 0 +world: 1 geometries, PrimitiveBreakdown { triangles: 0, spheres: 1, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 0, spheres: 1, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:d5fa2ac5108a1585 camera=1:d5fa2ac5108a1585 shadow=1:d5fa2ac5108a1585 indirect=1:d5fa2ac5108a1585 +provenance geometry 0..1: /World/Ball +provenance spheres: [0] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/World/Cam"), cameras: ["/World/Cam"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/World/Cam"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/planes_usda-b941e449ca4a031a-1.image b/crates/crust-core/tests/data/import_baselines/planes_usda-b941e449ca4a031a-1.image new file mode 100644 index 000000000..c734c5b1d --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/planes_usda-b941e449ca4a031a-1.image @@ -0,0 +1 @@ +640x360 16spp clamp-off a04a09c0d4b5e325 diff --git a/crates/crust-core/tests/data/import_baselines/plants_usda-13efccc9d3dd87ec-1.digest b/crates/crust-core/tests/data/import_baselines/plants_usda-13efccc9d3dd87ec-1.digest new file mode 100644 index 000000000..4d2ff1c48 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/plants_usda-13efccc9d3dd87ec-1.digest @@ -0,0 +1,25 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/World/Cam") +camera: Camera { origin: Vec3A(1.0, 0.0, 10.0), lower_left_corner: Vec3A(-1.7183647, -1.5290802, 0.0), horizontal: Vec3A(5.4367294, 0.0, 0.0), vertical: Vec3A(0.0, 3.0581603, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: None +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 640, height: 360, region: PixelRect { x0: 0, y0: 0, x1: 640, y1: 360 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 50.0, aperture: [20.955, 15.2908], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 10.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/plants.usda"], invisible_overrides: Some(0) } +layer: $DIR/plants.usda +lights: 0 +volumes: 0 +world: 5 geometries, PrimitiveBreakdown { triangles: 0, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 5 } top level, PrimitiveBreakdown { triangles: 2, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 8 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=6:7ca69eda007f03f8 camera=6:7ca69eda007f03f8 shadow=6:7ca69eda007f03f8 indirect=6:7ca69eda007f03f8 +geom 1: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=6:1994446865d41765 camera=6:1994446865d41765 shadow=6:1994446865d41765 indirect=6:1994446865d41765 +geom 2: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:61e4350a67ec8255 camera=2:61e4350a67ec8255 shadow=2:61e4350a67ec8255 indirect=2:61e4350a67ec8255 +geom 3: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:802f8cea72d34ba8 camera=2:802f8cea72d34ba8 shadow=2:802f8cea72d34ba8 indirect=2:802f8cea72d34ba8 +geom 4: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:6b2659e60b0616d8 camera=2:6b2659e60b0616d8 shadow=2:6b2659e60b0616d8 indirect=2:6b2659e60b0616d8 +provenance geometry 0..1: /World/B +provenance geometry 1..2: /World/A +provenance geometry 2..5: /Plant/Leaves +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 11573210918765220906, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 0 }), placements: 0, shared: true, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/World/Cam"), cameras: ["/World/Cam"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/World/Cam"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/plants_usda-13efccc9d3dd87ec-1.image b/crates/crust-core/tests/data/import_baselines/plants_usda-13efccc9d3dd87ec-1.image new file mode 100644 index 000000000..c734c5b1d --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/plants_usda-13efccc9d3dd87ec-1.image @@ -0,0 +1 @@ +640x360 16spp clamp-off a04a09c0d4b5e325 diff --git a/crates/crust-core/tests/data/import_baselines/plastic_0_1_bsdf_1_usda-bd800d4fcb330be2-1.digest b/crates/crust-core/tests/data/import_baselines/plastic_0_1_bsdf_1_usda-bd800d4fcb330be2-1.digest new file mode 100644 index 000000000..20470bf47 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/plastic_0_1_bsdf_1_usda-bd800d4fcb330be2-1.digest @@ -0,0 +1,27 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/World/Cam") +camera: Camera { origin: Vec3A(0.0, 5.0, 6.0), lower_left_corner: Vec3A(-2.0000002, -2.9376645, -0.40261602), horizontal: Vec3A(4.0000005, -0.0, 0.0), vertical: Vec3A(0.0, 3.0731347, -2.560439), u: Vec3A(1.0, -0.0, 0.0), v: Vec3A(0.0, 0.76828355, -0.6401097), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: Some("/Render/settings") +settings: RenderSettings { samples_per_pixel: 16, max_depth: 2, width: 16, height: 16, region: PixelRect { x0: 0, y0: 0, x1: 16, y1: 16 }, min_samples_per_pixel: 16, variance_threshold: 0.0, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: BsdfOnly, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: None, light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 50.0, aperture: [20.0, 20.0], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 10.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/plastic_0_1_bsdf_1.usda"], invisible_overrides: Some(0) } +layer: $DIR/plastic_0_1_bsdf_1.usda +lights: 2 +light 0: distant name Some("/World/Sun") lpe None pmf 0.5 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 0.0, specular: 1.0 } +light 1: area name Some("/World/Key") lpe None pmf 0.5 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 0.0, specular: 1.0 } +volumes: 0 +world: 2 geometries, PrimitiveBreakdown { triangles: 2, spheres: 1, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 2, spheres: 1, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +geom 0: material #0 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:ca080854f0bf27b5 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=1:ca080854f0bf27b5 +geom 1: material #1 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:fce6de5b675a55c5 camera=2:fce6de5b675a55c5 shadow=2:fce6de5b675a55c5 indirect=2:fce6de5b675a55c5 +provenance material /World/M: MaterialOrigin { slots: [1], displaced: false } +provenance light /World/Key: LightOrigin { index: 1, geoms: 0..1 } +provenance light /World/Sun: LightOrigin { index: 0, geoms: 0..0 } +provenance geometry 0..1: /World/Key +provenance geometry 1..2: /World/Floor +provenance mesh: MeshOrigin { geom_id: 1, slot: 0, baked: true, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 14903623499644419787, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/World/Cam"), cameras: ["/World/Cam"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/World/Cam"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/plastic_0_1_bsdf_1_usda-bd800d4fcb330be2-1.image b/crates/crust-core/tests/data/import_baselines/plastic_0_1_bsdf_1_usda-bd800d4fcb330be2-1.image new file mode 100644 index 000000000..d009d4b09 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/plastic_0_1_bsdf_1_usda-bd800d4fcb330be2-1.image @@ -0,0 +1 @@ +16x16 16spp clamp-off 6fc2c70be97b3dbb diff --git a/crates/crust-core/tests/data/import_baselines/plastic_0_1_light_1_usda-a03210c9831fba26-1.digest b/crates/crust-core/tests/data/import_baselines/plastic_0_1_light_1_usda-a03210c9831fba26-1.digest new file mode 100644 index 000000000..a90e73ce4 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/plastic_0_1_light_1_usda-a03210c9831fba26-1.digest @@ -0,0 +1,27 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/World/Cam") +camera: Camera { origin: Vec3A(0.0, 5.0, 6.0), lower_left_corner: Vec3A(-2.0000002, -2.9376645, -0.40261602), horizontal: Vec3A(4.0000005, -0.0, 0.0), vertical: Vec3A(0.0, 3.0731347, -2.560439), u: Vec3A(1.0, -0.0, 0.0), v: Vec3A(0.0, 0.76828355, -0.6401097), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: Some("/Render/settings") +settings: RenderSettings { samples_per_pixel: 16, max_depth: 2, width: 16, height: 16, region: PixelRect { x0: 0, y0: 0, x1: 16, y1: 16 }, min_samples_per_pixel: 16, variance_threshold: 0.0, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: LightOnly, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: None, light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 50.0, aperture: [20.0, 20.0], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 10.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/plastic_0_1_light_1.usda"], invisible_overrides: Some(0) } +layer: $DIR/plastic_0_1_light_1.usda +lights: 2 +light 0: distant name Some("/World/Sun") lpe None pmf 0.5 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 0.0, specular: 1.0 } +light 1: area name Some("/World/Key") lpe None pmf 0.5 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 0.0, specular: 1.0 } +volumes: 0 +world: 2 geometries, PrimitiveBreakdown { triangles: 2, spheres: 1, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 2, spheres: 1, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +geom 0: material #0 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:ca080854f0bf27b5 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=1:ca080854f0bf27b5 +geom 1: material #1 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:fce6de5b675a55c5 camera=2:fce6de5b675a55c5 shadow=2:fce6de5b675a55c5 indirect=2:fce6de5b675a55c5 +provenance material /World/M: MaterialOrigin { slots: [1], displaced: false } +provenance light /World/Key: LightOrigin { index: 1, geoms: 0..1 } +provenance light /World/Sun: LightOrigin { index: 0, geoms: 0..0 } +provenance geometry 0..1: /World/Key +provenance geometry 1..2: /World/Floor +provenance mesh: MeshOrigin { geom_id: 1, slot: 0, baked: true, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 14903623499644419787, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/World/Cam"), cameras: ["/World/Cam"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/World/Cam"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/plastic_0_1_light_1_usda-a03210c9831fba26-1.image b/crates/crust-core/tests/data/import_baselines/plastic_0_1_light_1_usda-a03210c9831fba26-1.image new file mode 100644 index 000000000..d79302eb6 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/plastic_0_1_light_1_usda-a03210c9831fba26-1.image @@ -0,0 +1 @@ +16x16 16spp clamp-off 83405fcd4dc76a65 diff --git a/crates/crust-core/tests/data/import_baselines/plastic_0_1_power_1_usda-482542fae980bf52-1.digest b/crates/crust-core/tests/data/import_baselines/plastic_0_1_power_1_usda-482542fae980bf52-1.digest new file mode 100644 index 000000000..725802db0 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/plastic_0_1_power_1_usda-482542fae980bf52-1.digest @@ -0,0 +1,27 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/World/Cam") +camera: Camera { origin: Vec3A(0.0, 5.0, 6.0), lower_left_corner: Vec3A(-2.0000002, -2.9376645, -0.40261602), horizontal: Vec3A(4.0000005, -0.0, 0.0), vertical: Vec3A(0.0, 3.0731347, -2.560439), u: Vec3A(1.0, -0.0, 0.0), v: Vec3A(0.0, 0.76828355, -0.6401097), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: Some("/Render/settings") +settings: RenderSettings { samples_per_pixel: 16, max_depth: 2, width: 16, height: 16, region: PixelRect { x0: 0, y0: 0, x1: 16, y1: 16 }, min_samples_per_pixel: 16, variance_threshold: 0.0, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: None, light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 50.0, aperture: [20.0, 20.0], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 10.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/plastic_0_1_power_1.usda"], invisible_overrides: Some(0) } +layer: $DIR/plastic_0_1_power_1.usda +lights: 2 +light 0: distant name Some("/World/Sun") lpe None pmf 0.5 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 0.0, specular: 1.0 } +light 1: area name Some("/World/Key") lpe None pmf 0.5 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 0.0, specular: 1.0 } +volumes: 0 +world: 2 geometries, PrimitiveBreakdown { triangles: 2, spheres: 1, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 2, spheres: 1, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +geom 0: material #0 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:ca080854f0bf27b5 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=1:ca080854f0bf27b5 +geom 1: material #1 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:fce6de5b675a55c5 camera=2:fce6de5b675a55c5 shadow=2:fce6de5b675a55c5 indirect=2:fce6de5b675a55c5 +provenance material /World/M: MaterialOrigin { slots: [1], displaced: false } +provenance light /World/Key: LightOrigin { index: 1, geoms: 0..1 } +provenance light /World/Sun: LightOrigin { index: 0, geoms: 0..0 } +provenance geometry 0..1: /World/Key +provenance geometry 1..2: /World/Floor +provenance mesh: MeshOrigin { geom_id: 1, slot: 0, baked: true, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 14903623499644419787, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/World/Cam"), cameras: ["/World/Cam"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/World/Cam"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/plastic_0_1_power_1_usda-482542fae980bf52-1.image b/crates/crust-core/tests/data/import_baselines/plastic_0_1_power_1_usda-482542fae980bf52-1.image new file mode 100644 index 000000000..857961466 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/plastic_0_1_power_1_usda-482542fae980bf52-1.image @@ -0,0 +1 @@ +16x16 16spp clamp-off da7ac3c5a2eedfbd diff --git a/crates/crust-core/tests/data/import_baselines/plastic_0_25_3_bsdf_1_usda-36e5cb22b2676a41-1.digest b/crates/crust-core/tests/data/import_baselines/plastic_0_25_3_bsdf_1_usda-36e5cb22b2676a41-1.digest new file mode 100644 index 000000000..d3a62be2e --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/plastic_0_25_3_bsdf_1_usda-36e5cb22b2676a41-1.digest @@ -0,0 +1,27 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/World/Cam") +camera: Camera { origin: Vec3A(0.0, 5.0, 6.0), lower_left_corner: Vec3A(-2.0000002, -2.9376645, -0.40261602), horizontal: Vec3A(4.0000005, -0.0, 0.0), vertical: Vec3A(0.0, 3.0731347, -2.560439), u: Vec3A(1.0, -0.0, 0.0), v: Vec3A(0.0, 0.76828355, -0.6401097), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: Some("/Render/settings") +settings: RenderSettings { samples_per_pixel: 16, max_depth: 2, width: 16, height: 16, region: PixelRect { x0: 0, y0: 0, x1: 16, y1: 16 }, min_samples_per_pixel: 16, variance_threshold: 0.0, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: BsdfOnly, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: None, light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 50.0, aperture: [20.0, 20.0], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 10.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/plastic_0.25_3_bsdf_1.usda"], invisible_overrides: Some(0) } +layer: $DIR/plastic_0.25_3_bsdf_1.usda +lights: 2 +light 0: distant name Some("/World/Sun") lpe None pmf 0.5 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 0.25, specular: 3.0 } +light 1: area name Some("/World/Key") lpe None pmf 0.5 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 0.25, specular: 3.0 } +volumes: 0 +world: 2 geometries, PrimitiveBreakdown { triangles: 2, spheres: 1, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 2, spheres: 1, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +geom 0: material #0 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:ca080854f0bf27b5 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=1:ca080854f0bf27b5 +geom 1: material #1 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:fce6de5b675a55c5 camera=2:fce6de5b675a55c5 shadow=2:fce6de5b675a55c5 indirect=2:fce6de5b675a55c5 +provenance material /World/M: MaterialOrigin { slots: [1], displaced: false } +provenance light /World/Key: LightOrigin { index: 1, geoms: 0..1 } +provenance light /World/Sun: LightOrigin { index: 0, geoms: 0..0 } +provenance geometry 0..1: /World/Key +provenance geometry 1..2: /World/Floor +provenance mesh: MeshOrigin { geom_id: 1, slot: 0, baked: true, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 14903623499644419787, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/World/Cam"), cameras: ["/World/Cam"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/World/Cam"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/plastic_0_25_3_bsdf_1_usda-36e5cb22b2676a41-1.image b/crates/crust-core/tests/data/import_baselines/plastic_0_25_3_bsdf_1_usda-36e5cb22b2676a41-1.image new file mode 100644 index 000000000..0caa0030c --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/plastic_0_25_3_bsdf_1_usda-36e5cb22b2676a41-1.image @@ -0,0 +1 @@ +16x16 16spp clamp-off e603e3c3be9e9707 diff --git a/crates/crust-core/tests/data/import_baselines/plastic_0_25_3_bsdf_1_usda-d38160b2be22e70c-1.digest b/crates/crust-core/tests/data/import_baselines/plastic_0_25_3_bsdf_1_usda-d38160b2be22e70c-1.digest new file mode 100644 index 000000000..d3a62be2e --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/plastic_0_25_3_bsdf_1_usda-d38160b2be22e70c-1.digest @@ -0,0 +1,27 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/World/Cam") +camera: Camera { origin: Vec3A(0.0, 5.0, 6.0), lower_left_corner: Vec3A(-2.0000002, -2.9376645, -0.40261602), horizontal: Vec3A(4.0000005, -0.0, 0.0), vertical: Vec3A(0.0, 3.0731347, -2.560439), u: Vec3A(1.0, -0.0, 0.0), v: Vec3A(0.0, 0.76828355, -0.6401097), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: Some("/Render/settings") +settings: RenderSettings { samples_per_pixel: 16, max_depth: 2, width: 16, height: 16, region: PixelRect { x0: 0, y0: 0, x1: 16, y1: 16 }, min_samples_per_pixel: 16, variance_threshold: 0.0, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: BsdfOnly, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: None, light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 50.0, aperture: [20.0, 20.0], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 10.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/plastic_0.25_3_bsdf_1.usda"], invisible_overrides: Some(0) } +layer: $DIR/plastic_0.25_3_bsdf_1.usda +lights: 2 +light 0: distant name Some("/World/Sun") lpe None pmf 0.5 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 0.25, specular: 3.0 } +light 1: area name Some("/World/Key") lpe None pmf 0.5 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 0.25, specular: 3.0 } +volumes: 0 +world: 2 geometries, PrimitiveBreakdown { triangles: 2, spheres: 1, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 2, spheres: 1, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +geom 0: material #0 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:ca080854f0bf27b5 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=1:ca080854f0bf27b5 +geom 1: material #1 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:fce6de5b675a55c5 camera=2:fce6de5b675a55c5 shadow=2:fce6de5b675a55c5 indirect=2:fce6de5b675a55c5 +provenance material /World/M: MaterialOrigin { slots: [1], displaced: false } +provenance light /World/Key: LightOrigin { index: 1, geoms: 0..1 } +provenance light /World/Sun: LightOrigin { index: 0, geoms: 0..0 } +provenance geometry 0..1: /World/Key +provenance geometry 1..2: /World/Floor +provenance mesh: MeshOrigin { geom_id: 1, slot: 0, baked: true, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 14903623499644419787, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/World/Cam"), cameras: ["/World/Cam"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/World/Cam"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/plastic_0_25_3_bsdf_1_usda-d38160b2be22e70c-1.image b/crates/crust-core/tests/data/import_baselines/plastic_0_25_3_bsdf_1_usda-d38160b2be22e70c-1.image new file mode 100644 index 000000000..0caa0030c --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/plastic_0_25_3_bsdf_1_usda-d38160b2be22e70c-1.image @@ -0,0 +1 @@ +16x16 16spp clamp-off e603e3c3be9e9707 diff --git a/crates/crust-core/tests/data/import_baselines/plastic_0_25_3_bsdf_2_usda-78a7411a4858bc6b-1.digest b/crates/crust-core/tests/data/import_baselines/plastic_0_25_3_bsdf_2_usda-78a7411a4858bc6b-1.digest new file mode 100644 index 000000000..98c662fff --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/plastic_0_25_3_bsdf_2_usda-78a7411a4858bc6b-1.digest @@ -0,0 +1,27 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/World/Cam") +camera: Camera { origin: Vec3A(0.0, 5.0, 6.0), lower_left_corner: Vec3A(-2.0000002, -2.9376645, -0.40261602), horizontal: Vec3A(4.0000005, -0.0, 0.0), vertical: Vec3A(0.0, 3.0731347, -2.560439), u: Vec3A(1.0, -0.0, 0.0), v: Vec3A(0.0, 0.76828355, -0.6401097), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: Some("/Render/settings") +settings: RenderSettings { samples_per_pixel: 16, max_depth: 2, width: 16, height: 16, region: PixelRect { x0: 0, y0: 0, x1: 16, y1: 16 }, min_samples_per_pixel: 16, variance_threshold: 0.0, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: BsdfOnly, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: None, light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 50.0, aperture: [20.0, 20.0], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 10.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/plastic_0.25_3_bsdf_2.usda"], invisible_overrides: Some(0) } +layer: $DIR/plastic_0.25_3_bsdf_2.usda +lights: 2 +light 0: distant name Some("/World/Sun") lpe None pmf 0.5 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 0.25, specular: 3.0 } +light 1: area name Some("/World/Key") lpe None pmf 0.5 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 0.25, specular: 3.0 } +volumes: 0 +world: 2 geometries, PrimitiveBreakdown { triangles: 2, spheres: 1, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 2, spheres: 1, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +geom 0: material #0 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:ca080854f0bf27b5 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=1:ca080854f0bf27b5 +geom 1: material #1 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:fce6de5b675a55c5 camera=2:fce6de5b675a55c5 shadow=2:fce6de5b675a55c5 indirect=2:fce6de5b675a55c5 +provenance material /World/M: MaterialOrigin { slots: [1], displaced: false } +provenance light /World/Key: LightOrigin { index: 1, geoms: 0..1 } +provenance light /World/Sun: LightOrigin { index: 0, geoms: 0..0 } +provenance geometry 0..1: /World/Key +provenance geometry 1..2: /World/Floor +provenance mesh: MeshOrigin { geom_id: 1, slot: 0, baked: true, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 14903623499644419787, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/World/Cam"), cameras: ["/World/Cam"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/World/Cam"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/plastic_0_25_3_bsdf_2_usda-78a7411a4858bc6b-1.image b/crates/crust-core/tests/data/import_baselines/plastic_0_25_3_bsdf_2_usda-78a7411a4858bc6b-1.image new file mode 100644 index 000000000..0caa0030c --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/plastic_0_25_3_bsdf_2_usda-78a7411a4858bc6b-1.image @@ -0,0 +1 @@ +16x16 16spp clamp-off e603e3c3be9e9707 diff --git a/crates/crust-core/tests/data/import_baselines/plastic_0_25_3_bsdf_3_usda-f81a4b161903a8f2-1.digest b/crates/crust-core/tests/data/import_baselines/plastic_0_25_3_bsdf_3_usda-f81a4b161903a8f2-1.digest new file mode 100644 index 000000000..09547cee7 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/plastic_0_25_3_bsdf_3_usda-f81a4b161903a8f2-1.digest @@ -0,0 +1,27 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/World/Cam") +camera: Camera { origin: Vec3A(0.0, 5.0, 6.0), lower_left_corner: Vec3A(-2.0000002, -2.9376645, -0.40261602), horizontal: Vec3A(4.0000005, -0.0, 0.0), vertical: Vec3A(0.0, 3.0731347, -2.560439), u: Vec3A(1.0, -0.0, 0.0), v: Vec3A(0.0, 0.76828355, -0.6401097), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: Some("/Render/settings") +settings: RenderSettings { samples_per_pixel: 16, max_depth: 2, width: 16, height: 16, region: PixelRect { x0: 0, y0: 0, x1: 16, y1: 16 }, min_samples_per_pixel: 16, variance_threshold: 0.0, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: BsdfOnly, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: None, light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 50.0, aperture: [20.0, 20.0], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 10.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/plastic_0.25_3_bsdf_3.usda"], invisible_overrides: Some(0) } +layer: $DIR/plastic_0.25_3_bsdf_3.usda +lights: 2 +light 0: distant name Some("/World/Sun") lpe None pmf 0.5 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 0.25, specular: 3.0 } +light 1: area name Some("/World/Key") lpe None pmf 0.5 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 0.25, specular: 3.0 } +volumes: 0 +world: 2 geometries, PrimitiveBreakdown { triangles: 2, spheres: 1, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 2, spheres: 1, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +geom 0: material #0 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:ca080854f0bf27b5 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=1:ca080854f0bf27b5 +geom 1: material #1 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:fce6de5b675a55c5 camera=2:fce6de5b675a55c5 shadow=2:fce6de5b675a55c5 indirect=2:fce6de5b675a55c5 +provenance material /World/M: MaterialOrigin { slots: [1], displaced: false } +provenance light /World/Key: LightOrigin { index: 1, geoms: 0..1 } +provenance light /World/Sun: LightOrigin { index: 0, geoms: 0..0 } +provenance geometry 0..1: /World/Key +provenance geometry 1..2: /World/Floor +provenance mesh: MeshOrigin { geom_id: 1, slot: 0, baked: true, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 14903623499644419787, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/World/Cam"), cameras: ["/World/Cam"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/World/Cam"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/plastic_0_25_3_bsdf_3_usda-f81a4b161903a8f2-1.image b/crates/crust-core/tests/data/import_baselines/plastic_0_25_3_bsdf_3_usda-f81a4b161903a8f2-1.image new file mode 100644 index 000000000..0caa0030c --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/plastic_0_25_3_bsdf_3_usda-f81a4b161903a8f2-1.image @@ -0,0 +1 @@ +16x16 16spp clamp-off e603e3c3be9e9707 diff --git a/crates/crust-core/tests/data/import_baselines/plastic_0_25_3_bsdf_4_usda-87a5b5e826a38a61-1.digest b/crates/crust-core/tests/data/import_baselines/plastic_0_25_3_bsdf_4_usda-87a5b5e826a38a61-1.digest new file mode 100644 index 000000000..2445c3e5d --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/plastic_0_25_3_bsdf_4_usda-87a5b5e826a38a61-1.digest @@ -0,0 +1,27 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/World/Cam") +camera: Camera { origin: Vec3A(0.0, 5.0, 6.0), lower_left_corner: Vec3A(-2.0000002, -2.9376645, -0.40261602), horizontal: Vec3A(4.0000005, -0.0, 0.0), vertical: Vec3A(0.0, 3.0731347, -2.560439), u: Vec3A(1.0, -0.0, 0.0), v: Vec3A(0.0, 0.76828355, -0.6401097), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: Some("/Render/settings") +settings: RenderSettings { samples_per_pixel: 16, max_depth: 2, width: 16, height: 16, region: PixelRect { x0: 0, y0: 0, x1: 16, y1: 16 }, min_samples_per_pixel: 16, variance_threshold: 0.0, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: BsdfOnly, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: None, light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 50.0, aperture: [20.0, 20.0], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 10.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/plastic_0.25_3_bsdf_4.usda"], invisible_overrides: Some(0) } +layer: $DIR/plastic_0.25_3_bsdf_4.usda +lights: 2 +light 0: distant name Some("/World/Sun") lpe None pmf 0.5 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 0.25, specular: 3.0 } +light 1: area name Some("/World/Key") lpe None pmf 0.5 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 0.25, specular: 3.0 } +volumes: 0 +world: 2 geometries, PrimitiveBreakdown { triangles: 2, spheres: 1, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 2, spheres: 1, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +geom 0: material #0 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:ca080854f0bf27b5 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=1:ca080854f0bf27b5 +geom 1: material #1 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:fce6de5b675a55c5 camera=2:fce6de5b675a55c5 shadow=2:fce6de5b675a55c5 indirect=2:fce6de5b675a55c5 +provenance material /World/M: MaterialOrigin { slots: [1], displaced: false } +provenance light /World/Key: LightOrigin { index: 1, geoms: 0..1 } +provenance light /World/Sun: LightOrigin { index: 0, geoms: 0..0 } +provenance geometry 0..1: /World/Key +provenance geometry 1..2: /World/Floor +provenance mesh: MeshOrigin { geom_id: 1, slot: 0, baked: true, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 14903623499644419787, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/World/Cam"), cameras: ["/World/Cam"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/World/Cam"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/plastic_0_25_3_bsdf_4_usda-87a5b5e826a38a61-1.image b/crates/crust-core/tests/data/import_baselines/plastic_0_25_3_bsdf_4_usda-87a5b5e826a38a61-1.image new file mode 100644 index 000000000..0caa0030c --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/plastic_0_25_3_bsdf_4_usda-87a5b5e826a38a61-1.image @@ -0,0 +1 @@ +16x16 16spp clamp-off e603e3c3be9e9707 diff --git a/crates/crust-core/tests/data/import_baselines/plastic_0_25_3_light_1_usda-135d2f963daf2551-1.digest b/crates/crust-core/tests/data/import_baselines/plastic_0_25_3_light_1_usda-135d2f963daf2551-1.digest new file mode 100644 index 000000000..e96e763fb --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/plastic_0_25_3_light_1_usda-135d2f963daf2551-1.digest @@ -0,0 +1,27 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/World/Cam") +camera: Camera { origin: Vec3A(0.0, 5.0, 6.0), lower_left_corner: Vec3A(-2.0000002, -2.9376645, -0.40261602), horizontal: Vec3A(4.0000005, -0.0, 0.0), vertical: Vec3A(0.0, 3.0731347, -2.560439), u: Vec3A(1.0, -0.0, 0.0), v: Vec3A(0.0, 0.76828355, -0.6401097), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: Some("/Render/settings") +settings: RenderSettings { samples_per_pixel: 16, max_depth: 2, width: 16, height: 16, region: PixelRect { x0: 0, y0: 0, x1: 16, y1: 16 }, min_samples_per_pixel: 16, variance_threshold: 0.0, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: LightOnly, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: None, light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 50.0, aperture: [20.0, 20.0], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 10.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/plastic_0.25_3_light_1.usda"], invisible_overrides: Some(0) } +layer: $DIR/plastic_0.25_3_light_1.usda +lights: 2 +light 0: distant name Some("/World/Sun") lpe None pmf 0.5 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 0.25, specular: 3.0 } +light 1: area name Some("/World/Key") lpe None pmf 0.5 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 0.25, specular: 3.0 } +volumes: 0 +world: 2 geometries, PrimitiveBreakdown { triangles: 2, spheres: 1, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 2, spheres: 1, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +geom 0: material #0 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:ca080854f0bf27b5 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=1:ca080854f0bf27b5 +geom 1: material #1 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:fce6de5b675a55c5 camera=2:fce6de5b675a55c5 shadow=2:fce6de5b675a55c5 indirect=2:fce6de5b675a55c5 +provenance material /World/M: MaterialOrigin { slots: [1], displaced: false } +provenance light /World/Key: LightOrigin { index: 1, geoms: 0..1 } +provenance light /World/Sun: LightOrigin { index: 0, geoms: 0..0 } +provenance geometry 0..1: /World/Key +provenance geometry 1..2: /World/Floor +provenance mesh: MeshOrigin { geom_id: 1, slot: 0, baked: true, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 14903623499644419787, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/World/Cam"), cameras: ["/World/Cam"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/World/Cam"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/plastic_0_25_3_light_1_usda-135d2f963daf2551-1.image b/crates/crust-core/tests/data/import_baselines/plastic_0_25_3_light_1_usda-135d2f963daf2551-1.image new file mode 100644 index 000000000..72f7d2a8d --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/plastic_0_25_3_light_1_usda-135d2f963daf2551-1.image @@ -0,0 +1 @@ +16x16 16spp clamp-off 5b8e972effbc77b4 diff --git a/crates/crust-core/tests/data/import_baselines/plastic_0_25_3_light_1_usda-cf1431b5a2f0391c-1.digest b/crates/crust-core/tests/data/import_baselines/plastic_0_25_3_light_1_usda-cf1431b5a2f0391c-1.digest new file mode 100644 index 000000000..e96e763fb --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/plastic_0_25_3_light_1_usda-cf1431b5a2f0391c-1.digest @@ -0,0 +1,27 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/World/Cam") +camera: Camera { origin: Vec3A(0.0, 5.0, 6.0), lower_left_corner: Vec3A(-2.0000002, -2.9376645, -0.40261602), horizontal: Vec3A(4.0000005, -0.0, 0.0), vertical: Vec3A(0.0, 3.0731347, -2.560439), u: Vec3A(1.0, -0.0, 0.0), v: Vec3A(0.0, 0.76828355, -0.6401097), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: Some("/Render/settings") +settings: RenderSettings { samples_per_pixel: 16, max_depth: 2, width: 16, height: 16, region: PixelRect { x0: 0, y0: 0, x1: 16, y1: 16 }, min_samples_per_pixel: 16, variance_threshold: 0.0, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: LightOnly, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: None, light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 50.0, aperture: [20.0, 20.0], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 10.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/plastic_0.25_3_light_1.usda"], invisible_overrides: Some(0) } +layer: $DIR/plastic_0.25_3_light_1.usda +lights: 2 +light 0: distant name Some("/World/Sun") lpe None pmf 0.5 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 0.25, specular: 3.0 } +light 1: area name Some("/World/Key") lpe None pmf 0.5 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 0.25, specular: 3.0 } +volumes: 0 +world: 2 geometries, PrimitiveBreakdown { triangles: 2, spheres: 1, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 2, spheres: 1, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +geom 0: material #0 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:ca080854f0bf27b5 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=1:ca080854f0bf27b5 +geom 1: material #1 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:fce6de5b675a55c5 camera=2:fce6de5b675a55c5 shadow=2:fce6de5b675a55c5 indirect=2:fce6de5b675a55c5 +provenance material /World/M: MaterialOrigin { slots: [1], displaced: false } +provenance light /World/Key: LightOrigin { index: 1, geoms: 0..1 } +provenance light /World/Sun: LightOrigin { index: 0, geoms: 0..0 } +provenance geometry 0..1: /World/Key +provenance geometry 1..2: /World/Floor +provenance mesh: MeshOrigin { geom_id: 1, slot: 0, baked: true, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 14903623499644419787, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/World/Cam"), cameras: ["/World/Cam"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/World/Cam"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/plastic_0_25_3_light_1_usda-cf1431b5a2f0391c-1.image b/crates/crust-core/tests/data/import_baselines/plastic_0_25_3_light_1_usda-cf1431b5a2f0391c-1.image new file mode 100644 index 000000000..72f7d2a8d --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/plastic_0_25_3_light_1_usda-cf1431b5a2f0391c-1.image @@ -0,0 +1 @@ +16x16 16spp clamp-off 5b8e972effbc77b4 diff --git a/crates/crust-core/tests/data/import_baselines/plastic_0_25_3_light_2_usda-c1e873bea9886ca9-1.digest b/crates/crust-core/tests/data/import_baselines/plastic_0_25_3_light_2_usda-c1e873bea9886ca9-1.digest new file mode 100644 index 000000000..9fde13139 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/plastic_0_25_3_light_2_usda-c1e873bea9886ca9-1.digest @@ -0,0 +1,27 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/World/Cam") +camera: Camera { origin: Vec3A(0.0, 5.0, 6.0), lower_left_corner: Vec3A(-2.0000002, -2.9376645, -0.40261602), horizontal: Vec3A(4.0000005, -0.0, 0.0), vertical: Vec3A(0.0, 3.0731347, -2.560439), u: Vec3A(1.0, -0.0, 0.0), v: Vec3A(0.0, 0.76828355, -0.6401097), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: Some("/Render/settings") +settings: RenderSettings { samples_per_pixel: 16, max_depth: 2, width: 16, height: 16, region: PixelRect { x0: 0, y0: 0, x1: 16, y1: 16 }, min_samples_per_pixel: 16, variance_threshold: 0.0, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: LightOnly, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: None, light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 50.0, aperture: [20.0, 20.0], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 10.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/plastic_0.25_3_light_2.usda"], invisible_overrides: Some(0) } +layer: $DIR/plastic_0.25_3_light_2.usda +lights: 2 +light 0: distant name Some("/World/Sun") lpe None pmf 0.5 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 0.25, specular: 3.0 } +light 1: area name Some("/World/Key") lpe None pmf 0.5 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 0.25, specular: 3.0 } +volumes: 0 +world: 2 geometries, PrimitiveBreakdown { triangles: 2, spheres: 1, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 2, spheres: 1, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +geom 0: material #0 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:ca080854f0bf27b5 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=1:ca080854f0bf27b5 +geom 1: material #1 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:fce6de5b675a55c5 camera=2:fce6de5b675a55c5 shadow=2:fce6de5b675a55c5 indirect=2:fce6de5b675a55c5 +provenance material /World/M: MaterialOrigin { slots: [1], displaced: false } +provenance light /World/Key: LightOrigin { index: 1, geoms: 0..1 } +provenance light /World/Sun: LightOrigin { index: 0, geoms: 0..0 } +provenance geometry 0..1: /World/Key +provenance geometry 1..2: /World/Floor +provenance mesh: MeshOrigin { geom_id: 1, slot: 0, baked: true, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 14903623499644419787, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/World/Cam"), cameras: ["/World/Cam"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/World/Cam"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/plastic_0_25_3_light_2_usda-c1e873bea9886ca9-1.image b/crates/crust-core/tests/data/import_baselines/plastic_0_25_3_light_2_usda-c1e873bea9886ca9-1.image new file mode 100644 index 000000000..72f7d2a8d --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/plastic_0_25_3_light_2_usda-c1e873bea9886ca9-1.image @@ -0,0 +1 @@ +16x16 16spp clamp-off 5b8e972effbc77b4 diff --git a/crates/crust-core/tests/data/import_baselines/plastic_0_25_3_light_3_usda-0dc30546dc7303fa-1.digest b/crates/crust-core/tests/data/import_baselines/plastic_0_25_3_light_3_usda-0dc30546dc7303fa-1.digest new file mode 100644 index 000000000..3e202a270 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/plastic_0_25_3_light_3_usda-0dc30546dc7303fa-1.digest @@ -0,0 +1,27 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/World/Cam") +camera: Camera { origin: Vec3A(0.0, 5.0, 6.0), lower_left_corner: Vec3A(-2.0000002, -2.9376645, -0.40261602), horizontal: Vec3A(4.0000005, -0.0, 0.0), vertical: Vec3A(0.0, 3.0731347, -2.560439), u: Vec3A(1.0, -0.0, 0.0), v: Vec3A(0.0, 0.76828355, -0.6401097), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: Some("/Render/settings") +settings: RenderSettings { samples_per_pixel: 16, max_depth: 2, width: 16, height: 16, region: PixelRect { x0: 0, y0: 0, x1: 16, y1: 16 }, min_samples_per_pixel: 16, variance_threshold: 0.0, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: LightOnly, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: None, light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 50.0, aperture: [20.0, 20.0], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 10.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/plastic_0.25_3_light_3.usda"], invisible_overrides: Some(0) } +layer: $DIR/plastic_0.25_3_light_3.usda +lights: 2 +light 0: distant name Some("/World/Sun") lpe None pmf 0.5 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 0.25, specular: 3.0 } +light 1: area name Some("/World/Key") lpe None pmf 0.5 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 0.25, specular: 3.0 } +volumes: 0 +world: 2 geometries, PrimitiveBreakdown { triangles: 2, spheres: 1, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 2, spheres: 1, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +geom 0: material #0 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:ca080854f0bf27b5 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=1:ca080854f0bf27b5 +geom 1: material #1 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:fce6de5b675a55c5 camera=2:fce6de5b675a55c5 shadow=2:fce6de5b675a55c5 indirect=2:fce6de5b675a55c5 +provenance material /World/M: MaterialOrigin { slots: [1], displaced: false } +provenance light /World/Key: LightOrigin { index: 1, geoms: 0..1 } +provenance light /World/Sun: LightOrigin { index: 0, geoms: 0..0 } +provenance geometry 0..1: /World/Key +provenance geometry 1..2: /World/Floor +provenance mesh: MeshOrigin { geom_id: 1, slot: 0, baked: true, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 14903623499644419787, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/World/Cam"), cameras: ["/World/Cam"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/World/Cam"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/plastic_0_25_3_light_3_usda-0dc30546dc7303fa-1.image b/crates/crust-core/tests/data/import_baselines/plastic_0_25_3_light_3_usda-0dc30546dc7303fa-1.image new file mode 100644 index 000000000..72f7d2a8d --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/plastic_0_25_3_light_3_usda-0dc30546dc7303fa-1.image @@ -0,0 +1 @@ +16x16 16spp clamp-off 5b8e972effbc77b4 diff --git a/crates/crust-core/tests/data/import_baselines/plastic_0_25_3_light_4_usda-306836af9dcd76c7-1.digest b/crates/crust-core/tests/data/import_baselines/plastic_0_25_3_light_4_usda-306836af9dcd76c7-1.digest new file mode 100644 index 000000000..7cbef9407 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/plastic_0_25_3_light_4_usda-306836af9dcd76c7-1.digest @@ -0,0 +1,27 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/World/Cam") +camera: Camera { origin: Vec3A(0.0, 5.0, 6.0), lower_left_corner: Vec3A(-2.0000002, -2.9376645, -0.40261602), horizontal: Vec3A(4.0000005, -0.0, 0.0), vertical: Vec3A(0.0, 3.0731347, -2.560439), u: Vec3A(1.0, -0.0, 0.0), v: Vec3A(0.0, 0.76828355, -0.6401097), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: Some("/Render/settings") +settings: RenderSettings { samples_per_pixel: 16, max_depth: 2, width: 16, height: 16, region: PixelRect { x0: 0, y0: 0, x1: 16, y1: 16 }, min_samples_per_pixel: 16, variance_threshold: 0.0, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: LightOnly, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: None, light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 50.0, aperture: [20.0, 20.0], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 10.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/plastic_0.25_3_light_4.usda"], invisible_overrides: Some(0) } +layer: $DIR/plastic_0.25_3_light_4.usda +lights: 2 +light 0: distant name Some("/World/Sun") lpe None pmf 0.5 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 0.25, specular: 3.0 } +light 1: area name Some("/World/Key") lpe None pmf 0.5 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 0.25, specular: 3.0 } +volumes: 0 +world: 2 geometries, PrimitiveBreakdown { triangles: 2, spheres: 1, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 2, spheres: 1, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +geom 0: material #0 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:ca080854f0bf27b5 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=1:ca080854f0bf27b5 +geom 1: material #1 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:fce6de5b675a55c5 camera=2:fce6de5b675a55c5 shadow=2:fce6de5b675a55c5 indirect=2:fce6de5b675a55c5 +provenance material /World/M: MaterialOrigin { slots: [1], displaced: false } +provenance light /World/Key: LightOrigin { index: 1, geoms: 0..1 } +provenance light /World/Sun: LightOrigin { index: 0, geoms: 0..0 } +provenance geometry 0..1: /World/Key +provenance geometry 1..2: /World/Floor +provenance mesh: MeshOrigin { geom_id: 1, slot: 0, baked: true, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 14903623499644419787, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/World/Cam"), cameras: ["/World/Cam"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/World/Cam"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/plastic_0_25_3_light_4_usda-306836af9dcd76c7-1.image b/crates/crust-core/tests/data/import_baselines/plastic_0_25_3_light_4_usda-306836af9dcd76c7-1.image new file mode 100644 index 000000000..72f7d2a8d --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/plastic_0_25_3_light_4_usda-306836af9dcd76c7-1.image @@ -0,0 +1 @@ +16x16 16spp clamp-off 5b8e972effbc77b4 diff --git a/crates/crust-core/tests/data/import_baselines/plastic_0_25_3_power_1_usda-aeace9cae6e95285-1.digest b/crates/crust-core/tests/data/import_baselines/plastic_0_25_3_power_1_usda-aeace9cae6e95285-1.digest new file mode 100644 index 000000000..999346796 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/plastic_0_25_3_power_1_usda-aeace9cae6e95285-1.digest @@ -0,0 +1,27 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/World/Cam") +camera: Camera { origin: Vec3A(0.0, 5.0, 6.0), lower_left_corner: Vec3A(-2.0000002, -2.9376645, -0.40261602), horizontal: Vec3A(4.0000005, -0.0, 0.0), vertical: Vec3A(0.0, 3.0731347, -2.560439), u: Vec3A(1.0, -0.0, 0.0), v: Vec3A(0.0, 0.76828355, -0.6401097), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: Some("/Render/settings") +settings: RenderSettings { samples_per_pixel: 16, max_depth: 2, width: 16, height: 16, region: PixelRect { x0: 0, y0: 0, x1: 16, y1: 16 }, min_samples_per_pixel: 16, variance_threshold: 0.0, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: None, light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 50.0, aperture: [20.0, 20.0], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 10.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/plastic_0.25_3_power_1.usda"], invisible_overrides: Some(0) } +layer: $DIR/plastic_0.25_3_power_1.usda +lights: 2 +light 0: distant name Some("/World/Sun") lpe None pmf 0.5 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 0.25, specular: 3.0 } +light 1: area name Some("/World/Key") lpe None pmf 0.5 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 0.25, specular: 3.0 } +volumes: 0 +world: 2 geometries, PrimitiveBreakdown { triangles: 2, spheres: 1, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 2, spheres: 1, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +geom 0: material #0 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:ca080854f0bf27b5 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=1:ca080854f0bf27b5 +geom 1: material #1 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:fce6de5b675a55c5 camera=2:fce6de5b675a55c5 shadow=2:fce6de5b675a55c5 indirect=2:fce6de5b675a55c5 +provenance material /World/M: MaterialOrigin { slots: [1], displaced: false } +provenance light /World/Key: LightOrigin { index: 1, geoms: 0..1 } +provenance light /World/Sun: LightOrigin { index: 0, geoms: 0..0 } +provenance geometry 0..1: /World/Key +provenance geometry 1..2: /World/Floor +provenance mesh: MeshOrigin { geom_id: 1, slot: 0, baked: true, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 14903623499644419787, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/World/Cam"), cameras: ["/World/Cam"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/World/Cam"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/plastic_0_25_3_power_1_usda-aeace9cae6e95285-1.image b/crates/crust-core/tests/data/import_baselines/plastic_0_25_3_power_1_usda-aeace9cae6e95285-1.image new file mode 100644 index 000000000..b01e6071e --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/plastic_0_25_3_power_1_usda-aeace9cae6e95285-1.image @@ -0,0 +1 @@ +16x16 16spp clamp-off bbc4bce34628e579 diff --git a/crates/crust-core/tests/data/import_baselines/plastic_0_25_3_power_1_usda-f2feafce67b9cc18-1.digest b/crates/crust-core/tests/data/import_baselines/plastic_0_25_3_power_1_usda-f2feafce67b9cc18-1.digest new file mode 100644 index 000000000..999346796 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/plastic_0_25_3_power_1_usda-f2feafce67b9cc18-1.digest @@ -0,0 +1,27 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/World/Cam") +camera: Camera { origin: Vec3A(0.0, 5.0, 6.0), lower_left_corner: Vec3A(-2.0000002, -2.9376645, -0.40261602), horizontal: Vec3A(4.0000005, -0.0, 0.0), vertical: Vec3A(0.0, 3.0731347, -2.560439), u: Vec3A(1.0, -0.0, 0.0), v: Vec3A(0.0, 0.76828355, -0.6401097), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: Some("/Render/settings") +settings: RenderSettings { samples_per_pixel: 16, max_depth: 2, width: 16, height: 16, region: PixelRect { x0: 0, y0: 0, x1: 16, y1: 16 }, min_samples_per_pixel: 16, variance_threshold: 0.0, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: None, light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 50.0, aperture: [20.0, 20.0], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 10.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/plastic_0.25_3_power_1.usda"], invisible_overrides: Some(0) } +layer: $DIR/plastic_0.25_3_power_1.usda +lights: 2 +light 0: distant name Some("/World/Sun") lpe None pmf 0.5 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 0.25, specular: 3.0 } +light 1: area name Some("/World/Key") lpe None pmf 0.5 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 0.25, specular: 3.0 } +volumes: 0 +world: 2 geometries, PrimitiveBreakdown { triangles: 2, spheres: 1, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 2, spheres: 1, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +geom 0: material #0 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:ca080854f0bf27b5 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=1:ca080854f0bf27b5 +geom 1: material #1 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:fce6de5b675a55c5 camera=2:fce6de5b675a55c5 shadow=2:fce6de5b675a55c5 indirect=2:fce6de5b675a55c5 +provenance material /World/M: MaterialOrigin { slots: [1], displaced: false } +provenance light /World/Key: LightOrigin { index: 1, geoms: 0..1 } +provenance light /World/Sun: LightOrigin { index: 0, geoms: 0..0 } +provenance geometry 0..1: /World/Key +provenance geometry 1..2: /World/Floor +provenance mesh: MeshOrigin { geom_id: 1, slot: 0, baked: true, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 14903623499644419787, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/World/Cam"), cameras: ["/World/Cam"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/World/Cam"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/plastic_0_25_3_power_1_usda-f2feafce67b9cc18-1.image b/crates/crust-core/tests/data/import_baselines/plastic_0_25_3_power_1_usda-f2feafce67b9cc18-1.image new file mode 100644 index 000000000..b01e6071e --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/plastic_0_25_3_power_1_usda-f2feafce67b9cc18-1.image @@ -0,0 +1 @@ +16x16 16spp clamp-off bbc4bce34628e579 diff --git a/crates/crust-core/tests/data/import_baselines/plastic_0_25_3_power_2_usda-9558069a3a6cb6c1-1.digest b/crates/crust-core/tests/data/import_baselines/plastic_0_25_3_power_2_usda-9558069a3a6cb6c1-1.digest new file mode 100644 index 000000000..9eb91b928 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/plastic_0_25_3_power_2_usda-9558069a3a6cb6c1-1.digest @@ -0,0 +1,27 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/World/Cam") +camera: Camera { origin: Vec3A(0.0, 5.0, 6.0), lower_left_corner: Vec3A(-2.0000002, -2.9376645, -0.40261602), horizontal: Vec3A(4.0000005, -0.0, 0.0), vertical: Vec3A(0.0, 3.0731347, -2.560439), u: Vec3A(1.0, -0.0, 0.0), v: Vec3A(0.0, 0.76828355, -0.6401097), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: Some("/Render/settings") +settings: RenderSettings { samples_per_pixel: 16, max_depth: 2, width: 16, height: 16, region: PixelRect { x0: 0, y0: 0, x1: 16, y1: 16 }, min_samples_per_pixel: 16, variance_threshold: 0.0, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: None, light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 50.0, aperture: [20.0, 20.0], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 10.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/plastic_0.25_3_power_2.usda"], invisible_overrides: Some(0) } +layer: $DIR/plastic_0.25_3_power_2.usda +lights: 2 +light 0: distant name Some("/World/Sun") lpe None pmf 0.5 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 0.25, specular: 3.0 } +light 1: area name Some("/World/Key") lpe None pmf 0.5 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 0.25, specular: 3.0 } +volumes: 0 +world: 2 geometries, PrimitiveBreakdown { triangles: 2, spheres: 1, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 2, spheres: 1, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +geom 0: material #0 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:ca080854f0bf27b5 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=1:ca080854f0bf27b5 +geom 1: material #1 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:fce6de5b675a55c5 camera=2:fce6de5b675a55c5 shadow=2:fce6de5b675a55c5 indirect=2:fce6de5b675a55c5 +provenance material /World/M: MaterialOrigin { slots: [1], displaced: false } +provenance light /World/Key: LightOrigin { index: 1, geoms: 0..1 } +provenance light /World/Sun: LightOrigin { index: 0, geoms: 0..0 } +provenance geometry 0..1: /World/Key +provenance geometry 1..2: /World/Floor +provenance mesh: MeshOrigin { geom_id: 1, slot: 0, baked: true, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 14903623499644419787, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/World/Cam"), cameras: ["/World/Cam"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/World/Cam"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/plastic_0_25_3_power_2_usda-9558069a3a6cb6c1-1.image b/crates/crust-core/tests/data/import_baselines/plastic_0_25_3_power_2_usda-9558069a3a6cb6c1-1.image new file mode 100644 index 000000000..b01e6071e --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/plastic_0_25_3_power_2_usda-9558069a3a6cb6c1-1.image @@ -0,0 +1 @@ +16x16 16spp clamp-off bbc4bce34628e579 diff --git a/crates/crust-core/tests/data/import_baselines/plastic_0_25_3_power_3_usda-848bb8619ed104b2-1.digest b/crates/crust-core/tests/data/import_baselines/plastic_0_25_3_power_3_usda-848bb8619ed104b2-1.digest new file mode 100644 index 000000000..f67f44626 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/plastic_0_25_3_power_3_usda-848bb8619ed104b2-1.digest @@ -0,0 +1,27 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/World/Cam") +camera: Camera { origin: Vec3A(0.0, 5.0, 6.0), lower_left_corner: Vec3A(-2.0000002, -2.9376645, -0.40261602), horizontal: Vec3A(4.0000005, -0.0, 0.0), vertical: Vec3A(0.0, 3.0731347, -2.560439), u: Vec3A(1.0, -0.0, 0.0), v: Vec3A(0.0, 0.76828355, -0.6401097), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: Some("/Render/settings") +settings: RenderSettings { samples_per_pixel: 16, max_depth: 2, width: 16, height: 16, region: PixelRect { x0: 0, y0: 0, x1: 16, y1: 16 }, min_samples_per_pixel: 16, variance_threshold: 0.0, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: None, light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 50.0, aperture: [20.0, 20.0], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 10.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/plastic_0.25_3_power_3.usda"], invisible_overrides: Some(0) } +layer: $DIR/plastic_0.25_3_power_3.usda +lights: 2 +light 0: distant name Some("/World/Sun") lpe None pmf 0.5 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 0.25, specular: 3.0 } +light 1: area name Some("/World/Key") lpe None pmf 0.5 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 0.25, specular: 3.0 } +volumes: 0 +world: 2 geometries, PrimitiveBreakdown { triangles: 2, spheres: 1, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 2, spheres: 1, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +geom 0: material #0 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:ca080854f0bf27b5 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=1:ca080854f0bf27b5 +geom 1: material #1 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:fce6de5b675a55c5 camera=2:fce6de5b675a55c5 shadow=2:fce6de5b675a55c5 indirect=2:fce6de5b675a55c5 +provenance material /World/M: MaterialOrigin { slots: [1], displaced: false } +provenance light /World/Key: LightOrigin { index: 1, geoms: 0..1 } +provenance light /World/Sun: LightOrigin { index: 0, geoms: 0..0 } +provenance geometry 0..1: /World/Key +provenance geometry 1..2: /World/Floor +provenance mesh: MeshOrigin { geom_id: 1, slot: 0, baked: true, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 14903623499644419787, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/World/Cam"), cameras: ["/World/Cam"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/World/Cam"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/plastic_0_25_3_power_3_usda-848bb8619ed104b2-1.image b/crates/crust-core/tests/data/import_baselines/plastic_0_25_3_power_3_usda-848bb8619ed104b2-1.image new file mode 100644 index 000000000..b01e6071e --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/plastic_0_25_3_power_3_usda-848bb8619ed104b2-1.image @@ -0,0 +1 @@ +16x16 16spp clamp-off bbc4bce34628e579 diff --git a/crates/crust-core/tests/data/import_baselines/plastic_0_25_3_power_4_usda-13781e826c793feb-1.digest b/crates/crust-core/tests/data/import_baselines/plastic_0_25_3_power_4_usda-13781e826c793feb-1.digest new file mode 100644 index 000000000..d50fd252e --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/plastic_0_25_3_power_4_usda-13781e826c793feb-1.digest @@ -0,0 +1,27 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/World/Cam") +camera: Camera { origin: Vec3A(0.0, 5.0, 6.0), lower_left_corner: Vec3A(-2.0000002, -2.9376645, -0.40261602), horizontal: Vec3A(4.0000005, -0.0, 0.0), vertical: Vec3A(0.0, 3.0731347, -2.560439), u: Vec3A(1.0, -0.0, 0.0), v: Vec3A(0.0, 0.76828355, -0.6401097), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: Some("/Render/settings") +settings: RenderSettings { samples_per_pixel: 16, max_depth: 2, width: 16, height: 16, region: PixelRect { x0: 0, y0: 0, x1: 16, y1: 16 }, min_samples_per_pixel: 16, variance_threshold: 0.0, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: None, light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 50.0, aperture: [20.0, 20.0], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 10.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/plastic_0.25_3_power_4.usda"], invisible_overrides: Some(0) } +layer: $DIR/plastic_0.25_3_power_4.usda +lights: 2 +light 0: distant name Some("/World/Sun") lpe None pmf 0.5 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 0.25, specular: 3.0 } +light 1: area name Some("/World/Key") lpe None pmf 0.5 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 0.25, specular: 3.0 } +volumes: 0 +world: 2 geometries, PrimitiveBreakdown { triangles: 2, spheres: 1, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 2, spheres: 1, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +geom 0: material #0 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:ca080854f0bf27b5 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=1:ca080854f0bf27b5 +geom 1: material #1 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:fce6de5b675a55c5 camera=2:fce6de5b675a55c5 shadow=2:fce6de5b675a55c5 indirect=2:fce6de5b675a55c5 +provenance material /World/M: MaterialOrigin { slots: [1], displaced: false } +provenance light /World/Key: LightOrigin { index: 1, geoms: 0..1 } +provenance light /World/Sun: LightOrigin { index: 0, geoms: 0..0 } +provenance geometry 0..1: /World/Key +provenance geometry 1..2: /World/Floor +provenance mesh: MeshOrigin { geom_id: 1, slot: 0, baked: true, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 14903623499644419787, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/World/Cam"), cameras: ["/World/Cam"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/World/Cam"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/plastic_0_25_3_power_4_usda-13781e826c793feb-1.image b/crates/crust-core/tests/data/import_baselines/plastic_0_25_3_power_4_usda-13781e826c793feb-1.image new file mode 100644 index 000000000..b01e6071e --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/plastic_0_25_3_power_4_usda-13781e826c793feb-1.image @@ -0,0 +1 @@ +16x16 16spp clamp-off bbc4bce34628e579 diff --git a/crates/crust-core/tests/data/import_baselines/plastic_1_0_bsdf_1_usda-7392b4eece3d4ffa-1.digest b/crates/crust-core/tests/data/import_baselines/plastic_1_0_bsdf_1_usda-7392b4eece3d4ffa-1.digest new file mode 100644 index 000000000..12e345dcc --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/plastic_1_0_bsdf_1_usda-7392b4eece3d4ffa-1.digest @@ -0,0 +1,27 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/World/Cam") +camera: Camera { origin: Vec3A(0.0, 5.0, 6.0), lower_left_corner: Vec3A(-2.0000002, -2.9376645, -0.40261602), horizontal: Vec3A(4.0000005, -0.0, 0.0), vertical: Vec3A(0.0, 3.0731347, -2.560439), u: Vec3A(1.0, -0.0, 0.0), v: Vec3A(0.0, 0.76828355, -0.6401097), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: Some("/Render/settings") +settings: RenderSettings { samples_per_pixel: 16, max_depth: 2, width: 16, height: 16, region: PixelRect { x0: 0, y0: 0, x1: 16, y1: 16 }, min_samples_per_pixel: 16, variance_threshold: 0.0, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: BsdfOnly, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: None, light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 50.0, aperture: [20.0, 20.0], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 10.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/plastic_1_0_bsdf_1.usda"], invisible_overrides: Some(0) } +layer: $DIR/plastic_1_0_bsdf_1.usda +lights: 2 +light 0: distant name Some("/World/Sun") lpe None pmf 0.5 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 0.0 } +light 1: area name Some("/World/Key") lpe None pmf 0.5 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 0.0 } +volumes: 0 +world: 2 geometries, PrimitiveBreakdown { triangles: 2, spheres: 1, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 2, spheres: 1, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +geom 0: material #0 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:ca080854f0bf27b5 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=1:ca080854f0bf27b5 +geom 1: material #1 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:fce6de5b675a55c5 camera=2:fce6de5b675a55c5 shadow=2:fce6de5b675a55c5 indirect=2:fce6de5b675a55c5 +provenance material /World/M: MaterialOrigin { slots: [1], displaced: false } +provenance light /World/Key: LightOrigin { index: 1, geoms: 0..1 } +provenance light /World/Sun: LightOrigin { index: 0, geoms: 0..0 } +provenance geometry 0..1: /World/Key +provenance geometry 1..2: /World/Floor +provenance mesh: MeshOrigin { geom_id: 1, slot: 0, baked: true, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 14903623499644419787, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/World/Cam"), cameras: ["/World/Cam"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/World/Cam"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/plastic_1_0_bsdf_1_usda-7392b4eece3d4ffa-1.image b/crates/crust-core/tests/data/import_baselines/plastic_1_0_bsdf_1_usda-7392b4eece3d4ffa-1.image new file mode 100644 index 000000000..4990a7f23 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/plastic_1_0_bsdf_1_usda-7392b4eece3d4ffa-1.image @@ -0,0 +1 @@ +16x16 16spp clamp-off 0bfed5cf63e28421 diff --git a/crates/crust-core/tests/data/import_baselines/plastic_1_0_light_1_usda-e29b88fff3b5eede-1.digest b/crates/crust-core/tests/data/import_baselines/plastic_1_0_light_1_usda-e29b88fff3b5eede-1.digest new file mode 100644 index 000000000..a10ee8176 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/plastic_1_0_light_1_usda-e29b88fff3b5eede-1.digest @@ -0,0 +1,27 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/World/Cam") +camera: Camera { origin: Vec3A(0.0, 5.0, 6.0), lower_left_corner: Vec3A(-2.0000002, -2.9376645, -0.40261602), horizontal: Vec3A(4.0000005, -0.0, 0.0), vertical: Vec3A(0.0, 3.0731347, -2.560439), u: Vec3A(1.0, -0.0, 0.0), v: Vec3A(0.0, 0.76828355, -0.6401097), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: Some("/Render/settings") +settings: RenderSettings { samples_per_pixel: 16, max_depth: 2, width: 16, height: 16, region: PixelRect { x0: 0, y0: 0, x1: 16, y1: 16 }, min_samples_per_pixel: 16, variance_threshold: 0.0, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: LightOnly, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: None, light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 50.0, aperture: [20.0, 20.0], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 10.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/plastic_1_0_light_1.usda"], invisible_overrides: Some(0) } +layer: $DIR/plastic_1_0_light_1.usda +lights: 2 +light 0: distant name Some("/World/Sun") lpe None pmf 0.5 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 0.0 } +light 1: area name Some("/World/Key") lpe None pmf 0.5 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 0.0 } +volumes: 0 +world: 2 geometries, PrimitiveBreakdown { triangles: 2, spheres: 1, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 2, spheres: 1, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +geom 0: material #0 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:ca080854f0bf27b5 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=1:ca080854f0bf27b5 +geom 1: material #1 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:fce6de5b675a55c5 camera=2:fce6de5b675a55c5 shadow=2:fce6de5b675a55c5 indirect=2:fce6de5b675a55c5 +provenance material /World/M: MaterialOrigin { slots: [1], displaced: false } +provenance light /World/Key: LightOrigin { index: 1, geoms: 0..1 } +provenance light /World/Sun: LightOrigin { index: 0, geoms: 0..0 } +provenance geometry 0..1: /World/Key +provenance geometry 1..2: /World/Floor +provenance mesh: MeshOrigin { geom_id: 1, slot: 0, baked: true, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 14903623499644419787, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/World/Cam"), cameras: ["/World/Cam"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/World/Cam"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/plastic_1_0_light_1_usda-e29b88fff3b5eede-1.image b/crates/crust-core/tests/data/import_baselines/plastic_1_0_light_1_usda-e29b88fff3b5eede-1.image new file mode 100644 index 000000000..ab3245e32 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/plastic_1_0_light_1_usda-e29b88fff3b5eede-1.image @@ -0,0 +1 @@ +16x16 16spp clamp-off 6cd14801cc1644c4 diff --git a/crates/crust-core/tests/data/import_baselines/plastic_1_0_power_1_usda-db7be84c0c913b8a-1.digest b/crates/crust-core/tests/data/import_baselines/plastic_1_0_power_1_usda-db7be84c0c913b8a-1.digest new file mode 100644 index 000000000..34a965259 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/plastic_1_0_power_1_usda-db7be84c0c913b8a-1.digest @@ -0,0 +1,27 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/World/Cam") +camera: Camera { origin: Vec3A(0.0, 5.0, 6.0), lower_left_corner: Vec3A(-2.0000002, -2.9376645, -0.40261602), horizontal: Vec3A(4.0000005, -0.0, 0.0), vertical: Vec3A(0.0, 3.0731347, -2.560439), u: Vec3A(1.0, -0.0, 0.0), v: Vec3A(0.0, 0.76828355, -0.6401097), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: Some("/Render/settings") +settings: RenderSettings { samples_per_pixel: 16, max_depth: 2, width: 16, height: 16, region: PixelRect { x0: 0, y0: 0, x1: 16, y1: 16 }, min_samples_per_pixel: 16, variance_threshold: 0.0, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: None, light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 50.0, aperture: [20.0, 20.0], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 10.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/plastic_1_0_power_1.usda"], invisible_overrides: Some(0) } +layer: $DIR/plastic_1_0_power_1.usda +lights: 2 +light 0: distant name Some("/World/Sun") lpe None pmf 0.5 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 0.0 } +light 1: area name Some("/World/Key") lpe None pmf 0.5 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 0.0 } +volumes: 0 +world: 2 geometries, PrimitiveBreakdown { triangles: 2, spheres: 1, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 2, spheres: 1, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +geom 0: material #0 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:ca080854f0bf27b5 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=1:ca080854f0bf27b5 +geom 1: material #1 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:fce6de5b675a55c5 camera=2:fce6de5b675a55c5 shadow=2:fce6de5b675a55c5 indirect=2:fce6de5b675a55c5 +provenance material /World/M: MaterialOrigin { slots: [1], displaced: false } +provenance light /World/Key: LightOrigin { index: 1, geoms: 0..1 } +provenance light /World/Sun: LightOrigin { index: 0, geoms: 0..0 } +provenance geometry 0..1: /World/Key +provenance geometry 1..2: /World/Floor +provenance mesh: MeshOrigin { geom_id: 1, slot: 0, baked: true, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 14903623499644419787, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/World/Cam"), cameras: ["/World/Cam"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/World/Cam"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/plastic_1_0_power_1_usda-db7be84c0c913b8a-1.image b/crates/crust-core/tests/data/import_baselines/plastic_1_0_power_1_usda-db7be84c0c913b8a-1.image new file mode 100644 index 000000000..ed1817d87 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/plastic_1_0_power_1_usda-db7be84c0c913b8a-1.image @@ -0,0 +1 @@ +16x16 16spp clamp-off d569a3e172b8ebfa diff --git a/crates/crust-core/tests/data/import_baselines/plastic_1_1_bsdf_1_usda-1a655ee8a457375b-1.digest b/crates/crust-core/tests/data/import_baselines/plastic_1_1_bsdf_1_usda-1a655ee8a457375b-1.digest new file mode 100644 index 000000000..f804bae70 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/plastic_1_1_bsdf_1_usda-1a655ee8a457375b-1.digest @@ -0,0 +1,27 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/World/Cam") +camera: Camera { origin: Vec3A(0.0, 5.0, 6.0), lower_left_corner: Vec3A(-2.0000002, -2.9376645, -0.40261602), horizontal: Vec3A(4.0000005, -0.0, 0.0), vertical: Vec3A(0.0, 3.0731347, -2.560439), u: Vec3A(1.0, -0.0, 0.0), v: Vec3A(0.0, 0.76828355, -0.6401097), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: Some("/Render/settings") +settings: RenderSettings { samples_per_pixel: 16, max_depth: 2, width: 16, height: 16, region: PixelRect { x0: 0, y0: 0, x1: 16, y1: 16 }, min_samples_per_pixel: 16, variance_threshold: 0.0, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: BsdfOnly, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: None, light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 50.0, aperture: [20.0, 20.0], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 10.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/plastic_1_1_bsdf_1.usda"], invisible_overrides: Some(0) } +layer: $DIR/plastic_1_1_bsdf_1.usda +lights: 2 +light 0: distant name Some("/World/Sun") lpe None pmf 0.5 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 1: area name Some("/World/Key") lpe None pmf 0.5 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 2 geometries, PrimitiveBreakdown { triangles: 2, spheres: 1, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 2, spheres: 1, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +geom 0: material #0 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:ca080854f0bf27b5 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=1:ca080854f0bf27b5 +geom 1: material #1 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:fce6de5b675a55c5 camera=2:fce6de5b675a55c5 shadow=2:fce6de5b675a55c5 indirect=2:fce6de5b675a55c5 +provenance material /World/M: MaterialOrigin { slots: [1], displaced: false } +provenance light /World/Key: LightOrigin { index: 1, geoms: 0..1 } +provenance light /World/Sun: LightOrigin { index: 0, geoms: 0..0 } +provenance geometry 0..1: /World/Key +provenance geometry 1..2: /World/Floor +provenance mesh: MeshOrigin { geom_id: 1, slot: 0, baked: true, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 14903623499644419787, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/World/Cam"), cameras: ["/World/Cam"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/World/Cam"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/plastic_1_1_bsdf_1_usda-1a655ee8a457375b-1.image b/crates/crust-core/tests/data/import_baselines/plastic_1_1_bsdf_1_usda-1a655ee8a457375b-1.image new file mode 100644 index 000000000..29b88419f --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/plastic_1_1_bsdf_1_usda-1a655ee8a457375b-1.image @@ -0,0 +1 @@ +16x16 16spp clamp-off a0bc94bca06dce14 diff --git a/crates/crust-core/tests/data/import_baselines/plastic_1_1_light_1_usda-d608d0096c4c9293-1.digest b/crates/crust-core/tests/data/import_baselines/plastic_1_1_light_1_usda-d608d0096c4c9293-1.digest new file mode 100644 index 000000000..74c3f3e78 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/plastic_1_1_light_1_usda-d608d0096c4c9293-1.digest @@ -0,0 +1,27 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/World/Cam") +camera: Camera { origin: Vec3A(0.0, 5.0, 6.0), lower_left_corner: Vec3A(-2.0000002, -2.9376645, -0.40261602), horizontal: Vec3A(4.0000005, -0.0, 0.0), vertical: Vec3A(0.0, 3.0731347, -2.560439), u: Vec3A(1.0, -0.0, 0.0), v: Vec3A(0.0, 0.76828355, -0.6401097), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: Some("/Render/settings") +settings: RenderSettings { samples_per_pixel: 16, max_depth: 2, width: 16, height: 16, region: PixelRect { x0: 0, y0: 0, x1: 16, y1: 16 }, min_samples_per_pixel: 16, variance_threshold: 0.0, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: LightOnly, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: None, light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 50.0, aperture: [20.0, 20.0], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 10.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/plastic_1_1_light_1.usda"], invisible_overrides: Some(0) } +layer: $DIR/plastic_1_1_light_1.usda +lights: 2 +light 0: distant name Some("/World/Sun") lpe None pmf 0.5 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 1: area name Some("/World/Key") lpe None pmf 0.5 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 2 geometries, PrimitiveBreakdown { triangles: 2, spheres: 1, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 2, spheres: 1, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +geom 0: material #0 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:ca080854f0bf27b5 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=1:ca080854f0bf27b5 +geom 1: material #1 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:fce6de5b675a55c5 camera=2:fce6de5b675a55c5 shadow=2:fce6de5b675a55c5 indirect=2:fce6de5b675a55c5 +provenance material /World/M: MaterialOrigin { slots: [1], displaced: false } +provenance light /World/Key: LightOrigin { index: 1, geoms: 0..1 } +provenance light /World/Sun: LightOrigin { index: 0, geoms: 0..0 } +provenance geometry 0..1: /World/Key +provenance geometry 1..2: /World/Floor +provenance mesh: MeshOrigin { geom_id: 1, slot: 0, baked: true, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 14903623499644419787, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/World/Cam"), cameras: ["/World/Cam"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/World/Cam"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/plastic_1_1_light_1_usda-d608d0096c4c9293-1.image b/crates/crust-core/tests/data/import_baselines/plastic_1_1_light_1_usda-d608d0096c4c9293-1.image new file mode 100644 index 000000000..8ee8c4402 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/plastic_1_1_light_1_usda-d608d0096c4c9293-1.image @@ -0,0 +1 @@ +16x16 16spp clamp-off 369c7e964021c5a3 diff --git a/crates/crust-core/tests/data/import_baselines/plastic_1_1_power_1_usda-dad1612ee907e657-1.digest b/crates/crust-core/tests/data/import_baselines/plastic_1_1_power_1_usda-dad1612ee907e657-1.digest new file mode 100644 index 000000000..5a1e09ece --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/plastic_1_1_power_1_usda-dad1612ee907e657-1.digest @@ -0,0 +1,27 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/World/Cam") +camera: Camera { origin: Vec3A(0.0, 5.0, 6.0), lower_left_corner: Vec3A(-2.0000002, -2.9376645, -0.40261602), horizontal: Vec3A(4.0000005, -0.0, 0.0), vertical: Vec3A(0.0, 3.0731347, -2.560439), u: Vec3A(1.0, -0.0, 0.0), v: Vec3A(0.0, 0.76828355, -0.6401097), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: Some("/Render/settings") +settings: RenderSettings { samples_per_pixel: 16, max_depth: 2, width: 16, height: 16, region: PixelRect { x0: 0, y0: 0, x1: 16, y1: 16 }, min_samples_per_pixel: 16, variance_threshold: 0.0, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: None, light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 50.0, aperture: [20.0, 20.0], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 10.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/plastic_1_1_power_1.usda"], invisible_overrides: Some(0) } +layer: $DIR/plastic_1_1_power_1.usda +lights: 2 +light 0: distant name Some("/World/Sun") lpe None pmf 0.5 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 1: area name Some("/World/Key") lpe None pmf 0.5 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 2 geometries, PrimitiveBreakdown { triangles: 2, spheres: 1, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 2, spheres: 1, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +geom 0: material #0 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:ca080854f0bf27b5 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=1:ca080854f0bf27b5 +geom 1: material #1 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:fce6de5b675a55c5 camera=2:fce6de5b675a55c5 shadow=2:fce6de5b675a55c5 indirect=2:fce6de5b675a55c5 +provenance material /World/M: MaterialOrigin { slots: [1], displaced: false } +provenance light /World/Key: LightOrigin { index: 1, geoms: 0..1 } +provenance light /World/Sun: LightOrigin { index: 0, geoms: 0..0 } +provenance geometry 0..1: /World/Key +provenance geometry 1..2: /World/Floor +provenance mesh: MeshOrigin { geom_id: 1, slot: 0, baked: true, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 14903623499644419787, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/World/Cam"), cameras: ["/World/Cam"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/World/Cam"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/plastic_1_1_power_1_usda-dad1612ee907e657-1.image b/crates/crust-core/tests/data/import_baselines/plastic_1_1_power_1_usda-dad1612ee907e657-1.image new file mode 100644 index 000000000..431de6ffe --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/plastic_1_1_power_1_usda-dad1612ee907e657-1.image @@ -0,0 +1 @@ +16x16 16spp clamp-off 8fe84ece808596b4 diff --git a/crates/crust-core/tests/data/import_baselines/precomp_C_usda-ceae07fa5339bc4e-1.digest b/crates/crust-core/tests/data/import_baselines/precomp_C_usda-ceae07fa5339bc4e-1.digest new file mode 100644 index 000000000..f479906cd --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/precomp_C_usda-ceae07fa5339bc4e-1.digest @@ -0,0 +1,39 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/World/Cam") +camera: Camera { origin: Vec3A(0.0, 1.1, 7.0), lower_left_corner: Vec3A(-4.8542223, -2.660827, -2.6598039), horizontal: Vec3A(9.708445, -0.0, 0.0), vertical: Vec3A(0.0, 5.4310846, -0.57083), u: Vec3A(1.0, -0.0, 0.0), v: Vec3A(0.0, 0.9945219, -0.104528464), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: Some("/Render/settings") +settings: RenderSettings { samples_per_pixel: 16, max_depth: 4, width: 320, height: 180, region: PixelRect { x0: 0, y0: 0, x1: 320, y1: 180 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: false, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [AovProduct { prim_path: "/Render/Products/precomp", name: "renders/precomp.exr", vars: [AovVar { prim_path: "/Render/Products/Vars/C", name: "C", channel_prefix: None, source: Color, components: 3, precision: Float, accumulation: Filtered, clear: 0.0, expression: None, raw: false, variance: false }, AovVar { prim_path: "/Render/Products/Vars/key", name: "key", channel_prefix: None, source: Lpe, components: 3, precision: Float, accumulation: Filtered, clear: 0.0, expression: Some("C.*"), raw: false, variance: false }, AovVar { prim_path: "/Render/Products/Vars/fill", name: "fill", channel_prefix: None, source: Lpe, components: 3, precision: Float, accumulation: Filtered, clear: 0.0, expression: Some("C.*"), raw: false, variance: false }, AovVar { prim_path: "/Render/Products/Vars/rim", name: "rim", channel_prefix: None, source: Lpe, components: 3, precision: Float, accumulation: Filtered, clear: 0.0, expression: Some("C.*"), raw: false, variance: false }, AovVar { prim_path: "/Render/Products/Vars/matte", name: "matte", channel_prefix: None, source: Primvar(PrimvarSource { index: 0, components: 1, role: Float }), components: 1, precision: Float, accumulation: Filtered, clear: 0.0, expression: None, raw: false, variance: false }, AovVar { prim_path: "/Render/Products/Vars/motion", name: "motion", channel_prefix: None, source: MotionVector, components: 2, precision: Float, accumulation: Closest, clear: 0.0, expression: None, raw: false, variance: false }, AovVar { prim_path: "/Render/Products/Vars/look", name: "look", channel_prefix: None, source: Filter(FilterSource { display: false, filter: 0, output: 0, components: 3, radiance: true }), components: 3, precision: Float, accumulation: Filtered, clear: 0.0, expression: None, raw: false, variance: false }, AovVar { prim_path: "/Render/Products/Vars/look_final", name: "look_final", channel_prefix: None, source: Filter(FilterSource { display: true, filter: 2, output: 0, components: 3, radiance: false }), components: 3, precision: Float, accumulation: Filtered, clear: 0.0, expression: None, raw: false, variance: false }], attributes: [] }], precomp: Some(Precomp { sample_filters: ["/Render/Precomp/look"], display_filters: ["/Render/Precomp/glow", "/Render/Precomp/bloom", "/Render/Precomp/speed"], display: "C" }) } +pass: None +source: Source { lens: Some(Lens { focal_length: 28.0, aperture: [20.955, 15.2908], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 10.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/precomp_C.usda"], invisible_overrides: Some(0) } +layer: $DIR/precomp_C.usda +lights: 3 +light 0: area name Some("/World/Rim") lpe Some("rim") pmf 0.33333334 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 1: area name Some("/World/Fill") lpe Some("fill") pmf 0.33333334 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 2: area name Some("/World/Key") lpe Some("key") pmf 0.33333334 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 6 geometries, PrimitiveBreakdown { triangles: 6, spheres: 1, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 2 } top level, PrimitiveBreakdown { triangles: 774, spheres: 1, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 2 } unique, motion true +geom 0: material #0 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:4aada018ed0727e5 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=2:4aada018ed0727e5 +geom 1: material #1 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:1552f6dd41ffc0c8 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=1:1552f6dd41ffc0c8 +geom 2: material #2 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:832c8ed52d67b0f9 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=2:832c8ed52d67b0f9 +geom 3: material #3 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:6e02baf63b264ec5 camera=2:6e02baf63b264ec5 shadow=2:6e02baf63b264ec5 indirect=2:6e02baf63b264ec5 +geom 4: material #3 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov Some((Some(0), false)) swapped false curves false scale 0.5 motion [Translation(Vec3A(1.3999999, 0.0, 0.0))] pieces all=768:dcf5d265b8c6f519 camera=768:dcf5d265b8c6f519 shadow=768:dcf5d265b8c6f519 indirect=768:dcf5d265b8c6f519 +geom 5: material #3 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov Some((Some(0), false)) swapped false curves false scale 0.75 motion [] pieces all=768:47a45983717bb5f1 camera=768:47a45983717bb5f1 shadow=768:47a45983717bb5f1 indirect=768:47a45983717bb5f1 +provenance light /World/Fill: LightOrigin { index: 1, geoms: 1..2 } +provenance light /World/Key: LightOrigin { index: 2, geoms: 2..3 } +provenance light /World/Rim: LightOrigin { index: 0, geoms: 0..1 } +provenance geometry 0..1: /World/Rim +provenance geometry 1..2: /World/Fill +provenance geometry 2..3: /World/Key +provenance geometry 3..4: /World/Floor +provenance geometry 4..5: /World/Runner +provenance geometry 5..6: /World/Hero +provenance mesh: MeshOrigin { geom_id: 3, slot: 0, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 4, slot: 1, baked: false, moving: true } +provenance mesh: MeshOrigin { geom_id: 5, slot: 1, baked: false, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 3036384043218918496, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 1: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 16146526048079508977, n_points: 386, n_indices: 1536, n_uvs: None, smooth: true, material: 0 }), placements: 2, shared: false, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: true, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 3, adaptive: None, domes_seen_by_camera: true, precomp: true, working: None, camera: Some("/World/Cam"), cameras: ["/World/Cam"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [("matte", 1)], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/World/Cam"), offsets: [0, 0], interval: None, query: true, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/precomp_C_usda-ceae07fa5339bc4e-1.image b/crates/crust-core/tests/data/import_baselines/precomp_C_usda-ceae07fa5339bc4e-1.image new file mode 100644 index 000000000..f5a40b79c --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/precomp_C_usda-ceae07fa5339bc4e-1.image @@ -0,0 +1 @@ +320x180 16spp clamp-off 7fc2a052099963ae diff --git a/crates/crust-core/tests/data/import_baselines/precomp_look_final_usda-46848a8dcf6250e4-1.digest b/crates/crust-core/tests/data/import_baselines/precomp_look_final_usda-46848a8dcf6250e4-1.digest new file mode 100644 index 000000000..fa9fcc301 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/precomp_look_final_usda-46848a8dcf6250e4-1.digest @@ -0,0 +1,39 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/World/Cam") +camera: Camera { origin: Vec3A(0.0, 1.1, 7.0), lower_left_corner: Vec3A(-4.8542223, -2.660827, -2.6598039), horizontal: Vec3A(9.708445, -0.0, 0.0), vertical: Vec3A(0.0, 5.4310846, -0.57083), u: Vec3A(1.0, -0.0, 0.0), v: Vec3A(0.0, 0.9945219, -0.104528464), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: Some("/Render/settings") +settings: RenderSettings { samples_per_pixel: 16, max_depth: 4, width: 320, height: 180, region: PixelRect { x0: 0, y0: 0, x1: 320, y1: 180 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: false, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [AovProduct { prim_path: "/Render/Products/precomp", name: "renders/precomp.exr", vars: [AovVar { prim_path: "/Render/Products/Vars/C", name: "C", channel_prefix: None, source: Color, components: 3, precision: Float, accumulation: Filtered, clear: 0.0, expression: None, raw: false, variance: false }, AovVar { prim_path: "/Render/Products/Vars/key", name: "key", channel_prefix: None, source: Lpe, components: 3, precision: Float, accumulation: Filtered, clear: 0.0, expression: Some("C.*"), raw: false, variance: false }, AovVar { prim_path: "/Render/Products/Vars/fill", name: "fill", channel_prefix: None, source: Lpe, components: 3, precision: Float, accumulation: Filtered, clear: 0.0, expression: Some("C.*"), raw: false, variance: false }, AovVar { prim_path: "/Render/Products/Vars/rim", name: "rim", channel_prefix: None, source: Lpe, components: 3, precision: Float, accumulation: Filtered, clear: 0.0, expression: Some("C.*"), raw: false, variance: false }, AovVar { prim_path: "/Render/Products/Vars/matte", name: "matte", channel_prefix: None, source: Primvar(PrimvarSource { index: 0, components: 1, role: Float }), components: 1, precision: Float, accumulation: Filtered, clear: 0.0, expression: None, raw: false, variance: false }, AovVar { prim_path: "/Render/Products/Vars/motion", name: "motion", channel_prefix: None, source: MotionVector, components: 2, precision: Float, accumulation: Closest, clear: 0.0, expression: None, raw: false, variance: false }, AovVar { prim_path: "/Render/Products/Vars/look", name: "look", channel_prefix: None, source: Filter(FilterSource { display: false, filter: 0, output: 0, components: 3, radiance: true }), components: 3, precision: Float, accumulation: Filtered, clear: 0.0, expression: None, raw: false, variance: false }, AovVar { prim_path: "/Render/Products/Vars/look_final", name: "look_final", channel_prefix: None, source: Filter(FilterSource { display: true, filter: 2, output: 0, components: 3, radiance: false }), components: 3, precision: Float, accumulation: Filtered, clear: 0.0, expression: None, raw: false, variance: false }], attributes: [] }], precomp: Some(Precomp { sample_filters: ["/Render/Precomp/look"], display_filters: ["/Render/Precomp/glow", "/Render/Precomp/bloom", "/Render/Precomp/speed"], display: "look_final" }) } +pass: None +source: Source { lens: Some(Lens { focal_length: 28.0, aperture: [20.955, 15.2908], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 10.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/precomp_look_final.usda"], invisible_overrides: Some(0) } +layer: $DIR/precomp_look_final.usda +lights: 3 +light 0: area name Some("/World/Rim") lpe Some("rim") pmf 0.33333334 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 1: area name Some("/World/Fill") lpe Some("fill") pmf 0.33333334 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 2: area name Some("/World/Key") lpe Some("key") pmf 0.33333334 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 6 geometries, PrimitiveBreakdown { triangles: 6, spheres: 1, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 2 } top level, PrimitiveBreakdown { triangles: 774, spheres: 1, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 2 } unique, motion true +geom 0: material #0 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:4aada018ed0727e5 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=2:4aada018ed0727e5 +geom 1: material #1 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:1552f6dd41ffc0c8 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=1:1552f6dd41ffc0c8 +geom 2: material #2 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:832c8ed52d67b0f9 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=2:832c8ed52d67b0f9 +geom 3: material #3 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:6e02baf63b264ec5 camera=2:6e02baf63b264ec5 shadow=2:6e02baf63b264ec5 indirect=2:6e02baf63b264ec5 +geom 4: material #3 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov Some((Some(0), false)) swapped false curves false scale 0.5 motion [Translation(Vec3A(1.3999999, 0.0, 0.0))] pieces all=768:dcf5d265b8c6f519 camera=768:dcf5d265b8c6f519 shadow=768:dcf5d265b8c6f519 indirect=768:dcf5d265b8c6f519 +geom 5: material #3 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov Some((Some(0), false)) swapped false curves false scale 0.75 motion [] pieces all=768:47a45983717bb5f1 camera=768:47a45983717bb5f1 shadow=768:47a45983717bb5f1 indirect=768:47a45983717bb5f1 +provenance light /World/Fill: LightOrigin { index: 1, geoms: 1..2 } +provenance light /World/Key: LightOrigin { index: 2, geoms: 2..3 } +provenance light /World/Rim: LightOrigin { index: 0, geoms: 0..1 } +provenance geometry 0..1: /World/Rim +provenance geometry 1..2: /World/Fill +provenance geometry 2..3: /World/Key +provenance geometry 3..4: /World/Floor +provenance geometry 4..5: /World/Runner +provenance geometry 5..6: /World/Hero +provenance mesh: MeshOrigin { geom_id: 3, slot: 0, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 4, slot: 1, baked: false, moving: true } +provenance mesh: MeshOrigin { geom_id: 5, slot: 1, baked: false, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 3036384043218918496, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 1: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 16146526048079508977, n_points: 386, n_indices: 1536, n_uvs: None, smooth: true, material: 0 }), placements: 2, shared: false, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: true, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 3, adaptive: None, domes_seen_by_camera: true, precomp: true, working: None, camera: Some("/World/Cam"), cameras: ["/World/Cam"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [("matte", 1)], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/World/Cam"), offsets: [0, 0], interval: None, query: true, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/precomp_look_final_usda-46848a8dcf6250e4-1.image b/crates/crust-core/tests/data/import_baselines/precomp_look_final_usda-46848a8dcf6250e4-1.image new file mode 100644 index 000000000..f5a40b79c --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/precomp_look_final_usda-46848a8dcf6250e4-1.image @@ -0,0 +1 @@ +320x180 16spp clamp-off 7fc2a052099963ae diff --git a/crates/crust-core/tests/data/import_baselines/precomp_none_usda-749e88768dbe99b1-1.digest b/crates/crust-core/tests/data/import_baselines/precomp_none_usda-749e88768dbe99b1-1.digest new file mode 100644 index 000000000..99e1cc3b4 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/precomp_none_usda-749e88768dbe99b1-1.digest @@ -0,0 +1,39 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/World/Cam") +camera: Camera { origin: Vec3A(0.0, 1.1, 7.0), lower_left_corner: Vec3A(-4.8542223, -2.660827, -2.6598039), horizontal: Vec3A(9.708445, -0.0, 0.0), vertical: Vec3A(0.0, 5.4310846, -0.57083), u: Vec3A(1.0, -0.0, 0.0), v: Vec3A(0.0, 0.9945219, -0.104528464), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: Some("/Render/settings") +settings: RenderSettings { samples_per_pixel: 16, max_depth: 4, width: 320, height: 180, region: PixelRect { x0: 0, y0: 0, x1: 320, y1: 180 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: false, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [AovProduct { prim_path: "/Render/Products/precomp", name: "renders/precomp.exr", vars: [AovVar { prim_path: "/Render/Products/Vars/C", name: "C", channel_prefix: None, source: Color, components: 3, precision: Float, accumulation: Filtered, clear: 0.0, expression: None, raw: false, variance: false }, AovVar { prim_path: "/Render/Products/Vars/key", name: "key", channel_prefix: None, source: Lpe, components: 3, precision: Float, accumulation: Filtered, clear: 0.0, expression: Some("C.*"), raw: false, variance: false }, AovVar { prim_path: "/Render/Products/Vars/fill", name: "fill", channel_prefix: None, source: Lpe, components: 3, precision: Float, accumulation: Filtered, clear: 0.0, expression: Some("C.*"), raw: false, variance: false }, AovVar { prim_path: "/Render/Products/Vars/rim", name: "rim", channel_prefix: None, source: Lpe, components: 3, precision: Float, accumulation: Filtered, clear: 0.0, expression: Some("C.*"), raw: false, variance: false }, AovVar { prim_path: "/Render/Products/Vars/matte", name: "matte", channel_prefix: None, source: Primvar(PrimvarSource { index: 0, components: 1, role: Float }), components: 1, precision: Float, accumulation: Filtered, clear: 0.0, expression: None, raw: false, variance: false }, AovVar { prim_path: "/Render/Products/Vars/motion", name: "motion", channel_prefix: None, source: MotionVector, components: 2, precision: Float, accumulation: Closest, clear: 0.0, expression: None, raw: false, variance: false }, AovVar { prim_path: "/Render/Products/Vars/look", name: "look", channel_prefix: None, source: Filter(FilterSource { display: false, filter: 0, output: 0, components: 3, radiance: true }), components: 3, precision: Float, accumulation: Filtered, clear: 0.0, expression: None, raw: false, variance: false }, AovVar { prim_path: "/Render/Products/Vars/look_final", name: "look_final", channel_prefix: None, source: Filter(FilterSource { display: true, filter: 2, output: 0, components: 3, radiance: false }), components: 3, precision: Float, accumulation: Filtered, clear: 0.0, expression: None, raw: false, variance: false }], attributes: [] }], precomp: Some(Precomp { sample_filters: ["/Render/Precomp/look"], display_filters: ["/Render/Precomp/glow", "/Render/Precomp/bloom", "/Render/Precomp/speed"], display: "beauty" }) } +pass: None +source: Source { lens: Some(Lens { focal_length: 28.0, aperture: [20.955, 15.2908], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 10.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/precomp_none.usda"], invisible_overrides: Some(0) } +layer: $DIR/precomp_none.usda +lights: 3 +light 0: area name Some("/World/Rim") lpe Some("rim") pmf 0.33333334 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 1: area name Some("/World/Fill") lpe Some("fill") pmf 0.33333334 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 2: area name Some("/World/Key") lpe Some("key") pmf 0.33333334 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 6 geometries, PrimitiveBreakdown { triangles: 6, spheres: 1, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 2 } top level, PrimitiveBreakdown { triangles: 774, spheres: 1, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 2 } unique, motion true +geom 0: material #0 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:4aada018ed0727e5 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=2:4aada018ed0727e5 +geom 1: material #1 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:1552f6dd41ffc0c8 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=1:1552f6dd41ffc0c8 +geom 2: material #2 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:832c8ed52d67b0f9 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=2:832c8ed52d67b0f9 +geom 3: material #3 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:6e02baf63b264ec5 camera=2:6e02baf63b264ec5 shadow=2:6e02baf63b264ec5 indirect=2:6e02baf63b264ec5 +geom 4: material #3 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov Some((Some(0), false)) swapped false curves false scale 0.5 motion [Translation(Vec3A(1.3999999, 0.0, 0.0))] pieces all=768:dcf5d265b8c6f519 camera=768:dcf5d265b8c6f519 shadow=768:dcf5d265b8c6f519 indirect=768:dcf5d265b8c6f519 +geom 5: material #3 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov Some((Some(0), false)) swapped false curves false scale 0.75 motion [] pieces all=768:47a45983717bb5f1 camera=768:47a45983717bb5f1 shadow=768:47a45983717bb5f1 indirect=768:47a45983717bb5f1 +provenance light /World/Fill: LightOrigin { index: 1, geoms: 1..2 } +provenance light /World/Key: LightOrigin { index: 2, geoms: 2..3 } +provenance light /World/Rim: LightOrigin { index: 0, geoms: 0..1 } +provenance geometry 0..1: /World/Rim +provenance geometry 1..2: /World/Fill +provenance geometry 2..3: /World/Key +provenance geometry 3..4: /World/Floor +provenance geometry 4..5: /World/Runner +provenance geometry 5..6: /World/Hero +provenance mesh: MeshOrigin { geom_id: 3, slot: 0, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 4, slot: 1, baked: false, moving: true } +provenance mesh: MeshOrigin { geom_id: 5, slot: 1, baked: false, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 3036384043218918496, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 1: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 16146526048079508977, n_points: 386, n_indices: 1536, n_uvs: None, smooth: true, material: 0 }), placements: 2, shared: false, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: true, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 3, adaptive: None, domes_seen_by_camera: true, precomp: true, working: None, camera: Some("/World/Cam"), cameras: ["/World/Cam"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [("matte", 1)], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/World/Cam"), offsets: [0, 0], interval: None, query: true, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/precomp_none_usda-749e88768dbe99b1-1.image b/crates/crust-core/tests/data/import_baselines/precomp_none_usda-749e88768dbe99b1-1.image new file mode 100644 index 000000000..f5a40b79c --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/precomp_none_usda-749e88768dbe99b1-1.image @@ -0,0 +1 @@ +320x180 16spp clamp-off 7fc2a052099963ae diff --git a/crates/crust-core/tests/data/import_baselines/precomp_usda-33f481698c3a3ce7-1.digest b/crates/crust-core/tests/data/import_baselines/precomp_usda-33f481698c3a3ce7-1.digest new file mode 100644 index 000000000..3a735c6fb --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/precomp_usda-33f481698c3a3ce7-1.digest @@ -0,0 +1,39 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/World/Cam") +camera: Camera { origin: Vec3A(0.0, 1.1, 7.0), lower_left_corner: Vec3A(-4.8542223, -2.660827, -2.6598039), horizontal: Vec3A(9.708445, -0.0, 0.0), vertical: Vec3A(0.0, 5.4310846, -0.57083), u: Vec3A(1.0, -0.0, 0.0), v: Vec3A(0.0, 0.9945219, -0.104528464), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: Some("/Render/settings") +settings: RenderSettings { samples_per_pixel: 16, max_depth: 4, width: 320, height: 180, region: PixelRect { x0: 0, y0: 0, x1: 320, y1: 180 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: false, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [AovProduct { prim_path: "/Render/Products/precomp", name: "renders/precomp.exr", vars: [AovVar { prim_path: "/Render/Products/Vars/C", name: "C", channel_prefix: None, source: Color, components: 3, precision: Float, accumulation: Filtered, clear: 0.0, expression: None, raw: false, variance: false }, AovVar { prim_path: "/Render/Products/Vars/key", name: "key", channel_prefix: None, source: Lpe, components: 3, precision: Float, accumulation: Filtered, clear: 0.0, expression: Some("C.*"), raw: false, variance: false }, AovVar { prim_path: "/Render/Products/Vars/fill", name: "fill", channel_prefix: None, source: Lpe, components: 3, precision: Float, accumulation: Filtered, clear: 0.0, expression: Some("C.*"), raw: false, variance: false }, AovVar { prim_path: "/Render/Products/Vars/rim", name: "rim", channel_prefix: None, source: Lpe, components: 3, precision: Float, accumulation: Filtered, clear: 0.0, expression: Some("C.*"), raw: false, variance: false }, AovVar { prim_path: "/Render/Products/Vars/matte", name: "matte", channel_prefix: None, source: Primvar(PrimvarSource { index: 0, components: 1, role: Float }), components: 1, precision: Float, accumulation: Filtered, clear: 0.0, expression: None, raw: false, variance: false }, AovVar { prim_path: "/Render/Products/Vars/motion", name: "motion", channel_prefix: None, source: MotionVector, components: 2, precision: Float, accumulation: Closest, clear: 0.0, expression: None, raw: false, variance: false }, AovVar { prim_path: "/Render/Products/Vars/look", name: "look", channel_prefix: None, source: Filter(FilterSource { display: false, filter: 0, output: 0, components: 3, radiance: true }), components: 3, precision: Float, accumulation: Filtered, clear: 0.0, expression: None, raw: false, variance: false }, AovVar { prim_path: "/Render/Products/Vars/look_final", name: "look_final", channel_prefix: None, source: Filter(FilterSource { display: true, filter: 2, output: 0, components: 3, radiance: false }), components: 3, precision: Float, accumulation: Filtered, clear: 0.0, expression: None, raw: false, variance: false }], attributes: [] }], precomp: Some(Precomp { sample_filters: ["/Render/Precomp/look"], display_filters: ["/Render/Precomp/glow", "/Render/Precomp/bloom", "/Render/Precomp/speed"], display: "look_final" }) } +pass: None +source: Source { lens: Some(Lens { focal_length: 28.0, aperture: [20.955, 15.2908], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 10.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/precomp.usda"], invisible_overrides: Some(0) } +layer: $DIR/precomp.usda +lights: 3 +light 0: area name Some("/World/Rim") lpe Some("rim") pmf 0.33333334 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 1: area name Some("/World/Fill") lpe Some("fill") pmf 0.33333334 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 2: area name Some("/World/Key") lpe Some("key") pmf 0.33333334 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 6 geometries, PrimitiveBreakdown { triangles: 6, spheres: 1, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 2 } top level, PrimitiveBreakdown { triangles: 774, spheres: 1, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 2 } unique, motion true +geom 0: material #0 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:4aada018ed0727e5 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=2:4aada018ed0727e5 +geom 1: material #1 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:1552f6dd41ffc0c8 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=1:1552f6dd41ffc0c8 +geom 2: material #2 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:832c8ed52d67b0f9 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=2:832c8ed52d67b0f9 +geom 3: material #3 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:6e02baf63b264ec5 camera=2:6e02baf63b264ec5 shadow=2:6e02baf63b264ec5 indirect=2:6e02baf63b264ec5 +geom 4: material #3 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov Some((Some(0), false)) swapped false curves false scale 0.5 motion [Translation(Vec3A(1.3999999, 0.0, 0.0))] pieces all=768:dcf5d265b8c6f519 camera=768:dcf5d265b8c6f519 shadow=768:dcf5d265b8c6f519 indirect=768:dcf5d265b8c6f519 +geom 5: material #3 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov Some((Some(0), false)) swapped false curves false scale 0.75 motion [] pieces all=768:47a45983717bb5f1 camera=768:47a45983717bb5f1 shadow=768:47a45983717bb5f1 indirect=768:47a45983717bb5f1 +provenance light /World/Fill: LightOrigin { index: 1, geoms: 1..2 } +provenance light /World/Key: LightOrigin { index: 2, geoms: 2..3 } +provenance light /World/Rim: LightOrigin { index: 0, geoms: 0..1 } +provenance geometry 0..1: /World/Rim +provenance geometry 1..2: /World/Fill +provenance geometry 2..3: /World/Key +provenance geometry 3..4: /World/Floor +provenance geometry 4..5: /World/Runner +provenance geometry 5..6: /World/Hero +provenance mesh: MeshOrigin { geom_id: 3, slot: 0, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 4, slot: 1, baked: false, moving: true } +provenance mesh: MeshOrigin { geom_id: 5, slot: 1, baked: false, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 3036384043218918496, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 1: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 16146526048079508977, n_points: 386, n_indices: 1536, n_uvs: None, smooth: true, material: 0 }), placements: 2, shared: false, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: true, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 3, adaptive: None, domes_seen_by_camera: true, precomp: true, working: None, camera: Some("/World/Cam"), cameras: ["/World/Cam"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [("matte", 1)], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/World/Cam"), offsets: [0, 0], interval: None, query: true, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/precomp_usda-33f481698c3a3ce7-1.image b/crates/crust-core/tests/data/import_baselines/precomp_usda-33f481698c3a3ce7-1.image new file mode 100644 index 000000000..f5a40b79c --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/precomp_usda-33f481698c3a3ce7-1.image @@ -0,0 +1 @@ +320x180 16spp clamp-off 7fc2a052099963ae diff --git a/crates/crust-core/tests/data/import_baselines/precomp_usda-4339ddf5a07dea17-1.digest b/crates/crust-core/tests/data/import_baselines/precomp_usda-4339ddf5a07dea17-1.digest new file mode 100644 index 000000000..3a735c6fb --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/precomp_usda-4339ddf5a07dea17-1.digest @@ -0,0 +1,39 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/World/Cam") +camera: Camera { origin: Vec3A(0.0, 1.1, 7.0), lower_left_corner: Vec3A(-4.8542223, -2.660827, -2.6598039), horizontal: Vec3A(9.708445, -0.0, 0.0), vertical: Vec3A(0.0, 5.4310846, -0.57083), u: Vec3A(1.0, -0.0, 0.0), v: Vec3A(0.0, 0.9945219, -0.104528464), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: Some("/Render/settings") +settings: RenderSettings { samples_per_pixel: 16, max_depth: 4, width: 320, height: 180, region: PixelRect { x0: 0, y0: 0, x1: 320, y1: 180 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: false, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [AovProduct { prim_path: "/Render/Products/precomp", name: "renders/precomp.exr", vars: [AovVar { prim_path: "/Render/Products/Vars/C", name: "C", channel_prefix: None, source: Color, components: 3, precision: Float, accumulation: Filtered, clear: 0.0, expression: None, raw: false, variance: false }, AovVar { prim_path: "/Render/Products/Vars/key", name: "key", channel_prefix: None, source: Lpe, components: 3, precision: Float, accumulation: Filtered, clear: 0.0, expression: Some("C.*"), raw: false, variance: false }, AovVar { prim_path: "/Render/Products/Vars/fill", name: "fill", channel_prefix: None, source: Lpe, components: 3, precision: Float, accumulation: Filtered, clear: 0.0, expression: Some("C.*"), raw: false, variance: false }, AovVar { prim_path: "/Render/Products/Vars/rim", name: "rim", channel_prefix: None, source: Lpe, components: 3, precision: Float, accumulation: Filtered, clear: 0.0, expression: Some("C.*"), raw: false, variance: false }, AovVar { prim_path: "/Render/Products/Vars/matte", name: "matte", channel_prefix: None, source: Primvar(PrimvarSource { index: 0, components: 1, role: Float }), components: 1, precision: Float, accumulation: Filtered, clear: 0.0, expression: None, raw: false, variance: false }, AovVar { prim_path: "/Render/Products/Vars/motion", name: "motion", channel_prefix: None, source: MotionVector, components: 2, precision: Float, accumulation: Closest, clear: 0.0, expression: None, raw: false, variance: false }, AovVar { prim_path: "/Render/Products/Vars/look", name: "look", channel_prefix: None, source: Filter(FilterSource { display: false, filter: 0, output: 0, components: 3, radiance: true }), components: 3, precision: Float, accumulation: Filtered, clear: 0.0, expression: None, raw: false, variance: false }, AovVar { prim_path: "/Render/Products/Vars/look_final", name: "look_final", channel_prefix: None, source: Filter(FilterSource { display: true, filter: 2, output: 0, components: 3, radiance: false }), components: 3, precision: Float, accumulation: Filtered, clear: 0.0, expression: None, raw: false, variance: false }], attributes: [] }], precomp: Some(Precomp { sample_filters: ["/Render/Precomp/look"], display_filters: ["/Render/Precomp/glow", "/Render/Precomp/bloom", "/Render/Precomp/speed"], display: "look_final" }) } +pass: None +source: Source { lens: Some(Lens { focal_length: 28.0, aperture: [20.955, 15.2908], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 10.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/precomp.usda"], invisible_overrides: Some(0) } +layer: $DIR/precomp.usda +lights: 3 +light 0: area name Some("/World/Rim") lpe Some("rim") pmf 0.33333334 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 1: area name Some("/World/Fill") lpe Some("fill") pmf 0.33333334 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 2: area name Some("/World/Key") lpe Some("key") pmf 0.33333334 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 6 geometries, PrimitiveBreakdown { triangles: 6, spheres: 1, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 2 } top level, PrimitiveBreakdown { triangles: 774, spheres: 1, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 2 } unique, motion true +geom 0: material #0 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:4aada018ed0727e5 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=2:4aada018ed0727e5 +geom 1: material #1 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:1552f6dd41ffc0c8 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=1:1552f6dd41ffc0c8 +geom 2: material #2 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:832c8ed52d67b0f9 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=2:832c8ed52d67b0f9 +geom 3: material #3 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:6e02baf63b264ec5 camera=2:6e02baf63b264ec5 shadow=2:6e02baf63b264ec5 indirect=2:6e02baf63b264ec5 +geom 4: material #3 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov Some((Some(0), false)) swapped false curves false scale 0.5 motion [Translation(Vec3A(1.3999999, 0.0, 0.0))] pieces all=768:dcf5d265b8c6f519 camera=768:dcf5d265b8c6f519 shadow=768:dcf5d265b8c6f519 indirect=768:dcf5d265b8c6f519 +geom 5: material #3 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov Some((Some(0), false)) swapped false curves false scale 0.75 motion [] pieces all=768:47a45983717bb5f1 camera=768:47a45983717bb5f1 shadow=768:47a45983717bb5f1 indirect=768:47a45983717bb5f1 +provenance light /World/Fill: LightOrigin { index: 1, geoms: 1..2 } +provenance light /World/Key: LightOrigin { index: 2, geoms: 2..3 } +provenance light /World/Rim: LightOrigin { index: 0, geoms: 0..1 } +provenance geometry 0..1: /World/Rim +provenance geometry 1..2: /World/Fill +provenance geometry 2..3: /World/Key +provenance geometry 3..4: /World/Floor +provenance geometry 4..5: /World/Runner +provenance geometry 5..6: /World/Hero +provenance mesh: MeshOrigin { geom_id: 3, slot: 0, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 4, slot: 1, baked: false, moving: true } +provenance mesh: MeshOrigin { geom_id: 5, slot: 1, baked: false, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 3036384043218918496, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 1: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 16146526048079508977, n_points: 386, n_indices: 1536, n_uvs: None, smooth: true, material: 0 }), placements: 2, shared: false, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: true, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 3, adaptive: None, domes_seen_by_camera: true, precomp: true, working: None, camera: Some("/World/Cam"), cameras: ["/World/Cam"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [("matte", 1)], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/World/Cam"), offsets: [0, 0], interval: None, query: true, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/precomp_usda-4339ddf5a07dea17-1.image b/crates/crust-core/tests/data/import_baselines/precomp_usda-4339ddf5a07dea17-1.image new file mode 100644 index 000000000..f5a40b79c --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/precomp_usda-4339ddf5a07dea17-1.image @@ -0,0 +1 @@ +320x180 16spp clamp-off 7fc2a052099963ae diff --git a/crates/crust-core/tests/data/import_baselines/precomp_usda-886c8d8bef125a6d-1.digest b/crates/crust-core/tests/data/import_baselines/precomp_usda-886c8d8bef125a6d-1.digest new file mode 100644 index 000000000..94235b999 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/precomp_usda-886c8d8bef125a6d-1.digest @@ -0,0 +1,39 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/World/Cam") +camera: Camera { origin: Vec3A(0.0, 1.1, 7.0), lower_left_corner: Vec3A(-4.8542223, -2.660827, -2.6598039), horizontal: Vec3A(9.708445, -0.0, 0.0), vertical: Vec3A(0.0, 5.4310846, -0.57083), u: Vec3A(1.0, -0.0, 0.0), v: Vec3A(0.0, 0.9945219, -0.104528464), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: Some("/Render/settings") +settings: RenderSettings { samples_per_pixel: 16, max_depth: 4, width: 320, height: 180, region: PixelRect { x0: 0, y0: 0, x1: 320, y1: 180 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: false, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [AovProduct { prim_path: "/Render/Products/precomp", name: "renders/precomp.exr", vars: [AovVar { prim_path: "/Render/Products/Vars/C", name: "C", channel_prefix: None, source: Color, components: 3, precision: Float, accumulation: Filtered, clear: 0.0, expression: None, raw: false, variance: false }, AovVar { prim_path: "/Render/Products/Vars/key", name: "key", channel_prefix: None, source: Lpe, components: 3, precision: Float, accumulation: Filtered, clear: 0.0, expression: Some("C.*"), raw: false, variance: false }, AovVar { prim_path: "/Render/Products/Vars/fill", name: "fill", channel_prefix: None, source: Lpe, components: 3, precision: Float, accumulation: Filtered, clear: 0.0, expression: Some("C.*"), raw: false, variance: false }, AovVar { prim_path: "/Render/Products/Vars/rim", name: "rim", channel_prefix: None, source: Lpe, components: 3, precision: Float, accumulation: Filtered, clear: 0.0, expression: Some("C.*"), raw: false, variance: false }, AovVar { prim_path: "/Render/Products/Vars/matte", name: "matte", channel_prefix: None, source: Primvar(PrimvarSource { index: 0, components: 1, role: Float }), components: 1, precision: Float, accumulation: Filtered, clear: 0.0, expression: None, raw: false, variance: false }, AovVar { prim_path: "/Render/Products/Vars/motion", name: "motion", channel_prefix: None, source: MotionVector, components: 2, precision: Float, accumulation: Closest, clear: 0.0, expression: None, raw: false, variance: false }, AovVar { prim_path: "/Render/Products/Vars/look", name: "look", channel_prefix: None, source: Filter(FilterSource { display: false, filter: 0, output: 0, components: 3, radiance: true }), components: 3, precision: Float, accumulation: Filtered, clear: 0.0, expression: None, raw: false, variance: false }, AovVar { prim_path: "/Render/Products/Vars/look_final", name: "look_final", channel_prefix: None, source: Filter(FilterSource { display: true, filter: 2, output: 0, components: 3, radiance: false }), components: 3, precision: Float, accumulation: Filtered, clear: 0.0, expression: None, raw: false, variance: false }], attributes: [] }], precomp: Some(Precomp { sample_filters: ["/Render/Precomp/look"], display_filters: ["/Render/Precomp/glow", "/Render/Precomp/bloom", "/Render/Precomp/speed"], display: "look_final" }) } +pass: None +source: Source { lens: Some(Lens { focal_length: 28.0, aperture: [20.955, 15.2908], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 10.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/precomp.usda"], invisible_overrides: Some(0) } +layer: $DIR/precomp.usda +lights: 3 +light 0: area name Some("/World/Rim") lpe Some("rim") pmf 0.33333334 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 1: area name Some("/World/Fill") lpe Some("fill") pmf 0.33333334 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 2: area name Some("/World/Key") lpe Some("key") pmf 0.33333334 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 6 geometries, PrimitiveBreakdown { triangles: 6, spheres: 1, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 2 } top level, PrimitiveBreakdown { triangles: 774, spheres: 1, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 2 } unique, motion true +geom 0: material #0 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:4aada018ed0727e5 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=2:4aada018ed0727e5 +geom 1: material #1 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:1552f6dd41ffc0c8 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=1:1552f6dd41ffc0c8 +geom 2: material #2 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:832c8ed52d67b0f9 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=2:832c8ed52d67b0f9 +geom 3: material #3 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:6e02baf63b264ec5 camera=2:6e02baf63b264ec5 shadow=2:6e02baf63b264ec5 indirect=2:6e02baf63b264ec5 +geom 4: material #3 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov Some((Some(0), false)) swapped false curves false scale 0.5 motion [Translation(Vec3A(1.3999999, 0.0, 0.0))] pieces all=768:dcf5d265b8c6f519 camera=768:dcf5d265b8c6f519 shadow=768:dcf5d265b8c6f519 indirect=768:dcf5d265b8c6f519 +geom 5: material #3 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov Some((Some(0), false)) swapped false curves false scale 0.75 motion [] pieces all=768:47a45983717bb5f1 camera=768:47a45983717bb5f1 shadow=768:47a45983717bb5f1 indirect=768:47a45983717bb5f1 +provenance light /World/Fill: LightOrigin { index: 1, geoms: 1..2 } +provenance light /World/Key: LightOrigin { index: 2, geoms: 2..3 } +provenance light /World/Rim: LightOrigin { index: 0, geoms: 0..1 } +provenance geometry 0..1: /World/Rim +provenance geometry 1..2: /World/Fill +provenance geometry 2..3: /World/Key +provenance geometry 3..4: /World/Floor +provenance geometry 4..5: /World/Runner +provenance geometry 5..6: /World/Hero +provenance mesh: MeshOrigin { geom_id: 3, slot: 0, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 4, slot: 1, baked: false, moving: true } +provenance mesh: MeshOrigin { geom_id: 5, slot: 1, baked: false, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 3036384043218918496, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 1: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 16146526048079508977, n_points: 386, n_indices: 1536, n_uvs: None, smooth: true, material: 0 }), placements: 2, shared: false, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 3, adaptive: None, domes_seen_by_camera: true, precomp: true, working: None, camera: Some("/World/Cam"), cameras: ["/World/Cam"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [("matte", 1)], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/World/Cam"), offsets: [0, 0], interval: None, query: true, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/precomp_usda-886c8d8bef125a6d-1.image b/crates/crust-core/tests/data/import_baselines/precomp_usda-886c8d8bef125a6d-1.image new file mode 100644 index 000000000..f5a40b79c --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/precomp_usda-886c8d8bef125a6d-1.image @@ -0,0 +1 @@ +320x180 16spp clamp-off 7fc2a052099963ae diff --git a/crates/crust-core/tests/data/import_baselines/precomp_usda-886c8d8bef125a6d-2.digest b/crates/crust-core/tests/data/import_baselines/precomp_usda-886c8d8bef125a6d-2.digest new file mode 100644 index 000000000..94235b999 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/precomp_usda-886c8d8bef125a6d-2.digest @@ -0,0 +1,39 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/World/Cam") +camera: Camera { origin: Vec3A(0.0, 1.1, 7.0), lower_left_corner: Vec3A(-4.8542223, -2.660827, -2.6598039), horizontal: Vec3A(9.708445, -0.0, 0.0), vertical: Vec3A(0.0, 5.4310846, -0.57083), u: Vec3A(1.0, -0.0, 0.0), v: Vec3A(0.0, 0.9945219, -0.104528464), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: Some("/Render/settings") +settings: RenderSettings { samples_per_pixel: 16, max_depth: 4, width: 320, height: 180, region: PixelRect { x0: 0, y0: 0, x1: 320, y1: 180 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: false, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [AovProduct { prim_path: "/Render/Products/precomp", name: "renders/precomp.exr", vars: [AovVar { prim_path: "/Render/Products/Vars/C", name: "C", channel_prefix: None, source: Color, components: 3, precision: Float, accumulation: Filtered, clear: 0.0, expression: None, raw: false, variance: false }, AovVar { prim_path: "/Render/Products/Vars/key", name: "key", channel_prefix: None, source: Lpe, components: 3, precision: Float, accumulation: Filtered, clear: 0.0, expression: Some("C.*"), raw: false, variance: false }, AovVar { prim_path: "/Render/Products/Vars/fill", name: "fill", channel_prefix: None, source: Lpe, components: 3, precision: Float, accumulation: Filtered, clear: 0.0, expression: Some("C.*"), raw: false, variance: false }, AovVar { prim_path: "/Render/Products/Vars/rim", name: "rim", channel_prefix: None, source: Lpe, components: 3, precision: Float, accumulation: Filtered, clear: 0.0, expression: Some("C.*"), raw: false, variance: false }, AovVar { prim_path: "/Render/Products/Vars/matte", name: "matte", channel_prefix: None, source: Primvar(PrimvarSource { index: 0, components: 1, role: Float }), components: 1, precision: Float, accumulation: Filtered, clear: 0.0, expression: None, raw: false, variance: false }, AovVar { prim_path: "/Render/Products/Vars/motion", name: "motion", channel_prefix: None, source: MotionVector, components: 2, precision: Float, accumulation: Closest, clear: 0.0, expression: None, raw: false, variance: false }, AovVar { prim_path: "/Render/Products/Vars/look", name: "look", channel_prefix: None, source: Filter(FilterSource { display: false, filter: 0, output: 0, components: 3, radiance: true }), components: 3, precision: Float, accumulation: Filtered, clear: 0.0, expression: None, raw: false, variance: false }, AovVar { prim_path: "/Render/Products/Vars/look_final", name: "look_final", channel_prefix: None, source: Filter(FilterSource { display: true, filter: 2, output: 0, components: 3, radiance: false }), components: 3, precision: Float, accumulation: Filtered, clear: 0.0, expression: None, raw: false, variance: false }], attributes: [] }], precomp: Some(Precomp { sample_filters: ["/Render/Precomp/look"], display_filters: ["/Render/Precomp/glow", "/Render/Precomp/bloom", "/Render/Precomp/speed"], display: "look_final" }) } +pass: None +source: Source { lens: Some(Lens { focal_length: 28.0, aperture: [20.955, 15.2908], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 10.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/precomp.usda"], invisible_overrides: Some(0) } +layer: $DIR/precomp.usda +lights: 3 +light 0: area name Some("/World/Rim") lpe Some("rim") pmf 0.33333334 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 1: area name Some("/World/Fill") lpe Some("fill") pmf 0.33333334 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 2: area name Some("/World/Key") lpe Some("key") pmf 0.33333334 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 6 geometries, PrimitiveBreakdown { triangles: 6, spheres: 1, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 2 } top level, PrimitiveBreakdown { triangles: 774, spheres: 1, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 2 } unique, motion true +geom 0: material #0 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:4aada018ed0727e5 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=2:4aada018ed0727e5 +geom 1: material #1 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:1552f6dd41ffc0c8 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=1:1552f6dd41ffc0c8 +geom 2: material #2 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:832c8ed52d67b0f9 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=2:832c8ed52d67b0f9 +geom 3: material #3 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:6e02baf63b264ec5 camera=2:6e02baf63b264ec5 shadow=2:6e02baf63b264ec5 indirect=2:6e02baf63b264ec5 +geom 4: material #3 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov Some((Some(0), false)) swapped false curves false scale 0.5 motion [Translation(Vec3A(1.3999999, 0.0, 0.0))] pieces all=768:dcf5d265b8c6f519 camera=768:dcf5d265b8c6f519 shadow=768:dcf5d265b8c6f519 indirect=768:dcf5d265b8c6f519 +geom 5: material #3 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov Some((Some(0), false)) swapped false curves false scale 0.75 motion [] pieces all=768:47a45983717bb5f1 camera=768:47a45983717bb5f1 shadow=768:47a45983717bb5f1 indirect=768:47a45983717bb5f1 +provenance light /World/Fill: LightOrigin { index: 1, geoms: 1..2 } +provenance light /World/Key: LightOrigin { index: 2, geoms: 2..3 } +provenance light /World/Rim: LightOrigin { index: 0, geoms: 0..1 } +provenance geometry 0..1: /World/Rim +provenance geometry 1..2: /World/Fill +provenance geometry 2..3: /World/Key +provenance geometry 3..4: /World/Floor +provenance geometry 4..5: /World/Runner +provenance geometry 5..6: /World/Hero +provenance mesh: MeshOrigin { geom_id: 3, slot: 0, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 4, slot: 1, baked: false, moving: true } +provenance mesh: MeshOrigin { geom_id: 5, slot: 1, baked: false, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 3036384043218918496, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 1: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 16146526048079508977, n_points: 386, n_indices: 1536, n_uvs: None, smooth: true, material: 0 }), placements: 2, shared: false, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 3, adaptive: None, domes_seen_by_camera: true, precomp: true, working: None, camera: Some("/World/Cam"), cameras: ["/World/Cam"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [("matte", 1)], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/World/Cam"), offsets: [0, 0], interval: None, query: true, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/precomp_usda-886c8d8bef125a6d-2.image b/crates/crust-core/tests/data/import_baselines/precomp_usda-886c8d8bef125a6d-2.image new file mode 100644 index 000000000..f5a40b79c --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/precomp_usda-886c8d8bef125a6d-2.image @@ -0,0 +1 @@ +320x180 16spp clamp-off 7fc2a052099963ae diff --git a/crates/crust-core/tests/data/import_baselines/precomp_usda-9c591dbe4a6a2374-1.digest b/crates/crust-core/tests/data/import_baselines/precomp_usda-9c591dbe4a6a2374-1.digest new file mode 100644 index 000000000..94235b999 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/precomp_usda-9c591dbe4a6a2374-1.digest @@ -0,0 +1,39 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/World/Cam") +camera: Camera { origin: Vec3A(0.0, 1.1, 7.0), lower_left_corner: Vec3A(-4.8542223, -2.660827, -2.6598039), horizontal: Vec3A(9.708445, -0.0, 0.0), vertical: Vec3A(0.0, 5.4310846, -0.57083), u: Vec3A(1.0, -0.0, 0.0), v: Vec3A(0.0, 0.9945219, -0.104528464), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: Some("/Render/settings") +settings: RenderSettings { samples_per_pixel: 16, max_depth: 4, width: 320, height: 180, region: PixelRect { x0: 0, y0: 0, x1: 320, y1: 180 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: false, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [AovProduct { prim_path: "/Render/Products/precomp", name: "renders/precomp.exr", vars: [AovVar { prim_path: "/Render/Products/Vars/C", name: "C", channel_prefix: None, source: Color, components: 3, precision: Float, accumulation: Filtered, clear: 0.0, expression: None, raw: false, variance: false }, AovVar { prim_path: "/Render/Products/Vars/key", name: "key", channel_prefix: None, source: Lpe, components: 3, precision: Float, accumulation: Filtered, clear: 0.0, expression: Some("C.*"), raw: false, variance: false }, AovVar { prim_path: "/Render/Products/Vars/fill", name: "fill", channel_prefix: None, source: Lpe, components: 3, precision: Float, accumulation: Filtered, clear: 0.0, expression: Some("C.*"), raw: false, variance: false }, AovVar { prim_path: "/Render/Products/Vars/rim", name: "rim", channel_prefix: None, source: Lpe, components: 3, precision: Float, accumulation: Filtered, clear: 0.0, expression: Some("C.*"), raw: false, variance: false }, AovVar { prim_path: "/Render/Products/Vars/matte", name: "matte", channel_prefix: None, source: Primvar(PrimvarSource { index: 0, components: 1, role: Float }), components: 1, precision: Float, accumulation: Filtered, clear: 0.0, expression: None, raw: false, variance: false }, AovVar { prim_path: "/Render/Products/Vars/motion", name: "motion", channel_prefix: None, source: MotionVector, components: 2, precision: Float, accumulation: Closest, clear: 0.0, expression: None, raw: false, variance: false }, AovVar { prim_path: "/Render/Products/Vars/look", name: "look", channel_prefix: None, source: Filter(FilterSource { display: false, filter: 0, output: 0, components: 3, radiance: true }), components: 3, precision: Float, accumulation: Filtered, clear: 0.0, expression: None, raw: false, variance: false }, AovVar { prim_path: "/Render/Products/Vars/look_final", name: "look_final", channel_prefix: None, source: Filter(FilterSource { display: true, filter: 2, output: 0, components: 3, radiance: false }), components: 3, precision: Float, accumulation: Filtered, clear: 0.0, expression: None, raw: false, variance: false }], attributes: [] }], precomp: Some(Precomp { sample_filters: ["/Render/Precomp/look"], display_filters: ["/Render/Precomp/glow", "/Render/Precomp/bloom", "/Render/Precomp/speed"], display: "look_final" }) } +pass: None +source: Source { lens: Some(Lens { focal_length: 28.0, aperture: [20.955, 15.2908], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 10.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/precomp.usda"], invisible_overrides: Some(0) } +layer: $DIR/precomp.usda +lights: 3 +light 0: area name Some("/World/Rim") lpe Some("rim") pmf 0.33333334 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 1: area name Some("/World/Fill") lpe Some("fill") pmf 0.33333334 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 2: area name Some("/World/Key") lpe Some("key") pmf 0.33333334 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 6 geometries, PrimitiveBreakdown { triangles: 6, spheres: 1, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 2 } top level, PrimitiveBreakdown { triangles: 774, spheres: 1, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 2 } unique, motion true +geom 0: material #0 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:4aada018ed0727e5 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=2:4aada018ed0727e5 +geom 1: material #1 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:1552f6dd41ffc0c8 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=1:1552f6dd41ffc0c8 +geom 2: material #2 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:832c8ed52d67b0f9 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=2:832c8ed52d67b0f9 +geom 3: material #3 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:6e02baf63b264ec5 camera=2:6e02baf63b264ec5 shadow=2:6e02baf63b264ec5 indirect=2:6e02baf63b264ec5 +geom 4: material #3 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov Some((Some(0), false)) swapped false curves false scale 0.5 motion [Translation(Vec3A(1.3999999, 0.0, 0.0))] pieces all=768:dcf5d265b8c6f519 camera=768:dcf5d265b8c6f519 shadow=768:dcf5d265b8c6f519 indirect=768:dcf5d265b8c6f519 +geom 5: material #3 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov Some((Some(0), false)) swapped false curves false scale 0.75 motion [] pieces all=768:47a45983717bb5f1 camera=768:47a45983717bb5f1 shadow=768:47a45983717bb5f1 indirect=768:47a45983717bb5f1 +provenance light /World/Fill: LightOrigin { index: 1, geoms: 1..2 } +provenance light /World/Key: LightOrigin { index: 2, geoms: 2..3 } +provenance light /World/Rim: LightOrigin { index: 0, geoms: 0..1 } +provenance geometry 0..1: /World/Rim +provenance geometry 1..2: /World/Fill +provenance geometry 2..3: /World/Key +provenance geometry 3..4: /World/Floor +provenance geometry 4..5: /World/Runner +provenance geometry 5..6: /World/Hero +provenance mesh: MeshOrigin { geom_id: 3, slot: 0, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 4, slot: 1, baked: false, moving: true } +provenance mesh: MeshOrigin { geom_id: 5, slot: 1, baked: false, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 3036384043218918496, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 1: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 16146526048079508977, n_points: 386, n_indices: 1536, n_uvs: None, smooth: true, material: 0 }), placements: 2, shared: false, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 3, adaptive: None, domes_seen_by_camera: true, precomp: true, working: None, camera: Some("/World/Cam"), cameras: ["/World/Cam"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [("matte", 1)], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/World/Cam"), offsets: [0, 0], interval: None, query: true, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/precomp_usda-9c591dbe4a6a2374-1.image b/crates/crust-core/tests/data/import_baselines/precomp_usda-9c591dbe4a6a2374-1.image new file mode 100644 index 000000000..f5a40b79c --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/precomp_usda-9c591dbe4a6a2374-1.image @@ -0,0 +1 @@ +320x180 16spp clamp-off 7fc2a052099963ae diff --git a/crates/crust-core/tests/data/import_baselines/precomp_usda-d9d1e77cdf9ce71d-1.digest b/crates/crust-core/tests/data/import_baselines/precomp_usda-d9d1e77cdf9ce71d-1.digest new file mode 100644 index 000000000..3a735c6fb --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/precomp_usda-d9d1e77cdf9ce71d-1.digest @@ -0,0 +1,39 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/World/Cam") +camera: Camera { origin: Vec3A(0.0, 1.1, 7.0), lower_left_corner: Vec3A(-4.8542223, -2.660827, -2.6598039), horizontal: Vec3A(9.708445, -0.0, 0.0), vertical: Vec3A(0.0, 5.4310846, -0.57083), u: Vec3A(1.0, -0.0, 0.0), v: Vec3A(0.0, 0.9945219, -0.104528464), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: Some("/Render/settings") +settings: RenderSettings { samples_per_pixel: 16, max_depth: 4, width: 320, height: 180, region: PixelRect { x0: 0, y0: 0, x1: 320, y1: 180 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: false, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [AovProduct { prim_path: "/Render/Products/precomp", name: "renders/precomp.exr", vars: [AovVar { prim_path: "/Render/Products/Vars/C", name: "C", channel_prefix: None, source: Color, components: 3, precision: Float, accumulation: Filtered, clear: 0.0, expression: None, raw: false, variance: false }, AovVar { prim_path: "/Render/Products/Vars/key", name: "key", channel_prefix: None, source: Lpe, components: 3, precision: Float, accumulation: Filtered, clear: 0.0, expression: Some("C.*"), raw: false, variance: false }, AovVar { prim_path: "/Render/Products/Vars/fill", name: "fill", channel_prefix: None, source: Lpe, components: 3, precision: Float, accumulation: Filtered, clear: 0.0, expression: Some("C.*"), raw: false, variance: false }, AovVar { prim_path: "/Render/Products/Vars/rim", name: "rim", channel_prefix: None, source: Lpe, components: 3, precision: Float, accumulation: Filtered, clear: 0.0, expression: Some("C.*"), raw: false, variance: false }, AovVar { prim_path: "/Render/Products/Vars/matte", name: "matte", channel_prefix: None, source: Primvar(PrimvarSource { index: 0, components: 1, role: Float }), components: 1, precision: Float, accumulation: Filtered, clear: 0.0, expression: None, raw: false, variance: false }, AovVar { prim_path: "/Render/Products/Vars/motion", name: "motion", channel_prefix: None, source: MotionVector, components: 2, precision: Float, accumulation: Closest, clear: 0.0, expression: None, raw: false, variance: false }, AovVar { prim_path: "/Render/Products/Vars/look", name: "look", channel_prefix: None, source: Filter(FilterSource { display: false, filter: 0, output: 0, components: 3, radiance: true }), components: 3, precision: Float, accumulation: Filtered, clear: 0.0, expression: None, raw: false, variance: false }, AovVar { prim_path: "/Render/Products/Vars/look_final", name: "look_final", channel_prefix: None, source: Filter(FilterSource { display: true, filter: 2, output: 0, components: 3, radiance: false }), components: 3, precision: Float, accumulation: Filtered, clear: 0.0, expression: None, raw: false, variance: false }], attributes: [] }], precomp: Some(Precomp { sample_filters: ["/Render/Precomp/look"], display_filters: ["/Render/Precomp/glow", "/Render/Precomp/bloom", "/Render/Precomp/speed"], display: "look_final" }) } +pass: None +source: Source { lens: Some(Lens { focal_length: 28.0, aperture: [20.955, 15.2908], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 10.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/precomp.usda"], invisible_overrides: Some(0) } +layer: $DIR/precomp.usda +lights: 3 +light 0: area name Some("/World/Rim") lpe Some("rim") pmf 0.33333334 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 1: area name Some("/World/Fill") lpe Some("fill") pmf 0.33333334 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 2: area name Some("/World/Key") lpe Some("key") pmf 0.33333334 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 6 geometries, PrimitiveBreakdown { triangles: 6, spheres: 1, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 2 } top level, PrimitiveBreakdown { triangles: 774, spheres: 1, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 2 } unique, motion true +geom 0: material #0 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:4aada018ed0727e5 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=2:4aada018ed0727e5 +geom 1: material #1 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:1552f6dd41ffc0c8 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=1:1552f6dd41ffc0c8 +geom 2: material #2 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:832c8ed52d67b0f9 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=2:832c8ed52d67b0f9 +geom 3: material #3 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:6e02baf63b264ec5 camera=2:6e02baf63b264ec5 shadow=2:6e02baf63b264ec5 indirect=2:6e02baf63b264ec5 +geom 4: material #3 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov Some((Some(0), false)) swapped false curves false scale 0.5 motion [Translation(Vec3A(1.3999999, 0.0, 0.0))] pieces all=768:dcf5d265b8c6f519 camera=768:dcf5d265b8c6f519 shadow=768:dcf5d265b8c6f519 indirect=768:dcf5d265b8c6f519 +geom 5: material #3 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov Some((Some(0), false)) swapped false curves false scale 0.75 motion [] pieces all=768:47a45983717bb5f1 camera=768:47a45983717bb5f1 shadow=768:47a45983717bb5f1 indirect=768:47a45983717bb5f1 +provenance light /World/Fill: LightOrigin { index: 1, geoms: 1..2 } +provenance light /World/Key: LightOrigin { index: 2, geoms: 2..3 } +provenance light /World/Rim: LightOrigin { index: 0, geoms: 0..1 } +provenance geometry 0..1: /World/Rim +provenance geometry 1..2: /World/Fill +provenance geometry 2..3: /World/Key +provenance geometry 3..4: /World/Floor +provenance geometry 4..5: /World/Runner +provenance geometry 5..6: /World/Hero +provenance mesh: MeshOrigin { geom_id: 3, slot: 0, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 4, slot: 1, baked: false, moving: true } +provenance mesh: MeshOrigin { geom_id: 5, slot: 1, baked: false, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 3036384043218918496, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 1: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 16146526048079508977, n_points: 386, n_indices: 1536, n_uvs: None, smooth: true, material: 0 }), placements: 2, shared: false, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: true, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 3, adaptive: None, domes_seen_by_camera: true, precomp: true, working: None, camera: Some("/World/Cam"), cameras: ["/World/Cam"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [("matte", 1)], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/World/Cam"), offsets: [0, 0], interval: None, query: true, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/precomp_usda-d9d1e77cdf9ce71d-1.image b/crates/crust-core/tests/data/import_baselines/precomp_usda-d9d1e77cdf9ce71d-1.image new file mode 100644 index 000000000..f5a40b79c --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/precomp_usda-d9d1e77cdf9ce71d-1.image @@ -0,0 +1 @@ +320x180 16spp clamp-off 7fc2a052099963ae diff --git a/crates/crust-core/tests/data/import_baselines/precomp_usda-e1a87b662c5109e8-1.digest b/crates/crust-core/tests/data/import_baselines/precomp_usda-e1a87b662c5109e8-1.digest new file mode 100644 index 000000000..3a735c6fb --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/precomp_usda-e1a87b662c5109e8-1.digest @@ -0,0 +1,39 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/World/Cam") +camera: Camera { origin: Vec3A(0.0, 1.1, 7.0), lower_left_corner: Vec3A(-4.8542223, -2.660827, -2.6598039), horizontal: Vec3A(9.708445, -0.0, 0.0), vertical: Vec3A(0.0, 5.4310846, -0.57083), u: Vec3A(1.0, -0.0, 0.0), v: Vec3A(0.0, 0.9945219, -0.104528464), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: Some("/Render/settings") +settings: RenderSettings { samples_per_pixel: 16, max_depth: 4, width: 320, height: 180, region: PixelRect { x0: 0, y0: 0, x1: 320, y1: 180 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: false, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [AovProduct { prim_path: "/Render/Products/precomp", name: "renders/precomp.exr", vars: [AovVar { prim_path: "/Render/Products/Vars/C", name: "C", channel_prefix: None, source: Color, components: 3, precision: Float, accumulation: Filtered, clear: 0.0, expression: None, raw: false, variance: false }, AovVar { prim_path: "/Render/Products/Vars/key", name: "key", channel_prefix: None, source: Lpe, components: 3, precision: Float, accumulation: Filtered, clear: 0.0, expression: Some("C.*"), raw: false, variance: false }, AovVar { prim_path: "/Render/Products/Vars/fill", name: "fill", channel_prefix: None, source: Lpe, components: 3, precision: Float, accumulation: Filtered, clear: 0.0, expression: Some("C.*"), raw: false, variance: false }, AovVar { prim_path: "/Render/Products/Vars/rim", name: "rim", channel_prefix: None, source: Lpe, components: 3, precision: Float, accumulation: Filtered, clear: 0.0, expression: Some("C.*"), raw: false, variance: false }, AovVar { prim_path: "/Render/Products/Vars/matte", name: "matte", channel_prefix: None, source: Primvar(PrimvarSource { index: 0, components: 1, role: Float }), components: 1, precision: Float, accumulation: Filtered, clear: 0.0, expression: None, raw: false, variance: false }, AovVar { prim_path: "/Render/Products/Vars/motion", name: "motion", channel_prefix: None, source: MotionVector, components: 2, precision: Float, accumulation: Closest, clear: 0.0, expression: None, raw: false, variance: false }, AovVar { prim_path: "/Render/Products/Vars/look", name: "look", channel_prefix: None, source: Filter(FilterSource { display: false, filter: 0, output: 0, components: 3, radiance: true }), components: 3, precision: Float, accumulation: Filtered, clear: 0.0, expression: None, raw: false, variance: false }, AovVar { prim_path: "/Render/Products/Vars/look_final", name: "look_final", channel_prefix: None, source: Filter(FilterSource { display: true, filter: 2, output: 0, components: 3, radiance: false }), components: 3, precision: Float, accumulation: Filtered, clear: 0.0, expression: None, raw: false, variance: false }], attributes: [] }], precomp: Some(Precomp { sample_filters: ["/Render/Precomp/look"], display_filters: ["/Render/Precomp/glow", "/Render/Precomp/bloom", "/Render/Precomp/speed"], display: "look_final" }) } +pass: None +source: Source { lens: Some(Lens { focal_length: 28.0, aperture: [20.955, 15.2908], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 10.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/precomp.usda"], invisible_overrides: Some(0) } +layer: $DIR/precomp.usda +lights: 3 +light 0: area name Some("/World/Rim") lpe Some("rim") pmf 0.33333334 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 1: area name Some("/World/Fill") lpe Some("fill") pmf 0.33333334 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 2: area name Some("/World/Key") lpe Some("key") pmf 0.33333334 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 6 geometries, PrimitiveBreakdown { triangles: 6, spheres: 1, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 2 } top level, PrimitiveBreakdown { triangles: 774, spheres: 1, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 2 } unique, motion true +geom 0: material #0 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:4aada018ed0727e5 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=2:4aada018ed0727e5 +geom 1: material #1 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:1552f6dd41ffc0c8 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=1:1552f6dd41ffc0c8 +geom 2: material #2 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:832c8ed52d67b0f9 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=2:832c8ed52d67b0f9 +geom 3: material #3 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:6e02baf63b264ec5 camera=2:6e02baf63b264ec5 shadow=2:6e02baf63b264ec5 indirect=2:6e02baf63b264ec5 +geom 4: material #3 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov Some((Some(0), false)) swapped false curves false scale 0.5 motion [Translation(Vec3A(1.3999999, 0.0, 0.0))] pieces all=768:dcf5d265b8c6f519 camera=768:dcf5d265b8c6f519 shadow=768:dcf5d265b8c6f519 indirect=768:dcf5d265b8c6f519 +geom 5: material #3 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov Some((Some(0), false)) swapped false curves false scale 0.75 motion [] pieces all=768:47a45983717bb5f1 camera=768:47a45983717bb5f1 shadow=768:47a45983717bb5f1 indirect=768:47a45983717bb5f1 +provenance light /World/Fill: LightOrigin { index: 1, geoms: 1..2 } +provenance light /World/Key: LightOrigin { index: 2, geoms: 2..3 } +provenance light /World/Rim: LightOrigin { index: 0, geoms: 0..1 } +provenance geometry 0..1: /World/Rim +provenance geometry 1..2: /World/Fill +provenance geometry 2..3: /World/Key +provenance geometry 3..4: /World/Floor +provenance geometry 4..5: /World/Runner +provenance geometry 5..6: /World/Hero +provenance mesh: MeshOrigin { geom_id: 3, slot: 0, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 4, slot: 1, baked: false, moving: true } +provenance mesh: MeshOrigin { geom_id: 5, slot: 1, baked: false, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 3036384043218918496, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 1: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 16146526048079508977, n_points: 386, n_indices: 1536, n_uvs: None, smooth: true, material: 0 }), placements: 2, shared: false, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: true, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 3, adaptive: None, domes_seen_by_camera: true, precomp: true, working: None, camera: Some("/World/Cam"), cameras: ["/World/Cam"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [("matte", 1)], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/World/Cam"), offsets: [0, 0], interval: None, query: true, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/precomp_usda-e1a87b662c5109e8-1.image b/crates/crust-core/tests/data/import_baselines/precomp_usda-e1a87b662c5109e8-1.image new file mode 100644 index 000000000..f5a40b79c --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/precomp_usda-e1a87b662c5109e8-1.image @@ -0,0 +1 @@ +320x180 16spp clamp-off 7fc2a052099963ae diff --git a/crates/crust-core/tests/data/import_baselines/precomp_usda-e28059e8e7dd2fb9-1.digest b/crates/crust-core/tests/data/import_baselines/precomp_usda-e28059e8e7dd2fb9-1.digest new file mode 100644 index 000000000..94235b999 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/precomp_usda-e28059e8e7dd2fb9-1.digest @@ -0,0 +1,39 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/World/Cam") +camera: Camera { origin: Vec3A(0.0, 1.1, 7.0), lower_left_corner: Vec3A(-4.8542223, -2.660827, -2.6598039), horizontal: Vec3A(9.708445, -0.0, 0.0), vertical: Vec3A(0.0, 5.4310846, -0.57083), u: Vec3A(1.0, -0.0, 0.0), v: Vec3A(0.0, 0.9945219, -0.104528464), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: Some("/Render/settings") +settings: RenderSettings { samples_per_pixel: 16, max_depth: 4, width: 320, height: 180, region: PixelRect { x0: 0, y0: 0, x1: 320, y1: 180 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: false, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [AovProduct { prim_path: "/Render/Products/precomp", name: "renders/precomp.exr", vars: [AovVar { prim_path: "/Render/Products/Vars/C", name: "C", channel_prefix: None, source: Color, components: 3, precision: Float, accumulation: Filtered, clear: 0.0, expression: None, raw: false, variance: false }, AovVar { prim_path: "/Render/Products/Vars/key", name: "key", channel_prefix: None, source: Lpe, components: 3, precision: Float, accumulation: Filtered, clear: 0.0, expression: Some("C.*"), raw: false, variance: false }, AovVar { prim_path: "/Render/Products/Vars/fill", name: "fill", channel_prefix: None, source: Lpe, components: 3, precision: Float, accumulation: Filtered, clear: 0.0, expression: Some("C.*"), raw: false, variance: false }, AovVar { prim_path: "/Render/Products/Vars/rim", name: "rim", channel_prefix: None, source: Lpe, components: 3, precision: Float, accumulation: Filtered, clear: 0.0, expression: Some("C.*"), raw: false, variance: false }, AovVar { prim_path: "/Render/Products/Vars/matte", name: "matte", channel_prefix: None, source: Primvar(PrimvarSource { index: 0, components: 1, role: Float }), components: 1, precision: Float, accumulation: Filtered, clear: 0.0, expression: None, raw: false, variance: false }, AovVar { prim_path: "/Render/Products/Vars/motion", name: "motion", channel_prefix: None, source: MotionVector, components: 2, precision: Float, accumulation: Closest, clear: 0.0, expression: None, raw: false, variance: false }, AovVar { prim_path: "/Render/Products/Vars/look", name: "look", channel_prefix: None, source: Filter(FilterSource { display: false, filter: 0, output: 0, components: 3, radiance: true }), components: 3, precision: Float, accumulation: Filtered, clear: 0.0, expression: None, raw: false, variance: false }, AovVar { prim_path: "/Render/Products/Vars/look_final", name: "look_final", channel_prefix: None, source: Filter(FilterSource { display: true, filter: 2, output: 0, components: 3, radiance: false }), components: 3, precision: Float, accumulation: Filtered, clear: 0.0, expression: None, raw: false, variance: false }], attributes: [] }], precomp: Some(Precomp { sample_filters: ["/Render/Precomp/look"], display_filters: ["/Render/Precomp/glow", "/Render/Precomp/bloom", "/Render/Precomp/speed"], display: "look_final" }) } +pass: None +source: Source { lens: Some(Lens { focal_length: 28.0, aperture: [20.955, 15.2908], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 10.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/precomp.usda"], invisible_overrides: Some(0) } +layer: $DIR/precomp.usda +lights: 3 +light 0: area name Some("/World/Rim") lpe Some("rim") pmf 0.33333334 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 1: area name Some("/World/Fill") lpe Some("fill") pmf 0.33333334 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 2: area name Some("/World/Key") lpe Some("key") pmf 0.33333334 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 6 geometries, PrimitiveBreakdown { triangles: 6, spheres: 1, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 2 } top level, PrimitiveBreakdown { triangles: 774, spheres: 1, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 2 } unique, motion true +geom 0: material #0 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:4aada018ed0727e5 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=2:4aada018ed0727e5 +geom 1: material #1 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:1552f6dd41ffc0c8 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=1:1552f6dd41ffc0c8 +geom 2: material #2 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:832c8ed52d67b0f9 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=2:832c8ed52d67b0f9 +geom 3: material #3 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:6e02baf63b264ec5 camera=2:6e02baf63b264ec5 shadow=2:6e02baf63b264ec5 indirect=2:6e02baf63b264ec5 +geom 4: material #3 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov Some((Some(0), false)) swapped false curves false scale 0.5 motion [Translation(Vec3A(1.3999999, 0.0, 0.0))] pieces all=768:dcf5d265b8c6f519 camera=768:dcf5d265b8c6f519 shadow=768:dcf5d265b8c6f519 indirect=768:dcf5d265b8c6f519 +geom 5: material #3 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov Some((Some(0), false)) swapped false curves false scale 0.75 motion [] pieces all=768:47a45983717bb5f1 camera=768:47a45983717bb5f1 shadow=768:47a45983717bb5f1 indirect=768:47a45983717bb5f1 +provenance light /World/Fill: LightOrigin { index: 1, geoms: 1..2 } +provenance light /World/Key: LightOrigin { index: 2, geoms: 2..3 } +provenance light /World/Rim: LightOrigin { index: 0, geoms: 0..1 } +provenance geometry 0..1: /World/Rim +provenance geometry 1..2: /World/Fill +provenance geometry 2..3: /World/Key +provenance geometry 3..4: /World/Floor +provenance geometry 4..5: /World/Runner +provenance geometry 5..6: /World/Hero +provenance mesh: MeshOrigin { geom_id: 3, slot: 0, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 4, slot: 1, baked: false, moving: true } +provenance mesh: MeshOrigin { geom_id: 5, slot: 1, baked: false, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 3036384043218918496, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 1: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 16146526048079508977, n_points: 386, n_indices: 1536, n_uvs: None, smooth: true, material: 0 }), placements: 2, shared: false, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 3, adaptive: None, domes_seen_by_camera: true, precomp: true, working: None, camera: Some("/World/Cam"), cameras: ["/World/Cam"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [("matte", 1)], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/World/Cam"), offsets: [0, 0], interval: None, query: true, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/precomp_usda-e28059e8e7dd2fb9-1.image b/crates/crust-core/tests/data/import_baselines/precomp_usda-e28059e8e7dd2fb9-1.image new file mode 100644 index 000000000..f5a40b79c --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/precomp_usda-e28059e8e7dd2fb9-1.image @@ -0,0 +1 @@ +320x180 16spp clamp-off 7fc2a052099963ae diff --git a/crates/crust-core/tests/data/import_baselines/preview_plain_usda-56c5917475bdaa40-1.digest b/crates/crust-core/tests/data/import_baselines/preview_plain_usda-56c5917475bdaa40-1.digest new file mode 100644 index 000000000..2f2e74a36 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/preview_plain_usda-56c5917475bdaa40-1.digest @@ -0,0 +1,20 @@ +time: None +working space: ACEScg +camera path: None +camera: Camera { origin: Vec3A(15.0, 3.0, 3.0), lower_left_corner: Vec3A(4.8863316, -0.044797063, 4.174048), horizontal: Vec3A(1.2295314, 0.0, -6.147657), vertical: Vec3A(-0.44830504, 3.4967792, -0.08966101), u: Vec3A(0.19611613, 0.0, -0.9805807), v: Vec3A(-0.1271232, 0.991561, -0.02542464), lens_radius: 0.05, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: Some("/Render/settings") +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 640, height: 360, region: PixelRect { x0: 0, y0: 0, x1: 640, y1: 360 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: None, depth_of_field: true, motion_blur: false, layer_stack: ["$DIR/preview_plain.usda"], invisible_overrides: Some(0) } +layer: $DIR/preview_plain.usda +warning: Warning { code: CameraMissing, kind: Skipped, count: 1, prims: [], message: "USD stage has no UsdGeomCamera — falling back to world::get_settings camera" } +lights: 0 +volumes: 0 +world: 1 geometries, PrimitiveBreakdown { triangles: 0, spheres: 1, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 0, spheres: 1, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:fb1e7d48790aec95 camera=1:fb1e7d48790aec95 shadow=1:fb1e7d48790aec95 indirect=1:fb1e7d48790aec95 +provenance material /World/Looks/M: MaterialOrigin { slots: [0], displaced: false } +provenance geometry 0..1: /World/Ball +provenance spheres: [0] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: None, cameras: [], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: None, offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("ACEScg") diff --git a/crates/crust-core/tests/data/import_baselines/preview_plain_usda-56c5917475bdaa40-1.image b/crates/crust-core/tests/data/import_baselines/preview_plain_usda-56c5917475bdaa40-1.image new file mode 100644 index 000000000..c734c5b1d --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/preview_plain_usda-56c5917475bdaa40-1.image @@ -0,0 +1 @@ +640x360 16spp clamp-off a04a09c0d4b5e325 diff --git a/crates/crust-core/tests/data/import_baselines/preview_tagged_usda-21171eef0f915c9d-1.digest b/crates/crust-core/tests/data/import_baselines/preview_tagged_usda-21171eef0f915c9d-1.digest new file mode 100644 index 000000000..0f7af945c --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/preview_tagged_usda-21171eef0f915c9d-1.digest @@ -0,0 +1,20 @@ +time: None +working space: ACEScg +camera path: None +camera: Camera { origin: Vec3A(15.0, 3.0, 3.0), lower_left_corner: Vec3A(4.8863316, -0.044797063, 4.174048), horizontal: Vec3A(1.2295314, 0.0, -6.147657), vertical: Vec3A(-0.44830504, 3.4967792, -0.08966101), u: Vec3A(0.19611613, 0.0, -0.9805807), v: Vec3A(-0.1271232, 0.991561, -0.02542464), lens_radius: 0.05, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: Some("/Render/settings") +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 640, height: 360, region: PixelRect { x0: 0, y0: 0, x1: 640, y1: 360 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: None, depth_of_field: true, motion_blur: false, layer_stack: ["$DIR/preview_tagged.usda"], invisible_overrides: Some(0) } +layer: $DIR/preview_tagged.usda +warning: Warning { code: CameraMissing, kind: Skipped, count: 1, prims: [], message: "USD stage has no UsdGeomCamera — falling back to world::get_settings camera" } +lights: 0 +volumes: 0 +world: 1 geometries, PrimitiveBreakdown { triangles: 0, spheres: 1, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 0, spheres: 1, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:fb1e7d48790aec95 camera=1:fb1e7d48790aec95 shadow=1:fb1e7d48790aec95 indirect=1:fb1e7d48790aec95 +provenance material /World/Looks/M: MaterialOrigin { slots: [0], displaced: false } +provenance geometry 0..1: /World/Ball +provenance spheres: [0] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: None, cameras: [], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: None, offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("ACEScg") diff --git a/crates/crust-core/tests/data/import_baselines/preview_tagged_usda-21171eef0f915c9d-1.image b/crates/crust-core/tests/data/import_baselines/preview_tagged_usda-21171eef0f915c9d-1.image new file mode 100644 index 000000000..c734c5b1d --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/preview_tagged_usda-21171eef0f915c9d-1.image @@ -0,0 +1 @@ +640x360 16spp clamp-off a04a09c0d4b5e325 diff --git a/crates/crust-core/tests/data/import_baselines/preview_usda-6fa33b5d399ba28d-1.digest b/crates/crust-core/tests/data/import_baselines/preview_usda-6fa33b5d399ba28d-1.digest new file mode 100644 index 000000000..7c2643c02 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/preview_usda-6fa33b5d399ba28d-1.digest @@ -0,0 +1,20 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: None +camera: Camera { origin: Vec3A(15.0, 3.0, 3.0), lower_left_corner: Vec3A(4.8863316, -0.044797063, 4.174048), horizontal: Vec3A(1.2295314, 0.0, -6.147657), vertical: Vec3A(-0.44830504, 3.4967792, -0.08966101), u: Vec3A(0.19611613, 0.0, -0.9805807), v: Vec3A(-0.1271232, 0.991561, -0.02542464), lens_radius: 0.05, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: None +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 640, height: 360, region: PixelRect { x0: 0, y0: 0, x1: 640, y1: 360 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: None, depth_of_field: true, motion_blur: false, layer_stack: ["$DIR/preview.usda"], invisible_overrides: Some(0) } +layer: $DIR/preview.usda +warning: Warning { code: CameraMissing, kind: Skipped, count: 1, prims: [], message: "USD stage has no UsdGeomCamera — falling back to world::get_settings camera" } +lights: 0 +volumes: 0 +world: 1 geometries, PrimitiveBreakdown { triangles: 0, spheres: 1, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 0, spheres: 1, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:fb1e7d48790aec95 camera=1:fb1e7d48790aec95 shadow=1:fb1e7d48790aec95 indirect=1:fb1e7d48790aec95 +provenance material /World/M: MaterialOrigin { slots: [0], displaced: false } +provenance geometry 0..1: /World/Ball +provenance spheres: [0] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: None, cameras: [], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: None, offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/preview_usda-6fa33b5d399ba28d-1.image b/crates/crust-core/tests/data/import_baselines/preview_usda-6fa33b5d399ba28d-1.image new file mode 100644 index 000000000..0911f0775 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/preview_usda-6fa33b5d399ba28d-1.image @@ -0,0 +1 @@ +640x360 16spp clamp-off 3ad9327381f35328 diff --git a/crates/crust-core/tests/data/import_baselines/primvar_aovs_usda-1ceba2b5cd7da4fe-1.digest b/crates/crust-core/tests/data/import_baselines/primvar_aovs_usda-1ceba2b5cd7da4fe-1.digest new file mode 100644 index 000000000..cb3eb5440 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/primvar_aovs_usda-1ceba2b5cd7da4fe-1.digest @@ -0,0 +1,30 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/World/Cam") +camera: Camera { origin: Vec3A(0.0, 1.4, 5.0), lower_left_corner: Vec3A(-5.6632595, -3.7950878, -4.119156), horizontal: Vec3A(11.326519, -0.0, 0.0), vertical: Vec3A(0.0, 6.231942, -1.3246402), u: Vec3A(1.0, -0.0, 0.0), v: Vec3A(0.0, 0.9781476, -0.20791169), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: Some("/Render/settings") +settings: RenderSettings { samples_per_pixel: 16, max_depth: 4, width: 160, height: 90, region: PixelRect { x0: 0, y0: 0, x1: 160, y1: 90 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [AovProduct { prim_path: "/Render/Products/primvars", name: "renders/primvar_aovs.exr", vars: [AovVar { prim_path: "/Render/Products/Vars/C", name: "C", channel_prefix: None, source: Color, components: 4, precision: Float, accumulation: Filtered, clear: 0.0, expression: None, raw: false, variance: false }, AovVar { prim_path: "/Render/Products/Vars/P", name: "P", channel_prefix: None, source: P, components: 3, precision: Float, accumulation: Closest, clear: 0.0, expression: None, raw: false, variance: false }, AovVar { prim_path: "/Render/Products/Vars/Pref", name: "Pref", channel_prefix: None, source: Primvar(PrimvarSource { index: 0, components: 3, role: Vector }), components: 3, precision: Float, accumulation: Closest, clear: 0.0, expression: None, raw: false, variance: false }, AovVar { prim_path: "/Render/Products/Vars/uv2", name: "uv2", channel_prefix: None, source: Primvar(PrimvarSource { index: 1, components: 2, role: TexCoord }), components: 2, precision: Float, accumulation: Filtered, clear: 0.0, expression: None, raw: false, variance: false }, AovVar { prim_path: "/Render/Products/Vars/Cd", name: "Cd", channel_prefix: None, source: Primvar(PrimvarSource { index: 2, components: 3, role: Color }), components: 3, precision: Float, accumulation: Filtered, clear: 0.0, expression: None, raw: false, variance: false }], attributes: [] }], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 24.0, aperture: [20.955, 15.2908], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 10.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/primvar_aovs.usda"], invisible_overrides: Some(0) } +layer: $DIR/primvar_aovs.usda +lights: 2 +light 0: dome name Some("/World/Sky") lpe None pmf 0.5 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 1: area name Some("/World/KeyLight") lpe None pmf 0.5 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 3 geometries, PrimitiveBreakdown { triangles: 196, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 196, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +geom 0: material #0 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:65a58828d040eedc camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=2:65a58828d040eedc +geom 1: material #1 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:e8e63325f2f248d9 camera=2:e8e63325f2f248d9 shadow=2:e8e63325f2f248d9 indirect=2:e8e63325f2f248d9 +geom 2: material #1 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov Some((Some(0), false)) swapped false curves false scale 1.0 motion [] pieces all=192:06e7ab8333d1cd5d camera=192:06e7ab8333d1cd5d shadow=192:06e7ab8333d1cd5d indirect=192:06e7ab8333d1cd5d +provenance light /World/KeyLight: LightOrigin { index: 1, geoms: 0..1 } +provenance light /World/Sky: LightOrigin { index: 0, geoms: 0..0 } +provenance geometry 0..1: /World/KeyLight +provenance geometry 1..2: /World/Floor +provenance geometry 2..3: /World/Cube +provenance mesh: MeshOrigin { geom_id: 1, slot: 0, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 2, slot: 1, baked: true, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 15437267913824250035, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 1: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 11794230771889940430, n_points: 98, n_indices: 384, n_uvs: None, smooth: true, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: true, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 2, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/World/Cam"), cameras: ["/World/Cam"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [("rest", 3), ("uv2", 2), ("displayColor", 3)], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/World/Cam"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/primvar_aovs_usda-1ceba2b5cd7da4fe-1.image b/crates/crust-core/tests/data/import_baselines/primvar_aovs_usda-1ceba2b5cd7da4fe-1.image new file mode 100644 index 000000000..e1e2ab5ab --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/primvar_aovs_usda-1ceba2b5cd7da4fe-1.image @@ -0,0 +1 @@ +160x90 16spp clamp-off ed0ab00536a40580 diff --git a/crates/crust-core/tests/data/import_baselines/primvar_aovs_usda-b5e76a14b4ccb3db-1.digest b/crates/crust-core/tests/data/import_baselines/primvar_aovs_usda-b5e76a14b4ccb3db-1.digest new file mode 100644 index 000000000..c423fe864 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/primvar_aovs_usda-b5e76a14b4ccb3db-1.digest @@ -0,0 +1,30 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/World/Cam") +camera: Camera { origin: Vec3A(0.0, 1.4, 5.0), lower_left_corner: Vec3A(-5.6632595, -3.7950878, -4.119156), horizontal: Vec3A(11.326519, -0.0, 0.0), vertical: Vec3A(0.0, 6.231942, -1.3246402), u: Vec3A(1.0, -0.0, 0.0), v: Vec3A(0.0, 0.9781476, -0.20791169), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: Some("/Render/settings") +settings: RenderSettings { samples_per_pixel: 16, max_depth: 4, width: 160, height: 90, region: PixelRect { x0: 0, y0: 0, x1: 160, y1: 90 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [AovProduct { prim_path: "/Render/Products/primvars", name: "renders/primvar_aovs.exr", vars: [AovVar { prim_path: "/Render/Products/Vars/C", name: "C", channel_prefix: None, source: Color, components: 4, precision: Float, accumulation: Filtered, clear: 0.0, expression: None, raw: false, variance: false }, AovVar { prim_path: "/Render/Products/Vars/P", name: "P", channel_prefix: None, source: P, components: 3, precision: Float, accumulation: Closest, clear: 0.0, expression: None, raw: false, variance: false }, AovVar { prim_path: "/Render/Products/Vars/Pref", name: "Pref", channel_prefix: None, source: Primvar(PrimvarSource { index: 0, components: 3, role: Vector }), components: 3, precision: Float, accumulation: Closest, clear: 0.0, expression: None, raw: false, variance: false }, AovVar { prim_path: "/Render/Products/Vars/uv2", name: "uv2", channel_prefix: None, source: Primvar(PrimvarSource { index: 1, components: 2, role: TexCoord }), components: 2, precision: Float, accumulation: Filtered, clear: 0.0, expression: None, raw: false, variance: false }, AovVar { prim_path: "/Render/Products/Vars/Cd", name: "Cd", channel_prefix: None, source: Primvar(PrimvarSource { index: 2, components: 3, role: Color }), components: 3, precision: Float, accumulation: Filtered, clear: 0.0, expression: None, raw: false, variance: false }], attributes: [] }], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 24.0, aperture: [20.955, 15.2908], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 10.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/primvar_aovs.usda"], invisible_overrides: Some(0) } +layer: $DIR/primvar_aovs.usda +lights: 2 +light 0: dome name Some("/World/Sky") lpe None pmf 0.5 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 1: area name Some("/World/KeyLight") lpe None pmf 0.5 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 3 geometries, PrimitiveBreakdown { triangles: 196, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 196, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +geom 0: material #0 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:65a58828d040eedc camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=2:65a58828d040eedc +geom 1: material #1 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:e8e63325f2f248d9 camera=2:e8e63325f2f248d9 shadow=2:e8e63325f2f248d9 indirect=2:e8e63325f2f248d9 +geom 2: material #1 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov Some((Some(0), false)) swapped false curves false scale 1.0 motion [] pieces all=192:06e7ab8333d1cd5d camera=192:06e7ab8333d1cd5d shadow=192:06e7ab8333d1cd5d indirect=192:06e7ab8333d1cd5d +provenance light /World/KeyLight: LightOrigin { index: 1, geoms: 0..1 } +provenance light /World/Sky: LightOrigin { index: 0, geoms: 0..0 } +provenance geometry 0..1: /World/KeyLight +provenance geometry 1..2: /World/Floor +provenance geometry 2..3: /World/Cube +provenance mesh: MeshOrigin { geom_id: 1, slot: 0, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 2, slot: 1, baked: true, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 15437267913824250035, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 1: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 11794230771889940430, n_points: 98, n_indices: 384, n_uvs: None, smooth: true, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 2, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/World/Cam"), cameras: ["/World/Cam"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [("rest", 3), ("uv2", 2), ("displayColor", 3)], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/World/Cam"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/primvar_aovs_usda-b5e76a14b4ccb3db-1.image b/crates/crust-core/tests/data/import_baselines/primvar_aovs_usda-b5e76a14b4ccb3db-1.image new file mode 100644 index 000000000..e1e2ab5ab --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/primvar_aovs_usda-b5e76a14b4ccb3db-1.image @@ -0,0 +1 @@ +160x90 16spp clamp-off ed0ab00536a40580 diff --git a/crates/crust-core/tests/data/import_baselines/primvar_aovs_usda-b5e76a14b4ccb3db-2.digest b/crates/crust-core/tests/data/import_baselines/primvar_aovs_usda-b5e76a14b4ccb3db-2.digest new file mode 100644 index 000000000..c423fe864 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/primvar_aovs_usda-b5e76a14b4ccb3db-2.digest @@ -0,0 +1,30 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/World/Cam") +camera: Camera { origin: Vec3A(0.0, 1.4, 5.0), lower_left_corner: Vec3A(-5.6632595, -3.7950878, -4.119156), horizontal: Vec3A(11.326519, -0.0, 0.0), vertical: Vec3A(0.0, 6.231942, -1.3246402), u: Vec3A(1.0, -0.0, 0.0), v: Vec3A(0.0, 0.9781476, -0.20791169), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: Some("/Render/settings") +settings: RenderSettings { samples_per_pixel: 16, max_depth: 4, width: 160, height: 90, region: PixelRect { x0: 0, y0: 0, x1: 160, y1: 90 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [AovProduct { prim_path: "/Render/Products/primvars", name: "renders/primvar_aovs.exr", vars: [AovVar { prim_path: "/Render/Products/Vars/C", name: "C", channel_prefix: None, source: Color, components: 4, precision: Float, accumulation: Filtered, clear: 0.0, expression: None, raw: false, variance: false }, AovVar { prim_path: "/Render/Products/Vars/P", name: "P", channel_prefix: None, source: P, components: 3, precision: Float, accumulation: Closest, clear: 0.0, expression: None, raw: false, variance: false }, AovVar { prim_path: "/Render/Products/Vars/Pref", name: "Pref", channel_prefix: None, source: Primvar(PrimvarSource { index: 0, components: 3, role: Vector }), components: 3, precision: Float, accumulation: Closest, clear: 0.0, expression: None, raw: false, variance: false }, AovVar { prim_path: "/Render/Products/Vars/uv2", name: "uv2", channel_prefix: None, source: Primvar(PrimvarSource { index: 1, components: 2, role: TexCoord }), components: 2, precision: Float, accumulation: Filtered, clear: 0.0, expression: None, raw: false, variance: false }, AovVar { prim_path: "/Render/Products/Vars/Cd", name: "Cd", channel_prefix: None, source: Primvar(PrimvarSource { index: 2, components: 3, role: Color }), components: 3, precision: Float, accumulation: Filtered, clear: 0.0, expression: None, raw: false, variance: false }], attributes: [] }], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 24.0, aperture: [20.955, 15.2908], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 10.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/primvar_aovs.usda"], invisible_overrides: Some(0) } +layer: $DIR/primvar_aovs.usda +lights: 2 +light 0: dome name Some("/World/Sky") lpe None pmf 0.5 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 1: area name Some("/World/KeyLight") lpe None pmf 0.5 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 3 geometries, PrimitiveBreakdown { triangles: 196, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 196, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +geom 0: material #0 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:65a58828d040eedc camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=2:65a58828d040eedc +geom 1: material #1 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:e8e63325f2f248d9 camera=2:e8e63325f2f248d9 shadow=2:e8e63325f2f248d9 indirect=2:e8e63325f2f248d9 +geom 2: material #1 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov Some((Some(0), false)) swapped false curves false scale 1.0 motion [] pieces all=192:06e7ab8333d1cd5d camera=192:06e7ab8333d1cd5d shadow=192:06e7ab8333d1cd5d indirect=192:06e7ab8333d1cd5d +provenance light /World/KeyLight: LightOrigin { index: 1, geoms: 0..1 } +provenance light /World/Sky: LightOrigin { index: 0, geoms: 0..0 } +provenance geometry 0..1: /World/KeyLight +provenance geometry 1..2: /World/Floor +provenance geometry 2..3: /World/Cube +provenance mesh: MeshOrigin { geom_id: 1, slot: 0, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 2, slot: 1, baked: true, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 15437267913824250035, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 1: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 11794230771889940430, n_points: 98, n_indices: 384, n_uvs: None, smooth: true, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 2, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/World/Cam"), cameras: ["/World/Cam"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [("rest", 3), ("uv2", 2), ("displayColor", 3)], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/World/Cam"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/primvar_aovs_usda-b5e76a14b4ccb3db-2.image b/crates/crust-core/tests/data/import_baselines/primvar_aovs_usda-b5e76a14b4ccb3db-2.image new file mode 100644 index 000000000..e1e2ab5ab --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/primvar_aovs_usda-b5e76a14b4ccb3db-2.image @@ -0,0 +1 @@ +160x90 16spp clamp-off ed0ab00536a40580 diff --git a/crates/crust-core/tests/data/import_baselines/primvar_aovs_usda-e0e162475fa824e5-1.digest b/crates/crust-core/tests/data/import_baselines/primvar_aovs_usda-e0e162475fa824e5-1.digest new file mode 100644 index 000000000..c423fe864 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/primvar_aovs_usda-e0e162475fa824e5-1.digest @@ -0,0 +1,30 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/World/Cam") +camera: Camera { origin: Vec3A(0.0, 1.4, 5.0), lower_left_corner: Vec3A(-5.6632595, -3.7950878, -4.119156), horizontal: Vec3A(11.326519, -0.0, 0.0), vertical: Vec3A(0.0, 6.231942, -1.3246402), u: Vec3A(1.0, -0.0, 0.0), v: Vec3A(0.0, 0.9781476, -0.20791169), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: Some("/Render/settings") +settings: RenderSettings { samples_per_pixel: 16, max_depth: 4, width: 160, height: 90, region: PixelRect { x0: 0, y0: 0, x1: 160, y1: 90 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [AovProduct { prim_path: "/Render/Products/primvars", name: "renders/primvar_aovs.exr", vars: [AovVar { prim_path: "/Render/Products/Vars/C", name: "C", channel_prefix: None, source: Color, components: 4, precision: Float, accumulation: Filtered, clear: 0.0, expression: None, raw: false, variance: false }, AovVar { prim_path: "/Render/Products/Vars/P", name: "P", channel_prefix: None, source: P, components: 3, precision: Float, accumulation: Closest, clear: 0.0, expression: None, raw: false, variance: false }, AovVar { prim_path: "/Render/Products/Vars/Pref", name: "Pref", channel_prefix: None, source: Primvar(PrimvarSource { index: 0, components: 3, role: Vector }), components: 3, precision: Float, accumulation: Closest, clear: 0.0, expression: None, raw: false, variance: false }, AovVar { prim_path: "/Render/Products/Vars/uv2", name: "uv2", channel_prefix: None, source: Primvar(PrimvarSource { index: 1, components: 2, role: TexCoord }), components: 2, precision: Float, accumulation: Filtered, clear: 0.0, expression: None, raw: false, variance: false }, AovVar { prim_path: "/Render/Products/Vars/Cd", name: "Cd", channel_prefix: None, source: Primvar(PrimvarSource { index: 2, components: 3, role: Color }), components: 3, precision: Float, accumulation: Filtered, clear: 0.0, expression: None, raw: false, variance: false }], attributes: [] }], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 24.0, aperture: [20.955, 15.2908], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 10.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/primvar_aovs.usda"], invisible_overrides: Some(0) } +layer: $DIR/primvar_aovs.usda +lights: 2 +light 0: dome name Some("/World/Sky") lpe None pmf 0.5 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 1: area name Some("/World/KeyLight") lpe None pmf 0.5 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 3 geometries, PrimitiveBreakdown { triangles: 196, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 196, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +geom 0: material #0 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:65a58828d040eedc camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=2:65a58828d040eedc +geom 1: material #1 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:e8e63325f2f248d9 camera=2:e8e63325f2f248d9 shadow=2:e8e63325f2f248d9 indirect=2:e8e63325f2f248d9 +geom 2: material #1 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov Some((Some(0), false)) swapped false curves false scale 1.0 motion [] pieces all=192:06e7ab8333d1cd5d camera=192:06e7ab8333d1cd5d shadow=192:06e7ab8333d1cd5d indirect=192:06e7ab8333d1cd5d +provenance light /World/KeyLight: LightOrigin { index: 1, geoms: 0..1 } +provenance light /World/Sky: LightOrigin { index: 0, geoms: 0..0 } +provenance geometry 0..1: /World/KeyLight +provenance geometry 1..2: /World/Floor +provenance geometry 2..3: /World/Cube +provenance mesh: MeshOrigin { geom_id: 1, slot: 0, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 2, slot: 1, baked: true, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 15437267913824250035, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 1: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 11794230771889940430, n_points: 98, n_indices: 384, n_uvs: None, smooth: true, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 2, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/World/Cam"), cameras: ["/World/Cam"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [("rest", 3), ("uv2", 2), ("displayColor", 3)], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/World/Cam"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/primvar_aovs_usda-e0e162475fa824e5-1.image b/crates/crust-core/tests/data/import_baselines/primvar_aovs_usda-e0e162475fa824e5-1.image new file mode 100644 index 000000000..e1e2ab5ab --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/primvar_aovs_usda-e0e162475fa824e5-1.image @@ -0,0 +1 @@ +160x90 16spp clamp-off ed0ab00536a40580 diff --git a/crates/crust-core/tests/data/import_baselines/primvar_multisampled_usda-774c86244886ea5e-1.digest b/crates/crust-core/tests/data/import_baselines/primvar_multisampled_usda-774c86244886ea5e-1.digest new file mode 100644 index 000000000..d9e0e96bf --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/primvar_multisampled_usda-774c86244886ea5e-1.digest @@ -0,0 +1,18 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/World/other") +camera: Camera { origin: Vec3A(0.0, 0.0, 0.0), lower_left_corner: Vec3A(-2.7183647, -1.5290802, -10.0), horizontal: Vec3A(5.4367294, 0.0, 0.0), vertical: Vec3A(0.0, 3.0581603, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: Some("/Render/settings") +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 640, height: 360, region: PixelRect { x0: 0, y0: 0, x1: 640, y1: 360 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [AovProduct { prim_path: "/Render/p", name: "p.exr", vars: [AovVar { prim_path: "/Render/Pref", name: "Pref", channel_prefix: None, source: Primvar(PrimvarSource { index: 0, components: 3, role: Vector }), components: 3, precision: Float, accumulation: Filtered, clear: -1.0, expression: None, raw: false, variance: false }], attributes: [] }], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 50.0, aperture: [20.955, 15.2908], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 10.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/primvar_multisampled.usda"], invisible_overrides: Some(0) } +layer: $DIR/primvar_multisampled.usda +lights: 0 +volumes: 0 +world: 1 geometries, PrimitiveBreakdown { triangles: 0, spheres: 1, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 0, spheres: 1, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:fb1e7d48790aec95 camera=1:fb1e7d48790aec95 shadow=1:fb1e7d48790aec95 indirect=1:fb1e7d48790aec95 +provenance geometry 0..1: /World/ball +provenance spheres: [0] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/World/other"), cameras: ["/World/other", "/World/cam"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [("rest", 3)], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/World/other"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/primvar_multisampled_usda-774c86244886ea5e-1.image b/crates/crust-core/tests/data/import_baselines/primvar_multisampled_usda-774c86244886ea5e-1.image new file mode 100644 index 000000000..c734c5b1d --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/primvar_multisampled_usda-774c86244886ea5e-1.image @@ -0,0 +1 @@ +640x360 16spp clamp-off a04a09c0d4b5e325 diff --git a/crates/crust-core/tests/data/import_baselines/primvar_vars_usda-f6787f7fdf1eebf3-1.digest b/crates/crust-core/tests/data/import_baselines/primvar_vars_usda-f6787f7fdf1eebf3-1.digest new file mode 100644 index 000000000..01d9b3132 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/primvar_vars_usda-f6787f7fdf1eebf3-1.digest @@ -0,0 +1,20 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/World/cam") +camera: Camera { origin: Vec3A(0.0, 0.0, 5.0), lower_left_corner: Vec3A(-2.7183647, -1.5290802, -5.0), horizontal: Vec3A(5.4367294, 0.0, 0.0), vertical: Vec3A(0.0, 3.0581603, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: Some("/Render/settings") +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 640, height: 360, region: PixelRect { x0: 0, y0: 0, x1: 640, y1: 360 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [AovProduct { prim_path: "/Render/p", name: "p.exr", vars: [AovVar { prim_path: "/Render/Pref", name: "Pref", channel_prefix: None, source: Primvar(PrimvarSource { index: 0, components: 3, role: Vector }), components: 3, precision: Float, accumulation: Closest, clear: 0.0, expression: None, raw: false, variance: false }, AovVar { prim_path: "/Render/rest2", name: "rest2", channel_prefix: None, source: Primvar(PrimvarSource { index: 0, components: 3, role: Vector }), components: 3, precision: Float, accumulation: Closest, clear: 0.0, expression: None, raw: false, variance: false }, AovVar { prim_path: "/Render/uv2", name: "uv2", channel_prefix: None, source: Primvar(PrimvarSource { index: 1, components: 2, role: TexCoord }), components: 2, precision: Float, accumulation: Filtered, clear: 0.0, expression: None, raw: false, variance: false }, AovVar { prim_path: "/Render/Cd", name: "Cd", channel_prefix: None, source: Primvar(PrimvarSource { index: 2, components: 3, role: Color }), components: 3, precision: Float, accumulation: Filtered, clear: 0.0, expression: None, raw: false, variance: false }, AovVar { prim_path: "/Render/objectId", name: "objectId", channel_prefix: None, source: Primvar(PrimvarSource { index: 3, components: 1, role: Integer }), components: 1, precision: Uint, accumulation: Closest, clear: 0.0, expression: None, raw: false, variance: false }], attributes: [] }], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 50.0, aperture: [20.955, 15.2908], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 10.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/primvar_vars.usda"], invisible_overrides: Some(0) } +layer: $DIR/primvar_vars.usda +warning: Warning { code: AovPrimvarNoName, kind: Skipped, count: 1, prims: ["/Render/nameless"], message: "/Render/nameless: sourceType \"primvar\" needs a sourceName naming the primvar; no channel written" } +warning: Warning { code: AovPrimvarFourComponents, kind: Skipped, count: 1, prims: ["/Render/rgba"], message: "/Render/rgba: primvar \"displayColor\" as \"color4f\": four-component primvar vars are not supported yet; no channel written" } +lights: 0 +volumes: 0 +world: 1 geometries, PrimitiveBreakdown { triangles: 0, spheres: 1, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 0, spheres: 1, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:fb1e7d48790aec95 camera=1:fb1e7d48790aec95 shadow=1:fb1e7d48790aec95 indirect=1:fb1e7d48790aec95 +provenance geometry 0..1: /World/ball +provenance spheres: [0] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/World/cam"), cameras: ["/World/other", "/World/cam"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [("rest", 3), ("uv2", 2), ("displayColor", 3), ("objectId", 1)], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/World/cam"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/primvar_vars_usda-f6787f7fdf1eebf3-1.image b/crates/crust-core/tests/data/import_baselines/primvar_vars_usda-f6787f7fdf1eebf3-1.image new file mode 100644 index 000000000..c734c5b1d --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/primvar_vars_usda-f6787f7fdf1eebf3-1.image @@ -0,0 +1 @@ +640x360 16spp clamp-off a04a09c0d4b5e325 diff --git a/crates/crust-core/tests/data/import_baselines/procedural_par_square_usda-6cb0d1de356675bd-1.digest b/crates/crust-core/tests/data/import_baselines/procedural_par_square_usda-6cb0d1de356675bd-1.digest new file mode 100644 index 000000000..f4e9b6cf6 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/procedural_par_square_usda-6cb0d1de356675bd-1.digest @@ -0,0 +1,19 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: None +camera: Camera { origin: Vec3A(15.0, 3.0, 3.0), lower_left_corner: Vec3A(4.8863316, -0.044797063, 4.174048), horizontal: Vec3A(1.2295314, 0.0, -6.147657), vertical: Vec3A(-0.44830504, 3.4967792, -0.08966101), u: Vec3A(0.19611613, 0.0, -0.9805807), v: Vec3A(-0.1271232, 0.991561, -0.02542464), lens_radius: 0.05, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: Some("/Render/settings") +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 640, height: 360, region: PixelRect { x0: 0, y0: 0, x1: 640, y1: 360 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: None, depth_of_field: true, motion_blur: false, layer_stack: ["$DIR/procedural_par_square.usda"], invisible_overrides: Some(0) } +layer: $DIR/procedural_par_square.usda +warning: Warning { code: CameraMissing, kind: Skipped, count: 1, prims: [], message: "USD stage has no UsdGeomCamera — falling back to world::get_settings camera" } +lights: 0 +volumes: 0 +world: 1 geometries, PrimitiveBreakdown { triangles: 0, spheres: 1, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 0, spheres: 1, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:fb1e7d48790aec95 camera=1:fb1e7d48790aec95 shadow=1:fb1e7d48790aec95 indirect=1:fb1e7d48790aec95 +provenance geometry 0..1: /World/Ball +provenance spheres: [0] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: None, cameras: [], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: None, offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/procedural_par_square_usda-6cb0d1de356675bd-1.image b/crates/crust-core/tests/data/import_baselines/procedural_par_square_usda-6cb0d1de356675bd-1.image new file mode 100644 index 000000000..c734c5b1d --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/procedural_par_square_usda-6cb0d1de356675bd-1.image @@ -0,0 +1 @@ +640x360 16spp clamp-off a04a09c0d4b5e325 diff --git a/crates/crust-core/tests/data/import_baselines/procedural_par_wide_usda-e65d9f21a141c052-1.digest b/crates/crust-core/tests/data/import_baselines/procedural_par_wide_usda-e65d9f21a141c052-1.digest new file mode 100644 index 000000000..0e263cbd5 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/procedural_par_wide_usda-e65d9f21a141c052-1.digest @@ -0,0 +1,20 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: None +camera: Camera { origin: Vec3A(15.0, 3.0, 3.0), lower_left_corner: Vec3A(4.8863316, -0.044797063, 4.174048), horizontal: Vec3A(1.2295314, 0.0, -6.147657), vertical: Vec3A(-0.44830504, 3.4967792, -0.08966101), u: Vec3A(0.19611613, 0.0, -0.9805807), v: Vec3A(-0.1271232, 0.991561, -0.02542464), lens_radius: 0.05, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: Some("/Render/settings") +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 640, height: 360, region: PixelRect { x0: 0, y0: 0, x1: 640, y1: 360 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: None, depth_of_field: true, motion_blur: false, layer_stack: ["$DIR/procedural_par_wide.usda"], invisible_overrides: Some(0) } +layer: $DIR/procedural_par_wide.usda +warning: Warning { code: CameraMissing, kind: Skipped, count: 1, prims: [], message: "USD stage has no UsdGeomCamera — falling back to world::get_settings camera" } +warning: Warning { code: CameraProceduralPixelAspect, kind: Approximated, count: 1, prims: [], message: "pixelAspectRatio = 2 is not honoured by the procedural camera of a stage with no UsdGeomCamera; it renders square pixels" } +lights: 0 +volumes: 0 +world: 1 geometries, PrimitiveBreakdown { triangles: 0, spheres: 1, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 0, spheres: 1, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:fb1e7d48790aec95 camera=1:fb1e7d48790aec95 shadow=1:fb1e7d48790aec95 indirect=1:fb1e7d48790aec95 +provenance geometry 0..1: /World/Ball +provenance spheres: [0] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: None, cameras: [], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: None, offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/procedural_par_wide_usda-e65d9f21a141c052-1.image b/crates/crust-core/tests/data/import_baselines/procedural_par_wide_usda-e65d9f21a141c052-1.image new file mode 100644 index 000000000..c734c5b1d --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/procedural_par_wide_usda-e65d9f21a141c052-1.image @@ -0,0 +1 @@ +640x360 16spp clamp-off a04a09c0d4b5e325 diff --git a/crates/crust-core/tests/data/import_baselines/products_usda-e7ced79f762e48ff-1.digest b/crates/crust-core/tests/data/import_baselines/products_usda-e7ced79f762e48ff-1.digest new file mode 100644 index 000000000..fd881654e --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/products_usda-e7ced79f762e48ff-1.digest @@ -0,0 +1,21 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/World/cam") +camera: Camera { origin: Vec3A(0.0, 0.0, 0.0), lower_left_corner: Vec3A(-2.7183647, -1.5290802, -10.0), horizontal: Vec3A(5.4367294, 0.0, 0.0), vertical: Vec3A(0.0, 3.0581603, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: Some("/Render/settings") +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 640, height: 360, region: PixelRect { x0: 0, y0: 0, x1: 640, y1: 360 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [AovProduct { prim_path: "/Render/beauty", name: "beauty.exr", vars: [AovVar { prim_path: "/Render/color", name: "color", channel_prefix: None, source: Color, components: 3, precision: Float, accumulation: Filtered, clear: 0.0, expression: None, raw: false, variance: false }], attributes: [] }], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 50.0, aperture: [20.955, 15.2908], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 10.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/products.usda"], invisible_overrides: Some(0) } +layer: $DIR/products.usda +warning: Warning { code: AovUnknownSource, kind: Skipped, count: 1, prims: ["/Render/bogus"], message: "/Render/bogus: unknown raw source \"noSuchSource\"; no channel written (crust's AOV names are listed in the user documentation, usd/aovs)" } +warning: Warning { code: LpeInvalid, kind: Skipped, count: 1, prims: ["/Render/badLpe"], message: "/Render/badLpe: light path expression \"C<<<\": column 3: '<' is not a event type; no channel written" } +warning: Warning { code: AovUnsupportedSource, kind: Skipped, count: 1, prims: ["/Render/intrinsic"], message: "/Render/intrinsic: sourceType \"intrinsic\" is unimplemented in UsdRender itself; no channel written" } +warning: Warning { code: AovPrimvarNoName, kind: Skipped, count: 1, prims: ["/Render/nameless"], message: "/Render/nameless: sourceType \"primvar\" needs a sourceName naming the primvar; no channel written" } +warning: Warning { code: ProductNotARenderProduct, kind: Skipped, count: 1, prims: ["/Render/notAProduct"], message: "/Render/settings.products targets /Render/notAProduct, which is not a RenderProduct; skipped" } +lights: 0 +volumes: 0 +world: 0 geometries, PrimitiveBreakdown { triangles: 0, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 0, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/World/cam"), cameras: ["/World/cam"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/World/cam"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/products_usda-e7ced79f762e48ff-1.image b/crates/crust-core/tests/data/import_baselines/products_usda-e7ced79f762e48ff-1.image new file mode 100644 index 000000000..c734c5b1d --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/products_usda-e7ced79f762e48ff-1.image @@ -0,0 +1 @@ +640x360 16spp clamp-off a04a09c0d4b5e325 diff --git a/crates/crust-core/tests/data/import_baselines/proxy_target_materials_usda-5191f22d92ef400d-1.digest b/crates/crust-core/tests/data/import_baselines/proxy_target_materials_usda-5191f22d92ef400d-1.digest new file mode 100644 index 000000000..d5c4f202c --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/proxy_target_materials_usda-5191f22d92ef400d-1.digest @@ -0,0 +1,38 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/World/Cam") +camera: Camera { origin: Vec3A(1.0, 1.0, 10.0), lower_left_corner: Vec3A(-1.7183647, -0.52908015, 0.0), horizontal: Vec3A(5.4367294, 0.0, 0.0), vertical: Vec3A(0.0, 3.0581603, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: None +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 640, height: 360, region: PixelRect { x0: 0, y0: 0, x1: 640, y1: 360 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 50.0, aperture: [20.955, 15.2908], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 10.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/proxy_target_materials.usda"], invisible_overrides: Some(0) } +layer: $DIR/proxy_target_materials.usda +lights: 0 +volumes: 0 +world: 5 geometries, PrimitiveBreakdown { triangles: 3, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 3 } top level, PrimitiveBreakdown { triangles: 6, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 3 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:61e4350a67ec8255 camera=2:61e4350a67ec8255 shadow=2:61e4350a67ec8255 indirect=2:61e4350a67ec8255 +geom 1: material #1 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:55f984fc5f87c675 camera=1:55f984fc5f87c675 shadow=1:55f984fc5f87c675 indirect=1:55f984fc5f87c675 +geom 2: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:6b2659e60b0616d8 camera=2:6b2659e60b0616d8 shadow=2:6b2659e60b0616d8 indirect=2:6b2659e60b0616d8 +geom 3: material #2 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:7782f7a0c7c05335 camera=1:7782f7a0c7c05335 shadow=1:7782f7a0c7c05335 indirect=1:7782f7a0c7c05335 +geom 4: material #3 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:61e4350a67ec8255 camera=2:61e4350a67ec8255 shadow=2:61e4350a67ec8255 indirect=2:61e4350a67ec8255 +provenance material /ArchiveAsset/Looks/Blue: MaterialOrigin { slots: [3], displaced: false } +provenance material /ArchiveAsset/Looks/Red: MaterialOrigin { slots: [4], displaced: false } +provenance material /World/Scatter/Prototypes/Archive/Looks/Blue: MaterialOrigin { slots: [1], displaced: false } +provenance material /World/Scatter/Prototypes/Archive/Looks/Red: MaterialOrigin { slots: [0, 2], displaced: false } +provenance material read: ("/ArchiveAsset/Looks/Blue", "/World/Scatter/Prototypes/Archive/Looks/Blue") +provenance material read: ("/ArchiveAsset/Looks/Blue/S", "/World/Scatter/Prototypes/Archive/Looks/Blue") +provenance material read: ("/ArchiveAsset/Looks/Red", "/World/Scatter/Prototypes/Archive/Looks/Red") +provenance material read: ("/ArchiveAsset/Looks/Red/S", "/World/Scatter/Prototypes/Archive/Looks/Red") +provenance geometry 0..3: /World/Scatter +provenance geometry 3..4: /ArchiveAsset/Piece2 +provenance geometry 4..5: /ArchiveAsset/Piece1 +provenance mesh: MeshOrigin { geom_id: 3, slot: 2, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 4, slot: 3, baked: true, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 11573210918765220906, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 0 }), placements: 0, shared: true, displaced: false } +provenance mesh slot 1: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 17603972815358145815, n_points: 3, n_indices: 3, n_uvs: None, smooth: false, material: 1 }), placements: 0, shared: true, displaced: false } +provenance mesh slot 2: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 17603972815358145815, n_points: 3, n_indices: 3, n_uvs: None, smooth: false, material: 2 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 3: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 11573210918765220906, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 3 }), placements: 1, shared: false, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/World/Cam"), cameras: ["/World/Cam"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/World/Cam"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/proxy_target_materials_usda-5191f22d92ef400d-1.image b/crates/crust-core/tests/data/import_baselines/proxy_target_materials_usda-5191f22d92ef400d-1.image new file mode 100644 index 000000000..c734c5b1d --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/proxy_target_materials_usda-5191f22d92ef400d-1.image @@ -0,0 +1 @@ +640x360 16spp clamp-off a04a09c0d4b5e325 diff --git a/crates/crust-core/tests/data/import_baselines/proxy_targets_usda-8355941db6dce051-1.digest b/crates/crust-core/tests/data/import_baselines/proxy_targets_usda-8355941db6dce051-1.digest new file mode 100644 index 000000000..73df771d8 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/proxy_targets_usda-8355941db6dce051-1.digest @@ -0,0 +1,28 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/World/Cam") +camera: Camera { origin: Vec3A(1.0, 1.0, 10.0), lower_left_corner: Vec3A(-1.7183647, -0.52908015, 0.0), horizontal: Vec3A(5.4367294, 0.0, 0.0), vertical: Vec3A(0.0, 3.0581603, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: None +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 640, height: 360, region: PixelRect { x0: 0, y0: 0, x1: 640, y1: 360 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 50.0, aperture: [20.955, 15.2908], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 10.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/proxy_targets.usda"], invisible_overrides: Some(0) } +layer: $DIR/proxy_targets.usda +lights: 0 +volumes: 0 +world: 5 geometries, PrimitiveBreakdown { triangles: 0, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 5 } top level, PrimitiveBreakdown { triangles: 3, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 5 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:61e4350a67ec8255 camera=2:61e4350a67ec8255 shadow=2:61e4350a67ec8255 indirect=2:61e4350a67ec8255 +geom 1: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:55f984fc5f87c675 camera=1:55f984fc5f87c675 shadow=1:55f984fc5f87c675 indirect=1:55f984fc5f87c675 +geom 2: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:6b2659e60b0616d8 camera=2:6b2659e60b0616d8 shadow=2:6b2659e60b0616d8 indirect=2:6b2659e60b0616d8 +geom 3: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:7782f7a0c7c05335 camera=1:7782f7a0c7c05335 shadow=1:7782f7a0c7c05335 indirect=1:7782f7a0c7c05335 +geom 4: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:61e4350a67ec8255 camera=2:61e4350a67ec8255 shadow=2:61e4350a67ec8255 indirect=2:61e4350a67ec8255 +provenance geometry 0..3: /World/Scatter +provenance geometry 3..4: /ArchiveAsset/Piece2 +provenance geometry 4..5: /ArchiveAsset/Piece1 +provenance mesh: MeshOrigin { geom_id: 3, slot: 1, baked: false, moving: false } +provenance mesh: MeshOrigin { geom_id: 4, slot: 0, baked: false, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 11573210918765220906, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: true, displaced: false } +provenance mesh slot 1: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 17603972815358145815, n_points: 3, n_indices: 3, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: true, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/World/Cam"), cameras: ["/World/Cam"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/World/Cam"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/proxy_targets_usda-8355941db6dce051-1.image b/crates/crust-core/tests/data/import_baselines/proxy_targets_usda-8355941db6dce051-1.image new file mode 100644 index 000000000..c734c5b1d --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/proxy_targets_usda-8355941db6dce051-1.image @@ -0,0 +1 @@ +640x360 16spp clamp-off a04a09c0d4b5e325 diff --git a/crates/crust-core/tests/data/import_baselines/prune_usda-2c1f87fb5fed04ec-1.digest b/crates/crust-core/tests/data/import_baselines/prune_usda-2c1f87fb5fed04ec-1.digest new file mode 100644 index 000000000..cb9548c77 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/prune_usda-2c1f87fb5fed04ec-1.digest @@ -0,0 +1,20 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: None +camera: Camera { origin: Vec3A(15.0, 3.0, 3.0), lower_left_corner: Vec3A(4.8863316, -0.044797063, 4.174048), horizontal: Vec3A(1.2295314, 0.0, -6.147657), vertical: Vec3A(-0.44830504, 3.4967792, -0.08966101), u: Vec3A(0.19611613, 0.0, -0.9805807), v: Vec3A(-0.1271232, 0.991561, -0.02542464), lens_radius: 0.05, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: Some("/Render/settings") +settings: RenderSettings { samples_per_pixel: 3, max_depth: 32, width: 8, height: 8, region: PixelRect { x0: 0, y0: 0, x1: 8, y1: 8 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: Some(PassSummary { path: "/Render/Passes/pruning", holdouts: 0, camera_hidden: 0 }) +source: Source { lens: None, depth_of_field: true, motion_blur: false, layer_stack: ["$DIR/prune.usda"], invisible_overrides: Some(0) } +layer: $DIR/prune.usda +warning: Warning { code: RenderPassCollectionNotRead, kind: Skipped, count: 1, prims: ["/Render/Passes/pruning"], message: "/Render/Passes/pruning: collection:prune restricts what renders, which crust does not read — rendered as if it were unauthored" } +warning: Warning { code: CameraMissing, kind: Skipped, count: 1, prims: [], message: "USD stage has no UsdGeomCamera — falling back to world::get_settings camera" } +lights: 0 +volumes: 0 +world: 1 geometries, PrimitiveBreakdown { triangles: 0, spheres: 1, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 0, spheres: 1, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:984632b55acb5495 camera=1:984632b55acb5495 shadow=1:984632b55acb5495 indirect=1:984632b55acb5495 +provenance geometry 0..1: /World/Set +provenance spheres: [0] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: Some("/Render/Passes/pruning"), keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: None, cameras: [], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: None, offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/prune_usda-2c1f87fb5fed04ec-1.image b/crates/crust-core/tests/data/import_baselines/prune_usda-2c1f87fb5fed04ec-1.image new file mode 100644 index 000000000..8aad9360c --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/prune_usda-2c1f87fb5fed04ec-1.image @@ -0,0 +1 @@ +8x8 16spp clamp-off 9fa9e040e0eedf25 diff --git a/crates/crust-core/tests/data/import_baselines/prune_usda-3bf02286156e9774-1.digest b/crates/crust-core/tests/data/import_baselines/prune_usda-3bf02286156e9774-1.digest new file mode 100644 index 000000000..01ce42b70 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/prune_usda-3bf02286156e9774-1.digest @@ -0,0 +1,20 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: None +camera: Camera { origin: Vec3A(15.0, 3.0, 3.0), lower_left_corner: Vec3A(4.8863316, -0.044797063, 4.174048), horizontal: Vec3A(1.2295314, 0.0, -6.147657), vertical: Vec3A(-0.44830504, 3.4967792, -0.08966101), u: Vec3A(0.19611613, 0.0, -0.9805807), v: Vec3A(-0.1271232, 0.991561, -0.02542464), lens_radius: 0.05, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: Some("/Render/settings") +settings: RenderSettings { samples_per_pixel: 3, max_depth: 32, width: 8, height: 8, region: PixelRect { x0: 0, y0: 0, x1: 8, y1: 8 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: Some(PassSummary { path: "/Render/Passes/invisible", holdouts: 0, camera_hidden: 0 }) +source: Source { lens: None, depth_of_field: true, motion_blur: false, layer_stack: ["$DIR/prune.usda"], invisible_overrides: Some(0) } +layer: $DIR/prune.usda +warning: Warning { code: RenderPassCollectionNotRead, kind: Skipped, count: 1, prims: ["/Render/Passes/invisible"], message: "/Render/Passes/invisible: collection:renderVisibility restricts what renders, which crust does not read — rendered as if it were unauthored" } +warning: Warning { code: CameraMissing, kind: Skipped, count: 1, prims: [], message: "USD stage has no UsdGeomCamera — falling back to world::get_settings camera" } +lights: 0 +volumes: 0 +world: 1 geometries, PrimitiveBreakdown { triangles: 0, spheres: 1, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 0, spheres: 1, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:984632b55acb5495 camera=1:984632b55acb5495 shadow=1:984632b55acb5495 indirect=1:984632b55acb5495 +provenance geometry 0..1: /World/Set +provenance spheres: [0] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: Some("/Render/Passes/invisible"), keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: None, cameras: [], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: None, offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/prune_usda-3bf02286156e9774-1.image b/crates/crust-core/tests/data/import_baselines/prune_usda-3bf02286156e9774-1.image new file mode 100644 index 000000000..8aad9360c --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/prune_usda-3bf02286156e9774-1.image @@ -0,0 +1 @@ +8x8 16spp clamp-off 9fa9e040e0eedf25 diff --git a/crates/crust-core/tests/data/import_baselines/prune_usda-5736fff05485b63c-1.digest b/crates/crust-core/tests/data/import_baselines/prune_usda-5736fff05485b63c-1.digest new file mode 100644 index 000000000..01ce42b70 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/prune_usda-5736fff05485b63c-1.digest @@ -0,0 +1,20 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: None +camera: Camera { origin: Vec3A(15.0, 3.0, 3.0), lower_left_corner: Vec3A(4.8863316, -0.044797063, 4.174048), horizontal: Vec3A(1.2295314, 0.0, -6.147657), vertical: Vec3A(-0.44830504, 3.4967792, -0.08966101), u: Vec3A(0.19611613, 0.0, -0.9805807), v: Vec3A(-0.1271232, 0.991561, -0.02542464), lens_radius: 0.05, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: Some("/Render/settings") +settings: RenderSettings { samples_per_pixel: 3, max_depth: 32, width: 8, height: 8, region: PixelRect { x0: 0, y0: 0, x1: 8, y1: 8 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: Some(PassSummary { path: "/Render/Passes/invisible", holdouts: 0, camera_hidden: 0 }) +source: Source { lens: None, depth_of_field: true, motion_blur: false, layer_stack: ["$DIR/prune.usda"], invisible_overrides: Some(0) } +layer: $DIR/prune.usda +warning: Warning { code: RenderPassCollectionNotRead, kind: Skipped, count: 1, prims: ["/Render/Passes/invisible"], message: "/Render/Passes/invisible: collection:renderVisibility restricts what renders, which crust does not read — rendered as if it were unauthored" } +warning: Warning { code: CameraMissing, kind: Skipped, count: 1, prims: [], message: "USD stage has no UsdGeomCamera — falling back to world::get_settings camera" } +lights: 0 +volumes: 0 +world: 1 geometries, PrimitiveBreakdown { triangles: 0, spheres: 1, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 0, spheres: 1, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:984632b55acb5495 camera=1:984632b55acb5495 shadow=1:984632b55acb5495 indirect=1:984632b55acb5495 +provenance geometry 0..1: /World/Set +provenance spheres: [0] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: Some("/Render/Passes/invisible"), keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: None, cameras: [], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: None, offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/prune_usda-5736fff05485b63c-1.image b/crates/crust-core/tests/data/import_baselines/prune_usda-5736fff05485b63c-1.image new file mode 100644 index 000000000..8aad9360c --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/prune_usda-5736fff05485b63c-1.image @@ -0,0 +1 @@ +8x8 16spp clamp-off 9fa9e040e0eedf25 diff --git a/crates/crust-core/tests/data/import_baselines/prune_usda-d1a6b2f2900a3fc1-1.digest b/crates/crust-core/tests/data/import_baselines/prune_usda-d1a6b2f2900a3fc1-1.digest new file mode 100644 index 000000000..ed95fe51a --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/prune_usda-d1a6b2f2900a3fc1-1.digest @@ -0,0 +1,19 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: None +camera: Camera { origin: Vec3A(15.0, 3.0, 3.0), lower_left_corner: Vec3A(4.8863316, -0.044797063, 4.174048), horizontal: Vec3A(1.2295314, 0.0, -6.147657), vertical: Vec3A(-0.44830504, 3.4967792, -0.08966101), u: Vec3A(0.19611613, 0.0, -0.9805807), v: Vec3A(-0.1271232, 0.991561, -0.02542464), lens_radius: 0.05, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: Some("/Render/settings") +settings: RenderSettings { samples_per_pixel: 3, max_depth: 32, width: 8, height: 8, region: PixelRect { x0: 0, y0: 0, x1: 8, y1: 8 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: Some(PassSummary { path: "/Render/Passes/quiet", holdouts: 0, camera_hidden: 0 }) +source: Source { lens: None, depth_of_field: true, motion_blur: false, layer_stack: ["$DIR/prune.usda"], invisible_overrides: Some(0) } +layer: $DIR/prune.usda +warning: Warning { code: CameraMissing, kind: Skipped, count: 1, prims: [], message: "USD stage has no UsdGeomCamera — falling back to world::get_settings camera" } +lights: 0 +volumes: 0 +world: 1 geometries, PrimitiveBreakdown { triangles: 0, spheres: 1, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 0, spheres: 1, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:984632b55acb5495 camera=1:984632b55acb5495 shadow=1:984632b55acb5495 indirect=1:984632b55acb5495 +provenance geometry 0..1: /World/Set +provenance spheres: [0] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: Some("/Render/Passes/quiet"), keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: None, cameras: [], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: None, offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/prune_usda-d1a6b2f2900a3fc1-1.image b/crates/crust-core/tests/data/import_baselines/prune_usda-d1a6b2f2900a3fc1-1.image new file mode 100644 index 000000000..8aad9360c --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/prune_usda-d1a6b2f2900a3fc1-1.image @@ -0,0 +1 @@ +8x8 16spp clamp-off 9fa9e040e0eedf25 diff --git a/crates/crust-core/tests/data/import_baselines/prune_usda-dc6f664604596ee9-1.digest b/crates/crust-core/tests/data/import_baselines/prune_usda-dc6f664604596ee9-1.digest new file mode 100644 index 000000000..ed95fe51a --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/prune_usda-dc6f664604596ee9-1.digest @@ -0,0 +1,19 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: None +camera: Camera { origin: Vec3A(15.0, 3.0, 3.0), lower_left_corner: Vec3A(4.8863316, -0.044797063, 4.174048), horizontal: Vec3A(1.2295314, 0.0, -6.147657), vertical: Vec3A(-0.44830504, 3.4967792, -0.08966101), u: Vec3A(0.19611613, 0.0, -0.9805807), v: Vec3A(-0.1271232, 0.991561, -0.02542464), lens_radius: 0.05, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: Some("/Render/settings") +settings: RenderSettings { samples_per_pixel: 3, max_depth: 32, width: 8, height: 8, region: PixelRect { x0: 0, y0: 0, x1: 8, y1: 8 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: Some(PassSummary { path: "/Render/Passes/quiet", holdouts: 0, camera_hidden: 0 }) +source: Source { lens: None, depth_of_field: true, motion_blur: false, layer_stack: ["$DIR/prune.usda"], invisible_overrides: Some(0) } +layer: $DIR/prune.usda +warning: Warning { code: CameraMissing, kind: Skipped, count: 1, prims: [], message: "USD stage has no UsdGeomCamera — falling back to world::get_settings camera" } +lights: 0 +volumes: 0 +world: 1 geometries, PrimitiveBreakdown { triangles: 0, spheres: 1, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 0, spheres: 1, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:984632b55acb5495 camera=1:984632b55acb5495 shadow=1:984632b55acb5495 indirect=1:984632b55acb5495 +provenance geometry 0..1: /World/Set +provenance spheres: [0] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: Some("/Render/Passes/quiet"), keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: None, cameras: [], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: None, offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/prune_usda-dc6f664604596ee9-1.image b/crates/crust-core/tests/data/import_baselines/prune_usda-dc6f664604596ee9-1.image new file mode 100644 index 000000000..8aad9360c --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/prune_usda-dc6f664604596ee9-1.image @@ -0,0 +1 @@ +8x8 16spp clamp-off 9fa9e040e0eedf25 diff --git a/crates/crust-core/tests/data/import_baselines/prune_usda-f5ce85341275f544-1.digest b/crates/crust-core/tests/data/import_baselines/prune_usda-f5ce85341275f544-1.digest new file mode 100644 index 000000000..cb9548c77 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/prune_usda-f5ce85341275f544-1.digest @@ -0,0 +1,20 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: None +camera: Camera { origin: Vec3A(15.0, 3.0, 3.0), lower_left_corner: Vec3A(4.8863316, -0.044797063, 4.174048), horizontal: Vec3A(1.2295314, 0.0, -6.147657), vertical: Vec3A(-0.44830504, 3.4967792, -0.08966101), u: Vec3A(0.19611613, 0.0, -0.9805807), v: Vec3A(-0.1271232, 0.991561, -0.02542464), lens_radius: 0.05, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: Some("/Render/settings") +settings: RenderSettings { samples_per_pixel: 3, max_depth: 32, width: 8, height: 8, region: PixelRect { x0: 0, y0: 0, x1: 8, y1: 8 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: Some(PassSummary { path: "/Render/Passes/pruning", holdouts: 0, camera_hidden: 0 }) +source: Source { lens: None, depth_of_field: true, motion_blur: false, layer_stack: ["$DIR/prune.usda"], invisible_overrides: Some(0) } +layer: $DIR/prune.usda +warning: Warning { code: RenderPassCollectionNotRead, kind: Skipped, count: 1, prims: ["/Render/Passes/pruning"], message: "/Render/Passes/pruning: collection:prune restricts what renders, which crust does not read — rendered as if it were unauthored" } +warning: Warning { code: CameraMissing, kind: Skipped, count: 1, prims: [], message: "USD stage has no UsdGeomCamera — falling back to world::get_settings camera" } +lights: 0 +volumes: 0 +world: 1 geometries, PrimitiveBreakdown { triangles: 0, spheres: 1, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 0, spheres: 1, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:984632b55acb5495 camera=1:984632b55acb5495 shadow=1:984632b55acb5495 indirect=1:984632b55acb5495 +provenance geometry 0..1: /World/Set +provenance spheres: [0] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: Some("/Render/Passes/pruning"), keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: None, cameras: [], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: None, offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/prune_usda-f5ce85341275f544-1.image b/crates/crust-core/tests/data/import_baselines/prune_usda-f5ce85341275f544-1.image new file mode 100644 index 000000000..8aad9360c --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/prune_usda-f5ce85341275f544-1.image @@ -0,0 +1 @@ +8x8 16spp clamp-off 9fa9e040e0eedf25 diff --git a/crates/crust-core/tests/data/import_baselines/ptex_phase_usda-9d5b92d8c597babb-1.digest b/crates/crust-core/tests/data/import_baselines/ptex_phase_usda-9d5b92d8c597babb-1.digest new file mode 100644 index 000000000..ffb932ead --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/ptex_phase_usda-9d5b92d8c597babb-1.digest @@ -0,0 +1,22 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: None +camera: Camera { origin: Vec3A(15.0, 3.0, 3.0), lower_left_corner: Vec3A(4.8863316, -0.044797063, 4.174048), horizontal: Vec3A(1.2295314, 0.0, -6.147657), vertical: Vec3A(-0.44830504, 3.4967792, -0.08966101), u: Vec3A(0.19611613, 0.0, -0.9805807), v: Vec3A(-0.1271232, 0.991561, -0.02542464), lens_radius: 0.05, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: None +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 640, height: 360, region: PixelRect { x0: 0, y0: 0, x1: 640, y1: 360 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: None, depth_of_field: true, motion_blur: false, layer_stack: ["$DIR/ptex_phase.usda"], invisible_overrides: Some(0) } +layer: $DIR/ptex_phase.usda +warning: Warning { code: CameraMissing, kind: Skipped, count: 1, prims: [], message: "USD stage has no UsdGeomCamera — falling back to world::get_settings camera" } +lights: 0 +volumes: 0 +world: 1 geometries, PrimitiveBreakdown { triangles: 2, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 2, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: Some(1), curve: None, primvars: Some([]) } class 65535 holdout false transparent false map Some(0) uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:02ff87c392969355 camera=2:02ff87c392969355 shadow=2:02ff87c392969355 indirect=2:02ff87c392969355 +provenance material /World/Looks/Rock: MaterialOrigin { slots: [0], displaced: false } +provenance geometry 0..1: /World/Quad +provenance mesh: MeshOrigin { geom_id: 0, slot: 0, baked: true, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 3224020731942780983, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: None, cameras: [], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: None, offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/ptex_phase_usda-9d5b92d8c597babb-1.image b/crates/crust-core/tests/data/import_baselines/ptex_phase_usda-9d5b92d8c597babb-1.image new file mode 100644 index 000000000..c734c5b1d --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/ptex_phase_usda-9d5b92d8c597babb-1.image @@ -0,0 +1 @@ +640x360 16spp clamp-off a04a09c0d4b5e325 diff --git a/crates/crust-core/tests/data/import_baselines/ptex_quads_usda-c2d1b0153068d224-1.digest b/crates/crust-core/tests/data/import_baselines/ptex_quads_usda-c2d1b0153068d224-1.digest new file mode 100644 index 000000000..0dbc7adfd --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/ptex_quads_usda-c2d1b0153068d224-1.digest @@ -0,0 +1,28 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/World/Cam") +camera: Camera { origin: Vec3A(0.0, 0.0, 7.0), lower_left_corner: Vec3A(-5.6632595, -3.1855836, -3.0), horizontal: Vec3A(11.326519, 0.0, 0.0), vertical: Vec3A(0.0, 6.371167, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: Some("/Render/settings") +settings: RenderSettings { samples_per_pixel: 16, max_depth: 3, width: 320, height: 180, region: PixelRect { x0: 0, y0: 0, x1: 320, y1: 180 }, min_samples_per_pixel: 16, variance_threshold: 0.0, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 24.0, aperture: [20.955, 15.2908], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 10.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/ptex_quads.usda"], invisible_overrides: Some(0) } +layer: $DIR/ptex_quads.usda +lights: 1 +light 0: dome name Some("/World/Sky") lpe None pmf 1.0 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 2 geometries, PrimitiveBreakdown { triangles: 12, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 12, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: Some(2), curve: None, primvars: Some([]) } class 65535 holdout false transparent false map Some(0) uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=4:b08498737c0af092 camera=4:b08498737c0af092 shadow=4:b08498737c0af092 indirect=4:b08498737c0af092 +geom 1: material #1 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: Some(4), curve: None, primvars: Some([]) } class 65535 holdout false transparent false map Some(1) uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=8:56f6581b05494da9 camera=8:56f6581b05494da9 shadow=8:56f6581b05494da9 indirect=8:56f6581b05494da9 +provenance material /World/Looks/ColourPtex: MaterialOrigin { slots: [1], displaced: false } +provenance material /World/Looks/TiledPtex: MaterialOrigin { slots: [0], displaced: false } +provenance light /World/Sky: LightOrigin { index: 0, geoms: 0..0 } +provenance geometry 0..1: /World/Tiled +provenance geometry 1..2: /World/Colour +provenance mesh: MeshOrigin { geom_id: 0, slot: 0, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 1, slot: 1, baked: true, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 17735927661718226118, n_points: 6, n_indices: 8, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 1: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 12903772945727330830, n_points: 9, n_indices: 16, n_uvs: None, smooth: false, material: 1 }), placements: 1, shared: false, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: true, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/World/Cam"), cameras: ["/World/Cam"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/World/Cam"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/ptex_quads_usda-c2d1b0153068d224-1.image b/crates/crust-core/tests/data/import_baselines/ptex_quads_usda-c2d1b0153068d224-1.image new file mode 100644 index 000000000..0e06d321d --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/ptex_quads_usda-c2d1b0153068d224-1.image @@ -0,0 +1 @@ +320x180 16spp clamp-off 0630531ef15b502c diff --git a/crates/crust-core/tests/data/import_baselines/ptex_quads_usda-ded3ea05445ff449-1.digest b/crates/crust-core/tests/data/import_baselines/ptex_quads_usda-ded3ea05445ff449-1.digest new file mode 100644 index 000000000..3ed378789 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/ptex_quads_usda-ded3ea05445ff449-1.digest @@ -0,0 +1,29 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/World/Cam") +camera: Camera { origin: Vec3A(0.0, 0.0, 7.0), lower_left_corner: Vec3A(-5.6632595, -3.1855836, -3.0), horizontal: Vec3A(11.326519, 0.0, 0.0), vertical: Vec3A(0.0, 6.371167, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: Some("/Render/settings") +settings: RenderSettings { samples_per_pixel: 16, max_depth: 3, width: 320, height: 180, region: PixelRect { x0: 0, y0: 0, x1: 320, y1: 180 }, min_samples_per_pixel: 16, variance_threshold: 0.0, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 24.0, aperture: [20.955, 15.2908], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 10.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/ptex_quads.usda"], invisible_overrides: Some(0) } +layer: $DIR/ptex_quads.usda +warning: Warning { code: AssetUnsupportedByHost, kind: Skipped, count: 2, prims: [], message: "Asset loader does not decode Ptex: $DIR/textures/quad_tiled.ptx ignored — the surface falls back to its constant baseColor." } +lights: 1 +light 0: dome name Some("/World/Sky") lpe None pmf 1.0 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 2 geometries, PrimitiveBreakdown { triangles: 12, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 12, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=4:b08498737c0af092 camera=4:b08498737c0af092 shadow=4:b08498737c0af092 indirect=4:b08498737c0af092 +geom 1: material #1 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=8:56f6581b05494da9 camera=8:56f6581b05494da9 shadow=8:56f6581b05494da9 indirect=8:56f6581b05494da9 +provenance material /World/Looks/ColourPtex: MaterialOrigin { slots: [1], displaced: false } +provenance material /World/Looks/TiledPtex: MaterialOrigin { slots: [0], displaced: false } +provenance light /World/Sky: LightOrigin { index: 0, geoms: 0..0 } +provenance geometry 0..1: /World/Tiled +provenance geometry 1..2: /World/Colour +provenance mesh: MeshOrigin { geom_id: 0, slot: 0, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 1, slot: 1, baked: true, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 17735927661718226118, n_points: 6, n_indices: 8, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 1: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 12903772945727330830, n_points: 9, n_indices: 16, n_uvs: None, smooth: false, material: 1 }), placements: 1, shared: false, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/World/Cam"), cameras: ["/World/Cam"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/World/Cam"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/ptex_quads_usda-ded3ea05445ff449-1.image b/crates/crust-core/tests/data/import_baselines/ptex_quads_usda-ded3ea05445ff449-1.image new file mode 100644 index 000000000..ba63f7d47 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/ptex_quads_usda-ded3ea05445ff449-1.image @@ -0,0 +1 @@ +320x180 16spp clamp-off b66e59588e78f0ca diff --git a/crates/crust-core/tests/data/import_baselines/ptex_quads_usda-ded3ea05445ff449-2.digest b/crates/crust-core/tests/data/import_baselines/ptex_quads_usda-ded3ea05445ff449-2.digest new file mode 100644 index 000000000..3ed378789 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/ptex_quads_usda-ded3ea05445ff449-2.digest @@ -0,0 +1,29 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/World/Cam") +camera: Camera { origin: Vec3A(0.0, 0.0, 7.0), lower_left_corner: Vec3A(-5.6632595, -3.1855836, -3.0), horizontal: Vec3A(11.326519, 0.0, 0.0), vertical: Vec3A(0.0, 6.371167, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: Some("/Render/settings") +settings: RenderSettings { samples_per_pixel: 16, max_depth: 3, width: 320, height: 180, region: PixelRect { x0: 0, y0: 0, x1: 320, y1: 180 }, min_samples_per_pixel: 16, variance_threshold: 0.0, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 24.0, aperture: [20.955, 15.2908], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 10.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/ptex_quads.usda"], invisible_overrides: Some(0) } +layer: $DIR/ptex_quads.usda +warning: Warning { code: AssetUnsupportedByHost, kind: Skipped, count: 2, prims: [], message: "Asset loader does not decode Ptex: $DIR/textures/quad_tiled.ptx ignored — the surface falls back to its constant baseColor." } +lights: 1 +light 0: dome name Some("/World/Sky") lpe None pmf 1.0 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 2 geometries, PrimitiveBreakdown { triangles: 12, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 12, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=4:b08498737c0af092 camera=4:b08498737c0af092 shadow=4:b08498737c0af092 indirect=4:b08498737c0af092 +geom 1: material #1 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=8:56f6581b05494da9 camera=8:56f6581b05494da9 shadow=8:56f6581b05494da9 indirect=8:56f6581b05494da9 +provenance material /World/Looks/ColourPtex: MaterialOrigin { slots: [1], displaced: false } +provenance material /World/Looks/TiledPtex: MaterialOrigin { slots: [0], displaced: false } +provenance light /World/Sky: LightOrigin { index: 0, geoms: 0..0 } +provenance geometry 0..1: /World/Tiled +provenance geometry 1..2: /World/Colour +provenance mesh: MeshOrigin { geom_id: 0, slot: 0, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 1, slot: 1, baked: true, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 17735927661718226118, n_points: 6, n_indices: 8, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 1: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 12903772945727330830, n_points: 9, n_indices: 16, n_uvs: None, smooth: false, material: 1 }), placements: 1, shared: false, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/World/Cam"), cameras: ["/World/Cam"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/World/Cam"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/ptex_quads_usda-ded3ea05445ff449-2.image b/crates/crust-core/tests/data/import_baselines/ptex_quads_usda-ded3ea05445ff449-2.image new file mode 100644 index 000000000..ba63f7d47 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/ptex_quads_usda-ded3ea05445ff449-2.image @@ -0,0 +1 @@ +320x180 16spp clamp-off b66e59588e78f0ca diff --git a/crates/crust-core/tests/data/import_baselines/purpose_bindings_usda-08709bdb4f451e59-1.digest b/crates/crust-core/tests/data/import_baselines/purpose_bindings_usda-08709bdb4f451e59-1.digest new file mode 100644 index 000000000..f248a7604 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/purpose_bindings_usda-08709bdb4f451e59-1.digest @@ -0,0 +1,36 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/World/Cam") +camera: Camera { origin: Vec3A(0.0, 1.5, 9.0), lower_left_corner: Vec3A(-4.3656254, -1.9874965, -0.6885319), horizontal: Vec3A(8.731251, -0.0, 0.0), vertical: Vec3A(0.0, 4.8844237, -0.5133736), u: Vec3A(1.0, -0.0, 0.0), v: Vec3A(0.0, 0.9945219, -0.104528464), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: None +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 640, height: 360, region: PixelRect { x0: 0, y0: 0, x1: 640, y1: 360 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 24.0, aperture: [20.955, 11.787], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 10.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/purpose_bindings.usda"], invisible_overrides: Some(0) } +layer: $DIR/purpose_bindings.usda +lights: 2 +light 0: distant name Some("/World/Sun") lpe None pmf 0.5 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 1: dome name Some("/World/Sky") lpe None pmf 0.5 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 4 geometries, PrimitiveBreakdown { triangles: 14, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 2 } top level, PrimitiveBreakdown { triangles: 26, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 2 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=12:d39ea1d8f1160585 camera=12:d39ea1d8f1160585 shadow=12:d39ea1d8f1160585 indirect=12:d39ea1d8f1160585 +geom 1: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=12:49382ab6090bd205 camera=12:49382ab6090bd205 shadow=12:49382ab6090bd205 indirect=12:49382ab6090bd205 +geom 2: material #1 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=12:b7134b56e9f18a65 camera=12:b7134b56e9f18a65 shadow=12:b7134b56e9f18a65 indirect=12:b7134b56e9f18a65 +geom 3: material #2 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:9626b0f2f3e041c5 camera=2:9626b0f2f3e041c5 shadow=2:9626b0f2f3e041c5 indirect=2:9626b0f2f3e041c5 +provenance material /World/Plain/MATERIAL/full: MaterialOrigin { slots: [2], displaced: false } +provenance material read: ("/World/_Asset/MATERIAL/full", "/__Prototype_0/MATERIAL/full") +provenance material read: ("/World/_Asset/MATERIAL/full/surface", "/__Prototype_0/MATERIAL/full") +provenance light /World/Sky: LightOrigin { index: 1, geoms: 0..0 } +provenance light /World/Sun: LightOrigin { index: 0, geoms: 0..0 } +provenance geometry 0..1: /World/TowerA +provenance geometry 1..2: /World/TowerB +provenance geometry 2..3: /World/Plain/GEO/block +provenance geometry 3..4: /World/Ground +provenance mesh: MeshOrigin { geom_id: 2, slot: 1, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 3, slot: 2, baked: true, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 9489415549461608354, n_points: 8, n_indices: 24, n_uvs: None, smooth: false, material: 0 }), placements: 0, shared: true, displaced: false } +provenance mesh slot 1: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 9489415549461608354, n_points: 8, n_indices: 24, n_uvs: None, smooth: false, material: 1 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 2: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 14002714535549629103, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 2 }), placements: 1, shared: false, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/World/Cam"), cameras: ["/World/Cam"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/World/Cam"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/purpose_bindings_usda-08709bdb4f451e59-1.image b/crates/crust-core/tests/data/import_baselines/purpose_bindings_usda-08709bdb4f451e59-1.image new file mode 100644 index 000000000..a91e71dcb --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/purpose_bindings_usda-08709bdb4f451e59-1.image @@ -0,0 +1 @@ +640x360 16spp clamp-off 150ac3a4441bf342 diff --git a/crates/crust-core/tests/data/import_baselines/purpose_bindings_usda-08709bdb4f451e59-2.digest b/crates/crust-core/tests/data/import_baselines/purpose_bindings_usda-08709bdb4f451e59-2.digest new file mode 100644 index 000000000..f248a7604 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/purpose_bindings_usda-08709bdb4f451e59-2.digest @@ -0,0 +1,36 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/World/Cam") +camera: Camera { origin: Vec3A(0.0, 1.5, 9.0), lower_left_corner: Vec3A(-4.3656254, -1.9874965, -0.6885319), horizontal: Vec3A(8.731251, -0.0, 0.0), vertical: Vec3A(0.0, 4.8844237, -0.5133736), u: Vec3A(1.0, -0.0, 0.0), v: Vec3A(0.0, 0.9945219, -0.104528464), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: None +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 640, height: 360, region: PixelRect { x0: 0, y0: 0, x1: 640, y1: 360 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 24.0, aperture: [20.955, 11.787], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 10.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/purpose_bindings.usda"], invisible_overrides: Some(0) } +layer: $DIR/purpose_bindings.usda +lights: 2 +light 0: distant name Some("/World/Sun") lpe None pmf 0.5 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 1: dome name Some("/World/Sky") lpe None pmf 0.5 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 4 geometries, PrimitiveBreakdown { triangles: 14, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 2 } top level, PrimitiveBreakdown { triangles: 26, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 2 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=12:d39ea1d8f1160585 camera=12:d39ea1d8f1160585 shadow=12:d39ea1d8f1160585 indirect=12:d39ea1d8f1160585 +geom 1: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=12:49382ab6090bd205 camera=12:49382ab6090bd205 shadow=12:49382ab6090bd205 indirect=12:49382ab6090bd205 +geom 2: material #1 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=12:b7134b56e9f18a65 camera=12:b7134b56e9f18a65 shadow=12:b7134b56e9f18a65 indirect=12:b7134b56e9f18a65 +geom 3: material #2 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:9626b0f2f3e041c5 camera=2:9626b0f2f3e041c5 shadow=2:9626b0f2f3e041c5 indirect=2:9626b0f2f3e041c5 +provenance material /World/Plain/MATERIAL/full: MaterialOrigin { slots: [2], displaced: false } +provenance material read: ("/World/_Asset/MATERIAL/full", "/__Prototype_0/MATERIAL/full") +provenance material read: ("/World/_Asset/MATERIAL/full/surface", "/__Prototype_0/MATERIAL/full") +provenance light /World/Sky: LightOrigin { index: 1, geoms: 0..0 } +provenance light /World/Sun: LightOrigin { index: 0, geoms: 0..0 } +provenance geometry 0..1: /World/TowerA +provenance geometry 1..2: /World/TowerB +provenance geometry 2..3: /World/Plain/GEO/block +provenance geometry 3..4: /World/Ground +provenance mesh: MeshOrigin { geom_id: 2, slot: 1, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 3, slot: 2, baked: true, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 9489415549461608354, n_points: 8, n_indices: 24, n_uvs: None, smooth: false, material: 0 }), placements: 0, shared: true, displaced: false } +provenance mesh slot 1: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 9489415549461608354, n_points: 8, n_indices: 24, n_uvs: None, smooth: false, material: 1 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 2: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 14002714535549629103, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 2 }), placements: 1, shared: false, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/World/Cam"), cameras: ["/World/Cam"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/World/Cam"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/purpose_bindings_usda-08709bdb4f451e59-2.image b/crates/crust-core/tests/data/import_baselines/purpose_bindings_usda-08709bdb4f451e59-2.image new file mode 100644 index 000000000..a91e71dcb --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/purpose_bindings_usda-08709bdb4f451e59-2.image @@ -0,0 +1 @@ +640x360 16spp clamp-off 150ac3a4441bf342 diff --git a/crates/crust-core/tests/data/import_baselines/purpose_bindings_usda-856ac5cdf233a681-1.digest b/crates/crust-core/tests/data/import_baselines/purpose_bindings_usda-856ac5cdf233a681-1.digest new file mode 100644 index 000000000..aa5319288 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/purpose_bindings_usda-856ac5cdf233a681-1.digest @@ -0,0 +1,36 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/World/Cam") +camera: Camera { origin: Vec3A(0.0, 1.5, 9.0), lower_left_corner: Vec3A(-4.3656254, -1.9874965, -0.6885319), horizontal: Vec3A(8.731251, -0.0, 0.0), vertical: Vec3A(0.0, 4.8844237, -0.5133736), u: Vec3A(1.0, -0.0, 0.0), v: Vec3A(0.0, 0.9945219, -0.104528464), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: None +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 640, height: 360, region: PixelRect { x0: 0, y0: 0, x1: 640, y1: 360 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 24.0, aperture: [20.955, 11.787], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 10.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/purpose_bindings.usda"], invisible_overrides: Some(0) } +layer: $DIR/purpose_bindings.usda +lights: 2 +light 0: distant name Some("/World/Sun") lpe None pmf 0.5 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 1: dome name Some("/World/Sky") lpe None pmf 0.5 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 4 geometries, PrimitiveBreakdown { triangles: 14, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 2 } top level, PrimitiveBreakdown { triangles: 26, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 2 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=12:d39ea1d8f1160585 camera=12:d39ea1d8f1160585 shadow=12:d39ea1d8f1160585 indirect=12:d39ea1d8f1160585 +geom 1: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=12:49382ab6090bd205 camera=12:49382ab6090bd205 shadow=12:49382ab6090bd205 indirect=12:49382ab6090bd205 +geom 2: material #1 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=12:b7134b56e9f18a65 camera=12:b7134b56e9f18a65 shadow=12:b7134b56e9f18a65 indirect=12:b7134b56e9f18a65 +geom 3: material #2 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:9626b0f2f3e041c5 camera=2:9626b0f2f3e041c5 shadow=2:9626b0f2f3e041c5 indirect=2:9626b0f2f3e041c5 +provenance material /World/Plain/MATERIAL/full: MaterialOrigin { slots: [2], displaced: false } +provenance material read: ("/World/_Asset/MATERIAL/full", "/__Prototype_0/MATERIAL/full") +provenance material read: ("/World/_Asset/MATERIAL/full/surface", "/__Prototype_0/MATERIAL/full") +provenance light /World/Sky: LightOrigin { index: 1, geoms: 0..0 } +provenance light /World/Sun: LightOrigin { index: 0, geoms: 0..0 } +provenance geometry 0..1: /World/TowerA +provenance geometry 1..2: /World/TowerB +provenance geometry 2..3: /World/Plain/GEO/block +provenance geometry 3..4: /World/Ground +provenance mesh: MeshOrigin { geom_id: 2, slot: 1, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 3, slot: 2, baked: true, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 9489415549461608354, n_points: 8, n_indices: 24, n_uvs: None, smooth: false, material: 0 }), placements: 0, shared: true, displaced: false } +provenance mesh slot 1: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 9489415549461608354, n_points: 8, n_indices: 24, n_uvs: None, smooth: false, material: 1 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 2: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 14002714535549629103, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 2 }), placements: 1, shared: false, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: true, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/World/Cam"), cameras: ["/World/Cam"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/World/Cam"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/purpose_bindings_usda-856ac5cdf233a681-1.image b/crates/crust-core/tests/data/import_baselines/purpose_bindings_usda-856ac5cdf233a681-1.image new file mode 100644 index 000000000..a91e71dcb --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/purpose_bindings_usda-856ac5cdf233a681-1.image @@ -0,0 +1 @@ +640x360 16spp clamp-off 150ac3a4441bf342 diff --git a/crates/crust-core/tests/data/import_baselines/purpose_bindings_usda-b7b3a3303527bce0-1.digest b/crates/crust-core/tests/data/import_baselines/purpose_bindings_usda-b7b3a3303527bce0-1.digest new file mode 100644 index 000000000..9a412f381 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/purpose_bindings_usda-b7b3a3303527bce0-1.digest @@ -0,0 +1,37 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/World/Cam") +camera: Camera { origin: Vec3A(0.0, 1.5, 9.0), lower_left_corner: Vec3A(-4.3656254, -1.9874965, -0.6885319), horizontal: Vec3A(8.731251, -0.0, 0.0), vertical: Vec3A(0.0, 4.8844237, -0.5133736), u: Vec3A(1.0, -0.0, 0.0), v: Vec3A(0.0, 0.9945219, -0.104528464), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: None +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 640, height: 360, region: PixelRect { x0: 0, y0: 0, x1: 640, y1: 360 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 24.0, aperture: [20.955, 11.787], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 10.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/purpose_bindings.usda"], invisible_overrides: Some(0) } +layer: $DIR/purpose_bindings.usda +warning: Warning { code: SubdivAdaptiveNeedsCamera, kind: Approximated, count: 1, prims: [], message: "Adaptive subdivision (2 px) needs the render camera before the stage is read — name it with --camera or RenderSettings.camera, or a dicing camera with crust:dicingCamera. Using the uniform level 0" } +lights: 2 +light 0: distant name Some("/World/Sun") lpe None pmf 0.5 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 1: dome name Some("/World/Sky") lpe None pmf 0.5 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 4 geometries, PrimitiveBreakdown { triangles: 14, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 2 } top level, PrimitiveBreakdown { triangles: 26, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 2 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=12:d39ea1d8f1160585 camera=12:d39ea1d8f1160585 shadow=12:d39ea1d8f1160585 indirect=12:d39ea1d8f1160585 +geom 1: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=12:49382ab6090bd205 camera=12:49382ab6090bd205 shadow=12:49382ab6090bd205 indirect=12:49382ab6090bd205 +geom 2: material #1 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=12:b7134b56e9f18a65 camera=12:b7134b56e9f18a65 shadow=12:b7134b56e9f18a65 indirect=12:b7134b56e9f18a65 +geom 3: material #2 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:9626b0f2f3e041c5 camera=2:9626b0f2f3e041c5 shadow=2:9626b0f2f3e041c5 indirect=2:9626b0f2f3e041c5 +provenance material /World/Plain/MATERIAL/full: MaterialOrigin { slots: [2], displaced: false } +provenance material read: ("/World/_Asset/MATERIAL/full", "/__Prototype_0/MATERIAL/full") +provenance material read: ("/World/_Asset/MATERIAL/full/surface", "/__Prototype_0/MATERIAL/full") +provenance light /World/Sky: LightOrigin { index: 1, geoms: 0..0 } +provenance light /World/Sun: LightOrigin { index: 0, geoms: 0..0 } +provenance geometry 0..1: /World/TowerA +provenance geometry 1..2: /World/TowerB +provenance geometry 2..3: /World/Plain/GEO/block +provenance geometry 3..4: /World/Ground +provenance mesh: MeshOrigin { geom_id: 2, slot: 1, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 3, slot: 2, baked: true, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 9489415549461608354, n_points: 8, n_indices: 24, n_uvs: None, smooth: false, material: 0 }), placements: 0, shared: true, displaced: false } +provenance mesh slot 1: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 9489415549461608354, n_points: 8, n_indices: 24, n_uvs: None, smooth: false, material: 1 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 2: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 14002714535549629103, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 2 }), placements: 1, shared: false, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: Some(2.0), skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/World/Cam"), cameras: ["/World/Cam"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/World/Cam"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/purpose_bindings_usda-b7b3a3303527bce0-1.image b/crates/crust-core/tests/data/import_baselines/purpose_bindings_usda-b7b3a3303527bce0-1.image new file mode 100644 index 000000000..a91e71dcb --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/purpose_bindings_usda-b7b3a3303527bce0-1.image @@ -0,0 +1 @@ +640x360 16spp clamp-off 150ac3a4441bf342 diff --git a/crates/crust-core/tests/data/import_baselines/purpose_usda-bf0c2e782a7f7633-1.digest b/crates/crust-core/tests/data/import_baselines/purpose_usda-bf0c2e782a7f7633-1.digest new file mode 100644 index 000000000..b0020df73 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/purpose_usda-bf0c2e782a7f7633-1.digest @@ -0,0 +1,24 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: None +camera: Camera { origin: Vec3A(15.0, 3.0, 3.0), lower_left_corner: Vec3A(4.8863316, -0.044797063, 4.174048), horizontal: Vec3A(1.2295314, 0.0, -6.147657), vertical: Vec3A(-0.44830504, 3.4967792, -0.08966101), u: Vec3A(0.19611613, 0.0, -0.9805807), v: Vec3A(-0.1271232, 0.991561, -0.02542464), lens_radius: 0.05, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: None +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 640, height: 360, region: PixelRect { x0: 0, y0: 0, x1: 640, y1: 360 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: None, depth_of_field: true, motion_blur: false, layer_stack: ["$DIR/purpose.usda"], invisible_overrides: Some(0) } +layer: $DIR/purpose.usda +warning: Warning { code: CameraMissing, kind: Skipped, count: 1, prims: [], message: "USD stage has no UsdGeomCamera — falling back to world::get_settings camera" } +lights: 0 +volumes: 0 +world: 2 geometries, PrimitiveBreakdown { triangles: 0, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 2 } top level, PrimitiveBreakdown { triangles: 2, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 2 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:02ff87c392969355 camera=2:02ff87c392969355 shadow=2:02ff87c392969355 indirect=2:02ff87c392969355 +geom 1: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:02ff87c392969355 camera=2:02ff87c392969355 shadow=2:02ff87c392969355 indirect=2:02ff87c392969355 +provenance geometry 0..1: /W/GEO/R +provenance geometry 1..2: /W/Plain/D +provenance mesh: MeshOrigin { geom_id: 0, slot: 0, baked: false, moving: false } +provenance mesh: MeshOrigin { geom_id: 1, slot: 0, baked: false, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 3224020731942780983, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 0 }), placements: 2, shared: false, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: None, cameras: [], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: None, offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/purpose_usda-bf0c2e782a7f7633-1.image b/crates/crust-core/tests/data/import_baselines/purpose_usda-bf0c2e782a7f7633-1.image new file mode 100644 index 000000000..c734c5b1d --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/purpose_usda-bf0c2e782a7f7633-1.image @@ -0,0 +1 @@ +640x360 16spp clamp-off a04a09c0d4b5e325 diff --git a/crates/crust-core/tests/data/import_baselines/pxr_displace_usda-3eb2626e4111c003-1.digest b/crates/crust-core/tests/data/import_baselines/pxr_displace_usda-3eb2626e4111c003-1.digest new file mode 100644 index 000000000..e5dc51331 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/pxr_displace_usda-3eb2626e4111c003-1.digest @@ -0,0 +1,26 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/World/Cam") +camera: Camera { origin: Vec3A(1.0, 2.2, 2.6), lower_left_corner: Vec3A(-5.371167, -7.4816084, -2.3302393), horizontal: Vec3A(12.742334, -0.0, 0.0), vertical: Vec3A(0.0, 6.5074635, -5.4604106), u: Vec3A(1.0, -0.0, 0.0), v: Vec3A(0.0, 0.76604444, -0.64278764), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: Some("/Render/settings") +settings: RenderSettings { samples_per_pixel: 32, max_depth: 4, width: 240, height: 160, region: PixelRect { x0: 0, y0: 0, x1: 240, y1: 160 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 18.0, aperture: [20.955, 15.2908], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 10.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/pxr_displace.usda"], invisible_overrides: Some(0) } +layer: $DIR/pxr_displace.usda +warning: Warning { code: MeshDisplacedAtCage, kind: Approximated, count: 1, prims: ["/World/Quads"], message: "Mesh at /World/Quads is displaced at its cage resolution, so only cage vertices move — raise --subdiv-level or set --subdiv-edge-length to dice it finer (further occurrences are counted in the import's warnings)" } +lights: 2 +light 0: distant name Some("/World/Sun") lpe None pmf 0.5 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 1: dome name Some("/World/Sky") lpe None pmf 0.5 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 1 geometries, PrimitiveBreakdown { triangles: 4, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 4, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=4:ad7188ebc088231b camera=4:ad7188ebc088231b shadow=4:ad7188ebc088231b indirect=4:ad7188ebc088231b +provenance material /World/Rock: MaterialOrigin { slots: [0], displaced: true } +provenance light /World/Sky: LightOrigin { index: 1, geoms: 1..1 } +provenance light /World/Sun: LightOrigin { index: 0, geoms: 1..1 } +provenance geometry 0..1: /World/Quads +provenance mesh: MeshOrigin { geom_id: 0, slot: 0, baked: true, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 18140786555293703923, n_points: 6, n_indices: 8, n_uvs: None, smooth: true, material: 0 }), placements: 1, shared: false, displaced: true } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: Some(0), subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/World/Cam"), cameras: ["/World/Cam"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/World/Cam"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/pxr_displace_usda-3eb2626e4111c003-1.image b/crates/crust-core/tests/data/import_baselines/pxr_displace_usda-3eb2626e4111c003-1.image new file mode 100644 index 000000000..f2df64f62 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/pxr_displace_usda-3eb2626e4111c003-1.image @@ -0,0 +1 @@ +240x160 16spp clamp-off a59145e84b30f663 diff --git a/crates/crust-core/tests/data/import_baselines/pxr_displace_usda-744b2066d6ee31b4-1.digest b/crates/crust-core/tests/data/import_baselines/pxr_displace_usda-744b2066d6ee31b4-1.digest new file mode 100644 index 000000000..a63732b5f --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/pxr_displace_usda-744b2066d6ee31b4-1.digest @@ -0,0 +1,25 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/World/Cam") +camera: Camera { origin: Vec3A(1.0, 2.2, 2.6), lower_left_corner: Vec3A(-5.371167, -7.4816084, -2.3302393), horizontal: Vec3A(12.742334, -0.0, 0.0), vertical: Vec3A(0.0, 6.5074635, -5.4604106), u: Vec3A(1.0, -0.0, 0.0), v: Vec3A(0.0, 0.76604444, -0.64278764), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: Some("/Render/settings") +settings: RenderSettings { samples_per_pixel: 32, max_depth: 4, width: 240, height: 160, region: PixelRect { x0: 0, y0: 0, x1: 240, y1: 160 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 18.0, aperture: [20.955, 15.2908], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 10.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/pxr_displace.usda"], invisible_overrides: Some(0) } +layer: $DIR/pxr_displace.usda +lights: 2 +light 0: distant name Some("/World/Sun") lpe None pmf 0.5 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 1: dome name Some("/World/Sky") lpe None pmf 0.5 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 1 geometries, PrimitiveBreakdown { triangles: 256, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 256, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=256:0baee751feb1cdc5 camera=256:0baee751feb1cdc5 shadow=256:0baee751feb1cdc5 indirect=256:0baee751feb1cdc5 +provenance material /World/Rock: MaterialOrigin { slots: [0], displaced: true } +provenance light /World/Sky: LightOrigin { index: 1, geoms: 1..1 } +provenance light /World/Sun: LightOrigin { index: 0, geoms: 1..1 } +provenance geometry 0..1: /World/Quads +provenance mesh: MeshOrigin { geom_id: 0, slot: 0, baked: true, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 8923026245133849666, n_points: 153, n_indices: 512, n_uvs: None, smooth: true, material: 0 }), placements: 1, shared: false, displaced: true } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: true, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 3, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/World/Cam"), cameras: ["/World/Cam"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/World/Cam"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/pxr_displace_usda-744b2066d6ee31b4-1.image b/crates/crust-core/tests/data/import_baselines/pxr_displace_usda-744b2066d6ee31b4-1.image new file mode 100644 index 000000000..bd6342800 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/pxr_displace_usda-744b2066d6ee31b4-1.image @@ -0,0 +1 @@ +240x160 16spp clamp-off c38835bd3c395f26 diff --git a/crates/crust-core/tests/data/import_baselines/pxr_displace_usda-aa614afb7e46c6eb-1.digest b/crates/crust-core/tests/data/import_baselines/pxr_displace_usda-aa614afb7e46c6eb-1.digest new file mode 100644 index 000000000..4e99dc5d2 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/pxr_displace_usda-aa614afb7e46c6eb-1.digest @@ -0,0 +1,26 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/World/Cam") +camera: Camera { origin: Vec3A(1.0, 2.2, 2.6), lower_left_corner: Vec3A(-5.371167, -7.4816084, -2.3302393), horizontal: Vec3A(12.742334, -0.0, 0.0), vertical: Vec3A(0.0, 6.5074635, -5.4604106), u: Vec3A(1.0, -0.0, 0.0), v: Vec3A(0.0, 0.76604444, -0.64278764), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: Some("/Render/settings") +settings: RenderSettings { samples_per_pixel: 32, max_depth: 4, width: 240, height: 160, region: PixelRect { x0: 0, y0: 0, x1: 240, y1: 160 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 18.0, aperture: [20.955, 15.2908], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 10.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/pxr_displace.usda"], invisible_overrides: Some(0) } +layer: $DIR/pxr_displace.usda +warning: Warning { code: AssetUnsupportedByHost, kind: Skipped, count: 2, prims: [], message: "Asset loader does not decode Ptex: $DIR/textures/quad_f32.ptx ignored — the surface falls back to its constant baseColor." } +lights: 2 +light 0: distant name Some("/World/Sun") lpe None pmf 0.5 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 1: dome name Some("/World/Sky") lpe None pmf 0.5 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 1 geometries, PrimitiveBreakdown { triangles: 4, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 4, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=4:1c1a4717f2bf9d55 camera=4:1c1a4717f2bf9d55 shadow=4:1c1a4717f2bf9d55 indirect=4:1c1a4717f2bf9d55 +provenance material /World/Rock: MaterialOrigin { slots: [0], displaced: false } +provenance light /World/Sky: LightOrigin { index: 1, geoms: 1..1 } +provenance light /World/Sun: LightOrigin { index: 0, geoms: 1..1 } +provenance geometry 0..1: /World/Quads +provenance mesh: MeshOrigin { geom_id: 0, slot: 0, baked: true, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 18140786555293703923, n_points: 6, n_indices: 8, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 3, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/World/Cam"), cameras: ["/World/Cam"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/World/Cam"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/pxr_displace_usda-aa614afb7e46c6eb-1.image b/crates/crust-core/tests/data/import_baselines/pxr_displace_usda-aa614afb7e46c6eb-1.image new file mode 100644 index 000000000..f2cecac71 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/pxr_displace_usda-aa614afb7e46c6eb-1.image @@ -0,0 +1 @@ +240x160 16spp clamp-off 60e4d93d43aeae7b diff --git a/crates/crust-core/tests/data/import_baselines/pxr_displace_usda-aa614afb7e46c6eb-2.digest b/crates/crust-core/tests/data/import_baselines/pxr_displace_usda-aa614afb7e46c6eb-2.digest new file mode 100644 index 000000000..4e99dc5d2 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/pxr_displace_usda-aa614afb7e46c6eb-2.digest @@ -0,0 +1,26 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/World/Cam") +camera: Camera { origin: Vec3A(1.0, 2.2, 2.6), lower_left_corner: Vec3A(-5.371167, -7.4816084, -2.3302393), horizontal: Vec3A(12.742334, -0.0, 0.0), vertical: Vec3A(0.0, 6.5074635, -5.4604106), u: Vec3A(1.0, -0.0, 0.0), v: Vec3A(0.0, 0.76604444, -0.64278764), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: Some("/Render/settings") +settings: RenderSettings { samples_per_pixel: 32, max_depth: 4, width: 240, height: 160, region: PixelRect { x0: 0, y0: 0, x1: 240, y1: 160 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 18.0, aperture: [20.955, 15.2908], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 10.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/pxr_displace.usda"], invisible_overrides: Some(0) } +layer: $DIR/pxr_displace.usda +warning: Warning { code: AssetUnsupportedByHost, kind: Skipped, count: 2, prims: [], message: "Asset loader does not decode Ptex: $DIR/textures/quad_f32.ptx ignored — the surface falls back to its constant baseColor." } +lights: 2 +light 0: distant name Some("/World/Sun") lpe None pmf 0.5 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 1: dome name Some("/World/Sky") lpe None pmf 0.5 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 1 geometries, PrimitiveBreakdown { triangles: 4, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 4, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=4:1c1a4717f2bf9d55 camera=4:1c1a4717f2bf9d55 shadow=4:1c1a4717f2bf9d55 indirect=4:1c1a4717f2bf9d55 +provenance material /World/Rock: MaterialOrigin { slots: [0], displaced: false } +provenance light /World/Sky: LightOrigin { index: 1, geoms: 1..1 } +provenance light /World/Sun: LightOrigin { index: 0, geoms: 1..1 } +provenance geometry 0..1: /World/Quads +provenance mesh: MeshOrigin { geom_id: 0, slot: 0, baked: true, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 18140786555293703923, n_points: 6, n_indices: 8, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 3, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/World/Cam"), cameras: ["/World/Cam"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/World/Cam"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/pxr_displace_usda-aa614afb7e46c6eb-2.image b/crates/crust-core/tests/data/import_baselines/pxr_displace_usda-aa614afb7e46c6eb-2.image new file mode 100644 index 000000000..f2cecac71 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/pxr_displace_usda-aa614afb7e46c6eb-2.image @@ -0,0 +1 @@ +240x160 16spp clamp-off 60e4d93d43aeae7b diff --git a/crates/crust-core/tests/data/import_baselines/quad_usda-8a80e703a52aec63-1.digest b/crates/crust-core/tests/data/import_baselines/quad_usda-8a80e703a52aec63-1.digest new file mode 100644 index 000000000..472a6a547 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/quad_usda-8a80e703a52aec63-1.digest @@ -0,0 +1,21 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: None +camera: Camera { origin: Vec3A(15.0, 3.0, 3.0), lower_left_corner: Vec3A(4.8863316, -0.044797063, 4.174048), horizontal: Vec3A(1.2295314, 0.0, -6.147657), vertical: Vec3A(-0.44830504, 3.4967792, -0.08966101), u: Vec3A(0.19611613, 0.0, -0.9805807), v: Vec3A(-0.1271232, 0.991561, -0.02542464), lens_radius: 0.05, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: None +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 640, height: 360, region: PixelRect { x0: 0, y0: 0, x1: 640, y1: 360 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: None, depth_of_field: true, motion_blur: false, layer_stack: ["$DIR/quad.usda"], invisible_overrides: Some(0) } +layer: $DIR/quad.usda +warning: Warning { code: CameraMissing, kind: Skipped, count: 1, prims: [], message: "USD stage has no UsdGeomCamera — falling back to world::get_settings camera" } +lights: 0 +volumes: 0 +world: 1 geometries, PrimitiveBreakdown { triangles: 2, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 2, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:32f1a52c797bfee5 camera=2:32f1a52c797bfee5 shadow=2:32f1a52c797bfee5 indirect=2:32f1a52c797bfee5 +provenance geometry 0..1: /World/Quad +provenance mesh: MeshOrigin { geom_id: 0, slot: 0, baked: true, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 14414187199170096052, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: None, cameras: [], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: None, offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/quad_usda-8a80e703a52aec63-1.image b/crates/crust-core/tests/data/import_baselines/quad_usda-8a80e703a52aec63-1.image new file mode 100644 index 000000000..c734c5b1d --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/quad_usda-8a80e703a52aec63-1.image @@ -0,0 +1 @@ +640x360 16spp clamp-off a04a09c0d4b5e325 diff --git a/crates/crust-core/tests/data/import_baselines/quiet_curves_usda-c001d1e165c273d4-1.digest b/crates/crust-core/tests/data/import_baselines/quiet_curves_usda-c001d1e165c273d4-1.digest new file mode 100644 index 000000000..eb0666c62 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/quiet_curves_usda-c001d1e165c273d4-1.digest @@ -0,0 +1,18 @@ +time: Some(5.0) +working space: Linear Rec.709 (sRGB) +camera path: Some("/World/cam") +camera: Camera { origin: Vec3A(0.0, 0.0, 8.0), lower_left_corner: Vec3A(-2.7183647, -1.5290802, -2.0), horizontal: Vec3A(5.4367294, 0.0, 0.0), vertical: Vec3A(0.0, 3.0581603, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: Some("/Render/settings") +settings: RenderSettings { samples_per_pixel: 16, max_depth: 2, width: 64, height: 36, region: PixelRect { x0: 0, y0: 0, x1: 64, y1: 36 }, min_samples_per_pixel: 16, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 5, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 50.0, aperture: [20.955, 15.2908], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 10.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/quiet_curves.usda"], invisible_overrides: Some(0) } +layer: $DIR/quiet_curves.usda +lights: 0 +volumes: 0 +world: 1 geometries, PrimitiveBreakdown { triangles: 0, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 1 } top level, PrimitiveBreakdown { triangles: 0, spheres: 0, disks: 0, cylinders: 0, curve_segments: 1, cubic_curve_spans: 0, instances: 1 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: Some((false, false, [])), primvars: None } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves true scale 1.0 motion [] pieces all=1:598f37c01518952d camera=1:598f37c01518952d shadow=1:598f37c01518952d indirect=1:598f37c01518952d +provenance geometry 0..1: /World/Hair +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: Some(5.0), camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/World/cam"), cameras: ["/World/cam"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/World/cam"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/quiet_curves_usda-c001d1e165c273d4-1.image b/crates/crust-core/tests/data/import_baselines/quiet_curves_usda-c001d1e165c273d4-1.image new file mode 100644 index 000000000..f4ebc1648 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/quiet_curves_usda-c001d1e165c273d4-1.image @@ -0,0 +1 @@ +64x36 16spp clamp-off 1028d44458cc9325 diff --git a/crates/crust-core/tests/data/import_baselines/quiet_light_usda-c8a2428bb59d472f-1.digest b/crates/crust-core/tests/data/import_baselines/quiet_light_usda-c8a2428bb59d472f-1.digest new file mode 100644 index 000000000..b5ef8fce2 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/quiet_light_usda-c8a2428bb59d472f-1.digest @@ -0,0 +1,20 @@ +time: Some(5.0) +working space: Linear Rec.709 (sRGB) +camera path: Some("/World/cam") +camera: Camera { origin: Vec3A(0.0, 0.0, 8.0), lower_left_corner: Vec3A(-2.7183647, -1.5290802, -2.0), horizontal: Vec3A(5.4367294, 0.0, 0.0), vertical: Vec3A(0.0, 3.0581603, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: Some("/Render/settings") +settings: RenderSettings { samples_per_pixel: 16, max_depth: 2, width: 64, height: 36, region: PixelRect { x0: 0, y0: 0, x1: 64, y1: 36 }, min_samples_per_pixel: 16, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 5, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 50.0, aperture: [20.955, 15.2908], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 10.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/quiet_light.usda"], invisible_overrides: Some(0) } +layer: $DIR/quiet_light.usda +lights: 1 +light 0: area name Some("/World/Lamp") lpe None pmf 1.0 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 1 geometries, PrimitiveBreakdown { triangles: 0, spheres: 1, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 0, spheres: 1, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +geom 0: material #0 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:182863594c30eabb camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=1:182863594c30eabb +provenance light /World/Lamp: LightOrigin { index: 0, geoms: 0..1 } +provenance geometry 0..1: /World/Lamp +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: Some(5.0), camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/World/cam"), cameras: ["/World/cam"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/World/cam"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/quiet_light_usda-c8a2428bb59d472f-1.image b/crates/crust-core/tests/data/import_baselines/quiet_light_usda-c8a2428bb59d472f-1.image new file mode 100644 index 000000000..f4ebc1648 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/quiet_light_usda-c8a2428bb59d472f-1.image @@ -0,0 +1 @@ +64x36 16spp clamp-off 1028d44458cc9325 diff --git a/crates/crust-core/tests/data/import_baselines/quiet_prototype_usda-4ee6edc155c4ce34-1.digest b/crates/crust-core/tests/data/import_baselines/quiet_prototype_usda-4ee6edc155c4ce34-1.digest new file mode 100644 index 000000000..b245b54a7 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/quiet_prototype_usda-4ee6edc155c4ce34-1.digest @@ -0,0 +1,20 @@ +time: Some(5.0) +working space: Linear Rec.709 (sRGB) +camera path: Some("/World/cam") +camera: Camera { origin: Vec3A(0.0, 0.0, 8.0), lower_left_corner: Vec3A(-2.7183647, -1.5290802, -2.0), horizontal: Vec3A(5.4367294, 0.0, 0.0), vertical: Vec3A(0.0, 3.0581603, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: Some("/Render/settings") +settings: RenderSettings { samples_per_pixel: 16, max_depth: 2, width: 64, height: 36, region: PixelRect { x0: 0, y0: 0, x1: 64, y1: 36 }, min_samples_per_pixel: 16, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 5, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 50.0, aperture: [20.955, 15.2908], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 10.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/quiet_prototype.usda"], invisible_overrides: Some(0) } +layer: $DIR/quiet_prototype.usda +lights: 0 +volumes: 0 +world: 1 geometries, PrimitiveBreakdown { triangles: 0, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 1 } top level, PrimitiveBreakdown { triangles: 2, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 1 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:8f5d9187c4202473 camera=2:8f5d9187c4202473 shadow=2:8f5d9187c4202473 indirect=2:8f5d9187c4202473 +provenance material /World/Glow: MaterialOrigin { slots: [0], displaced: false } +provenance geometry 0..1: /World/Copy +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 18250419415378433236, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 0 }), placements: 0, shared: true, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: Some(5.0), camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/World/cam"), cameras: ["/World/cam"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/World/cam"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/quiet_prototype_usda-4ee6edc155c4ce34-1.image b/crates/crust-core/tests/data/import_baselines/quiet_prototype_usda-4ee6edc155c4ce34-1.image new file mode 100644 index 000000000..0e8a4d39e --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/quiet_prototype_usda-4ee6edc155c4ce34-1.image @@ -0,0 +1 @@ +64x36 16spp clamp-off 51c3405b7660a8ac diff --git a/crates/crust-core/tests/data/import_baselines/quiet_volume_usda-5e752c5254e3ed36-1.digest b/crates/crust-core/tests/data/import_baselines/quiet_volume_usda-5e752c5254e3ed36-1.digest new file mode 100644 index 000000000..edc559bfe --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/quiet_volume_usda-5e752c5254e3ed36-1.digest @@ -0,0 +1,17 @@ +time: Some(5.0) +working space: Linear Rec.709 (sRGB) +camera path: Some("/World/cam") +camera: Camera { origin: Vec3A(0.0, 0.0, 8.0), lower_left_corner: Vec3A(-2.7183647, -1.5290802, -2.0), horizontal: Vec3A(5.4367294, 0.0, 0.0), vertical: Vec3A(0.0, 3.0581603, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: Some("/Render/settings") +settings: RenderSettings { samples_per_pixel: 16, max_depth: 2, width: 64, height: 36, region: PixelRect { x0: 0, y0: 0, x1: 64, y1: 36 }, min_samples_per_pixel: 16, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 5, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 50.0, aperture: [20.955, 15.2908], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 10.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/quiet_volume.usda"], invisible_overrides: Some(0) } +layer: $DIR/quiet_volume.usda +lights: 0 +volumes: 1 +volume 0: sigma_s Vec3A(0.1, 0.1, 0.1) sigma_a Vec3A(0.0, 0.0, 0.0) g 0.0 emission Vec3A(0.0, 0.0, 0.0) mask RayMask(4294967295) class 65535 homogeneous true +world: 0 geometries, PrimitiveBreakdown { triangles: 0, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 0, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +provenance spheres: [] +provenance volumes: ["/World/Fog"] +provenance stage: StageFacts { options: UsdImportOptions { frame: Some(5.0), camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/World/cam"), cameras: ["/World/cam"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/World/cam"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/quiet_volume_usda-5e752c5254e3ed36-1.image b/crates/crust-core/tests/data/import_baselines/quiet_volume_usda-5e752c5254e3ed36-1.image new file mode 100644 index 000000000..f4ebc1648 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/quiet_volume_usda-5e752c5254e3ed36-1.image @@ -0,0 +1 @@ +64x36 16spp clamp-off 1028d44458cc9325 diff --git a/crates/crust-core/tests/data/import_baselines/range_far_usda-4ecb448a88a6c818-1.digest b/crates/crust-core/tests/data/import_baselines/range_far_usda-4ecb448a88a6c818-1.digest new file mode 100644 index 000000000..6d24e802e --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/range_far_usda-4ecb448a88a6c818-1.digest @@ -0,0 +1,18 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/World/Cam") +camera: Camera { origin: Vec3A(0.0, 0.0, 5.0), lower_left_corner: Vec3A(-0.27183646, -0.15290801, -5.0), horizontal: Vec3A(0.5436729, 0.0, 0.0), vertical: Vec3A(0.0, 0.30581602, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: Some(Vec4(0.0, 0.0, -1.0, 4.0)), far: Some(Vec4(0.0, 0.0, 1.0, -3.0)), planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: None +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 640, height: 360, region: PixelRect { x0: 0, y0: 0, x1: 640, y1: 360 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 500.0, aperture: [20.955, 15.2908], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 10.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/range_far.usda"], invisible_overrides: Some(0) } +layer: $DIR/range_far.usda +lights: 0 +volumes: 0 +world: 1 geometries, PrimitiveBreakdown { triangles: 0, spheres: 1, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 0, spheres: 1, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:d5fa2ac5108a1585 camera=1:d5fa2ac5108a1585 shadow=1:d5fa2ac5108a1585 indirect=1:d5fa2ac5108a1585 +provenance geometry 0..1: /World/Ball +provenance spheres: [0] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/World/Cam"), cameras: ["/World/Cam"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/World/Cam"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/range_far_usda-4ecb448a88a6c818-1.image b/crates/crust-core/tests/data/import_baselines/range_far_usda-4ecb448a88a6c818-1.image new file mode 100644 index 000000000..c734c5b1d --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/range_far_usda-4ecb448a88a6c818-1.image @@ -0,0 +1 @@ +640x360 16spp clamp-off a04a09c0d4b5e325 diff --git a/crates/crust-core/tests/data/import_baselines/range_usda-bc6d3542e7333f02-1.digest b/crates/crust-core/tests/data/import_baselines/range_usda-bc6d3542e7333f02-1.digest new file mode 100644 index 000000000..5408b2b51 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/range_usda-bc6d3542e7333f02-1.digest @@ -0,0 +1,18 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/World/Cam") +camera: Camera { origin: Vec3A(0.0, 0.0, 5.0), lower_left_corner: Vec3A(-0.27183646, -0.15290801, -5.0), horizontal: Vec3A(0.5436729, 0.0, 0.0), vertical: Vec3A(0.0, 0.30581602, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: Some(Vec4(0.0, 0.0, -1.0, 1.0)), far: Some(Vec4(0.0, 0.0, 1.0, 995.0)), planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: None +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 640, height: 360, region: PixelRect { x0: 0, y0: 0, x1: 640, y1: 360 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 500.0, aperture: [20.955, 15.2908], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 10.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/range.usda"], invisible_overrides: Some(0) } +layer: $DIR/range.usda +lights: 0 +volumes: 0 +world: 1 geometries, PrimitiveBreakdown { triangles: 0, spheres: 1, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 0, spheres: 1, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:d5fa2ac5108a1585 camera=1:d5fa2ac5108a1585 shadow=1:d5fa2ac5108a1585 indirect=1:d5fa2ac5108a1585 +provenance geometry 0..1: /World/Ball +provenance spheres: [0] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/World/Cam"), cameras: ["/World/Cam"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/World/Cam"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/range_usda-bc6d3542e7333f02-1.image b/crates/crust-core/tests/data/import_baselines/range_usda-bc6d3542e7333f02-1.image new file mode 100644 index 000000000..c734c5b1d --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/range_usda-bc6d3542e7333f02-1.image @@ -0,0 +1 @@ +640x360 16spp clamp-off a04a09c0d4b5e325 diff --git a/crates/crust-core/tests/data/import_baselines/raw_dome_usda-e8a6497f6f3c05ee-1.digest b/crates/crust-core/tests/data/import_baselines/raw_dome_usda-e8a6497f6f3c05ee-1.digest new file mode 100644 index 000000000..059367e4b --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/raw_dome_usda-e8a6497f6f3c05ee-1.digest @@ -0,0 +1,19 @@ +time: None +working space: ACEScg +camera path: None +camera: Camera { origin: Vec3A(15.0, 3.0, 3.0), lower_left_corner: Vec3A(4.8863316, -0.044797063, 4.174048), horizontal: Vec3A(1.2295314, 0.0, -6.147657), vertical: Vec3A(-0.44830504, 3.4967792, -0.08966101), u: Vec3A(0.19611613, 0.0, -0.9805807), v: Vec3A(-0.1271232, 0.991561, -0.02542464), lens_radius: 0.05, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: Some("/Render/settings") +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 640, height: 360, region: PixelRect { x0: 0, y0: 0, x1: 640, y1: 360 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: None, depth_of_field: true, motion_blur: false, layer_stack: ["$DIR/raw_dome.usda"], invisible_overrides: Some(0) } +layer: $DIR/raw_dome.usda +warning: Warning { code: CameraMissing, kind: Skipped, count: 1, prims: [], message: "USD stage has no UsdGeomCamera — falling back to world::get_settings camera" } +lights: 1 +light 0: dome name Some("/W/Sky") lpe None pmf 1.0 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 0 geometries, PrimitiveBreakdown { triangles: 0, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 0, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +provenance light /W/Sky: LightOrigin { index: 0, geoms: 0..0 } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: None, cameras: [], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: None, offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("ACEScg") diff --git a/crates/crust-core/tests/data/import_baselines/raw_dome_usda-e8a6497f6f3c05ee-1.image b/crates/crust-core/tests/data/import_baselines/raw_dome_usda-e8a6497f6f3c05ee-1.image new file mode 100644 index 000000000..147ccf9ee --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/raw_dome_usda-e8a6497f6f3c05ee-1.image @@ -0,0 +1 @@ +640x360 16spp clamp-off f1aa11d930bbc325 diff --git a/crates/crust-core/tests/data/import_baselines/raw_light_usda-ea76f3df9a669477-1.digest b/crates/crust-core/tests/data/import_baselines/raw_light_usda-ea76f3df9a669477-1.digest new file mode 100644 index 000000000..84389481f --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/raw_light_usda-ea76f3df9a669477-1.digest @@ -0,0 +1,20 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/World/other") +camera: Camera { origin: Vec3A(0.0, 0.0, 0.0), lower_left_corner: Vec3A(-2.7183647, -1.5290802, -10.0), horizontal: Vec3A(5.4367294, 0.0, 0.0), vertical: Vec3A(0.0, 3.0581603, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: Some("/Render/settings") +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 640, height: 360, region: PixelRect { x0: 0, y0: 0, x1: 640, y1: 360 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [AovProduct { prim_path: "/Render/p", name: "p.exr", vars: [AovVar { prim_path: "/Render/rawLight", name: "rawLight", channel_prefix: None, source: Lpe, components: 3, precision: Float, accumulation: Filtered, clear: 0.0, expression: Some("C[LO]"), raw: true, variance: false }, AovVar { prim_path: "/Render/RawGI", name: "RawGI", channel_prefix: None, source: Lpe, components: 3, precision: Float, accumulation: Filtered, clear: 0.0, expression: Some("C.+[LO]"), raw: true, variance: false }, AovVar { prim_path: "/Render/RawTotalLighting", name: "RawTotalLighting", channel_prefix: None, source: Lpe, components: 4, precision: Float, accumulation: Filtered, clear: 0.0, expression: Some("C.*[LO]"), raw: true, variance: false }, AovVar { prim_path: "/Render/filter", name: "filter", channel_prefix: None, source: DiffuseFilter, components: 3, precision: Float, accumulation: Filtered, clear: 0.0, expression: None, raw: false, variance: false }, AovVar { prim_path: "/Render/vray_filter", name: "vray_filter", channel_prefix: None, source: DiffuseFilter, components: 3, precision: Float, accumulation: Filtered, clear: 0.0, expression: None, raw: false, variance: false }, AovVar { prim_path: "/Render/albedo", name: "albedo", channel_prefix: None, source: Albedo, components: 3, precision: Float, accumulation: Filtered, clear: 0.0, expression: None, raw: false, variance: false }, AovVar { prim_path: "/Render/key_raw", name: "key_raw", channel_prefix: None, source: Lpe, components: 3, precision: Float, accumulation: Filtered, clear: 0.0, expression: Some("C.*"), raw: true, variance: false }, AovVar { prim_path: "/Render/raw_on_depth", name: "raw_on_depth", channel_prefix: None, source: Depth, components: 1, precision: Float, accumulation: Closest, clear: inf, expression: None, raw: false, variance: false }], attributes: [] }], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 50.0, aperture: [20.955, 15.2908], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 10.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/raw_light.usda"], invisible_overrides: Some(0) } +layer: $DIR/raw_light.usda +warning: Warning { code: AovInvalidRaw, kind: Skipped, count: 2, prims: ["/Render/not_diffuse", "/Render/bare_label"], message: "/Render/not_diffuse: crust:aov:raw needs an expression whose every path starts with a diffuse reflection (C…); \"C.*[LO]\" does not, so no channel written" } +warning: Warning { code: AovRawIgnored, kind: Approximated, count: 1, prims: ["/Render/raw_on_depth"], message: "/Render/raw_on_depth: crust:aov:raw applies to light path expressions (sourceType \"lpe\"); ignored on \"depth\"" } +lights: 0 +volumes: 0 +world: 1 geometries, PrimitiveBreakdown { triangles: 0, spheres: 1, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 0, spheres: 1, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:fb1e7d48790aec95 camera=1:fb1e7d48790aec95 shadow=1:fb1e7d48790aec95 indirect=1:fb1e7d48790aec95 +provenance geometry 0..1: /World/ball +provenance spheres: [0] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/World/other"), cameras: ["/World/other", "/World/cam"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/World/other"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/raw_light_usda-ea76f3df9a669477-1.image b/crates/crust-core/tests/data/import_baselines/raw_light_usda-ea76f3df9a669477-1.image new file mode 100644 index 000000000..c734c5b1d --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/raw_light_usda-ea76f3df9a669477-1.image @@ -0,0 +1 @@ +640x360 16spp clamp-off a04a09c0d4b5e325 diff --git a/crates/crust-core/tests/data/import_baselines/rect_light_far_usda-89364d5e280ec883-1.digest b/crates/crust-core/tests/data/import_baselines/rect_light_far_usda-89364d5e280ec883-1.digest new file mode 100644 index 000000000..66f0f90ec --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/rect_light_far_usda-89364d5e280ec883-1.digest @@ -0,0 +1,25 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: None +camera: Camera { origin: Vec3A(15.0, 3.0, 3.0), lower_left_corner: Vec3A(4.8863316, -0.044797063, 4.174048), horizontal: Vec3A(1.2295314, 0.0, -6.147657), vertical: Vec3A(-0.44830504, 3.4967792, -0.08966101), u: Vec3A(0.19611613, 0.0, -0.9805807), v: Vec3A(-0.1271232, 0.991561, -0.02542464), lens_radius: 0.05, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: None +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 640, height: 360, region: PixelRect { x0: 0, y0: 0, x1: 640, y1: 360 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: None, depth_of_field: true, motion_blur: false, layer_stack: ["$DIR/rect_light_far.usda"], invisible_overrides: Some(0) } +layer: $DIR/rect_light_far.usda +warning: Warning { code: CameraMissing, kind: Skipped, count: 1, prims: [], message: "USD stage has no UsdGeomCamera — falling back to world::get_settings camera" } +lights: 1 +light 0: area name Some("/World/Sun") lpe None pmf 1.0 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 2 geometries, PrimitiveBreakdown { triangles: 4, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 4, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:fce6de5b675a55c5 camera=2:fce6de5b675a55c5 shadow=2:fce6de5b675a55c5 indirect=2:fce6de5b675a55c5 +geom 1: material #1 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:98baf1312be377e5 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=2:98baf1312be377e5 +provenance light /World/Sun: LightOrigin { index: 0, geoms: 1..2 } +provenance geometry 0..1: /World/Ground +provenance geometry 1..2: /World/Sun +provenance mesh: MeshOrigin { geom_id: 0, slot: 0, baked: true, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 14903623499644419787, n_points: 4, n_indices: 4, n_uvs: None, smooth: true, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: None, cameras: [], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: None, offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/rect_light_far_usda-89364d5e280ec883-1.image b/crates/crust-core/tests/data/import_baselines/rect_light_far_usda-89364d5e280ec883-1.image new file mode 100644 index 000000000..b191c3857 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/rect_light_far_usda-89364d5e280ec883-1.image @@ -0,0 +1 @@ +640x360 16spp clamp-off 462318a5c0324fb1 diff --git a/crates/crust-core/tests/data/import_baselines/rect_light_near_usda-e8eb7549c9231ec8-1.digest b/crates/crust-core/tests/data/import_baselines/rect_light_near_usda-e8eb7549c9231ec8-1.digest new file mode 100644 index 000000000..dc664b9e1 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/rect_light_near_usda-e8eb7549c9231ec8-1.digest @@ -0,0 +1,25 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: None +camera: Camera { origin: Vec3A(15.0, 3.0, 3.0), lower_left_corner: Vec3A(4.8863316, -0.044797063, 4.174048), horizontal: Vec3A(1.2295314, 0.0, -6.147657), vertical: Vec3A(-0.44830504, 3.4967792, -0.08966101), u: Vec3A(0.19611613, 0.0, -0.9805807), v: Vec3A(-0.1271232, 0.991561, -0.02542464), lens_radius: 0.05, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: None +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 640, height: 360, region: PixelRect { x0: 0, y0: 0, x1: 640, y1: 360 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: None, depth_of_field: true, motion_blur: false, layer_stack: ["$DIR/rect_light_near.usda"], invisible_overrides: Some(0) } +layer: $DIR/rect_light_near.usda +warning: Warning { code: CameraMissing, kind: Skipped, count: 1, prims: [], message: "USD stage has no UsdGeomCamera — falling back to world::get_settings camera" } +lights: 1 +light 0: area name Some("/World/Sun") lpe None pmf 1.0 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 2 geometries, PrimitiveBreakdown { triangles: 4, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 4, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:fce6de5b675a55c5 camera=2:fce6de5b675a55c5 shadow=2:fce6de5b675a55c5 indirect=2:fce6de5b675a55c5 +geom 1: material #1 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:b86ce6863be508d9 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=2:b86ce6863be508d9 +provenance light /World/Sun: LightOrigin { index: 0, geoms: 1..2 } +provenance geometry 0..1: /World/Ground +provenance geometry 1..2: /World/Sun +provenance mesh: MeshOrigin { geom_id: 0, slot: 0, baked: true, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 14903623499644419787, n_points: 4, n_indices: 4, n_uvs: None, smooth: true, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: None, cameras: [], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: None, offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/rect_light_near_usda-e8eb7549c9231ec8-1.image b/crates/crust-core/tests/data/import_baselines/rect_light_near_usda-e8eb7549c9231ec8-1.image new file mode 100644 index 000000000..de354dd48 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/rect_light_near_usda-e8eb7549c9231ec8-1.image @@ -0,0 +1 @@ +640x360 16spp clamp-off c8701a68af8ae6a5 diff --git a/crates/crust-core/tests/data/import_baselines/rect_light_usda-eadf17e73fc59819-1.digest b/crates/crust-core/tests/data/import_baselines/rect_light_usda-eadf17e73fc59819-1.digest new file mode 100644 index 000000000..9fb7994ab --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/rect_light_usda-eadf17e73fc59819-1.digest @@ -0,0 +1,21 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: None +camera: Camera { origin: Vec3A(15.0, 3.0, 3.0), lower_left_corner: Vec3A(4.8863316, -0.044797063, 4.174048), horizontal: Vec3A(1.2295314, 0.0, -6.147657), vertical: Vec3A(-0.44830504, 3.4967792, -0.08966101), u: Vec3A(0.19611613, 0.0, -0.9805807), v: Vec3A(-0.1271232, 0.991561, -0.02542464), lens_radius: 0.05, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: None +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 640, height: 360, region: PixelRect { x0: 0, y0: 0, x1: 640, y1: 360 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: None, depth_of_field: true, motion_blur: false, layer_stack: ["$DIR/rect_light.usda"], invisible_overrides: Some(0) } +layer: $DIR/rect_light.usda +warning: Warning { code: CameraMissing, kind: Skipped, count: 1, prims: [], message: "USD stage has no UsdGeomCamera — falling back to world::get_settings camera" } +lights: 1 +light 0: area name Some("/World/R") lpe None pmf 1.0 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 1 geometries, PrimitiveBreakdown { triangles: 2, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 2, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +geom 0: material #0 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:0a1d3e3cce0c1565 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=2:0a1d3e3cce0c1565 +provenance light /World/R: LightOrigin { index: 0, geoms: 0..1 } +provenance geometry 0..1: /World/R +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: None, cameras: [], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: None, offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/rect_light_usda-eadf17e73fc59819-1.image b/crates/crust-core/tests/data/import_baselines/rect_light_usda-eadf17e73fc59819-1.image new file mode 100644 index 000000000..c734c5b1d --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/rect_light_usda-eadf17e73fc59819-1.image @@ -0,0 +1 @@ +640x360 16spp clamp-off a04a09c0d4b5e325 diff --git a/crates/crust-core/tests/data/import_baselines/rect_texture_usda-fa043cce9d6338f4-1.digest b/crates/crust-core/tests/data/import_baselines/rect_texture_usda-fa043cce9d6338f4-1.digest new file mode 100644 index 000000000..bc5519588 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/rect_texture_usda-fa043cce9d6338f4-1.digest @@ -0,0 +1,21 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: None +camera: Camera { origin: Vec3A(15.0, 3.0, 3.0), lower_left_corner: Vec3A(4.8863316, -0.044797063, 4.174048), horizontal: Vec3A(1.2295314, 0.0, -6.147657), vertical: Vec3A(-0.44830504, 3.4967792, -0.08966101), u: Vec3A(0.19611613, 0.0, -0.9805807), v: Vec3A(-0.1271232, 0.991561, -0.02542464), lens_radius: 0.05, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: None +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 640, height: 360, region: PixelRect { x0: 0, y0: 0, x1: 640, y1: 360 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: None, depth_of_field: true, motion_blur: false, layer_stack: ["$DIR/rect_texture.usda"], invisible_overrides: Some(0) } +layer: $DIR/rect_texture.usda +warning: Warning { code: CameraMissing, kind: Skipped, count: 1, prims: [], message: "USD stage has no UsdGeomCamera — falling back to world::get_settings camera" } +lights: 1 +light 0: area name Some("/Card") lpe None pmf 1.0 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 1 geometries, PrimitiveBreakdown { triangles: 2, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 2, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +geom 0: material #0 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:7b1777b3ac1753e5 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=2:7b1777b3ac1753e5 +provenance light /Card: LightOrigin { index: 0, geoms: 0..1 } +provenance geometry 0..1: /Card +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: None, cameras: [], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: None, offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/rect_texture_usda-fa043cce9d6338f4-1.image b/crates/crust-core/tests/data/import_baselines/rect_texture_usda-fa043cce9d6338f4-1.image new file mode 100644 index 000000000..c734c5b1d --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/rect_texture_usda-fa043cce9d6338f4-1.image @@ -0,0 +1 @@ +640x360 16spp clamp-off a04a09c0d4b5e325 diff --git a/crates/crust-core/tests/data/import_baselines/rectlight_usda-3885e18a97e5845d-1.digest b/crates/crust-core/tests/data/import_baselines/rectlight_usda-3885e18a97e5845d-1.digest new file mode 100644 index 000000000..501f2763b --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/rectlight_usda-3885e18a97e5845d-1.digest @@ -0,0 +1,26 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/World/Cam") +camera: Camera { origin: Vec3A(0.0, 1.2, 6.0), lower_left_corner: Vec3A(-4.365625, -3.1656249, -4.0), horizontal: Vec3A(8.73125, 0.0, 0.0), vertical: Vec3A(0.0, 8.73125, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: Some("/Render/settings") +settings: RenderSettings { samples_per_pixel: 8, max_depth: 4, width: 64, height: 64, region: PixelRect { x0: 0, y0: 0, x1: 64, y1: 64 }, min_samples_per_pixel: 4, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 24.0, aperture: [20.955, 15.2908], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 10.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/rectlight.usda"], invisible_overrides: Some(0) } +layer: $DIR/rectlight.usda +lights: 1 +light 0: area name Some("/World/KeyLight") lpe None pmf 1.0 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 3 geometries, PrimitiveBreakdown { triangles: 4, spheres: 1, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 4, spheres: 1, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +geom 0: material #0 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:e8a5ea9ee1d32838 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=2:e8a5ea9ee1d32838 +geom 1: material #1 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:be0b97004c4d3e85 camera=2:be0b97004c4d3e85 shadow=2:be0b97004c4d3e85 indirect=2:be0b97004c4d3e85 +geom 2: material #1 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:ee76fd7ed45c4a85 camera=1:ee76fd7ed45c4a85 shadow=1:ee76fd7ed45c4a85 indirect=1:ee76fd7ed45c4a85 +provenance light /World/KeyLight: LightOrigin { index: 0, geoms: 0..1 } +provenance geometry 0..1: /World/KeyLight +provenance geometry 1..2: /World/Floor +provenance geometry 2..3: /World/Ball +provenance mesh: MeshOrigin { geom_id: 1, slot: 0, baked: true, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 8416296582947184296, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [2] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/World/Cam"), cameras: ["/World/Cam"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/World/Cam"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/rectlight_usda-3885e18a97e5845d-1.image b/crates/crust-core/tests/data/import_baselines/rectlight_usda-3885e18a97e5845d-1.image new file mode 100644 index 000000000..e4cc91b47 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/rectlight_usda-3885e18a97e5845d-1.image @@ -0,0 +1 @@ +64x64 16spp clamp-off 94a9e16418a574e5 diff --git a/crates/crust-core/tests/data/import_baselines/rectlight_usda-3885e18a97e5845d-2.digest b/crates/crust-core/tests/data/import_baselines/rectlight_usda-3885e18a97e5845d-2.digest new file mode 100644 index 000000000..501f2763b --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/rectlight_usda-3885e18a97e5845d-2.digest @@ -0,0 +1,26 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/World/Cam") +camera: Camera { origin: Vec3A(0.0, 1.2, 6.0), lower_left_corner: Vec3A(-4.365625, -3.1656249, -4.0), horizontal: Vec3A(8.73125, 0.0, 0.0), vertical: Vec3A(0.0, 8.73125, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: Some("/Render/settings") +settings: RenderSettings { samples_per_pixel: 8, max_depth: 4, width: 64, height: 64, region: PixelRect { x0: 0, y0: 0, x1: 64, y1: 64 }, min_samples_per_pixel: 4, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 24.0, aperture: [20.955, 15.2908], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 10.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/rectlight.usda"], invisible_overrides: Some(0) } +layer: $DIR/rectlight.usda +lights: 1 +light 0: area name Some("/World/KeyLight") lpe None pmf 1.0 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 3 geometries, PrimitiveBreakdown { triangles: 4, spheres: 1, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 4, spheres: 1, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +geom 0: material #0 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:e8a5ea9ee1d32838 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=2:e8a5ea9ee1d32838 +geom 1: material #1 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:be0b97004c4d3e85 camera=2:be0b97004c4d3e85 shadow=2:be0b97004c4d3e85 indirect=2:be0b97004c4d3e85 +geom 2: material #1 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:ee76fd7ed45c4a85 camera=1:ee76fd7ed45c4a85 shadow=1:ee76fd7ed45c4a85 indirect=1:ee76fd7ed45c4a85 +provenance light /World/KeyLight: LightOrigin { index: 0, geoms: 0..1 } +provenance geometry 0..1: /World/KeyLight +provenance geometry 1..2: /World/Floor +provenance geometry 2..3: /World/Ball +provenance mesh: MeshOrigin { geom_id: 1, slot: 0, baked: true, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 8416296582947184296, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [2] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/World/Cam"), cameras: ["/World/Cam"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/World/Cam"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/rectlight_usda-3885e18a97e5845d-2.image b/crates/crust-core/tests/data/import_baselines/rectlight_usda-3885e18a97e5845d-2.image new file mode 100644 index 000000000..e4cc91b47 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/rectlight_usda-3885e18a97e5845d-2.image @@ -0,0 +1 @@ +64x64 16spp clamp-off 94a9e16418a574e5 diff --git a/crates/crust-core/tests/data/import_baselines/rectlight_usda-5482f82d359615b0-1.digest b/crates/crust-core/tests/data/import_baselines/rectlight_usda-5482f82d359615b0-1.digest new file mode 100644 index 000000000..74b7b6537 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/rectlight_usda-5482f82d359615b0-1.digest @@ -0,0 +1,26 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/World/Cam") +camera: Camera { origin: Vec3A(0.0, 1.2, 6.0), lower_left_corner: Vec3A(-4.365625, -3.1656249, -4.0), horizontal: Vec3A(8.73125, 0.0, 0.0), vertical: Vec3A(0.0, 8.73125, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: Some("/Render/settings") +settings: RenderSettings { samples_per_pixel: 8, max_depth: 4, width: 64, height: 64, region: PixelRect { x0: 0, y0: 0, x1: 64, y1: 64 }, min_samples_per_pixel: 4, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 24.0, aperture: [20.955, 15.2908], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 10.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/rectlight.usda"], invisible_overrides: Some(0) } +layer: $DIR/rectlight.usda +lights: 1 +light 0: area name Some("/World/KeyLight") lpe None pmf 1.0 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 3 geometries, PrimitiveBreakdown { triangles: 4, spheres: 1, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 4, spheres: 1, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +geom 0: material #0 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:e8a5ea9ee1d32838 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=2:e8a5ea9ee1d32838 +geom 1: material #1 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:be0b97004c4d3e85 camera=2:be0b97004c4d3e85 shadow=2:be0b97004c4d3e85 indirect=2:be0b97004c4d3e85 +geom 2: material #1 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:ee76fd7ed45c4a85 camera=1:ee76fd7ed45c4a85 shadow=1:ee76fd7ed45c4a85 indirect=1:ee76fd7ed45c4a85 +provenance light /World/KeyLight: LightOrigin { index: 0, geoms: 0..1 } +provenance geometry 0..1: /World/KeyLight +provenance geometry 1..2: /World/Floor +provenance geometry 2..3: /World/Ball +provenance mesh: MeshOrigin { geom_id: 1, slot: 0, baked: true, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 8416296582947184296, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [2] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: true, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/World/Cam"), cameras: ["/World/Cam"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/World/Cam"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/rectlight_usda-5482f82d359615b0-1.image b/crates/crust-core/tests/data/import_baselines/rectlight_usda-5482f82d359615b0-1.image new file mode 100644 index 000000000..e4cc91b47 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/rectlight_usda-5482f82d359615b0-1.image @@ -0,0 +1 @@ +64x64 16spp clamp-off 94a9e16418a574e5 diff --git a/crates/crust-core/tests/data/import_baselines/rectlight_usda-e2a69198ab36729f-1.digest b/crates/crust-core/tests/data/import_baselines/rectlight_usda-e2a69198ab36729f-1.digest new file mode 100644 index 000000000..501f2763b --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/rectlight_usda-e2a69198ab36729f-1.digest @@ -0,0 +1,26 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/World/Cam") +camera: Camera { origin: Vec3A(0.0, 1.2, 6.0), lower_left_corner: Vec3A(-4.365625, -3.1656249, -4.0), horizontal: Vec3A(8.73125, 0.0, 0.0), vertical: Vec3A(0.0, 8.73125, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: Some("/Render/settings") +settings: RenderSettings { samples_per_pixel: 8, max_depth: 4, width: 64, height: 64, region: PixelRect { x0: 0, y0: 0, x1: 64, y1: 64 }, min_samples_per_pixel: 4, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 24.0, aperture: [20.955, 15.2908], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 10.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/rectlight.usda"], invisible_overrides: Some(0) } +layer: $DIR/rectlight.usda +lights: 1 +light 0: area name Some("/World/KeyLight") lpe None pmf 1.0 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 3 geometries, PrimitiveBreakdown { triangles: 4, spheres: 1, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 4, spheres: 1, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +geom 0: material #0 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:e8a5ea9ee1d32838 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=2:e8a5ea9ee1d32838 +geom 1: material #1 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:be0b97004c4d3e85 camera=2:be0b97004c4d3e85 shadow=2:be0b97004c4d3e85 indirect=2:be0b97004c4d3e85 +geom 2: material #1 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:ee76fd7ed45c4a85 camera=1:ee76fd7ed45c4a85 shadow=1:ee76fd7ed45c4a85 indirect=1:ee76fd7ed45c4a85 +provenance light /World/KeyLight: LightOrigin { index: 0, geoms: 0..1 } +provenance geometry 0..1: /World/KeyLight +provenance geometry 1..2: /World/Floor +provenance geometry 2..3: /World/Ball +provenance mesh: MeshOrigin { geom_id: 1, slot: 0, baked: true, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 8416296582947184296, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [2] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/World/Cam"), cameras: ["/World/Cam"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/World/Cam"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/rectlight_usda-e2a69198ab36729f-1.image b/crates/crust-core/tests/data/import_baselines/rectlight_usda-e2a69198ab36729f-1.image new file mode 100644 index 000000000..e4cc91b47 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/rectlight_usda-e2a69198ab36729f-1.image @@ -0,0 +1 @@ +64x64 16spp clamp-off 94a9e16418a574e5 diff --git a/crates/crust-core/tests/data/import_baselines/refusals_usda-e2a11260371695e9-1.digest b/crates/crust-core/tests/data/import_baselines/refusals_usda-e2a11260371695e9-1.digest new file mode 100644 index 000000000..35c8790a2 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/refusals_usda-e2a11260371695e9-1.digest @@ -0,0 +1,25 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/World/other") +camera: Camera { origin: Vec3A(0.0, 0.0, 0.0), lower_left_corner: Vec3A(-2.7183647, -1.5290802, -10.0), horizontal: Vec3A(5.4367294, 0.0, 0.0), vertical: Vec3A(0.0, 3.0581603, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: Some("/Render/settings") +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 640, height: 360, region: PixelRect { x0: 0, y0: 0, x1: 640, y1: 360 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [AovProduct { prim_path: "/Render/flat", name: "flat.exr", vars: [AovVar { prim_path: "/Render/depth", name: "depth", channel_prefix: None, source: Depth, components: 1, precision: Float, accumulation: Closest, clear: inf, expression: None, raw: false, variance: false }], attributes: [] }], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 50.0, aperture: [20.955, 15.2908], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 10.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/refusals.usda"], invisible_overrides: Some(0) } +layer: $DIR/refusals.usda +warning: Warning { code: ProductUnsupportedType, kind: Skipped, count: 1, prims: ["/Render/deep"], message: "/Render/deep: productType \"deepRaster\" is not supported (only \"raster\"); no file is written for it" } +warning: Warning { code: AovUnsupportedSource, kind: Skipped, count: 2, prims: ["/Render/intrinsic", "/Render/later"], message: "/Render/intrinsic: sourceType \"intrinsic\" is unimplemented in UsdRender itself; no channel written" } +warning: Warning { code: AovUnknownSource, kind: Skipped, count: 1, prims: ["/Render/unknown"], message: "/Render/unknown: unknown raw source \"diffuse_direct\"; no channel written (crust's AOV names are listed in the user documentation, usd/aovs)" } +warning: Warning { code: LpeInvalid, kind: Skipped, count: 1, prims: ["/Render/lpe"], message: "/Render/lpe: light path expression \"C?L\": column 6: '?' is not part of the OSL LPE grammar; use {0,1}; no channel written" } +warning: Warning { code: AovTypeMismatch, kind: Skipped, count: 2, prims: ["/Render/int_color", "/Render/float_normal"], message: "/Render/int_color: color cannot be written as \"int\"; no channel written" } +warning: Warning { code: AovNotARenderVar, kind: Skipped, count: 1, prims: ["/Render/notavar"], message: "orderedVars targets /Render/notavar, which is not a RenderVar; skipped" } +warning: Warning { code: ProductNotARenderProduct, kind: Skipped, count: 1, prims: ["/Render/notaproduct"], message: "/Render/settings.products targets /Render/notaproduct, which is not a RenderProduct; skipped" } +lights: 0 +volumes: 0 +world: 1 geometries, PrimitiveBreakdown { triangles: 0, spheres: 1, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 0, spheres: 1, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:fb1e7d48790aec95 camera=1:fb1e7d48790aec95 shadow=1:fb1e7d48790aec95 indirect=1:fb1e7d48790aec95 +provenance geometry 0..1: /World/ball +provenance spheres: [0] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/World/other"), cameras: ["/World/other", "/World/cam"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/World/other"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/refusals_usda-e2a11260371695e9-1.image b/crates/crust-core/tests/data/import_baselines/refusals_usda-e2a11260371695e9-1.image new file mode 100644 index 000000000..c734c5b1d --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/refusals_usda-e2a11260371695e9-1.image @@ -0,0 +1 @@ +640x360 16spp clamp-off a04a09c0d4b5e325 diff --git a/crates/crust-core/tests/data/import_baselines/refused_usda-0be9300cea6f944b-1.digest b/crates/crust-core/tests/data/import_baselines/refused_usda-0be9300cea6f944b-1.digest new file mode 100644 index 000000000..a3939dcdc --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/refused_usda-0be9300cea6f944b-1.digest @@ -0,0 +1,17 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/cam") +camera: Camera { origin: Vec3A(0.0, 0.0, 0.0), lower_left_corner: Vec3A(-2.7183647, -1.5290802, -10.0), horizontal: Vec3A(5.4367294, 0.0, 0.0), vertical: Vec3A(0.0, 3.0581603, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: None +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 640, height: 360, region: PixelRect { x0: 0, y0: 0, x1: 640, y1: 360 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 50.0, aperture: [20.955, 15.2908], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 10.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/refused.usda"], invisible_overrides: Some(0) } +layer: $DIR/refused.usda +warning: Warning { code: CameraInvalidExposure, kind: Refused, count: 1, prims: ["/cam"], message: "/cam: the exposure attributes give a scale of inf — the image is not scaled" } +lights: 0 +volumes: 0 +world: 0 geometries, PrimitiveBreakdown { triangles: 0, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 0, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/cam"), cameras: ["/cam"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/cam"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/refused_usda-0be9300cea6f944b-1.image b/crates/crust-core/tests/data/import_baselines/refused_usda-0be9300cea6f944b-1.image new file mode 100644 index 000000000..c734c5b1d --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/refused_usda-0be9300cea6f944b-1.image @@ -0,0 +1 @@ +640x360 16spp clamp-off a04a09c0d4b5e325 diff --git a/crates/crust-core/tests/data/import_baselines/render_passes_usda-109738cee49991a5-1.digest b/crates/crust-core/tests/data/import_baselines/render_passes_usda-109738cee49991a5-1.digest new file mode 100644 index 000000000..7d73e4ea0 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/render_passes_usda-109738cee49991a5-1.digest @@ -0,0 +1,35 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/World/Cam") +camera: Camera { origin: Vec3A(0.0, 1.6, 7.0), lower_left_corner: Vec3A(-4.530607, -2.3153963, -2.5480032), horizontal: Vec3A(9.061214, -0.0, 0.0), vertical: Vec3A(0.0, 5.0473304, -0.7093561), u: Vec3A(1.0, -0.0, 0.0), v: Vec3A(0.0, 0.9902681, -0.13917312), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: Some("/Render/settings") +settings: RenderSettings { samples_per_pixel: 64, max_depth: 4, width: 160, height: 90, region: PixelRect { x0: 0, y0: 0, x1: 160, y1: 90 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [AovProduct { prim_path: "/Render/Products/props", name: "props.exr", vars: [AovVar { prim_path: "/Render/Vars/color", name: "color", channel_prefix: None, source: Color, components: 4, precision: Float, accumulation: Filtered, clear: 0.0, expression: None, raw: false, variance: false }], attributes: [] }], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 30.0, aperture: [20.955, 15.2908], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 10.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/render_passes.usda"], invisible_overrides: Some(0) } +layer: $DIR/render_passes.usda +lights: 2 +light 0: dome name Some("/World/Sky") lpe None pmf 0.5 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 1: area name Some("/World/Key") lpe None pmf 0.5 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 5 geometries, PrimitiveBreakdown { triangles: 14, spheres: 3, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 14, spheres: 3, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +geom 0: material #0 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:3d65c4a843c183d8 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=1:3d65c4a843c183d8 +geom 1: material #1 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:0fb1fc996bb64f06 camera=1:0fb1fc996bb64f06 shadow=1:0fb1fc996bb64f06 indirect=1:0fb1fc996bb64f06 +geom 2: material #2 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=12:1b27d3862a39596d camera=12:1b27d3862a39596d shadow=12:1b27d3862a39596d indirect=12:1b27d3862a39596d +geom 3: material #2 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:9366fea1438aeb8c camera=1:9366fea1438aeb8c shadow=1:9366fea1438aeb8c indirect=1:9366fea1438aeb8c +geom 4: material #2 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:be0b97004c4d3e85 camera=2:be0b97004c4d3e85 shadow=2:be0b97004c4d3e85 indirect=2:be0b97004c4d3e85 +provenance material /World/Looks/Mirror: MaterialOrigin { slots: [1], displaced: false } +provenance light /World/Key: LightOrigin { index: 1, geoms: 0..1 } +provenance light /World/Sky: LightOrigin { index: 0, geoms: 0..0 } +provenance geometry 0..1: /World/Key +provenance geometry 1..2: /World/Props/MirrorBall +provenance geometry 2..3: /World/Props/Crate +provenance geometry 3..4: /World/Chars/Hero +provenance geometry 4..5: /World/Set/Floor +provenance mesh: MeshOrigin { geom_id: 2, slot: 0, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 4, slot: 1, baked: true, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 11523204089106361411, n_points: 8, n_indices: 24, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 1: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 8416296582947184296, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [1, 3] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/World/Cam"), cameras: ["/World/Cam"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/World/Cam"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/render_passes_usda-109738cee49991a5-1.image b/crates/crust-core/tests/data/import_baselines/render_passes_usda-109738cee49991a5-1.image new file mode 100644 index 000000000..a78e01ae7 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/render_passes_usda-109738cee49991a5-1.image @@ -0,0 +1 @@ +160x90 16spp clamp-off c795054d39051d29 diff --git a/crates/crust-core/tests/data/import_baselines/render_passes_usda-109738cee49991a5-2.digest b/crates/crust-core/tests/data/import_baselines/render_passes_usda-109738cee49991a5-2.digest new file mode 100644 index 000000000..7d73e4ea0 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/render_passes_usda-109738cee49991a5-2.digest @@ -0,0 +1,35 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/World/Cam") +camera: Camera { origin: Vec3A(0.0, 1.6, 7.0), lower_left_corner: Vec3A(-4.530607, -2.3153963, -2.5480032), horizontal: Vec3A(9.061214, -0.0, 0.0), vertical: Vec3A(0.0, 5.0473304, -0.7093561), u: Vec3A(1.0, -0.0, 0.0), v: Vec3A(0.0, 0.9902681, -0.13917312), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: Some("/Render/settings") +settings: RenderSettings { samples_per_pixel: 64, max_depth: 4, width: 160, height: 90, region: PixelRect { x0: 0, y0: 0, x1: 160, y1: 90 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [AovProduct { prim_path: "/Render/Products/props", name: "props.exr", vars: [AovVar { prim_path: "/Render/Vars/color", name: "color", channel_prefix: None, source: Color, components: 4, precision: Float, accumulation: Filtered, clear: 0.0, expression: None, raw: false, variance: false }], attributes: [] }], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 30.0, aperture: [20.955, 15.2908], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 10.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/render_passes.usda"], invisible_overrides: Some(0) } +layer: $DIR/render_passes.usda +lights: 2 +light 0: dome name Some("/World/Sky") lpe None pmf 0.5 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 1: area name Some("/World/Key") lpe None pmf 0.5 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 5 geometries, PrimitiveBreakdown { triangles: 14, spheres: 3, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 14, spheres: 3, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +geom 0: material #0 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:3d65c4a843c183d8 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=1:3d65c4a843c183d8 +geom 1: material #1 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:0fb1fc996bb64f06 camera=1:0fb1fc996bb64f06 shadow=1:0fb1fc996bb64f06 indirect=1:0fb1fc996bb64f06 +geom 2: material #2 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=12:1b27d3862a39596d camera=12:1b27d3862a39596d shadow=12:1b27d3862a39596d indirect=12:1b27d3862a39596d +geom 3: material #2 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:9366fea1438aeb8c camera=1:9366fea1438aeb8c shadow=1:9366fea1438aeb8c indirect=1:9366fea1438aeb8c +geom 4: material #2 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:be0b97004c4d3e85 camera=2:be0b97004c4d3e85 shadow=2:be0b97004c4d3e85 indirect=2:be0b97004c4d3e85 +provenance material /World/Looks/Mirror: MaterialOrigin { slots: [1], displaced: false } +provenance light /World/Key: LightOrigin { index: 1, geoms: 0..1 } +provenance light /World/Sky: LightOrigin { index: 0, geoms: 0..0 } +provenance geometry 0..1: /World/Key +provenance geometry 1..2: /World/Props/MirrorBall +provenance geometry 2..3: /World/Props/Crate +provenance geometry 3..4: /World/Chars/Hero +provenance geometry 4..5: /World/Set/Floor +provenance mesh: MeshOrigin { geom_id: 2, slot: 0, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 4, slot: 1, baked: true, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 11523204089106361411, n_points: 8, n_indices: 24, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 1: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 8416296582947184296, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [1, 3] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/World/Cam"), cameras: ["/World/Cam"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/World/Cam"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/render_passes_usda-109738cee49991a5-2.image b/crates/crust-core/tests/data/import_baselines/render_passes_usda-109738cee49991a5-2.image new file mode 100644 index 000000000..a78e01ae7 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/render_passes_usda-109738cee49991a5-2.image @@ -0,0 +1 @@ +160x90 16spp clamp-off c795054d39051d29 diff --git a/crates/crust-core/tests/data/import_baselines/render_passes_usda-109738cee49991a5-3.digest b/crates/crust-core/tests/data/import_baselines/render_passes_usda-109738cee49991a5-3.digest new file mode 100644 index 000000000..7d73e4ea0 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/render_passes_usda-109738cee49991a5-3.digest @@ -0,0 +1,35 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/World/Cam") +camera: Camera { origin: Vec3A(0.0, 1.6, 7.0), lower_left_corner: Vec3A(-4.530607, -2.3153963, -2.5480032), horizontal: Vec3A(9.061214, -0.0, 0.0), vertical: Vec3A(0.0, 5.0473304, -0.7093561), u: Vec3A(1.0, -0.0, 0.0), v: Vec3A(0.0, 0.9902681, -0.13917312), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: Some("/Render/settings") +settings: RenderSettings { samples_per_pixel: 64, max_depth: 4, width: 160, height: 90, region: PixelRect { x0: 0, y0: 0, x1: 160, y1: 90 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [AovProduct { prim_path: "/Render/Products/props", name: "props.exr", vars: [AovVar { prim_path: "/Render/Vars/color", name: "color", channel_prefix: None, source: Color, components: 4, precision: Float, accumulation: Filtered, clear: 0.0, expression: None, raw: false, variance: false }], attributes: [] }], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 30.0, aperture: [20.955, 15.2908], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 10.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/render_passes.usda"], invisible_overrides: Some(0) } +layer: $DIR/render_passes.usda +lights: 2 +light 0: dome name Some("/World/Sky") lpe None pmf 0.5 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 1: area name Some("/World/Key") lpe None pmf 0.5 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 5 geometries, PrimitiveBreakdown { triangles: 14, spheres: 3, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 14, spheres: 3, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +geom 0: material #0 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:3d65c4a843c183d8 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=1:3d65c4a843c183d8 +geom 1: material #1 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:0fb1fc996bb64f06 camera=1:0fb1fc996bb64f06 shadow=1:0fb1fc996bb64f06 indirect=1:0fb1fc996bb64f06 +geom 2: material #2 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=12:1b27d3862a39596d camera=12:1b27d3862a39596d shadow=12:1b27d3862a39596d indirect=12:1b27d3862a39596d +geom 3: material #2 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:9366fea1438aeb8c camera=1:9366fea1438aeb8c shadow=1:9366fea1438aeb8c indirect=1:9366fea1438aeb8c +geom 4: material #2 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:be0b97004c4d3e85 camera=2:be0b97004c4d3e85 shadow=2:be0b97004c4d3e85 indirect=2:be0b97004c4d3e85 +provenance material /World/Looks/Mirror: MaterialOrigin { slots: [1], displaced: false } +provenance light /World/Key: LightOrigin { index: 1, geoms: 0..1 } +provenance light /World/Sky: LightOrigin { index: 0, geoms: 0..0 } +provenance geometry 0..1: /World/Key +provenance geometry 1..2: /World/Props/MirrorBall +provenance geometry 2..3: /World/Props/Crate +provenance geometry 3..4: /World/Chars/Hero +provenance geometry 4..5: /World/Set/Floor +provenance mesh: MeshOrigin { geom_id: 2, slot: 0, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 4, slot: 1, baked: true, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 11523204089106361411, n_points: 8, n_indices: 24, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 1: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 8416296582947184296, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [1, 3] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/World/Cam"), cameras: ["/World/Cam"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/World/Cam"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/render_passes_usda-109738cee49991a5-3.image b/crates/crust-core/tests/data/import_baselines/render_passes_usda-109738cee49991a5-3.image new file mode 100644 index 000000000..a78e01ae7 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/render_passes_usda-109738cee49991a5-3.image @@ -0,0 +1 @@ +160x90 16spp clamp-off c795054d39051d29 diff --git a/crates/crust-core/tests/data/import_baselines/render_passes_usda-15787cfcd05d1f32-1.digest b/crates/crust-core/tests/data/import_baselines/render_passes_usda-15787cfcd05d1f32-1.digest new file mode 100644 index 000000000..c9bca476b --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/render_passes_usda-15787cfcd05d1f32-1.digest @@ -0,0 +1,35 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/World/Cam") +camera: Camera { origin: Vec3A(0.0, 1.6, 7.0), lower_left_corner: Vec3A(-4.530607, -2.3153963, -2.5480032), horizontal: Vec3A(9.061214, -0.0, 0.0), vertical: Vec3A(0.0, 5.0473304, -0.7093561), u: Vec3A(1.0, -0.0, 0.0), v: Vec3A(0.0, 0.9902681, -0.13917312), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: Some("/Render/charSettings") +settings: RenderSettings { samples_per_pixel: 64, max_depth: 4, width: 160, height: 90, region: PixelRect { x0: 0, y0: 0, x1: 160, y1: 90 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [AovProduct { prim_path: "/Render/Products/char", name: "char.exr", vars: [AovVar { prim_path: "/Render/Vars/color", name: "color", channel_prefix: None, source: Color, components: 4, precision: Float, accumulation: Filtered, clear: 0.0, expression: None, raw: false, variance: false }], attributes: [] }], precomp: None } +pass: Some(PassSummary { path: "/Render/Passes/char", holdouts: 3, camera_hidden: 0 }) +source: Source { lens: Some(Lens { focal_length: 30.0, aperture: [20.955, 15.2908], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 10.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/render_passes.usda"], invisible_overrides: Some(0) } +layer: $DIR/render_passes.usda +lights: 2 +light 0: dome name Some("/World/Sky") lpe None pmf 0.5 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 1: area name Some("/World/Key") lpe None pmf 0.5 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 5 geometries, PrimitiveBreakdown { triangles: 14, spheres: 3, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 14, spheres: 3, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +geom 0: material #0 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:3d65c4a843c183d8 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=1:3d65c4a843c183d8 +geom 1: material #1 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout true transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:0fb1fc996bb64f06 camera=1:0fb1fc996bb64f06 shadow=1:0fb1fc996bb64f06 indirect=1:0fb1fc996bb64f06 +geom 2: material #2 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout true transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=12:1b27d3862a39596d camera=12:1b27d3862a39596d shadow=12:1b27d3862a39596d indirect=12:1b27d3862a39596d +geom 3: material #2 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:9366fea1438aeb8c camera=1:9366fea1438aeb8c shadow=1:9366fea1438aeb8c indirect=1:9366fea1438aeb8c +geom 4: material #2 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout true transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:be0b97004c4d3e85 camera=2:be0b97004c4d3e85 shadow=2:be0b97004c4d3e85 indirect=2:be0b97004c4d3e85 +provenance material /World/Looks/Mirror: MaterialOrigin { slots: [1], displaced: false } +provenance light /World/Key: LightOrigin { index: 1, geoms: 0..1 } +provenance light /World/Sky: LightOrigin { index: 0, geoms: 0..0 } +provenance geometry 0..1: /World/Key +provenance geometry 1..2: /World/Props/MirrorBall +provenance geometry 2..3: /World/Props/Crate +provenance geometry 3..4: /World/Chars/Hero +provenance geometry 4..5: /World/Set/Floor +provenance mesh: MeshOrigin { geom_id: 2, slot: 0, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 4, slot: 1, baked: true, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 11523204089106361411, n_points: 8, n_indices: 24, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 1: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 8416296582947184296, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [1, 3] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: Some("/Render/Passes/char"), keep_geometry: false }, render_settings: Some("/Render/charSettings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/World/Cam"), cameras: ["/World/Cam"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/World/Cam"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/render_passes_usda-15787cfcd05d1f32-1.image b/crates/crust-core/tests/data/import_baselines/render_passes_usda-15787cfcd05d1f32-1.image new file mode 100644 index 000000000..dcfec9d74 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/render_passes_usda-15787cfcd05d1f32-1.image @@ -0,0 +1 @@ +160x90 16spp clamp-off b2d9bbb91a775474 diff --git a/crates/crust-core/tests/data/import_baselines/render_passes_usda-15787cfcd05d1f32-2.digest b/crates/crust-core/tests/data/import_baselines/render_passes_usda-15787cfcd05d1f32-2.digest new file mode 100644 index 000000000..c9bca476b --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/render_passes_usda-15787cfcd05d1f32-2.digest @@ -0,0 +1,35 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/World/Cam") +camera: Camera { origin: Vec3A(0.0, 1.6, 7.0), lower_left_corner: Vec3A(-4.530607, -2.3153963, -2.5480032), horizontal: Vec3A(9.061214, -0.0, 0.0), vertical: Vec3A(0.0, 5.0473304, -0.7093561), u: Vec3A(1.0, -0.0, 0.0), v: Vec3A(0.0, 0.9902681, -0.13917312), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: Some("/Render/charSettings") +settings: RenderSettings { samples_per_pixel: 64, max_depth: 4, width: 160, height: 90, region: PixelRect { x0: 0, y0: 0, x1: 160, y1: 90 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [AovProduct { prim_path: "/Render/Products/char", name: "char.exr", vars: [AovVar { prim_path: "/Render/Vars/color", name: "color", channel_prefix: None, source: Color, components: 4, precision: Float, accumulation: Filtered, clear: 0.0, expression: None, raw: false, variance: false }], attributes: [] }], precomp: None } +pass: Some(PassSummary { path: "/Render/Passes/char", holdouts: 3, camera_hidden: 0 }) +source: Source { lens: Some(Lens { focal_length: 30.0, aperture: [20.955, 15.2908], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 10.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/render_passes.usda"], invisible_overrides: Some(0) } +layer: $DIR/render_passes.usda +lights: 2 +light 0: dome name Some("/World/Sky") lpe None pmf 0.5 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 1: area name Some("/World/Key") lpe None pmf 0.5 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 5 geometries, PrimitiveBreakdown { triangles: 14, spheres: 3, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 14, spheres: 3, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +geom 0: material #0 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:3d65c4a843c183d8 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=1:3d65c4a843c183d8 +geom 1: material #1 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout true transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:0fb1fc996bb64f06 camera=1:0fb1fc996bb64f06 shadow=1:0fb1fc996bb64f06 indirect=1:0fb1fc996bb64f06 +geom 2: material #2 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout true transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=12:1b27d3862a39596d camera=12:1b27d3862a39596d shadow=12:1b27d3862a39596d indirect=12:1b27d3862a39596d +geom 3: material #2 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:9366fea1438aeb8c camera=1:9366fea1438aeb8c shadow=1:9366fea1438aeb8c indirect=1:9366fea1438aeb8c +geom 4: material #2 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout true transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:be0b97004c4d3e85 camera=2:be0b97004c4d3e85 shadow=2:be0b97004c4d3e85 indirect=2:be0b97004c4d3e85 +provenance material /World/Looks/Mirror: MaterialOrigin { slots: [1], displaced: false } +provenance light /World/Key: LightOrigin { index: 1, geoms: 0..1 } +provenance light /World/Sky: LightOrigin { index: 0, geoms: 0..0 } +provenance geometry 0..1: /World/Key +provenance geometry 1..2: /World/Props/MirrorBall +provenance geometry 2..3: /World/Props/Crate +provenance geometry 3..4: /World/Chars/Hero +provenance geometry 4..5: /World/Set/Floor +provenance mesh: MeshOrigin { geom_id: 2, slot: 0, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 4, slot: 1, baked: true, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 11523204089106361411, n_points: 8, n_indices: 24, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 1: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 8416296582947184296, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [1, 3] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: Some("/Render/Passes/char"), keep_geometry: false }, render_settings: Some("/Render/charSettings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/World/Cam"), cameras: ["/World/Cam"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/World/Cam"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/render_passes_usda-15787cfcd05d1f32-2.image b/crates/crust-core/tests/data/import_baselines/render_passes_usda-15787cfcd05d1f32-2.image new file mode 100644 index 000000000..dcfec9d74 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/render_passes_usda-15787cfcd05d1f32-2.image @@ -0,0 +1 @@ +160x90 16spp clamp-off b2d9bbb91a775474 diff --git a/crates/crust-core/tests/data/import_baselines/render_passes_usda-2eed0231ac063823-1.digest b/crates/crust-core/tests/data/import_baselines/render_passes_usda-2eed0231ac063823-1.digest new file mode 100644 index 000000000..39c16d134 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/render_passes_usda-2eed0231ac063823-1.digest @@ -0,0 +1,35 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/World/Cam") +camera: Camera { origin: Vec3A(0.0, 1.6, 7.0), lower_left_corner: Vec3A(-4.530607, -2.3153963, -2.5480032), horizontal: Vec3A(9.061214, -0.0, 0.0), vertical: Vec3A(0.0, 5.0473304, -0.7093561), u: Vec3A(1.0, -0.0, 0.0), v: Vec3A(0.0, 0.9902681, -0.13917312), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: Some("/Render/settings") +settings: RenderSettings { samples_per_pixel: 64, max_depth: 4, width: 160, height: 90, region: PixelRect { x0: 0, y0: 0, x1: 160, y1: 90 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [AovProduct { prim_path: "/Render/Products/props", name: "props.exr", vars: [AovVar { prim_path: "/Render/Vars/color", name: "color", channel_prefix: None, source: Color, components: 4, precision: Float, accumulation: Filtered, clear: 0.0, expression: None, raw: false, variance: false }], attributes: [] }], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 30.0, aperture: [20.955, 15.2908], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 10.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/render_passes.usda"], invisible_overrides: Some(0) } +layer: $DIR/render_passes.usda +lights: 2 +light 0: dome name Some("/World/Sky") lpe None pmf 0.5 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 1: area name Some("/World/Key") lpe None pmf 0.5 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 5 geometries, PrimitiveBreakdown { triangles: 14, spheres: 3, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 14, spheres: 3, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +geom 0: material #0 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:3d65c4a843c183d8 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=1:3d65c4a843c183d8 +geom 1: material #1 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:0fb1fc996bb64f06 camera=1:0fb1fc996bb64f06 shadow=1:0fb1fc996bb64f06 indirect=1:0fb1fc996bb64f06 +geom 2: material #2 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=12:1b27d3862a39596d camera=12:1b27d3862a39596d shadow=12:1b27d3862a39596d indirect=12:1b27d3862a39596d +geom 3: material #2 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:9366fea1438aeb8c camera=1:9366fea1438aeb8c shadow=1:9366fea1438aeb8c indirect=1:9366fea1438aeb8c +geom 4: material #2 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:be0b97004c4d3e85 camera=2:be0b97004c4d3e85 shadow=2:be0b97004c4d3e85 indirect=2:be0b97004c4d3e85 +provenance material /World/Looks/Mirror: MaterialOrigin { slots: [1], displaced: false } +provenance light /World/Key: LightOrigin { index: 1, geoms: 0..1 } +provenance light /World/Sky: LightOrigin { index: 0, geoms: 0..0 } +provenance geometry 0..1: /World/Key +provenance geometry 1..2: /World/Props/MirrorBall +provenance geometry 2..3: /World/Props/Crate +provenance geometry 3..4: /World/Chars/Hero +provenance geometry 4..5: /World/Set/Floor +provenance mesh: MeshOrigin { geom_id: 2, slot: 0, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 4, slot: 1, baked: true, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 11523204089106361411, n_points: 8, n_indices: 24, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 1: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 8416296582947184296, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [1, 3] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: true, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/World/Cam"), cameras: ["/World/Cam"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/World/Cam"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/render_passes_usda-2eed0231ac063823-1.image b/crates/crust-core/tests/data/import_baselines/render_passes_usda-2eed0231ac063823-1.image new file mode 100644 index 000000000..a78e01ae7 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/render_passes_usda-2eed0231ac063823-1.image @@ -0,0 +1 @@ +160x90 16spp clamp-off c795054d39051d29 diff --git a/crates/crust-core/tests/data/import_baselines/render_passes_usda-5d8d12e685ddd56c-1.digest b/crates/crust-core/tests/data/import_baselines/render_passes_usda-5d8d12e685ddd56c-1.digest new file mode 100644 index 000000000..6c0675d02 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/render_passes_usda-5d8d12e685ddd56c-1.digest @@ -0,0 +1,35 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/World/Cam") +camera: Camera { origin: Vec3A(0.0, 1.6, 7.0), lower_left_corner: Vec3A(-4.530607, -2.3153963, -2.5480032), horizontal: Vec3A(9.061214, -0.0, 0.0), vertical: Vec3A(0.0, 5.0473304, -0.7093561), u: Vec3A(1.0, -0.0, 0.0), v: Vec3A(0.0, 0.9902681, -0.13917312), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: Some("/Render/settings") +settings: RenderSettings { samples_per_pixel: 64, max_depth: 4, width: 160, height: 90, region: PixelRect { x0: 0, y0: 0, x1: 160, y1: 90 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [AovProduct { prim_path: "/Render/Products/props", name: "props.exr", vars: [AovVar { prim_path: "/Render/Vars/color", name: "color", channel_prefix: None, source: Color, components: 4, precision: Float, accumulation: Filtered, clear: 0.0, expression: None, raw: false, variance: false }], attributes: [] }], precomp: None } +pass: Some(PassSummary { path: "/Render/Passes/props", holdouts: 1, camera_hidden: 0 }) +source: Source { lens: Some(Lens { focal_length: 30.0, aperture: [20.955, 15.2908], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 10.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/render_passes.usda"], invisible_overrides: Some(0) } +layer: $DIR/render_passes.usda +lights: 2 +light 0: dome name Some("/World/Sky") lpe None pmf 0.5 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 1: area name Some("/World/Key") lpe None pmf 0.5 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 5 geometries, PrimitiveBreakdown { triangles: 14, spheres: 3, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 14, spheres: 3, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +geom 0: material #0 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:3d65c4a843c183d8 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=1:3d65c4a843c183d8 +geom 1: material #1 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:0fb1fc996bb64f06 camera=1:0fb1fc996bb64f06 shadow=1:0fb1fc996bb64f06 indirect=1:0fb1fc996bb64f06 +geom 2: material #2 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=12:1b27d3862a39596d camera=12:1b27d3862a39596d shadow=12:1b27d3862a39596d indirect=12:1b27d3862a39596d +geom 3: material #2 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout true transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:9366fea1438aeb8c camera=1:9366fea1438aeb8c shadow=1:9366fea1438aeb8c indirect=1:9366fea1438aeb8c +geom 4: material #2 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:be0b97004c4d3e85 camera=2:be0b97004c4d3e85 shadow=2:be0b97004c4d3e85 indirect=2:be0b97004c4d3e85 +provenance material /World/Looks/Mirror: MaterialOrigin { slots: [1], displaced: false } +provenance light /World/Key: LightOrigin { index: 1, geoms: 0..1 } +provenance light /World/Sky: LightOrigin { index: 0, geoms: 0..0 } +provenance geometry 0..1: /World/Key +provenance geometry 1..2: /World/Props/MirrorBall +provenance geometry 2..3: /World/Props/Crate +provenance geometry 3..4: /World/Chars/Hero +provenance geometry 4..5: /World/Set/Floor +provenance mesh: MeshOrigin { geom_id: 2, slot: 0, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 4, slot: 1, baked: true, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 11523204089106361411, n_points: 8, n_indices: 24, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 1: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 8416296582947184296, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [1, 3] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: Some("/Render/Passes/props"), keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/World/Cam"), cameras: ["/World/Cam"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/World/Cam"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/render_passes_usda-5d8d12e685ddd56c-1.image b/crates/crust-core/tests/data/import_baselines/render_passes_usda-5d8d12e685ddd56c-1.image new file mode 100644 index 000000000..c13b4afd5 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/render_passes_usda-5d8d12e685ddd56c-1.image @@ -0,0 +1 @@ +160x90 16spp clamp-off c7f0a23e13ad7fb3 diff --git a/crates/crust-core/tests/data/import_baselines/render_passes_usda-5d8d12e685ddd56c-2.digest b/crates/crust-core/tests/data/import_baselines/render_passes_usda-5d8d12e685ddd56c-2.digest new file mode 100644 index 000000000..6c0675d02 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/render_passes_usda-5d8d12e685ddd56c-2.digest @@ -0,0 +1,35 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/World/Cam") +camera: Camera { origin: Vec3A(0.0, 1.6, 7.0), lower_left_corner: Vec3A(-4.530607, -2.3153963, -2.5480032), horizontal: Vec3A(9.061214, -0.0, 0.0), vertical: Vec3A(0.0, 5.0473304, -0.7093561), u: Vec3A(1.0, -0.0, 0.0), v: Vec3A(0.0, 0.9902681, -0.13917312), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: Some("/Render/settings") +settings: RenderSettings { samples_per_pixel: 64, max_depth: 4, width: 160, height: 90, region: PixelRect { x0: 0, y0: 0, x1: 160, y1: 90 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [AovProduct { prim_path: "/Render/Products/props", name: "props.exr", vars: [AovVar { prim_path: "/Render/Vars/color", name: "color", channel_prefix: None, source: Color, components: 4, precision: Float, accumulation: Filtered, clear: 0.0, expression: None, raw: false, variance: false }], attributes: [] }], precomp: None } +pass: Some(PassSummary { path: "/Render/Passes/props", holdouts: 1, camera_hidden: 0 }) +source: Source { lens: Some(Lens { focal_length: 30.0, aperture: [20.955, 15.2908], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 10.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/render_passes.usda"], invisible_overrides: Some(0) } +layer: $DIR/render_passes.usda +lights: 2 +light 0: dome name Some("/World/Sky") lpe None pmf 0.5 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 1: area name Some("/World/Key") lpe None pmf 0.5 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 5 geometries, PrimitiveBreakdown { triangles: 14, spheres: 3, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 14, spheres: 3, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +geom 0: material #0 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:3d65c4a843c183d8 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=1:3d65c4a843c183d8 +geom 1: material #1 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:0fb1fc996bb64f06 camera=1:0fb1fc996bb64f06 shadow=1:0fb1fc996bb64f06 indirect=1:0fb1fc996bb64f06 +geom 2: material #2 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=12:1b27d3862a39596d camera=12:1b27d3862a39596d shadow=12:1b27d3862a39596d indirect=12:1b27d3862a39596d +geom 3: material #2 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout true transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:9366fea1438aeb8c camera=1:9366fea1438aeb8c shadow=1:9366fea1438aeb8c indirect=1:9366fea1438aeb8c +geom 4: material #2 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:be0b97004c4d3e85 camera=2:be0b97004c4d3e85 shadow=2:be0b97004c4d3e85 indirect=2:be0b97004c4d3e85 +provenance material /World/Looks/Mirror: MaterialOrigin { slots: [1], displaced: false } +provenance light /World/Key: LightOrigin { index: 1, geoms: 0..1 } +provenance light /World/Sky: LightOrigin { index: 0, geoms: 0..0 } +provenance geometry 0..1: /World/Key +provenance geometry 1..2: /World/Props/MirrorBall +provenance geometry 2..3: /World/Props/Crate +provenance geometry 3..4: /World/Chars/Hero +provenance geometry 4..5: /World/Set/Floor +provenance mesh: MeshOrigin { geom_id: 2, slot: 0, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 4, slot: 1, baked: true, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 11523204089106361411, n_points: 8, n_indices: 24, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 1: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 8416296582947184296, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [1, 3] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: Some("/Render/Passes/props"), keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/World/Cam"), cameras: ["/World/Cam"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/World/Cam"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/render_passes_usda-5d8d12e685ddd56c-2.image b/crates/crust-core/tests/data/import_baselines/render_passes_usda-5d8d12e685ddd56c-2.image new file mode 100644 index 000000000..c13b4afd5 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/render_passes_usda-5d8d12e685ddd56c-2.image @@ -0,0 +1 @@ +160x90 16spp clamp-off c7f0a23e13ad7fb3 diff --git a/crates/crust-core/tests/data/import_baselines/render_passes_usda-c03e7c6702e31ad3-1.digest b/crates/crust-core/tests/data/import_baselines/render_passes_usda-c03e7c6702e31ad3-1.digest new file mode 100644 index 000000000..052fa2ee7 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/render_passes_usda-c03e7c6702e31ad3-1.digest @@ -0,0 +1,35 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/World/Cam") +camera: Camera { origin: Vec3A(0.0, 1.6, 7.0), lower_left_corner: Vec3A(-4.530607, -2.3153963, -2.5480032), horizontal: Vec3A(9.061214, -0.0, 0.0), vertical: Vec3A(0.0, 5.0473304, -0.7093561), u: Vec3A(1.0, -0.0, 0.0), v: Vec3A(0.0, 0.9902681, -0.13917312), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: Some("/Render/charSettings") +settings: RenderSettings { samples_per_pixel: 64, max_depth: 4, width: 160, height: 90, region: PixelRect { x0: 0, y0: 0, x1: 160, y1: 90 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [AovProduct { prim_path: "/Render/Products/char", name: "char.exr", vars: [AovVar { prim_path: "/Render/Vars/color", name: "color", channel_prefix: None, source: Color, components: 4, precision: Float, accumulation: Filtered, clear: 0.0, expression: None, raw: false, variance: false }], attributes: [] }], precomp: None } +pass: Some(PassSummary { path: "/Render/Passes/char", holdouts: 3, camera_hidden: 0 }) +source: Source { lens: Some(Lens { focal_length: 30.0, aperture: [20.955, 15.2908], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 10.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/render_passes.usda"], invisible_overrides: Some(0) } +layer: $DIR/render_passes.usda +lights: 2 +light 0: dome name Some("/World/Sky") lpe None pmf 0.5 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 1: area name Some("/World/Key") lpe None pmf 0.5 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 5 geometries, PrimitiveBreakdown { triangles: 14, spheres: 3, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 14, spheres: 3, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +geom 0: material #0 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:3d65c4a843c183d8 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=1:3d65c4a843c183d8 +geom 1: material #1 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout true transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:0fb1fc996bb64f06 camera=1:0fb1fc996bb64f06 shadow=1:0fb1fc996bb64f06 indirect=1:0fb1fc996bb64f06 +geom 2: material #2 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout true transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=12:1b27d3862a39596d camera=12:1b27d3862a39596d shadow=12:1b27d3862a39596d indirect=12:1b27d3862a39596d +geom 3: material #2 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:9366fea1438aeb8c camera=1:9366fea1438aeb8c shadow=1:9366fea1438aeb8c indirect=1:9366fea1438aeb8c +geom 4: material #2 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout true transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:be0b97004c4d3e85 camera=2:be0b97004c4d3e85 shadow=2:be0b97004c4d3e85 indirect=2:be0b97004c4d3e85 +provenance material /World/Looks/Mirror: MaterialOrigin { slots: [1], displaced: false } +provenance light /World/Key: LightOrigin { index: 1, geoms: 0..1 } +provenance light /World/Sky: LightOrigin { index: 0, geoms: 0..0 } +provenance geometry 0..1: /World/Key +provenance geometry 1..2: /World/Props/MirrorBall +provenance geometry 2..3: /World/Props/Crate +provenance geometry 3..4: /World/Chars/Hero +provenance geometry 4..5: /World/Set/Floor +provenance mesh: MeshOrigin { geom_id: 2, slot: 0, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 4, slot: 1, baked: true, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 11523204089106361411, n_points: 8, n_indices: 24, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 1: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 8416296582947184296, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [1, 3] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: true, working_space: None, pass: Some("/Render/Passes/char"), keep_geometry: false }, render_settings: Some("/Render/charSettings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/World/Cam"), cameras: ["/World/Cam"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/World/Cam"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/render_passes_usda-c03e7c6702e31ad3-1.image b/crates/crust-core/tests/data/import_baselines/render_passes_usda-c03e7c6702e31ad3-1.image new file mode 100644 index 000000000..dcfec9d74 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/render_passes_usda-c03e7c6702e31ad3-1.image @@ -0,0 +1 @@ +160x90 16spp clamp-off b2d9bbb91a775474 diff --git a/crates/crust-core/tests/data/import_baselines/render_passes_usda-f5e51ff2422aa383-1.digest b/crates/crust-core/tests/data/import_baselines/render_passes_usda-f5e51ff2422aa383-1.digest new file mode 100644 index 000000000..7d73e4ea0 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/render_passes_usda-f5e51ff2422aa383-1.digest @@ -0,0 +1,35 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/World/Cam") +camera: Camera { origin: Vec3A(0.0, 1.6, 7.0), lower_left_corner: Vec3A(-4.530607, -2.3153963, -2.5480032), horizontal: Vec3A(9.061214, -0.0, 0.0), vertical: Vec3A(0.0, 5.0473304, -0.7093561), u: Vec3A(1.0, -0.0, 0.0), v: Vec3A(0.0, 0.9902681, -0.13917312), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: Some("/Render/settings") +settings: RenderSettings { samples_per_pixel: 64, max_depth: 4, width: 160, height: 90, region: PixelRect { x0: 0, y0: 0, x1: 160, y1: 90 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [AovProduct { prim_path: "/Render/Products/props", name: "props.exr", vars: [AovVar { prim_path: "/Render/Vars/color", name: "color", channel_prefix: None, source: Color, components: 4, precision: Float, accumulation: Filtered, clear: 0.0, expression: None, raw: false, variance: false }], attributes: [] }], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 30.0, aperture: [20.955, 15.2908], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 10.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/render_passes.usda"], invisible_overrides: Some(0) } +layer: $DIR/render_passes.usda +lights: 2 +light 0: dome name Some("/World/Sky") lpe None pmf 0.5 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 1: area name Some("/World/Key") lpe None pmf 0.5 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 5 geometries, PrimitiveBreakdown { triangles: 14, spheres: 3, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 14, spheres: 3, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +geom 0: material #0 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:3d65c4a843c183d8 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=1:3d65c4a843c183d8 +geom 1: material #1 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:0fb1fc996bb64f06 camera=1:0fb1fc996bb64f06 shadow=1:0fb1fc996bb64f06 indirect=1:0fb1fc996bb64f06 +geom 2: material #2 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=12:1b27d3862a39596d camera=12:1b27d3862a39596d shadow=12:1b27d3862a39596d indirect=12:1b27d3862a39596d +geom 3: material #2 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:9366fea1438aeb8c camera=1:9366fea1438aeb8c shadow=1:9366fea1438aeb8c indirect=1:9366fea1438aeb8c +geom 4: material #2 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:be0b97004c4d3e85 camera=2:be0b97004c4d3e85 shadow=2:be0b97004c4d3e85 indirect=2:be0b97004c4d3e85 +provenance material /World/Looks/Mirror: MaterialOrigin { slots: [1], displaced: false } +provenance light /World/Key: LightOrigin { index: 1, geoms: 0..1 } +provenance light /World/Sky: LightOrigin { index: 0, geoms: 0..0 } +provenance geometry 0..1: /World/Key +provenance geometry 1..2: /World/Props/MirrorBall +provenance geometry 2..3: /World/Props/Crate +provenance geometry 3..4: /World/Chars/Hero +provenance geometry 4..5: /World/Set/Floor +provenance mesh: MeshOrigin { geom_id: 2, slot: 0, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 4, slot: 1, baked: true, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 11523204089106361411, n_points: 8, n_indices: 24, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 1: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 8416296582947184296, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [1, 3] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/World/Cam"), cameras: ["/World/Cam"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/World/Cam"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/render_passes_usda-f5e51ff2422aa383-1.image b/crates/crust-core/tests/data/import_baselines/render_passes_usda-f5e51ff2422aa383-1.image new file mode 100644 index 000000000..a78e01ae7 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/render_passes_usda-f5e51ff2422aa383-1.image @@ -0,0 +1 @@ +160x90 16spp clamp-off c795054d39051d29 diff --git a/crates/crust-core/tests/data/import_baselines/render_passes_usda-f5e51ff2422aa383-2.digest b/crates/crust-core/tests/data/import_baselines/render_passes_usda-f5e51ff2422aa383-2.digest new file mode 100644 index 000000000..7d73e4ea0 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/render_passes_usda-f5e51ff2422aa383-2.digest @@ -0,0 +1,35 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/World/Cam") +camera: Camera { origin: Vec3A(0.0, 1.6, 7.0), lower_left_corner: Vec3A(-4.530607, -2.3153963, -2.5480032), horizontal: Vec3A(9.061214, -0.0, 0.0), vertical: Vec3A(0.0, 5.0473304, -0.7093561), u: Vec3A(1.0, -0.0, 0.0), v: Vec3A(0.0, 0.9902681, -0.13917312), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: Some("/Render/settings") +settings: RenderSettings { samples_per_pixel: 64, max_depth: 4, width: 160, height: 90, region: PixelRect { x0: 0, y0: 0, x1: 160, y1: 90 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [AovProduct { prim_path: "/Render/Products/props", name: "props.exr", vars: [AovVar { prim_path: "/Render/Vars/color", name: "color", channel_prefix: None, source: Color, components: 4, precision: Float, accumulation: Filtered, clear: 0.0, expression: None, raw: false, variance: false }], attributes: [] }], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 30.0, aperture: [20.955, 15.2908], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 10.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/render_passes.usda"], invisible_overrides: Some(0) } +layer: $DIR/render_passes.usda +lights: 2 +light 0: dome name Some("/World/Sky") lpe None pmf 0.5 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 1: area name Some("/World/Key") lpe None pmf 0.5 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 5 geometries, PrimitiveBreakdown { triangles: 14, spheres: 3, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 14, spheres: 3, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +geom 0: material #0 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:3d65c4a843c183d8 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=1:3d65c4a843c183d8 +geom 1: material #1 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:0fb1fc996bb64f06 camera=1:0fb1fc996bb64f06 shadow=1:0fb1fc996bb64f06 indirect=1:0fb1fc996bb64f06 +geom 2: material #2 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=12:1b27d3862a39596d camera=12:1b27d3862a39596d shadow=12:1b27d3862a39596d indirect=12:1b27d3862a39596d +geom 3: material #2 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:9366fea1438aeb8c camera=1:9366fea1438aeb8c shadow=1:9366fea1438aeb8c indirect=1:9366fea1438aeb8c +geom 4: material #2 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:be0b97004c4d3e85 camera=2:be0b97004c4d3e85 shadow=2:be0b97004c4d3e85 indirect=2:be0b97004c4d3e85 +provenance material /World/Looks/Mirror: MaterialOrigin { slots: [1], displaced: false } +provenance light /World/Key: LightOrigin { index: 1, geoms: 0..1 } +provenance light /World/Sky: LightOrigin { index: 0, geoms: 0..0 } +provenance geometry 0..1: /World/Key +provenance geometry 1..2: /World/Props/MirrorBall +provenance geometry 2..3: /World/Props/Crate +provenance geometry 3..4: /World/Chars/Hero +provenance geometry 4..5: /World/Set/Floor +provenance mesh: MeshOrigin { geom_id: 2, slot: 0, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 4, slot: 1, baked: true, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 11523204089106361411, n_points: 8, n_indices: 24, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 1: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 8416296582947184296, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [1, 3] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/World/Cam"), cameras: ["/World/Cam"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/World/Cam"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/render_passes_usda-f5e51ff2422aa383-2.image b/crates/crust-core/tests/data/import_baselines/render_passes_usda-f5e51ff2422aa383-2.image new file mode 100644 index 000000000..a78e01ae7 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/render_passes_usda-f5e51ff2422aa383-2.image @@ -0,0 +1 @@ +160x90 16spp clamp-off c795054d39051d29 diff --git a/crates/crust-core/tests/data/import_baselines/render_passes_usda-f98e72ee422221b6-1.digest b/crates/crust-core/tests/data/import_baselines/render_passes_usda-f98e72ee422221b6-1.digest new file mode 100644 index 000000000..39c16d134 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/render_passes_usda-f98e72ee422221b6-1.digest @@ -0,0 +1,35 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/World/Cam") +camera: Camera { origin: Vec3A(0.0, 1.6, 7.0), lower_left_corner: Vec3A(-4.530607, -2.3153963, -2.5480032), horizontal: Vec3A(9.061214, -0.0, 0.0), vertical: Vec3A(0.0, 5.0473304, -0.7093561), u: Vec3A(1.0, -0.0, 0.0), v: Vec3A(0.0, 0.9902681, -0.13917312), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: Some("/Render/settings") +settings: RenderSettings { samples_per_pixel: 64, max_depth: 4, width: 160, height: 90, region: PixelRect { x0: 0, y0: 0, x1: 160, y1: 90 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [AovProduct { prim_path: "/Render/Products/props", name: "props.exr", vars: [AovVar { prim_path: "/Render/Vars/color", name: "color", channel_prefix: None, source: Color, components: 4, precision: Float, accumulation: Filtered, clear: 0.0, expression: None, raw: false, variance: false }], attributes: [] }], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 30.0, aperture: [20.955, 15.2908], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 10.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/render_passes.usda"], invisible_overrides: Some(0) } +layer: $DIR/render_passes.usda +lights: 2 +light 0: dome name Some("/World/Sky") lpe None pmf 0.5 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 1: area name Some("/World/Key") lpe None pmf 0.5 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 5 geometries, PrimitiveBreakdown { triangles: 14, spheres: 3, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 14, spheres: 3, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +geom 0: material #0 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:3d65c4a843c183d8 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=1:3d65c4a843c183d8 +geom 1: material #1 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:0fb1fc996bb64f06 camera=1:0fb1fc996bb64f06 shadow=1:0fb1fc996bb64f06 indirect=1:0fb1fc996bb64f06 +geom 2: material #2 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=12:1b27d3862a39596d camera=12:1b27d3862a39596d shadow=12:1b27d3862a39596d indirect=12:1b27d3862a39596d +geom 3: material #2 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:9366fea1438aeb8c camera=1:9366fea1438aeb8c shadow=1:9366fea1438aeb8c indirect=1:9366fea1438aeb8c +geom 4: material #2 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:be0b97004c4d3e85 camera=2:be0b97004c4d3e85 shadow=2:be0b97004c4d3e85 indirect=2:be0b97004c4d3e85 +provenance material /World/Looks/Mirror: MaterialOrigin { slots: [1], displaced: false } +provenance light /World/Key: LightOrigin { index: 1, geoms: 0..1 } +provenance light /World/Sky: LightOrigin { index: 0, geoms: 0..0 } +provenance geometry 0..1: /World/Key +provenance geometry 1..2: /World/Props/MirrorBall +provenance geometry 2..3: /World/Props/Crate +provenance geometry 3..4: /World/Chars/Hero +provenance geometry 4..5: /World/Set/Floor +provenance mesh: MeshOrigin { geom_id: 2, slot: 0, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 4, slot: 1, baked: true, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 11523204089106361411, n_points: 8, n_indices: 24, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 1: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 8416296582947184296, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [1, 3] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: true, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/World/Cam"), cameras: ["/World/Cam"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/World/Cam"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/render_passes_usda-f98e72ee422221b6-1.image b/crates/crust-core/tests/data/import_baselines/render_passes_usda-f98e72ee422221b6-1.image new file mode 100644 index 000000000..a78e01ae7 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/render_passes_usda-f98e72ee422221b6-1.image @@ -0,0 +1 @@ +160x90 16spp clamp-off c795054d39051d29 diff --git a/crates/crust-core/tests/data/import_baselines/render_source_camera_usda-454941280afc694a-1.digest b/crates/crust-core/tests/data/import_baselines/render_source_camera_usda-454941280afc694a-1.digest new file mode 100644 index 000000000..e5a87ea8b --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/render_source_camera_usda-454941280afc694a-1.digest @@ -0,0 +1,17 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/World/CharCam") +camera: Camera { origin: Vec3A(1.0, 0.0, 10.0), lower_left_corner: Vec3A(-1.0954998, -2.0954998, 0.0), horizontal: Vec3A(4.1909995, 0.0, 0.0), vertical: Vec3A(0.0, 4.1909995, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: Some("/Render/settings") +settings: RenderSettings { samples_per_pixel: 3, max_depth: 32, width: 8, height: 8, region: PixelRect { x0: 0, y0: 0, x1: 8, y1: 8 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: Some(PassSummary { path: "/Render/Passes/char", holdouts: 0, camera_hidden: 0 }) +source: Source { lens: Some(Lens { focal_length: 50.0, aperture: [20.955, 15.2908], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 10.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/render_source_camera.usda"], invisible_overrides: Some(0) } +layer: $DIR/render_source_camera.usda +warning: Warning { code: RenderPassRenderSourceInvalid, kind: Refused, count: 1, prims: ["/Render/Passes/char"], message: "/Render/Passes/char: renderSource targets /World/CharCam, which is not a RenderSettings prim — reading the stage's render settings" } +lights: 0 +volumes: 0 +world: 0 geometries, PrimitiveBreakdown { triangles: 0, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 0, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: Some("/Render/Passes/char"), keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/World/CharCam"), cameras: ["/World/CharCam", "/World/Cam"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/World/CharCam"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/render_source_camera_usda-454941280afc694a-1.image b/crates/crust-core/tests/data/import_baselines/render_source_camera_usda-454941280afc694a-1.image new file mode 100644 index 000000000..8aad9360c --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/render_source_camera_usda-454941280afc694a-1.image @@ -0,0 +1 @@ +8x8 16spp clamp-off 9fa9e040e0eedf25 diff --git a/crates/crust-core/tests/data/import_baselines/render_source_camera_usda-d46ae988f6d9241c-1.digest b/crates/crust-core/tests/data/import_baselines/render_source_camera_usda-d46ae988f6d9241c-1.digest new file mode 100644 index 000000000..e5a87ea8b --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/render_source_camera_usda-d46ae988f6d9241c-1.digest @@ -0,0 +1,17 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/World/CharCam") +camera: Camera { origin: Vec3A(1.0, 0.0, 10.0), lower_left_corner: Vec3A(-1.0954998, -2.0954998, 0.0), horizontal: Vec3A(4.1909995, 0.0, 0.0), vertical: Vec3A(0.0, 4.1909995, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: Some("/Render/settings") +settings: RenderSettings { samples_per_pixel: 3, max_depth: 32, width: 8, height: 8, region: PixelRect { x0: 0, y0: 0, x1: 8, y1: 8 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: Some(PassSummary { path: "/Render/Passes/char", holdouts: 0, camera_hidden: 0 }) +source: Source { lens: Some(Lens { focal_length: 50.0, aperture: [20.955, 15.2908], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 10.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/render_source_camera.usda"], invisible_overrides: Some(0) } +layer: $DIR/render_source_camera.usda +warning: Warning { code: RenderPassRenderSourceInvalid, kind: Refused, count: 1, prims: ["/Render/Passes/char"], message: "/Render/Passes/char: renderSource targets /World/CharCam, which is not a RenderSettings prim — reading the stage's render settings" } +lights: 0 +volumes: 0 +world: 0 geometries, PrimitiveBreakdown { triangles: 0, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 0, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: Some("/Render/Passes/char"), keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/World/CharCam"), cameras: ["/World/CharCam", "/World/Cam"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/World/CharCam"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/render_source_camera_usda-d46ae988f6d9241c-1.image b/crates/crust-core/tests/data/import_baselines/render_source_camera_usda-d46ae988f6d9241c-1.image new file mode 100644 index 000000000..8aad9360c --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/render_source_camera_usda-d46ae988f6d9241c-1.image @@ -0,0 +1 @@ +8x8 16spp clamp-off 9fa9e040e0eedf25 diff --git a/crates/crust-core/tests/data/import_baselines/render_source_usda-001715b7663b9aec-1.digest b/crates/crust-core/tests/data/import_baselines/render_source_usda-001715b7663b9aec-1.digest new file mode 100644 index 000000000..72e539c8b --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/render_source_usda-001715b7663b9aec-1.digest @@ -0,0 +1,16 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/World/CharCam") +camera: Camera { origin: Vec3A(1.0, 0.0, 10.0), lower_left_corner: Vec3A(-5.1163206, -1.5290802, 0.0), horizontal: Vec3A(12.232641, 0.0, 0.0), vertical: Vec3A(0.0, 3.0581603, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: Some("/Render/charSettings") +settings: RenderSettings { samples_per_pixel: 7, max_depth: 32, width: 16, height: 4, region: PixelRect { x0: 0, y0: 0, x1: 16, y1: 4 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [AovProduct { prim_path: "/Render/charProduct", name: "char.exr", vars: [AovVar { prim_path: "/Render/color", name: "color", channel_prefix: None, source: Color, components: 3, precision: Float, accumulation: Filtered, clear: 0.0, expression: None, raw: false, variance: false }], attributes: [] }], precomp: None } +pass: Some(PassSummary { path: "/Render/Passes/char", holdouts: 0, camera_hidden: 0 }) +source: Source { lens: Some(Lens { focal_length: 50.0, aperture: [20.955, 15.2908], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 10.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/render_source.usda"], invisible_overrides: Some(0) } +layer: $DIR/render_source.usda +lights: 0 +volumes: 0 +world: 0 geometries, PrimitiveBreakdown { triangles: 0, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 0, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: Some("/Render/Passes/char"), keep_geometry: false }, render_settings: Some("/Render/charSettings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/World/CharCam"), cameras: ["/World/CharCam", "/World/Cam"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/World/CharCam"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/render_source_usda-001715b7663b9aec-1.image b/crates/crust-core/tests/data/import_baselines/render_source_usda-001715b7663b9aec-1.image new file mode 100644 index 000000000..64bdea1f0 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/render_source_usda-001715b7663b9aec-1.image @@ -0,0 +1 @@ +16x4 16spp clamp-off 9fa9e040e0eedf25 diff --git a/crates/crust-core/tests/data/import_baselines/render_source_usda-131b801caa122c43-1.digest b/crates/crust-core/tests/data/import_baselines/render_source_usda-131b801caa122c43-1.digest new file mode 100644 index 000000000..c3ed2a327 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/render_source_usda-131b801caa122c43-1.digest @@ -0,0 +1,16 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/World/CharCam") +camera: Camera { origin: Vec3A(1.0, 0.0, 10.0), lower_left_corner: Vec3A(-1.0954998, -2.0954998, 0.0), horizontal: Vec3A(4.1909995, 0.0, 0.0), vertical: Vec3A(0.0, 4.1909995, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: Some("/Render/settings") +settings: RenderSettings { samples_per_pixel: 3, max_depth: 32, width: 8, height: 8, region: PixelRect { x0: 0, y0: 0, x1: 8, y1: 8 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 50.0, aperture: [20.955, 15.2908], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 10.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/render_source.usda"], invisible_overrides: Some(0) } +layer: $DIR/render_source.usda +lights: 0 +volumes: 0 +world: 0 geometries, PrimitiveBreakdown { triangles: 0, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 0, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/World/CharCam"), cameras: ["/World/CharCam", "/World/Cam"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/World/CharCam"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/render_source_usda-131b801caa122c43-1.image b/crates/crust-core/tests/data/import_baselines/render_source_usda-131b801caa122c43-1.image new file mode 100644 index 000000000..8aad9360c --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/render_source_usda-131b801caa122c43-1.image @@ -0,0 +1 @@ +8x8 16spp clamp-off 9fa9e040e0eedf25 diff --git a/crates/crust-core/tests/data/import_baselines/render_source_usda-749a95594e279116-1.digest b/crates/crust-core/tests/data/import_baselines/render_source_usda-749a95594e279116-1.digest new file mode 100644 index 000000000..5930d1ec6 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/render_source_usda-749a95594e279116-1.digest @@ -0,0 +1,16 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/World/CharCam") +camera: Camera { origin: Vec3A(1.0, 0.0, 10.0), lower_left_corner: Vec3A(-1.0954998, -2.0954998, 0.0), horizontal: Vec3A(4.1909995, 0.0, 0.0), vertical: Vec3A(0.0, 4.1909995, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: Some("/Render/settings") +settings: RenderSettings { samples_per_pixel: 3, max_depth: 32, width: 8, height: 8, region: PixelRect { x0: 0, y0: 0, x1: 8, y1: 8 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: Some(PassSummary { path: "/Render/Passes/plain", holdouts: 0, camera_hidden: 0 }) +source: Source { lens: Some(Lens { focal_length: 50.0, aperture: [20.955, 15.2908], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 10.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/render_source.usda"], invisible_overrides: Some(0) } +layer: $DIR/render_source.usda +lights: 0 +volumes: 0 +world: 0 geometries, PrimitiveBreakdown { triangles: 0, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 0, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: Some("/Render/Passes/plain"), keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/World/CharCam"), cameras: ["/World/CharCam", "/World/Cam"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/World/CharCam"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/render_source_usda-749a95594e279116-1.image b/crates/crust-core/tests/data/import_baselines/render_source_usda-749a95594e279116-1.image new file mode 100644 index 000000000..8aad9360c --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/render_source_usda-749a95594e279116-1.image @@ -0,0 +1 @@ +8x8 16spp clamp-off 9fa9e040e0eedf25 diff --git a/crates/crust-core/tests/data/import_baselines/render_source_usda-b15267a29d9e4616-1.digest b/crates/crust-core/tests/data/import_baselines/render_source_usda-b15267a29d9e4616-1.digest new file mode 100644 index 000000000..72e539c8b --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/render_source_usda-b15267a29d9e4616-1.digest @@ -0,0 +1,16 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/World/CharCam") +camera: Camera { origin: Vec3A(1.0, 0.0, 10.0), lower_left_corner: Vec3A(-5.1163206, -1.5290802, 0.0), horizontal: Vec3A(12.232641, 0.0, 0.0), vertical: Vec3A(0.0, 3.0581603, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: Some("/Render/charSettings") +settings: RenderSettings { samples_per_pixel: 7, max_depth: 32, width: 16, height: 4, region: PixelRect { x0: 0, y0: 0, x1: 16, y1: 4 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [AovProduct { prim_path: "/Render/charProduct", name: "char.exr", vars: [AovVar { prim_path: "/Render/color", name: "color", channel_prefix: None, source: Color, components: 3, precision: Float, accumulation: Filtered, clear: 0.0, expression: None, raw: false, variance: false }], attributes: [] }], precomp: None } +pass: Some(PassSummary { path: "/Render/Passes/char", holdouts: 0, camera_hidden: 0 }) +source: Source { lens: Some(Lens { focal_length: 50.0, aperture: [20.955, 15.2908], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 10.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/render_source.usda"], invisible_overrides: Some(0) } +layer: $DIR/render_source.usda +lights: 0 +volumes: 0 +world: 0 geometries, PrimitiveBreakdown { triangles: 0, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 0, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: Some("/Render/Passes/char"), keep_geometry: false }, render_settings: Some("/Render/charSettings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/World/CharCam"), cameras: ["/World/CharCam", "/World/Cam"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/World/CharCam"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/render_source_usda-b15267a29d9e4616-1.image b/crates/crust-core/tests/data/import_baselines/render_source_usda-b15267a29d9e4616-1.image new file mode 100644 index 000000000..64bdea1f0 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/render_source_usda-b15267a29d9e4616-1.image @@ -0,0 +1 @@ +16x4 16spp clamp-off 9fa9e040e0eedf25 diff --git a/crates/crust-core/tests/data/import_baselines/render_source_usda-c512149bf344cb6d-1.digest b/crates/crust-core/tests/data/import_baselines/render_source_usda-c512149bf344cb6d-1.digest new file mode 100644 index 000000000..c3ed2a327 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/render_source_usda-c512149bf344cb6d-1.digest @@ -0,0 +1,16 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/World/CharCam") +camera: Camera { origin: Vec3A(1.0, 0.0, 10.0), lower_left_corner: Vec3A(-1.0954998, -2.0954998, 0.0), horizontal: Vec3A(4.1909995, 0.0, 0.0), vertical: Vec3A(0.0, 4.1909995, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: Some("/Render/settings") +settings: RenderSettings { samples_per_pixel: 3, max_depth: 32, width: 8, height: 8, region: PixelRect { x0: 0, y0: 0, x1: 8, y1: 8 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 50.0, aperture: [20.955, 15.2908], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 10.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/render_source.usda"], invisible_overrides: Some(0) } +layer: $DIR/render_source.usda +lights: 0 +volumes: 0 +world: 0 geometries, PrimitiveBreakdown { triangles: 0, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 0, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/World/CharCam"), cameras: ["/World/CharCam", "/World/Cam"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/World/CharCam"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/render_source_usda-c512149bf344cb6d-1.image b/crates/crust-core/tests/data/import_baselines/render_source_usda-c512149bf344cb6d-1.image new file mode 100644 index 000000000..8aad9360c --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/render_source_usda-c512149bf344cb6d-1.image @@ -0,0 +1 @@ +8x8 16spp clamp-off 9fa9e040e0eedf25 diff --git a/crates/crust-core/tests/data/import_baselines/render_source_usda-ed9fdfef9ca2d27c-1.digest b/crates/crust-core/tests/data/import_baselines/render_source_usda-ed9fdfef9ca2d27c-1.digest new file mode 100644 index 000000000..5930d1ec6 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/render_source_usda-ed9fdfef9ca2d27c-1.digest @@ -0,0 +1,16 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/World/CharCam") +camera: Camera { origin: Vec3A(1.0, 0.0, 10.0), lower_left_corner: Vec3A(-1.0954998, -2.0954998, 0.0), horizontal: Vec3A(4.1909995, 0.0, 0.0), vertical: Vec3A(0.0, 4.1909995, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: Some("/Render/settings") +settings: RenderSettings { samples_per_pixel: 3, max_depth: 32, width: 8, height: 8, region: PixelRect { x0: 0, y0: 0, x1: 8, y1: 8 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: Some(PassSummary { path: "/Render/Passes/plain", holdouts: 0, camera_hidden: 0 }) +source: Source { lens: Some(Lens { focal_length: 50.0, aperture: [20.955, 15.2908], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 10.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/render_source.usda"], invisible_overrides: Some(0) } +layer: $DIR/render_source.usda +lights: 0 +volumes: 0 +world: 0 geometries, PrimitiveBreakdown { triangles: 0, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 0, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: Some("/Render/Passes/plain"), keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/World/CharCam"), cameras: ["/World/CharCam", "/World/Cam"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/World/CharCam"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/render_source_usda-ed9fdfef9ca2d27c-1.image b/crates/crust-core/tests/data/import_baselines/render_source_usda-ed9fdfef9ca2d27c-1.image new file mode 100644 index 000000000..8aad9360c --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/render_source_usda-ed9fdfef9ca2d27c-1.image @@ -0,0 +1 @@ +8x8 16spp clamp-off 9fa9e040e0eedf25 diff --git a/crates/crust-core/tests/data/import_baselines/reset_disk_usda-6e0b5adab74a3b7a-1.digest b/crates/crust-core/tests/data/import_baselines/reset_disk_usda-6e0b5adab74a3b7a-1.digest new file mode 100644 index 000000000..7617fe402 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/reset_disk_usda-6e0b5adab74a3b7a-1.digest @@ -0,0 +1,21 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: None +camera: Camera { origin: Vec3A(15.0, 3.0, 3.0), lower_left_corner: Vec3A(4.8863316, -0.044797063, 4.174048), horizontal: Vec3A(1.2295314, 0.0, -6.147657), vertical: Vec3A(-0.44830504, 3.4967792, -0.08966101), u: Vec3A(0.19611613, 0.0, -0.9805807), v: Vec3A(-0.1271232, 0.991561, -0.02542464), lens_radius: 0.05, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: None +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 640, height: 360, region: PixelRect { x0: 0, y0: 0, x1: 640, y1: 360 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: None, depth_of_field: true, motion_blur: false, layer_stack: ["$DIR/reset_disk.usda"], invisible_overrides: Some(0) } +layer: $DIR/reset_disk.usda +warning: Warning { code: CameraMissing, kind: Skipped, count: 1, prims: [], message: "USD stage has no UsdGeomCamera — falling back to world::get_settings camera" } +lights: 1 +light 0: area name Some("/W/D") lpe None pmf 1.0 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 1 geometries, PrimitiveBreakdown { triangles: 0, spheres: 0, disks: 1, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 0, spheres: 0, disks: 1, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +geom 0: material #0 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:7631040c30c8e685 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=1:7631040c30c8e685 +provenance light /W/D: LightOrigin { index: 0, geoms: 0..1 } +provenance geometry 0..1: /W/D +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: None, cameras: [], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: None, offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/reset_disk_usda-6e0b5adab74a3b7a-1.image b/crates/crust-core/tests/data/import_baselines/reset_disk_usda-6e0b5adab74a3b7a-1.image new file mode 100644 index 000000000..c734c5b1d --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/reset_disk_usda-6e0b5adab74a3b7a-1.image @@ -0,0 +1 @@ +640x360 16spp clamp-off a04a09c0d4b5e325 diff --git a/crates/crust-core/tests/data/import_baselines/resolution_negative_usda-0d18504e846cea31-1.digest b/crates/crust-core/tests/data/import_baselines/resolution_negative_usda-0d18504e846cea31-1.digest new file mode 100644 index 000000000..cdc7467e1 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/resolution_negative_usda-0d18504e846cea31-1.digest @@ -0,0 +1,17 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/World/Cam") +camera: Camera { origin: Vec3A(0.0, 0.0, 0.0), lower_left_corner: Vec3A(-2.7183647, -1.5290802, -10.0), horizontal: Vec3A(5.4367294, 0.0, 0.0), vertical: Vec3A(0.0, 3.0581603, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: Some("/Render/settings") +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 640, height: 360, region: PixelRect { x0: 0, y0: 0, x1: 640, y1: 360 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 50.0, aperture: [20.955, 15.2908], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 10.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/resolution_negative.usda"], invisible_overrides: Some(0) } +layer: $DIR/resolution_negative.usda +warning: Warning { code: SettingsInvalidValue, kind: Refused, count: 1, prims: ["/Render/settings"], message: "resolution = (-640, 360) is not a positive size — using (640, 360)" } +lights: 0 +volumes: 0 +world: 0 geometries, PrimitiveBreakdown { triangles: 0, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 0, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/World/Cam"), cameras: ["/World/Cam"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/World/Cam"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/resolution_negative_usda-0d18504e846cea31-1.image b/crates/crust-core/tests/data/import_baselines/resolution_negative_usda-0d18504e846cea31-1.image new file mode 100644 index 000000000..c734c5b1d --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/resolution_negative_usda-0d18504e846cea31-1.image @@ -0,0 +1 @@ +640x360 16spp clamp-off a04a09c0d4b5e325 diff --git a/crates/crust-core/tests/data/import_baselines/resolution_zero_usda-e3f58678deb9aa30-1.digest b/crates/crust-core/tests/data/import_baselines/resolution_zero_usda-e3f58678deb9aa30-1.digest new file mode 100644 index 000000000..7dcac87b3 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/resolution_zero_usda-e3f58678deb9aa30-1.digest @@ -0,0 +1,17 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/World/Cam") +camera: Camera { origin: Vec3A(0.0, 0.0, 0.0), lower_left_corner: Vec3A(-2.7183647, -1.5290802, -10.0), horizontal: Vec3A(5.4367294, 0.0, 0.0), vertical: Vec3A(0.0, 3.0581603, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: Some("/Render/settings") +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 640, height: 360, region: PixelRect { x0: 0, y0: 0, x1: 640, y1: 360 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 50.0, aperture: [20.955, 15.2908], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 10.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/resolution_zero.usda"], invisible_overrides: Some(0) } +layer: $DIR/resolution_zero.usda +warning: Warning { code: SettingsInvalidValue, kind: Refused, count: 1, prims: ["/Render/settings"], message: "resolution = (640, 0) is not a positive size — using (640, 360)" } +lights: 0 +volumes: 0 +world: 0 geometries, PrimitiveBreakdown { triangles: 0, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 0, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/World/Cam"), cameras: ["/World/Cam"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/World/Cam"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/resolution_zero_usda-e3f58678deb9aa30-1.image b/crates/crust-core/tests/data/import_baselines/resolution_zero_usda-e3f58678deb9aa30-1.image new file mode 100644 index 000000000..c734c5b1d --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/resolution_zero_usda-e3f58678deb9aa30-1.image @@ -0,0 +1 @@ +640x360 16spp clamp-off a04a09c0d4b5e325 diff --git a/crates/crust-core/tests/data/import_baselines/rest_usda-feaaa720bb9a30d2-1.digest b/crates/crust-core/tests/data/import_baselines/rest_usda-feaaa720bb9a30d2-1.digest new file mode 100644 index 000000000..7eb1b2812 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/rest_usda-feaaa720bb9a30d2-1.digest @@ -0,0 +1,22 @@ +time: Some(5.0) +working space: Linear Rec.709 (sRGB) +camera path: Some("/World/cam") +camera: Camera { origin: Vec3A(0.0, 0.0, 10.0), lower_left_corner: Vec3A(-2.0955, -1.5716249, 0.0), horizontal: Vec3A(4.191, 0.0, 0.0), vertical: Vec3A(0.0, 3.1432498, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: Some("/Render/settings") +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 48, height: 36, region: PixelRect { x0: 0, y0: 0, x1: 48, y1: 36 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 5, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [AovProduct { prim_path: "/Render/p", name: "p.exr", vars: [AovVar { prim_path: "/Render/P", name: "P", channel_prefix: None, source: P, components: 3, precision: Float, accumulation: Closest, clear: 0.0, expression: None, raw: false, variance: false }, AovVar { prim_path: "/Render/Pref", name: "Pref", channel_prefix: None, source: Primvar(PrimvarSource { index: 0, components: 3, role: Vector }), components: 3, precision: Float, accumulation: Closest, clear: 0.0, expression: None, raw: false, variance: false }, AovVar { prim_path: "/Render/rest2", name: "rest2", channel_prefix: None, source: Primvar(PrimvarSource { index: 0, components: 3, role: Vector }), components: 3, precision: Float, accumulation: Closest, clear: 0.0, expression: None, raw: false, variance: false }], attributes: [] }], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 50.0, aperture: [20.955, 15.2908], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 10.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/rest.usda"], invisible_overrides: Some(0) } +layer: $DIR/rest.usda +lights: 1 +light 0: dome name Some("/World/dome") lpe None pmf 1.0 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 1 geometries, PrimitiveBreakdown { triangles: 2, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 2, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov Some((Some(0), false)) swapped false curves false scale 1.0 motion [] pieces all=2:81a82f46abb10d85 camera=2:81a82f46abb10d85 shadow=2:81a82f46abb10d85 indirect=2:81a82f46abb10d85 +provenance light /World/dome: LightOrigin { index: 0, geoms: 1..1 } +provenance geometry 0..1: /World/move/mesh +provenance mesh: MeshOrigin { geom_id: 0, slot: 0, baked: true, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 11801363609627443368, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: Some(5.0), camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/World/cam"), cameras: ["/World/cam"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [("rest", 3)], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/World/cam"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/rest_usda-feaaa720bb9a30d2-1.image b/crates/crust-core/tests/data/import_baselines/rest_usda-feaaa720bb9a30d2-1.image new file mode 100644 index 000000000..9a20c3625 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/rest_usda-feaaa720bb9a30d2-1.image @@ -0,0 +1 @@ +48x36 16spp clamp-off 5864db35cae6a0d6 diff --git a/crates/crust-core/tests/data/import_baselines/root_usda-00dd7b68b86c7168-1.digest b/crates/crust-core/tests/data/import_baselines/root_usda-00dd7b68b86c7168-1.digest new file mode 100644 index 000000000..bbaf55efe --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/root_usda-00dd7b68b86c7168-1.digest @@ -0,0 +1,48 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/scene/camera1") +camera: Camera { origin: Vec3A(0.0074343784, 1.9913422, 4.0133057), lower_left_corner: Vec3A(-6.659224, -3.0086517, -0.98669434), horizontal: Vec3A(13.333317, 0.0, 0.0), vertical: Vec3A(0.0, 9.999988, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: Some(Vec4(0.0, 0.0, -1.0, 3.9133058)), far: Some(Vec4(0.0, 0.0, 1.0, 9995.986)), planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: Some("/Render/settings") +settings: RenderSettings { samples_per_pixel: 4, max_depth: 32, width: 24, height: 18, region: PixelRect { x0: 0, y0: 0, x1: 24, y1: 18 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 12.700017, aperture: [25.4, 25.4], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 5.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/root.usda", "$DIR/graph.usda", "$ROOT/samples/cornellbox.usda"], invisible_overrides: Some(0) } +layer: $ROOT/samples/cornellbox.usda +layer: $DIR/graph.usda +layer: $DIR/root.usda +warning: Warning { code: MaterialFallbackDefault, kind: Skipped, count: 1, prims: ["/scene/Looks/initialShadingGroup"], message: "Material /scene/Looks/initialShadingGroup has no surface shader — using default grey OpenPBR" } +lights: 1 +light 0: dome name Some("/scene/Sky") lpe None pmf 1.0 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 7 geometries, PrimitiveBreakdown { triangles: 822, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 4 } top level, PrimitiveBreakdown { triangles: 1594, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 4 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=12:6ba7fa1f4b7d63b1 camera=12:6ba7fa1f4b7d63b1 shadow=12:6ba7fa1f4b7d63b1 indirect=12:6ba7fa1f4b7d63b1 +geom 1: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=12:c5b0a0b61c94f9d1 camera=12:c5b0a0b61c94f9d1 shadow=12:c5b0a0b61c94f9d1 indirect=12:c5b0a0b61c94f9d1 +geom 2: material #1 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.3585339 motion [] pieces all=760:2344ecf63e12c441 camera=760:2344ecf63e12c441 shadow=760:2344ecf63e12c441 indirect=760:2344ecf63e12c441 +geom 3: material #1 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.25 motion [] pieces all=800:4a8c9f44d777e131 camera=800:4a8c9f44d777e131 shadow=800:4a8c9f44d777e131 indirect=800:4a8c9f44d777e131 +geom 4: material #1 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=12:94a297badef437e1 camera=12:94a297badef437e1 shadow=12:94a297badef437e1 indirect=12:94a297badef437e1 +geom 5: material #1 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.2 motion [] pieces all=760:c2b60a75c52c78b9 camera=760:c2b60a75c52c78b9 shadow=760:c2b60a75c52c78b9 indirect=760:c2b60a75c52c78b9 +geom 6: material #1 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 4.0 motion [] pieces all=10:88b22fc3345d5b05 camera=10:88b22fc3345d5b05 shadow=10:88b22fc3345d5b05 indirect=10:88b22fc3345d5b05 +provenance material /scene/Looks/initialShadingGroup: MaterialOrigin { slots: [2, 3, 4, 5, 6], displaced: false } +provenance light /scene/Sky: LightOrigin { index: 0, geoms: 7..7 } +provenance geometry 0..1: /scene/B +provenance geometry 1..2: /scene/A +provenance geometry 2..3: /scene/pSphere2 +provenance geometry 3..4: /scene/pTorus1 +provenance geometry 4..5: /scene/pCube2 +provenance geometry 5..6: /scene/pSphere1 +provenance geometry 6..7: /scene/pCube1 +provenance mesh: MeshOrigin { geom_id: 0, slot: 0, baked: false, moving: false } +provenance mesh: MeshOrigin { geom_id: 1, slot: 0, baked: false, moving: false } +provenance mesh: MeshOrigin { geom_id: 2, slot: 1, baked: false, moving: false } +provenance mesh: MeshOrigin { geom_id: 3, slot: 2, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 4, slot: 3, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 5, slot: 1, baked: false, moving: false } +provenance mesh: MeshOrigin { geom_id: 6, slot: 4, baked: true, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 2751766912162545003, n_points: 8, n_indices: 24, n_uvs: None, smooth: false, material: 0 }), placements: 2, shared: false, displaced: false } +provenance mesh slot 1: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 17119738035130870988, n_points: 382, n_indices: 1560, n_uvs: None, smooth: false, material: 1 }), placements: 2, shared: false, displaced: false } +provenance mesh slot 2: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 6096447469814747168, n_points: 400, n_indices: 1600, n_uvs: None, smooth: false, material: 1 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 3: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 1739488954094729910, n_points: 8, n_indices: 24, n_uvs: None, smooth: false, material: 1 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 4: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 12343188411137242430, n_points: 8, n_indices: 20, n_uvs: None, smooth: false, material: 1 }), placements: 1, shared: false, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: true }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/scene/camera1"), cameras: ["/scene/camera1"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/scene/camera1"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/root_usda-00dd7b68b86c7168-1.image b/crates/crust-core/tests/data/import_baselines/root_usda-00dd7b68b86c7168-1.image new file mode 100644 index 000000000..b8cc78d5a --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/root_usda-00dd7b68b86c7168-1.image @@ -0,0 +1 @@ +24x18 16spp clamp-off dcea69b0ecf972fb diff --git a/crates/crust-core/tests/data/import_baselines/root_usda-00e8d0d9a2f465b9-1.digest b/crates/crust-core/tests/data/import_baselines/root_usda-00e8d0d9a2f465b9-1.digest new file mode 100644 index 000000000..ff0b1b4b6 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/root_usda-00e8d0d9a2f465b9-1.digest @@ -0,0 +1,41 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/scene/camera1") +camera: Camera { origin: Vec3A(0.0074343784, 1.9913422, 4.0133057), lower_left_corner: Vec3A(-6.659224, -3.0086517, -0.98669434), horizontal: Vec3A(13.333317, 0.0, 0.0), vertical: Vec3A(0.0, 9.999988, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: Some(Vec4(0.0, 0.0, -1.0, 3.9133058)), far: Some(Vec4(0.0, 0.0, 1.0, 9995.986)), planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: Some("/Render/settings") +settings: RenderSettings { samples_per_pixel: 4, max_depth: 32, width: 24, height: 18, region: PixelRect { x0: 0, y0: 0, x1: 24, y1: 18 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 12.700017, aperture: [25.4, 25.4], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 5.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/root.usda", "$DIR/graph.usda", "$ROOT/samples/cornellbox.usda"], invisible_overrides: Some(0) } +layer: $ROOT/samples/cornellbox.usda +layer: $DIR/graph.usda +layer: $DIR/root.usda +warning: Warning { code: MaterialFallbackDefault, kind: Skipped, count: 1, prims: ["/scene/Looks/initialShadingGroup"], message: "Material /scene/Looks/initialShadingGroup has no surface shader — using default grey OpenPBR" } +lights: 1 +light 0: dome name Some("/scene/Sky") lpe None pmf 1.0 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 5 geometries, PrimitiveBreakdown { triangles: 822, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 2 } top level, PrimitiveBreakdown { triangles: 1582, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 2 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.3585339 motion [] pieces all=760:2344ecf63e12c441 camera=760:2344ecf63e12c441 shadow=760:2344ecf63e12c441 indirect=760:2344ecf63e12c441 +geom 1: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.25 motion [] pieces all=800:4a8c9f44d777e131 camera=800:4a8c9f44d777e131 shadow=800:4a8c9f44d777e131 indirect=800:4a8c9f44d777e131 +geom 2: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=12:94a297badef437e1 camera=12:94a297badef437e1 shadow=12:94a297badef437e1 indirect=12:94a297badef437e1 +geom 3: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.2 motion [] pieces all=760:c2b60a75c52c78b9 camera=760:c2b60a75c52c78b9 shadow=760:c2b60a75c52c78b9 indirect=760:c2b60a75c52c78b9 +geom 4: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 4.0 motion [] pieces all=10:88b22fc3345d5b05 camera=10:88b22fc3345d5b05 shadow=10:88b22fc3345d5b05 indirect=10:88b22fc3345d5b05 +provenance material /scene/Looks/initialShadingGroup: MaterialOrigin { slots: [0, 1, 2, 3, 4], displaced: false } +provenance light /scene/Sky: LightOrigin { index: 0, geoms: 5..5 } +provenance geometry 0..1: /scene/pSphere2 +provenance geometry 1..2: /scene/pTorus1 +provenance geometry 2..3: /scene/pCube2 +provenance geometry 3..4: /scene/pSphere1 +provenance geometry 4..5: /scene/pCube1 +provenance mesh: MeshOrigin { geom_id: 0, slot: 0, baked: false, moving: false } +provenance mesh: MeshOrigin { geom_id: 1, slot: 1, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 2, slot: 2, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 3, slot: 0, baked: false, moving: false } +provenance mesh: MeshOrigin { geom_id: 4, slot: 3, baked: true, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 17119738035130870988, n_points: 382, n_indices: 1560, n_uvs: None, smooth: false, material: 0 }), placements: 2, shared: false, displaced: false } +provenance mesh slot 1: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 6096447469814747168, n_points: 400, n_indices: 1600, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 2: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 1739488954094729910, n_points: 8, n_indices: 24, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 3: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 12343188411137242430, n_points: 8, n_indices: 20, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: true }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/scene/camera1"), cameras: ["/scene/camera1"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/scene/camera1"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/root_usda-00e8d0d9a2f465b9-1.image b/crates/crust-core/tests/data/import_baselines/root_usda-00e8d0d9a2f465b9-1.image new file mode 100644 index 000000000..8dc57eb06 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/root_usda-00e8d0d9a2f465b9-1.image @@ -0,0 +1 @@ +24x18 16spp clamp-off f0c2a6137cc49d6d diff --git a/crates/crust-core/tests/data/import_baselines/root_usda-1ddeac0a2964315c-1.digest b/crates/crust-core/tests/data/import_baselines/root_usda-1ddeac0a2964315c-1.digest new file mode 100644 index 000000000..9f2838b80 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/root_usda-1ddeac0a2964315c-1.digest @@ -0,0 +1,43 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/scene/camera1") +camera: Camera { origin: Vec3A(0.0074343784, 1.9913422, 4.0133057), lower_left_corner: Vec3A(-6.659224, -3.0086517, -0.98669434), horizontal: Vec3A(13.333317, 0.0, 0.0), vertical: Vec3A(0.0, 9.999988, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: Some(Vec4(0.0, 0.0, -1.0, 3.9133058)), far: Some(Vec4(0.0, 0.0, 1.0, 9995.986)), planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: Some("/Render/settings") +settings: RenderSettings { samples_per_pixel: 4, max_depth: 32, width: 24, height: 18, region: PixelRect { x0: 0, y0: 0, x1: 24, y1: 18 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 12.700017, aperture: [25.4, 25.4], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 5.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/root.usda", "$DIR/graph.usda", "$ROOT/samples/cornellbox.usda"], invisible_overrides: Some(0) } +layer: $ROOT/samples/cornellbox.usda +layer: $DIR/graph.usda +layer: $DIR/root.usda +warning: Warning { code: MaterialFallbackDefault, kind: Skipped, count: 1, prims: ["/scene/Looks/initialShadingGroup"], message: "Material /scene/Looks/initialShadingGroup has no surface shader — using default grey OpenPBR" } +lights: 2 +light 0: distant name Some("/scene/Sun") lpe None pmf 0.5 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 1: dome name Some("/scene/Sky") lpe None pmf 0.5 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 5 geometries, PrimitiveBreakdown { triangles: 822, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 2 } top level, PrimitiveBreakdown { triangles: 1582, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 2 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.3585339 motion [] pieces all=760:2344ecf63e12c441 camera=760:2344ecf63e12c441 shadow=760:2344ecf63e12c441 indirect=760:2344ecf63e12c441 +geom 1: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.25 motion [] pieces all=800:4a8c9f44d777e131 camera=800:4a8c9f44d777e131 shadow=800:4a8c9f44d777e131 indirect=800:4a8c9f44d777e131 +geom 2: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=12:94a297badef437e1 camera=12:94a297badef437e1 shadow=12:94a297badef437e1 indirect=12:94a297badef437e1 +geom 3: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.2 motion [] pieces all=760:c2b60a75c52c78b9 camera=760:c2b60a75c52c78b9 shadow=760:c2b60a75c52c78b9 indirect=760:c2b60a75c52c78b9 +geom 4: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 4.0 motion [] pieces all=10:88b22fc3345d5b05 camera=10:88b22fc3345d5b05 shadow=10:88b22fc3345d5b05 indirect=10:88b22fc3345d5b05 +provenance material /scene/Looks/initialShadingGroup: MaterialOrigin { slots: [0, 1, 2, 3, 4], displaced: false } +provenance light /scene/Sky: LightOrigin { index: 1, geoms: 5..5 } +provenance light /scene/Sun: LightOrigin { index: 0, geoms: 0..0 } +provenance geometry 0..1: /scene/pSphere2 +provenance geometry 1..2: /scene/pTorus1 +provenance geometry 2..3: /scene/pCube2 +provenance geometry 3..4: /scene/pSphere1 +provenance geometry 4..5: /scene/pCube1 +provenance mesh: MeshOrigin { geom_id: 0, slot: 0, baked: false, moving: false } +provenance mesh: MeshOrigin { geom_id: 1, slot: 1, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 2, slot: 2, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 3, slot: 0, baked: false, moving: false } +provenance mesh: MeshOrigin { geom_id: 4, slot: 3, baked: true, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 17119738035130870988, n_points: 382, n_indices: 1560, n_uvs: None, smooth: false, material: 0 }), placements: 2, shared: false, displaced: false } +provenance mesh slot 1: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 6096447469814747168, n_points: 400, n_indices: 1600, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 2: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 1739488954094729910, n_points: 8, n_indices: 24, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 3: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 12343188411137242430, n_points: 8, n_indices: 20, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: true }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/scene/camera1"), cameras: ["/scene/camera1"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/scene/camera1"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/root_usda-1ddeac0a2964315c-1.image b/crates/crust-core/tests/data/import_baselines/root_usda-1ddeac0a2964315c-1.image new file mode 100644 index 000000000..38bdc380f --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/root_usda-1ddeac0a2964315c-1.image @@ -0,0 +1 @@ +24x18 16spp clamp-off 691da2de7281266e diff --git a/crates/crust-core/tests/data/import_baselines/root_usda-2f86c31117cc8b58-1.digest b/crates/crust-core/tests/data/import_baselines/root_usda-2f86c31117cc8b58-1.digest new file mode 100644 index 000000000..9f2838b80 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/root_usda-2f86c31117cc8b58-1.digest @@ -0,0 +1,43 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/scene/camera1") +camera: Camera { origin: Vec3A(0.0074343784, 1.9913422, 4.0133057), lower_left_corner: Vec3A(-6.659224, -3.0086517, -0.98669434), horizontal: Vec3A(13.333317, 0.0, 0.0), vertical: Vec3A(0.0, 9.999988, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: Some(Vec4(0.0, 0.0, -1.0, 3.9133058)), far: Some(Vec4(0.0, 0.0, 1.0, 9995.986)), planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: Some("/Render/settings") +settings: RenderSettings { samples_per_pixel: 4, max_depth: 32, width: 24, height: 18, region: PixelRect { x0: 0, y0: 0, x1: 24, y1: 18 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 12.700017, aperture: [25.4, 25.4], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 5.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/root.usda", "$DIR/graph.usda", "$ROOT/samples/cornellbox.usda"], invisible_overrides: Some(0) } +layer: $ROOT/samples/cornellbox.usda +layer: $DIR/graph.usda +layer: $DIR/root.usda +warning: Warning { code: MaterialFallbackDefault, kind: Skipped, count: 1, prims: ["/scene/Looks/initialShadingGroup"], message: "Material /scene/Looks/initialShadingGroup has no surface shader — using default grey OpenPBR" } +lights: 2 +light 0: distant name Some("/scene/Sun") lpe None pmf 0.5 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 1: dome name Some("/scene/Sky") lpe None pmf 0.5 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 5 geometries, PrimitiveBreakdown { triangles: 822, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 2 } top level, PrimitiveBreakdown { triangles: 1582, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 2 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.3585339 motion [] pieces all=760:2344ecf63e12c441 camera=760:2344ecf63e12c441 shadow=760:2344ecf63e12c441 indirect=760:2344ecf63e12c441 +geom 1: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.25 motion [] pieces all=800:4a8c9f44d777e131 camera=800:4a8c9f44d777e131 shadow=800:4a8c9f44d777e131 indirect=800:4a8c9f44d777e131 +geom 2: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=12:94a297badef437e1 camera=12:94a297badef437e1 shadow=12:94a297badef437e1 indirect=12:94a297badef437e1 +geom 3: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.2 motion [] pieces all=760:c2b60a75c52c78b9 camera=760:c2b60a75c52c78b9 shadow=760:c2b60a75c52c78b9 indirect=760:c2b60a75c52c78b9 +geom 4: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 4.0 motion [] pieces all=10:88b22fc3345d5b05 camera=10:88b22fc3345d5b05 shadow=10:88b22fc3345d5b05 indirect=10:88b22fc3345d5b05 +provenance material /scene/Looks/initialShadingGroup: MaterialOrigin { slots: [0, 1, 2, 3, 4], displaced: false } +provenance light /scene/Sky: LightOrigin { index: 1, geoms: 5..5 } +provenance light /scene/Sun: LightOrigin { index: 0, geoms: 0..0 } +provenance geometry 0..1: /scene/pSphere2 +provenance geometry 1..2: /scene/pTorus1 +provenance geometry 2..3: /scene/pCube2 +provenance geometry 3..4: /scene/pSphere1 +provenance geometry 4..5: /scene/pCube1 +provenance mesh: MeshOrigin { geom_id: 0, slot: 0, baked: false, moving: false } +provenance mesh: MeshOrigin { geom_id: 1, slot: 1, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 2, slot: 2, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 3, slot: 0, baked: false, moving: false } +provenance mesh: MeshOrigin { geom_id: 4, slot: 3, baked: true, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 17119738035130870988, n_points: 382, n_indices: 1560, n_uvs: None, smooth: false, material: 0 }), placements: 2, shared: false, displaced: false } +provenance mesh slot 1: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 6096447469814747168, n_points: 400, n_indices: 1600, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 2: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 1739488954094729910, n_points: 8, n_indices: 24, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 3: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 12343188411137242430, n_points: 8, n_indices: 20, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: true }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/scene/camera1"), cameras: ["/scene/camera1"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/scene/camera1"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/root_usda-2f86c31117cc8b58-1.image b/crates/crust-core/tests/data/import_baselines/root_usda-2f86c31117cc8b58-1.image new file mode 100644 index 000000000..7bcdd7320 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/root_usda-2f86c31117cc8b58-1.image @@ -0,0 +1 @@ +24x18 16spp clamp-off dd18522f4775ef1d diff --git a/crates/crust-core/tests/data/import_baselines/root_usda-43c385d7a2a21d1e-1.digest b/crates/crust-core/tests/data/import_baselines/root_usda-43c385d7a2a21d1e-1.digest new file mode 100644 index 000000000..962020b35 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/root_usda-43c385d7a2a21d1e-1.digest @@ -0,0 +1,41 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/scene/camera1") +camera: Camera { origin: Vec3A(0.0074343784, 1.9913422, 4.0133057), lower_left_corner: Vec3A(-6.659224, -3.0086517, -0.98669434), horizontal: Vec3A(13.333317, 0.0, 0.0), vertical: Vec3A(0.0, 9.999988, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: Some(Vec4(0.0, 0.0, -1.0, 3.9133058)), far: Some(Vec4(0.0, 0.0, 1.0, 9995.986)), planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: Some("/Render/settings") +settings: RenderSettings { samples_per_pixel: 4, max_depth: 32, width: 24, height: 18, region: PixelRect { x0: 0, y0: 0, x1: 24, y1: 18 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 12.700017, aperture: [25.4, 25.4], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 5.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/root.usda", "$DIR/graph.usda", "$ROOT/samples/cornellbox.usda"], invisible_overrides: Some(0) } +layer: $ROOT/samples/cornellbox.usda +layer: $DIR/graph.usda +layer: $DIR/root.usda +warning: Warning { code: MaterialFallbackDefault, kind: Skipped, count: 1, prims: ["/scene/Looks/initialShadingGroup"], message: "Material /scene/Looks/initialShadingGroup has no surface shader — using default grey OpenPBR" } +lights: 1 +light 0: dome name Some("/scene/Sky") lpe None pmf 1.0 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 5 geometries, PrimitiveBreakdown { triangles: 822, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 2 } top level, PrimitiveBreakdown { triangles: 1582, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 2 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.3585339 motion [] pieces all=760:2344ecf63e12c441 camera=760:2344ecf63e12c441 shadow=760:2344ecf63e12c441 indirect=760:2344ecf63e12c441 +geom 1: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.25 motion [] pieces all=800:4a8c9f44d777e131 camera=800:4a8c9f44d777e131 shadow=800:4a8c9f44d777e131 indirect=800:4a8c9f44d777e131 +geom 2: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=12:94a297badef437e1 camera=12:94a297badef437e1 shadow=12:94a297badef437e1 indirect=12:94a297badef437e1 +geom 3: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.26566464 motion [] pieces all=760:7c05a8f71e76f3a1 camera=760:7c05a8f71e76f3a1 shadow=760:7c05a8f71e76f3a1 indirect=760:7c05a8f71e76f3a1 +geom 4: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 4.0 motion [] pieces all=10:88b22fc3345d5b05 camera=10:88b22fc3345d5b05 shadow=10:88b22fc3345d5b05 indirect=10:88b22fc3345d5b05 +provenance material /scene/Looks/initialShadingGroup: MaterialOrigin { slots: [0, 1, 2, 3, 4], displaced: false } +provenance light /scene/Sky: LightOrigin { index: 0, geoms: 5..5 } +provenance geometry 0..1: /scene/pSphere2 +provenance geometry 1..2: /scene/pTorus1 +provenance geometry 2..3: /scene/pCube2 +provenance geometry 3..4: /scene/pSphere1 +provenance geometry 4..5: /scene/pCube1 +provenance mesh: MeshOrigin { geom_id: 0, slot: 0, baked: false, moving: false } +provenance mesh: MeshOrigin { geom_id: 1, slot: 1, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 2, slot: 2, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 3, slot: 0, baked: false, moving: false } +provenance mesh: MeshOrigin { geom_id: 4, slot: 3, baked: true, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 17119738035130870988, n_points: 382, n_indices: 1560, n_uvs: None, smooth: false, material: 0 }), placements: 2, shared: false, displaced: false } +provenance mesh slot 1: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 6096447469814747168, n_points: 400, n_indices: 1600, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 2: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 1739488954094729910, n_points: 8, n_indices: 24, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 3: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 12343188411137242430, n_points: 8, n_indices: 20, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: true }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/scene/camera1"), cameras: ["/scene/camera1"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/scene/camera1"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/root_usda-43c385d7a2a21d1e-1.image b/crates/crust-core/tests/data/import_baselines/root_usda-43c385d7a2a21d1e-1.image new file mode 100644 index 000000000..687c6c667 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/root_usda-43c385d7a2a21d1e-1.image @@ -0,0 +1 @@ +24x18 16spp clamp-off 8c0d9707a3840307 diff --git a/crates/crust-core/tests/data/import_baselines/root_usda-4aa136053cd56402-1.digest b/crates/crust-core/tests/data/import_baselines/root_usda-4aa136053cd56402-1.digest new file mode 100644 index 000000000..c82aea256 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/root_usda-4aa136053cd56402-1.digest @@ -0,0 +1,41 @@ +time: Some(10.0) +working space: Linear Rec.709 (sRGB) +camera path: Some("/scene/camera1") +camera: Camera { origin: Vec3A(0.0074343784, 1.9913422, 4.0133057), lower_left_corner: Vec3A(-6.659224, -3.0086517, -0.98669434), horizontal: Vec3A(13.333317, 0.0, 0.0), vertical: Vec3A(0.0, 9.999988, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: Some(Vec4(0.0, 0.0, -1.0, 3.9133058)), far: Some(Vec4(0.0, 0.0, 1.0, 9995.986)), planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: Some("/Render/settings") +settings: RenderSettings { samples_per_pixel: 4, max_depth: 32, width: 24, height: 18, region: PixelRect { x0: 0, y0: 0, x1: 24, y1: 18 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 10, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 12.700017, aperture: [25.4, 25.4], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 5.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/root.usda", "$DIR/graph.usda", "$ROOT/samples/cornellbox.usda"], invisible_overrides: Some(0) } +layer: $ROOT/samples/cornellbox.usda +layer: $DIR/graph.usda +layer: $DIR/root.usda +warning: Warning { code: MaterialFallbackDefault, kind: Skipped, count: 1, prims: ["/scene/Looks/initialShadingGroup"], message: "Material /scene/Looks/initialShadingGroup has no surface shader — using default grey OpenPBR" } +lights: 1 +light 0: dome name Some("/scene/Sky") lpe None pmf 1.0 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 5 geometries, PrimitiveBreakdown { triangles: 822, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 2 } top level, PrimitiveBreakdown { triangles: 1582, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 2 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.3585339 motion [] pieces all=760:2344ecf63e12c441 camera=760:2344ecf63e12c441 shadow=760:2344ecf63e12c441 indirect=760:2344ecf63e12c441 +geom 1: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.25 motion [] pieces all=800:4a8c9f44d777e131 camera=800:4a8c9f44d777e131 shadow=800:4a8c9f44d777e131 indirect=800:4a8c9f44d777e131 +geom 2: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=12:fd14628a4ad8ed19 camera=12:fd14628a4ad8ed19 shadow=12:fd14628a4ad8ed19 indirect=12:fd14628a4ad8ed19 +geom 3: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.2 motion [] pieces all=760:c2b60a75c52c78b9 camera=760:c2b60a75c52c78b9 shadow=760:c2b60a75c52c78b9 indirect=760:c2b60a75c52c78b9 +geom 4: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 4.0 motion [] pieces all=10:88b22fc3345d5b05 camera=10:88b22fc3345d5b05 shadow=10:88b22fc3345d5b05 indirect=10:88b22fc3345d5b05 +provenance material /scene/Looks/initialShadingGroup: MaterialOrigin { slots: [0, 1, 2, 3, 4], displaced: false } +provenance light /scene/Sky: LightOrigin { index: 0, geoms: 5..5 } +provenance geometry 0..1: /scene/pSphere2 +provenance geometry 1..2: /scene/pTorus1 +provenance geometry 2..3: /scene/pCube2 +provenance geometry 3..4: /scene/pSphere1 +provenance geometry 4..5: /scene/pCube1 +provenance mesh: MeshOrigin { geom_id: 0, slot: 0, baked: false, moving: false } +provenance mesh: MeshOrigin { geom_id: 1, slot: 1, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 2, slot: 2, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 3, slot: 0, baked: false, moving: false } +provenance mesh: MeshOrigin { geom_id: 4, slot: 3, baked: true, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 17119738035130870988, n_points: 382, n_indices: 1560, n_uvs: None, smooth: false, material: 0 }), placements: 2, shared: false, displaced: false } +provenance mesh slot 1: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 6096447469814747168, n_points: 400, n_indices: 1600, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 2: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 1739488954094729910, n_points: 8, n_indices: 24, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 3: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 12343188411137242430, n_points: 8, n_indices: 20, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: Some(10.0), camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: true }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/scene/camera1"), cameras: ["/scene/camera1"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/scene/camera1"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/root_usda-4aa136053cd56402-1.image b/crates/crust-core/tests/data/import_baselines/root_usda-4aa136053cd56402-1.image new file mode 100644 index 000000000..eb5dd2f64 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/root_usda-4aa136053cd56402-1.image @@ -0,0 +1 @@ +24x18 16spp clamp-off c29504390e63441f diff --git a/crates/crust-core/tests/data/import_baselines/root_usda-4b8c79cf557cf378-1.digest b/crates/crust-core/tests/data/import_baselines/root_usda-4b8c79cf557cf378-1.digest new file mode 100644 index 000000000..34c342670 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/root_usda-4b8c79cf557cf378-1.digest @@ -0,0 +1,48 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/scene/camera1") +camera: Camera { origin: Vec3A(0.0074343784, 1.9913422, 4.0133057), lower_left_corner: Vec3A(-6.659224, -3.0086517, -0.98669434), horizontal: Vec3A(13.333317, 0.0, 0.0), vertical: Vec3A(0.0, 9.999988, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: Some(Vec4(0.0, 0.0, -1.0, 3.9133058)), far: Some(Vec4(0.0, 0.0, 1.0, 9995.986)), planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: Some("/Render/settings") +settings: RenderSettings { samples_per_pixel: 4, max_depth: 32, width: 24, height: 18, region: PixelRect { x0: 0, y0: 0, x1: 24, y1: 18 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 12.700017, aperture: [25.4, 25.4], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 5.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/root.usda", "$DIR/graph.usda", "$ROOT/samples/cornellbox.usda"], invisible_overrides: Some(0) } +layer: $ROOT/samples/cornellbox.usda +layer: $DIR/graph.usda +layer: $DIR/root.usda +warning: Warning { code: MaterialFallbackDefault, kind: Skipped, count: 1, prims: ["/scene/Looks/initialShadingGroup"], message: "Material /scene/Looks/initialShadingGroup has no surface shader — using default grey OpenPBR" } +lights: 1 +light 0: dome name Some("/scene/Sky") lpe None pmf 1.0 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 7 geometries, PrimitiveBreakdown { triangles: 822, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 4 } top level, PrimitiveBreakdown { triangles: 1594, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 4 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=12:a58c5d6bf990dde9 camera=12:a58c5d6bf990dde9 shadow=12:a58c5d6bf990dde9 indirect=12:a58c5d6bf990dde9 +geom 1: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=12:36dc3e9001cbda9d camera=12:36dc3e9001cbda9d shadow=12:36dc3e9001cbda9d indirect=12:36dc3e9001cbda9d +geom 2: material #1 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.3585339 motion [] pieces all=760:2344ecf63e12c441 camera=760:2344ecf63e12c441 shadow=760:2344ecf63e12c441 indirect=760:2344ecf63e12c441 +geom 3: material #1 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.25 motion [] pieces all=800:4a8c9f44d777e131 camera=800:4a8c9f44d777e131 shadow=800:4a8c9f44d777e131 indirect=800:4a8c9f44d777e131 +geom 4: material #1 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=12:94a297badef437e1 camera=12:94a297badef437e1 shadow=12:94a297badef437e1 indirect=12:94a297badef437e1 +geom 5: material #1 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.2 motion [] pieces all=760:c2b60a75c52c78b9 camera=760:c2b60a75c52c78b9 shadow=760:c2b60a75c52c78b9 indirect=760:c2b60a75c52c78b9 +geom 6: material #1 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 4.0 motion [] pieces all=10:88b22fc3345d5b05 camera=10:88b22fc3345d5b05 shadow=10:88b22fc3345d5b05 indirect=10:88b22fc3345d5b05 +provenance material /scene/Looks/initialShadingGroup: MaterialOrigin { slots: [2, 3, 4, 5, 6], displaced: false } +provenance light /scene/Sky: LightOrigin { index: 0, geoms: 7..7 } +provenance geometry 0..1: /scene/B +provenance geometry 1..2: /scene/A +provenance geometry 2..3: /scene/pSphere2 +provenance geometry 3..4: /scene/pTorus1 +provenance geometry 4..5: /scene/pCube2 +provenance geometry 5..6: /scene/pSphere1 +provenance geometry 6..7: /scene/pCube1 +provenance mesh: MeshOrigin { geom_id: 0, slot: 0, baked: false, moving: false } +provenance mesh: MeshOrigin { geom_id: 1, slot: 0, baked: false, moving: false } +provenance mesh: MeshOrigin { geom_id: 2, slot: 1, baked: false, moving: false } +provenance mesh: MeshOrigin { geom_id: 3, slot: 2, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 4, slot: 3, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 5, slot: 1, baked: false, moving: false } +provenance mesh: MeshOrigin { geom_id: 6, slot: 4, baked: true, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 11423571544592140440, n_points: 8, n_indices: 24, n_uvs: None, smooth: false, material: 0 }), placements: 2, shared: false, displaced: false } +provenance mesh slot 1: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 17119738035130870988, n_points: 382, n_indices: 1560, n_uvs: None, smooth: false, material: 1 }), placements: 2, shared: false, displaced: false } +provenance mesh slot 2: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 6096447469814747168, n_points: 400, n_indices: 1600, n_uvs: None, smooth: false, material: 1 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 3: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 1739488954094729910, n_points: 8, n_indices: 24, n_uvs: None, smooth: false, material: 1 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 4: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 12343188411137242430, n_points: 8, n_indices: 20, n_uvs: None, smooth: false, material: 1 }), placements: 1, shared: false, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: true }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/scene/camera1"), cameras: ["/scene/camera1"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/scene/camera1"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/root_usda-4b8c79cf557cf378-1.image b/crates/crust-core/tests/data/import_baselines/root_usda-4b8c79cf557cf378-1.image new file mode 100644 index 000000000..5b15a8f9a --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/root_usda-4b8c79cf557cf378-1.image @@ -0,0 +1 @@ +24x18 16spp clamp-off 21eec4b33f37f6c9 diff --git a/crates/crust-core/tests/data/import_baselines/root_usda-4e355789b700403e-1.digest b/crates/crust-core/tests/data/import_baselines/root_usda-4e355789b700403e-1.digest new file mode 100644 index 000000000..d86971060 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/root_usda-4e355789b700403e-1.digest @@ -0,0 +1,38 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/World/Cam") +camera: Camera { origin: Vec3A(1.5, 0.5, 6.0), lower_left_corner: Vec3A(-1.2183647, -1.0290802, -4.0), horizontal: Vec3A(5.4367294, 0.0, 0.0), vertical: Vec3A(0.0, 3.0581603, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: None +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 640, height: 360, region: PixelRect { x0: 0, y0: 0, x1: 640, y1: 360 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 50.0, aperture: [20.955, 15.2908], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 10.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/root.usda"], invisible_overrides: Some(0) } +layer: $DIR/assets/deep/asset.usda +layer: $DIR/root.usda +lights: 1 +light 0: area name Some("/World/Thing/Card") lpe None pmf 1.0 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 3 geometries, PrimitiveBreakdown { triangles: 6, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 6, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +geom 0: material #0 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:4285059f3c1013e5 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=2:4285059f3c1013e5 +geom 1: material #1 Signature { kind: "MaterialX", cutout: false, straight: false, boundary: false, emits: false, uv: true, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv Some(0) shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:9d35beb8f32f58b8 camera=2:9d35beb8f32f58b8 shadow=2:9d35beb8f32f58b8 indirect=2:9d35beb8f32f58b8 +geom 2: material #2 Signature { kind: "UsdPreviewSurface (textured)", cutout: false, straight: false, boundary: false, emits: false, uv: true, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv Some(1) shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:02ff87c392969355 camera=2:02ff87c392969355 shadow=2:02ff87c392969355 indirect=2:02ff87c392969355 +provenance material /World/Thing/Looks/M: MaterialOrigin { slots: [2], displaced: false } +provenance material /World/Thing/Looks/X: MaterialOrigin { slots: [1], displaced: false } +provenance material read: ("/Asset/Looks/M", "/World/Thing/Looks/M") +provenance material read: ("/Asset/Looks/M/S", "/World/Thing/Looks/M") +provenance material read: ("/Asset/Looks/M/T", "/World/Thing/Looks/M") +provenance material read: ("/Asset/Looks/M/U", "/World/Thing/Looks/M") +provenance material read: ("/Asset/Looks/X", "/World/Thing/Looks/X") +provenance material read: ("/Asset/Looks/X/I", "/World/Thing/Looks/X") +provenance material read: ("/Asset/Looks/X/S", "/World/Thing/Looks/X") +provenance light /World/Thing/Card: LightOrigin { index: 0, geoms: 0..1 } +provenance geometry 0..1: /World/Thing/Card +provenance geometry 1..2: /World/Thing/R +provenance geometry 2..3: /World/Thing/Q +provenance mesh: MeshOrigin { geom_id: 1, slot: 0, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 2, slot: 1, baked: true, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 18377322456310340000, n_points: 4, n_indices: 4, n_uvs: Some(4), smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 1: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 8791120226565781173, n_points: 4, n_indices: 4, n_uvs: Some(4), smooth: false, material: 1 }), placements: 1, shared: false, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/World/Cam"), cameras: ["/World/Cam"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/World/Cam"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/root_usda-4e355789b700403e-1.image b/crates/crust-core/tests/data/import_baselines/root_usda-4e355789b700403e-1.image new file mode 100644 index 000000000..d866c623b --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/root_usda-4e355789b700403e-1.image @@ -0,0 +1 @@ +640x360 16spp clamp-off de4bdfd600ef69d1 diff --git a/crates/crust-core/tests/data/import_baselines/root_usda-5042b0d1011805d6-1.digest b/crates/crust-core/tests/data/import_baselines/root_usda-5042b0d1011805d6-1.digest new file mode 100644 index 000000000..c82aea256 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/root_usda-5042b0d1011805d6-1.digest @@ -0,0 +1,41 @@ +time: Some(10.0) +working space: Linear Rec.709 (sRGB) +camera path: Some("/scene/camera1") +camera: Camera { origin: Vec3A(0.0074343784, 1.9913422, 4.0133057), lower_left_corner: Vec3A(-6.659224, -3.0086517, -0.98669434), horizontal: Vec3A(13.333317, 0.0, 0.0), vertical: Vec3A(0.0, 9.999988, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: Some(Vec4(0.0, 0.0, -1.0, 3.9133058)), far: Some(Vec4(0.0, 0.0, 1.0, 9995.986)), planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: Some("/Render/settings") +settings: RenderSettings { samples_per_pixel: 4, max_depth: 32, width: 24, height: 18, region: PixelRect { x0: 0, y0: 0, x1: 24, y1: 18 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 10, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 12.700017, aperture: [25.4, 25.4], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 5.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/root.usda", "$DIR/graph.usda", "$ROOT/samples/cornellbox.usda"], invisible_overrides: Some(0) } +layer: $ROOT/samples/cornellbox.usda +layer: $DIR/graph.usda +layer: $DIR/root.usda +warning: Warning { code: MaterialFallbackDefault, kind: Skipped, count: 1, prims: ["/scene/Looks/initialShadingGroup"], message: "Material /scene/Looks/initialShadingGroup has no surface shader — using default grey OpenPBR" } +lights: 1 +light 0: dome name Some("/scene/Sky") lpe None pmf 1.0 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 5 geometries, PrimitiveBreakdown { triangles: 822, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 2 } top level, PrimitiveBreakdown { triangles: 1582, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 2 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.3585339 motion [] pieces all=760:2344ecf63e12c441 camera=760:2344ecf63e12c441 shadow=760:2344ecf63e12c441 indirect=760:2344ecf63e12c441 +geom 1: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.25 motion [] pieces all=800:4a8c9f44d777e131 camera=800:4a8c9f44d777e131 shadow=800:4a8c9f44d777e131 indirect=800:4a8c9f44d777e131 +geom 2: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=12:fd14628a4ad8ed19 camera=12:fd14628a4ad8ed19 shadow=12:fd14628a4ad8ed19 indirect=12:fd14628a4ad8ed19 +geom 3: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.2 motion [] pieces all=760:c2b60a75c52c78b9 camera=760:c2b60a75c52c78b9 shadow=760:c2b60a75c52c78b9 indirect=760:c2b60a75c52c78b9 +geom 4: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 4.0 motion [] pieces all=10:88b22fc3345d5b05 camera=10:88b22fc3345d5b05 shadow=10:88b22fc3345d5b05 indirect=10:88b22fc3345d5b05 +provenance material /scene/Looks/initialShadingGroup: MaterialOrigin { slots: [0, 1, 2, 3, 4], displaced: false } +provenance light /scene/Sky: LightOrigin { index: 0, geoms: 5..5 } +provenance geometry 0..1: /scene/pSphere2 +provenance geometry 1..2: /scene/pTorus1 +provenance geometry 2..3: /scene/pCube2 +provenance geometry 3..4: /scene/pSphere1 +provenance geometry 4..5: /scene/pCube1 +provenance mesh: MeshOrigin { geom_id: 0, slot: 0, baked: false, moving: false } +provenance mesh: MeshOrigin { geom_id: 1, slot: 1, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 2, slot: 2, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 3, slot: 0, baked: false, moving: false } +provenance mesh: MeshOrigin { geom_id: 4, slot: 3, baked: true, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 17119738035130870988, n_points: 382, n_indices: 1560, n_uvs: None, smooth: false, material: 0 }), placements: 2, shared: false, displaced: false } +provenance mesh slot 1: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 6096447469814747168, n_points: 400, n_indices: 1600, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 2: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 1739488954094729910, n_points: 8, n_indices: 24, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 3: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 12343188411137242430, n_points: 8, n_indices: 20, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: Some(10.0), camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: true }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/scene/camera1"), cameras: ["/scene/camera1"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/scene/camera1"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/root_usda-5042b0d1011805d6-1.image b/crates/crust-core/tests/data/import_baselines/root_usda-5042b0d1011805d6-1.image new file mode 100644 index 000000000..824d5a390 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/root_usda-5042b0d1011805d6-1.image @@ -0,0 +1 @@ +24x18 16spp clamp-off 00ee005bc70d0ce6 diff --git a/crates/crust-core/tests/data/import_baselines/root_usda-5c84bdb62972ba25-1.digest b/crates/crust-core/tests/data/import_baselines/root_usda-5c84bdb62972ba25-1.digest new file mode 100644 index 000000000..d1068cc82 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/root_usda-5c84bdb62972ba25-1.digest @@ -0,0 +1,42 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/scene/camera1") +camera: Camera { origin: Vec3A(0.0074343784, 1.9913422, 4.0133057), lower_left_corner: Vec3A(-6.659224, -3.0086517, -0.98669434), horizontal: Vec3A(13.333317, 0.0, 0.0), vertical: Vec3A(0.0, 9.999988, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: Some(Vec4(0.0, 0.0, -1.0, 3.9133058)), far: Some(Vec4(0.0, 0.0, 1.0, 9995.986)), planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: Some("/Render/settings") +settings: RenderSettings { samples_per_pixel: 4, max_depth: 32, width: 24, height: 18, region: PixelRect { x0: 0, y0: 0, x1: 24, y1: 18 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 12.700017, aperture: [25.4, 25.4], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 5.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/root.usda", "$DIR/graph.usda", "$DIR/other.usda", "$ROOT/samples/cornellbox.usda"], invisible_overrides: Some(0) } +layer: $ROOT/samples/cornellbox.usda +layer: $DIR/graph.usda +layer: $DIR/other.usda +layer: $DIR/root.usda +warning: Warning { code: MaterialFallbackDefault, kind: Skipped, count: 1, prims: ["/scene/Looks/initialShadingGroup"], message: "Material /scene/Looks/initialShadingGroup has no surface shader — using default grey OpenPBR" } +lights: 1 +light 0: dome name Some("/scene/Sky") lpe None pmf 1.0 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 5 geometries, PrimitiveBreakdown { triangles: 822, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 2 } top level, PrimitiveBreakdown { triangles: 1582, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 2 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.3585339 motion [] pieces all=760:2344ecf63e12c441 camera=760:2344ecf63e12c441 shadow=760:2344ecf63e12c441 indirect=760:2344ecf63e12c441 +geom 1: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.25 motion [] pieces all=800:4a8c9f44d777e131 camera=800:4a8c9f44d777e131 shadow=800:4a8c9f44d777e131 indirect=800:4a8c9f44d777e131 +geom 2: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=12:94a297badef437e1 camera=12:94a297badef437e1 shadow=12:94a297badef437e1 indirect=12:94a297badef437e1 +geom 3: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.2 motion [] pieces all=760:c2b60a75c52c78b9 camera=760:c2b60a75c52c78b9 shadow=760:c2b60a75c52c78b9 indirect=760:c2b60a75c52c78b9 +geom 4: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 4.0 motion [] pieces all=10:88b22fc3345d5b05 camera=10:88b22fc3345d5b05 shadow=10:88b22fc3345d5b05 indirect=10:88b22fc3345d5b05 +provenance material /scene/Looks/initialShadingGroup: MaterialOrigin { slots: [0, 1, 2, 3, 4], displaced: false } +provenance light /scene/Sky: LightOrigin { index: 0, geoms: 5..5 } +provenance geometry 0..1: /scene/pSphere2 +provenance geometry 1..2: /scene/pTorus1 +provenance geometry 2..3: /scene/pCube2 +provenance geometry 3..4: /scene/pSphere1 +provenance geometry 4..5: /scene/pCube1 +provenance mesh: MeshOrigin { geom_id: 0, slot: 0, baked: false, moving: false } +provenance mesh: MeshOrigin { geom_id: 1, slot: 1, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 2, slot: 2, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 3, slot: 0, baked: false, moving: false } +provenance mesh: MeshOrigin { geom_id: 4, slot: 3, baked: true, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 17119738035130870988, n_points: 382, n_indices: 1560, n_uvs: None, smooth: false, material: 0 }), placements: 2, shared: false, displaced: false } +provenance mesh slot 1: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 6096447469814747168, n_points: 400, n_indices: 1600, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 2: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 1739488954094729910, n_points: 8, n_indices: 24, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 3: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 12343188411137242430, n_points: 8, n_indices: 20, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: true }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/scene/camera1"), cameras: ["/scene/camera1"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/scene/camera1"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/root_usda-5c84bdb62972ba25-1.image b/crates/crust-core/tests/data/import_baselines/root_usda-5c84bdb62972ba25-1.image new file mode 100644 index 000000000..7b4c2a20f --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/root_usda-5c84bdb62972ba25-1.image @@ -0,0 +1 @@ +24x18 16spp clamp-off 590c41154e1a8676 diff --git a/crates/crust-core/tests/data/import_baselines/root_usda-63552b8e06717f62-1.digest b/crates/crust-core/tests/data/import_baselines/root_usda-63552b8e06717f62-1.digest new file mode 100644 index 000000000..9671e4121 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/root_usda-63552b8e06717f62-1.digest @@ -0,0 +1,40 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/scene/camera1") +camera: Camera { origin: Vec3A(0.0074343784, 1.9913422, 4.0133057), lower_left_corner: Vec3A(-6.659224, -3.0086517, -0.98669434), horizontal: Vec3A(13.333317, 0.0, 0.0), vertical: Vec3A(0.0, 9.999988, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: Some(Vec4(0.0, 0.0, -1.0, 3.9133058)), far: Some(Vec4(0.0, 0.0, 1.0, 9995.986)), planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: Some("/Render/settings") +settings: RenderSettings { samples_per_pixel: 4, max_depth: 32, width: 24, height: 18, region: PixelRect { x0: 0, y0: 0, x1: 24, y1: 18 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 12.700017, aperture: [25.4, 25.4], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 5.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/root.usda", "$ROOT/samples/cornellbox.usda"], invisible_overrides: Some(0) } +layer: $ROOT/samples/cornellbox.usda +layer: $DIR/root.usda +warning: Warning { code: MaterialFallbackDefault, kind: Skipped, count: 1, prims: ["/scene/Looks/initialShadingGroup"], message: "Material /scene/Looks/initialShadingGroup has no surface shader — using default grey OpenPBR" } +lights: 1 +light 0: dome name Some("/scene/Sky") lpe None pmf 1.0 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 5 geometries, PrimitiveBreakdown { triangles: 822, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 2 } top level, PrimitiveBreakdown { triangles: 1582, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 2 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.3585339 motion [] pieces all=760:2344ecf63e12c441 camera=760:2344ecf63e12c441 shadow=760:2344ecf63e12c441 indirect=760:2344ecf63e12c441 +geom 1: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.25 motion [] pieces all=800:4a8c9f44d777e131 camera=800:4a8c9f44d777e131 shadow=800:4a8c9f44d777e131 indirect=800:4a8c9f44d777e131 +geom 2: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=12:94a297badef437e1 camera=12:94a297badef437e1 shadow=12:94a297badef437e1 indirect=12:94a297badef437e1 +geom 3: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.2 motion [] pieces all=760:c2b60a75c52c78b9 camera=760:c2b60a75c52c78b9 shadow=760:c2b60a75c52c78b9 indirect=760:c2b60a75c52c78b9 +geom 4: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 4.0 motion [] pieces all=10:88b22fc3345d5b05 camera=10:88b22fc3345d5b05 shadow=10:88b22fc3345d5b05 indirect=10:88b22fc3345d5b05 +provenance material /scene/Looks/initialShadingGroup: MaterialOrigin { slots: [0, 1, 2, 3, 4], displaced: false } +provenance light /scene/Sky: LightOrigin { index: 0, geoms: 5..5 } +provenance geometry 0..1: /scene/pSphere2 +provenance geometry 1..2: /scene/pTorus1 +provenance geometry 2..3: /scene/pCube2 +provenance geometry 3..4: /scene/pSphere1 +provenance geometry 4..5: /scene/pCube1 +provenance mesh: MeshOrigin { geom_id: 0, slot: 0, baked: false, moving: false } +provenance mesh: MeshOrigin { geom_id: 1, slot: 1, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 2, slot: 2, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 3, slot: 0, baked: false, moving: false } +provenance mesh: MeshOrigin { geom_id: 4, slot: 3, baked: true, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 17119738035130870988, n_points: 382, n_indices: 1560, n_uvs: None, smooth: false, material: 0 }), placements: 2, shared: false, displaced: false } +provenance mesh slot 1: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 6096447469814747168, n_points: 400, n_indices: 1600, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 2: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 1739488954094729910, n_points: 8, n_indices: 24, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 3: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 12343188411137242430, n_points: 8, n_indices: 20, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: true }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/scene/camera1"), cameras: ["/scene/camera1"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/scene/camera1"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/root_usda-63552b8e06717f62-1.image b/crates/crust-core/tests/data/import_baselines/root_usda-63552b8e06717f62-1.image new file mode 100644 index 000000000..7b4c2a20f --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/root_usda-63552b8e06717f62-1.image @@ -0,0 +1 @@ +24x18 16spp clamp-off 590c41154e1a8676 diff --git a/crates/crust-core/tests/data/import_baselines/root_usda-642eeb8c5780c872-1.digest b/crates/crust-core/tests/data/import_baselines/root_usda-642eeb8c5780c872-1.digest new file mode 100644 index 000000000..6786e4c52 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/root_usda-642eeb8c5780c872-1.digest @@ -0,0 +1,42 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/scene/camera1") +camera: Camera { origin: Vec3A(0.0074343784, 1.9913422, 4.0133057), lower_left_corner: Vec3A(-6.659224, -3.0086517, -0.98669434), horizontal: Vec3A(13.333317, 0.0, 0.0), vertical: Vec3A(0.0, 9.999988, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: Some(Vec4(0.0, 0.0, -1.0, 3.9133058)), far: Some(Vec4(0.0, 0.0, 1.0, 9995.986)), planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: Some("/Render/settings") +settings: RenderSettings { samples_per_pixel: 4, max_depth: 32, width: 24, height: 18, region: PixelRect { x0: 0, y0: 0, x1: 24, y1: 18 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 12.700017, aperture: [25.4, 25.4], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 5.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/root.usda", "$DIR/graph.usda", "$ROOT/samples/cornellbox.usda"], invisible_overrides: Some(0) } +layer: $ROOT/samples/cornellbox.usda +layer: $DIR/graph.usda +layer: $DIR/root.usda +warning: Warning { code: MaterialFallbackDefault, kind: Skipped, count: 1, prims: ["/scene/Looks/initialShadingGroup"], message: "Material /scene/Looks/initialShadingGroup has no surface shader — using default grey OpenPBR" } +lights: 1 +light 0: dome name Some("/scene/Sky") lpe None pmf 1.0 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 5 geometries, PrimitiveBreakdown { triangles: 2342, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 2342, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.3585339 motion [] pieces all=760:2344ecf63e12c441 camera=760:2344ecf63e12c441 shadow=760:2344ecf63e12c441 indirect=760:2344ecf63e12c441 +geom 1: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.25 motion [] pieces all=800:4a8c9f44d777e131 camera=800:4a8c9f44d777e131 shadow=800:4a8c9f44d777e131 indirect=800:4a8c9f44d777e131 +geom 2: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=12:94a297badef437e1 camera=12:94a297badef437e1 shadow=12:94a297badef437e1 indirect=12:94a297badef437e1 +geom 3: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.2 motion [] pieces all=760:952714bb7184a49d camera=760:952714bb7184a49d shadow=760:952714bb7184a49d indirect=760:952714bb7184a49d +geom 4: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 4.0 motion [] pieces all=10:88b22fc3345d5b05 camera=10:88b22fc3345d5b05 shadow=10:88b22fc3345d5b05 indirect=10:88b22fc3345d5b05 +provenance material /scene/Looks/initialShadingGroup: MaterialOrigin { slots: [0, 1, 2, 3, 4], displaced: false } +provenance light /scene/Sky: LightOrigin { index: 0, geoms: 5..5 } +provenance geometry 0..1: /scene/pSphere2 +provenance geometry 1..2: /scene/pTorus1 +provenance geometry 2..3: /scene/pCube2 +provenance geometry 3..4: /scene/pSphere1 +provenance geometry 4..5: /scene/pCube1 +provenance mesh: MeshOrigin { geom_id: 0, slot: 0, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 1, slot: 1, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 2, slot: 2, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 3, slot: 3, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 4, slot: 4, baked: true, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 17119738035130870988, n_points: 382, n_indices: 1560, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 1: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 6096447469814747168, n_points: 400, n_indices: 1600, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 2: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 1739488954094729910, n_points: 8, n_indices: 24, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 3: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 504541619698256588, n_points: 382, n_indices: 1560, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 4: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 12343188411137242430, n_points: 8, n_indices: 20, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: true }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/scene/camera1"), cameras: ["/scene/camera1"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/scene/camera1"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/root_usda-642eeb8c5780c872-1.image b/crates/crust-core/tests/data/import_baselines/root_usda-642eeb8c5780c872-1.image new file mode 100644 index 000000000..cd7b62bfa --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/root_usda-642eeb8c5780c872-1.image @@ -0,0 +1 @@ +24x18 16spp clamp-off 45ba327dd680d7f3 diff --git a/crates/crust-core/tests/data/import_baselines/root_usda-65bf0b61fd007f62-1.digest b/crates/crust-core/tests/data/import_baselines/root_usda-65bf0b61fd007f62-1.digest new file mode 100644 index 000000000..ff0b1b4b6 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/root_usda-65bf0b61fd007f62-1.digest @@ -0,0 +1,41 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/scene/camera1") +camera: Camera { origin: Vec3A(0.0074343784, 1.9913422, 4.0133057), lower_left_corner: Vec3A(-6.659224, -3.0086517, -0.98669434), horizontal: Vec3A(13.333317, 0.0, 0.0), vertical: Vec3A(0.0, 9.999988, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: Some(Vec4(0.0, 0.0, -1.0, 3.9133058)), far: Some(Vec4(0.0, 0.0, 1.0, 9995.986)), planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: Some("/Render/settings") +settings: RenderSettings { samples_per_pixel: 4, max_depth: 32, width: 24, height: 18, region: PixelRect { x0: 0, y0: 0, x1: 24, y1: 18 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 12.700017, aperture: [25.4, 25.4], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 5.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/root.usda", "$DIR/graph.usda", "$ROOT/samples/cornellbox.usda"], invisible_overrides: Some(0) } +layer: $ROOT/samples/cornellbox.usda +layer: $DIR/graph.usda +layer: $DIR/root.usda +warning: Warning { code: MaterialFallbackDefault, kind: Skipped, count: 1, prims: ["/scene/Looks/initialShadingGroup"], message: "Material /scene/Looks/initialShadingGroup has no surface shader — using default grey OpenPBR" } +lights: 1 +light 0: dome name Some("/scene/Sky") lpe None pmf 1.0 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 5 geometries, PrimitiveBreakdown { triangles: 822, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 2 } top level, PrimitiveBreakdown { triangles: 1582, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 2 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.3585339 motion [] pieces all=760:2344ecf63e12c441 camera=760:2344ecf63e12c441 shadow=760:2344ecf63e12c441 indirect=760:2344ecf63e12c441 +geom 1: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.25 motion [] pieces all=800:4a8c9f44d777e131 camera=800:4a8c9f44d777e131 shadow=800:4a8c9f44d777e131 indirect=800:4a8c9f44d777e131 +geom 2: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=12:94a297badef437e1 camera=12:94a297badef437e1 shadow=12:94a297badef437e1 indirect=12:94a297badef437e1 +geom 3: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.2 motion [] pieces all=760:c2b60a75c52c78b9 camera=760:c2b60a75c52c78b9 shadow=760:c2b60a75c52c78b9 indirect=760:c2b60a75c52c78b9 +geom 4: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 4.0 motion [] pieces all=10:88b22fc3345d5b05 camera=10:88b22fc3345d5b05 shadow=10:88b22fc3345d5b05 indirect=10:88b22fc3345d5b05 +provenance material /scene/Looks/initialShadingGroup: MaterialOrigin { slots: [0, 1, 2, 3, 4], displaced: false } +provenance light /scene/Sky: LightOrigin { index: 0, geoms: 5..5 } +provenance geometry 0..1: /scene/pSphere2 +provenance geometry 1..2: /scene/pTorus1 +provenance geometry 2..3: /scene/pCube2 +provenance geometry 3..4: /scene/pSphere1 +provenance geometry 4..5: /scene/pCube1 +provenance mesh: MeshOrigin { geom_id: 0, slot: 0, baked: false, moving: false } +provenance mesh: MeshOrigin { geom_id: 1, slot: 1, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 2, slot: 2, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 3, slot: 0, baked: false, moving: false } +provenance mesh: MeshOrigin { geom_id: 4, slot: 3, baked: true, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 17119738035130870988, n_points: 382, n_indices: 1560, n_uvs: None, smooth: false, material: 0 }), placements: 2, shared: false, displaced: false } +provenance mesh slot 1: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 6096447469814747168, n_points: 400, n_indices: 1600, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 2: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 1739488954094729910, n_points: 8, n_indices: 24, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 3: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 12343188411137242430, n_points: 8, n_indices: 20, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: true }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/scene/camera1"), cameras: ["/scene/camera1"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/scene/camera1"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/root_usda-65bf0b61fd007f62-1.image b/crates/crust-core/tests/data/import_baselines/root_usda-65bf0b61fd007f62-1.image new file mode 100644 index 000000000..7b4c2a20f --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/root_usda-65bf0b61fd007f62-1.image @@ -0,0 +1 @@ +24x18 16spp clamp-off 590c41154e1a8676 diff --git a/crates/crust-core/tests/data/import_baselines/root_usda-67d463deb3cd2295-1.digest b/crates/crust-core/tests/data/import_baselines/root_usda-67d463deb3cd2295-1.digest new file mode 100644 index 000000000..b66d5f289 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/root_usda-67d463deb3cd2295-1.digest @@ -0,0 +1,40 @@ +time: None +working space: ACEScg +camera path: Some("/scene/camera1") +camera: Camera { origin: Vec3A(0.0074343784, 1.9913422, 4.0133057), lower_left_corner: Vec3A(-6.659224, -3.0086517, -0.98669434), horizontal: Vec3A(13.333317, 0.0, 0.0), vertical: Vec3A(0.0, 9.999988, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: Some(Vec4(0.0, 0.0, -1.0, 3.9133058)), far: Some(Vec4(0.0, 0.0, 1.0, 9995.986)), planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: Some("/Render/settings") +settings: RenderSettings { samples_per_pixel: 4, max_depth: 32, width: 24, height: 18, region: PixelRect { x0: 0, y0: 0, x1: 24, y1: 18 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 12.700017, aperture: [25.4, 25.4], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 5.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/root.usda", "$ROOT/samples/cornellbox.usda"], invisible_overrides: Some(0) } +layer: $ROOT/samples/cornellbox.usda +layer: $DIR/root.usda +warning: Warning { code: MaterialFallbackDefault, kind: Skipped, count: 1, prims: ["/scene/Looks/initialShadingGroup"], message: "Material /scene/Looks/initialShadingGroup has no surface shader — using default grey OpenPBR" } +lights: 1 +light 0: dome name Some("/scene/Sky") lpe None pmf 1.0 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 5 geometries, PrimitiveBreakdown { triangles: 822, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 2 } top level, PrimitiveBreakdown { triangles: 1582, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 2 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.3585339 motion [] pieces all=760:2344ecf63e12c441 camera=760:2344ecf63e12c441 shadow=760:2344ecf63e12c441 indirect=760:2344ecf63e12c441 +geom 1: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.25 motion [] pieces all=800:4a8c9f44d777e131 camera=800:4a8c9f44d777e131 shadow=800:4a8c9f44d777e131 indirect=800:4a8c9f44d777e131 +geom 2: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=12:94a297badef437e1 camera=12:94a297badef437e1 shadow=12:94a297badef437e1 indirect=12:94a297badef437e1 +geom 3: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.2 motion [] pieces all=760:c2b60a75c52c78b9 camera=760:c2b60a75c52c78b9 shadow=760:c2b60a75c52c78b9 indirect=760:c2b60a75c52c78b9 +geom 4: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 4.0 motion [] pieces all=10:88b22fc3345d5b05 camera=10:88b22fc3345d5b05 shadow=10:88b22fc3345d5b05 indirect=10:88b22fc3345d5b05 +provenance material /scene/Looks/initialShadingGroup: MaterialOrigin { slots: [0, 1, 2, 3, 4], displaced: false } +provenance light /scene/Sky: LightOrigin { index: 0, geoms: 5..5 } +provenance geometry 0..1: /scene/pSphere2 +provenance geometry 1..2: /scene/pTorus1 +provenance geometry 2..3: /scene/pCube2 +provenance geometry 3..4: /scene/pSphere1 +provenance geometry 4..5: /scene/pCube1 +provenance mesh: MeshOrigin { geom_id: 0, slot: 0, baked: false, moving: false } +provenance mesh: MeshOrigin { geom_id: 1, slot: 1, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 2, slot: 2, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 3, slot: 0, baked: false, moving: false } +provenance mesh: MeshOrigin { geom_id: 4, slot: 3, baked: true, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 17119738035130870988, n_points: 382, n_indices: 1560, n_uvs: None, smooth: false, material: 0 }), placements: 2, shared: false, displaced: false } +provenance mesh slot 1: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 6096447469814747168, n_points: 400, n_indices: 1600, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 2: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 1739488954094729910, n_points: 8, n_indices: 24, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 3: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 12343188411137242430, n_points: 8, n_indices: 20, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: true }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/scene/camera1"), cameras: ["/scene/camera1"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/scene/camera1"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("ACEScg") diff --git a/crates/crust-core/tests/data/import_baselines/root_usda-67d463deb3cd2295-1.image b/crates/crust-core/tests/data/import_baselines/root_usda-67d463deb3cd2295-1.image new file mode 100644 index 000000000..5fe3194f2 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/root_usda-67d463deb3cd2295-1.image @@ -0,0 +1 @@ +24x18 16spp clamp-off cf7f604f30db0556 diff --git a/crates/crust-core/tests/data/import_baselines/root_usda-7781d1893e2e23fd-1.digest b/crates/crust-core/tests/data/import_baselines/root_usda-7781d1893e2e23fd-1.digest new file mode 100644 index 000000000..ff0b1b4b6 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/root_usda-7781d1893e2e23fd-1.digest @@ -0,0 +1,41 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/scene/camera1") +camera: Camera { origin: Vec3A(0.0074343784, 1.9913422, 4.0133057), lower_left_corner: Vec3A(-6.659224, -3.0086517, -0.98669434), horizontal: Vec3A(13.333317, 0.0, 0.0), vertical: Vec3A(0.0, 9.999988, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: Some(Vec4(0.0, 0.0, -1.0, 3.9133058)), far: Some(Vec4(0.0, 0.0, 1.0, 9995.986)), planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: Some("/Render/settings") +settings: RenderSettings { samples_per_pixel: 4, max_depth: 32, width: 24, height: 18, region: PixelRect { x0: 0, y0: 0, x1: 24, y1: 18 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 12.700017, aperture: [25.4, 25.4], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 5.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/root.usda", "$DIR/graph.usda", "$ROOT/samples/cornellbox.usda"], invisible_overrides: Some(0) } +layer: $ROOT/samples/cornellbox.usda +layer: $DIR/graph.usda +layer: $DIR/root.usda +warning: Warning { code: MaterialFallbackDefault, kind: Skipped, count: 1, prims: ["/scene/Looks/initialShadingGroup"], message: "Material /scene/Looks/initialShadingGroup has no surface shader — using default grey OpenPBR" } +lights: 1 +light 0: dome name Some("/scene/Sky") lpe None pmf 1.0 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 5 geometries, PrimitiveBreakdown { triangles: 822, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 2 } top level, PrimitiveBreakdown { triangles: 1582, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 2 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.3585339 motion [] pieces all=760:2344ecf63e12c441 camera=760:2344ecf63e12c441 shadow=760:2344ecf63e12c441 indirect=760:2344ecf63e12c441 +geom 1: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.25 motion [] pieces all=800:4a8c9f44d777e131 camera=800:4a8c9f44d777e131 shadow=800:4a8c9f44d777e131 indirect=800:4a8c9f44d777e131 +geom 2: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=12:94a297badef437e1 camera=12:94a297badef437e1 shadow=12:94a297badef437e1 indirect=12:94a297badef437e1 +geom 3: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.2 motion [] pieces all=760:c2b60a75c52c78b9 camera=760:c2b60a75c52c78b9 shadow=760:c2b60a75c52c78b9 indirect=760:c2b60a75c52c78b9 +geom 4: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 4.0 motion [] pieces all=10:88b22fc3345d5b05 camera=10:88b22fc3345d5b05 shadow=10:88b22fc3345d5b05 indirect=10:88b22fc3345d5b05 +provenance material /scene/Looks/initialShadingGroup: MaterialOrigin { slots: [0, 1, 2, 3, 4], displaced: false } +provenance light /scene/Sky: LightOrigin { index: 0, geoms: 5..5 } +provenance geometry 0..1: /scene/pSphere2 +provenance geometry 1..2: /scene/pTorus1 +provenance geometry 2..3: /scene/pCube2 +provenance geometry 3..4: /scene/pSphere1 +provenance geometry 4..5: /scene/pCube1 +provenance mesh: MeshOrigin { geom_id: 0, slot: 0, baked: false, moving: false } +provenance mesh: MeshOrigin { geom_id: 1, slot: 1, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 2, slot: 2, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 3, slot: 0, baked: false, moving: false } +provenance mesh: MeshOrigin { geom_id: 4, slot: 3, baked: true, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 17119738035130870988, n_points: 382, n_indices: 1560, n_uvs: None, smooth: false, material: 0 }), placements: 2, shared: false, displaced: false } +provenance mesh slot 1: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 6096447469814747168, n_points: 400, n_indices: 1600, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 2: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 1739488954094729910, n_points: 8, n_indices: 24, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 3: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 12343188411137242430, n_points: 8, n_indices: 20, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: true }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/scene/camera1"), cameras: ["/scene/camera1"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/scene/camera1"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/root_usda-7781d1893e2e23fd-1.image b/crates/crust-core/tests/data/import_baselines/root_usda-7781d1893e2e23fd-1.image new file mode 100644 index 000000000..7b4c2a20f --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/root_usda-7781d1893e2e23fd-1.image @@ -0,0 +1 @@ +24x18 16spp clamp-off 590c41154e1a8676 diff --git a/crates/crust-core/tests/data/import_baselines/root_usda-7eba3de4e6efbf15-1.digest b/crates/crust-core/tests/data/import_baselines/root_usda-7eba3de4e6efbf15-1.digest new file mode 100644 index 000000000..edd67af78 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/root_usda-7eba3de4e6efbf15-1.digest @@ -0,0 +1,23 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: None +camera: Camera { origin: Vec3A(15.0, 3.0, 3.0), lower_left_corner: Vec3A(4.8863316, -0.044797063, 4.174048), horizontal: Vec3A(1.2295314, 0.0, -6.147657), vertical: Vec3A(-0.44830504, 3.4967792, -0.08966101), u: Vec3A(0.19611613, 0.0, -0.9805807), v: Vec3A(-0.1271232, 0.991561, -0.02542464), lens_radius: 0.05, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: None +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 640, height: 360, region: PixelRect { x0: 0, y0: 0, x1: 640, y1: 360 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: None, depth_of_field: true, motion_blur: false, layer_stack: ["$DIR/root.usda", "$DIR/look/deep/look.usda"], invisible_overrides: Some(0) } +layer: $DIR/look/deep/look.usda +layer: $DIR/root.usda +warning: Warning { code: CameraMissing, kind: Skipped, count: 1, prims: [], message: "USD stage has no UsdGeomCamera — falling back to world::get_settings camera" } +lights: 0 +volumes: 0 +world: 1 geometries, PrimitiveBreakdown { triangles: 2, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 2, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +geom 0: material #0 Signature { kind: "UsdPreviewSurface (textured)", cutout: false, straight: false, boundary: false, emits: false, uv: true, uv_primvar: Some("perfuv"), face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv Some(0) shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:02ff87c392969355 camera=2:02ff87c392969355 shadow=2:02ff87c392969355 indirect=2:02ff87c392969355 +provenance material /W/Looks/M: MaterialOrigin { slots: [0], displaced: false } +provenance geometry 0..1: /W/Geo/Q +provenance mesh: MeshOrigin { geom_id: 0, slot: 0, baked: true, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 16252826071643471966, n_points: 4, n_indices: 4, n_uvs: Some(4), smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: None, cameras: [], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: None, offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/root_usda-7eba3de4e6efbf15-1.image b/crates/crust-core/tests/data/import_baselines/root_usda-7eba3de4e6efbf15-1.image new file mode 100644 index 000000000..c734c5b1d --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/root_usda-7eba3de4e6efbf15-1.image @@ -0,0 +1 @@ +640x360 16spp clamp-off a04a09c0d4b5e325 diff --git a/crates/crust-core/tests/data/import_baselines/root_usda-8099cbe59e22c4ff-1.digest b/crates/crust-core/tests/data/import_baselines/root_usda-8099cbe59e22c4ff-1.digest new file mode 100644 index 000000000..038f9bf5a --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/root_usda-8099cbe59e22c4ff-1.digest @@ -0,0 +1,41 @@ +time: Some(1.0) +working space: Linear Rec.709 (sRGB) +camera path: Some("/scene/camera1") +camera: Camera { origin: Vec3A(0.0074343784, 1.9913422, 4.0133057), lower_left_corner: Vec3A(-6.659224, -3.0086517, -0.98669434), horizontal: Vec3A(13.333317, 0.0, 0.0), vertical: Vec3A(0.0, 9.999988, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: Some(Vec4(0.0, 0.0, -1.0, 3.9133058)), far: Some(Vec4(0.0, 0.0, 1.0, 9995.986)), planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: Some("/Render/settings") +settings: RenderSettings { samples_per_pixel: 4, max_depth: 32, width: 24, height: 18, region: PixelRect { x0: 0, y0: 0, x1: 24, y1: 18 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 1, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 12.700017, aperture: [25.4, 25.4], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 5.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/root.usda", "$DIR/graph.usda", "$ROOT/samples/cornellbox.usda"], invisible_overrides: Some(0) } +layer: $ROOT/samples/cornellbox.usda +layer: $DIR/graph.usda +layer: $DIR/root.usda +warning: Warning { code: MaterialFallbackDefault, kind: Skipped, count: 1, prims: ["/scene/Looks/initialShadingGroup"], message: "Material /scene/Looks/initialShadingGroup has no surface shader — using default grey OpenPBR" } +lights: 1 +light 0: dome name Some("/scene/Sky") lpe None pmf 1.0 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 5 geometries, PrimitiveBreakdown { triangles: 822, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 2 } top level, PrimitiveBreakdown { triangles: 1582, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 2 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.3585339 motion [] pieces all=760:2344ecf63e12c441 camera=760:2344ecf63e12c441 shadow=760:2344ecf63e12c441 indirect=760:2344ecf63e12c441 +geom 1: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.25 motion [] pieces all=800:4a8c9f44d777e131 camera=800:4a8c9f44d777e131 shadow=800:4a8c9f44d777e131 indirect=800:4a8c9f44d777e131 +geom 2: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=12:94a297badef437e1 camera=12:94a297badef437e1 shadow=12:94a297badef437e1 indirect=12:94a297badef437e1 +geom 3: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.2 motion [] pieces all=760:c2b60a75c52c78b9 camera=760:c2b60a75c52c78b9 shadow=760:c2b60a75c52c78b9 indirect=760:c2b60a75c52c78b9 +geom 4: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 4.0 motion [] pieces all=10:88b22fc3345d5b05 camera=10:88b22fc3345d5b05 shadow=10:88b22fc3345d5b05 indirect=10:88b22fc3345d5b05 +provenance material /scene/Looks/initialShadingGroup: MaterialOrigin { slots: [0, 1, 2, 3, 4], displaced: false } +provenance light /scene/Sky: LightOrigin { index: 0, geoms: 5..5 } +provenance geometry 0..1: /scene/pSphere2 +provenance geometry 1..2: /scene/pTorus1 +provenance geometry 2..3: /scene/pCube2 +provenance geometry 3..4: /scene/pSphere1 +provenance geometry 4..5: /scene/pCube1 +provenance mesh: MeshOrigin { geom_id: 0, slot: 0, baked: false, moving: false } +provenance mesh: MeshOrigin { geom_id: 1, slot: 1, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 2, slot: 2, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 3, slot: 0, baked: false, moving: false } +provenance mesh: MeshOrigin { geom_id: 4, slot: 3, baked: true, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 17119738035130870988, n_points: 382, n_indices: 1560, n_uvs: None, smooth: false, material: 0 }), placements: 2, shared: false, displaced: false } +provenance mesh slot 1: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 6096447469814747168, n_points: 400, n_indices: 1600, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 2: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 1739488954094729910, n_points: 8, n_indices: 24, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 3: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 12343188411137242430, n_points: 8, n_indices: 20, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: Some(1.0), camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: true }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/scene/camera1"), cameras: ["/scene/camera1"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/scene/camera1"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/root_usda-8099cbe59e22c4ff-1.image b/crates/crust-core/tests/data/import_baselines/root_usda-8099cbe59e22c4ff-1.image new file mode 100644 index 000000000..ca71920c4 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/root_usda-8099cbe59e22c4ff-1.image @@ -0,0 +1 @@ +24x18 16spp clamp-off 765cb296f5a6f72c diff --git a/crates/crust-core/tests/data/import_baselines/root_usda-834306f0b405a977-1.digest b/crates/crust-core/tests/data/import_baselines/root_usda-834306f0b405a977-1.digest new file mode 100644 index 000000000..c82aea256 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/root_usda-834306f0b405a977-1.digest @@ -0,0 +1,41 @@ +time: Some(10.0) +working space: Linear Rec.709 (sRGB) +camera path: Some("/scene/camera1") +camera: Camera { origin: Vec3A(0.0074343784, 1.9913422, 4.0133057), lower_left_corner: Vec3A(-6.659224, -3.0086517, -0.98669434), horizontal: Vec3A(13.333317, 0.0, 0.0), vertical: Vec3A(0.0, 9.999988, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: Some(Vec4(0.0, 0.0, -1.0, 3.9133058)), far: Some(Vec4(0.0, 0.0, 1.0, 9995.986)), planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: Some("/Render/settings") +settings: RenderSettings { samples_per_pixel: 4, max_depth: 32, width: 24, height: 18, region: PixelRect { x0: 0, y0: 0, x1: 24, y1: 18 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 10, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 12.700017, aperture: [25.4, 25.4], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 5.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/root.usda", "$DIR/graph.usda", "$ROOT/samples/cornellbox.usda"], invisible_overrides: Some(0) } +layer: $ROOT/samples/cornellbox.usda +layer: $DIR/graph.usda +layer: $DIR/root.usda +warning: Warning { code: MaterialFallbackDefault, kind: Skipped, count: 1, prims: ["/scene/Looks/initialShadingGroup"], message: "Material /scene/Looks/initialShadingGroup has no surface shader — using default grey OpenPBR" } +lights: 1 +light 0: dome name Some("/scene/Sky") lpe None pmf 1.0 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 5 geometries, PrimitiveBreakdown { triangles: 822, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 2 } top level, PrimitiveBreakdown { triangles: 1582, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 2 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.3585339 motion [] pieces all=760:2344ecf63e12c441 camera=760:2344ecf63e12c441 shadow=760:2344ecf63e12c441 indirect=760:2344ecf63e12c441 +geom 1: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.25 motion [] pieces all=800:4a8c9f44d777e131 camera=800:4a8c9f44d777e131 shadow=800:4a8c9f44d777e131 indirect=800:4a8c9f44d777e131 +geom 2: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=12:fd14628a4ad8ed19 camera=12:fd14628a4ad8ed19 shadow=12:fd14628a4ad8ed19 indirect=12:fd14628a4ad8ed19 +geom 3: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.2 motion [] pieces all=760:c2b60a75c52c78b9 camera=760:c2b60a75c52c78b9 shadow=760:c2b60a75c52c78b9 indirect=760:c2b60a75c52c78b9 +geom 4: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 4.0 motion [] pieces all=10:88b22fc3345d5b05 camera=10:88b22fc3345d5b05 shadow=10:88b22fc3345d5b05 indirect=10:88b22fc3345d5b05 +provenance material /scene/Looks/initialShadingGroup: MaterialOrigin { slots: [0, 1, 2, 3, 4], displaced: false } +provenance light /scene/Sky: LightOrigin { index: 0, geoms: 5..5 } +provenance geometry 0..1: /scene/pSphere2 +provenance geometry 1..2: /scene/pTorus1 +provenance geometry 2..3: /scene/pCube2 +provenance geometry 3..4: /scene/pSphere1 +provenance geometry 4..5: /scene/pCube1 +provenance mesh: MeshOrigin { geom_id: 0, slot: 0, baked: false, moving: false } +provenance mesh: MeshOrigin { geom_id: 1, slot: 1, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 2, slot: 2, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 3, slot: 0, baked: false, moving: false } +provenance mesh: MeshOrigin { geom_id: 4, slot: 3, baked: true, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 17119738035130870988, n_points: 382, n_indices: 1560, n_uvs: None, smooth: false, material: 0 }), placements: 2, shared: false, displaced: false } +provenance mesh slot 1: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 6096447469814747168, n_points: 400, n_indices: 1600, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 2: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 1739488954094729910, n_points: 8, n_indices: 24, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 3: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 12343188411137242430, n_points: 8, n_indices: 20, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: Some(10.0), camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: true }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/scene/camera1"), cameras: ["/scene/camera1"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/scene/camera1"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/root_usda-834306f0b405a977-1.image b/crates/crust-core/tests/data/import_baselines/root_usda-834306f0b405a977-1.image new file mode 100644 index 000000000..eb5dd2f64 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/root_usda-834306f0b405a977-1.image @@ -0,0 +1 @@ +24x18 16spp clamp-off c29504390e63441f diff --git a/crates/crust-core/tests/data/import_baselines/root_usda-8c6dbffe8bcc7f5d-1.digest b/crates/crust-core/tests/data/import_baselines/root_usda-8c6dbffe8bcc7f5d-1.digest new file mode 100644 index 000000000..341f2b83c --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/root_usda-8c6dbffe8bcc7f5d-1.digest @@ -0,0 +1,41 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/scene/camera1") +camera: Camera { origin: Vec3A(0.0074343784, 1.9913422, 4.0133057), lower_left_corner: Vec3A(-6.659224, -3.0086517, -0.98669434), horizontal: Vec3A(13.333317, 0.0, 0.0), vertical: Vec3A(0.0, 9.999988, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: Some(Vec4(0.0, 0.0, -1.0, 3.9133058)), far: Some(Vec4(0.0, 0.0, 1.0, 9995.986)), planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: Some("/Render/settings") +settings: RenderSettings { samples_per_pixel: 2, max_depth: 32, width: 24, height: 18, region: PixelRect { x0: 0, y0: 0, x1: 24, y1: 18 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 12.700017, aperture: [25.4, 25.4], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 5.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/root.usda", "$DIR/graph.usda", "$ROOT/samples/cornellbox.usda"], invisible_overrides: Some(0) } +layer: $ROOT/samples/cornellbox.usda +layer: $DIR/graph.usda +layer: $DIR/root.usda +warning: Warning { code: MaterialFallbackDefault, kind: Skipped, count: 1, prims: ["/scene/Looks/initialShadingGroup"], message: "Material /scene/Looks/initialShadingGroup has no surface shader — using default grey OpenPBR" } +lights: 1 +light 0: dome name Some("/scene/Sky") lpe None pmf 1.0 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 5 geometries, PrimitiveBreakdown { triangles: 822, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 2 } top level, PrimitiveBreakdown { triangles: 1582, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 2 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.3585339 motion [] pieces all=760:2344ecf63e12c441 camera=760:2344ecf63e12c441 shadow=760:2344ecf63e12c441 indirect=760:2344ecf63e12c441 +geom 1: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.25 motion [] pieces all=800:4a8c9f44d777e131 camera=800:4a8c9f44d777e131 shadow=800:4a8c9f44d777e131 indirect=800:4a8c9f44d777e131 +geom 2: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=12:94a297badef437e1 camera=12:94a297badef437e1 shadow=12:94a297badef437e1 indirect=12:94a297badef437e1 +geom 3: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.2 motion [] pieces all=760:c2b60a75c52c78b9 camera=760:c2b60a75c52c78b9 shadow=760:c2b60a75c52c78b9 indirect=760:c2b60a75c52c78b9 +geom 4: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 4.0 motion [] pieces all=10:88b22fc3345d5b05 camera=10:88b22fc3345d5b05 shadow=10:88b22fc3345d5b05 indirect=10:88b22fc3345d5b05 +provenance material /scene/Looks/initialShadingGroup: MaterialOrigin { slots: [0, 1, 2, 3, 4], displaced: false } +provenance light /scene/Sky: LightOrigin { index: 0, geoms: 5..5 } +provenance geometry 0..1: /scene/pSphere2 +provenance geometry 1..2: /scene/pTorus1 +provenance geometry 2..3: /scene/pCube2 +provenance geometry 3..4: /scene/pSphere1 +provenance geometry 4..5: /scene/pCube1 +provenance mesh: MeshOrigin { geom_id: 0, slot: 0, baked: false, moving: false } +provenance mesh: MeshOrigin { geom_id: 1, slot: 1, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 2, slot: 2, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 3, slot: 0, baked: false, moving: false } +provenance mesh: MeshOrigin { geom_id: 4, slot: 3, baked: true, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 17119738035130870988, n_points: 382, n_indices: 1560, n_uvs: None, smooth: false, material: 0 }), placements: 2, shared: false, displaced: false } +provenance mesh slot 1: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 6096447469814747168, n_points: 400, n_indices: 1600, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 2: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 1739488954094729910, n_points: 8, n_indices: 24, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 3: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 12343188411137242430, n_points: 8, n_indices: 20, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: true }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/scene/camera1"), cameras: ["/scene/camera1"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/scene/camera1"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/root_usda-8c6dbffe8bcc7f5d-1.image b/crates/crust-core/tests/data/import_baselines/root_usda-8c6dbffe8bcc7f5d-1.image new file mode 100644 index 000000000..8fe0d33e1 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/root_usda-8c6dbffe8bcc7f5d-1.image @@ -0,0 +1 @@ +24x18 16spp clamp-off 0db6d0717721e7da diff --git a/crates/crust-core/tests/data/import_baselines/root_usda-8e031f11860a45d8-1.digest b/crates/crust-core/tests/data/import_baselines/root_usda-8e031f11860a45d8-1.digest new file mode 100644 index 000000000..d86971060 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/root_usda-8e031f11860a45d8-1.digest @@ -0,0 +1,38 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/World/Cam") +camera: Camera { origin: Vec3A(1.5, 0.5, 6.0), lower_left_corner: Vec3A(-1.2183647, -1.0290802, -4.0), horizontal: Vec3A(5.4367294, 0.0, 0.0), vertical: Vec3A(0.0, 3.0581603, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: None +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 640, height: 360, region: PixelRect { x0: 0, y0: 0, x1: 640, y1: 360 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 50.0, aperture: [20.955, 15.2908], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 10.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/root.usda"], invisible_overrides: Some(0) } +layer: $DIR/assets/deep/asset.usda +layer: $DIR/root.usda +lights: 1 +light 0: area name Some("/World/Thing/Card") lpe None pmf 1.0 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 3 geometries, PrimitiveBreakdown { triangles: 6, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 6, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +geom 0: material #0 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:4285059f3c1013e5 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=2:4285059f3c1013e5 +geom 1: material #1 Signature { kind: "MaterialX", cutout: false, straight: false, boundary: false, emits: false, uv: true, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv Some(0) shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:9d35beb8f32f58b8 camera=2:9d35beb8f32f58b8 shadow=2:9d35beb8f32f58b8 indirect=2:9d35beb8f32f58b8 +geom 2: material #2 Signature { kind: "UsdPreviewSurface (textured)", cutout: false, straight: false, boundary: false, emits: false, uv: true, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv Some(1) shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:02ff87c392969355 camera=2:02ff87c392969355 shadow=2:02ff87c392969355 indirect=2:02ff87c392969355 +provenance material /World/Thing/Looks/M: MaterialOrigin { slots: [2], displaced: false } +provenance material /World/Thing/Looks/X: MaterialOrigin { slots: [1], displaced: false } +provenance material read: ("/Asset/Looks/M", "/World/Thing/Looks/M") +provenance material read: ("/Asset/Looks/M/S", "/World/Thing/Looks/M") +provenance material read: ("/Asset/Looks/M/T", "/World/Thing/Looks/M") +provenance material read: ("/Asset/Looks/M/U", "/World/Thing/Looks/M") +provenance material read: ("/Asset/Looks/X", "/World/Thing/Looks/X") +provenance material read: ("/Asset/Looks/X/I", "/World/Thing/Looks/X") +provenance material read: ("/Asset/Looks/X/S", "/World/Thing/Looks/X") +provenance light /World/Thing/Card: LightOrigin { index: 0, geoms: 0..1 } +provenance geometry 0..1: /World/Thing/Card +provenance geometry 1..2: /World/Thing/R +provenance geometry 2..3: /World/Thing/Q +provenance mesh: MeshOrigin { geom_id: 1, slot: 0, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 2, slot: 1, baked: true, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 18377322456310340000, n_points: 4, n_indices: 4, n_uvs: Some(4), smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 1: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 8791120226565781173, n_points: 4, n_indices: 4, n_uvs: Some(4), smooth: false, material: 1 }), placements: 1, shared: false, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/World/Cam"), cameras: ["/World/Cam"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/World/Cam"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/root_usda-8e031f11860a45d8-1.image b/crates/crust-core/tests/data/import_baselines/root_usda-8e031f11860a45d8-1.image new file mode 100644 index 000000000..d866c623b --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/root_usda-8e031f11860a45d8-1.image @@ -0,0 +1 @@ +640x360 16spp clamp-off de4bdfd600ef69d1 diff --git a/crates/crust-core/tests/data/import_baselines/root_usda-921d5e21a6ec411f-1.digest b/crates/crust-core/tests/data/import_baselines/root_usda-921d5e21a6ec411f-1.digest new file mode 100644 index 000000000..5e4154edd --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/root_usda-921d5e21a6ec411f-1.digest @@ -0,0 +1,41 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/scene/camera1") +camera: Camera { origin: Vec3A(0.0074343784, 1.9913422, 4.0133057), lower_left_corner: Vec3A(-6.659224, -3.0086517, -0.98669434), horizontal: Vec3A(13.333317, 0.0, 0.0), vertical: Vec3A(0.0, 9.999988, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: Some(Vec4(0.0, 0.0, -1.0, 3.9133058)), far: Some(Vec4(0.0, 0.0, 1.0, 9995.986)), planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: Some("/Render/settings") +settings: RenderSettings { samples_per_pixel: 4, max_depth: 32, width: 24, height: 18, region: PixelRect { x0: 0, y0: 0, x1: 24, y1: 18 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 12.700017, aperture: [25.4, 25.4], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 5.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/root.usda", "$DIR/graph.usda", "$ROOT/samples/cornellbox.usda"], invisible_overrides: Some(0) } +layer: $ROOT/samples/cornellbox.usda +layer: $DIR/graph.usda +layer: $DIR/root.usda +warning: Warning { code: MaterialFallbackDefault, kind: Skipped, count: 1, prims: ["/scene/Looks/initialShadingGroup"], message: "Material /scene/Looks/initialShadingGroup has no surface shader — using default grey OpenPBR" } +lights: 1 +light 0: dome name Some("/scene/Sky") lpe None pmf 1.0 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 5 geometries, PrimitiveBreakdown { triangles: 822, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 2 } top level, PrimitiveBreakdown { triangles: 1582, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 2 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.3585339 motion [] pieces all=760:2344ecf63e12c441 camera=760:2344ecf63e12c441 shadow=760:2344ecf63e12c441 indirect=760:2344ecf63e12c441 +geom 1: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.25 motion [] pieces all=800:3222c11184d4e6b9 camera=800:3222c11184d4e6b9 shadow=800:3222c11184d4e6b9 indirect=800:3222c11184d4e6b9 +geom 2: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=12:94a297badef437e1 camera=12:94a297badef437e1 shadow=12:94a297badef437e1 indirect=12:94a297badef437e1 +geom 3: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.2 motion [] pieces all=760:c2b60a75c52c78b9 camera=760:c2b60a75c52c78b9 shadow=760:c2b60a75c52c78b9 indirect=760:c2b60a75c52c78b9 +geom 4: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 4.0 motion [] pieces all=10:88b22fc3345d5b05 camera=10:88b22fc3345d5b05 shadow=10:88b22fc3345d5b05 indirect=10:88b22fc3345d5b05 +provenance material /scene/Looks/initialShadingGroup: MaterialOrigin { slots: [0, 1, 2, 3, 4], displaced: false } +provenance light /scene/Sky: LightOrigin { index: 0, geoms: 5..5 } +provenance geometry 0..1: /scene/pSphere2 +provenance geometry 1..2: /scene/pTorus1 +provenance geometry 2..3: /scene/pCube2 +provenance geometry 3..4: /scene/pSphere1 +provenance geometry 4..5: /scene/pCube1 +provenance mesh: MeshOrigin { geom_id: 0, slot: 0, baked: false, moving: false } +provenance mesh: MeshOrigin { geom_id: 1, slot: 1, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 2, slot: 2, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 3, slot: 0, baked: false, moving: false } +provenance mesh: MeshOrigin { geom_id: 4, slot: 3, baked: true, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 17119738035130870988, n_points: 382, n_indices: 1560, n_uvs: None, smooth: false, material: 0 }), placements: 2, shared: false, displaced: false } +provenance mesh slot 1: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 11377722458698790882, n_points: 400, n_indices: 1600, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 2: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 1739488954094729910, n_points: 8, n_indices: 24, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 3: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 12343188411137242430, n_points: 8, n_indices: 20, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: true }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/scene/camera1"), cameras: ["/scene/camera1"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/scene/camera1"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/root_usda-921d5e21a6ec411f-1.image b/crates/crust-core/tests/data/import_baselines/root_usda-921d5e21a6ec411f-1.image new file mode 100644 index 000000000..6d053b645 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/root_usda-921d5e21a6ec411f-1.image @@ -0,0 +1 @@ +24x18 16spp clamp-off e1449afcb0d487dd diff --git a/crates/crust-core/tests/data/import_baselines/root_usda-9d7d0e6b748bbe2f-1.digest b/crates/crust-core/tests/data/import_baselines/root_usda-9d7d0e6b748bbe2f-1.digest new file mode 100644 index 000000000..6d861d21c --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/root_usda-9d7d0e6b748bbe2f-1.digest @@ -0,0 +1,18 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: None +camera: Camera { origin: Vec3A(15.0, 3.0, 3.0), lower_left_corner: Vec3A(4.8863316, -0.044797063, 4.174048), horizontal: Vec3A(1.2295314, 0.0, -6.147657), vertical: Vec3A(-0.44830504, 3.4967792, -0.08966101), u: Vec3A(0.19611613, 0.0, -0.9805807), v: Vec3A(-0.1271232, 0.991561, -0.02542464), lens_radius: 0.05, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: None +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 640, height: 360, region: PixelRect { x0: 0, y0: 0, x1: 640, y1: 360 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: None, depth_of_field: true, motion_blur: false, layer_stack: ["$DIR/root.usda"], invisible_overrides: Some(0) } +layer: $DIR/asset.usdz +layer: $DIR/root.usda +warning: Warning { code: CameraMissing, kind: Skipped, count: 1, prims: [], message: "USD stage has no UsdGeomCamera — falling back to world::get_settings camera" } +lights: 0 +volumes: 0 +world: 0 geometries, PrimitiveBreakdown { triangles: 0, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 0, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: None, cameras: [], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: None, offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/root_usda-9d7d0e6b748bbe2f-1.image b/crates/crust-core/tests/data/import_baselines/root_usda-9d7d0e6b748bbe2f-1.image new file mode 100644 index 000000000..c734c5b1d --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/root_usda-9d7d0e6b748bbe2f-1.image @@ -0,0 +1 @@ +640x360 16spp clamp-off a04a09c0d4b5e325 diff --git a/crates/crust-core/tests/data/import_baselines/root_usda-a0c411ed1048de1a-1.digest b/crates/crust-core/tests/data/import_baselines/root_usda-a0c411ed1048de1a-1.digest new file mode 100644 index 000000000..29cbc9c13 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/root_usda-a0c411ed1048de1a-1.digest @@ -0,0 +1,50 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/scene/camera1") +camera: Camera { origin: Vec3A(0.0074343784, 1.9913422, 4.0133057), lower_left_corner: Vec3A(-6.659224, -3.0086517, -0.98669434), horizontal: Vec3A(13.333317, 0.0, 0.0), vertical: Vec3A(0.0, 9.999988, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: Some(Vec4(0.0, 0.0, -1.0, 3.9133058)), far: Some(Vec4(0.0, 0.0, 1.0, 9995.986)), planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: Some("/Render/settings") +settings: RenderSettings { samples_per_pixel: 4, max_depth: 32, width: 24, height: 18, region: PixelRect { x0: 0, y0: 0, x1: 24, y1: 18 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 12.700017, aperture: [25.4, 25.4], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 5.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/root.usda", "$DIR/graph.usda", "$ROOT/samples/cornellbox.usda"], invisible_overrides: Some(0) } +layer: $ROOT/samples/cornellbox.usda +layer: $DIR/graph.usda +layer: $DIR/root.usda +warning: Warning { code: MaterialFallbackDefault, kind: Skipped, count: 1, prims: ["/scene/Looks/initialShadingGroup"], message: "Material /scene/Looks/initialShadingGroup has no surface shader — using default grey OpenPBR" } +lights: 1 +light 0: dome name Some("/scene/Sky") lpe None pmf 1.0 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 7 geometries, PrimitiveBreakdown { triangles: 822, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 4 } top level, PrimitiveBreakdown { triangles: 1594, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 4 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=12:65349399268647f1 camera=12:65349399268647f1 shadow=12:65349399268647f1 indirect=12:65349399268647f1 +geom 1: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=12:5f7d37de81118c7d camera=12:5f7d37de81118c7d shadow=12:5f7d37de81118c7d indirect=12:5f7d37de81118c7d +geom 2: material #1 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.3585339 motion [] pieces all=760:2344ecf63e12c441 camera=760:2344ecf63e12c441 shadow=760:2344ecf63e12c441 indirect=760:2344ecf63e12c441 +geom 3: material #1 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.25 motion [] pieces all=800:4a8c9f44d777e131 camera=800:4a8c9f44d777e131 shadow=800:4a8c9f44d777e131 indirect=800:4a8c9f44d777e131 +geom 4: material #1 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=12:94a297badef437e1 camera=12:94a297badef437e1 shadow=12:94a297badef437e1 indirect=12:94a297badef437e1 +geom 5: material #1 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.2 motion [] pieces all=760:c2b60a75c52c78b9 camera=760:c2b60a75c52c78b9 shadow=760:c2b60a75c52c78b9 indirect=760:c2b60a75c52c78b9 +geom 6: material #1 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 4.0 motion [] pieces all=10:88b22fc3345d5b05 camera=10:88b22fc3345d5b05 shadow=10:88b22fc3345d5b05 indirect=10:88b22fc3345d5b05 +provenance material /scene/Looks/initialShadingGroup: MaterialOrigin { slots: [2, 3, 4, 5, 6], displaced: false } +provenance arc source: /scene/Grp +provenance arc source: /scene/Grp/M +provenance light /scene/Sky: LightOrigin { index: 0, geoms: 7..7 } +provenance geometry 0..1: /scene/Copy/M +provenance geometry 1..2: /scene/Grp/M +provenance geometry 2..3: /scene/pSphere2 +provenance geometry 3..4: /scene/pTorus1 +provenance geometry 4..5: /scene/pCube2 +provenance geometry 5..6: /scene/pSphere1 +provenance geometry 6..7: /scene/pCube1 +provenance mesh: MeshOrigin { geom_id: 0, slot: 0, baked: false, moving: false } +provenance mesh: MeshOrigin { geom_id: 1, slot: 0, baked: false, moving: false } +provenance mesh: MeshOrigin { geom_id: 2, slot: 1, baked: false, moving: false } +provenance mesh: MeshOrigin { geom_id: 3, slot: 2, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 4, slot: 3, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 5, slot: 1, baked: false, moving: false } +provenance mesh: MeshOrigin { geom_id: 6, slot: 4, baked: true, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 1847950969294950925, n_points: 8, n_indices: 24, n_uvs: None, smooth: false, material: 0 }), placements: 2, shared: false, displaced: false } +provenance mesh slot 1: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 17119738035130870988, n_points: 382, n_indices: 1560, n_uvs: None, smooth: false, material: 1 }), placements: 2, shared: false, displaced: false } +provenance mesh slot 2: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 6096447469814747168, n_points: 400, n_indices: 1600, n_uvs: None, smooth: false, material: 1 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 3: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 1739488954094729910, n_points: 8, n_indices: 24, n_uvs: None, smooth: false, material: 1 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 4: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 12343188411137242430, n_points: 8, n_indices: 20, n_uvs: None, smooth: false, material: 1 }), placements: 1, shared: false, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: true }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/scene/camera1"), cameras: ["/scene/camera1"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/scene/camera1"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/root_usda-a0c411ed1048de1a-1.image b/crates/crust-core/tests/data/import_baselines/root_usda-a0c411ed1048de1a-1.image new file mode 100644 index 000000000..865288893 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/root_usda-a0c411ed1048de1a-1.image @@ -0,0 +1 @@ +24x18 16spp clamp-off 249bef8dcfbf2b34 diff --git a/crates/crust-core/tests/data/import_baselines/root_usda-a95c3cfeafbe744e-1.digest b/crates/crust-core/tests/data/import_baselines/root_usda-a95c3cfeafbe744e-1.digest new file mode 100644 index 000000000..182995533 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/root_usda-a95c3cfeafbe744e-1.digest @@ -0,0 +1,47 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/scene/camera1") +camera: Camera { origin: Vec3A(0.0074343784, 1.9913422, 4.0133057), lower_left_corner: Vec3A(-6.659224, -3.0086517, -0.98669434), horizontal: Vec3A(13.333317, 0.0, 0.0), vertical: Vec3A(0.0, 9.999988, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: Some(Vec4(0.0, 0.0, -1.0, 3.9133058)), far: Some(Vec4(0.0, 0.0, 1.0, 9995.986)), planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: Some("/Render/settings") +settings: RenderSettings { samples_per_pixel: 4, max_depth: 32, width: 24, height: 18, region: PixelRect { x0: 0, y0: 0, x1: 24, y1: 18 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 12.700017, aperture: [25.4, 25.4], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 5.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/root.usda", "$DIR/graph.usda", "$ROOT/samples/cornellbox.usda"], invisible_overrides: Some(0) } +layer: $ROOT/samples/cornellbox.usda +layer: $DIR/graph.usda +layer: $DIR/root.usda +warning: Warning { code: MaterialFallbackDefault, kind: Skipped, count: 1, prims: ["/scene/Looks/initialShadingGroup"], message: "Material /scene/Looks/initialShadingGroup has no surface shader — using default grey OpenPBR" } +lights: 1 +light 0: dome name Some("/scene/Sky") lpe None pmf 1.0 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 8 geometries, PrimitiveBreakdown { triangles: 822, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 5 } top level, PrimitiveBreakdown { triangles: 1594, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 5 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=12:34896e31fe85f1fd camera=12:34896e31fe85f1fd shadow=12:34896e31fe85f1fd indirect=12:34896e31fe85f1fd +geom 1: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=12:21529f349a41184d camera=12:21529f349a41184d shadow=12:21529f349a41184d indirect=12:21529f349a41184d +geom 2: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=12:c5dda2fcb9a778e9 camera=12:c5dda2fcb9a778e9 shadow=12:c5dda2fcb9a778e9 indirect=12:c5dda2fcb9a778e9 +geom 3: material #1 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.3585339 motion [] pieces all=760:2344ecf63e12c441 camera=760:2344ecf63e12c441 shadow=760:2344ecf63e12c441 indirect=760:2344ecf63e12c441 +geom 4: material #1 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.25 motion [] pieces all=800:4a8c9f44d777e131 camera=800:4a8c9f44d777e131 shadow=800:4a8c9f44d777e131 indirect=800:4a8c9f44d777e131 +geom 5: material #1 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=12:94a297badef437e1 camera=12:94a297badef437e1 shadow=12:94a297badef437e1 indirect=12:94a297badef437e1 +geom 6: material #1 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.2 motion [] pieces all=760:c2b60a75c52c78b9 camera=760:c2b60a75c52c78b9 shadow=760:c2b60a75c52c78b9 indirect=760:c2b60a75c52c78b9 +geom 7: material #1 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 4.0 motion [] pieces all=10:88b22fc3345d5b05 camera=10:88b22fc3345d5b05 shadow=10:88b22fc3345d5b05 indirect=10:88b22fc3345d5b05 +provenance material /scene/Looks/initialShadingGroup: MaterialOrigin { slots: [3, 4, 5, 6, 7], displaced: false } +provenance arc source: /scene/Scatter/Protos/Box +provenance light /scene/Sky: LightOrigin { index: 0, geoms: 8..8 } +provenance geometry 0..3: /scene/Scatter +provenance geometry 3..4: /scene/pSphere2 +provenance geometry 4..5: /scene/pTorus1 +provenance geometry 5..6: /scene/pCube2 +provenance geometry 6..7: /scene/pSphere1 +provenance geometry 7..8: /scene/pCube1 +provenance mesh: MeshOrigin { geom_id: 3, slot: 1, baked: false, moving: false } +provenance mesh: MeshOrigin { geom_id: 4, slot: 2, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 5, slot: 3, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 6, slot: 1, baked: false, moving: false } +provenance mesh: MeshOrigin { geom_id: 7, slot: 4, baked: true, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 17025983899874518787, n_points: 8, n_indices: 24, n_uvs: None, smooth: false, material: 0 }), placements: 0, shared: true, displaced: false } +provenance mesh slot 1: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 17119738035130870988, n_points: 382, n_indices: 1560, n_uvs: None, smooth: false, material: 1 }), placements: 2, shared: false, displaced: false } +provenance mesh slot 2: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 6096447469814747168, n_points: 400, n_indices: 1600, n_uvs: None, smooth: false, material: 1 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 3: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 1739488954094729910, n_points: 8, n_indices: 24, n_uvs: None, smooth: false, material: 1 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 4: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 12343188411137242430, n_points: 8, n_indices: 20, n_uvs: None, smooth: false, material: 1 }), placements: 1, shared: false, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: true }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/scene/camera1"), cameras: ["/scene/camera1"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/scene/camera1"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/root_usda-a95c3cfeafbe744e-1.image b/crates/crust-core/tests/data/import_baselines/root_usda-a95c3cfeafbe744e-1.image new file mode 100644 index 000000000..829cc8d28 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/root_usda-a95c3cfeafbe744e-1.image @@ -0,0 +1 @@ +24x18 16spp clamp-off 676eeff8d001e35c diff --git a/crates/crust-core/tests/data/import_baselines/root_usda-aa094b9d362ee4b9-1.digest b/crates/crust-core/tests/data/import_baselines/root_usda-aa094b9d362ee4b9-1.digest new file mode 100644 index 000000000..d1068cc82 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/root_usda-aa094b9d362ee4b9-1.digest @@ -0,0 +1,42 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/scene/camera1") +camera: Camera { origin: Vec3A(0.0074343784, 1.9913422, 4.0133057), lower_left_corner: Vec3A(-6.659224, -3.0086517, -0.98669434), horizontal: Vec3A(13.333317, 0.0, 0.0), vertical: Vec3A(0.0, 9.999988, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: Some(Vec4(0.0, 0.0, -1.0, 3.9133058)), far: Some(Vec4(0.0, 0.0, 1.0, 9995.986)), planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: Some("/Render/settings") +settings: RenderSettings { samples_per_pixel: 4, max_depth: 32, width: 24, height: 18, region: PixelRect { x0: 0, y0: 0, x1: 24, y1: 18 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 12.700017, aperture: [25.4, 25.4], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 5.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/root.usda", "$DIR/graph.usda", "$DIR/other.usda", "$ROOT/samples/cornellbox.usda"], invisible_overrides: Some(0) } +layer: $ROOT/samples/cornellbox.usda +layer: $DIR/graph.usda +layer: $DIR/other.usda +layer: $DIR/root.usda +warning: Warning { code: MaterialFallbackDefault, kind: Skipped, count: 1, prims: ["/scene/Looks/initialShadingGroup"], message: "Material /scene/Looks/initialShadingGroup has no surface shader — using default grey OpenPBR" } +lights: 1 +light 0: dome name Some("/scene/Sky") lpe None pmf 1.0 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 5 geometries, PrimitiveBreakdown { triangles: 822, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 2 } top level, PrimitiveBreakdown { triangles: 1582, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 2 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.3585339 motion [] pieces all=760:2344ecf63e12c441 camera=760:2344ecf63e12c441 shadow=760:2344ecf63e12c441 indirect=760:2344ecf63e12c441 +geom 1: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.25 motion [] pieces all=800:4a8c9f44d777e131 camera=800:4a8c9f44d777e131 shadow=800:4a8c9f44d777e131 indirect=800:4a8c9f44d777e131 +geom 2: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=12:94a297badef437e1 camera=12:94a297badef437e1 shadow=12:94a297badef437e1 indirect=12:94a297badef437e1 +geom 3: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.2 motion [] pieces all=760:c2b60a75c52c78b9 camera=760:c2b60a75c52c78b9 shadow=760:c2b60a75c52c78b9 indirect=760:c2b60a75c52c78b9 +geom 4: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 4.0 motion [] pieces all=10:88b22fc3345d5b05 camera=10:88b22fc3345d5b05 shadow=10:88b22fc3345d5b05 indirect=10:88b22fc3345d5b05 +provenance material /scene/Looks/initialShadingGroup: MaterialOrigin { slots: [0, 1, 2, 3, 4], displaced: false } +provenance light /scene/Sky: LightOrigin { index: 0, geoms: 5..5 } +provenance geometry 0..1: /scene/pSphere2 +provenance geometry 1..2: /scene/pTorus1 +provenance geometry 2..3: /scene/pCube2 +provenance geometry 3..4: /scene/pSphere1 +provenance geometry 4..5: /scene/pCube1 +provenance mesh: MeshOrigin { geom_id: 0, slot: 0, baked: false, moving: false } +provenance mesh: MeshOrigin { geom_id: 1, slot: 1, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 2, slot: 2, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 3, slot: 0, baked: false, moving: false } +provenance mesh: MeshOrigin { geom_id: 4, slot: 3, baked: true, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 17119738035130870988, n_points: 382, n_indices: 1560, n_uvs: None, smooth: false, material: 0 }), placements: 2, shared: false, displaced: false } +provenance mesh slot 1: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 6096447469814747168, n_points: 400, n_indices: 1600, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 2: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 1739488954094729910, n_points: 8, n_indices: 24, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 3: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 12343188411137242430, n_points: 8, n_indices: 20, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: true }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/scene/camera1"), cameras: ["/scene/camera1"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/scene/camera1"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/root_usda-aa094b9d362ee4b9-1.image b/crates/crust-core/tests/data/import_baselines/root_usda-aa094b9d362ee4b9-1.image new file mode 100644 index 000000000..7b4c2a20f --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/root_usda-aa094b9d362ee4b9-1.image @@ -0,0 +1 @@ +24x18 16spp clamp-off 590c41154e1a8676 diff --git a/crates/crust-core/tests/data/import_baselines/root_usda-bedb2af78f4c965d-1.digest b/crates/crust-core/tests/data/import_baselines/root_usda-bedb2af78f4c965d-1.digest new file mode 100644 index 000000000..c601f7367 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/root_usda-bedb2af78f4c965d-1.digest @@ -0,0 +1,20 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: None +camera: Camera { origin: Vec3A(15.0, 3.0, 3.0), lower_left_corner: Vec3A(4.8863316, -0.044797063, 4.174048), horizontal: Vec3A(1.2295314, 0.0, -6.147657), vertical: Vec3A(-0.44830504, 3.4967792, -0.08966101), u: Vec3A(0.19611613, 0.0, -0.9805807), v: Vec3A(-0.1271232, 0.991561, -0.02542464), lens_radius: 0.05, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: None +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 640, height: 360, region: PixelRect { x0: 0, y0: 0, x1: 640, y1: 360 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: None, depth_of_field: true, motion_blur: false, layer_stack: ["$DIR/root.usda", "$DIR/sub.usda"], invisible_overrides: Some(0) } +layer: $DIR/pay.usda +layer: $DIR/ref.usda +layer: $DIR/root.usda +layer: $DIR/sub.usda +warning: Warning { code: CameraMissing, kind: Skipped, count: 1, prims: [], message: "USD stage has no UsdGeomCamera — falling back to world::get_settings camera" } +lights: 0 +volumes: 0 +world: 0 geometries, PrimitiveBreakdown { triangles: 0, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 0, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: None, cameras: [], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: None, offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/root_usda-bedb2af78f4c965d-1.image b/crates/crust-core/tests/data/import_baselines/root_usda-bedb2af78f4c965d-1.image new file mode 100644 index 000000000..c734c5b1d --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/root_usda-bedb2af78f4c965d-1.image @@ -0,0 +1 @@ +640x360 16spp clamp-off a04a09c0d4b5e325 diff --git a/crates/crust-core/tests/data/import_baselines/root_usda-bfc3cfdc3fb023a6-1.digest b/crates/crust-core/tests/data/import_baselines/root_usda-bfc3cfdc3fb023a6-1.digest new file mode 100644 index 000000000..9b398f8c5 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/root_usda-bfc3cfdc3fb023a6-1.digest @@ -0,0 +1,41 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/scene/camera1") +camera: Camera { origin: Vec3A(0.0074343784, 1.9913422, 4.0133057), lower_left_corner: Vec3A(-6.659224, -3.0086517, -0.98669434), horizontal: Vec3A(13.333317, 0.0, 0.0), vertical: Vec3A(0.0, 9.999988, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: Some(Vec4(0.0, 0.0, -1.0, 3.9133058)), far: Some(Vec4(0.0, 0.0, 1.0, 9995.986)), planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: Some("/Render/settings") +settings: RenderSettings { samples_per_pixel: 4, max_depth: 32, width: 24, height: 18, region: PixelRect { x0: 0, y0: 0, x1: 24, y1: 18 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 12.700017, aperture: [25.4, 25.4], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 5.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/root.usda", "$DIR/graph.usda", "$ROOT/samples/cornellbox.usda"], invisible_overrides: Some(0) } +layer: $ROOT/samples/cornellbox.usda +layer: $DIR/graph.usda +layer: $DIR/root.usda +warning: Warning { code: MaterialFallbackDefault, kind: Skipped, count: 1, prims: ["/scene/Looks/initialShadingGroup"], message: "Material /scene/Looks/initialShadingGroup has no surface shader — using default grey OpenPBR" } +lights: 1 +light 0: dome name Some("/scene/Sky") lpe None pmf 1.0 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 5 geometries, PrimitiveBreakdown { triangles: 822, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 2 } top level, PrimitiveBreakdown { triangles: 1582, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 2 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.3585339 motion [] pieces all=760:2344ecf63e12c441 camera=760:2344ecf63e12c441 shadow=760:2344ecf63e12c441 indirect=760:2344ecf63e12c441 +geom 1: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.25 motion [] pieces all=800:cd2903935bc86775 camera=800:cd2903935bc86775 shadow=800:cd2903935bc86775 indirect=800:cd2903935bc86775 +geom 2: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=12:94a297badef437e1 camera=12:94a297badef437e1 shadow=12:94a297badef437e1 indirect=12:94a297badef437e1 +geom 3: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.2 motion [] pieces all=760:c2b60a75c52c78b9 camera=760:c2b60a75c52c78b9 shadow=760:c2b60a75c52c78b9 indirect=760:c2b60a75c52c78b9 +geom 4: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 4.0 motion [] pieces all=10:88b22fc3345d5b05 camera=10:88b22fc3345d5b05 shadow=10:88b22fc3345d5b05 indirect=10:88b22fc3345d5b05 +provenance material /scene/Looks/initialShadingGroup: MaterialOrigin { slots: [0, 1, 2, 3, 4], displaced: false } +provenance light /scene/Sky: LightOrigin { index: 0, geoms: 5..5 } +provenance geometry 0..1: /scene/pSphere2 +provenance geometry 1..2: /scene/pTorus1 +provenance geometry 2..3: /scene/pCube2 +provenance geometry 3..4: /scene/pSphere1 +provenance geometry 4..5: /scene/pCube1 +provenance mesh: MeshOrigin { geom_id: 0, slot: 0, baked: false, moving: false } +provenance mesh: MeshOrigin { geom_id: 1, slot: 1, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 2, slot: 2, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 3, slot: 0, baked: false, moving: false } +provenance mesh: MeshOrigin { geom_id: 4, slot: 3, baked: true, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 17119738035130870988, n_points: 382, n_indices: 1560, n_uvs: None, smooth: false, material: 0 }), placements: 2, shared: false, displaced: false } +provenance mesh slot 1: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 6096447469814747168, n_points: 400, n_indices: 1600, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 2: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 1739488954094729910, n_points: 8, n_indices: 24, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 3: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 12343188411137242430, n_points: 8, n_indices: 20, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: true }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/scene/camera1"), cameras: ["/scene/camera1"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/scene/camera1"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/root_usda-bfc3cfdc3fb023a6-1.image b/crates/crust-core/tests/data/import_baselines/root_usda-bfc3cfdc3fb023a6-1.image new file mode 100644 index 000000000..7b4c2a20f --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/root_usda-bfc3cfdc3fb023a6-1.image @@ -0,0 +1 @@ +24x18 16spp clamp-off 590c41154e1a8676 diff --git a/crates/crust-core/tests/data/import_baselines/root_usda-c51fa0d84e7325f7-1.digest b/crates/crust-core/tests/data/import_baselines/root_usda-c51fa0d84e7325f7-1.digest new file mode 100644 index 000000000..d1068cc82 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/root_usda-c51fa0d84e7325f7-1.digest @@ -0,0 +1,42 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/scene/camera1") +camera: Camera { origin: Vec3A(0.0074343784, 1.9913422, 4.0133057), lower_left_corner: Vec3A(-6.659224, -3.0086517, -0.98669434), horizontal: Vec3A(13.333317, 0.0, 0.0), vertical: Vec3A(0.0, 9.999988, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: Some(Vec4(0.0, 0.0, -1.0, 3.9133058)), far: Some(Vec4(0.0, 0.0, 1.0, 9995.986)), planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: Some("/Render/settings") +settings: RenderSettings { samples_per_pixel: 4, max_depth: 32, width: 24, height: 18, region: PixelRect { x0: 0, y0: 0, x1: 24, y1: 18 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 12.700017, aperture: [25.4, 25.4], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 5.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/root.usda", "$DIR/graph.usda", "$DIR/other.usda", "$ROOT/samples/cornellbox.usda"], invisible_overrides: Some(0) } +layer: $ROOT/samples/cornellbox.usda +layer: $DIR/graph.usda +layer: $DIR/other.usda +layer: $DIR/root.usda +warning: Warning { code: MaterialFallbackDefault, kind: Skipped, count: 1, prims: ["/scene/Looks/initialShadingGroup"], message: "Material /scene/Looks/initialShadingGroup has no surface shader — using default grey OpenPBR" } +lights: 1 +light 0: dome name Some("/scene/Sky") lpe None pmf 1.0 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 5 geometries, PrimitiveBreakdown { triangles: 822, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 2 } top level, PrimitiveBreakdown { triangles: 1582, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 2 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.3585339 motion [] pieces all=760:2344ecf63e12c441 camera=760:2344ecf63e12c441 shadow=760:2344ecf63e12c441 indirect=760:2344ecf63e12c441 +geom 1: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.25 motion [] pieces all=800:4a8c9f44d777e131 camera=800:4a8c9f44d777e131 shadow=800:4a8c9f44d777e131 indirect=800:4a8c9f44d777e131 +geom 2: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=12:94a297badef437e1 camera=12:94a297badef437e1 shadow=12:94a297badef437e1 indirect=12:94a297badef437e1 +geom 3: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.2 motion [] pieces all=760:c2b60a75c52c78b9 camera=760:c2b60a75c52c78b9 shadow=760:c2b60a75c52c78b9 indirect=760:c2b60a75c52c78b9 +geom 4: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 4.0 motion [] pieces all=10:88b22fc3345d5b05 camera=10:88b22fc3345d5b05 shadow=10:88b22fc3345d5b05 indirect=10:88b22fc3345d5b05 +provenance material /scene/Looks/initialShadingGroup: MaterialOrigin { slots: [0, 1, 2, 3, 4], displaced: false } +provenance light /scene/Sky: LightOrigin { index: 0, geoms: 5..5 } +provenance geometry 0..1: /scene/pSphere2 +provenance geometry 1..2: /scene/pTorus1 +provenance geometry 2..3: /scene/pCube2 +provenance geometry 3..4: /scene/pSphere1 +provenance geometry 4..5: /scene/pCube1 +provenance mesh: MeshOrigin { geom_id: 0, slot: 0, baked: false, moving: false } +provenance mesh: MeshOrigin { geom_id: 1, slot: 1, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 2, slot: 2, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 3, slot: 0, baked: false, moving: false } +provenance mesh: MeshOrigin { geom_id: 4, slot: 3, baked: true, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 17119738035130870988, n_points: 382, n_indices: 1560, n_uvs: None, smooth: false, material: 0 }), placements: 2, shared: false, displaced: false } +provenance mesh slot 1: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 6096447469814747168, n_points: 400, n_indices: 1600, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 2: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 1739488954094729910, n_points: 8, n_indices: 24, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 3: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 12343188411137242430, n_points: 8, n_indices: 20, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: true }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/scene/camera1"), cameras: ["/scene/camera1"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/scene/camera1"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/root_usda-c51fa0d84e7325f7-1.image b/crates/crust-core/tests/data/import_baselines/root_usda-c51fa0d84e7325f7-1.image new file mode 100644 index 000000000..8fe0d33e1 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/root_usda-c51fa0d84e7325f7-1.image @@ -0,0 +1 @@ +24x18 16spp clamp-off 0db6d0717721e7da diff --git a/crates/crust-core/tests/data/import_baselines/root_usda-c6c9d5036fcf5e6d-1.digest b/crates/crust-core/tests/data/import_baselines/root_usda-c6c9d5036fcf5e6d-1.digest new file mode 100644 index 000000000..9277209f2 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/root_usda-c6c9d5036fcf5e6d-1.digest @@ -0,0 +1,32 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/World/Cam") +camera: Camera { origin: Vec3A(0.0, 0.0, 6.0), lower_left_corner: Vec3A(-8.49489, -4.247445, -4.0), horizontal: Vec3A(16.98978, 0.0, 0.0), vertical: Vec3A(0.0, 8.49489, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: Some("/Render/settings") +settings: RenderSettings { samples_per_pixel: 1, max_depth: 32, width: 48, height: 24, region: PixelRect { x0: 0, y0: 0, x1: 48, y1: 24 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 18.0, aperture: [20.955, 15.2908], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 10.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/root.usda"], invisible_overrides: Some(0) } +layer: $DIR/root.usda +lights: 1 +light 0: distant name Some("/World/Sun") lpe None pmf 1.0 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 4 geometries, PrimitiveBreakdown { triangles: 2, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 3 } top level, PrimitiveBreakdown { triangles: 6, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 3 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:a99fe0878a488eb7 camera=2:a99fe0878a488eb7 shadow=2:a99fe0878a488eb7 indirect=2:a99fe0878a488eb7 +geom 1: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:5ca79067d50d064e camera=2:5ca79067d50d064e shadow=2:5ca79067d50d064e indirect=2:5ca79067d50d064e +geom 2: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:e2657f4075f21b26 camera=2:e2657f4075f21b26 shadow=2:e2657f4075f21b26 indirect=2:e2657f4075f21b26 +geom 3: material #1 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:8663619c85c630b8 camera=2:8663619c85c630b8 shadow=2:8663619c85c630b8 indirect=2:8663619c85c630b8 +provenance material /World/Looks/Red: MaterialOrigin { slots: [3], displaced: false } +provenance arc source: /Proto +provenance arc source: /World/Scatter/Protos/Box +provenance light /World/Sun: LightOrigin { index: 0, geoms: 4..4 } +provenance geometry 0..1: /World/Inst +provenance geometry 1..3: /World/Scatter +provenance geometry 3..4: /World/Card +provenance mesh: MeshOrigin { geom_id: 3, slot: 2, baked: true, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 17555877814860148657, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 0 }), placements: 0, shared: true, displaced: false } +provenance mesh slot 1: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 7377966807836294734, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 0 }), placements: 0, shared: true, displaced: false } +provenance mesh slot 2: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 2452712229199093531, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 1 }), placements: 1, shared: false, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: true }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/World/Cam"), cameras: ["/World/Cam"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/World/Cam"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/root_usda-c6c9d5036fcf5e6d-1.image b/crates/crust-core/tests/data/import_baselines/root_usda-c6c9d5036fcf5e6d-1.image new file mode 100644 index 000000000..64d3507cc --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/root_usda-c6c9d5036fcf5e6d-1.image @@ -0,0 +1 @@ +48x24 16spp clamp-off f0bb5c496107b07a diff --git a/crates/crust-core/tests/data/import_baselines/root_usda-c6c9d5036fcf5e6d-2.digest b/crates/crust-core/tests/data/import_baselines/root_usda-c6c9d5036fcf5e6d-2.digest new file mode 100644 index 000000000..9277209f2 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/root_usda-c6c9d5036fcf5e6d-2.digest @@ -0,0 +1,32 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/World/Cam") +camera: Camera { origin: Vec3A(0.0, 0.0, 6.0), lower_left_corner: Vec3A(-8.49489, -4.247445, -4.0), horizontal: Vec3A(16.98978, 0.0, 0.0), vertical: Vec3A(0.0, 8.49489, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: Some("/Render/settings") +settings: RenderSettings { samples_per_pixel: 1, max_depth: 32, width: 48, height: 24, region: PixelRect { x0: 0, y0: 0, x1: 48, y1: 24 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 18.0, aperture: [20.955, 15.2908], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 10.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/root.usda"], invisible_overrides: Some(0) } +layer: $DIR/root.usda +lights: 1 +light 0: distant name Some("/World/Sun") lpe None pmf 1.0 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 4 geometries, PrimitiveBreakdown { triangles: 2, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 3 } top level, PrimitiveBreakdown { triangles: 6, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 3 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:a99fe0878a488eb7 camera=2:a99fe0878a488eb7 shadow=2:a99fe0878a488eb7 indirect=2:a99fe0878a488eb7 +geom 1: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:5ca79067d50d064e camera=2:5ca79067d50d064e shadow=2:5ca79067d50d064e indirect=2:5ca79067d50d064e +geom 2: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:e2657f4075f21b26 camera=2:e2657f4075f21b26 shadow=2:e2657f4075f21b26 indirect=2:e2657f4075f21b26 +geom 3: material #1 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:8663619c85c630b8 camera=2:8663619c85c630b8 shadow=2:8663619c85c630b8 indirect=2:8663619c85c630b8 +provenance material /World/Looks/Red: MaterialOrigin { slots: [3], displaced: false } +provenance arc source: /Proto +provenance arc source: /World/Scatter/Protos/Box +provenance light /World/Sun: LightOrigin { index: 0, geoms: 4..4 } +provenance geometry 0..1: /World/Inst +provenance geometry 1..3: /World/Scatter +provenance geometry 3..4: /World/Card +provenance mesh: MeshOrigin { geom_id: 3, slot: 2, baked: true, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 17555877814860148657, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 0 }), placements: 0, shared: true, displaced: false } +provenance mesh slot 1: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 7377966807836294734, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 0 }), placements: 0, shared: true, displaced: false } +provenance mesh slot 2: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 2452712229199093531, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 1 }), placements: 1, shared: false, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: true }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/World/Cam"), cameras: ["/World/Cam"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/World/Cam"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/root_usda-c6c9d5036fcf5e6d-2.image b/crates/crust-core/tests/data/import_baselines/root_usda-c6c9d5036fcf5e6d-2.image new file mode 100644 index 000000000..64d3507cc --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/root_usda-c6c9d5036fcf5e6d-2.image @@ -0,0 +1 @@ +48x24 16spp clamp-off f0bb5c496107b07a diff --git a/crates/crust-core/tests/data/import_baselines/root_usda-c78a3b1a4bb10072-1.digest b/crates/crust-core/tests/data/import_baselines/root_usda-c78a3b1a4bb10072-1.digest new file mode 100644 index 000000000..19dd8ac84 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/root_usda-c78a3b1a4bb10072-1.digest @@ -0,0 +1,41 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/scene/camera1") +camera: Camera { origin: Vec3A(0.0074343784, 1.9913422, 4.0133057), lower_left_corner: Vec3A(-6.659224, -3.0086517, -0.98669434), horizontal: Vec3A(13.333317, 0.0, 0.0), vertical: Vec3A(0.0, 9.999988, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: Some(Vec4(0.0, 0.0, -1.0, 3.9133058)), far: Some(Vec4(0.0, 0.0, 1.0, 9995.986)), planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: Some("/Render/settings") +settings: RenderSettings { samples_per_pixel: 4096, max_depth: 32, width: 160, height: 120, region: PixelRect { x0: 0, y0: 0, x1: 160, y1: 120 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 12.700017, aperture: [25.4, 25.4], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 5.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/root.usda", "$DIR/graph.usda", "$ROOT/samples/cornellbox.usda"], invisible_overrides: Some(0) } +layer: $ROOT/samples/cornellbox.usda +layer: $DIR/graph.usda +layer: $DIR/root.usda +warning: Warning { code: MaterialFallbackDefault, kind: Skipped, count: 1, prims: ["/scene/Looks/initialShadingGroup"], message: "Material /scene/Looks/initialShadingGroup has no surface shader — using default grey OpenPBR" } +lights: 1 +light 0: dome name Some("/scene/Sky") lpe None pmf 1.0 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 5 geometries, PrimitiveBreakdown { triangles: 822, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 2 } top level, PrimitiveBreakdown { triangles: 1582, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 2 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.3585339 motion [] pieces all=760:2344ecf63e12c441 camera=760:2344ecf63e12c441 shadow=760:2344ecf63e12c441 indirect=760:2344ecf63e12c441 +geom 1: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.25 motion [] pieces all=800:4a8c9f44d777e131 camera=800:4a8c9f44d777e131 shadow=800:4a8c9f44d777e131 indirect=800:4a8c9f44d777e131 +geom 2: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=12:94a297badef437e1 camera=12:94a297badef437e1 shadow=12:94a297badef437e1 indirect=12:94a297badef437e1 +geom 3: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.2 motion [] pieces all=760:c2b60a75c52c78b9 camera=760:c2b60a75c52c78b9 shadow=760:c2b60a75c52c78b9 indirect=760:c2b60a75c52c78b9 +geom 4: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 4.0 motion [] pieces all=10:88b22fc3345d5b05 camera=10:88b22fc3345d5b05 shadow=10:88b22fc3345d5b05 indirect=10:88b22fc3345d5b05 +provenance material /scene/Looks/initialShadingGroup: MaterialOrigin { slots: [0, 1, 2, 3, 4], displaced: false } +provenance light /scene/Sky: LightOrigin { index: 0, geoms: 5..5 } +provenance geometry 0..1: /scene/pSphere2 +provenance geometry 1..2: /scene/pTorus1 +provenance geometry 2..3: /scene/pCube2 +provenance geometry 3..4: /scene/pSphere1 +provenance geometry 4..5: /scene/pCube1 +provenance mesh: MeshOrigin { geom_id: 0, slot: 0, baked: false, moving: false } +provenance mesh: MeshOrigin { geom_id: 1, slot: 1, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 2, slot: 2, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 3, slot: 0, baked: false, moving: false } +provenance mesh: MeshOrigin { geom_id: 4, slot: 3, baked: true, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 17119738035130870988, n_points: 382, n_indices: 1560, n_uvs: None, smooth: false, material: 0 }), placements: 2, shared: false, displaced: false } +provenance mesh slot 1: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 6096447469814747168, n_points: 400, n_indices: 1600, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 2: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 1739488954094729910, n_points: 8, n_indices: 24, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 3: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 12343188411137242430, n_points: 8, n_indices: 20, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: true }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/scene/camera1"), cameras: ["/scene/camera1"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/scene/camera1"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/root_usda-c78a3b1a4bb10072-1.image b/crates/crust-core/tests/data/import_baselines/root_usda-c78a3b1a4bb10072-1.image new file mode 100644 index 000000000..db1f29f34 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/root_usda-c78a3b1a4bb10072-1.image @@ -0,0 +1 @@ +160x120 16spp clamp-off 6cfbcbe0993c6cb0 diff --git a/crates/crust-core/tests/data/import_baselines/root_usda-cc0a74d0f1a22c6a-1.digest b/crates/crust-core/tests/data/import_baselines/root_usda-cc0a74d0f1a22c6a-1.digest new file mode 100644 index 000000000..e4c24ed7e --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/root_usda-cc0a74d0f1a22c6a-1.digest @@ -0,0 +1,49 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/scene/camera1") +camera: Camera { origin: Vec3A(0.0074343784, 1.9913422, 4.0133057), lower_left_corner: Vec3A(-6.659224, -3.0086517, -0.98669434), horizontal: Vec3A(13.333317, 0.0, 0.0), vertical: Vec3A(0.0, 9.999988, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: Some(Vec4(0.0, 0.0, -1.0, 3.9133058)), far: Some(Vec4(0.0, 0.0, 1.0, 9995.986)), planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: Some("/Render/settings") +settings: RenderSettings { samples_per_pixel: 4, max_depth: 32, width: 24, height: 18, region: PixelRect { x0: 0, y0: 0, x1: 24, y1: 18 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 12.700017, aperture: [25.4, 25.4], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 5.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/root.usda", "$DIR/graph.usda", "$ROOT/samples/cornellbox.usda"], invisible_overrides: Some(0) } +layer: $ROOT/samples/cornellbox.usda +layer: $DIR/graph.usda +layer: $DIR/root.usda +warning: Warning { code: MaterialFallbackDefault, kind: Skipped, count: 1, prims: ["/scene/Looks/initialShadingGroup"], message: "Material /scene/Looks/initialShadingGroup has no surface shader — using default grey OpenPBR" } +lights: 1 +light 0: dome name Some("/scene/Sky") lpe None pmf 1.0 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 7 geometries, PrimitiveBreakdown { triangles: 846, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 2 } top level, PrimitiveBreakdown { triangles: 1606, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 2 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=12:a58c5d6bf990dde9 camera=12:a58c5d6bf990dde9 shadow=12:a58c5d6bf990dde9 indirect=12:a58c5d6bf990dde9 +geom 1: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=12:5f7d37de81118c7d camera=12:5f7d37de81118c7d shadow=12:5f7d37de81118c7d indirect=12:5f7d37de81118c7d +geom 2: material #1 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.3585339 motion [] pieces all=760:2344ecf63e12c441 camera=760:2344ecf63e12c441 shadow=760:2344ecf63e12c441 indirect=760:2344ecf63e12c441 +geom 3: material #1 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.25 motion [] pieces all=800:4a8c9f44d777e131 camera=800:4a8c9f44d777e131 shadow=800:4a8c9f44d777e131 indirect=800:4a8c9f44d777e131 +geom 4: material #1 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=12:94a297badef437e1 camera=12:94a297badef437e1 shadow=12:94a297badef437e1 indirect=12:94a297badef437e1 +geom 5: material #1 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.2 motion [] pieces all=760:c2b60a75c52c78b9 camera=760:c2b60a75c52c78b9 shadow=760:c2b60a75c52c78b9 indirect=760:c2b60a75c52c78b9 +geom 6: material #1 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 4.0 motion [] pieces all=10:88b22fc3345d5b05 camera=10:88b22fc3345d5b05 shadow=10:88b22fc3345d5b05 indirect=10:88b22fc3345d5b05 +provenance material /scene/Looks/initialShadingGroup: MaterialOrigin { slots: [2, 3, 4, 5, 6], displaced: false } +provenance light /scene/Sky: LightOrigin { index: 0, geoms: 7..7 } +provenance geometry 0..1: /scene/B +provenance geometry 1..2: /scene/A +provenance geometry 2..3: /scene/pSphere2 +provenance geometry 3..4: /scene/pTorus1 +provenance geometry 4..5: /scene/pCube2 +provenance geometry 5..6: /scene/pSphere1 +provenance geometry 6..7: /scene/pCube1 +provenance mesh: MeshOrigin { geom_id: 0, slot: 0, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 1, slot: 1, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 2, slot: 2, baked: false, moving: false } +provenance mesh: MeshOrigin { geom_id: 3, slot: 3, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 4, slot: 4, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 5, slot: 2, baked: false, moving: false } +provenance mesh: MeshOrigin { geom_id: 6, slot: 5, baked: true, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 11423571544592140440, n_points: 8, n_indices: 24, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 1: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 1847950969294950925, n_points: 8, n_indices: 24, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 2: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 17119738035130870988, n_points: 382, n_indices: 1560, n_uvs: None, smooth: false, material: 1 }), placements: 2, shared: false, displaced: false } +provenance mesh slot 3: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 6096447469814747168, n_points: 400, n_indices: 1600, n_uvs: None, smooth: false, material: 1 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 4: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 1739488954094729910, n_points: 8, n_indices: 24, n_uvs: None, smooth: false, material: 1 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 5: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 12343188411137242430, n_points: 8, n_indices: 20, n_uvs: None, smooth: false, material: 1 }), placements: 1, shared: false, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: true }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/scene/camera1"), cameras: ["/scene/camera1"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/scene/camera1"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/root_usda-cc0a74d0f1a22c6a-1.image b/crates/crust-core/tests/data/import_baselines/root_usda-cc0a74d0f1a22c6a-1.image new file mode 100644 index 000000000..770981cd8 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/root_usda-cc0a74d0f1a22c6a-1.image @@ -0,0 +1 @@ +24x18 16spp clamp-off dc3113cd3ffe1848 diff --git a/crates/crust-core/tests/data/import_baselines/root_usda-ccefc9342ef07f81-1.digest b/crates/crust-core/tests/data/import_baselines/root_usda-ccefc9342ef07f81-1.digest new file mode 100644 index 000000000..0cd9bc89e --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/root_usda-ccefc9342ef07f81-1.digest @@ -0,0 +1,45 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/scene/camera1") +camera: Camera { origin: Vec3A(0.0074343784, 1.9913422, 4.0133057), lower_left_corner: Vec3A(-6.659224, -3.0086517, -0.98669434), horizontal: Vec3A(13.333317, 0.0, 0.0), vertical: Vec3A(0.0, 9.999988, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: Some(Vec4(0.0, 0.0, -1.0, 3.9133058)), far: Some(Vec4(0.0, 0.0, 1.0, 9995.986)), planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: Some("/Render/settings") +settings: RenderSettings { samples_per_pixel: 4, max_depth: 32, width: 24, height: 18, region: PixelRect { x0: 0, y0: 0, x1: 24, y1: 18 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 12.700017, aperture: [25.4, 25.4], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 5.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/root.usda", "$DIR/graph.usda", "$ROOT/samples/cornellbox.usda"], invisible_overrides: Some(0) } +layer: $ROOT/samples/cornellbox.usda +layer: $DIR/graph.usda +layer: $DIR/root.usda +warning: Warning { code: MaterialFallbackDefault, kind: Skipped, count: 1, prims: ["/scene/Looks/initialShadingGroup"], message: "Material /scene/Looks/initialShadingGroup has no surface shader — using default grey OpenPBR" } +lights: 2 +light 0: area name Some("/scene/Panel") lpe None pmf 0.5 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 1: dome name Some("/scene/Sky") lpe None pmf 0.5 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 6 geometries, PrimitiveBreakdown { triangles: 824, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 2 } top level, PrimitiveBreakdown { triangles: 1584, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 2 } unique, motion false +geom 0: material #0 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:8b827cafedeeb944 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=2:8b827cafedeeb944 +geom 1: material #1 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.3585339 motion [] pieces all=760:2344ecf63e12c441 camera=760:2344ecf63e12c441 shadow=760:2344ecf63e12c441 indirect=760:2344ecf63e12c441 +geom 2: material #1 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.25 motion [] pieces all=800:4a8c9f44d777e131 camera=800:4a8c9f44d777e131 shadow=800:4a8c9f44d777e131 indirect=800:4a8c9f44d777e131 +geom 3: material #1 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=12:94a297badef437e1 camera=12:94a297badef437e1 shadow=12:94a297badef437e1 indirect=12:94a297badef437e1 +geom 4: material #1 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.2 motion [] pieces all=760:c2b60a75c52c78b9 camera=760:c2b60a75c52c78b9 shadow=760:c2b60a75c52c78b9 indirect=760:c2b60a75c52c78b9 +geom 5: material #1 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 4.0 motion [] pieces all=10:88b22fc3345d5b05 camera=10:88b22fc3345d5b05 shadow=10:88b22fc3345d5b05 indirect=10:88b22fc3345d5b05 +provenance material /scene/Looks/initialShadingGroup: MaterialOrigin { slots: [1, 2, 3, 4, 5], displaced: false } +provenance light /scene/Panel: LightOrigin { index: 0, geoms: 0..1 } +provenance light /scene/Sky: LightOrigin { index: 1, geoms: 6..6 } +provenance geometry 0..1: /scene/Panel +provenance geometry 1..2: /scene/pSphere2 +provenance geometry 2..3: /scene/pTorus1 +provenance geometry 3..4: /scene/pCube2 +provenance geometry 4..5: /scene/pSphere1 +provenance geometry 5..6: /scene/pCube1 +provenance mesh: MeshOrigin { geom_id: 1, slot: 0, baked: false, moving: false } +provenance mesh: MeshOrigin { geom_id: 2, slot: 1, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 3, slot: 2, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 4, slot: 0, baked: false, moving: false } +provenance mesh: MeshOrigin { geom_id: 5, slot: 3, baked: true, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 17119738035130870988, n_points: 382, n_indices: 1560, n_uvs: None, smooth: false, material: 0 }), placements: 2, shared: false, displaced: false } +provenance mesh slot 1: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 6096447469814747168, n_points: 400, n_indices: 1600, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 2: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 1739488954094729910, n_points: 8, n_indices: 24, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 3: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 12343188411137242430, n_points: 8, n_indices: 20, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: true }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/scene/camera1"), cameras: ["/scene/camera1"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/scene/camera1"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/root_usda-ccefc9342ef07f81-1.image b/crates/crust-core/tests/data/import_baselines/root_usda-ccefc9342ef07f81-1.image new file mode 100644 index 000000000..f1a87e269 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/root_usda-ccefc9342ef07f81-1.image @@ -0,0 +1 @@ +24x18 16spp clamp-off 46717004069b8cbd diff --git a/crates/crust-core/tests/data/import_baselines/root_usda-ce726227b7d02261-1.digest b/crates/crust-core/tests/data/import_baselines/root_usda-ce726227b7d02261-1.digest new file mode 100644 index 000000000..38f6fd21e --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/root_usda-ce726227b7d02261-1.digest @@ -0,0 +1,47 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/scene/camera1") +camera: Camera { origin: Vec3A(0.0074343784, 1.9913422, 4.0133057), lower_left_corner: Vec3A(-6.659224, -3.0086517, -0.98669434), horizontal: Vec3A(13.333317, 0.0, 0.0), vertical: Vec3A(0.0, 9.999988, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: Some(Vec4(0.0, 0.0, -1.0, 3.9133058)), far: Some(Vec4(0.0, 0.0, 1.0, 9995.986)), planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: Some("/Render/settings") +settings: RenderSettings { samples_per_pixel: 4, max_depth: 32, width: 24, height: 18, region: PixelRect { x0: 0, y0: 0, x1: 24, y1: 18 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 12.700017, aperture: [25.4, 25.4], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 5.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/root.usda", "$DIR/graph.usda", "$ROOT/samples/cornellbox.usda"], invisible_overrides: Some(0) } +layer: $ROOT/samples/cornellbox.usda +layer: $DIR/graph.usda +layer: $DIR/root.usda +warning: Warning { code: MaterialFallbackDefault, kind: Skipped, count: 1, prims: ["/scene/Looks/initialShadingGroup"], message: "Material /scene/Looks/initialShadingGroup has no surface shader — using default grey OpenPBR" } +lights: 1 +light 0: dome name Some("/scene/Sky") lpe None pmf 1.0 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 8 geometries, PrimitiveBreakdown { triangles: 822, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 5 } top level, PrimitiveBreakdown { triangles: 1594, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 5 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=12:adee7bdbd37e18ad camera=12:adee7bdbd37e18ad shadow=12:adee7bdbd37e18ad indirect=12:adee7bdbd37e18ad +geom 1: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=12:50aba61af8f5acc5 camera=12:50aba61af8f5acc5 shadow=12:50aba61af8f5acc5 indirect=12:50aba61af8f5acc5 +geom 2: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=12:852a2d73a873d8f5 camera=12:852a2d73a873d8f5 shadow=12:852a2d73a873d8f5 indirect=12:852a2d73a873d8f5 +geom 3: material #1 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.3585339 motion [] pieces all=760:2344ecf63e12c441 camera=760:2344ecf63e12c441 shadow=760:2344ecf63e12c441 indirect=760:2344ecf63e12c441 +geom 4: material #1 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.25 motion [] pieces all=800:4a8c9f44d777e131 camera=800:4a8c9f44d777e131 shadow=800:4a8c9f44d777e131 indirect=800:4a8c9f44d777e131 +geom 5: material #1 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=12:94a297badef437e1 camera=12:94a297badef437e1 shadow=12:94a297badef437e1 indirect=12:94a297badef437e1 +geom 6: material #1 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.2 motion [] pieces all=760:c2b60a75c52c78b9 camera=760:c2b60a75c52c78b9 shadow=760:c2b60a75c52c78b9 indirect=760:c2b60a75c52c78b9 +geom 7: material #1 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 4.0 motion [] pieces all=10:88b22fc3345d5b05 camera=10:88b22fc3345d5b05 shadow=10:88b22fc3345d5b05 indirect=10:88b22fc3345d5b05 +provenance material /scene/Looks/initialShadingGroup: MaterialOrigin { slots: [3, 4, 5, 6, 7], displaced: false } +provenance arc source: /scene/Scatter/Protos/Box +provenance light /scene/Sky: LightOrigin { index: 0, geoms: 8..8 } +provenance geometry 0..3: /scene/Scatter +provenance geometry 3..4: /scene/pSphere2 +provenance geometry 4..5: /scene/pTorus1 +provenance geometry 5..6: /scene/pCube2 +provenance geometry 6..7: /scene/pSphere1 +provenance geometry 7..8: /scene/pCube1 +provenance mesh: MeshOrigin { geom_id: 3, slot: 1, baked: false, moving: false } +provenance mesh: MeshOrigin { geom_id: 4, slot: 2, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 5, slot: 3, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 6, slot: 1, baked: false, moving: false } +provenance mesh: MeshOrigin { geom_id: 7, slot: 4, baked: true, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 17025983899874518787, n_points: 8, n_indices: 24, n_uvs: None, smooth: false, material: 0 }), placements: 0, shared: true, displaced: false } +provenance mesh slot 1: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 17119738035130870988, n_points: 382, n_indices: 1560, n_uvs: None, smooth: false, material: 1 }), placements: 2, shared: false, displaced: false } +provenance mesh slot 2: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 6096447469814747168, n_points: 400, n_indices: 1600, n_uvs: None, smooth: false, material: 1 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 3: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 1739488954094729910, n_points: 8, n_indices: 24, n_uvs: None, smooth: false, material: 1 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 4: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 12343188411137242430, n_points: 8, n_indices: 20, n_uvs: None, smooth: false, material: 1 }), placements: 1, shared: false, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: true }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/scene/camera1"), cameras: ["/scene/camera1"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/scene/camera1"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/root_usda-ce726227b7d02261-1.image b/crates/crust-core/tests/data/import_baselines/root_usda-ce726227b7d02261-1.image new file mode 100644 index 000000000..5e29237aa --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/root_usda-ce726227b7d02261-1.image @@ -0,0 +1 @@ +24x18 16spp clamp-off 9ecac36811a8f573 diff --git a/crates/crust-core/tests/data/import_baselines/root_usda-cef90a6ad595b1b4-1.digest b/crates/crust-core/tests/data/import_baselines/root_usda-cef90a6ad595b1b4-1.digest new file mode 100644 index 000000000..c601f7367 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/root_usda-cef90a6ad595b1b4-1.digest @@ -0,0 +1,20 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: None +camera: Camera { origin: Vec3A(15.0, 3.0, 3.0), lower_left_corner: Vec3A(4.8863316, -0.044797063, 4.174048), horizontal: Vec3A(1.2295314, 0.0, -6.147657), vertical: Vec3A(-0.44830504, 3.4967792, -0.08966101), u: Vec3A(0.19611613, 0.0, -0.9805807), v: Vec3A(-0.1271232, 0.991561, -0.02542464), lens_radius: 0.05, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: None +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 640, height: 360, region: PixelRect { x0: 0, y0: 0, x1: 640, y1: 360 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: None, depth_of_field: true, motion_blur: false, layer_stack: ["$DIR/root.usda", "$DIR/sub.usda"], invisible_overrides: Some(0) } +layer: $DIR/pay.usda +layer: $DIR/ref.usda +layer: $DIR/root.usda +layer: $DIR/sub.usda +warning: Warning { code: CameraMissing, kind: Skipped, count: 1, prims: [], message: "USD stage has no UsdGeomCamera — falling back to world::get_settings camera" } +lights: 0 +volumes: 0 +world: 0 geometries, PrimitiveBreakdown { triangles: 0, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 0, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: None, cameras: [], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: None, offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/root_usda-cef90a6ad595b1b4-1.image b/crates/crust-core/tests/data/import_baselines/root_usda-cef90a6ad595b1b4-1.image new file mode 100644 index 000000000..c734c5b1d --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/root_usda-cef90a6ad595b1b4-1.image @@ -0,0 +1 @@ +640x360 16spp clamp-off a04a09c0d4b5e325 diff --git a/crates/crust-core/tests/data/import_baselines/root_usda-d2c312942e13c754-1.digest b/crates/crust-core/tests/data/import_baselines/root_usda-d2c312942e13c754-1.digest new file mode 100644 index 000000000..458b1e1f7 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/root_usda-d2c312942e13c754-1.digest @@ -0,0 +1,45 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/scene/camera1") +camera: Camera { origin: Vec3A(0.0074343784, 1.9913422, 4.0133057), lower_left_corner: Vec3A(-6.659224, -3.0086517, -0.98669434), horizontal: Vec3A(13.333317, 0.0, 0.0), vertical: Vec3A(0.0, 9.999988, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: Some(Vec4(0.0, 0.0, -1.0, 3.9133058)), far: Some(Vec4(0.0, 0.0, 1.0, 9995.986)), planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: Some("/Render/settings") +settings: RenderSettings { samples_per_pixel: 4, max_depth: 32, width: 24, height: 18, region: PixelRect { x0: 0, y0: 0, x1: 24, y1: 18 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 12.700017, aperture: [25.4, 25.4], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 5.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/root.usda", "$DIR/graph.usda", "$ROOT/samples/cornellbox.usda"], invisible_overrides: Some(0) } +layer: $ROOT/samples/cornellbox.usda +layer: $DIR/graph.usda +layer: $DIR/root.usda +warning: Warning { code: MaterialFallbackDefault, kind: Skipped, count: 1, prims: ["/scene/Looks/initialShadingGroup"], message: "Material /scene/Looks/initialShadingGroup has no surface shader — using default grey OpenPBR" } +lights: 2 +light 0: area name Some("/scene/Panel") lpe None pmf 0.5 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 1: dome name Some("/scene/Sky") lpe None pmf 0.5 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 6 geometries, PrimitiveBreakdown { triangles: 824, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 2 } top level, PrimitiveBreakdown { triangles: 1584, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 2 } unique, motion false +geom 0: material #0 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:c41da9ceb80ae169 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=2:c41da9ceb80ae169 +geom 1: material #1 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.3585339 motion [] pieces all=760:2344ecf63e12c441 camera=760:2344ecf63e12c441 shadow=760:2344ecf63e12c441 indirect=760:2344ecf63e12c441 +geom 2: material #1 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.25 motion [] pieces all=800:4a8c9f44d777e131 camera=800:4a8c9f44d777e131 shadow=800:4a8c9f44d777e131 indirect=800:4a8c9f44d777e131 +geom 3: material #1 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=12:94a297badef437e1 camera=12:94a297badef437e1 shadow=12:94a297badef437e1 indirect=12:94a297badef437e1 +geom 4: material #1 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.2 motion [] pieces all=760:c2b60a75c52c78b9 camera=760:c2b60a75c52c78b9 shadow=760:c2b60a75c52c78b9 indirect=760:c2b60a75c52c78b9 +geom 5: material #1 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 4.0 motion [] pieces all=10:88b22fc3345d5b05 camera=10:88b22fc3345d5b05 shadow=10:88b22fc3345d5b05 indirect=10:88b22fc3345d5b05 +provenance material /scene/Looks/initialShadingGroup: MaterialOrigin { slots: [1, 2, 3, 4, 5], displaced: false } +provenance light /scene/Panel: LightOrigin { index: 0, geoms: 0..1 } +provenance light /scene/Sky: LightOrigin { index: 1, geoms: 6..6 } +provenance geometry 0..1: /scene/Panel +provenance geometry 1..2: /scene/pSphere2 +provenance geometry 2..3: /scene/pTorus1 +provenance geometry 3..4: /scene/pCube2 +provenance geometry 4..5: /scene/pSphere1 +provenance geometry 5..6: /scene/pCube1 +provenance mesh: MeshOrigin { geom_id: 1, slot: 0, baked: false, moving: false } +provenance mesh: MeshOrigin { geom_id: 2, slot: 1, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 3, slot: 2, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 4, slot: 0, baked: false, moving: false } +provenance mesh: MeshOrigin { geom_id: 5, slot: 3, baked: true, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 17119738035130870988, n_points: 382, n_indices: 1560, n_uvs: None, smooth: false, material: 0 }), placements: 2, shared: false, displaced: false } +provenance mesh slot 1: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 6096447469814747168, n_points: 400, n_indices: 1600, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 2: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 1739488954094729910, n_points: 8, n_indices: 24, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 3: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 12343188411137242430, n_points: 8, n_indices: 20, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: true }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/scene/camera1"), cameras: ["/scene/camera1"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/scene/camera1"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/root_usda-d2c312942e13c754-1.image b/crates/crust-core/tests/data/import_baselines/root_usda-d2c312942e13c754-1.image new file mode 100644 index 000000000..11b622894 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/root_usda-d2c312942e13c754-1.image @@ -0,0 +1 @@ +24x18 16spp clamp-off e943b6c2da750dd8 diff --git a/crates/crust-core/tests/data/import_baselines/root_usda-dcc0d192c2504171-1.digest b/crates/crust-core/tests/data/import_baselines/root_usda-dcc0d192c2504171-1.digest new file mode 100644 index 000000000..d1068cc82 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/root_usda-dcc0d192c2504171-1.digest @@ -0,0 +1,42 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/scene/camera1") +camera: Camera { origin: Vec3A(0.0074343784, 1.9913422, 4.0133057), lower_left_corner: Vec3A(-6.659224, -3.0086517, -0.98669434), horizontal: Vec3A(13.333317, 0.0, 0.0), vertical: Vec3A(0.0, 9.999988, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: Some(Vec4(0.0, 0.0, -1.0, 3.9133058)), far: Some(Vec4(0.0, 0.0, 1.0, 9995.986)), planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: Some("/Render/settings") +settings: RenderSettings { samples_per_pixel: 4, max_depth: 32, width: 24, height: 18, region: PixelRect { x0: 0, y0: 0, x1: 24, y1: 18 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 12.700017, aperture: [25.4, 25.4], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 5.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/root.usda", "$DIR/graph.usda", "$DIR/other.usda", "$ROOT/samples/cornellbox.usda"], invisible_overrides: Some(0) } +layer: $ROOT/samples/cornellbox.usda +layer: $DIR/graph.usda +layer: $DIR/other.usda +layer: $DIR/root.usda +warning: Warning { code: MaterialFallbackDefault, kind: Skipped, count: 1, prims: ["/scene/Looks/initialShadingGroup"], message: "Material /scene/Looks/initialShadingGroup has no surface shader — using default grey OpenPBR" } +lights: 1 +light 0: dome name Some("/scene/Sky") lpe None pmf 1.0 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 5 geometries, PrimitiveBreakdown { triangles: 822, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 2 } top level, PrimitiveBreakdown { triangles: 1582, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 2 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.3585339 motion [] pieces all=760:2344ecf63e12c441 camera=760:2344ecf63e12c441 shadow=760:2344ecf63e12c441 indirect=760:2344ecf63e12c441 +geom 1: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.25 motion [] pieces all=800:4a8c9f44d777e131 camera=800:4a8c9f44d777e131 shadow=800:4a8c9f44d777e131 indirect=800:4a8c9f44d777e131 +geom 2: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=12:94a297badef437e1 camera=12:94a297badef437e1 shadow=12:94a297badef437e1 indirect=12:94a297badef437e1 +geom 3: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.2 motion [] pieces all=760:c2b60a75c52c78b9 camera=760:c2b60a75c52c78b9 shadow=760:c2b60a75c52c78b9 indirect=760:c2b60a75c52c78b9 +geom 4: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 4.0 motion [] pieces all=10:88b22fc3345d5b05 camera=10:88b22fc3345d5b05 shadow=10:88b22fc3345d5b05 indirect=10:88b22fc3345d5b05 +provenance material /scene/Looks/initialShadingGroup: MaterialOrigin { slots: [0, 1, 2, 3, 4], displaced: false } +provenance light /scene/Sky: LightOrigin { index: 0, geoms: 5..5 } +provenance geometry 0..1: /scene/pSphere2 +provenance geometry 1..2: /scene/pTorus1 +provenance geometry 2..3: /scene/pCube2 +provenance geometry 3..4: /scene/pSphere1 +provenance geometry 4..5: /scene/pCube1 +provenance mesh: MeshOrigin { geom_id: 0, slot: 0, baked: false, moving: false } +provenance mesh: MeshOrigin { geom_id: 1, slot: 1, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 2, slot: 2, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 3, slot: 0, baked: false, moving: false } +provenance mesh: MeshOrigin { geom_id: 4, slot: 3, baked: true, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 17119738035130870988, n_points: 382, n_indices: 1560, n_uvs: None, smooth: false, material: 0 }), placements: 2, shared: false, displaced: false } +provenance mesh slot 1: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 6096447469814747168, n_points: 400, n_indices: 1600, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 2: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 1739488954094729910, n_points: 8, n_indices: 24, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 3: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 12343188411137242430, n_points: 8, n_indices: 20, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: true }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/scene/camera1"), cameras: ["/scene/camera1"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/scene/camera1"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/root_usda-dcc0d192c2504171-1.image b/crates/crust-core/tests/data/import_baselines/root_usda-dcc0d192c2504171-1.image new file mode 100644 index 000000000..7b4c2a20f --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/root_usda-dcc0d192c2504171-1.image @@ -0,0 +1 @@ +24x18 16spp clamp-off 590c41154e1a8676 diff --git a/crates/crust-core/tests/data/import_baselines/root_usda-df9ad38a08c60f60-1.digest b/crates/crust-core/tests/data/import_baselines/root_usda-df9ad38a08c60f60-1.digest new file mode 100644 index 000000000..0c2c080ec --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/root_usda-df9ad38a08c60f60-1.digest @@ -0,0 +1,41 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/scene/camera1") +camera: Camera { origin: Vec3A(0.0074343784, 1.9913422, 4.0133057), lower_left_corner: Vec3A(-6.659224, -3.0086517, -0.98669434), horizontal: Vec3A(13.333317, 0.0, 0.0), vertical: Vec3A(0.0, 9.999988, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: Some(Vec4(0.0, 0.0, -1.0, 3.9133058)), far: Some(Vec4(0.0, 0.0, 1.0, 9995.986)), planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: Some("/Render/settings") +settings: RenderSettings { samples_per_pixel: 4, max_depth: 32, width: 24, height: 18, region: PixelRect { x0: 0, y0: 0, x1: 24, y1: 18 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 12.700017, aperture: [25.4, 25.4], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 5.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/root.usda", "$DIR/graph.usda", "$ROOT/samples/cornellbox.usda"], invisible_overrides: Some(0) } +layer: $ROOT/samples/cornellbox.usda +layer: $DIR/graph.usda +layer: $DIR/root.usda +warning: Warning { code: MaterialFallbackDefault, kind: Skipped, count: 1, prims: ["/scene/Looks/initialShadingGroup"], message: "Material /scene/Looks/initialShadingGroup has no surface shader — using default grey OpenPBR" } +lights: 1 +light 0: dome name Some("/scene/Sky") lpe None pmf 1.0 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 5 geometries, PrimitiveBreakdown { triangles: 822, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 2 } top level, PrimitiveBreakdown { triangles: 1582, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 2 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.3585339 motion [] pieces all=760:2344ecf63e12c441 camera=760:2344ecf63e12c441 shadow=760:2344ecf63e12c441 indirect=760:2344ecf63e12c441 +geom 1: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.25 motion [] pieces all=800:4a8c9f44d777e131 camera=800:4a8c9f44d777e131 shadow=800:4a8c9f44d777e131 indirect=800:4a8c9f44d777e131 +geom 2: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=12:e8801979fbe3b955 camera=12:e8801979fbe3b955 shadow=12:e8801979fbe3b955 indirect=12:e8801979fbe3b955 +geom 3: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.2 motion [] pieces all=760:c2b60a75c52c78b9 camera=760:c2b60a75c52c78b9 shadow=760:c2b60a75c52c78b9 indirect=760:c2b60a75c52c78b9 +geom 4: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 4.0 motion [] pieces all=10:88b22fc3345d5b05 camera=10:88b22fc3345d5b05 shadow=10:88b22fc3345d5b05 indirect=10:88b22fc3345d5b05 +provenance material /scene/Looks/initialShadingGroup: MaterialOrigin { slots: [0, 1, 2, 3, 4], displaced: false } +provenance light /scene/Sky: LightOrigin { index: 0, geoms: 5..5 } +provenance geometry 0..1: /scene/pSphere2 +provenance geometry 1..2: /scene/pTorus1 +provenance geometry 2..3: /scene/pCube2 +provenance geometry 3..4: /scene/pSphere1 +provenance geometry 4..5: /scene/pCube1 +provenance mesh: MeshOrigin { geom_id: 0, slot: 0, baked: false, moving: false } +provenance mesh: MeshOrigin { geom_id: 1, slot: 1, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 2, slot: 2, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 3, slot: 0, baked: false, moving: false } +provenance mesh: MeshOrigin { geom_id: 4, slot: 3, baked: true, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 17119738035130870988, n_points: 382, n_indices: 1560, n_uvs: None, smooth: false, material: 0 }), placements: 2, shared: false, displaced: false } +provenance mesh slot 1: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 6096447469814747168, n_points: 400, n_indices: 1600, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 2: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 1739488954094729910, n_points: 8, n_indices: 24, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 3: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 12343188411137242430, n_points: 8, n_indices: 20, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: true }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/scene/camera1"), cameras: ["/scene/camera1"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/scene/camera1"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/root_usda-df9ad38a08c60f60-1.image b/crates/crust-core/tests/data/import_baselines/root_usda-df9ad38a08c60f60-1.image new file mode 100644 index 000000000..19b3e9c43 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/root_usda-df9ad38a08c60f60-1.image @@ -0,0 +1 @@ +24x18 16spp clamp-off 08805804271eab04 diff --git a/crates/crust-core/tests/data/import_baselines/root_usda-e227181a4d86cdde-1.digest b/crates/crust-core/tests/data/import_baselines/root_usda-e227181a4d86cdde-1.digest new file mode 100644 index 000000000..af81978f3 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/root_usda-e227181a4d86cdde-1.digest @@ -0,0 +1,41 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/scene/camera1") +camera: Camera { origin: Vec3A(0.0074343784, 2.0913422, 4.0133057), lower_left_corner: Vec3A(-6.659224, -2.9086516, -0.98669434), horizontal: Vec3A(13.333317, 0.0, 0.0), vertical: Vec3A(0.0, 9.999988, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: Some(Vec4(0.0, 0.0, -1.0, 3.9133058)), far: Some(Vec4(0.0, 0.0, 1.0, 9995.986)), planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: Some("/Render/settings") +settings: RenderSettings { samples_per_pixel: 4, max_depth: 32, width: 24, height: 18, region: PixelRect { x0: 0, y0: 0, x1: 24, y1: 18 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 12.700017, aperture: [25.4, 25.4], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 5.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/root.usda", "$DIR/graph.usda", "$ROOT/samples/cornellbox.usda"], invisible_overrides: Some(0) } +layer: $ROOT/samples/cornellbox.usda +layer: $DIR/graph.usda +layer: $DIR/root.usda +warning: Warning { code: MaterialFallbackDefault, kind: Skipped, count: 1, prims: ["/scene/Looks/initialShadingGroup"], message: "Material /scene/Looks/initialShadingGroup has no surface shader — using default grey OpenPBR" } +lights: 1 +light 0: dome name Some("/scene/Sky") lpe None pmf 1.0 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 5 geometries, PrimitiveBreakdown { triangles: 822, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 2 } top level, PrimitiveBreakdown { triangles: 1582, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 2 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.3585339 motion [] pieces all=760:6b4a5d9241117a39 camera=760:6b4a5d9241117a39 shadow=760:6b4a5d9241117a39 indirect=760:6b4a5d9241117a39 +geom 1: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.25 motion [] pieces all=800:e75647e574205a7d camera=800:e75647e574205a7d shadow=800:e75647e574205a7d indirect=800:e75647e574205a7d +geom 2: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=12:9ae67e62deb62dc9 camera=12:9ae67e62deb62dc9 shadow=12:9ae67e62deb62dc9 indirect=12:9ae67e62deb62dc9 +geom 3: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.2 motion [] pieces all=760:6ff244b5342180d1 camera=760:6ff244b5342180d1 shadow=760:6ff244b5342180d1 indirect=760:6ff244b5342180d1 +geom 4: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 4.0 motion [] pieces all=10:c557d1e5d41f00cf camera=10:c557d1e5d41f00cf shadow=10:c557d1e5d41f00cf indirect=10:c557d1e5d41f00cf +provenance material /scene/Looks/initialShadingGroup: MaterialOrigin { slots: [0, 1, 2, 3, 4], displaced: false } +provenance light /scene/Sky: LightOrigin { index: 0, geoms: 5..5 } +provenance geometry 0..1: /scene/pSphere2 +provenance geometry 1..2: /scene/pTorus1 +provenance geometry 2..3: /scene/pCube2 +provenance geometry 3..4: /scene/pSphere1 +provenance geometry 4..5: /scene/pCube1 +provenance mesh: MeshOrigin { geom_id: 0, slot: 0, baked: false, moving: false } +provenance mesh: MeshOrigin { geom_id: 1, slot: 1, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 2, slot: 2, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 3, slot: 0, baked: false, moving: false } +provenance mesh: MeshOrigin { geom_id: 4, slot: 3, baked: true, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 17119738035130870988, n_points: 382, n_indices: 1560, n_uvs: None, smooth: false, material: 0 }), placements: 2, shared: false, displaced: false } +provenance mesh slot 1: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 6096447469814747168, n_points: 400, n_indices: 1600, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 2: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 1739488954094729910, n_points: 8, n_indices: 24, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 3: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 12343188411137242430, n_points: 8, n_indices: 20, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: true }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/scene/camera1"), cameras: ["/scene/camera1"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/scene/camera1"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/root_usda-e227181a4d86cdde-1.image b/crates/crust-core/tests/data/import_baselines/root_usda-e227181a4d86cdde-1.image new file mode 100644 index 000000000..66e10290a --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/root_usda-e227181a4d86cdde-1.image @@ -0,0 +1 @@ +24x18 16spp clamp-off 2413272b4317cbbe diff --git a/crates/crust-core/tests/data/import_baselines/root_usda-f3eca4e5e1cfc428-1.digest b/crates/crust-core/tests/data/import_baselines/root_usda-f3eca4e5e1cfc428-1.digest new file mode 100644 index 000000000..9277209f2 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/root_usda-f3eca4e5e1cfc428-1.digest @@ -0,0 +1,32 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/World/Cam") +camera: Camera { origin: Vec3A(0.0, 0.0, 6.0), lower_left_corner: Vec3A(-8.49489, -4.247445, -4.0), horizontal: Vec3A(16.98978, 0.0, 0.0), vertical: Vec3A(0.0, 8.49489, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: Some("/Render/settings") +settings: RenderSettings { samples_per_pixel: 1, max_depth: 32, width: 48, height: 24, region: PixelRect { x0: 0, y0: 0, x1: 48, y1: 24 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 18.0, aperture: [20.955, 15.2908], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 10.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/root.usda"], invisible_overrides: Some(0) } +layer: $DIR/root.usda +lights: 1 +light 0: distant name Some("/World/Sun") lpe None pmf 1.0 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 4 geometries, PrimitiveBreakdown { triangles: 2, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 3 } top level, PrimitiveBreakdown { triangles: 6, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 3 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:a99fe0878a488eb7 camera=2:a99fe0878a488eb7 shadow=2:a99fe0878a488eb7 indirect=2:a99fe0878a488eb7 +geom 1: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:5ca79067d50d064e camera=2:5ca79067d50d064e shadow=2:5ca79067d50d064e indirect=2:5ca79067d50d064e +geom 2: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:e2657f4075f21b26 camera=2:e2657f4075f21b26 shadow=2:e2657f4075f21b26 indirect=2:e2657f4075f21b26 +geom 3: material #1 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:8663619c85c630b8 camera=2:8663619c85c630b8 shadow=2:8663619c85c630b8 indirect=2:8663619c85c630b8 +provenance material /World/Looks/Red: MaterialOrigin { slots: [3], displaced: false } +provenance arc source: /Proto +provenance arc source: /World/Scatter/Protos/Box +provenance light /World/Sun: LightOrigin { index: 0, geoms: 4..4 } +provenance geometry 0..1: /World/Inst +provenance geometry 1..3: /World/Scatter +provenance geometry 3..4: /World/Card +provenance mesh: MeshOrigin { geom_id: 3, slot: 2, baked: true, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 17555877814860148657, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 0 }), placements: 0, shared: true, displaced: false } +provenance mesh slot 1: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 7377966807836294734, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 0 }), placements: 0, shared: true, displaced: false } +provenance mesh slot 2: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 2452712229199093531, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 1 }), placements: 1, shared: false, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: true }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/World/Cam"), cameras: ["/World/Cam"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/World/Cam"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/root_usda-f3eca4e5e1cfc428-1.image b/crates/crust-core/tests/data/import_baselines/root_usda-f3eca4e5e1cfc428-1.image new file mode 100644 index 000000000..64d3507cc --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/root_usda-f3eca4e5e1cfc428-1.image @@ -0,0 +1 @@ +48x24 16spp clamp-off f0bb5c496107b07a diff --git a/crates/crust-core/tests/data/import_baselines/root_usda-f3eca4e5e1cfc428-2.digest b/crates/crust-core/tests/data/import_baselines/root_usda-f3eca4e5e1cfc428-2.digest new file mode 100644 index 000000000..9277209f2 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/root_usda-f3eca4e5e1cfc428-2.digest @@ -0,0 +1,32 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/World/Cam") +camera: Camera { origin: Vec3A(0.0, 0.0, 6.0), lower_left_corner: Vec3A(-8.49489, -4.247445, -4.0), horizontal: Vec3A(16.98978, 0.0, 0.0), vertical: Vec3A(0.0, 8.49489, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: Some("/Render/settings") +settings: RenderSettings { samples_per_pixel: 1, max_depth: 32, width: 48, height: 24, region: PixelRect { x0: 0, y0: 0, x1: 48, y1: 24 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 18.0, aperture: [20.955, 15.2908], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 10.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/root.usda"], invisible_overrides: Some(0) } +layer: $DIR/root.usda +lights: 1 +light 0: distant name Some("/World/Sun") lpe None pmf 1.0 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 4 geometries, PrimitiveBreakdown { triangles: 2, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 3 } top level, PrimitiveBreakdown { triangles: 6, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 3 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:a99fe0878a488eb7 camera=2:a99fe0878a488eb7 shadow=2:a99fe0878a488eb7 indirect=2:a99fe0878a488eb7 +geom 1: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:5ca79067d50d064e camera=2:5ca79067d50d064e shadow=2:5ca79067d50d064e indirect=2:5ca79067d50d064e +geom 2: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:e2657f4075f21b26 camera=2:e2657f4075f21b26 shadow=2:e2657f4075f21b26 indirect=2:e2657f4075f21b26 +geom 3: material #1 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:8663619c85c630b8 camera=2:8663619c85c630b8 shadow=2:8663619c85c630b8 indirect=2:8663619c85c630b8 +provenance material /World/Looks/Red: MaterialOrigin { slots: [3], displaced: false } +provenance arc source: /Proto +provenance arc source: /World/Scatter/Protos/Box +provenance light /World/Sun: LightOrigin { index: 0, geoms: 4..4 } +provenance geometry 0..1: /World/Inst +provenance geometry 1..3: /World/Scatter +provenance geometry 3..4: /World/Card +provenance mesh: MeshOrigin { geom_id: 3, slot: 2, baked: true, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 17555877814860148657, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 0 }), placements: 0, shared: true, displaced: false } +provenance mesh slot 1: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 7377966807836294734, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 0 }), placements: 0, shared: true, displaced: false } +provenance mesh slot 2: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 2452712229199093531, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 1 }), placements: 1, shared: false, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: true }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/World/Cam"), cameras: ["/World/Cam"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/World/Cam"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/root_usda-f3eca4e5e1cfc428-2.image b/crates/crust-core/tests/data/import_baselines/root_usda-f3eca4e5e1cfc428-2.image new file mode 100644 index 000000000..64d3507cc --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/root_usda-f3eca4e5e1cfc428-2.image @@ -0,0 +1 @@ +48x24 16spp clamp-off f0bb5c496107b07a diff --git a/crates/crust-core/tests/data/import_baselines/root_usda-f4c8b443da714046-1.digest b/crates/crust-core/tests/data/import_baselines/root_usda-f4c8b443da714046-1.digest new file mode 100644 index 000000000..778ef3593 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/root_usda-f4c8b443da714046-1.digest @@ -0,0 +1,50 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/scene/camera1") +camera: Camera { origin: Vec3A(0.0074343784, 1.9913422, 4.0133057), lower_left_corner: Vec3A(-6.659224, -3.0086517, -0.98669434), horizontal: Vec3A(13.333317, 0.0, 0.0), vertical: Vec3A(0.0, 9.999988, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: Some(Vec4(0.0, 0.0, -1.0, 3.9133058)), far: Some(Vec4(0.0, 0.0, 1.0, 9995.986)), planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: Some("/Render/settings") +settings: RenderSettings { samples_per_pixel: 4, max_depth: 32, width: 24, height: 18, region: PixelRect { x0: 0, y0: 0, x1: 24, y1: 18 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 12.700017, aperture: [25.4, 25.4], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 5.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/root.usda", "$DIR/graph.usda", "$ROOT/samples/cornellbox.usda"], invisible_overrides: Some(0) } +layer: $ROOT/samples/cornellbox.usda +layer: $DIR/graph.usda +layer: $DIR/root.usda +warning: Warning { code: MaterialFallbackDefault, kind: Skipped, count: 1, prims: ["/scene/Looks/initialShadingGroup"], message: "Material /scene/Looks/initialShadingGroup has no surface shader — using default grey OpenPBR" } +lights: 1 +light 0: dome name Some("/scene/Sky") lpe None pmf 1.0 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 7 geometries, PrimitiveBreakdown { triangles: 822, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 4 } top level, PrimitiveBreakdown { triangles: 1594, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 4 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=12:4d23b606772ca0b5 camera=12:4d23b606772ca0b5 shadow=12:4d23b606772ca0b5 indirect=12:4d23b606772ca0b5 +geom 1: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=12:8f1854675a016051 camera=12:8f1854675a016051 shadow=12:8f1854675a016051 indirect=12:8f1854675a016051 +geom 2: material #1 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.3585339 motion [] pieces all=760:2344ecf63e12c441 camera=760:2344ecf63e12c441 shadow=760:2344ecf63e12c441 indirect=760:2344ecf63e12c441 +geom 3: material #1 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.25 motion [] pieces all=800:4a8c9f44d777e131 camera=800:4a8c9f44d777e131 shadow=800:4a8c9f44d777e131 indirect=800:4a8c9f44d777e131 +geom 4: material #1 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=12:94a297badef437e1 camera=12:94a297badef437e1 shadow=12:94a297badef437e1 indirect=12:94a297badef437e1 +geom 5: material #1 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.2 motion [] pieces all=760:c2b60a75c52c78b9 camera=760:c2b60a75c52c78b9 shadow=760:c2b60a75c52c78b9 indirect=760:c2b60a75c52c78b9 +geom 6: material #1 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 4.0 motion [] pieces all=10:88b22fc3345d5b05 camera=10:88b22fc3345d5b05 shadow=10:88b22fc3345d5b05 indirect=10:88b22fc3345d5b05 +provenance material /scene/Looks/initialShadingGroup: MaterialOrigin { slots: [2, 3, 4, 5, 6], displaced: false } +provenance arc source: /scene/Grp +provenance arc source: /scene/Grp/M +provenance light /scene/Sky: LightOrigin { index: 0, geoms: 7..7 } +provenance geometry 0..1: /scene/Copy/M +provenance geometry 1..2: /scene/Grp/M +provenance geometry 2..3: /scene/pSphere2 +provenance geometry 3..4: /scene/pTorus1 +provenance geometry 4..5: /scene/pCube2 +provenance geometry 5..6: /scene/pSphere1 +provenance geometry 6..7: /scene/pCube1 +provenance mesh: MeshOrigin { geom_id: 0, slot: 0, baked: false, moving: false } +provenance mesh: MeshOrigin { geom_id: 1, slot: 0, baked: false, moving: false } +provenance mesh: MeshOrigin { geom_id: 2, slot: 1, baked: false, moving: false } +provenance mesh: MeshOrigin { geom_id: 3, slot: 2, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 4, slot: 3, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 5, slot: 1, baked: false, moving: false } +provenance mesh: MeshOrigin { geom_id: 6, slot: 4, baked: true, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 1847950969294950925, n_points: 8, n_indices: 24, n_uvs: None, smooth: false, material: 0 }), placements: 2, shared: false, displaced: false } +provenance mesh slot 1: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 17119738035130870988, n_points: 382, n_indices: 1560, n_uvs: None, smooth: false, material: 1 }), placements: 2, shared: false, displaced: false } +provenance mesh slot 2: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 6096447469814747168, n_points: 400, n_indices: 1600, n_uvs: None, smooth: false, material: 1 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 3: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 1739488954094729910, n_points: 8, n_indices: 24, n_uvs: None, smooth: false, material: 1 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 4: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 12343188411137242430, n_points: 8, n_indices: 20, n_uvs: None, smooth: false, material: 1 }), placements: 1, shared: false, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: true }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/scene/camera1"), cameras: ["/scene/camera1"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/scene/camera1"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/root_usda-f4c8b443da714046-1.image b/crates/crust-core/tests/data/import_baselines/root_usda-f4c8b443da714046-1.image new file mode 100644 index 000000000..305cc2f7e --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/root_usda-f4c8b443da714046-1.image @@ -0,0 +1 @@ +24x18 16spp clamp-off 4f095d5f8ba22f9b diff --git a/crates/crust-core/tests/data/import_baselines/root_usda-f7df8a9705f0748f-1.digest b/crates/crust-core/tests/data/import_baselines/root_usda-f7df8a9705f0748f-1.digest new file mode 100644 index 000000000..82006bcd0 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/root_usda-f7df8a9705f0748f-1.digest @@ -0,0 +1,45 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/scene/camera1") +camera: Camera { origin: Vec3A(0.0074343784, 1.9913422, 4.0133057), lower_left_corner: Vec3A(-6.659224, -3.0086517, -0.98669434), horizontal: Vec3A(13.333317, 0.0, 0.0), vertical: Vec3A(0.0, 9.999988, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: Some(Vec4(0.0, 0.0, -1.0, 3.9133058)), far: Some(Vec4(0.0, 0.0, 1.0, 9995.986)), planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: Some("/Render/settings") +settings: RenderSettings { samples_per_pixel: 4, max_depth: 32, width: 24, height: 18, region: PixelRect { x0: 0, y0: 0, x1: 24, y1: 18 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 12.700017, aperture: [25.4, 25.4], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 5.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/root.usda", "$DIR/graph.usda", "$ROOT/samples/cornellbox.usda"], invisible_overrides: Some(0) } +layer: $ROOT/samples/cornellbox.usda +layer: $DIR/graph.usda +layer: $DIR/root.usda +warning: Warning { code: MaterialFallbackDefault, kind: Skipped, count: 1, prims: ["/scene/Looks/initialShadingGroup"], message: "Material /scene/Looks/initialShadingGroup has no surface shader — using default grey OpenPBR" } +lights: 2 +light 0: area name Some("/scene/Panel") lpe None pmf 0.5 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 1: dome name Some("/scene/Sky") lpe None pmf 0.5 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 6 geometries, PrimitiveBreakdown { triangles: 824, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 2 } top level, PrimitiveBreakdown { triangles: 1584, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 2 } unique, motion false +geom 0: material #0 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:85b09e755747ebad camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=2:85b09e755747ebad +geom 1: material #1 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.3585339 motion [] pieces all=760:2344ecf63e12c441 camera=760:2344ecf63e12c441 shadow=760:2344ecf63e12c441 indirect=760:2344ecf63e12c441 +geom 2: material #1 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.25 motion [] pieces all=800:4a8c9f44d777e131 camera=800:4a8c9f44d777e131 shadow=800:4a8c9f44d777e131 indirect=800:4a8c9f44d777e131 +geom 3: material #1 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=12:94a297badef437e1 camera=12:94a297badef437e1 shadow=12:94a297badef437e1 indirect=12:94a297badef437e1 +geom 4: material #1 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.2 motion [] pieces all=760:c2b60a75c52c78b9 camera=760:c2b60a75c52c78b9 shadow=760:c2b60a75c52c78b9 indirect=760:c2b60a75c52c78b9 +geom 5: material #1 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 4.0 motion [] pieces all=10:88b22fc3345d5b05 camera=10:88b22fc3345d5b05 shadow=10:88b22fc3345d5b05 indirect=10:88b22fc3345d5b05 +provenance material /scene/Looks/initialShadingGroup: MaterialOrigin { slots: [1, 2, 3, 4, 5], displaced: false } +provenance light /scene/Panel: LightOrigin { index: 0, geoms: 0..1 } +provenance light /scene/Sky: LightOrigin { index: 1, geoms: 6..6 } +provenance geometry 0..1: /scene/Panel +provenance geometry 1..2: /scene/pSphere2 +provenance geometry 2..3: /scene/pTorus1 +provenance geometry 3..4: /scene/pCube2 +provenance geometry 4..5: /scene/pSphere1 +provenance geometry 5..6: /scene/pCube1 +provenance mesh: MeshOrigin { geom_id: 1, slot: 0, baked: false, moving: false } +provenance mesh: MeshOrigin { geom_id: 2, slot: 1, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 3, slot: 2, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 4, slot: 0, baked: false, moving: false } +provenance mesh: MeshOrigin { geom_id: 5, slot: 3, baked: true, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 17119738035130870988, n_points: 382, n_indices: 1560, n_uvs: None, smooth: false, material: 0 }), placements: 2, shared: false, displaced: false } +provenance mesh slot 1: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 6096447469814747168, n_points: 400, n_indices: 1600, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 2: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 1739488954094729910, n_points: 8, n_indices: 24, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 3: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 12343188411137242430, n_points: 8, n_indices: 20, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: true }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/scene/camera1"), cameras: ["/scene/camera1"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/scene/camera1"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/root_usda-f7df8a9705f0748f-1.image b/crates/crust-core/tests/data/import_baselines/root_usda-f7df8a9705f0748f-1.image new file mode 100644 index 000000000..68dd2ff65 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/root_usda-f7df8a9705f0748f-1.image @@ -0,0 +1 @@ +24x18 16spp clamp-off ae1b418e0e069e28 diff --git a/crates/crust-core/tests/data/import_baselines/rotate_parent_usda-a0cc7d7c189a5bba-1.digest b/crates/crust-core/tests/data/import_baselines/rotate_parent_usda-a0cc7d7c189a5bba-1.digest new file mode 100644 index 000000000..2811fff56 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/rotate_parent_usda-a0cc7d7c189a5bba-1.digest @@ -0,0 +1,19 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: None +camera: Camera { origin: Vec3A(15.0, 3.0, 3.0), lower_left_corner: Vec3A(4.8863316, -0.044797063, 4.174048), horizontal: Vec3A(1.2295314, 0.0, -6.147657), vertical: Vec3A(-0.44830504, 3.4967792, -0.08966101), u: Vec3A(0.19611613, 0.0, -0.9805807), v: Vec3A(-0.1271232, 0.991561, -0.02542464), lens_radius: 0.05, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: None +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 640, height: 360, region: PixelRect { x0: 0, y0: 0, x1: 640, y1: 360 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: None, depth_of_field: true, motion_blur: false, layer_stack: ["$DIR/rotate_parent.usda"], invisible_overrides: Some(0) } +layer: $DIR/rotate_parent.usda +warning: Warning { code: CameraMissing, kind: Skipped, count: 1, prims: [], message: "USD stage has no UsdGeomCamera — falling back to world::get_settings camera" } +lights: 0 +volumes: 0 +world: 1 geometries, PrimitiveBreakdown { triangles: 0, spheres: 1, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 0, spheres: 1, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:d23ac7aa026facc8 camera=1:d23ac7aa026facc8 shadow=1:d23ac7aa026facc8 indirect=1:d23ac7aa026facc8 +provenance geometry 0..1: /World/A/B/S +provenance spheres: [0] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: None, cameras: [], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: None, offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/rotate_parent_usda-a0cc7d7c189a5bba-1.image b/crates/crust-core/tests/data/import_baselines/rotate_parent_usda-a0cc7d7c189a5bba-1.image new file mode 100644 index 000000000..c734c5b1d --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/rotate_parent_usda-a0cc7d7c189a5bba-1.image @@ -0,0 +1 @@ +640x360 16spp clamp-off a04a09c0d4b5e325 diff --git a/crates/crust-core/tests/data/import_baselines/s_usda-0006d97926014c1b-1.digest b/crates/crust-core/tests/data/import_baselines/s_usda-0006d97926014c1b-1.digest new file mode 100644 index 000000000..f42bf34a1 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/s_usda-0006d97926014c1b-1.digest @@ -0,0 +1,23 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: None +camera: Camera { origin: Vec3A(15.0, 3.0, 3.0), lower_left_corner: Vec3A(4.8863316, -0.044797063, 4.174048), horizontal: Vec3A(1.2295314, 0.0, -6.147657), vertical: Vec3A(-0.44830504, 3.4967792, -0.08966101), u: Vec3A(0.19611613, 0.0, -0.9805807), v: Vec3A(-0.1271232, 0.991561, -0.02542464), lens_radius: 0.05, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: None +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 640, height: 360, region: PixelRect { x0: 0, y0: 0, x1: 640, y1: 360 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: None, depth_of_field: true, motion_blur: false, layer_stack: ["$DIR/s.usda"], invisible_overrides: Some(0) } +layer: $DIR/s.usda +warning: Warning { code: AssetUnsupportedByHost, kind: Skipped, count: 1, prims: [], message: "Asset loader does not decode UV textures: $DIR/not_shipped..exr ignored — the input falls back to its constant value." } +warning: Warning { code: CameraMissing, kind: Skipped, count: 1, prims: [], message: "USD stage has no UsdGeomCamera — falling back to world::get_settings camera" } +lights: 0 +volumes: 0 +world: 1 geometries, PrimitiveBreakdown { triangles: 2, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 2, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +geom 0: material #0 Signature { kind: "UsdPreviewSurface (textured)", cutout: false, straight: false, boundary: false, emits: false, uv: true, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:02ff87c392969355 camera=2:02ff87c392969355 shadow=2:02ff87c392969355 indirect=2:02ff87c392969355 +provenance material /W/Looks/M: MaterialOrigin { slots: [0], displaced: false } +provenance geometry 0..1: /W/Geo/Q +provenance mesh: MeshOrigin { geom_id: 0, slot: 0, baked: true, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 3224020731942780983, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: None, cameras: [], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: None, offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/s_usda-0006d97926014c1b-1.image b/crates/crust-core/tests/data/import_baselines/s_usda-0006d97926014c1b-1.image new file mode 100644 index 000000000..c734c5b1d --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/s_usda-0006d97926014c1b-1.image @@ -0,0 +1 @@ +640x360 16spp clamp-off a04a09c0d4b5e325 diff --git a/crates/crust-core/tests/data/import_baselines/sampler_default_usda-6c4e4e80bde0b7e5-1.digest b/crates/crust-core/tests/data/import_baselines/sampler_default_usda-6c4e4e80bde0b7e5-1.digest new file mode 100644 index 000000000..ba56f91aa --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/sampler_default_usda-6c4e4e80bde0b7e5-1.digest @@ -0,0 +1,17 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: None +camera: Camera { origin: Vec3A(15.0, 3.0, 3.0), lower_left_corner: Vec3A(4.8863316, -0.044797063, 4.174048), horizontal: Vec3A(1.2295314, 0.0, -6.147657), vertical: Vec3A(-0.44830504, 3.4967792, -0.08966101), u: Vec3A(0.19611613, 0.0, -0.9805807), v: Vec3A(-0.1271232, 0.991561, -0.02542464), lens_radius: 0.05, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: None +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 640, height: 360, region: PixelRect { x0: 0, y0: 0, x1: 640, y1: 360 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: None, depth_of_field: true, motion_blur: false, layer_stack: ["$DIR/sampler_default.usda"], invisible_overrides: Some(0) } +layer: $DIR/sampler_default.usda +warning: Warning { code: CameraMissing, kind: Skipped, count: 1, prims: [], message: "USD stage has no UsdGeomCamera — falling back to world::get_settings camera" } +lights: 0 +volumes: 0 +world: 0 geometries, PrimitiveBreakdown { triangles: 0, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 0, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: None, cameras: [], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: None, offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/sampler_default_usda-6c4e4e80bde0b7e5-1.image b/crates/crust-core/tests/data/import_baselines/sampler_default_usda-6c4e4e80bde0b7e5-1.image new file mode 100644 index 000000000..c734c5b1d --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/sampler_default_usda-6c4e4e80bde0b7e5-1.image @@ -0,0 +1 @@ +640x360 16spp clamp-off a04a09c0d4b5e325 diff --git a/crates/crust-core/tests/data/import_baselines/sampler_halton_usda-bcb88dc4e7395359-1.digest b/crates/crust-core/tests/data/import_baselines/sampler_halton_usda-bcb88dc4e7395359-1.digest new file mode 100644 index 000000000..cae9e53bb --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/sampler_halton_usda-bcb88dc4e7395359-1.digest @@ -0,0 +1,18 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: None +camera: Camera { origin: Vec3A(15.0, 3.0, 3.0), lower_left_corner: Vec3A(4.8863316, -0.044797063, 4.174048), horizontal: Vec3A(1.2295314, 0.0, -6.147657), vertical: Vec3A(-0.44830504, 3.4967792, -0.08966101), u: Vec3A(0.19611613, 0.0, -0.9805807), v: Vec3A(-0.1271232, 0.991561, -0.02542464), lens_radius: 0.05, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: Some("/Render/settings") +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 640, height: 360, region: PixelRect { x0: 0, y0: 0, x1: 640, y1: 360 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: None, depth_of_field: true, motion_blur: false, layer_stack: ["$DIR/sampler_halton.usda"], invisible_overrides: Some(0) } +layer: $DIR/sampler_halton.usda +warning: Warning { code: SettingsInvalidValue, kind: Refused, count: 1, prims: ["/Render/settings"], message: "crust:sampler: unknown sampler \"halton\" (expected sobol | sobolBn | lattice | latticeBn | pmj | pmjBn) — using sobol" } +warning: Warning { code: CameraMissing, kind: Skipped, count: 1, prims: [], message: "USD stage has no UsdGeomCamera — falling back to world::get_settings camera" } +lights: 0 +volumes: 0 +world: 0 geometries, PrimitiveBreakdown { triangles: 0, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 0, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: None, cameras: [], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: None, offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/sampler_halton_usda-bcb88dc4e7395359-1.image b/crates/crust-core/tests/data/import_baselines/sampler_halton_usda-bcb88dc4e7395359-1.image new file mode 100644 index 000000000..c734c5b1d --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/sampler_halton_usda-bcb88dc4e7395359-1.image @@ -0,0 +1 @@ +640x360 16spp clamp-off a04a09c0d4b5e325 diff --git a/crates/crust-core/tests/data/import_baselines/sampler_lattice_usda-83017538d7bb844b-1.digest b/crates/crust-core/tests/data/import_baselines/sampler_lattice_usda-83017538d7bb844b-1.digest new file mode 100644 index 000000000..fd5d7105b --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/sampler_lattice_usda-83017538d7bb844b-1.digest @@ -0,0 +1,17 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: None +camera: Camera { origin: Vec3A(15.0, 3.0, 3.0), lower_left_corner: Vec3A(4.8863316, -0.044797063, 4.174048), horizontal: Vec3A(1.2295314, 0.0, -6.147657), vertical: Vec3A(-0.44830504, 3.4967792, -0.08966101), u: Vec3A(0.19611613, 0.0, -0.9805807), v: Vec3A(-0.1271232, 0.991561, -0.02542464), lens_radius: 0.05, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: Some("/Render/settings") +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 640, height: 360, region: PixelRect { x0: 0, y0: 0, x1: 640, y1: 360 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Lattice, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: None, depth_of_field: true, motion_blur: false, layer_stack: ["$DIR/sampler_lattice.usda"], invisible_overrides: Some(0) } +layer: $DIR/sampler_lattice.usda +warning: Warning { code: CameraMissing, kind: Skipped, count: 1, prims: [], message: "USD stage has no UsdGeomCamera — falling back to world::get_settings camera" } +lights: 0 +volumes: 0 +world: 0 geometries, PrimitiveBreakdown { triangles: 0, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 0, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: None, cameras: [], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: None, offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/sampler_lattice_usda-83017538d7bb844b-1.image b/crates/crust-core/tests/data/import_baselines/sampler_lattice_usda-83017538d7bb844b-1.image new file mode 100644 index 000000000..c734c5b1d --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/sampler_lattice_usda-83017538d7bb844b-1.image @@ -0,0 +1 @@ +640x360 16spp clamp-off a04a09c0d4b5e325 diff --git a/crates/crust-core/tests/data/import_baselines/scaled_sphere_light_usda-2dabd5a9f4c0f98e-1.digest b/crates/crust-core/tests/data/import_baselines/scaled_sphere_light_usda-2dabd5a9f4c0f98e-1.digest new file mode 100644 index 000000000..2e30b5920 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/scaled_sphere_light_usda-2dabd5a9f4c0f98e-1.digest @@ -0,0 +1,21 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: None +camera: Camera { origin: Vec3A(15.0, 3.0, 3.0), lower_left_corner: Vec3A(4.8863316, -0.044797063, 4.174048), horizontal: Vec3A(1.2295314, 0.0, -6.147657), vertical: Vec3A(-0.44830504, 3.4967792, -0.08966101), u: Vec3A(0.19611613, 0.0, -0.9805807), v: Vec3A(-0.1271232, 0.991561, -0.02542464), lens_radius: 0.05, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: None +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 640, height: 360, region: PixelRect { x0: 0, y0: 0, x1: 640, y1: 360 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: None, depth_of_field: true, motion_blur: false, layer_stack: ["$DIR/scaled_sphere_light.usda"], invisible_overrides: Some(0) } +layer: $DIR/scaled_sphere_light.usda +warning: Warning { code: CameraMissing, kind: Skipped, count: 1, prims: [], message: "USD stage has no UsdGeomCamera — falling back to world::get_settings camera" } +lights: 1 +light 0: area name Some("/World/S") lpe None pmf 1.0 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 1 geometries, PrimitiveBreakdown { triangles: 0, spheres: 1, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 0, spheres: 1, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +geom 0: material #0 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:d5fa2ac5108a1585 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=1:d5fa2ac5108a1585 +provenance light /World/S: LightOrigin { index: 0, geoms: 0..1 } +provenance geometry 0..1: /World/S +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: None, cameras: [], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: None, offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/scaled_sphere_light_usda-2dabd5a9f4c0f98e-1.image b/crates/crust-core/tests/data/import_baselines/scaled_sphere_light_usda-2dabd5a9f4c0f98e-1.image new file mode 100644 index 000000000..c734c5b1d --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/scaled_sphere_light_usda-2dabd5a9f4c0f98e-1.image @@ -0,0 +1 @@ +640x360 16spp clamp-off a04a09c0d4b5e325 diff --git a/crates/crust-core/tests/data/import_baselines/scaled_usda-308f36ce00bb3ea8-1.digest b/crates/crust-core/tests/data/import_baselines/scaled_usda-308f36ce00bb3ea8-1.digest new file mode 100644 index 000000000..7df75dc2d --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/scaled_usda-308f36ce00bb3ea8-1.digest @@ -0,0 +1,22 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: None +camera: Camera { origin: Vec3A(15.0, 3.0, 3.0), lower_left_corner: Vec3A(4.8863316, -0.044797063, 4.174048), horizontal: Vec3A(1.2295314, 0.0, -6.147657), vertical: Vec3A(-0.44830504, 3.4967792, -0.08966101), u: Vec3A(0.19611613, 0.0, -0.9805807), v: Vec3A(-0.1271232, 0.991561, -0.02542464), lens_radius: 0.05, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: None +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 640, height: 360, region: PixelRect { x0: 0, y0: 0, x1: 640, y1: 360 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: None, depth_of_field: true, motion_blur: false, layer_stack: ["$DIR/scaled.usda"], invisible_overrides: Some(0) } +layer: $DIR/scaled.usda +warning: Warning { code: CameraMissing, kind: Skipped, count: 1, prims: [], message: "USD stage has no UsdGeomCamera — falling back to world::get_settings camera" } +lights: 0 +volumes: 0 +world: 1 geometries, PrimitiveBreakdown { triangles: 8, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 8, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 2.0 motion [] pieces all=8:bd280ba9c62c0355 camera=8:bd280ba9c62c0355 shadow=8:bd280ba9c62c0355 indirect=8:bd280ba9c62c0355 +provenance material /World/Up: MaterialOrigin { slots: [0], displaced: true } +provenance geometry 0..1: /World/Big/Ground +provenance mesh: MeshOrigin { geom_id: 0, slot: 0, baked: true, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 485570829870313581, n_points: 9, n_indices: 16, n_uvs: None, smooth: true, material: 0 }), placements: 1, shared: false, displaced: true } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: Some(1), subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 1, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: None, cameras: [], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: None, offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/scaled_usda-308f36ce00bb3ea8-1.image b/crates/crust-core/tests/data/import_baselines/scaled_usda-308f36ce00bb3ea8-1.image new file mode 100644 index 000000000..c734c5b1d --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/scaled_usda-308f36ce00bb3ea8-1.image @@ -0,0 +1 @@ +640x360 16spp clamp-off a04a09c0d4b5e325 diff --git a/crates/crust-core/tests/data/import_baselines/scatter_usda-08c435043fb988f9-1.digest b/crates/crust-core/tests/data/import_baselines/scatter_usda-08c435043fb988f9-1.digest new file mode 100644 index 000000000..88c076475 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/scatter_usda-08c435043fb988f9-1.digest @@ -0,0 +1,25 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: None +camera: Camera { origin: Vec3A(15.0, 3.0, 3.0), lower_left_corner: Vec3A(4.8863316, -0.044797063, 4.174048), horizontal: Vec3A(1.2295314, 0.0, -6.147657), vertical: Vec3A(-0.44830504, 3.4967792, -0.08966101), u: Vec3A(0.19611613, 0.0, -0.9805807), v: Vec3A(-0.1271232, 0.991561, -0.02542464), lens_radius: 0.05, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: None +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 640, height: 360, region: PixelRect { x0: 0, y0: 0, x1: 640, y1: 360 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: None, depth_of_field: true, motion_blur: false, layer_stack: ["$DIR/scatter.usda"], invisible_overrides: Some(0) } +layer: $DIR/scatter.usda +warning: Warning { code: CameraMissing, kind: Skipped, count: 1, prims: [], message: "USD stage has no UsdGeomCamera — falling back to world::get_settings camera" } +lights: 0 +volumes: 0 +world: 2 geometries, PrimitiveBreakdown { triangles: 6, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 6, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=4:0f5ba97034b3f4a5 camera=4:0f5ba97034b3f4a5 shadow=4:0f5ba97034b3f4a5 indirect=4:0f5ba97034b3f4a5 +geom 1: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:36a2c3ef014eeb52 camera=2:36a2c3ef014eeb52 shadow=2:36a2c3ef014eeb52 indirect=2:36a2c3ef014eeb52 +provenance geometry 0..1: /World/steps/geo +provenance geometry 1..2: /World/pair/geo +provenance mesh: MeshOrigin { geom_id: 0, slot: 0, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 1, slot: 1, baked: true, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 9519870911682368984, n_points: 6, n_indices: 8, n_uvs: None, smooth: true, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 1: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 998895739184434894, n_points: 6, n_indices: 6, n_uvs: None, smooth: true, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: None, cameras: [], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: None, offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/scatter_usda-08c435043fb988f9-1.image b/crates/crust-core/tests/data/import_baselines/scatter_usda-08c435043fb988f9-1.image new file mode 100644 index 000000000..c734c5b1d --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/scatter_usda-08c435043fb988f9-1.image @@ -0,0 +1 @@ +640x360 16spp clamp-off a04a09c0d4b5e325 diff --git a/crates/crust-core/tests/data/import_baselines/scatter_usda-e62e321631ee4219-1.digest b/crates/crust-core/tests/data/import_baselines/scatter_usda-e62e321631ee4219-1.digest new file mode 100644 index 000000000..88c076475 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/scatter_usda-e62e321631ee4219-1.digest @@ -0,0 +1,25 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: None +camera: Camera { origin: Vec3A(15.0, 3.0, 3.0), lower_left_corner: Vec3A(4.8863316, -0.044797063, 4.174048), horizontal: Vec3A(1.2295314, 0.0, -6.147657), vertical: Vec3A(-0.44830504, 3.4967792, -0.08966101), u: Vec3A(0.19611613, 0.0, -0.9805807), v: Vec3A(-0.1271232, 0.991561, -0.02542464), lens_radius: 0.05, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: None +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 640, height: 360, region: PixelRect { x0: 0, y0: 0, x1: 640, y1: 360 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: None, depth_of_field: true, motion_blur: false, layer_stack: ["$DIR/scatter.usda"], invisible_overrides: Some(0) } +layer: $DIR/scatter.usda +warning: Warning { code: CameraMissing, kind: Skipped, count: 1, prims: [], message: "USD stage has no UsdGeomCamera — falling back to world::get_settings camera" } +lights: 0 +volumes: 0 +world: 2 geometries, PrimitiveBreakdown { triangles: 6, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 6, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=4:0f5ba97034b3f4a5 camera=4:0f5ba97034b3f4a5 shadow=4:0f5ba97034b3f4a5 indirect=4:0f5ba97034b3f4a5 +geom 1: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:36a2c3ef014eeb52 camera=2:36a2c3ef014eeb52 shadow=2:36a2c3ef014eeb52 indirect=2:36a2c3ef014eeb52 +provenance geometry 0..1: /World/steps/geo +provenance geometry 1..2: /World/pair/geo +provenance mesh: MeshOrigin { geom_id: 0, slot: 0, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 1, slot: 1, baked: true, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 9519870911682368984, n_points: 6, n_indices: 8, n_uvs: None, smooth: true, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 1: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 998895739184434894, n_points: 6, n_indices: 6, n_uvs: None, smooth: true, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: None, cameras: [], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: None, offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/scatter_usda-e62e321631ee4219-1.image b/crates/crust-core/tests/data/import_baselines/scatter_usda-e62e321631ee4219-1.image new file mode 100644 index 000000000..c734c5b1d --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/scatter_usda-e62e321631ee4219-1.image @@ -0,0 +1 @@ +640x360 16spp clamp-off a04a09c0d4b5e325 diff --git a/crates/crust-core/tests/data/import_baselines/scope_color_space_usda-acd6f59e656731c0-1.digest b/crates/crust-core/tests/data/import_baselines/scope_color_space_usda-acd6f59e656731c0-1.digest new file mode 100644 index 000000000..f7d0f3bc9 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/scope_color_space_usda-acd6f59e656731c0-1.digest @@ -0,0 +1,22 @@ +time: None +working space: ACEScg +camera path: None +camera: Camera { origin: Vec3A(15.0, 3.0, 3.0), lower_left_corner: Vec3A(4.8863316, -0.044797063, 4.174048), horizontal: Vec3A(1.2295314, 0.0, -6.147657), vertical: Vec3A(-0.44830504, 3.4967792, -0.08966101), u: Vec3A(0.19611613, 0.0, -0.9805807), v: Vec3A(-0.1271232, 0.991561, -0.02542464), lens_radius: 0.05, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: Some("/Render/settings") +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 640, height: 360, region: PixelRect { x0: 0, y0: 0, x1: 640, y1: 360 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: None, depth_of_field: true, motion_blur: false, layer_stack: ["$DIR/scope_color_space.usda"], invisible_overrides: Some(0) } +layer: $DIR/scope_color_space.usda +warning: Warning { code: CameraMissing, kind: Skipped, count: 1, prims: [], message: "USD stage has no UsdGeomCamera — falling back to world::get_settings camera" } +lights: 0 +volumes: 0 +world: 1 geometries, PrimitiveBreakdown { triangles: 2, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 2, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +geom 0: material #0 Signature { kind: "UsdPreviewSurface (textured)", cutout: false, straight: false, boundary: false, emits: true, uv: true, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv Some(0) shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:02ff87c392969355 camera=2:02ff87c392969355 shadow=2:02ff87c392969355 indirect=2:02ff87c392969355 +provenance material /W/M: MaterialOrigin { slots: [0], displaced: false } +provenance geometry 0..1: /W/Quad +provenance mesh: MeshOrigin { geom_id: 0, slot: 0, baked: true, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 17822791014403781691, n_points: 4, n_indices: 4, n_uvs: Some(4), smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: None, cameras: [], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: None, offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("ACEScg") diff --git a/crates/crust-core/tests/data/import_baselines/scope_color_space_usda-acd6f59e656731c0-1.image b/crates/crust-core/tests/data/import_baselines/scope_color_space_usda-acd6f59e656731c0-1.image new file mode 100644 index 000000000..c734c5b1d --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/scope_color_space_usda-acd6f59e656731c0-1.image @@ -0,0 +1 @@ +640x360 16spp clamp-off a04a09c0d4b5e325 diff --git a/crates/crust-core/tests/data/import_baselines/settings_usda-58e4038727242b7e-1.digest b/crates/crust-core/tests/data/import_baselines/settings_usda-58e4038727242b7e-1.digest new file mode 100644 index 000000000..bca4b20f4 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/settings_usda-58e4038727242b7e-1.digest @@ -0,0 +1,20 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/World/cam") +camera: Camera { origin: Vec3A(0.0, 0.0, 0.0), lower_left_corner: Vec3A(-2.7183647, -1.5290802, -10.0), horizontal: Vec3A(5.4367294, 0.0, 0.0), vertical: Vec3A(0.0, 3.0581603, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: Some("/Render/settings") +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 640, height: 360, region: PixelRect { x0: 0, y0: 0, x1: 640, y1: 360 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1024, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 50.0, aperture: [20.955, 15.2908], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 10.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/settings.usda"], invisible_overrides: Some(0) } +layer: $DIR/settings.usda +warning: Warning { code: SettingsInvalidValue, kind: Refused, count: 2, prims: ["/Render/settings"], message: "crust:minSamplesPerPixel = -4 is negative — using 32" } +warning: Warning { code: SettingsLightSamplesClamped, kind: Approximated, count: 1, prims: ["/Render/settings"], message: "crust:lightSamples = 1000000 is above 1024 — taking 1024" } +warning: Warning { code: ColorWorkingSpaceRefused, kind: Refused, count: 1, prims: ["/Render/settings"], message: "/Render/settings: renderingColorSpace refused (working colour space `not_a_space` is not defined by the OCIO config ocio://cg-config-v4.0.0_aces-v2.0_ocio-v2.5); rendering in lin_rec709" } +warning: Warning { code: CameraNotACamera, kind: Refused, count: 1, prims: ["/World/Nope"], message: "RenderSettings.camera targets /World/Nope, which is not a camera on this stage — rendering through /World/cam instead" } +lights: 0 +volumes: 0 +world: 0 geometries, PrimitiveBreakdown { triangles: 0, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 0, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/World/cam"), cameras: ["/World/cam"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/World/cam"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/settings_usda-58e4038727242b7e-1.image b/crates/crust-core/tests/data/import_baselines/settings_usda-58e4038727242b7e-1.image new file mode 100644 index 000000000..c734c5b1d --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/settings_usda-58e4038727242b7e-1.image @@ -0,0 +1 @@ +640x360 16spp clamp-off a04a09c0d4b5e325 diff --git a/crates/crust-core/tests/data/import_baselines/settings_usda-8c1bce0acc8c2aa3-1.digest b/crates/crust-core/tests/data/import_baselines/settings_usda-8c1bce0acc8c2aa3-1.digest new file mode 100644 index 000000000..235a6a892 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/settings_usda-8c1bce0acc8c2aa3-1.digest @@ -0,0 +1,17 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: None +camera: Camera { origin: Vec3A(15.0, 3.0, 3.0), lower_left_corner: Vec3A(4.8863316, -0.044797063, 4.174048), horizontal: Vec3A(1.2295314, 0.0, -6.147657), vertical: Vec3A(-0.44830504, 3.4967792, -0.08966101), u: Vec3A(0.19611613, 0.0, -0.9805807), v: Vec3A(-0.1271232, 0.991561, -0.02542464), lens_radius: 0.05, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: Some("/Render/settings") +settings: RenderSettings { samples_per_pixel: 7, max_depth: 3, width: 32, height: 16, region: PixelRect { x0: 0, y0: 0, x1: 32, y1: 16 }, min_samples_per_pixel: 2, variance_threshold: 0.1, adaptive_neighbour_tolerance: 1.0, frame: 4, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: BalanceMis, pixel_filter: Gaussian { radius: 2.5 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 4, light_samples_indirect: 2, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: None, depth_of_field: true, motion_blur: false, layer_stack: ["$DIR/settings.usda"], invisible_overrides: Some(0) } +layer: $DIR/settings.usda +warning: Warning { code: CameraMissing, kind: Skipped, count: 1, prims: [], message: "USD stage has no UsdGeomCamera — falling back to world::get_settings camera" } +lights: 0 +volumes: 0 +world: 0 geometries, PrimitiveBreakdown { triangles: 0, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 0, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: None, cameras: [], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: None, offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/settings_usda-8c1bce0acc8c2aa3-1.image b/crates/crust-core/tests/data/import_baselines/settings_usda-8c1bce0acc8c2aa3-1.image new file mode 100644 index 000000000..f0b9b5b6b --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/settings_usda-8c1bce0acc8c2aa3-1.image @@ -0,0 +1 @@ +32x16 16spp clamp-off 6df0de0551480325 diff --git a/crates/crust-core/tests/data/import_baselines/shadow_ball_blocked_usda-7a4aa722cf803335-1.digest b/crates/crust-core/tests/data/import_baselines/shadow_ball_blocked_usda-7a4aa722cf803335-1.digest new file mode 100644 index 000000000..03784ab39 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/shadow_ball_blocked_usda-7a4aa722cf803335-1.digest @@ -0,0 +1,26 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/World/Cam") +camera: Camera { origin: Vec3A(0.0, 6.0, 0.0), lower_left_corner: Vec3A(-1.0000001, -4.0, 1.0000001), horizontal: Vec3A(2.0000002, -0.0, 0.0), vertical: Vec3A(0.0, 4.4408926e-16, -2.0000002), u: Vec3A(1.0, -0.0, 0.0), v: Vec3A(0.0, 2.220446e-16, -1.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: Some("/Render/settings") +settings: RenderSettings { samples_per_pixel: 16, max_depth: 1, width: 8, height: 8, region: PixelRect { x0: 0, y0: 0, x1: 8, y1: 8 }, min_samples_per_pixel: 16, variance_threshold: 0.0, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: LightOnly, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: None, light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 100.0, aperture: [20.0, 20.0], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 10.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/shadow_ball_blocked.usda"], invisible_overrides: Some(0) } +layer: $DIR/shadow_ball_blocked.usda +lights: 1 +light 0: area name Some("/World/Key") lpe None pmf 1.0 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 3 geometries, PrimitiveBreakdown { triangles: 2, spheres: 2, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 2, spheres: 2, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:6c746fb49db56631 camera=0:cbf29ce484222325 shadow=1:6c746fb49db56631 indirect=1:6c746fb49db56631 +geom 1: material #1 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:83ed806e4a8ba125 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=1:83ed806e4a8ba125 +geom 2: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:fce6de5b675a55c5 camera=2:fce6de5b675a55c5 shadow=2:fce6de5b675a55c5 indirect=2:fce6de5b675a55c5 +provenance light /World/Key: LightOrigin { index: 0, geoms: 1..2 } +provenance geometry 0..1: /World/Blocker +provenance geometry 1..2: /World/Key +provenance geometry 2..3: /World/Floor +provenance mesh: MeshOrigin { geom_id: 2, slot: 0, baked: true, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 14903623499644419787, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [0] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/World/Cam"), cameras: ["/World/Cam"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/World/Cam"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/shadow_ball_blocked_usda-7a4aa722cf803335-1.image b/crates/crust-core/tests/data/import_baselines/shadow_ball_blocked_usda-7a4aa722cf803335-1.image new file mode 100644 index 000000000..8aad9360c --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/shadow_ball_blocked_usda-7a4aa722cf803335-1.image @@ -0,0 +1 @@ +8x8 16spp clamp-off 9fa9e040e0eedf25 diff --git a/crates/crust-core/tests/data/import_baselines/shadow_ball_excluded_usda-97e5af329ccc1a04-1.digest b/crates/crust-core/tests/data/import_baselines/shadow_ball_excluded_usda-97e5af329ccc1a04-1.digest new file mode 100644 index 000000000..0160f5dfc --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/shadow_ball_excluded_usda-97e5af329ccc1a04-1.digest @@ -0,0 +1,26 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/World/Cam") +camera: Camera { origin: Vec3A(0.0, 6.0, 0.0), lower_left_corner: Vec3A(-1.0000001, -4.0, 1.0000001), horizontal: Vec3A(2.0000002, -0.0, 0.0), vertical: Vec3A(0.0, 4.4408926e-16, -2.0000002), u: Vec3A(1.0, -0.0, 0.0), v: Vec3A(0.0, 2.220446e-16, -1.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: Some("/Render/settings") +settings: RenderSettings { samples_per_pixel: 16, max_depth: 1, width: 8, height: 8, region: PixelRect { x0: 0, y0: 0, x1: 8, y1: 8 }, min_samples_per_pixel: 16, variance_threshold: 0.0, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: LightOnly, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: None, light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 100.0, aperture: [20.0, 20.0], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 10.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/shadow_ball_excluded.usda"], invisible_overrides: Some(0) } +layer: $DIR/shadow_ball_excluded.usda +lights: 1 +light 0: area name Some("/World/Key") lpe None pmf 1.0 shadow RayMask(2) restricted true nee-only false twinned true gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 3 geometries, PrimitiveBreakdown { triangles: 2, spheres: 2, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 2, spheres: 2, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:6c746fb49db56631 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=1:6c746fb49db56631 +geom 1: material #1 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:83ed806e4a8ba125 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=1:83ed806e4a8ba125 +geom 2: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:fce6de5b675a55c5 camera=2:fce6de5b675a55c5 shadow=2:fce6de5b675a55c5 indirect=2:fce6de5b675a55c5 +provenance light /World/Key: LightOrigin { index: 0, geoms: 1..2 } +provenance geometry 0..1: /World/Blocker +provenance geometry 1..2: /World/Key +provenance geometry 2..3: /World/Floor +provenance mesh: MeshOrigin { geom_id: 2, slot: 0, baked: true, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 14903623499644419787, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [0] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/World/Cam"), cameras: ["/World/Cam"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/World/Cam"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/shadow_ball_excluded_usda-97e5af329ccc1a04-1.image b/crates/crust-core/tests/data/import_baselines/shadow_ball_excluded_usda-97e5af329ccc1a04-1.image new file mode 100644 index 000000000..faa3718b5 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/shadow_ball_excluded_usda-97e5af329ccc1a04-1.image @@ -0,0 +1 @@ +8x8 16spp clamp-off 90dcc2e45fb83b3f diff --git a/crates/crust-core/tests/data/import_baselines/shadow_fog_blocked_usda-02a2d7c4f4baa106-1.digest b/crates/crust-core/tests/data/import_baselines/shadow_fog_blocked_usda-02a2d7c4f4baa106-1.digest new file mode 100644 index 000000000..e9261a845 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/shadow_fog_blocked_usda-02a2d7c4f4baa106-1.digest @@ -0,0 +1,25 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/World/Cam") +camera: Camera { origin: Vec3A(0.0, 6.0, 0.0), lower_left_corner: Vec3A(-1.0000001, -4.0, 1.0000001), horizontal: Vec3A(2.0000002, -0.0, 0.0), vertical: Vec3A(0.0, 4.4408926e-16, -2.0000002), u: Vec3A(1.0, -0.0, 0.0), v: Vec3A(0.0, 2.220446e-16, -1.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: Some("/Render/settings") +settings: RenderSettings { samples_per_pixel: 16, max_depth: 1, width: 8, height: 8, region: PixelRect { x0: 0, y0: 0, x1: 8, y1: 8 }, min_samples_per_pixel: 16, variance_threshold: 0.0, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: LightOnly, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: None, light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 100.0, aperture: [20.0, 20.0], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 10.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/shadow_fog_blocked.usda"], invisible_overrides: Some(0) } +layer: $DIR/shadow_fog_blocked.usda +lights: 1 +light 0: area name Some("/World/Key") lpe None pmf 1.0 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 1 +volume 0: sigma_s Vec3A(0.0, 0.0, 0.0) sigma_a Vec3A(3.0, 3.0, 3.0) g 0.0 emission Vec3A(0.0, 0.0, 0.0) mask RayMask(4294967295) class 65535 homogeneous true +world: 2 geometries, PrimitiveBreakdown { triangles: 2, spheres: 1, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 2, spheres: 1, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +geom 0: material #0 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:83ed806e4a8ba125 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=1:83ed806e4a8ba125 +geom 1: material #1 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:fce6de5b675a55c5 camera=2:fce6de5b675a55c5 shadow=2:fce6de5b675a55c5 indirect=2:fce6de5b675a55c5 +provenance light /World/Key: LightOrigin { index: 0, geoms: 0..1 } +provenance geometry 0..1: /World/Key +provenance geometry 1..2: /World/Floor +provenance mesh: MeshOrigin { geom_id: 1, slot: 0, baked: true, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 14903623499644419787, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [] +provenance volumes: ["/World/Blocker"] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/World/Cam"), cameras: ["/World/Cam"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/World/Cam"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/shadow_fog_blocked_usda-02a2d7c4f4baa106-1.image b/crates/crust-core/tests/data/import_baselines/shadow_fog_blocked_usda-02a2d7c4f4baa106-1.image new file mode 100644 index 000000000..38d2e3425 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/shadow_fog_blocked_usda-02a2d7c4f4baa106-1.image @@ -0,0 +1 @@ +8x8 16spp clamp-off 911f9054441db64d diff --git a/crates/crust-core/tests/data/import_baselines/shadow_fog_excluded_usda-0f89cfc00df34be3-1.digest b/crates/crust-core/tests/data/import_baselines/shadow_fog_excluded_usda-0f89cfc00df34be3-1.digest new file mode 100644 index 000000000..cbe2118a8 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/shadow_fog_excluded_usda-0f89cfc00df34be3-1.digest @@ -0,0 +1,25 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/World/Cam") +camera: Camera { origin: Vec3A(0.0, 6.0, 0.0), lower_left_corner: Vec3A(-1.0000001, -4.0, 1.0000001), horizontal: Vec3A(2.0000002, -0.0, 0.0), vertical: Vec3A(0.0, 4.4408926e-16, -2.0000002), u: Vec3A(1.0, -0.0, 0.0), v: Vec3A(0.0, 2.220446e-16, -1.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: Some("/Render/settings") +settings: RenderSettings { samples_per_pixel: 16, max_depth: 1, width: 8, height: 8, region: PixelRect { x0: 0, y0: 0, x1: 8, y1: 8 }, min_samples_per_pixel: 16, variance_threshold: 0.0, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: LightOnly, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: None, light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 100.0, aperture: [20.0, 20.0], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 10.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/shadow_fog_excluded.usda"], invisible_overrides: Some(0) } +layer: $DIR/shadow_fog_excluded.usda +lights: 1 +light 0: area name Some("/World/Key") lpe None pmf 1.0 shadow RayMask(2) restricted true nee-only false twinned true gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 1 +volume 0: sigma_s Vec3A(0.0, 0.0, 0.0) sigma_a Vec3A(3.0, 3.0, 3.0) g 0.0 emission Vec3A(0.0, 0.0, 0.0) mask RayMask(13) class 65535 homogeneous true +world: 2 geometries, PrimitiveBreakdown { triangles: 2, spheres: 1, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 2, spheres: 1, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +geom 0: material #0 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:83ed806e4a8ba125 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=1:83ed806e4a8ba125 +geom 1: material #1 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:fce6de5b675a55c5 camera=2:fce6de5b675a55c5 shadow=2:fce6de5b675a55c5 indirect=2:fce6de5b675a55c5 +provenance light /World/Key: LightOrigin { index: 0, geoms: 0..1 } +provenance geometry 0..1: /World/Key +provenance geometry 1..2: /World/Floor +provenance mesh: MeshOrigin { geom_id: 1, slot: 0, baked: true, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 14903623499644419787, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [] +provenance volumes: ["/World/Blocker"] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/World/Cam"), cameras: ["/World/Cam"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/World/Cam"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/shadow_fog_excluded_usda-0f89cfc00df34be3-1.image b/crates/crust-core/tests/data/import_baselines/shadow_fog_excluded_usda-0f89cfc00df34be3-1.image new file mode 100644 index 000000000..faa3718b5 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/shadow_fog_excluded_usda-0f89cfc00df34be3-1.image @@ -0,0 +1 @@ +8x8 16spp clamp-off 90dcc2e45fb83b3f diff --git a/crates/crust-core/tests/data/import_baselines/shadow_open_usda-43f52a9430038a59-1.digest b/crates/crust-core/tests/data/import_baselines/shadow_open_usda-43f52a9430038a59-1.digest new file mode 100644 index 000000000..ca3b94c6f --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/shadow_open_usda-43f52a9430038a59-1.digest @@ -0,0 +1,24 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/World/Cam") +camera: Camera { origin: Vec3A(0.0, 6.0, 0.0), lower_left_corner: Vec3A(-1.0000001, -4.0, 1.0000001), horizontal: Vec3A(2.0000002, -0.0, 0.0), vertical: Vec3A(0.0, 4.4408926e-16, -2.0000002), u: Vec3A(1.0, -0.0, 0.0), v: Vec3A(0.0, 2.220446e-16, -1.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: Some("/Render/settings") +settings: RenderSettings { samples_per_pixel: 16, max_depth: 1, width: 8, height: 8, region: PixelRect { x0: 0, y0: 0, x1: 8, y1: 8 }, min_samples_per_pixel: 16, variance_threshold: 0.0, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: LightOnly, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: None, light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 100.0, aperture: [20.0, 20.0], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 10.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/shadow_open.usda"], invisible_overrides: Some(0) } +layer: $DIR/shadow_open.usda +lights: 1 +light 0: area name Some("/World/Key") lpe None pmf 1.0 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 2 geometries, PrimitiveBreakdown { triangles: 2, spheres: 1, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 2, spheres: 1, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +geom 0: material #0 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:83ed806e4a8ba125 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=1:83ed806e4a8ba125 +geom 1: material #1 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:fce6de5b675a55c5 camera=2:fce6de5b675a55c5 shadow=2:fce6de5b675a55c5 indirect=2:fce6de5b675a55c5 +provenance light /World/Key: LightOrigin { index: 0, geoms: 0..1 } +provenance geometry 0..1: /World/Key +provenance geometry 1..2: /World/Floor +provenance mesh: MeshOrigin { geom_id: 1, slot: 0, baked: true, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 14903623499644419787, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/World/Cam"), cameras: ["/World/Cam"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/World/Cam"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/shadow_open_usda-43f52a9430038a59-1.image b/crates/crust-core/tests/data/import_baselines/shadow_open_usda-43f52a9430038a59-1.image new file mode 100644 index 000000000..faa3718b5 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/shadow_open_usda-43f52a9430038a59-1.image @@ -0,0 +1 @@ +8x8 16spp clamp-off 90dcc2e45fb83b3f diff --git a/crates/crust-core/tests/data/import_baselines/shaped_rect_usda-2479a47c7797a66c-1.digest b/crates/crust-core/tests/data/import_baselines/shaped_rect_usda-2479a47c7797a66c-1.digest new file mode 100644 index 000000000..604b9253e --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/shaped_rect_usda-2479a47c7797a66c-1.digest @@ -0,0 +1,21 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: None +camera: Camera { origin: Vec3A(15.0, 3.0, 3.0), lower_left_corner: Vec3A(4.8863316, -0.044797063, 4.174048), horizontal: Vec3A(1.2295314, 0.0, -6.147657), vertical: Vec3A(-0.44830504, 3.4967792, -0.08966101), u: Vec3A(0.19611613, 0.0, -0.9805807), v: Vec3A(-0.1271232, 0.991561, -0.02542464), lens_radius: 0.05, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: None +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 640, height: 360, region: PixelRect { x0: 0, y0: 0, x1: 640, y1: 360 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: None, depth_of_field: true, motion_blur: false, layer_stack: ["$DIR/shaped_rect.usda"], invisible_overrides: Some(0) } +layer: $DIR/shaped_rect.usda +warning: Warning { code: CameraMissing, kind: Skipped, count: 1, prims: [], message: "USD stage has no UsdGeomCamera — falling back to world::get_settings camera" } +lights: 1 +light 0: area name Some("/World/Spot") lpe None pmf 1.0 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 1 geometries, PrimitiveBreakdown { triangles: 2, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 2, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +geom 0: material #0 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:f0d197772686bde5 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=2:f0d197772686bde5 +provenance light /World/Spot: LightOrigin { index: 0, geoms: 0..1 } +provenance geometry 0..1: /World/Spot +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: None, cameras: [], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: None, offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/shaped_rect_usda-2479a47c7797a66c-1.image b/crates/crust-core/tests/data/import_baselines/shaped_rect_usda-2479a47c7797a66c-1.image new file mode 100644 index 000000000..c734c5b1d --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/shaped_rect_usda-2479a47c7797a66c-1.image @@ -0,0 +1 @@ +640x360 16spp clamp-off a04a09c0d4b5e325 diff --git a/crates/crust-core/tests/data/import_baselines/shaping_absent_usda-59ac6c6c6ed71036-1.digest b/crates/crust-core/tests/data/import_baselines/shaping_absent_usda-59ac6c6c6ed71036-1.digest new file mode 100644 index 000000000..f3f4c87c9 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/shaping_absent_usda-59ac6c6c6ed71036-1.digest @@ -0,0 +1,21 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: None +camera: Camera { origin: Vec3A(15.0, 3.0, 3.0), lower_left_corner: Vec3A(4.8863316, -0.044797063, 4.174048), horizontal: Vec3A(1.2295314, 0.0, -6.147657), vertical: Vec3A(-0.44830504, 3.4967792, -0.08966101), u: Vec3A(0.19611613, 0.0, -0.9805807), v: Vec3A(-0.1271232, 0.991561, -0.02542464), lens_radius: 0.05, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: None +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 640, height: 360, region: PixelRect { x0: 0, y0: 0, x1: 640, y1: 360 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: None, depth_of_field: true, motion_blur: false, layer_stack: ["$DIR/shaping_absent.usda"], invisible_overrides: Some(0) } +layer: $DIR/shaping_absent.usda +warning: Warning { code: CameraMissing, kind: Skipped, count: 1, prims: [], message: "USD stage has no UsdGeomCamera — falling back to world::get_settings camera" } +lights: 1 +light 0: area name Some("/World/S") lpe None pmf 1.0 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 1 geometries, PrimitiveBreakdown { triangles: 0, spheres: 1, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 0, spheres: 1, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +geom 0: material #0 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:984632b55acb5495 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=1:984632b55acb5495 +provenance light /World/S: LightOrigin { index: 0, geoms: 0..1 } +provenance geometry 0..1: /World/S +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: None, cameras: [], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: None, offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/shaping_absent_usda-59ac6c6c6ed71036-1.image b/crates/crust-core/tests/data/import_baselines/shaping_absent_usda-59ac6c6c6ed71036-1.image new file mode 100644 index 000000000..c734c5b1d --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/shaping_absent_usda-59ac6c6c6ed71036-1.image @@ -0,0 +1 @@ +640x360 16spp clamp-off a04a09c0d4b5e325 diff --git a/crates/crust-core/tests/data/import_baselines/shaping_applied_usda-b1b65b90122da6f7-1.digest b/crates/crust-core/tests/data/import_baselines/shaping_applied_usda-b1b65b90122da6f7-1.digest new file mode 100644 index 000000000..4d0e4c59b --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/shaping_applied_usda-b1b65b90122da6f7-1.digest @@ -0,0 +1,21 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: None +camera: Camera { origin: Vec3A(15.0, 3.0, 3.0), lower_left_corner: Vec3A(4.8863316, -0.044797063, 4.174048), horizontal: Vec3A(1.2295314, 0.0, -6.147657), vertical: Vec3A(-0.44830504, 3.4967792, -0.08966101), u: Vec3A(0.19611613, 0.0, -0.9805807), v: Vec3A(-0.1271232, 0.991561, -0.02542464), lens_radius: 0.05, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: None +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 640, height: 360, region: PixelRect { x0: 0, y0: 0, x1: 640, y1: 360 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: None, depth_of_field: true, motion_blur: false, layer_stack: ["$DIR/shaping_applied.usda"], invisible_overrides: Some(0) } +layer: $DIR/shaping_applied.usda +warning: Warning { code: CameraMissing, kind: Skipped, count: 1, prims: [], message: "USD stage has no UsdGeomCamera — falling back to world::get_settings camera" } +lights: 1 +light 0: area name Some("/World/S") lpe None pmf 1.0 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 1 geometries, PrimitiveBreakdown { triangles: 0, spheres: 1, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 0, spheres: 1, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +geom 0: material #0 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:984632b55acb5495 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=1:984632b55acb5495 +provenance light /World/S: LightOrigin { index: 0, geoms: 0..1 } +provenance geometry 0..1: /World/S +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: None, cameras: [], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: None, offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/shaping_applied_usda-b1b65b90122da6f7-1.image b/crates/crust-core/tests/data/import_baselines/shaping_applied_usda-b1b65b90122da6f7-1.image new file mode 100644 index 000000000..c734c5b1d --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/shaping_applied_usda-b1b65b90122da6f7-1.image @@ -0,0 +1 @@ +640x360 16spp clamp-off a04a09c0d4b5e325 diff --git a/crates/crust-core/tests/data/import_baselines/shared_asset_usda-b4118459ba391348-1.digest b/crates/crust-core/tests/data/import_baselines/shared_asset_usda-b4118459ba391348-1.digest new file mode 100644 index 000000000..ea6b55580 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/shared_asset_usda-b4118459ba391348-1.digest @@ -0,0 +1,31 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/World/Cam") +camera: Camera { origin: Vec3A(1.0, 1.0, 10.0), lower_left_corner: Vec3A(-1.7183647, -0.52908015, 0.0), horizontal: Vec3A(5.4367294, 0.0, 0.0), vertical: Vec3A(0.0, 3.0581603, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: None +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 640, height: 360, region: PixelRect { x0: 0, y0: 0, x1: 640, y1: 360 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 50.0, aperture: [20.955, 15.2908], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 10.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/shared_asset.usda"], invisible_overrides: Some(0) } +layer: $DIR/shared_asset.usda +lights: 0 +volumes: 0 +world: 5 geometries, PrimitiveBreakdown { triangles: 2, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 4 } top level, PrimitiveBreakdown { triangles: 4, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 4 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:e53d9a101514f968 camera=2:e53d9a101514f968 shadow=2:e53d9a101514f968 indirect=2:e53d9a101514f968 +geom 1: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:55e4388480c28b55 camera=2:55e4388480c28b55 shadow=2:55e4388480c28b55 indirect=2:55e4388480c28b55 +geom 2: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:61e4350a67ec8255 camera=2:61e4350a67ec8255 shadow=2:61e4350a67ec8255 indirect=2:61e4350a67ec8255 +geom 3: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:802f8cea72d34ba8 camera=2:802f8cea72d34ba8 shadow=2:802f8cea72d34ba8 indirect=2:802f8cea72d34ba8 +geom 4: material #1 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:61e4350a67ec8255 camera=2:61e4350a67ec8255 shadow=2:61e4350a67ec8255 indirect=2:61e4350a67ec8255 +provenance material /Branch/Looks/Bark: MaterialOrigin { slots: [4], displaced: false } +provenance material /World/Generation2/Prototypes/Branch/Looks/Bark: MaterialOrigin { slots: [0, 1, 2, 3], displaced: false } +provenance material read: ("/Branch/Looks/Bark", "/World/Generation2/Prototypes/Branch/Looks/Bark") +provenance material read: ("/Branch/Looks/Bark/S", "/World/Generation2/Prototypes/Branch/Looks/Bark") +provenance geometry 0..2: /World/Generation2 +provenance geometry 2..4: /World/Generation1 +provenance geometry 4..5: /Branch/Geo +provenance mesh: MeshOrigin { geom_id: 4, slot: 1, baked: true, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 11573210918765220906, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 0 }), placements: 0, shared: true, displaced: false } +provenance mesh slot 1: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 11573210918765220906, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 1 }), placements: 1, shared: false, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/World/Cam"), cameras: ["/World/Cam"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/World/Cam"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/shared_asset_usda-b4118459ba391348-1.image b/crates/crust-core/tests/data/import_baselines/shared_asset_usda-b4118459ba391348-1.image new file mode 100644 index 000000000..c734c5b1d --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/shared_asset_usda-b4118459ba391348-1.image @@ -0,0 +1 @@ +640x360 16spp clamp-off a04a09c0d4b5e325 diff --git a/crates/crust-core/tests/data/import_baselines/shared_points_usda-b97fa4512d46ed74-1.digest b/crates/crust-core/tests/data/import_baselines/shared_points_usda-b97fa4512d46ed74-1.digest new file mode 100644 index 000000000..d6dc216a2 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/shared_points_usda-b97fa4512d46ed74-1.digest @@ -0,0 +1,26 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/World/cam") +camera: Camera { origin: Vec3A(0.0, 0.0, 10.0), lower_left_corner: Vec3A(-2.0955, -1.5716249, 0.0), horizontal: Vec3A(4.191, 0.0, 0.0), vertical: Vec3A(0.0, 3.1432498, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: Some("/Render/settings") +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 48, height: 36, region: PixelRect { x0: 0, y0: 0, x1: 48, y1: 36 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [AovProduct { prim_path: "/Render/p", name: "p.exr", vars: [AovVar { prim_path: "/Render/P", name: "P", channel_prefix: None, source: P, components: 3, precision: Float, accumulation: Closest, clear: 0.0, expression: None, raw: false, variance: false }, AovVar { prim_path: "/Render/Pref", name: "Pref", channel_prefix: None, source: Primvar(PrimvarSource { index: 0, components: 3, role: Vector }), components: 3, precision: Float, accumulation: Closest, clear: 0.0, expression: None, raw: false, variance: false }], attributes: [] }], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 50.0, aperture: [20.955, 15.2908], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 10.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/shared_points.usda"], invisible_overrides: Some(0) } +layer: $DIR/shared_points.usda +lights: 1 +light 0: dome name Some("/World/dome") lpe None pmf 1.0 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 2 geometries, PrimitiveBreakdown { triangles: 4, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 4, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov Some((Some(0), false)) swapped false curves false scale 1.0 motion [] pieces all=2:4ee6c265190d0ff4 camera=2:4ee6c265190d0ff4 shadow=2:4ee6c265190d0ff4 indirect=2:4ee6c265190d0ff4 +geom 1: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov Some((Some(1), false)) swapped false curves false scale 1.0 motion [] pieces all=2:0318e20df8c6e33c camera=2:0318e20df8c6e33c shadow=2:0318e20df8c6e33c indirect=2:0318e20df8c6e33c +provenance light /World/dome: LightOrigin { index: 0, geoms: 2..2 } +provenance geometry 0..1: /World/b/m +provenance geometry 1..2: /World/a/m +provenance mesh: MeshOrigin { geom_id: 0, slot: 0, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 1, slot: 1, baked: true, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 5795678210013101378, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 1: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 16911893879792146658, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/World/cam"), cameras: ["/World/cam"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [("rest", 3)], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/World/cam"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/shared_points_usda-b97fa4512d46ed74-1.image b/crates/crust-core/tests/data/import_baselines/shared_points_usda-b97fa4512d46ed74-1.image new file mode 100644 index 000000000..bfaeb4907 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/shared_points_usda-b97fa4512d46ed74-1.image @@ -0,0 +1 @@ +48x36 16spp clamp-off 55f309e798aa7430 diff --git a/crates/crust-core/tests/data/import_baselines/shared_usda-9209cd8eb954e389-1.digest b/crates/crust-core/tests/data/import_baselines/shared_usda-9209cd8eb954e389-1.digest new file mode 100644 index 000000000..70ef9e27a --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/shared_usda-9209cd8eb954e389-1.digest @@ -0,0 +1,33 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: None +camera: Camera { origin: Vec3A(15.0, 3.0, 3.0), lower_left_corner: Vec3A(4.8863316, -0.044797063, 4.174048), horizontal: Vec3A(1.2295314, 0.0, -6.147657), vertical: Vec3A(-0.44830504, 3.4967792, -0.08966101), u: Vec3A(0.19611613, 0.0, -0.9805807), v: Vec3A(-0.1271232, 0.991561, -0.02542464), lens_radius: 0.05, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: None +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 640, height: 360, region: PixelRect { x0: 0, y0: 0, x1: 640, y1: 360 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: None, depth_of_field: true, motion_blur: false, layer_stack: ["$DIR/shared.usda"], invisible_overrides: Some(0) } +layer: $DIR/shared.usda +warning: Warning { code: CameraMissing, kind: Skipped, count: 1, prims: [], message: "USD stage has no UsdGeomCamera — falling back to world::get_settings camera" } +lights: 0 +volumes: 0 +world: 3 geometries, PrimitiveBreakdown { triangles: 6, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 6, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +geom 0: material #0 Signature { kind: "MaterialX", cutout: false, straight: false, boundary: false, emits: false, uv: true, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:658935472ec9d838 camera=2:658935472ec9d838 shadow=2:658935472ec9d838 indirect=2:658935472ec9d838 +geom 1: material #1 Signature { kind: "MaterialX", cutout: false, straight: false, boundary: false, emits: false, uv: true, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:71682785a2d90a85 camera=2:71682785a2d90a85 shadow=2:71682785a2d90a85 indirect=2:71682785a2d90a85 +geom 2: material #0 Signature { kind: "MaterialX", cutout: false, straight: false, boundary: false, emits: false, uv: true, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:e52d9a39978026c5 camera=2:e52d9a39978026c5 shadow=2:e52d9a39978026c5 indirect=2:e52d9a39978026c5 +provenance material /B/Looks/Inner: MaterialOrigin { slots: [1], displaced: false } +provenance material /Looks/Red: MaterialOrigin { slots: [0, 2], displaced: false } +provenance material read: ("/Shared/Tint", "/B/Looks/Inner") +provenance material read: ("/Shared/Tint", "/Looks/Red") +provenance geometry 0..1: /A/Quad +provenance geometry 1..2: /B/Quad +provenance geometry 2..3: /C/Quad +provenance mesh: MeshOrigin { geom_id: 0, slot: 0, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 1, slot: 1, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 2, slot: 2, baked: true, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 5062424276489054560, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 1: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 9056688765093257811, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 1 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 2: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 204846636954257726, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: None, cameras: [], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: None, offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/shared_usda-9209cd8eb954e389-1.image b/crates/crust-core/tests/data/import_baselines/shared_usda-9209cd8eb954e389-1.image new file mode 100644 index 000000000..c734c5b1d --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/shared_usda-9209cd8eb954e389-1.image @@ -0,0 +1 @@ +640x360 16spp clamp-off a04a09c0d4b5e325 diff --git a/crates/crust-core/tests/data/import_baselines/shared_usda-b9af19ac4c829153-1.digest b/crates/crust-core/tests/data/import_baselines/shared_usda-b9af19ac4c829153-1.digest new file mode 100644 index 000000000..c9e77917f --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/shared_usda-b9af19ac4c829153-1.digest @@ -0,0 +1,25 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: None +camera: Camera { origin: Vec3A(15.0, 3.0, 3.0), lower_left_corner: Vec3A(4.8863316, -0.044797063, 4.174048), horizontal: Vec3A(1.2295314, 0.0, -6.147657), vertical: Vec3A(-0.44830504, 3.4967792, -0.08966101), u: Vec3A(0.19611613, 0.0, -0.9805807), v: Vec3A(-0.1271232, 0.991561, -0.02542464), lens_radius: 0.05, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: None +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 640, height: 360, region: PixelRect { x0: 0, y0: 0, x1: 640, y1: 360 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: None, depth_of_field: true, motion_blur: false, layer_stack: ["$DIR/shared.usda"], invisible_overrides: Some(0) } +layer: $DIR/shared.usda +warning: Warning { code: CameraMissing, kind: Skipped, count: 1, prims: [], message: "USD stage has no UsdGeomCamera — falling back to world::get_settings camera" } +lights: 0 +volumes: 0 +world: 2 geometries, PrimitiveBreakdown { triangles: 0, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 2 } top level, PrimitiveBreakdown { triangles: 8, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 2 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=8:057df717bb31d5a5 camera=8:057df717bb31d5a5 shadow=8:057df717bb31d5a5 indirect=8:057df717bb31d5a5 +geom 1: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=8:781080fc8e9e0af5 camera=8:781080fc8e9e0af5 shadow=8:781080fc8e9e0af5 indirect=8:781080fc8e9e0af5 +provenance material /World/Up: MaterialOrigin { slots: [0, 1], displaced: true } +provenance geometry 0..1: /World/Moved/B +provenance geometry 1..2: /World/A +provenance mesh: MeshOrigin { geom_id: 0, slot: 0, baked: false, moving: false } +provenance mesh: MeshOrigin { geom_id: 1, slot: 0, baked: false, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 485570829870313581, n_points: 9, n_indices: 16, n_uvs: None, smooth: true, material: 0 }), placements: 2, shared: false, displaced: true } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: Some(1), subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 1, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: None, cameras: [], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: None, offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/shared_usda-b9af19ac4c829153-1.image b/crates/crust-core/tests/data/import_baselines/shared_usda-b9af19ac4c829153-1.image new file mode 100644 index 000000000..c734c5b1d --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/shared_usda-b9af19ac4c829153-1.image @@ -0,0 +1 @@ +640x360 16spp clamp-off a04a09c0d4b5e325 diff --git a/crates/crust-core/tests/data/import_baselines/sharp_usda-9bf0a09f5df9236e-1.digest b/crates/crust-core/tests/data/import_baselines/sharp_usda-9bf0a09f5df9236e-1.digest new file mode 100644 index 000000000..8d4064575 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/sharp_usda-9bf0a09f5df9236e-1.digest @@ -0,0 +1,19 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/World/cam") +camera: Camera { origin: Vec3A(0.0, 0.0, 8.0), lower_left_corner: Vec3A(-2.7183647, -1.5290802, -2.0), horizontal: Vec3A(5.4367294, 0.0, 0.0), vertical: Vec3A(0.0, 3.0581603, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: Some("/Render/settings") +settings: RenderSettings { samples_per_pixel: 16, max_depth: 2, width: 64, height: 36, region: PixelRect { x0: 0, y0: 0, x1: 64, y1: 36 }, min_samples_per_pixel: 16, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: false, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 50.0, aperture: [20.955, 15.2908], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 10.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/sharp.usda"], invisible_overrides: Some(0) } +layer: $DIR/sharp.usda +lights: 0 +volumes: 0 +world: 1 geometries, PrimitiveBreakdown { triangles: 0, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 1 } top level, PrimitiveBreakdown { triangles: 0, spheres: 1, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 1 } unique, motion true +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [Translation(Vec3A(1.2, 0.0, 0.0))] pieces all=1:6246e4b1bcdf2dac camera=1:6246e4b1bcdf2dac shadow=1:6246e4b1bcdf2dac indirect=1:6246e4b1bcdf2dac +provenance material /World/Glow: MaterialOrigin { slots: [0], displaced: false } +provenance geometry 0..1: /World/Mover +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/World/cam"), cameras: ["/World/cam"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/World/cam"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/sharp_usda-9bf0a09f5df9236e-1.image b/crates/crust-core/tests/data/import_baselines/sharp_usda-9bf0a09f5df9236e-1.image new file mode 100644 index 000000000..410d887f2 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/sharp_usda-9bf0a09f5df9236e-1.image @@ -0,0 +1 @@ +64x36 16spp clamp-off f27fb0620765d10a diff --git a/crates/crust-core/tests/data/import_baselines/shot_lookdev_usda-13a3dd4f11de39b9-1.digest b/crates/crust-core/tests/data/import_baselines/shot_lookdev_usda-13a3dd4f11de39b9-1.digest new file mode 100644 index 000000000..086bb0df7 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/shot_lookdev_usda-13a3dd4f11de39b9-1.digest @@ -0,0 +1,40 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/scene/camera1") +camera: Camera { origin: Vec3A(0.0074343784, 1.9913422, 4.0133057), lower_left_corner: Vec3A(-8.881443, -3.0086517, -0.98669434), horizontal: Vec3A(17.777756, 0.0, 0.0), vertical: Vec3A(0.0, 9.999988, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: Some(Vec4(0.0, 0.0, -1.0, 3.9133058)), far: Some(Vec4(0.0, 0.0, 1.0, 9995.986)), planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: None +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 640, height: 360, region: PixelRect { x0: 0, y0: 0, x1: 640, y1: 360 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 12.700017, aperture: [25.4, 25.4], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 5.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/shot_lookdev.usda", "$TMP/crust_mcp_cli/anchoring/shots/a/shot.usda"], invisible_overrides: Some(0) } +layer: $TMP/crust_mcp_cli/anchoring/shots/a/shot.usda +layer: $DIR/shot_lookdev.usda +warning: Warning { code: MaterialFallbackDefault, kind: Skipped, count: 1, prims: ["/scene/Looks/initialShadingGroup"], message: "Material /scene/Looks/initialShadingGroup has no surface shader — using default grey OpenPBR" } +lights: 1 +light 0: dome name Some("/scene/Sky") lpe None pmf 1.0 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 5 geometries, PrimitiveBreakdown { triangles: 822, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 2 } top level, PrimitiveBreakdown { triangles: 1582, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 2 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 4.0 motion [] pieces all=10:88b22fc3345d5b05 camera=10:88b22fc3345d5b05 shadow=10:88b22fc3345d5b05 indirect=10:88b22fc3345d5b05 +geom 1: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.2 motion [] pieces all=760:c2b60a75c52c78b9 camera=760:c2b60a75c52c78b9 shadow=760:c2b60a75c52c78b9 indirect=760:c2b60a75c52c78b9 +geom 2: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=12:94a297badef437e1 camera=12:94a297badef437e1 shadow=12:94a297badef437e1 indirect=12:94a297badef437e1 +geom 3: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.25 motion [] pieces all=800:4a8c9f44d777e131 camera=800:4a8c9f44d777e131 shadow=800:4a8c9f44d777e131 indirect=800:4a8c9f44d777e131 +geom 4: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.3585339 motion [] pieces all=760:2344ecf63e12c441 camera=760:2344ecf63e12c441 shadow=760:2344ecf63e12c441 indirect=760:2344ecf63e12c441 +provenance material /scene/Looks/initialShadingGroup: MaterialOrigin { slots: [0, 1, 2, 3, 4], displaced: false } +provenance light /scene/Sky: LightOrigin { index: 0, geoms: 0..0 } +provenance geometry 0..1: /scene/pCube1 +provenance geometry 1..2: /scene/pSphere1 +provenance geometry 2..3: /scene/pCube2 +provenance geometry 3..4: /scene/pTorus1 +provenance geometry 4..5: /scene/pSphere2 +provenance mesh: MeshOrigin { geom_id: 0, slot: 0, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 1, slot: 1, baked: false, moving: false } +provenance mesh: MeshOrigin { geom_id: 2, slot: 2, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 3, slot: 3, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 4, slot: 1, baked: false, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 12343188411137242430, n_points: 8, n_indices: 20, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 1: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 17119738035130870988, n_points: 382, n_indices: 1560, n_uvs: None, smooth: false, material: 0 }), placements: 2, shared: false, displaced: false } +provenance mesh slot 2: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 1739488954094729910, n_points: 8, n_indices: 24, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 3: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 6096447469814747168, n_points: 400, n_indices: 1600, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: true }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/scene/camera1"), cameras: ["/scene/camera1"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/scene/camera1"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/shot_lookdev_usda-13a3dd4f11de39b9-1.image b/crates/crust-core/tests/data/import_baselines/shot_lookdev_usda-13a3dd4f11de39b9-1.image new file mode 100644 index 000000000..7172edbfe --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/shot_lookdev_usda-13a3dd4f11de39b9-1.image @@ -0,0 +1 @@ +640x360 16spp clamp-off 64ede904b11bab22 diff --git a/crates/crust-core/tests/data/import_baselines/shot_lookdev_usda-27651d6a015b04ab-1.digest b/crates/crust-core/tests/data/import_baselines/shot_lookdev_usda-27651d6a015b04ab-1.digest new file mode 100644 index 000000000..13d105cd9 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/shot_lookdev_usda-27651d6a015b04ab-1.digest @@ -0,0 +1,41 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/scene/camera1") +camera: Camera { origin: Vec3A(0.0074343784, 1.9913422, 4.0133057), lower_left_corner: Vec3A(-8.881443, -3.0086517, -0.98669434), horizontal: Vec3A(17.777756, 0.0, 0.0), vertical: Vec3A(0.0, 9.999988, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: Some(Vec4(0.0, 0.0, -1.0, 3.9133058)), far: Some(Vec4(0.0, 0.0, 1.0, 9995.986)), planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: None +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 640, height: 360, region: PixelRect { x0: 0, y0: 0, x1: 640, y1: 360 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 12.700017, aperture: [25.4, 25.4], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 5.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/shot_lookdev.usda", "$DIR/shot.usda"], invisible_overrides: Some(0) } +layer: $DIR/shot.usda +layer: $DIR/shot_lookdev.usda +warning: Warning { code: MaterialFallbackDefault, kind: Skipped, count: 1, prims: ["/scene/Looks/initialShadingGroup"], message: "Material /scene/Looks/initialShadingGroup has no surface shader — using default grey OpenPBR" } +warning: Warning { code: LightDegenerateShape, kind: Skipped, count: 1, prims: ["/scene/card"], message: "RectLight at /scene/card: width 0 × height 1 must be finite and positive — skipped" } +lights: 1 +light 0: dome name Some("/scene/Sky") lpe None pmf 1.0 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 5 geometries, PrimitiveBreakdown { triangles: 822, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 2 } top level, PrimitiveBreakdown { triangles: 1582, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 2 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 4.0 motion [] pieces all=10:88b22fc3345d5b05 camera=10:88b22fc3345d5b05 shadow=10:88b22fc3345d5b05 indirect=10:88b22fc3345d5b05 +geom 1: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.2 motion [] pieces all=760:c2b60a75c52c78b9 camera=760:c2b60a75c52c78b9 shadow=760:c2b60a75c52c78b9 indirect=760:c2b60a75c52c78b9 +geom 2: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=12:94a297badef437e1 camera=12:94a297badef437e1 shadow=12:94a297badef437e1 indirect=12:94a297badef437e1 +geom 3: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.25 motion [] pieces all=800:4a8c9f44d777e131 camera=800:4a8c9f44d777e131 shadow=800:4a8c9f44d777e131 indirect=800:4a8c9f44d777e131 +geom 4: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.3585339 motion [] pieces all=760:2344ecf63e12c441 camera=760:2344ecf63e12c441 shadow=760:2344ecf63e12c441 indirect=760:2344ecf63e12c441 +provenance material /scene/Looks/initialShadingGroup: MaterialOrigin { slots: [0, 1, 2, 3, 4], displaced: false } +provenance light /scene/Sky: LightOrigin { index: 0, geoms: 0..0 } +provenance geometry 0..1: /scene/pCube1 +provenance geometry 1..2: /scene/pSphere1 +provenance geometry 2..3: /scene/pCube2 +provenance geometry 3..4: /scene/pTorus1 +provenance geometry 4..5: /scene/pSphere2 +provenance mesh: MeshOrigin { geom_id: 0, slot: 0, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 1, slot: 1, baked: false, moving: false } +provenance mesh: MeshOrigin { geom_id: 2, slot: 2, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 3, slot: 3, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 4, slot: 1, baked: false, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 12343188411137242430, n_points: 8, n_indices: 20, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 1: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 17119738035130870988, n_points: 382, n_indices: 1560, n_uvs: None, smooth: false, material: 0 }), placements: 2, shared: false, displaced: false } +provenance mesh slot 2: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 1739488954094729910, n_points: 8, n_indices: 24, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 3: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 6096447469814747168, n_points: 400, n_indices: 1600, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: true }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/scene/camera1"), cameras: ["/scene/camera1"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/scene/camera1"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/shot_lookdev_usda-27651d6a015b04ab-1.image b/crates/crust-core/tests/data/import_baselines/shot_lookdev_usda-27651d6a015b04ab-1.image new file mode 100644 index 000000000..78015e809 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/shot_lookdev_usda-27651d6a015b04ab-1.image @@ -0,0 +1 @@ +640x360 16spp clamp-off db4fac9d3b84f90f diff --git a/crates/crust-core/tests/data/import_baselines/shot_lookdev_usda-369c0d66f45d39b9-1.digest b/crates/crust-core/tests/data/import_baselines/shot_lookdev_usda-369c0d66f45d39b9-1.digest new file mode 100644 index 000000000..15a71ecaf --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/shot_lookdev_usda-369c0d66f45d39b9-1.digest @@ -0,0 +1,40 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/scene/camera1") +camera: Camera { origin: Vec3A(0.0074343784, 1.9913422, 4.0133057), lower_left_corner: Vec3A(-8.881443, -3.0086517, -0.98669434), horizontal: Vec3A(17.777756, 0.0, 0.0), vertical: Vec3A(0.0, 9.999988, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: Some(Vec4(0.0, 0.0, -1.0, 3.9133058)), far: Some(Vec4(0.0, 0.0, 1.0, 9995.986)), planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: None +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 640, height: 360, region: PixelRect { x0: 0, y0: 0, x1: 640, y1: 360 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 12.700017, aperture: [25.4, 25.4], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 5.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/shot_lookdev.usda", "$DIR/shot.usda"], invisible_overrides: Some(0) } +layer: $DIR/shot.usda +layer: $DIR/shot_lookdev.usda +warning: Warning { code: MaterialFallbackDefault, kind: Skipped, count: 1, prims: ["/scene/Looks/initialShadingGroup"], message: "Material /scene/Looks/initialShadingGroup has no surface shader — using default grey OpenPBR" } +lights: 1 +light 0: dome name Some("/scene/Sky") lpe None pmf 1.0 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 5 geometries, PrimitiveBreakdown { triangles: 822, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 2 } top level, PrimitiveBreakdown { triangles: 1582, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 2 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 4.0 motion [] pieces all=10:88b22fc3345d5b05 camera=10:88b22fc3345d5b05 shadow=10:88b22fc3345d5b05 indirect=10:88b22fc3345d5b05 +geom 1: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.2 motion [] pieces all=760:c2b60a75c52c78b9 camera=760:c2b60a75c52c78b9 shadow=760:c2b60a75c52c78b9 indirect=760:c2b60a75c52c78b9 +geom 2: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=12:94a297badef437e1 camera=12:94a297badef437e1 shadow=12:94a297badef437e1 indirect=12:94a297badef437e1 +geom 3: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.25 motion [] pieces all=800:4a8c9f44d777e131 camera=800:4a8c9f44d777e131 shadow=800:4a8c9f44d777e131 indirect=800:4a8c9f44d777e131 +geom 4: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.3585339 motion [] pieces all=760:2344ecf63e12c441 camera=760:2344ecf63e12c441 shadow=760:2344ecf63e12c441 indirect=760:2344ecf63e12c441 +provenance material /scene/Looks/initialShadingGroup: MaterialOrigin { slots: [0, 1, 2, 3, 4], displaced: false } +provenance light /scene/Sky: LightOrigin { index: 0, geoms: 0..0 } +provenance geometry 0..1: /scene/pCube1 +provenance geometry 1..2: /scene/pSphere1 +provenance geometry 2..3: /scene/pCube2 +provenance geometry 3..4: /scene/pTorus1 +provenance geometry 4..5: /scene/pSphere2 +provenance mesh: MeshOrigin { geom_id: 0, slot: 0, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 1, slot: 1, baked: false, moving: false } +provenance mesh: MeshOrigin { geom_id: 2, slot: 2, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 3, slot: 3, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 4, slot: 1, baked: false, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 12343188411137242430, n_points: 8, n_indices: 20, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 1: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 17119738035130870988, n_points: 382, n_indices: 1560, n_uvs: None, smooth: false, material: 0 }), placements: 2, shared: false, displaced: false } +provenance mesh slot 2: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 1739488954094729910, n_points: 8, n_indices: 24, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 3: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 6096447469814747168, n_points: 400, n_indices: 1600, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: true }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/scene/camera1"), cameras: ["/scene/camera1"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/scene/camera1"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/shot_lookdev_usda-369c0d66f45d39b9-1.image b/crates/crust-core/tests/data/import_baselines/shot_lookdev_usda-369c0d66f45d39b9-1.image new file mode 100644 index 000000000..7172edbfe --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/shot_lookdev_usda-369c0d66f45d39b9-1.image @@ -0,0 +1 @@ +640x360 16spp clamp-off 64ede904b11bab22 diff --git a/crates/crust-core/tests/data/import_baselines/shot_lookdev_usda-6f33035f56110470-1.digest b/crates/crust-core/tests/data/import_baselines/shot_lookdev_usda-6f33035f56110470-1.digest new file mode 100644 index 000000000..086bb0df7 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/shot_lookdev_usda-6f33035f56110470-1.digest @@ -0,0 +1,40 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/scene/camera1") +camera: Camera { origin: Vec3A(0.0074343784, 1.9913422, 4.0133057), lower_left_corner: Vec3A(-8.881443, -3.0086517, -0.98669434), horizontal: Vec3A(17.777756, 0.0, 0.0), vertical: Vec3A(0.0, 9.999988, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: Some(Vec4(0.0, 0.0, -1.0, 3.9133058)), far: Some(Vec4(0.0, 0.0, 1.0, 9995.986)), planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: None +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 640, height: 360, region: PixelRect { x0: 0, y0: 0, x1: 640, y1: 360 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 12.700017, aperture: [25.4, 25.4], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 5.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/shot_lookdev.usda", "$TMP/crust_mcp_cli/anchoring/shots/a/shot.usda"], invisible_overrides: Some(0) } +layer: $TMP/crust_mcp_cli/anchoring/shots/a/shot.usda +layer: $DIR/shot_lookdev.usda +warning: Warning { code: MaterialFallbackDefault, kind: Skipped, count: 1, prims: ["/scene/Looks/initialShadingGroup"], message: "Material /scene/Looks/initialShadingGroup has no surface shader — using default grey OpenPBR" } +lights: 1 +light 0: dome name Some("/scene/Sky") lpe None pmf 1.0 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 5 geometries, PrimitiveBreakdown { triangles: 822, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 2 } top level, PrimitiveBreakdown { triangles: 1582, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 2 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 4.0 motion [] pieces all=10:88b22fc3345d5b05 camera=10:88b22fc3345d5b05 shadow=10:88b22fc3345d5b05 indirect=10:88b22fc3345d5b05 +geom 1: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.2 motion [] pieces all=760:c2b60a75c52c78b9 camera=760:c2b60a75c52c78b9 shadow=760:c2b60a75c52c78b9 indirect=760:c2b60a75c52c78b9 +geom 2: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=12:94a297badef437e1 camera=12:94a297badef437e1 shadow=12:94a297badef437e1 indirect=12:94a297badef437e1 +geom 3: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.25 motion [] pieces all=800:4a8c9f44d777e131 camera=800:4a8c9f44d777e131 shadow=800:4a8c9f44d777e131 indirect=800:4a8c9f44d777e131 +geom 4: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.3585339 motion [] pieces all=760:2344ecf63e12c441 camera=760:2344ecf63e12c441 shadow=760:2344ecf63e12c441 indirect=760:2344ecf63e12c441 +provenance material /scene/Looks/initialShadingGroup: MaterialOrigin { slots: [0, 1, 2, 3, 4], displaced: false } +provenance light /scene/Sky: LightOrigin { index: 0, geoms: 0..0 } +provenance geometry 0..1: /scene/pCube1 +provenance geometry 1..2: /scene/pSphere1 +provenance geometry 2..3: /scene/pCube2 +provenance geometry 3..4: /scene/pTorus1 +provenance geometry 4..5: /scene/pSphere2 +provenance mesh: MeshOrigin { geom_id: 0, slot: 0, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 1, slot: 1, baked: false, moving: false } +provenance mesh: MeshOrigin { geom_id: 2, slot: 2, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 3, slot: 3, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 4, slot: 1, baked: false, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 12343188411137242430, n_points: 8, n_indices: 20, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 1: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 17119738035130870988, n_points: 382, n_indices: 1560, n_uvs: None, smooth: false, material: 0 }), placements: 2, shared: false, displaced: false } +provenance mesh slot 2: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 1739488954094729910, n_points: 8, n_indices: 24, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 3: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 6096447469814747168, n_points: 400, n_indices: 1600, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: true }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/scene/camera1"), cameras: ["/scene/camera1"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/scene/camera1"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/shot_lookdev_usda-6f33035f56110470-1.image b/crates/crust-core/tests/data/import_baselines/shot_lookdev_usda-6f33035f56110470-1.image new file mode 100644 index 000000000..7172edbfe --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/shot_lookdev_usda-6f33035f56110470-1.image @@ -0,0 +1 @@ +640x360 16spp clamp-off 64ede904b11bab22 diff --git a/crates/crust-core/tests/data/import_baselines/shot_lookdev_usda-7003167a7a70688d-1.digest b/crates/crust-core/tests/data/import_baselines/shot_lookdev_usda-7003167a7a70688d-1.digest new file mode 100644 index 000000000..0c9ca2f1c --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/shot_lookdev_usda-7003167a7a70688d-1.digest @@ -0,0 +1,40 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/scene/camera1") +camera: Camera { origin: Vec3A(0.0074343784, 1.9913422, 4.0133057), lower_left_corner: Vec3A(-8.881443, -3.0086517, -0.98669434), horizontal: Vec3A(17.777756, 0.0, 0.0), vertical: Vec3A(0.0, 9.999988, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: Some(Vec4(0.0, 0.0, -1.0, 3.9133058)), far: Some(Vec4(0.0, 0.0, 1.0, 9995.986)), planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: None +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 640, height: 360, region: PixelRect { x0: 0, y0: 0, x1: 640, y1: 360 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 12.700017, aperture: [25.4, 25.4], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 5.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/shot_lookdev.usda", "$DIR/shot.usda"], invisible_overrides: Some(0) } +layer: $DIR/shot.usda +layer: $DIR/shot_lookdev.usda +warning: Warning { code: MaterialFallbackDefault, kind: Skipped, count: 1, prims: ["/scene/Looks/initialShadingGroup"], message: "Material /scene/Looks/initialShadingGroup has no surface shader — using default grey OpenPBR" } +lights: 1 +light 0: dome name Some("/scene/Sky") lpe None pmf 1.0 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 5 geometries, PrimitiveBreakdown { triangles: 822, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 2 } top level, PrimitiveBreakdown { triangles: 1582, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 2 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 4.0 motion [] pieces all=10:88b22fc3345d5b05 camera=10:88b22fc3345d5b05 shadow=10:88b22fc3345d5b05 indirect=10:88b22fc3345d5b05 +geom 1: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.2 motion [] pieces all=760:c2b60a75c52c78b9 camera=760:c2b60a75c52c78b9 shadow=760:c2b60a75c52c78b9 indirect=760:c2b60a75c52c78b9 +geom 2: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=12:94a297badef437e1 camera=12:94a297badef437e1 shadow=12:94a297badef437e1 indirect=12:94a297badef437e1 +geom 3: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.25 motion [] pieces all=800:4a8c9f44d777e131 camera=800:4a8c9f44d777e131 shadow=800:4a8c9f44d777e131 indirect=800:4a8c9f44d777e131 +geom 4: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.3585339 motion [] pieces all=760:2344ecf63e12c441 camera=760:2344ecf63e12c441 shadow=760:2344ecf63e12c441 indirect=760:2344ecf63e12c441 +provenance material /scene/Looks/initialShadingGroup: MaterialOrigin { slots: [0, 1, 2, 3, 4], displaced: false } +provenance light /scene/Sky: LightOrigin { index: 0, geoms: 0..0 } +provenance geometry 0..1: /scene/pCube1 +provenance geometry 1..2: /scene/pSphere1 +provenance geometry 2..3: /scene/pCube2 +provenance geometry 3..4: /scene/pTorus1 +provenance geometry 4..5: /scene/pSphere2 +provenance mesh: MeshOrigin { geom_id: 0, slot: 0, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 1, slot: 1, baked: false, moving: false } +provenance mesh: MeshOrigin { geom_id: 2, slot: 2, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 3, slot: 3, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 4, slot: 1, baked: false, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 12343188411137242430, n_points: 8, n_indices: 20, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 1: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 17119738035130870988, n_points: 382, n_indices: 1560, n_uvs: None, smooth: false, material: 0 }), placements: 2, shared: false, displaced: false } +provenance mesh slot 2: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 1739488954094729910, n_points: 8, n_indices: 24, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 3: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 6096447469814747168, n_points: 400, n_indices: 1600, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: true, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/scene/camera1"), cameras: ["/scene/camera1"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/scene/camera1"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/shot_lookdev_usda-7003167a7a70688d-1.image b/crates/crust-core/tests/data/import_baselines/shot_lookdev_usda-7003167a7a70688d-1.image new file mode 100644 index 000000000..7172edbfe --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/shot_lookdev_usda-7003167a7a70688d-1.image @@ -0,0 +1 @@ +640x360 16spp clamp-off 64ede904b11bab22 diff --git a/crates/crust-core/tests/data/import_baselines/shot_lookdev_usda-b26fdb3392c1eac3-1.digest b/crates/crust-core/tests/data/import_baselines/shot_lookdev_usda-b26fdb3392c1eac3-1.digest new file mode 100644 index 000000000..ce95b3ace --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/shot_lookdev_usda-b26fdb3392c1eac3-1.digest @@ -0,0 +1,40 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/scene/camera1") +camera: Camera { origin: Vec3A(0.0074343784, 1.9913422, 4.0133057), lower_left_corner: Vec3A(-8.881443, -3.0086517, -0.98669434), horizontal: Vec3A(17.777756, 0.0, 0.0), vertical: Vec3A(0.0, 9.999988, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: Some(Vec4(0.0, 0.0, -1.0, 3.9133058)), far: Some(Vec4(0.0, 0.0, 1.0, 9995.986)), planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: None +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 640, height: 360, region: PixelRect { x0: 0, y0: 0, x1: 640, y1: 360 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 12.700017, aperture: [25.4, 25.4], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 5.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/shot_lookdev.usda", "$TMP/crust_mcp_cli/resume/shot.usda"], invisible_overrides: Some(0) } +layer: $TMP/crust_mcp_cli/resume/shot.usda +layer: $DIR/shot_lookdev.usda +warning: Warning { code: MaterialFallbackDefault, kind: Skipped, count: 1, prims: ["/scene/Looks/initialShadingGroup"], message: "Material /scene/Looks/initialShadingGroup has no surface shader — using default grey OpenPBR" } +lights: 1 +light 0: dome name Some("/scene/Sky") lpe None pmf 1.0 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 5 geometries, PrimitiveBreakdown { triangles: 822, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 2 } top level, PrimitiveBreakdown { triangles: 1582, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 2 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 4.0 motion [] pieces all=10:88b22fc3345d5b05 camera=10:88b22fc3345d5b05 shadow=10:88b22fc3345d5b05 indirect=10:88b22fc3345d5b05 +geom 1: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.2 motion [] pieces all=760:c2b60a75c52c78b9 camera=760:c2b60a75c52c78b9 shadow=760:c2b60a75c52c78b9 indirect=760:c2b60a75c52c78b9 +geom 2: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=12:94a297badef437e1 camera=12:94a297badef437e1 shadow=12:94a297badef437e1 indirect=12:94a297badef437e1 +geom 3: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.25 motion [] pieces all=800:4a8c9f44d777e131 camera=800:4a8c9f44d777e131 shadow=800:4a8c9f44d777e131 indirect=800:4a8c9f44d777e131 +geom 4: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.3585339 motion [] pieces all=760:2344ecf63e12c441 camera=760:2344ecf63e12c441 shadow=760:2344ecf63e12c441 indirect=760:2344ecf63e12c441 +provenance material /scene/Looks/initialShadingGroup: MaterialOrigin { slots: [0, 1, 2, 3, 4], displaced: false } +provenance light /scene/Sky: LightOrigin { index: 0, geoms: 0..0 } +provenance geometry 0..1: /scene/pCube1 +provenance geometry 1..2: /scene/pSphere1 +provenance geometry 2..3: /scene/pCube2 +provenance geometry 3..4: /scene/pTorus1 +provenance geometry 4..5: /scene/pSphere2 +provenance mesh: MeshOrigin { geom_id: 0, slot: 0, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 1, slot: 1, baked: false, moving: false } +provenance mesh: MeshOrigin { geom_id: 2, slot: 2, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 3, slot: 3, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 4, slot: 1, baked: false, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 12343188411137242430, n_points: 8, n_indices: 20, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 1: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 17119738035130870988, n_points: 382, n_indices: 1560, n_uvs: None, smooth: false, material: 0 }), placements: 2, shared: false, displaced: false } +provenance mesh slot 2: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 1739488954094729910, n_points: 8, n_indices: 24, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 3: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 6096447469814747168, n_points: 400, n_indices: 1600, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: true }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/scene/camera1"), cameras: ["/scene/camera1"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/scene/camera1"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/shot_lookdev_usda-b26fdb3392c1eac3-1.image b/crates/crust-core/tests/data/import_baselines/shot_lookdev_usda-b26fdb3392c1eac3-1.image new file mode 100644 index 000000000..7172edbfe --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/shot_lookdev_usda-b26fdb3392c1eac3-1.image @@ -0,0 +1 @@ +640x360 16spp clamp-off 64ede904b11bab22 diff --git a/crates/crust-core/tests/data/import_baselines/shot_lookdev_usda-bc9d89b7ffc91e9b-1.digest b/crates/crust-core/tests/data/import_baselines/shot_lookdev_usda-bc9d89b7ffc91e9b-1.digest new file mode 100644 index 000000000..397a89a1f --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/shot_lookdev_usda-bc9d89b7ffc91e9b-1.digest @@ -0,0 +1,24 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: None +camera: Camera { origin: Vec3A(15.0, 3.0, 3.0), lower_left_corner: Vec3A(4.8863316, -0.044797063, 4.174048), horizontal: Vec3A(1.2295314, 0.0, -6.147657), vertical: Vec3A(-0.44830504, 3.4967792, -0.08966101), u: Vec3A(0.19611613, 0.0, -0.9805807), v: Vec3A(-0.1271232, 0.991561, -0.02542464), lens_radius: 0.05, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: None +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 640, height: 360, region: PixelRect { x0: 0, y0: 0, x1: 640, y1: 360 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: None, depth_of_field: true, motion_blur: false, layer_stack: ["$DIR/shot_lookdev.usda", "$DIR/shot.usda"], invisible_overrides: Some(0) } +layer: $DIR/shot.usda +layer: $DIR/shot_lookdev.usda +warning: Warning { code: CameraMissing, kind: Skipped, count: 1, prims: [], message: "USD stage has no UsdGeomCamera — falling back to world::get_settings camera" } +lights: 1 +light 0: area name Some("/World/key") lpe None pmf 1.0 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 2 geometries, PrimitiveBreakdown { triangles: 0, spheres: 2, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 0, spheres: 2, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:fb1e7d48790aec95 camera=1:fb1e7d48790aec95 shadow=1:fb1e7d48790aec95 indirect=1:fb1e7d48790aec95 +geom 1: material #1 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:984632b55acb5495 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=1:984632b55acb5495 +provenance light /World/key: LightOrigin { index: 0, geoms: 1..2 } +provenance geometry 0..1: /World/ball +provenance geometry 1..2: /World/key +provenance spheres: [0] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: true }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: None, cameras: [], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: None, offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/shot_lookdev_usda-bc9d89b7ffc91e9b-1.image b/crates/crust-core/tests/data/import_baselines/shot_lookdev_usda-bc9d89b7ffc91e9b-1.image new file mode 100644 index 000000000..c734c5b1d --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/shot_lookdev_usda-bc9d89b7ffc91e9b-1.image @@ -0,0 +1 @@ +640x360 16spp clamp-off a04a09c0d4b5e325 diff --git a/crates/crust-core/tests/data/import_baselines/shot_lookdev_usda-cac7cb8da11a9b99-1.digest b/crates/crust-core/tests/data/import_baselines/shot_lookdev_usda-cac7cb8da11a9b99-1.digest new file mode 100644 index 000000000..b846a9a76 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/shot_lookdev_usda-cac7cb8da11a9b99-1.digest @@ -0,0 +1,41 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/scene/camera1") +camera: Camera { origin: Vec3A(0.0074343784, 1.9913422, 4.0133057), lower_left_corner: Vec3A(-8.881443, -3.0086517, -0.98669434), horizontal: Vec3A(17.777756, 0.0, 0.0), vertical: Vec3A(0.0, 9.999988, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: Some(Vec4(0.0, 0.0, -1.0, 3.9133058)), far: Some(Vec4(0.0, 0.0, 1.0, 9995.986)), planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: None +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 640, height: 360, region: PixelRect { x0: 0, y0: 0, x1: 640, y1: 360 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 12.700017, aperture: [25.4, 25.4], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 5.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/shot_lookdev.usda", "$DIR/shot.usda"], invisible_overrides: Some(0) } +layer: $DIR/shot.usda +layer: $DIR/shot_lookdev.usda +warning: Warning { code: LightUnsupportedTextureFormat, kind: Skipped, count: 1, prims: ["/scene/Sky"], message: "DomeLight at /scene/Sky: texture:format \"angular\" is not supported (only latlong) — falling back to the uniform colour" } +warning: Warning { code: MaterialFallbackDefault, kind: Skipped, count: 1, prims: ["/scene/Looks/initialShadingGroup"], message: "Material /scene/Looks/initialShadingGroup has no surface shader — using default grey OpenPBR" } +lights: 1 +light 0: dome name Some("/scene/Sky") lpe None pmf 1.0 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 5 geometries, PrimitiveBreakdown { triangles: 822, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 2 } top level, PrimitiveBreakdown { triangles: 1582, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 2 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 4.0 motion [] pieces all=10:88b22fc3345d5b05 camera=10:88b22fc3345d5b05 shadow=10:88b22fc3345d5b05 indirect=10:88b22fc3345d5b05 +geom 1: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.2 motion [] pieces all=760:c2b60a75c52c78b9 camera=760:c2b60a75c52c78b9 shadow=760:c2b60a75c52c78b9 indirect=760:c2b60a75c52c78b9 +geom 2: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=12:94a297badef437e1 camera=12:94a297badef437e1 shadow=12:94a297badef437e1 indirect=12:94a297badef437e1 +geom 3: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.25 motion [] pieces all=800:4a8c9f44d777e131 camera=800:4a8c9f44d777e131 shadow=800:4a8c9f44d777e131 indirect=800:4a8c9f44d777e131 +geom 4: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.3585339 motion [] pieces all=760:2344ecf63e12c441 camera=760:2344ecf63e12c441 shadow=760:2344ecf63e12c441 indirect=760:2344ecf63e12c441 +provenance material /scene/Looks/initialShadingGroup: MaterialOrigin { slots: [0, 1, 2, 3, 4], displaced: false } +provenance light /scene/Sky: LightOrigin { index: 0, geoms: 0..0 } +provenance geometry 0..1: /scene/pCube1 +provenance geometry 1..2: /scene/pSphere1 +provenance geometry 2..3: /scene/pCube2 +provenance geometry 3..4: /scene/pTorus1 +provenance geometry 4..5: /scene/pSphere2 +provenance mesh: MeshOrigin { geom_id: 0, slot: 0, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 1, slot: 1, baked: false, moving: false } +provenance mesh: MeshOrigin { geom_id: 2, slot: 2, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 3, slot: 3, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 4, slot: 1, baked: false, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 12343188411137242430, n_points: 8, n_indices: 20, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 1: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 17119738035130870988, n_points: 382, n_indices: 1560, n_uvs: None, smooth: false, material: 0 }), placements: 2, shared: false, displaced: false } +provenance mesh slot 2: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 1739488954094729910, n_points: 8, n_indices: 24, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 3: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 6096447469814747168, n_points: 400, n_indices: 1600, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: true }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/scene/camera1"), cameras: ["/scene/camera1"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/scene/camera1"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/shot_lookdev_usda-cac7cb8da11a9b99-1.image b/crates/crust-core/tests/data/import_baselines/shot_lookdev_usda-cac7cb8da11a9b99-1.image new file mode 100644 index 000000000..4bf472b1a --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/shot_lookdev_usda-cac7cb8da11a9b99-1.image @@ -0,0 +1 @@ +640x360 16spp clamp-off 8a1b50f91ac38a36 diff --git a/crates/crust-core/tests/data/import_baselines/shot_lookdev_usda-e785595b364179c9-1.digest b/crates/crust-core/tests/data/import_baselines/shot_lookdev_usda-e785595b364179c9-1.digest new file mode 100644 index 000000000..0c9ca2f1c --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/shot_lookdev_usda-e785595b364179c9-1.digest @@ -0,0 +1,40 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/scene/camera1") +camera: Camera { origin: Vec3A(0.0074343784, 1.9913422, 4.0133057), lower_left_corner: Vec3A(-8.881443, -3.0086517, -0.98669434), horizontal: Vec3A(17.777756, 0.0, 0.0), vertical: Vec3A(0.0, 9.999988, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: Some(Vec4(0.0, 0.0, -1.0, 3.9133058)), far: Some(Vec4(0.0, 0.0, 1.0, 9995.986)), planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: None +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 640, height: 360, region: PixelRect { x0: 0, y0: 0, x1: 640, y1: 360 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 12.700017, aperture: [25.4, 25.4], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 5.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/shot_lookdev.usda", "$DIR/shot.usda"], invisible_overrides: Some(0) } +layer: $DIR/shot.usda +layer: $DIR/shot_lookdev.usda +warning: Warning { code: MaterialFallbackDefault, kind: Skipped, count: 1, prims: ["/scene/Looks/initialShadingGroup"], message: "Material /scene/Looks/initialShadingGroup has no surface shader — using default grey OpenPBR" } +lights: 1 +light 0: dome name Some("/scene/Sky") lpe None pmf 1.0 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 5 geometries, PrimitiveBreakdown { triangles: 822, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 2 } top level, PrimitiveBreakdown { triangles: 1582, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 2 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 4.0 motion [] pieces all=10:88b22fc3345d5b05 camera=10:88b22fc3345d5b05 shadow=10:88b22fc3345d5b05 indirect=10:88b22fc3345d5b05 +geom 1: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.2 motion [] pieces all=760:c2b60a75c52c78b9 camera=760:c2b60a75c52c78b9 shadow=760:c2b60a75c52c78b9 indirect=760:c2b60a75c52c78b9 +geom 2: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=12:94a297badef437e1 camera=12:94a297badef437e1 shadow=12:94a297badef437e1 indirect=12:94a297badef437e1 +geom 3: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.25 motion [] pieces all=800:4a8c9f44d777e131 camera=800:4a8c9f44d777e131 shadow=800:4a8c9f44d777e131 indirect=800:4a8c9f44d777e131 +geom 4: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.3585339 motion [] pieces all=760:2344ecf63e12c441 camera=760:2344ecf63e12c441 shadow=760:2344ecf63e12c441 indirect=760:2344ecf63e12c441 +provenance material /scene/Looks/initialShadingGroup: MaterialOrigin { slots: [0, 1, 2, 3, 4], displaced: false } +provenance light /scene/Sky: LightOrigin { index: 0, geoms: 0..0 } +provenance geometry 0..1: /scene/pCube1 +provenance geometry 1..2: /scene/pSphere1 +provenance geometry 2..3: /scene/pCube2 +provenance geometry 3..4: /scene/pTorus1 +provenance geometry 4..5: /scene/pSphere2 +provenance mesh: MeshOrigin { geom_id: 0, slot: 0, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 1, slot: 1, baked: false, moving: false } +provenance mesh: MeshOrigin { geom_id: 2, slot: 2, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 3, slot: 3, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 4, slot: 1, baked: false, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 12343188411137242430, n_points: 8, n_indices: 20, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 1: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 17119738035130870988, n_points: 382, n_indices: 1560, n_uvs: None, smooth: false, material: 0 }), placements: 2, shared: false, displaced: false } +provenance mesh slot 2: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 1739488954094729910, n_points: 8, n_indices: 24, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 3: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 6096447469814747168, n_points: 400, n_indices: 1600, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: true, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/scene/camera1"), cameras: ["/scene/camera1"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/scene/camera1"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/shot_lookdev_usda-e785595b364179c9-1.image b/crates/crust-core/tests/data/import_baselines/shot_lookdev_usda-e785595b364179c9-1.image new file mode 100644 index 000000000..7172edbfe --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/shot_lookdev_usda-e785595b364179c9-1.image @@ -0,0 +1 @@ +640x360 16spp clamp-off 64ede904b11bab22 diff --git a/crates/crust-core/tests/data/import_baselines/shot_lookdev_usda-e82a725344733609-1.digest b/crates/crust-core/tests/data/import_baselines/shot_lookdev_usda-e82a725344733609-1.digest new file mode 100644 index 000000000..ab2e3f78a --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/shot_lookdev_usda-e82a725344733609-1.digest @@ -0,0 +1,41 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/scene/camera1") +camera: Camera { origin: Vec3A(0.0074343784, 1.9913422, 4.0133057), lower_left_corner: Vec3A(-8.881443, -3.0086517, -0.98669434), horizontal: Vec3A(17.777756, 0.0, 0.0), vertical: Vec3A(0.0, 9.999988, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: Some(Vec4(0.0, 0.0, -1.0, 3.9133058)), far: Some(Vec4(0.0, 0.0, 1.0, 9995.986)), planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: None +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 640, height: 360, region: PixelRect { x0: 0, y0: 0, x1: 640, y1: 360 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 12.700017, aperture: [25.4, 25.4], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 5.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/shot_lookdev.usda", "$TMP/crust_mcp_cli/anchoring/shots/a/shot.usda"], invisible_overrides: Some(0) } +layer: $TMP/crust_mcp_cli/anchoring/shots/a/shot.usda +layer: $DIR/shot_lookdev.usda +warning: Warning { code: LightMapUnreadable, kind: Skipped, count: 1, prims: ["/scene/Sky"], message: "could not decode EXR $DIR/../shots/a/tex/none.exr: No such file or directory (os error 2) — the dome renders without its map" } +warning: Warning { code: MaterialFallbackDefault, kind: Skipped, count: 1, prims: ["/scene/Looks/initialShadingGroup"], message: "Material /scene/Looks/initialShadingGroup has no surface shader — using default grey OpenPBR" } +lights: 1 +light 0: dome name Some("/scene/Sky") lpe None pmf 1.0 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 5 geometries, PrimitiveBreakdown { triangles: 822, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 2 } top level, PrimitiveBreakdown { triangles: 1582, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 2 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 4.0 motion [] pieces all=10:88b22fc3345d5b05 camera=10:88b22fc3345d5b05 shadow=10:88b22fc3345d5b05 indirect=10:88b22fc3345d5b05 +geom 1: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.2 motion [] pieces all=760:c2b60a75c52c78b9 camera=760:c2b60a75c52c78b9 shadow=760:c2b60a75c52c78b9 indirect=760:c2b60a75c52c78b9 +geom 2: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=12:94a297badef437e1 camera=12:94a297badef437e1 shadow=12:94a297badef437e1 indirect=12:94a297badef437e1 +geom 3: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.25 motion [] pieces all=800:4a8c9f44d777e131 camera=800:4a8c9f44d777e131 shadow=800:4a8c9f44d777e131 indirect=800:4a8c9f44d777e131 +geom 4: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.3585339 motion [] pieces all=760:2344ecf63e12c441 camera=760:2344ecf63e12c441 shadow=760:2344ecf63e12c441 indirect=760:2344ecf63e12c441 +provenance material /scene/Looks/initialShadingGroup: MaterialOrigin { slots: [0, 1, 2, 3, 4], displaced: false } +provenance light /scene/Sky: LightOrigin { index: 0, geoms: 0..0 } +provenance geometry 0..1: /scene/pCube1 +provenance geometry 1..2: /scene/pSphere1 +provenance geometry 2..3: /scene/pCube2 +provenance geometry 3..4: /scene/pTorus1 +provenance geometry 4..5: /scene/pSphere2 +provenance mesh: MeshOrigin { geom_id: 0, slot: 0, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 1, slot: 1, baked: false, moving: false } +provenance mesh: MeshOrigin { geom_id: 2, slot: 2, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 3, slot: 3, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 4, slot: 1, baked: false, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 12343188411137242430, n_points: 8, n_indices: 20, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 1: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 17119738035130870988, n_points: 382, n_indices: 1560, n_uvs: None, smooth: false, material: 0 }), placements: 2, shared: false, displaced: false } +provenance mesh slot 2: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 1739488954094729910, n_points: 8, n_indices: 24, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 3: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 6096447469814747168, n_points: 400, n_indices: 1600, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: true }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/scene/camera1"), cameras: ["/scene/camera1"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/scene/camera1"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/shot_lookdev_usda-e82a725344733609-1.image b/crates/crust-core/tests/data/import_baselines/shot_lookdev_usda-e82a725344733609-1.image new file mode 100644 index 000000000..ba4884437 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/shot_lookdev_usda-e82a725344733609-1.image @@ -0,0 +1 @@ +640x360 16spp clamp-off 52a1a46f3a46d230 diff --git a/crates/crust-core/tests/data/import_baselines/shot_lookdev_usda-eaf3eeced61f0581-1.digest b/crates/crust-core/tests/data/import_baselines/shot_lookdev_usda-eaf3eeced61f0581-1.digest new file mode 100644 index 000000000..ce95b3ace --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/shot_lookdev_usda-eaf3eeced61f0581-1.digest @@ -0,0 +1,40 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/scene/camera1") +camera: Camera { origin: Vec3A(0.0074343784, 1.9913422, 4.0133057), lower_left_corner: Vec3A(-8.881443, -3.0086517, -0.98669434), horizontal: Vec3A(17.777756, 0.0, 0.0), vertical: Vec3A(0.0, 9.999988, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: Some(Vec4(0.0, 0.0, -1.0, 3.9133058)), far: Some(Vec4(0.0, 0.0, 1.0, 9995.986)), planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: None +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 640, height: 360, region: PixelRect { x0: 0, y0: 0, x1: 640, y1: 360 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 12.700017, aperture: [25.4, 25.4], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 5.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/shot_lookdev.usda", "$TMP/crust_mcp_cli/resume/shot.usda"], invisible_overrides: Some(0) } +layer: $TMP/crust_mcp_cli/resume/shot.usda +layer: $DIR/shot_lookdev.usda +warning: Warning { code: MaterialFallbackDefault, kind: Skipped, count: 1, prims: ["/scene/Looks/initialShadingGroup"], message: "Material /scene/Looks/initialShadingGroup has no surface shader — using default grey OpenPBR" } +lights: 1 +light 0: dome name Some("/scene/Sky") lpe None pmf 1.0 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 5 geometries, PrimitiveBreakdown { triangles: 822, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 2 } top level, PrimitiveBreakdown { triangles: 1582, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 2 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 4.0 motion [] pieces all=10:88b22fc3345d5b05 camera=10:88b22fc3345d5b05 shadow=10:88b22fc3345d5b05 indirect=10:88b22fc3345d5b05 +geom 1: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.2 motion [] pieces all=760:c2b60a75c52c78b9 camera=760:c2b60a75c52c78b9 shadow=760:c2b60a75c52c78b9 indirect=760:c2b60a75c52c78b9 +geom 2: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=12:94a297badef437e1 camera=12:94a297badef437e1 shadow=12:94a297badef437e1 indirect=12:94a297badef437e1 +geom 3: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.25 motion [] pieces all=800:4a8c9f44d777e131 camera=800:4a8c9f44d777e131 shadow=800:4a8c9f44d777e131 indirect=800:4a8c9f44d777e131 +geom 4: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.3585339 motion [] pieces all=760:2344ecf63e12c441 camera=760:2344ecf63e12c441 shadow=760:2344ecf63e12c441 indirect=760:2344ecf63e12c441 +provenance material /scene/Looks/initialShadingGroup: MaterialOrigin { slots: [0, 1, 2, 3, 4], displaced: false } +provenance light /scene/Sky: LightOrigin { index: 0, geoms: 0..0 } +provenance geometry 0..1: /scene/pCube1 +provenance geometry 1..2: /scene/pSphere1 +provenance geometry 2..3: /scene/pCube2 +provenance geometry 3..4: /scene/pTorus1 +provenance geometry 4..5: /scene/pSphere2 +provenance mesh: MeshOrigin { geom_id: 0, slot: 0, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 1, slot: 1, baked: false, moving: false } +provenance mesh: MeshOrigin { geom_id: 2, slot: 2, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 3, slot: 3, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 4, slot: 1, baked: false, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 12343188411137242430, n_points: 8, n_indices: 20, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 1: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 17119738035130870988, n_points: 382, n_indices: 1560, n_uvs: None, smooth: false, material: 0 }), placements: 2, shared: false, displaced: false } +provenance mesh slot 2: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 1739488954094729910, n_points: 8, n_indices: 24, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 3: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 6096447469814747168, n_points: 400, n_indices: 1600, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: true }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/scene/camera1"), cameras: ["/scene/camera1"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/scene/camera1"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/shot_lookdev_usda-eaf3eeced61f0581-1.image b/crates/crust-core/tests/data/import_baselines/shot_lookdev_usda-eaf3eeced61f0581-1.image new file mode 100644 index 000000000..0f9205e21 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/shot_lookdev_usda-eaf3eeced61f0581-1.image @@ -0,0 +1 @@ +640x360 16spp clamp-off c0a8018fae7df9ad diff --git a/crates/crust-core/tests/data/import_baselines/shot_lookdev_usda-f697274eb781e181-1.digest b/crates/crust-core/tests/data/import_baselines/shot_lookdev_usda-f697274eb781e181-1.digest new file mode 100644 index 000000000..15a71ecaf --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/shot_lookdev_usda-f697274eb781e181-1.digest @@ -0,0 +1,40 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/scene/camera1") +camera: Camera { origin: Vec3A(0.0074343784, 1.9913422, 4.0133057), lower_left_corner: Vec3A(-8.881443, -3.0086517, -0.98669434), horizontal: Vec3A(17.777756, 0.0, 0.0), vertical: Vec3A(0.0, 9.999988, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: Some(Vec4(0.0, 0.0, -1.0, 3.9133058)), far: Some(Vec4(0.0, 0.0, 1.0, 9995.986)), planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: None +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 640, height: 360, region: PixelRect { x0: 0, y0: 0, x1: 640, y1: 360 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 12.700017, aperture: [25.4, 25.4], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 5.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/shot_lookdev.usda", "$DIR/shot.usda"], invisible_overrides: Some(0) } +layer: $DIR/shot.usda +layer: $DIR/shot_lookdev.usda +warning: Warning { code: MaterialFallbackDefault, kind: Skipped, count: 1, prims: ["/scene/Looks/initialShadingGroup"], message: "Material /scene/Looks/initialShadingGroup has no surface shader — using default grey OpenPBR" } +lights: 1 +light 0: dome name Some("/scene/Sky") lpe None pmf 1.0 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 5 geometries, PrimitiveBreakdown { triangles: 822, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 2 } top level, PrimitiveBreakdown { triangles: 1582, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 2 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 4.0 motion [] pieces all=10:88b22fc3345d5b05 camera=10:88b22fc3345d5b05 shadow=10:88b22fc3345d5b05 indirect=10:88b22fc3345d5b05 +geom 1: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.2 motion [] pieces all=760:c2b60a75c52c78b9 camera=760:c2b60a75c52c78b9 shadow=760:c2b60a75c52c78b9 indirect=760:c2b60a75c52c78b9 +geom 2: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=12:94a297badef437e1 camera=12:94a297badef437e1 shadow=12:94a297badef437e1 indirect=12:94a297badef437e1 +geom 3: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.25 motion [] pieces all=800:4a8c9f44d777e131 camera=800:4a8c9f44d777e131 shadow=800:4a8c9f44d777e131 indirect=800:4a8c9f44d777e131 +geom 4: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.3585339 motion [] pieces all=760:2344ecf63e12c441 camera=760:2344ecf63e12c441 shadow=760:2344ecf63e12c441 indirect=760:2344ecf63e12c441 +provenance material /scene/Looks/initialShadingGroup: MaterialOrigin { slots: [0, 1, 2, 3, 4], displaced: false } +provenance light /scene/Sky: LightOrigin { index: 0, geoms: 0..0 } +provenance geometry 0..1: /scene/pCube1 +provenance geometry 1..2: /scene/pSphere1 +provenance geometry 2..3: /scene/pCube2 +provenance geometry 3..4: /scene/pTorus1 +provenance geometry 4..5: /scene/pSphere2 +provenance mesh: MeshOrigin { geom_id: 0, slot: 0, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 1, slot: 1, baked: false, moving: false } +provenance mesh: MeshOrigin { geom_id: 2, slot: 2, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 3, slot: 3, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 4, slot: 1, baked: false, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 12343188411137242430, n_points: 8, n_indices: 20, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 1: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 17119738035130870988, n_points: 382, n_indices: 1560, n_uvs: None, smooth: false, material: 0 }), placements: 2, shared: false, displaced: false } +provenance mesh slot 2: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 1739488954094729910, n_points: 8, n_indices: 24, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 3: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 6096447469814747168, n_points: 400, n_indices: 1600, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: true }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/scene/camera1"), cameras: ["/scene/camera1"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/scene/camera1"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/shot_lookdev_usda-f697274eb781e181-1.image b/crates/crust-core/tests/data/import_baselines/shot_lookdev_usda-f697274eb781e181-1.image new file mode 100644 index 000000000..de6bcea85 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/shot_lookdev_usda-f697274eb781e181-1.image @@ -0,0 +1 @@ +640x360 16spp clamp-off a1d9e9b76331e32f diff --git a/crates/crust-core/tests/data/import_baselines/shot_usda-bc277892832ac542-1.digest b/crates/crust-core/tests/data/import_baselines/shot_usda-bc277892832ac542-1.digest new file mode 100644 index 000000000..0e7380224 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/shot_usda-bc277892832ac542-1.digest @@ -0,0 +1,31 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: None +camera: Camera { origin: Vec3A(15.0, 3.0, 3.0), lower_left_corner: Vec3A(4.8863316, -0.044797063, 4.174048), horizontal: Vec3A(1.2295314, 0.0, -6.147657), vertical: Vec3A(-0.44830504, 3.4967792, -0.08966101), u: Vec3A(0.19611613, 0.0, -0.9805807), v: Vec3A(-0.1271232, 0.991561, -0.02542464), lens_radius: 0.05, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: None +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 640, height: 360, region: PixelRect { x0: 0, y0: 0, x1: 640, y1: 360 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: None, depth_of_field: true, motion_blur: false, layer_stack: ["$DIR/shot.usda"], invisible_overrides: Some(0) } +layer: $DIR/asset.usda +layer: $DIR/shot.usda +warning: Warning { code: CameraMissing, kind: Skipped, count: 1, prims: [], message: "USD stage has no UsdGeomCamera — falling back to world::get_settings camera" } +lights: 0 +volumes: 0 +world: 4 geometries, PrimitiveBreakdown { triangles: 0, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 4 } top level, PrimitiveBreakdown { triangles: 2, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 4 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.8171206 motion [] pieces all=2:51d9a9efe33ff102 camera=2:51d9a9efe33ff102 shadow=2:51d9a9efe33ff102 indirect=2:51d9a9efe33ff102 +geom 1: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.8171206 motion [] pieces all=2:902cbcd96e2107e1 camera=2:902cbcd96e2107e1 shadow=2:902cbcd96e2107e1 indirect=2:902cbcd96e2107e1 +geom 2: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:8b0b9cb6f9c627e5 camera=2:8b0b9cb6f9c627e5 shadow=2:8b0b9cb6f9c627e5 indirect=2:8b0b9cb6f9c627e5 +geom 3: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.8171206 motion [] pieces all=2:469bb250cbd951b5 camera=2:469bb250cbd951b5 shadow=2:469bb250cbd951b5 indirect=2:469bb250cbd951b5 +provenance geometry 0..1: /World/rock/geo +provenance geometry 1..2: /World/pivoted/geo +provenance geometry 2..3: /World/reset/geo +provenance geometry 3..4: /World/scope/geo +provenance mesh: MeshOrigin { geom_id: 0, slot: 0, baked: false, moving: false } +provenance mesh: MeshOrigin { geom_id: 1, slot: 0, baked: false, moving: false } +provenance mesh: MeshOrigin { geom_id: 2, slot: 0, baked: false, moving: false } +provenance mesh: MeshOrigin { geom_id: 3, slot: 0, baked: false, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 16322876491246643540, n_points: 4, n_indices: 4, n_uvs: None, smooth: true, material: 0 }), placements: 4, shared: false, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: None, cameras: [], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: None, offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/shot_usda-bc277892832ac542-1.image b/crates/crust-core/tests/data/import_baselines/shot_usda-bc277892832ac542-1.image new file mode 100644 index 000000000..c734c5b1d --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/shot_usda-bc277892832ac542-1.image @@ -0,0 +1 @@ +640x360 16spp clamp-off a04a09c0d4b5e325 diff --git a/crates/crust-core/tests/data/import_baselines/sibling_usda-ec40564c6bb9a56d-1.digest b/crates/crust-core/tests/data/import_baselines/sibling_usda-ec40564c6bb9a56d-1.digest new file mode 100644 index 000000000..19e38c2ca --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/sibling_usda-ec40564c6bb9a56d-1.digest @@ -0,0 +1,36 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: None +camera: Camera { origin: Vec3A(15.0, 3.0, 3.0), lower_left_corner: Vec3A(4.8863316, -0.044797063, 4.174048), horizontal: Vec3A(1.2295314, 0.0, -6.147657), vertical: Vec3A(-0.44830504, 3.4967792, -0.08966101), u: Vec3A(0.19611613, 0.0, -0.9805807), v: Vec3A(-0.1271232, 0.991561, -0.02542464), lens_radius: 0.05, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: None +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 640, height: 360, region: PixelRect { x0: 0, y0: 0, x1: 640, y1: 360 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: None, depth_of_field: true, motion_blur: false, layer_stack: ["$DIR/sibling.usda"], invisible_overrides: Some(0) } +layer: $DIR/sibling.usda +warning: Warning { code: MaterialFallbackDefault, kind: Skipped, count: 1, prims: ["/Looks/Missing"], message: "Material at /Looks/Missing not resolvable — using default grey OpenPBR" } +warning: Warning { code: CameraMissing, kind: Skipped, count: 1, prims: [], message: "USD stage has no UsdGeomCamera — falling back to world::get_settings camera" } +lights: 0 +volumes: 0 +world: 4 geometries, PrimitiveBreakdown { triangles: 8, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 8, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:658935472ec9d838 camera=2:658935472ec9d838 shadow=2:658935472ec9d838 indirect=2:658935472ec9d838 +geom 1: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:71682785a2d90a85 camera=2:71682785a2d90a85 shadow=2:71682785a2d90a85 indirect=2:71682785a2d90a85 +geom 2: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:e52d9a39978026c5 camera=2:e52d9a39978026c5 shadow=2:e52d9a39978026c5 indirect=2:e52d9a39978026c5 +geom 3: material #1 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:7f0030950a4845b8 camera=2:7f0030950a4845b8 shadow=2:7f0030950a4845b8 indirect=2:7f0030950a4845b8 +provenance material /Looks/Missing: MaterialOrigin { slots: [3], displaced: false } +provenance material /Looks/Red: MaterialOrigin { slots: [0, 1, 2], displaced: false } +provenance geometry 0..1: /A/Quad +provenance geometry 1..2: /B/Quad +provenance geometry 2..3: /C/Quad +provenance geometry 3..4: /D/Quad +provenance mesh: MeshOrigin { geom_id: 0, slot: 0, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 1, slot: 1, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 2, slot: 2, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 3, slot: 3, baked: true, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 5062424276489054560, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 1: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 9056688765093257811, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 2: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 204846636954257726, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 3: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 10907505002769619754, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 1 }), placements: 1, shared: false, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: None, cameras: [], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: None, offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/sibling_usda-ec40564c6bb9a56d-1.image b/crates/crust-core/tests/data/import_baselines/sibling_usda-ec40564c6bb9a56d-1.image new file mode 100644 index 000000000..c734c5b1d --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/sibling_usda-ec40564c6bb9a56d-1.image @@ -0,0 +1 @@ +640x360 16spp clamp-off a04a09c0d4b5e325 diff --git a/crates/crust-core/tests/data/import_baselines/single_usda-472ac6d4e19ff814-1.digest b/crates/crust-core/tests/data/import_baselines/single_usda-472ac6d4e19ff814-1.digest new file mode 100644 index 000000000..ab92b4568 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/single_usda-472ac6d4e19ff814-1.digest @@ -0,0 +1,22 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/W/Cam") +camera: Camera { origin: Vec3A(0.0, 0.0, 0.0), lower_left_corner: Vec3A(-2.0955, -1.1787187, -10.0), horizontal: Vec3A(4.191, 0.0, 0.0), vertical: Vec3A(0.0, 2.3574374, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: Some("/W/Render/settings") +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 640, height: 360, region: PixelRect { x0: 0, y0: 0, x1: 640, y1: 360 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 50.0, aperture: [20.955, 11.787188], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 10.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/single.usda"], invisible_overrides: Some(0) } +layer: $DIR/single.usda +lights: 0 +volumes: 0 +world: 2 geometries, PrimitiveBreakdown { triangles: 0, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 2 } top level, PrimitiveBreakdown { triangles: 1200, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 2 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=432:acd7359f035cf995 camera=432:acd7359f035cf995 shadow=432:acd7359f035cf995 indirect=432:acd7359f035cf995 +geom 1: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=768:bb9aeaae01563c51 camera=768:bb9aeaae01563c51 shadow=768:bb9aeaae01563c51 indirect=768:bb9aeaae01563c51 +provenance geometry 0..1: /B +provenance geometry 1..2: /A +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 11483454623663573887, n_points: 218, n_indices: 1296, n_uvs: None, smooth: true, material: 0 }), placements: 0, shared: true, displaced: false } +provenance mesh slot 1: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 13487480004083563611, n_points: 386, n_indices: 2304, n_uvs: None, smooth: true, material: 0 }), placements: 0, shared: true, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/W/Render/settings"), subdiv_level: 0, adaptive: Some(ScreenKey([0, 0, 0, 1153360542, 0, 0, 0, 3212836864, 0, 3193345094, 1065353216, 0, 3193345094, 0, 3212836864, 3186714319, 0, 1065353216, 3186714319, 0, 0, 3212836864, 1073741824, 3])), domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/W/Cam"), cameras: ["/W/Cam"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/W/Cam"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/single_usda-472ac6d4e19ff814-1.image b/crates/crust-core/tests/data/import_baselines/single_usda-472ac6d4e19ff814-1.image new file mode 100644 index 000000000..c734c5b1d --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/single_usda-472ac6d4e19ff814-1.image @@ -0,0 +1 @@ +640x360 16spp clamp-off a04a09c0d4b5e325 diff --git a/crates/crust-core/tests/data/import_baselines/singular_usda-fb82aadc0c0d65da-1.digest b/crates/crust-core/tests/data/import_baselines/singular_usda-fb82aadc0c0d65da-1.digest new file mode 100644 index 000000000..5569b031e --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/singular_usda-fb82aadc0c0d65da-1.digest @@ -0,0 +1,22 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: None +camera: Camera { origin: Vec3A(15.0, 3.0, 3.0), lower_left_corner: Vec3A(4.8863316, -0.044797063, 4.174048), horizontal: Vec3A(1.2295314, 0.0, -6.147657), vertical: Vec3A(-0.44830504, 3.4967792, -0.08966101), u: Vec3A(0.19611613, 0.0, -0.9805807), v: Vec3A(-0.1271232, 0.991561, -0.02542464), lens_radius: 0.05, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: None +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 640, height: 360, region: PixelRect { x0: 0, y0: 0, x1: 640, y1: 360 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: None, depth_of_field: true, motion_blur: false, layer_stack: ["$DIR/singular.usda"], invisible_overrides: Some(0) } +layer: $DIR/singular.usda +warning: Warning { code: XformUncomposable, kind: Refused, count: 1, prims: ["/World/Bad"], message: "/World/Bad: could not compose its xformOp stack (xformOp `!invert!xformOp:transform` matrix is singular and cannot be inverted) — its local transform is identity" } +warning: Warning { code: CameraMissing, kind: Skipped, count: 1, prims: [], message: "USD stage has no UsdGeomCamera — falling back to world::get_settings camera" } +lights: 0 +volumes: 0 +world: 1 geometries, PrimitiveBreakdown { triangles: 1, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 1, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:1d3535e07c06fa35 camera=1:1d3535e07c06fa35 shadow=1:1d3535e07c06fa35 indirect=1:1d3535e07c06fa35 +provenance geometry 0..1: /World/Bad/M +provenance mesh: MeshOrigin { geom_id: 0, slot: 0, baked: true, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 819217792897349932, n_points: 3, n_indices: 3, n_uvs: None, smooth: true, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: None, cameras: [], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: None, offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/singular_usda-fb82aadc0c0d65da-1.image b/crates/crust-core/tests/data/import_baselines/singular_usda-fb82aadc0c0d65da-1.image new file mode 100644 index 000000000..c734c5b1d --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/singular_usda-fb82aadc0c0d65da-1.image @@ -0,0 +1 @@ +640x360 16spp clamp-off a04a09c0d4b5e325 diff --git a/crates/crust-core/tests/data/import_baselines/smoke_grid_usda-64f278d7126815e0-1.digest b/crates/crust-core/tests/data/import_baselines/smoke_grid_usda-64f278d7126815e0-1.digest new file mode 100644 index 000000000..3131a9d2c --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/smoke_grid_usda-64f278d7126815e0-1.digest @@ -0,0 +1,20 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: None +camera: Camera { origin: Vec3A(15.0, 3.0, 3.0), lower_left_corner: Vec3A(4.8863316, -0.044797063, 4.174048), horizontal: Vec3A(1.2295314, 0.0, -6.147657), vertical: Vec3A(-0.44830504, 3.4967792, -0.08966101), u: Vec3A(0.19611613, 0.0, -0.9805807), v: Vec3A(-0.1271232, 0.991561, -0.02542464), lens_radius: 0.05, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: None +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 640, height: 360, region: PixelRect { x0: 0, y0: 0, x1: 640, y1: 360 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: None, depth_of_field: true, motion_blur: false, layer_stack: ["$DIR/smoke_grid.usda"], invisible_overrides: Some(0) } +layer: $DIR/smoke_grid.usda +warning: Warning { code: VolumeInvalidGrid, kind: Skipped, count: 1, prims: ["/World/BadGrid"], message: "Volume at /World/BadGrid: gridDims 2x2x2 does not match gridData length 3 — skipped" } +warning: Warning { code: CameraMissing, kind: Skipped, count: 1, prims: [], message: "USD stage has no UsdGeomCamera — falling back to world::get_settings camera" } +lights: 0 +volumes: 2 +volume 0: sigma_s Vec3A(0.5, 0.5, 0.5) sigma_a Vec3A(0.0, 0.0, 0.0) g 0.0 emission Vec3A(0.0, 0.0, 0.0) mask RayMask(4294967295) class 65535 homogeneous false +volume 1: sigma_s Vec3A(0.5, 0.5, 0.5) sigma_a Vec3A(0.0, 0.0, 0.0) g 0.0 emission Vec3A(0.0, 0.0, 0.0) mask RayMask(4294967295) class 65535 homogeneous false +world: 0 geometries, PrimitiveBreakdown { triangles: 0, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 0, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +provenance spheres: [] +provenance volumes: ["/World/Grid", "/World/Smoke"] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: None, cameras: [], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: None, offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/smoke_grid_usda-64f278d7126815e0-1.image b/crates/crust-core/tests/data/import_baselines/smoke_grid_usda-64f278d7126815e0-1.image new file mode 100644 index 000000000..c734c5b1d --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/smoke_grid_usda-64f278d7126815e0-1.image @@ -0,0 +1 @@ +640x360 16spp clamp-off a04a09c0d4b5e325 diff --git a/crates/crust-core/tests/data/import_baselines/smoke_usda-8b219b9873531af2-1.digest b/crates/crust-core/tests/data/import_baselines/smoke_usda-8b219b9873531af2-1.digest new file mode 100644 index 000000000..7cba161dd --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/smoke_usda-8b219b9873531af2-1.digest @@ -0,0 +1,27 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/World/Cam") +camera: Camera { origin: Vec3A(0.0, 2.0, 8.5), lower_left_corner: Vec3A(-5.6632595, -1.1855836, -1.5), horizontal: Vec3A(11.326519, 0.0, 0.0), vertical: Vec3A(0.0, 6.371167, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: Some("/Render/settings") +settings: RenderSettings { samples_per_pixel: 64, max_depth: 16, width: 320, height: 180, region: PixelRect { x0: 0, y0: 0, x1: 320, y1: 180 }, min_samples_per_pixel: 16, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 24.0, aperture: [20.955, 15.2908], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 10.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/smoke.usda"], invisible_overrides: Some(0) } +layer: $DIR/smoke.usda +lights: 1 +light 0: area name Some("/World/CeilingLight") lpe None pmf 1.0 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 3 +volume 0: sigma_s Vec3A(4.2, 4.2, 4.2) sigma_a Vec3A(0.3, 0.3, 0.3) g 0.0 emission Vec3A(0.0, 0.0, 0.0) mask RayMask(4294967295) class 65535 homogeneous false +volume 1: sigma_s Vec3A(0.2, 0.2, 0.2) sigma_a Vec3A(2.4, 1.4, 0.6) g 0.0 emission Vec3A(6.0, 2.2, 0.5) mask RayMask(4294967295) class 65535 homogeneous true +volume 2: sigma_s Vec3A(9.6, 9.6, 9.6) sigma_a Vec3A(0.96, 0.96, 0.96) g 0.2 emission Vec3A(0.0, 0.0, 0.0) mask RayMask(4294967295) class 65535 homogeneous false +world: 2 geometries, PrimitiveBreakdown { triangles: 12, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 12, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +geom 0: material #0 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:147964f7c513cf55 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=2:147964f7c513cf55 +geom 1: material #1 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=10:5e739a86b9f39f85 camera=10:5e739a86b9f39f85 shadow=10:5e739a86b9f39f85 indirect=10:5e739a86b9f39f85 +provenance light /World/CeilingLight: LightOrigin { index: 0, geoms: 0..1 } +provenance geometry 0..1: /World/CeilingLight +provenance geometry 1..2: /World/Room +provenance mesh: MeshOrigin { geom_id: 1, slot: 0, baked: true, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 18131637559251484386, n_points: 20, n_indices: 20, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [] +provenance volumes: ["/World/GridPuff", "/World/Ember", "/World/Smoke"] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: true, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/World/Cam"), cameras: ["/World/Cam"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/World/Cam"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/smoke_usda-8b219b9873531af2-1.image b/crates/crust-core/tests/data/import_baselines/smoke_usda-8b219b9873531af2-1.image new file mode 100644 index 000000000..2424d03fe --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/smoke_usda-8b219b9873531af2-1.image @@ -0,0 +1 @@ +320x180 16spp clamp-off b56710251f2e6466 diff --git a/crates/crust-core/tests/data/import_baselines/smoke_usda-c485b4550b7ac78b-1.digest b/crates/crust-core/tests/data/import_baselines/smoke_usda-c485b4550b7ac78b-1.digest new file mode 100644 index 000000000..175f971cf --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/smoke_usda-c485b4550b7ac78b-1.digest @@ -0,0 +1,27 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/World/Cam") +camera: Camera { origin: Vec3A(0.0, 2.0, 8.5), lower_left_corner: Vec3A(-5.6632595, -1.1855836, -1.5), horizontal: Vec3A(11.326519, 0.0, 0.0), vertical: Vec3A(0.0, 6.371167, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: Some("/Render/settings") +settings: RenderSettings { samples_per_pixel: 64, max_depth: 16, width: 320, height: 180, region: PixelRect { x0: 0, y0: 0, x1: 320, y1: 180 }, min_samples_per_pixel: 16, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 24.0, aperture: [20.955, 15.2908], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 10.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/smoke.usda"], invisible_overrides: Some(0) } +layer: $DIR/smoke.usda +lights: 1 +light 0: area name Some("/World/CeilingLight") lpe None pmf 1.0 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 3 +volume 0: sigma_s Vec3A(4.2, 4.2, 4.2) sigma_a Vec3A(0.3, 0.3, 0.3) g 0.0 emission Vec3A(0.0, 0.0, 0.0) mask RayMask(4294967295) class 65535 homogeneous false +volume 1: sigma_s Vec3A(0.2, 0.2, 0.2) sigma_a Vec3A(2.4, 1.4, 0.6) g 0.0 emission Vec3A(6.0, 2.2, 0.5) mask RayMask(4294967295) class 65535 homogeneous true +volume 2: sigma_s Vec3A(9.6, 9.6, 9.6) sigma_a Vec3A(0.96, 0.96, 0.96) g 0.2 emission Vec3A(0.0, 0.0, 0.0) mask RayMask(4294967295) class 65535 homogeneous false +world: 2 geometries, PrimitiveBreakdown { triangles: 12, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 12, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +geom 0: material #0 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:147964f7c513cf55 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=2:147964f7c513cf55 +geom 1: material #1 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=10:5e739a86b9f39f85 camera=10:5e739a86b9f39f85 shadow=10:5e739a86b9f39f85 indirect=10:5e739a86b9f39f85 +provenance light /World/CeilingLight: LightOrigin { index: 0, geoms: 0..1 } +provenance geometry 0..1: /World/CeilingLight +provenance geometry 1..2: /World/Room +provenance mesh: MeshOrigin { geom_id: 1, slot: 0, baked: true, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 18131637559251484386, n_points: 20, n_indices: 20, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [] +provenance volumes: ["/World/GridPuff", "/World/Ember", "/World/Smoke"] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/World/Cam"), cameras: ["/World/Cam"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/World/Cam"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/smoke_usda-c485b4550b7ac78b-1.image b/crates/crust-core/tests/data/import_baselines/smoke_usda-c485b4550b7ac78b-1.image new file mode 100644 index 000000000..2424d03fe --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/smoke_usda-c485b4550b7ac78b-1.image @@ -0,0 +1 @@ +320x180 16spp clamp-off b56710251f2e6466 diff --git a/crates/crust-core/tests/data/import_baselines/smoke_usda-e1b03a141b55e173-1.digest b/crates/crust-core/tests/data/import_baselines/smoke_usda-e1b03a141b55e173-1.digest new file mode 100644 index 000000000..175f971cf --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/smoke_usda-e1b03a141b55e173-1.digest @@ -0,0 +1,27 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/World/Cam") +camera: Camera { origin: Vec3A(0.0, 2.0, 8.5), lower_left_corner: Vec3A(-5.6632595, -1.1855836, -1.5), horizontal: Vec3A(11.326519, 0.0, 0.0), vertical: Vec3A(0.0, 6.371167, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: Some("/Render/settings") +settings: RenderSettings { samples_per_pixel: 64, max_depth: 16, width: 320, height: 180, region: PixelRect { x0: 0, y0: 0, x1: 320, y1: 180 }, min_samples_per_pixel: 16, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 24.0, aperture: [20.955, 15.2908], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 10.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/smoke.usda"], invisible_overrides: Some(0) } +layer: $DIR/smoke.usda +lights: 1 +light 0: area name Some("/World/CeilingLight") lpe None pmf 1.0 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 3 +volume 0: sigma_s Vec3A(4.2, 4.2, 4.2) sigma_a Vec3A(0.3, 0.3, 0.3) g 0.0 emission Vec3A(0.0, 0.0, 0.0) mask RayMask(4294967295) class 65535 homogeneous false +volume 1: sigma_s Vec3A(0.2, 0.2, 0.2) sigma_a Vec3A(2.4, 1.4, 0.6) g 0.0 emission Vec3A(6.0, 2.2, 0.5) mask RayMask(4294967295) class 65535 homogeneous true +volume 2: sigma_s Vec3A(9.6, 9.6, 9.6) sigma_a Vec3A(0.96, 0.96, 0.96) g 0.2 emission Vec3A(0.0, 0.0, 0.0) mask RayMask(4294967295) class 65535 homogeneous false +world: 2 geometries, PrimitiveBreakdown { triangles: 12, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 12, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +geom 0: material #0 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:147964f7c513cf55 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=2:147964f7c513cf55 +geom 1: material #1 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=10:5e739a86b9f39f85 camera=10:5e739a86b9f39f85 shadow=10:5e739a86b9f39f85 indirect=10:5e739a86b9f39f85 +provenance light /World/CeilingLight: LightOrigin { index: 0, geoms: 0..1 } +provenance geometry 0..1: /World/CeilingLight +provenance geometry 1..2: /World/Room +provenance mesh: MeshOrigin { geom_id: 1, slot: 0, baked: true, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 18131637559251484386, n_points: 20, n_indices: 20, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [] +provenance volumes: ["/World/GridPuff", "/World/Ember", "/World/Smoke"] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/World/Cam"), cameras: ["/World/Cam"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/World/Cam"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/smoke_usda-e1b03a141b55e173-1.image b/crates/crust-core/tests/data/import_baselines/smoke_usda-e1b03a141b55e173-1.image new file mode 100644 index 000000000..2424d03fe --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/smoke_usda-e1b03a141b55e173-1.image @@ -0,0 +1 @@ +320x180 16spp clamp-off b56710251f2e6466 diff --git a/crates/crust-core/tests/data/import_baselines/smoke_usda-e1b03a141b55e173-2.digest b/crates/crust-core/tests/data/import_baselines/smoke_usda-e1b03a141b55e173-2.digest new file mode 100644 index 000000000..175f971cf --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/smoke_usda-e1b03a141b55e173-2.digest @@ -0,0 +1,27 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/World/Cam") +camera: Camera { origin: Vec3A(0.0, 2.0, 8.5), lower_left_corner: Vec3A(-5.6632595, -1.1855836, -1.5), horizontal: Vec3A(11.326519, 0.0, 0.0), vertical: Vec3A(0.0, 6.371167, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: Some("/Render/settings") +settings: RenderSettings { samples_per_pixel: 64, max_depth: 16, width: 320, height: 180, region: PixelRect { x0: 0, y0: 0, x1: 320, y1: 180 }, min_samples_per_pixel: 16, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 24.0, aperture: [20.955, 15.2908], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 10.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/smoke.usda"], invisible_overrides: Some(0) } +layer: $DIR/smoke.usda +lights: 1 +light 0: area name Some("/World/CeilingLight") lpe None pmf 1.0 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 3 +volume 0: sigma_s Vec3A(4.2, 4.2, 4.2) sigma_a Vec3A(0.3, 0.3, 0.3) g 0.0 emission Vec3A(0.0, 0.0, 0.0) mask RayMask(4294967295) class 65535 homogeneous false +volume 1: sigma_s Vec3A(0.2, 0.2, 0.2) sigma_a Vec3A(2.4, 1.4, 0.6) g 0.0 emission Vec3A(6.0, 2.2, 0.5) mask RayMask(4294967295) class 65535 homogeneous true +volume 2: sigma_s Vec3A(9.6, 9.6, 9.6) sigma_a Vec3A(0.96, 0.96, 0.96) g 0.2 emission Vec3A(0.0, 0.0, 0.0) mask RayMask(4294967295) class 65535 homogeneous false +world: 2 geometries, PrimitiveBreakdown { triangles: 12, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 12, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +geom 0: material #0 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:147964f7c513cf55 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=2:147964f7c513cf55 +geom 1: material #1 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=10:5e739a86b9f39f85 camera=10:5e739a86b9f39f85 shadow=10:5e739a86b9f39f85 indirect=10:5e739a86b9f39f85 +provenance light /World/CeilingLight: LightOrigin { index: 0, geoms: 0..1 } +provenance geometry 0..1: /World/CeilingLight +provenance geometry 1..2: /World/Room +provenance mesh: MeshOrigin { geom_id: 1, slot: 0, baked: true, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 18131637559251484386, n_points: 20, n_indices: 20, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [] +provenance volumes: ["/World/GridPuff", "/World/Ember", "/World/Smoke"] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/World/Cam"), cameras: ["/World/Cam"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/World/Cam"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/smoke_usda-e1b03a141b55e173-2.image b/crates/crust-core/tests/data/import_baselines/smoke_usda-e1b03a141b55e173-2.image new file mode 100644 index 000000000..2424d03fe --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/smoke_usda-e1b03a141b55e173-2.image @@ -0,0 +1 @@ +320x180 16spp clamp-off b56710251f2e6466 diff --git a/crates/crust-core/tests/data/import_baselines/snapshot_usda-48d0c43b60eb99bd-1.digest b/crates/crust-core/tests/data/import_baselines/snapshot_usda-48d0c43b60eb99bd-1.digest new file mode 100644 index 000000000..0762e8abb --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/snapshot_usda-48d0c43b60eb99bd-1.digest @@ -0,0 +1,26 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/World/cam") +camera: Camera { origin: Vec3A(0.0, 0.0, 0.0), lower_left_corner: Vec3A(-5.0, -3.75, -10.0), horizontal: Vec3A(10.0, 0.0, 0.0), vertical: Vec3A(0.0, 7.5, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: Some("/Render/settings") +settings: RenderSettings { samples_per_pixel: 16, max_depth: 2, width: 32, height: 24, region: PixelRect { x0: 0, y0: 0, x1: 32, y1: 24 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [AovProduct { prim_path: "/Render/p", name: "p.exr", vars: [AovVar { prim_path: "/Render/C", name: "C", channel_prefix: None, source: Color, components: 3, precision: Float, accumulation: Filtered, clear: 0.0, expression: None, raw: false, variance: false }, AovVar { prim_path: "/Render/matte", name: "matte", channel_prefix: None, source: Primvar(PrimvarSource { index: 0, components: 1, role: Float }), components: 1, precision: Float, accumulation: Filtered, clear: 0.0, expression: None, raw: false, variance: false }, AovVar { prim_path: "/Render/depth", name: "depth", channel_prefix: None, source: Depth, components: 1, precision: Float, accumulation: Closest, clear: inf, expression: None, raw: false, variance: false }, AovVar { prim_path: "/Render/depth_filtered", name: "depth_filtered", channel_prefix: None, source: Depth, components: 1, precision: Float, accumulation: Filtered, clear: inf, expression: None, raw: false, variance: false }, AovVar { prim_path: "/Render/variance", name: "variance", channel_prefix: None, source: Variance, components: 1, precision: Float, accumulation: Filtered, clear: 0.0, expression: None, raw: false, variance: false }, AovVar { prim_path: "/Render/look_out", name: "look_out", channel_prefix: None, source: Filter(FilterSource { display: false, filter: 0, output: 0, components: 3, radiance: true }), components: 3, precision: Float, accumulation: Filtered, clear: 0.0, expression: None, raw: false, variance: false }, AovVar { prim_path: "/Render/final", name: "final", channel_prefix: None, source: Filter(FilterSource { display: true, filter: 0, output: 0, components: 3, radiance: false }), components: 3, precision: Float, accumulation: Filtered, clear: 0.0, expression: None, raw: false, variance: false }], attributes: [] }], precomp: Some(Precomp { sample_filters: ["/Render/look"], display_filters: ["/Render/soft"], display: "final" }) } +pass: None +source: Source { lens: Some(Lens { focal_length: 24.0, aperture: [24.0, 18.0], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 10.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/snapshot.usda"], invisible_overrides: Some(0) } +layer: $DIR/snapshot.usda +lights: 1 +light 0: dome name Some("/World/sky") lpe None pmf 1.0 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 2 geometries, PrimitiveBreakdown { triangles: 4, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 4, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov Some((Some(0), false)) swapped false curves false scale 1.0 motion [] pieces all=2:2a13523c8e09c13d camera=2:2a13523c8e09c13d shadow=2:2a13523c8e09c13d indirect=2:2a13523c8e09c13d +geom 1: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:31db52e4afd4a225 camera=2:31db52e4afd4a225 shadow=2:31db52e4afd4a225 indirect=2:31db52e4afd4a225 +provenance light /World/sky: LightOrigin { index: 0, geoms: 0..0 } +provenance geometry 0..1: /World/Card +provenance geometry 1..2: /World/Wall +provenance mesh: MeshOrigin { geom_id: 0, slot: 0, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 1, slot: 1, baked: true, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 3430351340666728903, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 1: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 13118596165941616386, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: true, working: None, camera: Some("/World/cam"), cameras: ["/World/cam"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [("matte", 1)], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/World/cam"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/snapshot_usda-48d0c43b60eb99bd-1.image b/crates/crust-core/tests/data/import_baselines/snapshot_usda-48d0c43b60eb99bd-1.image new file mode 100644 index 000000000..f08c49d36 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/snapshot_usda-48d0c43b60eb99bd-1.image @@ -0,0 +1 @@ +32x24 16spp clamp-off e72b7b7cff87e77d diff --git a/crates/crust-core/tests/data/import_baselines/sphere_and_mesh_usda-0e0815d93400ffb5-1.digest b/crates/crust-core/tests/data/import_baselines/sphere_and_mesh_usda-0e0815d93400ffb5-1.digest new file mode 100644 index 000000000..2f6f4384b --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/sphere_and_mesh_usda-0e0815d93400ffb5-1.digest @@ -0,0 +1,24 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: None +camera: Camera { origin: Vec3A(15.0, 3.0, 3.0), lower_left_corner: Vec3A(4.8863316, -0.044797063, 4.174048), horizontal: Vec3A(1.2295314, 0.0, -6.147657), vertical: Vec3A(-0.44830504, 3.4967792, -0.08966101), u: Vec3A(0.19611613, 0.0, -0.9805807), v: Vec3A(-0.1271232, 0.991561, -0.02542464), lens_radius: 0.05, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: None +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 640, height: 360, region: PixelRect { x0: 0, y0: 0, x1: 640, y1: 360 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: None, depth_of_field: true, motion_blur: false, layer_stack: ["$DIR/sphere_and_mesh.usda"], invisible_overrides: Some(0) } +layer: $DIR/sphere_and_mesh.usda +warning: Warning { code: CameraMissing, kind: Skipped, count: 1, prims: [], message: "USD stage has no UsdGeomCamera — falling back to world::get_settings camera" } +lights: 0 +volumes: 0 +world: 2 geometries, PrimitiveBreakdown { triangles: 2, spheres: 1, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 2, spheres: 1, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:58d9d066c6f09ee5 camera=2:58d9d066c6f09ee5 shadow=2:58d9d066c6f09ee5 indirect=2:58d9d066c6f09ee5 +geom 1: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:fb1e7d48790aec95 camera=1:fb1e7d48790aec95 shadow=1:fb1e7d48790aec95 indirect=1:fb1e7d48790aec95 +provenance material /World/Rock: MaterialOrigin { slots: [0, 1], displaced: false } +provenance geometry 0..1: /World/Ground +provenance geometry 1..2: /World/Ball +provenance mesh: MeshOrigin { geom_id: 0, slot: 0, baked: true, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 17961869511521861346, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [1] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: Some(0), subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: None, cameras: [], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: None, offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/sphere_and_mesh_usda-0e0815d93400ffb5-1.image b/crates/crust-core/tests/data/import_baselines/sphere_and_mesh_usda-0e0815d93400ffb5-1.image new file mode 100644 index 000000000..c734c5b1d --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/sphere_and_mesh_usda-0e0815d93400ffb5-1.image @@ -0,0 +1 @@ +640x360 16spp clamp-off a04a09c0d4b5e325 diff --git a/crates/crust-core/tests/data/import_baselines/sphere_both_usda-e02008707f44acbc-1.digest b/crates/crust-core/tests/data/import_baselines/sphere_both_usda-e02008707f44acbc-1.digest new file mode 100644 index 000000000..5d11641d7 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/sphere_both_usda-e02008707f44acbc-1.digest @@ -0,0 +1,19 @@ +time: Some(5.0) +working space: Linear Rec.709 (sRGB) +camera path: Some("/World/cam") +camera: Camera { origin: Vec3A(0.0, 0.0, 8.0), lower_left_corner: Vec3A(-2.7183647, -1.5290802, -2.0), horizontal: Vec3A(5.4367294, 0.0, 0.0), vertical: Vec3A(0.0, 3.0581603, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: Some("/Render/settings") +settings: RenderSettings { samples_per_pixel: 16, max_depth: 2, width: 64, height: 36, region: PixelRect { x0: 0, y0: 0, x1: 64, y1: 36 }, min_samples_per_pixel: 16, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 5, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 50.0, aperture: [20.955, 15.2908], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 10.0 }), depth_of_field: false, motion_blur: true, layer_stack: ["$DIR/sphere_both.usda"], invisible_overrides: Some(0) } +layer: $DIR/sphere_both.usda +lights: 0 +volumes: 0 +world: 1 geometries, PrimitiveBreakdown { triangles: 0, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 1 } top level, PrimitiveBreakdown { triangles: 0, spheres: 1, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 1 } unique, motion true +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [Translation(Vec3A(1.0, 1.0, 0.0))] pieces all=1:f548d1d419575bc7 camera=1:f548d1d419575bc7 shadow=1:f548d1d419575bc7 indirect=1:f548d1d419575bc7 +provenance material /World/Glow: MaterialOrigin { slots: [0], displaced: false } +provenance geometry 0..1: /World/Ball +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: Some(5.0), camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/World/cam"), cameras: ["/World/cam"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/World/cam"), offsets: [0, 4607182418800017408], interval: Some([4617315517961601024, 4618441417868443648]), query: true, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/sphere_both_usda-e02008707f44acbc-1.image b/crates/crust-core/tests/data/import_baselines/sphere_both_usda-e02008707f44acbc-1.image new file mode 100644 index 000000000..17bda768d --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/sphere_both_usda-e02008707f44acbc-1.image @@ -0,0 +1 @@ +64x36 16spp clamp-off 2319fed6b9cef708 diff --git a/crates/crust-core/tests/data/import_baselines/sphere_crust_wins_usda-cfeb9931008a7ea6-1.digest b/crates/crust-core/tests/data/import_baselines/sphere_crust_wins_usda-cfeb9931008a7ea6-1.digest new file mode 100644 index 000000000..0c166a7c5 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/sphere_crust_wins_usda-cfeb9931008a7ea6-1.digest @@ -0,0 +1,21 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: None +camera: Camera { origin: Vec3A(15.0, 3.0, 3.0), lower_left_corner: Vec3A(4.8863316, -0.044797063, 4.174048), horizontal: Vec3A(1.2295314, 0.0, -6.147657), vertical: Vec3A(-0.44830504, 3.4967792, -0.08966101), u: Vec3A(0.19611613, 0.0, -0.9805807), v: Vec3A(-0.1271232, 0.991561, -0.02542464), lens_radius: 0.05, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: None +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 640, height: 360, region: PixelRect { x0: 0, y0: 0, x1: 640, y1: 360 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: None, depth_of_field: true, motion_blur: false, layer_stack: ["$DIR/sphere_crust_wins.usda"], invisible_overrides: Some(0) } +layer: $DIR/sphere_crust_wins.usda +warning: Warning { code: CameraMissing, kind: Skipped, count: 1, prims: [], message: "USD stage has no UsdGeomCamera — falling back to world::get_settings camera" } +lights: 1 +light 0: area name Some("/World/L") lpe None pmf 1.0 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 1 geometries, PrimitiveBreakdown { triangles: 0, spheres: 1, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 0, spheres: 1, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +geom 0: material #0 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:984632b55acb5495 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=1:984632b55acb5495 +provenance light /World/L: LightOrigin { index: 0, geoms: 0..1 } +provenance geometry 0..1: /World/L +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: None, cameras: [], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: None, offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/sphere_crust_wins_usda-cfeb9931008a7ea6-1.image b/crates/crust-core/tests/data/import_baselines/sphere_crust_wins_usda-cfeb9931008a7ea6-1.image new file mode 100644 index 000000000..c734c5b1d --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/sphere_crust_wins_usda-cfeb9931008a7ea6-1.image @@ -0,0 +1 @@ +640x360 16spp clamp-off a04a09c0d4b5e325 diff --git a/crates/crust-core/tests/data/import_baselines/sphere_defaults_usda-8b8f061019318106-1.digest b/crates/crust-core/tests/data/import_baselines/sphere_defaults_usda-8b8f061019318106-1.digest new file mode 100644 index 000000000..5dbd0df4d --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/sphere_defaults_usda-8b8f061019318106-1.digest @@ -0,0 +1,21 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: None +camera: Camera { origin: Vec3A(15.0, 3.0, 3.0), lower_left_corner: Vec3A(4.8863316, -0.044797063, 4.174048), horizontal: Vec3A(1.2295314, 0.0, -6.147657), vertical: Vec3A(-0.44830504, 3.4967792, -0.08966101), u: Vec3A(0.19611613, 0.0, -0.9805807), v: Vec3A(-0.1271232, 0.991561, -0.02542464), lens_radius: 0.05, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: None +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 640, height: 360, region: PixelRect { x0: 0, y0: 0, x1: 640, y1: 360 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: None, depth_of_field: true, motion_blur: false, layer_stack: ["$DIR/sphere_defaults.usda"], invisible_overrides: Some(0) } +layer: $DIR/sphere_defaults.usda +warning: Warning { code: CameraMissing, kind: Skipped, count: 1, prims: [], message: "USD stage has no UsdGeomCamera — falling back to world::get_settings camera" } +lights: 0 +volumes: 0 +world: 2 geometries, PrimitiveBreakdown { triangles: 0, spheres: 2, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 0, spheres: 2, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:a0735df9763d8e75 camera=1:a0735df9763d8e75 shadow=1:a0735df9763d8e75 indirect=1:a0735df9763d8e75 +geom 1: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:fb1e7d48790aec95 camera=1:fb1e7d48790aec95 shadow=1:fb1e7d48790aec95 indirect=1:fb1e7d48790aec95 +provenance geometry 0..1: /World/Small +provenance geometry 1..2: /World/Unit +provenance spheres: [0, 1] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: None, cameras: [], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: None, offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/sphere_defaults_usda-8b8f061019318106-1.image b/crates/crust-core/tests/data/import_baselines/sphere_defaults_usda-8b8f061019318106-1.image new file mode 100644 index 000000000..c734c5b1d --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/sphere_defaults_usda-8b8f061019318106-1.image @@ -0,0 +1 @@ +640x360 16spp clamp-off a04a09c0d4b5e325 diff --git a/crates/crust-core/tests/data/import_baselines/sphere_light_usda-4886e72703716517-1.digest b/crates/crust-core/tests/data/import_baselines/sphere_light_usda-4886e72703716517-1.digest new file mode 100644 index 000000000..387507fd3 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/sphere_light_usda-4886e72703716517-1.digest @@ -0,0 +1,21 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: None +camera: Camera { origin: Vec3A(15.0, 3.0, 3.0), lower_left_corner: Vec3A(4.8863316, -0.044797063, 4.174048), horizontal: Vec3A(1.2295314, 0.0, -6.147657), vertical: Vec3A(-0.44830504, 3.4967792, -0.08966101), u: Vec3A(0.19611613, 0.0, -0.9805807), v: Vec3A(-0.1271232, 0.991561, -0.02542464), lens_radius: 0.05, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: None +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 640, height: 360, region: PixelRect { x0: 0, y0: 0, x1: 640, y1: 360 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: None, depth_of_field: true, motion_blur: false, layer_stack: ["$DIR/sphere_light.usda"], invisible_overrides: Some(0) } +layer: $DIR/sphere_light.usda +warning: Warning { code: CameraMissing, kind: Skipped, count: 1, prims: [], message: "USD stage has no UsdGeomCamera — falling back to world::get_settings camera" } +lights: 1 +light 0: area name Some("/World/L") lpe None pmf 1.0 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 1 geometries, PrimitiveBreakdown { triangles: 0, spheres: 1, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 0, spheres: 1, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +geom 0: material #0 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:1c540e668befdb85 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=1:1c540e668befdb85 +provenance light /World/L: LightOrigin { index: 0, geoms: 0..1 } +provenance geometry 0..1: /World/L +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: None, cameras: [], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: None, offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/sphere_light_usda-4886e72703716517-1.image b/crates/crust-core/tests/data/import_baselines/sphere_light_usda-4886e72703716517-1.image new file mode 100644 index 000000000..c734c5b1d --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/sphere_light_usda-4886e72703716517-1.image @@ -0,0 +1 @@ +640x360 16spp clamp-off a04a09c0d4b5e325 diff --git a/crates/crust-core/tests/data/import_baselines/sphere_nonuniform_scale_usda-4a3711274af76a73-1.digest b/crates/crust-core/tests/data/import_baselines/sphere_nonuniform_scale_usda-4a3711274af76a73-1.digest new file mode 100644 index 000000000..7f662b9de --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/sphere_nonuniform_scale_usda-4a3711274af76a73-1.digest @@ -0,0 +1,19 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: None +camera: Camera { origin: Vec3A(15.0, 3.0, 3.0), lower_left_corner: Vec3A(4.8863316, -0.044797063, 4.174048), horizontal: Vec3A(1.2295314, 0.0, -6.147657), vertical: Vec3A(-0.44830504, 3.4967792, -0.08966101), u: Vec3A(0.19611613, 0.0, -0.9805807), v: Vec3A(-0.1271232, 0.991561, -0.02542464), lens_radius: 0.05, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: None +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 640, height: 360, region: PixelRect { x0: 0, y0: 0, x1: 640, y1: 360 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: None, depth_of_field: true, motion_blur: false, layer_stack: ["$DIR/sphere_nonuniform_scale.usda"], invisible_overrides: Some(0) } +layer: $DIR/sphere_nonuniform_scale.usda +warning: Warning { code: CameraMissing, kind: Skipped, count: 1, prims: [], message: "USD stage has no UsdGeomCamera — falling back to world::get_settings camera" } +lights: 0 +volumes: 0 +world: 1 geometries, PrimitiveBreakdown { triangles: 0, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 1 } top level, PrimitiveBreakdown { triangles: 0, spheres: 1, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 1 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:f2da8586d1815e85 camera=1:f2da8586d1815e85 shadow=1:f2da8586d1815e85 indirect=1:f2da8586d1815e85 +provenance geometry 0..1: /Root/egg +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: None, cameras: [], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: None, offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/sphere_nonuniform_scale_usda-4a3711274af76a73-1.image b/crates/crust-core/tests/data/import_baselines/sphere_nonuniform_scale_usda-4a3711274af76a73-1.image new file mode 100644 index 000000000..c734c5b1d --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/sphere_nonuniform_scale_usda-4a3711274af76a73-1.image @@ -0,0 +1 @@ +640x360 16spp clamp-off a04a09c0d4b5e325 diff --git a/crates/crust-core/tests/data/import_baselines/sphere_only_usda-71bd2f6a8198f0b8-1.digest b/crates/crust-core/tests/data/import_baselines/sphere_only_usda-71bd2f6a8198f0b8-1.digest new file mode 100644 index 000000000..9ac91e01d --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/sphere_only_usda-71bd2f6a8198f0b8-1.digest @@ -0,0 +1,20 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: None +camera: Camera { origin: Vec3A(15.0, 3.0, 3.0), lower_left_corner: Vec3A(4.8863316, -0.044797063, 4.174048), horizontal: Vec3A(1.2295314, 0.0, -6.147657), vertical: Vec3A(-0.44830504, 3.4967792, -0.08966101), u: Vec3A(0.19611613, 0.0, -0.9805807), v: Vec3A(-0.1271232, 0.991561, -0.02542464), lens_radius: 0.05, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: None +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 640, height: 360, region: PixelRect { x0: 0, y0: 0, x1: 640, y1: 360 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: None, depth_of_field: true, motion_blur: false, layer_stack: ["$DIR/sphere_only.usda"], invisible_overrides: Some(0) } +layer: $DIR/sphere_only.usda +warning: Warning { code: CameraMissing, kind: Skipped, count: 1, prims: [], message: "USD stage has no UsdGeomCamera — falling back to world::get_settings camera" } +lights: 0 +volumes: 0 +world: 1 geometries, PrimitiveBreakdown { triangles: 0, spheres: 1, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 0, spheres: 1, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:fb1e7d48790aec95 camera=1:fb1e7d48790aec95 shadow=1:fb1e7d48790aec95 indirect=1:fb1e7d48790aec95 +provenance material /World/Rock: MaterialOrigin { slots: [0], displaced: false } +provenance geometry 0..1: /World/Ball +provenance spheres: [0] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: Some(0), subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: None, cameras: [], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: None, offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/sphere_only_usda-71bd2f6a8198f0b8-1.image b/crates/crust-core/tests/data/import_baselines/sphere_only_usda-71bd2f6a8198f0b8-1.image new file mode 100644 index 000000000..c734c5b1d --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/sphere_only_usda-71bd2f6a8198f0b8-1.image @@ -0,0 +1 @@ +640x360 16spp clamp-off a04a09c0d4b5e325 diff --git a/crates/crust-core/tests/data/import_baselines/sphere_ri_camera_usda-47b1274be8232510-1.digest b/crates/crust-core/tests/data/import_baselines/sphere_ri_camera_usda-47b1274be8232510-1.digest new file mode 100644 index 000000000..340e98650 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/sphere_ri_camera_usda-47b1274be8232510-1.digest @@ -0,0 +1,21 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: None +camera: Camera { origin: Vec3A(15.0, 3.0, 3.0), lower_left_corner: Vec3A(4.8863316, -0.044797063, 4.174048), horizontal: Vec3A(1.2295314, 0.0, -6.147657), vertical: Vec3A(-0.44830504, 3.4967792, -0.08966101), u: Vec3A(0.19611613, 0.0, -0.9805807), v: Vec3A(-0.1271232, 0.991561, -0.02542464), lens_radius: 0.05, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: None +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 640, height: 360, region: PixelRect { x0: 0, y0: 0, x1: 640, y1: 360 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: None, depth_of_field: true, motion_blur: false, layer_stack: ["$DIR/sphere_ri_camera.usda"], invisible_overrides: Some(0) } +layer: $DIR/sphere_ri_camera.usda +warning: Warning { code: CameraMissing, kind: Skipped, count: 1, prims: [], message: "USD stage has no UsdGeomCamera — falling back to world::get_settings camera" } +lights: 1 +light 0: area name Some("/World/L") lpe None pmf 1.0 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 1 geometries, PrimitiveBreakdown { triangles: 0, spheres: 1, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 0, spheres: 1, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +geom 0: material #0 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:984632b55acb5495 camera=1:984632b55acb5495 shadow=1:984632b55acb5495 indirect=1:984632b55acb5495 +provenance light /World/L: LightOrigin { index: 0, geoms: 0..1 } +provenance geometry 0..1: /World/L +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: None, cameras: [], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: None, offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/sphere_ri_camera_usda-47b1274be8232510-1.image b/crates/crust-core/tests/data/import_baselines/sphere_ri_camera_usda-47b1274be8232510-1.image new file mode 100644 index 000000000..0d5371bdf --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/sphere_ri_camera_usda-47b1274be8232510-1.image @@ -0,0 +1 @@ +640x360 16spp clamp-off 7262827b81999b78 diff --git a/crates/crust-core/tests/data/import_baselines/sphere_tiny_scale_usda-7eb2c16e3f3404d7-1.digest b/crates/crust-core/tests/data/import_baselines/sphere_tiny_scale_usda-7eb2c16e3f3404d7-1.digest new file mode 100644 index 000000000..48f728a8d --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/sphere_tiny_scale_usda-7eb2c16e3f3404d7-1.digest @@ -0,0 +1,19 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: None +camera: Camera { origin: Vec3A(15.0, 3.0, 3.0), lower_left_corner: Vec3A(4.8863316, -0.044797063, 4.174048), horizontal: Vec3A(1.2295314, 0.0, -6.147657), vertical: Vec3A(-0.44830504, 3.4967792, -0.08966101), u: Vec3A(0.19611613, 0.0, -0.9805807), v: Vec3A(-0.1271232, 0.991561, -0.02542464), lens_radius: 0.05, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: None +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 640, height: 360, region: PixelRect { x0: 0, y0: 0, x1: 640, y1: 360 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: None, depth_of_field: true, motion_blur: false, layer_stack: ["$DIR/sphere_tiny_scale.usda"], invisible_overrides: Some(0) } +layer: $DIR/sphere_tiny_scale.usda +warning: Warning { code: CameraMissing, kind: Skipped, count: 1, prims: [], message: "USD stage has no UsdGeomCamera — falling back to world::get_settings camera" } +lights: 0 +volumes: 0 +world: 1 geometries, PrimitiveBreakdown { triangles: 0, spheres: 1, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 0, spheres: 1, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:fb1e7d48790aec95 camera=1:fb1e7d48790aec95 shadow=1:fb1e7d48790aec95 indirect=1:fb1e7d48790aec95 +provenance geometry 0..1: /small +provenance spheres: [0] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: None, cameras: [], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: None, offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/sphere_tiny_scale_usda-7eb2c16e3f3404d7-1.image b/crates/crust-core/tests/data/import_baselines/sphere_tiny_scale_usda-7eb2c16e3f3404d7-1.image new file mode 100644 index 000000000..c734c5b1d --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/sphere_tiny_scale_usda-7eb2c16e3f3404d7-1.image @@ -0,0 +1 @@ +640x360 16spp clamp-off a04a09c0d4b5e325 diff --git a/crates/crust-core/tests/data/import_baselines/sphere_track_usda-9c13bacd8c4d2d91-1.digest b/crates/crust-core/tests/data/import_baselines/sphere_track_usda-9c13bacd8c4d2d91-1.digest new file mode 100644 index 000000000..4706f43c4 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/sphere_track_usda-9c13bacd8c4d2d91-1.digest @@ -0,0 +1,19 @@ +time: Some(5.0) +working space: Linear Rec.709 (sRGB) +camera path: Some("/World/cam") +camera: Camera { origin: Vec3A(0.0, 0.0, 8.0), lower_left_corner: Vec3A(-2.7183647, -1.5290802, -2.0), horizontal: Vec3A(5.4367294, 0.0, 0.0), vertical: Vec3A(0.0, 3.0581603, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: Some("/Render/settings") +settings: RenderSettings { samples_per_pixel: 16, max_depth: 2, width: 64, height: 36, region: PixelRect { x0: 0, y0: 0, x1: 64, y1: 36 }, min_samples_per_pixel: 16, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 5, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 50.0, aperture: [20.955, 15.2908], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 10.0 }), depth_of_field: false, motion_blur: true, layer_stack: ["$DIR/sphere_track.usda"], invisible_overrides: Some(0) } +layer: $DIR/sphere_track.usda +lights: 0 +volumes: 0 +world: 1 geometries, PrimitiveBreakdown { triangles: 0, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 1 } top level, PrimitiveBreakdown { triangles: 0, spheres: 1, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 1 } unique, motion true +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [Translation(Vec3A(1.0, 0.0, 0.0))] pieces all=1:f548d1d419575bc7 camera=1:f548d1d419575bc7 shadow=1:f548d1d419575bc7 indirect=1:f548d1d419575bc7 +provenance material /World/Glow: MaterialOrigin { slots: [0], displaced: false } +provenance geometry 0..1: /World/Ball +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: Some(5.0), camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/World/cam"), cameras: ["/World/cam"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/World/cam"), offsets: [0, 4607182418800017408], interval: Some([4617315517961601024, 4618441417868443648]), query: true, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/sphere_track_usda-9c13bacd8c4d2d91-1.image b/crates/crust-core/tests/data/import_baselines/sphere_track_usda-9c13bacd8c4d2d91-1.image new file mode 100644 index 000000000..c0c2a9d9e --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/sphere_track_usda-9c13bacd8c4d2d91-1.image @@ -0,0 +1 @@ +64x36 16spp clamp-off c4b8bd0ec744066e diff --git a/crates/crust-core/tests/data/import_baselines/sphere_uniform_scale_usda-afcce7d5fa243629-1.digest b/crates/crust-core/tests/data/import_baselines/sphere_uniform_scale_usda-afcce7d5fa243629-1.digest new file mode 100644 index 000000000..359cc78a3 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/sphere_uniform_scale_usda-afcce7d5fa243629-1.digest @@ -0,0 +1,19 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: None +camera: Camera { origin: Vec3A(15.0, 3.0, 3.0), lower_left_corner: Vec3A(4.8863316, -0.044797063, 4.174048), horizontal: Vec3A(1.2295314, 0.0, -6.147657), vertical: Vec3A(-0.44830504, 3.4967792, -0.08966101), u: Vec3A(0.19611613, 0.0, -0.9805807), v: Vec3A(-0.1271232, 0.991561, -0.02542464), lens_radius: 0.05, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: None +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 640, height: 360, region: PixelRect { x0: 0, y0: 0, x1: 640, y1: 360 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: None, depth_of_field: true, motion_blur: false, layer_stack: ["$DIR/sphere_uniform_scale.usda"], invisible_overrides: Some(0) } +layer: $DIR/sphere_uniform_scale.usda +warning: Warning { code: CameraMissing, kind: Skipped, count: 1, prims: [], message: "USD stage has no UsdGeomCamera — falling back to world::get_settings camera" } +lights: 0 +volumes: 0 +world: 1 geometries, PrimitiveBreakdown { triangles: 0, spheres: 1, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 0, spheres: 1, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:03b8bf86038c34c8 camera=1:03b8bf86038c34c8 shadow=1:03b8bf86038c34c8 indirect=1:03b8bf86038c34c8 +provenance geometry 0..1: /Root/ball +provenance spheres: [0] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: None, cameras: [], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: None, offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/sphere_uniform_scale_usda-afcce7d5fa243629-1.image b/crates/crust-core/tests/data/import_baselines/sphere_uniform_scale_usda-afcce7d5fa243629-1.image new file mode 100644 index 000000000..c734c5b1d --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/sphere_uniform_scale_usda-afcce7d5fa243629-1.image @@ -0,0 +1 @@ +640x360 16spp clamp-off a04a09c0d4b5e325 diff --git a/crates/crust-core/tests/data/import_baselines/sphere_usda-8366b90874a02778-1.digest b/crates/crust-core/tests/data/import_baselines/sphere_usda-8366b90874a02778-1.digest new file mode 100644 index 000000000..9fd7ec334 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/sphere_usda-8366b90874a02778-1.digest @@ -0,0 +1,19 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: None +camera: Camera { origin: Vec3A(15.0, 3.0, 3.0), lower_left_corner: Vec3A(4.8863316, -0.044797063, 4.174048), horizontal: Vec3A(1.2295314, 0.0, -6.147657), vertical: Vec3A(-0.44830504, 3.4967792, -0.08966101), u: Vec3A(0.19611613, 0.0, -0.9805807), v: Vec3A(-0.1271232, 0.991561, -0.02542464), lens_radius: 0.05, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: None +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 640, height: 360, region: PixelRect { x0: 0, y0: 0, x1: 640, y1: 360 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: None, depth_of_field: true, motion_blur: false, layer_stack: ["$DIR/sphere.usda"], invisible_overrides: Some(0) } +layer: $DIR/sphere.usda +warning: Warning { code: CameraMissing, kind: Skipped, count: 1, prims: [], message: "USD stage has no UsdGeomCamera — falling back to world::get_settings camera" } +lights: 0 +volumes: 0 +world: 1 geometries, PrimitiveBreakdown { triangles: 0, spheres: 1, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 0, spheres: 1, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:389cec510e31c898 camera=1:389cec510e31c898 shadow=1:389cec510e31c898 indirect=1:389cec510e31c898 +provenance geometry 0..1: /World/Ball +provenance spheres: [0] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: None, cameras: [], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: None, offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/sphere_usda-8366b90874a02778-1.image b/crates/crust-core/tests/data/import_baselines/sphere_usda-8366b90874a02778-1.image new file mode 100644 index 000000000..c734c5b1d --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/sphere_usda-8366b90874a02778-1.image @@ -0,0 +1 @@ +640x360 16spp clamp-off a04a09c0d4b5e325 diff --git a/crates/crust-core/tests/data/import_baselines/sphere_zero_scale_usda-ac3436d07948ddb2-1.digest b/crates/crust-core/tests/data/import_baselines/sphere_zero_scale_usda-ac3436d07948ddb2-1.digest new file mode 100644 index 000000000..9ee8c5f83 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/sphere_zero_scale_usda-ac3436d07948ddb2-1.digest @@ -0,0 +1,17 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: None +camera: Camera { origin: Vec3A(15.0, 3.0, 3.0), lower_left_corner: Vec3A(4.8863316, -0.044797063, 4.174048), horizontal: Vec3A(1.2295314, 0.0, -6.147657), vertical: Vec3A(-0.44830504, 3.4967792, -0.08966101), u: Vec3A(0.19611613, 0.0, -0.9805807), v: Vec3A(-0.1271232, 0.991561, -0.02542464), lens_radius: 0.05, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: None +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 640, height: 360, region: PixelRect { x0: 0, y0: 0, x1: 640, y1: 360 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: None, depth_of_field: true, motion_blur: false, layer_stack: ["$DIR/sphere_zero_scale.usda"], invisible_overrides: Some(0) } +layer: $DIR/sphere_zero_scale.usda +warning: Warning { code: CameraMissing, kind: Skipped, count: 1, prims: [], message: "USD stage has no UsdGeomCamera — falling back to world::get_settings camera" } +lights: 0 +volumes: 0 +world: 0 geometries, PrimitiveBreakdown { triangles: 0, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 0, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: None, cameras: [], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: None, offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/sphere_zero_scale_usda-ac3436d07948ddb2-1.image b/crates/crust-core/tests/data/import_baselines/sphere_zero_scale_usda-ac3436d07948ddb2-1.image new file mode 100644 index 000000000..c734c5b1d --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/sphere_zero_scale_usda-ac3436d07948ddb2-1.image @@ -0,0 +1 @@ +640x360 16spp clamp-off a04a09c0d4b5e325 diff --git a/crates/crust-core/tests/data/import_baselines/squashed_cylinder_usda-6bfde315320c4111-1.digest b/crates/crust-core/tests/data/import_baselines/squashed_cylinder_usda-6bfde315320c4111-1.digest new file mode 100644 index 000000000..2ba9d1b57 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/squashed_cylinder_usda-6bfde315320c4111-1.digest @@ -0,0 +1,21 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: None +camera: Camera { origin: Vec3A(15.0, 3.0, 3.0), lower_left_corner: Vec3A(4.8863316, -0.044797063, 4.174048), horizontal: Vec3A(1.2295314, 0.0, -6.147657), vertical: Vec3A(-0.44830504, 3.4967792, -0.08966101), u: Vec3A(0.19611613, 0.0, -0.9805807), v: Vec3A(-0.1271232, 0.991561, -0.02542464), lens_radius: 0.05, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: None +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 640, height: 360, region: PixelRect { x0: 0, y0: 0, x1: 640, y1: 360 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: None, depth_of_field: true, motion_blur: false, layer_stack: ["$DIR/squashed_cylinder.usda"], invisible_overrides: Some(0) } +layer: $DIR/squashed_cylinder.usda +warning: Warning { code: CameraMissing, kind: Skipped, count: 1, prims: [], message: "USD stage has no UsdGeomCamera — falling back to world::get_settings camera" } +lights: 1 +light 0: area name Some("/World/C") lpe None pmf 1.0 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 1 geometries, PrimitiveBreakdown { triangles: 0, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 1 } top level, PrimitiveBreakdown { triangles: 0, spheres: 0, disks: 0, cylinders: 1, curve_segments: 0, cubic_curve_spans: 0, instances: 1 } unique, motion false +geom 0: material #0 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:ae8fed03934f1395 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=1:ae8fed03934f1395 +provenance light /World/C: LightOrigin { index: 0, geoms: 0..1 } +provenance geometry 0..1: /World/C +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: None, cameras: [], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: None, offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/squashed_cylinder_usda-6bfde315320c4111-1.image b/crates/crust-core/tests/data/import_baselines/squashed_cylinder_usda-6bfde315320c4111-1.image new file mode 100644 index 000000000..c734c5b1d --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/squashed_cylinder_usda-6bfde315320c4111-1.image @@ -0,0 +1 @@ +640x360 16spp clamp-off a04a09c0d4b5e325 diff --git a/crates/crust-core/tests/data/import_baselines/squashed_disk_usda-e4a3093a38518998-1.digest b/crates/crust-core/tests/data/import_baselines/squashed_disk_usda-e4a3093a38518998-1.digest new file mode 100644 index 000000000..2e0834889 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/squashed_disk_usda-e4a3093a38518998-1.digest @@ -0,0 +1,21 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: None +camera: Camera { origin: Vec3A(15.0, 3.0, 3.0), lower_left_corner: Vec3A(4.8863316, -0.044797063, 4.174048), horizontal: Vec3A(1.2295314, 0.0, -6.147657), vertical: Vec3A(-0.44830504, 3.4967792, -0.08966101), u: Vec3A(0.19611613, 0.0, -0.9805807), v: Vec3A(-0.1271232, 0.991561, -0.02542464), lens_radius: 0.05, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: None +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 640, height: 360, region: PixelRect { x0: 0, y0: 0, x1: 640, y1: 360 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: None, depth_of_field: true, motion_blur: false, layer_stack: ["$DIR/squashed_disk.usda"], invisible_overrides: Some(0) } +layer: $DIR/squashed_disk.usda +warning: Warning { code: CameraMissing, kind: Skipped, count: 1, prims: [], message: "USD stage has no UsdGeomCamera — falling back to world::get_settings camera" } +lights: 1 +light 0: area name Some("/World/D") lpe None pmf 1.0 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 1 geometries, PrimitiveBreakdown { triangles: 0, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 1 } top level, PrimitiveBreakdown { triangles: 0, spheres: 0, disks: 1, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 1 } unique, motion false +geom 0: material #0 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:3658b162d64e08b2 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=1:3658b162d64e08b2 +provenance light /World/D: LightOrigin { index: 0, geoms: 0..1 } +provenance geometry 0..1: /World/D +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: None, cameras: [], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: None, offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/squashed_disk_usda-e4a3093a38518998-1.image b/crates/crust-core/tests/data/import_baselines/squashed_disk_usda-e4a3093a38518998-1.image new file mode 100644 index 000000000..c734c5b1d --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/squashed_disk_usda-e4a3093a38518998-1.image @@ -0,0 +1 @@ +640x360 16spp clamp-off a04a09c0d4b5e325 diff --git a/crates/crust-core/tests/data/import_baselines/squashed_sphere_usda-7bcbaa3c83aaf92c-1.digest b/crates/crust-core/tests/data/import_baselines/squashed_sphere_usda-7bcbaa3c83aaf92c-1.digest new file mode 100644 index 000000000..e78b6fecf --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/squashed_sphere_usda-7bcbaa3c83aaf92c-1.digest @@ -0,0 +1,21 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: None +camera: Camera { origin: Vec3A(15.0, 3.0, 3.0), lower_left_corner: Vec3A(4.8863316, -0.044797063, 4.174048), horizontal: Vec3A(1.2295314, 0.0, -6.147657), vertical: Vec3A(-0.44830504, 3.4967792, -0.08966101), u: Vec3A(0.19611613, 0.0, -0.9805807), v: Vec3A(-0.1271232, 0.991561, -0.02542464), lens_radius: 0.05, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: None +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 640, height: 360, region: PixelRect { x0: 0, y0: 0, x1: 640, y1: 360 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: None, depth_of_field: true, motion_blur: false, layer_stack: ["$DIR/squashed_sphere.usda"], invisible_overrides: Some(0) } +layer: $DIR/squashed_sphere.usda +warning: Warning { code: CameraMissing, kind: Skipped, count: 1, prims: [], message: "USD stage has no UsdGeomCamera — falling back to world::get_settings camera" } +lights: 1 +light 0: area name Some("/World/S") lpe None pmf 1.0 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 1 geometries, PrimitiveBreakdown { triangles: 0, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 1 } top level, PrimitiveBreakdown { triangles: 0, spheres: 1, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 1 } unique, motion false +geom 0: material #0 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:70b08571f53e3fdd camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=1:70b08571f53e3fdd +provenance light /World/S: LightOrigin { index: 0, geoms: 0..1 } +provenance geometry 0..1: /World/S +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: None, cameras: [], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: None, offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/squashed_sphere_usda-7bcbaa3c83aaf92c-1.image b/crates/crust-core/tests/data/import_baselines/squashed_sphere_usda-7bcbaa3c83aaf92c-1.image new file mode 100644 index 000000000..c734c5b1d --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/squashed_sphere_usda-7bcbaa3c83aaf92c-1.image @@ -0,0 +1 @@ +640x360 16spp clamp-off a04a09c0d4b5e325 diff --git a/crates/crust-core/tests/data/import_baselines/stack_0_usda-2dad0f5ec97c10b8-1.digest b/crates/crust-core/tests/data/import_baselines/stack_0_usda-2dad0f5ec97c10b8-1.digest new file mode 100644 index 000000000..0759f58b9 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/stack_0_usda-2dad0f5ec97c10b8-1.digest @@ -0,0 +1,26 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: None +camera: Camera { origin: Vec3A(15.0, 3.0, 3.0), lower_left_corner: Vec3A(4.8863316, -0.044797063, 4.174048), horizontal: Vec3A(1.2295314, 0.0, -6.147657), vertical: Vec3A(-0.44830504, 3.4967792, -0.08966101), u: Vec3A(0.19611613, 0.0, -0.9805807), v: Vec3A(-0.1271232, 0.991561, -0.02542464), lens_radius: 0.05, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: None +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 640, height: 360, region: PixelRect { x0: 0, y0: 0, x1: 640, y1: 360 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: None, depth_of_field: true, motion_blur: false, layer_stack: ["$DIR/stack_0.usda"], invisible_overrides: Some(0) } +layer: $DIR/stack_0.usda +warning: Warning { code: CameraMissing, kind: Skipped, count: 1, prims: [], message: "USD stage has no UsdGeomCamera — falling back to world::get_settings camera" } +lights: 1 +light 0: area name Some("/World/Key") lpe None pmf 1.0 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 2 geometries, PrimitiveBreakdown { triangles: 2, spheres: 1, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 2, spheres: 1, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +geom 0: material #0 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:1c540e668befdb85 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=1:1c540e668befdb85 +geom 1: material #1 Signature { kind: "MaterialX", cutout: false, straight: false, boundary: false, emits: false, uv: true, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:9626b0f2f3e041c5 camera=2:9626b0f2f3e041c5 shadow=2:9626b0f2f3e041c5 indirect=2:9626b0f2f3e041c5 +provenance material /World/Looks/White: MaterialOrigin { slots: [1], displaced: false } +provenance light /World/Key: LightOrigin { index: 0, geoms: 0..1 } +provenance geometry 0..1: /World/Key +provenance geometry 1..2: /World/Geo/Floor +provenance mesh: MeshOrigin { geom_id: 1, slot: 0, baked: true, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 943668004453080986, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: None, cameras: [], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: None, offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/stack_0_usda-2dad0f5ec97c10b8-1.image b/crates/crust-core/tests/data/import_baselines/stack_0_usda-2dad0f5ec97c10b8-1.image new file mode 100644 index 000000000..ea37ea467 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/stack_0_usda-2dad0f5ec97c10b8-1.image @@ -0,0 +1 @@ +640x360 16spp clamp-off f4846d8c3db394f6 diff --git a/crates/crust-core/tests/data/import_baselines/stack_150_usda-9fc28daf7efcde9e-1.digest b/crates/crust-core/tests/data/import_baselines/stack_150_usda-9fc28daf7efcde9e-1.digest new file mode 100644 index 000000000..062423ada --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/stack_150_usda-9fc28daf7efcde9e-1.digest @@ -0,0 +1,31 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: None +camera: Camera { origin: Vec3A(15.0, 3.0, 3.0), lower_left_corner: Vec3A(4.8863316, -0.044797063, 4.174048), horizontal: Vec3A(1.2295314, 0.0, -6.147657), vertical: Vec3A(-0.44830504, 3.4967792, -0.08966101), u: Vec3A(0.19611613, 0.0, -0.9805807), v: Vec3A(-0.1271232, 0.991561, -0.02542464), lens_radius: 0.05, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: None +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 640, height: 360, region: PixelRect { x0: 0, y0: 0, x1: 640, y1: 360 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: None, depth_of_field: true, motion_blur: false, layer_stack: ["$DIR/stack_150.usda"], invisible_overrides: Some(0) } +layer: $DIR/stack_150.usda +warning: Warning { code: CameraMissing, kind: Skipped, count: 1, prims: [], message: "USD stage has no UsdGeomCamera — falling back to world::get_settings camera" } +lights: 1 +light 0: area name Some("/World/Key") lpe None pmf 1.0 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 3 geometries, PrimitiveBreakdown { triangles: 1802, spheres: 1, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 1802, spheres: 1, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +geom 0: material #0 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:1c540e668befdb85 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=1:1c540e668befdb85 +geom 1: material #1 Signature { kind: "MaterialX", cutout: false, straight: false, boundary: true, emits: false, uv: true, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1800:c6e045d95ed082cd camera=1800:c6e045d95ed082cd shadow=1800:c6e045d95ed082cd indirect=1800:c6e045d95ed082cd +geom 2: material #2 Signature { kind: "MaterialX", cutout: false, straight: false, boundary: false, emits: false, uv: true, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:9626b0f2f3e041c5 camera=2:9626b0f2f3e041c5 shadow=2:9626b0f2f3e041c5 indirect=2:9626b0f2f3e041c5 +provenance material /World/Looks/Fog: MaterialOrigin { slots: [1], displaced: false } +provenance material /World/Looks/White: MaterialOrigin { slots: [2], displaced: false } +provenance light /World/Key: LightOrigin { index: 0, geoms: 0..1 } +provenance geometry 0..1: /World/Key +provenance geometry 1..2: /World/Geo/Slabs +provenance geometry 2..3: /World/Geo/Floor +provenance mesh: MeshOrigin { geom_id: 1, slot: 0, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 2, slot: 1, baked: true, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 3578796968587099115, n_points: 1200, n_indices: 3600, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 1: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 943668004453080986, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 1 }), placements: 1, shared: false, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: None, cameras: [], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: None, offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/stack_150_usda-9fc28daf7efcde9e-1.image b/crates/crust-core/tests/data/import_baselines/stack_150_usda-9fc28daf7efcde9e-1.image new file mode 100644 index 000000000..43edb60d8 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/stack_150_usda-9fc28daf7efcde9e-1.image @@ -0,0 +1 @@ +640x360 16spp clamp-off ae0bf4cb3d777366 diff --git a/crates/crust-core/tests/data/import_baselines/stage_usda-0695b3612208bcf5-1.digest b/crates/crust-core/tests/data/import_baselines/stage_usda-0695b3612208bcf5-1.digest new file mode 100644 index 000000000..fc58bf6f4 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/stage_usda-0695b3612208bcf5-1.digest @@ -0,0 +1,22 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: None +camera: Camera { origin: Vec3A(15.0, 3.0, 3.0), lower_left_corner: Vec3A(4.8863316, -0.044797063, 4.174048), horizontal: Vec3A(1.2295314, 0.0, -6.147657), vertical: Vec3A(-0.44830504, 3.4967792, -0.08966101), u: Vec3A(0.19611613, 0.0, -0.9805807), v: Vec3A(-0.1271232, 0.991561, -0.02542464), lens_radius: 0.05, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: None +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 640, height: 360, region: PixelRect { x0: 0, y0: 0, x1: 640, y1: 360 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: None, depth_of_field: true, motion_blur: false, layer_stack: ["$DIR/stage.usda"], invisible_overrides: Some(0) } +layer: $DIR/stage.usda +warning: Warning { code: CameraMissing, kind: Skipped, count: 1, prims: [], message: "USD stage has no UsdGeomCamera — falling back to world::get_settings camera" } +lights: 0 +volumes: 0 +world: 1 geometries, PrimitiveBreakdown { triangles: 4, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 4, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +geom 0: material #0 Signature { kind: "MaterialX", cutout: false, straight: false, boundary: false, emits: true, uv: true, uv_primvar: None, face_texture: None, curve: None, primvars: Some(["ramp"]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=4:f842628536678af5 camera=4:f842628536678af5 shadow=4:f842628536678af5 indirect=4:f842628536678af5 +provenance material /World/Looks/M: MaterialOrigin { slots: [0], displaced: false } +provenance geometry 0..1: /World/Q +provenance mesh: MeshOrigin { geom_id: 0, slot: 0, baked: true, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 17893806835409548195, n_points: 8, n_indices: 8, n_uvs: None, smooth: true, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: None, cameras: [], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: None, offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/stage_usda-0695b3612208bcf5-1.image b/crates/crust-core/tests/data/import_baselines/stage_usda-0695b3612208bcf5-1.image new file mode 100644 index 000000000..45c7c7673 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/stage_usda-0695b3612208bcf5-1.image @@ -0,0 +1 @@ +640x360 16spp clamp-off a9b43f7c7735c3fb diff --git a/crates/crust-core/tests/data/import_baselines/stage_usda-08451a086997d754-1.digest b/crates/crust-core/tests/data/import_baselines/stage_usda-08451a086997d754-1.digest new file mode 100644 index 000000000..891021dd9 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/stage_usda-08451a086997d754-1.digest @@ -0,0 +1,20 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: None +camera: Camera { origin: Vec3A(15.0, 3.0, 3.0), lower_left_corner: Vec3A(4.8863316, -0.044797063, 4.174048), horizontal: Vec3A(1.2295314, 0.0, -6.147657), vertical: Vec3A(-0.44830504, 3.4967792, -0.08966101), u: Vec3A(0.19611613, 0.0, -0.9805807), v: Vec3A(-0.1271232, 0.991561, -0.02542464), lens_radius: 0.05, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: None +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 640, height: 360, region: PixelRect { x0: 0, y0: 0, x1: 640, y1: 360 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: None, depth_of_field: true, motion_blur: false, layer_stack: ["$DIR/stage.usda"], invisible_overrides: Some(0) } +layer: $DIR/stage.usda +warning: Warning { code: CameraMissing, kind: Skipped, count: 1, prims: [], message: "USD stage has no UsdGeomCamera — falling back to world::get_settings camera" } +lights: 0 +volumes: 0 +world: 1 geometries, PrimitiveBreakdown { triangles: 0, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 1 } top level, PrimitiveBreakdown { triangles: 0, spheres: 0, disks: 0, cylinders: 0, curve_segments: 10000, cubic_curve_spans: 0, instances: 1 } unique, motion false +geom 0: material #0 Signature { kind: "MaterialX", cutout: false, straight: false, boundary: false, emits: true, uv: true, uv_primvar: None, face_texture: None, curve: Some((false, true, [])), primvars: None } class 65535 holdout false transparent false map None uv None shading None strands Some(0) aov None swapped false curves true scale 1.0 motion [] pieces all=10000:6298817ba0f095a8 camera=10000:6298817ba0f095a8 shadow=10000:6298817ba0f095a8 indirect=10000:6298817ba0f095a8 +provenance material /World/Looks/M: MaterialOrigin { slots: [0], displaced: false } +provenance geometry 0..1: /World/C +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: None, cameras: [], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: None, offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/stage_usda-08451a086997d754-1.image b/crates/crust-core/tests/data/import_baselines/stage_usda-08451a086997d754-1.image new file mode 100644 index 000000000..9167da060 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/stage_usda-08451a086997d754-1.image @@ -0,0 +1 @@ +640x360 16spp clamp-off 9d918df738e7419b diff --git a/crates/crust-core/tests/data/import_baselines/stage_usda-08f2605aa76f8c5a-1.digest b/crates/crust-core/tests/data/import_baselines/stage_usda-08f2605aa76f8c5a-1.digest new file mode 100644 index 000000000..e1194aa9c --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/stage_usda-08f2605aa76f8c5a-1.digest @@ -0,0 +1,23 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: None +camera: Camera { origin: Vec3A(15.0, 3.0, 3.0), lower_left_corner: Vec3A(4.8863316, -0.044797063, 4.174048), horizontal: Vec3A(1.2295314, 0.0, -6.147657), vertical: Vec3A(-0.44830504, 3.4967792, -0.08966101), u: Vec3A(0.19611613, 0.0, -0.9805807), v: Vec3A(-0.1271232, 0.991561, -0.02542464), lens_radius: 0.05, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: None +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 640, height: 360, region: PixelRect { x0: 0, y0: 0, x1: 640, y1: 360 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: None, depth_of_field: true, motion_blur: false, layer_stack: ["$DIR/stage.usda"], invisible_overrides: Some(0) } +layer: $DIR/stage.usda +warning: Warning { code: MeshUnsupportedPrimvar, kind: Skipped, count: 1, prims: ["/World/Q"], message: "/World/Q: primvars:label is a float[] (indices out of its values' range) — the material reads its geompropvalue's default there" } +warning: Warning { code: CameraMissing, kind: Skipped, count: 1, prims: [], message: "USD stage has no UsdGeomCamera — falling back to world::get_settings camera" } +lights: 0 +volumes: 0 +world: 1 geometries, PrimitiveBreakdown { triangles: 4, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 4, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +geom 0: material #0 Signature { kind: "MaterialX", cutout: false, straight: false, boundary: false, emits: true, uv: true, uv_primvar: None, face_texture: None, curve: None, primvars: Some(["label"]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=4:f842628536678af5 camera=4:f842628536678af5 shadow=4:f842628536678af5 indirect=4:f842628536678af5 +provenance material /World/Looks/M: MaterialOrigin { slots: [0], displaced: false } +provenance geometry 0..1: /World/Q +provenance mesh: MeshOrigin { geom_id: 0, slot: 0, baked: true, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 17828304714785378767, n_points: 6, n_indices: 8, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: None, cameras: [], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: None, offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/stage_usda-08f2605aa76f8c5a-1.image b/crates/crust-core/tests/data/import_baselines/stage_usda-08f2605aa76f8c5a-1.image new file mode 100644 index 000000000..45c7c7673 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/stage_usda-08f2605aa76f8c5a-1.image @@ -0,0 +1 @@ +640x360 16spp clamp-off a9b43f7c7735c3fb diff --git a/crates/crust-core/tests/data/import_baselines/stage_usda-0a9a4fefc79d0b59-1.digest b/crates/crust-core/tests/data/import_baselines/stage_usda-0a9a4fefc79d0b59-1.digest new file mode 100644 index 000000000..08606a40d --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/stage_usda-0a9a4fefc79d0b59-1.digest @@ -0,0 +1,20 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: None +camera: Camera { origin: Vec3A(15.0, 3.0, 3.0), lower_left_corner: Vec3A(4.8863316, -0.044797063, 4.174048), horizontal: Vec3A(1.2295314, 0.0, -6.147657), vertical: Vec3A(-0.44830504, 3.4967792, -0.08966101), u: Vec3A(0.19611613, 0.0, -0.9805807), v: Vec3A(-0.1271232, 0.991561, -0.02542464), lens_radius: 0.05, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: None +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 640, height: 360, region: PixelRect { x0: 0, y0: 0, x1: 640, y1: 360 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: None, depth_of_field: true, motion_blur: false, layer_stack: ["$DIR/stage.usda"], invisible_overrides: Some(0) } +layer: $DIR/stage.usda +warning: Warning { code: CameraMissing, kind: Skipped, count: 1, prims: [], message: "USD stage has no UsdGeomCamera — falling back to world::get_settings camera" } +lights: 0 +volumes: 0 +world: 1 geometries, PrimitiveBreakdown { triangles: 0, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 1 } top level, PrimitiveBreakdown { triangles: 0, spheres: 0, disks: 0, cylinders: 0, curve_segments: 1, cubic_curve_spans: 0, instances: 1 } unique, motion false +geom 0: material #0 Signature { kind: "MaterialX", cutout: false, straight: false, boundary: false, emits: true, uv: true, uv_primvar: None, face_texture: None, curve: Some((false, true, ["pair"])), primvars: None } class 65535 holdout false transparent false map None uv None shading None strands Some(0) aov None swapped false curves true scale 1.0 motion [] pieces all=1:ba28ac43777139fb camera=1:ba28ac43777139fb shadow=1:ba28ac43777139fb indirect=1:ba28ac43777139fb +provenance material /World/Looks/M: MaterialOrigin { slots: [0], displaced: false } +provenance geometry 0..1: /World/C +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: None, cameras: [], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: None, offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/stage_usda-0a9a4fefc79d0b59-1.image b/crates/crust-core/tests/data/import_baselines/stage_usda-0a9a4fefc79d0b59-1.image new file mode 100644 index 000000000..24c7ddb45 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/stage_usda-0a9a4fefc79d0b59-1.image @@ -0,0 +1 @@ +640x360 16spp clamp-off 6211336cd955df3b diff --git a/crates/crust-core/tests/data/import_baselines/stage_usda-0b840e8b2322dd02-1.digest b/crates/crust-core/tests/data/import_baselines/stage_usda-0b840e8b2322dd02-1.digest new file mode 100644 index 000000000..08c5156ef --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/stage_usda-0b840e8b2322dd02-1.digest @@ -0,0 +1,33 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/World/cam") +camera: Camera { origin: Vec3A(0.0, 0.0, 12.0), lower_left_corner: Vec3A(-2.7183647, -1.5290802, 2.0), horizontal: Vec3A(5.4367294, 0.0, 0.0), vertical: Vec3A(0.0, 3.0581603, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: None +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 640, height: 360, region: PixelRect { x0: 0, y0: 0, x1: 640, y1: 360 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 50.0, aperture: [20.955, 15.2908], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 10.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$TMP/crust_import_parity/five_subtrees/stage.usda"], invisible_overrides: Some(0) } +layer: $TMP/crust_import_parity/five_subtrees/stage.usda +lights: 1 +light 0: area name Some("/World/key") lpe None pmf 1.0 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 5 geometries, PrimitiveBreakdown { triangles: 192, spheres: 2, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 2 } top level, PrimitiveBreakdown { triangles: 204, spheres: 2, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 2 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=12:df1c10739a4243a5 camera=12:df1c10739a4243a5 shadow=12:df1c10739a4243a5 indirect=12:df1c10739a4243a5 +geom 1: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:eb131905b248d2a5 camera=1:eb131905b248d2a5 shadow=1:eb131905b248d2a5 indirect=1:eb131905b248d2a5 +geom 2: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=12:24a0b7ce9df7f2a5 camera=12:24a0b7ce9df7f2a5 shadow=12:24a0b7ce9df7f2a5 indirect=12:24a0b7ce9df7f2a5 +geom 3: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=192:2e37d41d85e568d9 camera=192:2e37d41d85e568d9 shadow=192:2e37d41d85e568d9 indirect=192:2e37d41d85e568d9 +geom 4: material #1 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:835871679188a475 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=1:835871679188a475 +provenance light /World/key: LightOrigin { index: 0, geoms: 4..5 } +provenance geometry 0..1: /World/A/box +provenance geometry 1..2: /World/B/ball +provenance geometry 2..3: /World/C/box +provenance geometry 3..4: /World/D/can +provenance geometry 4..5: /World/key +provenance mesh: MeshOrigin { geom_id: 0, slot: 0, baked: false, moving: false } +provenance mesh: MeshOrigin { geom_id: 2, slot: 0, baked: false, moving: false } +provenance mesh: MeshOrigin { geom_id: 3, slot: 1, baked: true, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 9204403525635746283, n_points: 8, n_indices: 24, n_uvs: None, smooth: false, material: 0 }), placements: 2, shared: false, displaced: false } +provenance mesh slot 1: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 6877125351767401758, n_points: 194, n_indices: 480, n_uvs: None, smooth: true, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [1] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: true, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/World/cam"), cameras: ["/World/cam"], dicing: None, on_screen_shapes: None, unsized_shapes: true, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/World/cam"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/stage_usda-0b840e8b2322dd02-1.image b/crates/crust-core/tests/data/import_baselines/stage_usda-0b840e8b2322dd02-1.image new file mode 100644 index 000000000..45221952b --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/stage_usda-0b840e8b2322dd02-1.image @@ -0,0 +1 @@ +640x360 16spp clamp-off 10ba161ffbe861d0 diff --git a/crates/crust-core/tests/data/import_baselines/stage_usda-0d575bccf885b988-1.digest b/crates/crust-core/tests/data/import_baselines/stage_usda-0d575bccf885b988-1.digest new file mode 100644 index 000000000..76733bda7 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/stage_usda-0d575bccf885b988-1.digest @@ -0,0 +1,33 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/World/cam") +camera: Camera { origin: Vec3A(0.0, 0.0, 12.0), lower_left_corner: Vec3A(-2.7183647, -1.5290802, 2.0), horizontal: Vec3A(5.4367294, 0.0, 0.0), vertical: Vec3A(0.0, 3.0581603, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: None +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 640, height: 360, region: PixelRect { x0: 0, y0: 0, x1: 640, y1: 360 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 50.0, aperture: [20.955, 15.2908], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 10.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$TMP/crust_import_parity/five_subtrees/stage.usda"], invisible_overrides: Some(0) } +layer: $TMP/crust_import_parity/five_subtrees/stage.usda +lights: 1 +light 0: area name Some("/World/key") lpe None pmf 1.0 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 5 geometries, PrimitiveBreakdown { triangles: 192, spheres: 2, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 2 } top level, PrimitiveBreakdown { triangles: 204, spheres: 2, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 2 } unique, motion false +geom 0: material #0 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:835871679188a475 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=1:835871679188a475 +geom 1: material #1 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=192:2e37d41d85e568d9 camera=192:2e37d41d85e568d9 shadow=192:2e37d41d85e568d9 indirect=192:2e37d41d85e568d9 +geom 2: material #1 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=12:24a0b7ce9df7f2a5 camera=12:24a0b7ce9df7f2a5 shadow=12:24a0b7ce9df7f2a5 indirect=12:24a0b7ce9df7f2a5 +geom 3: material #1 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:eb131905b248d2a5 camera=1:eb131905b248d2a5 shadow=1:eb131905b248d2a5 indirect=1:eb131905b248d2a5 +geom 4: material #1 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=12:df1c10739a4243a5 camera=12:df1c10739a4243a5 shadow=12:df1c10739a4243a5 indirect=12:df1c10739a4243a5 +provenance light /World/key: LightOrigin { index: 0, geoms: 0..1 } +provenance geometry 0..1: /World/key +provenance geometry 1..2: /World/D/can +provenance geometry 2..3: /World/C/box +provenance geometry 3..4: /World/B/ball +provenance geometry 4..5: /World/A/box +provenance mesh: MeshOrigin { geom_id: 1, slot: 0, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 2, slot: 1, baked: false, moving: false } +provenance mesh: MeshOrigin { geom_id: 4, slot: 1, baked: false, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 6877125351767401758, n_points: 194, n_indices: 480, n_uvs: None, smooth: true, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 1: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 9204403525635746283, n_points: 8, n_indices: 24, n_uvs: None, smooth: false, material: 0 }), placements: 2, shared: false, displaced: false } +provenance spheres: [3] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: true, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/World/cam"), cameras: ["/World/cam"], dicing: None, on_screen_shapes: None, unsized_shapes: true, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/World/cam"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/stage_usda-0d575bccf885b988-1.image b/crates/crust-core/tests/data/import_baselines/stage_usda-0d575bccf885b988-1.image new file mode 100644 index 000000000..45221952b --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/stage_usda-0d575bccf885b988-1.image @@ -0,0 +1 @@ +640x360 16spp clamp-off 10ba161ffbe861d0 diff --git a/crates/crust-core/tests/data/import_baselines/stage_usda-0dae1afcf6927089-1.digest b/crates/crust-core/tests/data/import_baselines/stage_usda-0dae1afcf6927089-1.digest new file mode 100644 index 000000000..c6a609e0e --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/stage_usda-0dae1afcf6927089-1.digest @@ -0,0 +1,22 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: None +camera: Camera { origin: Vec3A(15.0, 3.0, 3.0), lower_left_corner: Vec3A(4.8863316, -0.044797063, 4.174048), horizontal: Vec3A(1.2295314, 0.0, -6.147657), vertical: Vec3A(-0.44830504, 3.4967792, -0.08966101), u: Vec3A(0.19611613, 0.0, -0.9805807), v: Vec3A(-0.1271232, 0.991561, -0.02542464), lens_radius: 0.05, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: None +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 640, height: 360, region: PixelRect { x0: 0, y0: 0, x1: 640, y1: 360 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: None, depth_of_field: true, motion_blur: false, layer_stack: ["$DIR/stage.usda"], invisible_overrides: Some(0) } +layer: $DIR/stage.usda +warning: Warning { code: CameraMissing, kind: Skipped, count: 1, prims: [], message: "USD stage has no UsdGeomCamera — falling back to world::get_settings camera" } +lights: 0 +volumes: 0 +world: 1 geometries, PrimitiveBreakdown { triangles: 4, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 4, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +geom 0: material #0 Signature { kind: "MaterialX", cutout: false, straight: false, boundary: false, emits: true, uv: true, uv_primvar: None, face_texture: None, curve: None, primvars: Some(["face", "all", "corner"]) } class 65535 holdout false transparent false map None uv None shading Some(0) strands None aov None swapped false curves false scale 1.0 motion [] pieces all=4:f842628536678af5 camera=4:f842628536678af5 shadow=4:f842628536678af5 indirect=4:f842628536678af5 +provenance material /World/Looks/M: MaterialOrigin { slots: [0], displaced: false } +provenance geometry 0..1: /World/Q +provenance mesh: MeshOrigin { geom_id: 0, slot: 0, baked: true, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 11885302575749807255, n_points: 6, n_indices: 8, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: None, cameras: [], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: None, offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/stage_usda-0dae1afcf6927089-1.image b/crates/crust-core/tests/data/import_baselines/stage_usda-0dae1afcf6927089-1.image new file mode 100644 index 000000000..2aba0e1c2 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/stage_usda-0dae1afcf6927089-1.image @@ -0,0 +1 @@ +640x360 16spp clamp-off cf76d033b1272cd1 diff --git a/crates/crust-core/tests/data/import_baselines/stage_usda-137bf5b9bbcbaa09-1.digest b/crates/crust-core/tests/data/import_baselines/stage_usda-137bf5b9bbcbaa09-1.digest new file mode 100644 index 000000000..4ff4deb33 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/stage_usda-137bf5b9bbcbaa09-1.digest @@ -0,0 +1,20 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: None +camera: Camera { origin: Vec3A(15.0, 3.0, 3.0), lower_left_corner: Vec3A(4.8863316, -0.044797063, 4.174048), horizontal: Vec3A(1.2295314, 0.0, -6.147657), vertical: Vec3A(-0.44830504, 3.4967792, -0.08966101), u: Vec3A(0.19611613, 0.0, -0.9805807), v: Vec3A(-0.1271232, 0.991561, -0.02542464), lens_radius: 0.05, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: None +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 640, height: 360, region: PixelRect { x0: 0, y0: 0, x1: 640, y1: 360 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: None, depth_of_field: true, motion_blur: false, layer_stack: ["$DIR/stage.usda"], invisible_overrides: Some(0) } +layer: $DIR/stage.usda +warning: Warning { code: CameraMissing, kind: Skipped, count: 1, prims: [], message: "USD stage has no UsdGeomCamera — falling back to world::get_settings camera" } +lights: 0 +volumes: 0 +world: 1 geometries, PrimitiveBreakdown { triangles: 0, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 1 } top level, PrimitiveBreakdown { triangles: 0, spheres: 0, disks: 0, cylinders: 0, curve_segments: 1, cubic_curve_spans: 0, instances: 1 } unique, motion false +geom 0: material #0 Signature { kind: "MaterialX", cutout: false, straight: false, boundary: false, emits: true, uv: true, uv_primvar: None, face_texture: None, curve: Some((false, true, [])), primvars: None } class 65535 holdout false transparent false map None uv None shading None strands Some(0) aov None swapped false curves true scale 1.0 motion [] pieces all=1:ba28ac43777139fb camera=1:ba28ac43777139fb shadow=1:ba28ac43777139fb indirect=1:ba28ac43777139fb +provenance material /World/Looks/M: MaterialOrigin { slots: [0], displaced: false } +provenance geometry 0..1: /World/Scatter +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: None, cameras: [], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: None, offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/stage_usda-137bf5b9bbcbaa09-1.image b/crates/crust-core/tests/data/import_baselines/stage_usda-137bf5b9bbcbaa09-1.image new file mode 100644 index 000000000..160bd5d91 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/stage_usda-137bf5b9bbcbaa09-1.image @@ -0,0 +1 @@ +640x360 16spp clamp-off b4e5ed191fd3ea1c diff --git a/crates/crust-core/tests/data/import_baselines/stage_usda-15ab0320e4168a3a-1.digest b/crates/crust-core/tests/data/import_baselines/stage_usda-15ab0320e4168a3a-1.digest new file mode 100644 index 000000000..bb7011531 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/stage_usda-15ab0320e4168a3a-1.digest @@ -0,0 +1,22 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: None +camera: Camera { origin: Vec3A(15.0, 3.0, 3.0), lower_left_corner: Vec3A(4.8863316, -0.044797063, 4.174048), horizontal: Vec3A(1.2295314, 0.0, -6.147657), vertical: Vec3A(-0.44830504, 3.4967792, -0.08966101), u: Vec3A(0.19611613, 0.0, -0.9805807), v: Vec3A(-0.1271232, 0.991561, -0.02542464), lens_radius: 0.05, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: None +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 640, height: 360, region: PixelRect { x0: 0, y0: 0, x1: 640, y1: 360 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: None, depth_of_field: true, motion_blur: false, layer_stack: ["$DIR/stage.usda"], invisible_overrides: Some(0) } +layer: $DIR/stage.usda +warning: Warning { code: CameraMissing, kind: Skipped, count: 1, prims: [], message: "USD stage has no UsdGeomCamera — falling back to world::get_settings camera" } +lights: 0 +volumes: 0 +world: 1 geometries, PrimitiveBreakdown { triangles: 4, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 4, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +geom 0: material #0 Signature { kind: "MaterialX", cutout: false, straight: false, boundary: false, emits: true, uv: true, uv_primvar: None, face_texture: None, curve: None, primvars: Some(["ramp"]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=4:b0d89b46648f4a35 camera=4:b0d89b46648f4a35 shadow=4:b0d89b46648f4a35 indirect=4:b0d89b46648f4a35 +provenance material /World/Looks/M: MaterialOrigin { slots: [0], displaced: false } +provenance geometry 0..1: /World/Q +provenance mesh: MeshOrigin { geom_id: 0, slot: 0, baked: true, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 5991654631882484761, n_points: 6, n_indices: 8, n_uvs: None, smooth: true, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: None, cameras: [], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: None, offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/stage_usda-15ab0320e4168a3a-1.image b/crates/crust-core/tests/data/import_baselines/stage_usda-15ab0320e4168a3a-1.image new file mode 100644 index 000000000..45c7c7673 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/stage_usda-15ab0320e4168a3a-1.image @@ -0,0 +1 @@ +640x360 16spp clamp-off a9b43f7c7735c3fb diff --git a/crates/crust-core/tests/data/import_baselines/stage_usda-1780ae5d9b4706f3-1.digest b/crates/crust-core/tests/data/import_baselines/stage_usda-1780ae5d9b4706f3-1.digest new file mode 100644 index 000000000..07c70260d --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/stage_usda-1780ae5d9b4706f3-1.digest @@ -0,0 +1,17 @@ +time: Some(2.5) +working space: Linear Rec.709 (sRGB) +camera path: Some("/World/cam") +camera: Camera { origin: Vec3A(0.0, 0.0, 0.0), lower_left_corner: Vec3A(-3.0581603, -1.5290802, -10.0), horizontal: Vec3A(6.1163206, 0.0, 0.0), vertical: Vec3A(0.0, 3.0581603, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: Some("/Render/settings") +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 16, height: 8, region: PixelRect { x0: 0, y0: 0, x1: 16, y1: 8 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 2, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [AovProduct { prim_path: "/Render/main", name: "main.exr", vars: [], attributes: [] }], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 50.0, aperture: [20.955, 15.2908], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 10.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/stage.usda"], invisible_overrides: Some(0) } +layer: $DIR/stage.usda +warning: Warning { code: AovUnsupportedSource, kind: Skipped, count: 1, prims: ["/Render/intrinsic"], message: "/Render/intrinsic: sourceType \"intrinsic\" is unimplemented in UsdRender itself; no channel written" } +lights: 0 +volumes: 0 +world: 0 geometries, PrimitiveBreakdown { triangles: 0, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 0, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: Some(2.5), camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: true, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/World/cam"), cameras: ["/World/cam"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/World/cam"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/stage_usda-1780ae5d9b4706f3-1.image b/crates/crust-core/tests/data/import_baselines/stage_usda-1780ae5d9b4706f3-1.image new file mode 100644 index 000000000..318bfb54f --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/stage_usda-1780ae5d9b4706f3-1.image @@ -0,0 +1 @@ +16x8 16spp clamp-off 6ab05ef9aa8b9b25 diff --git a/crates/crust-core/tests/data/import_baselines/stage_usda-18576b421133666c-1.digest b/crates/crust-core/tests/data/import_baselines/stage_usda-18576b421133666c-1.digest new file mode 100644 index 000000000..5eea0dc90 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/stage_usda-18576b421133666c-1.digest @@ -0,0 +1,24 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: None +camera: Camera { origin: Vec3A(15.0, 3.0, 3.0), lower_left_corner: Vec3A(4.8863316, -0.044797063, 4.174048), horizontal: Vec3A(1.2295314, 0.0, -6.147657), vertical: Vec3A(-0.44830504, 3.4967792, -0.08966101), u: Vec3A(0.19611613, 0.0, -0.9805807), v: Vec3A(-0.1271232, 0.991561, -0.02542464), lens_radius: 0.05, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: None +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 640, height: 360, region: PixelRect { x0: 0, y0: 0, x1: 640, y1: 360 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: None, depth_of_field: true, motion_blur: false, layer_stack: ["$DIR/stage.usda"], invisible_overrides: Some(0) } +layer: $DIR/stage.usda +warning: Warning { code: CameraMissing, kind: Skipped, count: 1, prims: [], message: "USD stage has no UsdGeomCamera — falling back to world::get_settings camera" } +lights: 0 +volumes: 0 +world: 2 geometries, PrimitiveBreakdown { triangles: 1, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 1 } top level, PrimitiveBreakdown { triangles: 1, spheres: 0, disks: 0, cylinders: 0, curve_segments: 1, cubic_curve_spans: 0, instances: 1 } unique, motion false +geom 0: material #0 Signature { kind: "MaterialX", cutout: false, straight: false, boundary: false, emits: false, uv: true, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:ccb219b666f710a8 camera=1:ccb219b666f710a8 shadow=1:ccb219b666f710a8 indirect=1:ccb219b666f710a8 +geom 1: material #0 Signature { kind: "MaterialX", cutout: false, straight: false, boundary: false, emits: false, uv: true, uv_primvar: None, face_texture: None, curve: Some((false, false, [])), primvars: None } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves true scale 1.0 motion [] pieces all=1:6efdf1d486c2c255 camera=1:6efdf1d486c2c255 shadow=1:6efdf1d486c2c255 indirect=1:6efdf1d486c2c255 +provenance material /World/Plain: MaterialOrigin { slots: [0, 1], displaced: false } +provenance geometry 0..1: /World/Card +provenance geometry 1..2: /World/Curve +provenance mesh: MeshOrigin { geom_id: 0, slot: 0, baked: true, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 16540775001122682633, n_points: 3, n_indices: 3, n_uvs: None, smooth: true, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: None, cameras: [], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: None, offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/stage_usda-18576b421133666c-1.image b/crates/crust-core/tests/data/import_baselines/stage_usda-18576b421133666c-1.image new file mode 100644 index 000000000..c734c5b1d --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/stage_usda-18576b421133666c-1.image @@ -0,0 +1 @@ +640x360 16spp clamp-off a04a09c0d4b5e325 diff --git a/crates/crust-core/tests/data/import_baselines/stage_usda-18d4c3c27061d1e0-1.digest b/crates/crust-core/tests/data/import_baselines/stage_usda-18d4c3c27061d1e0-1.digest new file mode 100644 index 000000000..08606a40d --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/stage_usda-18d4c3c27061d1e0-1.digest @@ -0,0 +1,20 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: None +camera: Camera { origin: Vec3A(15.0, 3.0, 3.0), lower_left_corner: Vec3A(4.8863316, -0.044797063, 4.174048), horizontal: Vec3A(1.2295314, 0.0, -6.147657), vertical: Vec3A(-0.44830504, 3.4967792, -0.08966101), u: Vec3A(0.19611613, 0.0, -0.9805807), v: Vec3A(-0.1271232, 0.991561, -0.02542464), lens_radius: 0.05, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: None +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 640, height: 360, region: PixelRect { x0: 0, y0: 0, x1: 640, y1: 360 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: None, depth_of_field: true, motion_blur: false, layer_stack: ["$DIR/stage.usda"], invisible_overrides: Some(0) } +layer: $DIR/stage.usda +warning: Warning { code: CameraMissing, kind: Skipped, count: 1, prims: [], message: "USD stage has no UsdGeomCamera — falling back to world::get_settings camera" } +lights: 0 +volumes: 0 +world: 1 geometries, PrimitiveBreakdown { triangles: 0, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 1 } top level, PrimitiveBreakdown { triangles: 0, spheres: 0, disks: 0, cylinders: 0, curve_segments: 1, cubic_curve_spans: 0, instances: 1 } unique, motion false +geom 0: material #0 Signature { kind: "MaterialX", cutout: false, straight: false, boundary: false, emits: true, uv: true, uv_primvar: None, face_texture: None, curve: Some((false, true, ["pair"])), primvars: None } class 65535 holdout false transparent false map None uv None shading None strands Some(0) aov None swapped false curves true scale 1.0 motion [] pieces all=1:ba28ac43777139fb camera=1:ba28ac43777139fb shadow=1:ba28ac43777139fb indirect=1:ba28ac43777139fb +provenance material /World/Looks/M: MaterialOrigin { slots: [0], displaced: false } +provenance geometry 0..1: /World/C +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: None, cameras: [], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: None, offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/stage_usda-18d4c3c27061d1e0-1.image b/crates/crust-core/tests/data/import_baselines/stage_usda-18d4c3c27061d1e0-1.image new file mode 100644 index 000000000..24c7ddb45 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/stage_usda-18d4c3c27061d1e0-1.image @@ -0,0 +1 @@ +640x360 16spp clamp-off 6211336cd955df3b diff --git a/crates/crust-core/tests/data/import_baselines/stage_usda-19c958e4224602c7-1.digest b/crates/crust-core/tests/data/import_baselines/stage_usda-19c958e4224602c7-1.digest new file mode 100644 index 000000000..021be0ea1 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/stage_usda-19c958e4224602c7-1.digest @@ -0,0 +1,16 @@ +time: Some(2.0) +working space: Linear Rec.709 (sRGB) +camera path: Some("/World/cam") +camera: Camera { origin: Vec3A(0.0, 0.0, 0.0), lower_left_corner: Vec3A(-3.0581603, -1.5290802, -10.0), horizontal: Vec3A(6.1163206, 0.0, 0.0), vertical: Vec3A(0.0, 3.0581603, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: Some("/Render/settings") +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 32, height: 16, region: PixelRect { x0: 0, y0: 0, x1: 32, y1: 16 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 2, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [AovProduct { prim_path: "/Render/main", name: "$SHOT/beauty.$F4.exr", vars: [AovVar { prim_path: "/Render/color", name: "color", channel_prefix: None, source: Color, components: 4, precision: Float, accumulation: Filtered, clear: 0.0, expression: None, raw: false, variance: false }], attributes: [] }], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 50.0, aperture: [20.955, 15.2908], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 10.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/stage.usda"], invisible_overrides: Some(0) } +layer: $DIR/stage.usda +lights: 0 +volumes: 0 +world: 0 geometries, PrimitiveBreakdown { triangles: 0, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 0, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: Some(2.0), camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: true, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/World/cam"), cameras: ["/World/cam"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/World/cam"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/stage_usda-19c958e4224602c7-1.image b/crates/crust-core/tests/data/import_baselines/stage_usda-19c958e4224602c7-1.image new file mode 100644 index 000000000..f0b9b5b6b --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/stage_usda-19c958e4224602c7-1.image @@ -0,0 +1 @@ +32x16 16spp clamp-off 6df0de0551480325 diff --git a/crates/crust-core/tests/data/import_baselines/stage_usda-1ad9de82b394044d-1.digest b/crates/crust-core/tests/data/import_baselines/stage_usda-1ad9de82b394044d-1.digest new file mode 100644 index 000000000..b473a793c --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/stage_usda-1ad9de82b394044d-1.digest @@ -0,0 +1,22 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: None +camera: Camera { origin: Vec3A(15.0, 3.0, 3.0), lower_left_corner: Vec3A(4.8863316, -0.044797063, 4.174048), horizontal: Vec3A(1.2295314, 0.0, -6.147657), vertical: Vec3A(-0.44830504, 3.4967792, -0.08966101), u: Vec3A(0.19611613, 0.0, -0.9805807), v: Vec3A(-0.1271232, 0.991561, -0.02542464), lens_radius: 0.05, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: None +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 640, height: 360, region: PixelRect { x0: 0, y0: 0, x1: 640, y1: 360 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: None, depth_of_field: true, motion_blur: false, layer_stack: ["$DIR/stage.usda"], invisible_overrides: Some(0) } +layer: $DIR/stage.usda +warning: Warning { code: CameraMissing, kind: Skipped, count: 1, prims: [], message: "USD stage has no UsdGeomCamera — falling back to world::get_settings camera" } +lights: 0 +volumes: 0 +world: 1 geometries, PrimitiveBreakdown { triangles: 4, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 4, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +geom 0: material #0 Signature { kind: "MaterialX", cutout: false, straight: false, boundary: false, emits: true, uv: true, uv_primvar: None, face_texture: None, curve: None, primvars: Some(["ramp"]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.2599211 motion [] pieces all=4:207520f9ebf77205 camera=4:207520f9ebf77205 shadow=4:207520f9ebf77205 indirect=4:207520f9ebf77205 +provenance material /World/Looks/M: MaterialOrigin { slots: [0], displaced: false } +provenance geometry 0..1: /World/Q +provenance mesh: MeshOrigin { geom_id: 0, slot: 0, baked: true, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 17893806835409548195, n_points: 8, n_indices: 8, n_uvs: None, smooth: true, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: None, cameras: [], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: None, offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/stage_usda-1ad9de82b394044d-1.image b/crates/crust-core/tests/data/import_baselines/stage_usda-1ad9de82b394044d-1.image new file mode 100644 index 000000000..b1b2ee57a --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/stage_usda-1ad9de82b394044d-1.image @@ -0,0 +1 @@ +640x360 16spp clamp-off c4b3e3234fab6655 diff --git a/crates/crust-core/tests/data/import_baselines/stage_usda-1eb70e9572b3f131-1.digest b/crates/crust-core/tests/data/import_baselines/stage_usda-1eb70e9572b3f131-1.digest new file mode 100644 index 000000000..76733bda7 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/stage_usda-1eb70e9572b3f131-1.digest @@ -0,0 +1,33 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/World/cam") +camera: Camera { origin: Vec3A(0.0, 0.0, 12.0), lower_left_corner: Vec3A(-2.7183647, -1.5290802, 2.0), horizontal: Vec3A(5.4367294, 0.0, 0.0), vertical: Vec3A(0.0, 3.0581603, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: None +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 640, height: 360, region: PixelRect { x0: 0, y0: 0, x1: 640, y1: 360 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 50.0, aperture: [20.955, 15.2908], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 10.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$TMP/crust_import_parity/five_subtrees/stage.usda"], invisible_overrides: Some(0) } +layer: $TMP/crust_import_parity/five_subtrees/stage.usda +lights: 1 +light 0: area name Some("/World/key") lpe None pmf 1.0 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 5 geometries, PrimitiveBreakdown { triangles: 192, spheres: 2, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 2 } top level, PrimitiveBreakdown { triangles: 204, spheres: 2, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 2 } unique, motion false +geom 0: material #0 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:835871679188a475 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=1:835871679188a475 +geom 1: material #1 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=192:2e37d41d85e568d9 camera=192:2e37d41d85e568d9 shadow=192:2e37d41d85e568d9 indirect=192:2e37d41d85e568d9 +geom 2: material #1 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=12:24a0b7ce9df7f2a5 camera=12:24a0b7ce9df7f2a5 shadow=12:24a0b7ce9df7f2a5 indirect=12:24a0b7ce9df7f2a5 +geom 3: material #1 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:eb131905b248d2a5 camera=1:eb131905b248d2a5 shadow=1:eb131905b248d2a5 indirect=1:eb131905b248d2a5 +geom 4: material #1 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=12:df1c10739a4243a5 camera=12:df1c10739a4243a5 shadow=12:df1c10739a4243a5 indirect=12:df1c10739a4243a5 +provenance light /World/key: LightOrigin { index: 0, geoms: 0..1 } +provenance geometry 0..1: /World/key +provenance geometry 1..2: /World/D/can +provenance geometry 2..3: /World/C/box +provenance geometry 3..4: /World/B/ball +provenance geometry 4..5: /World/A/box +provenance mesh: MeshOrigin { geom_id: 1, slot: 0, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 2, slot: 1, baked: false, moving: false } +provenance mesh: MeshOrigin { geom_id: 4, slot: 1, baked: false, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 6877125351767401758, n_points: 194, n_indices: 480, n_uvs: None, smooth: true, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 1: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 9204403525635746283, n_points: 8, n_indices: 24, n_uvs: None, smooth: false, material: 0 }), placements: 2, shared: false, displaced: false } +provenance spheres: [3] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: true, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/World/cam"), cameras: ["/World/cam"], dicing: None, on_screen_shapes: None, unsized_shapes: true, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/World/cam"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/stage_usda-1eb70e9572b3f131-1.image b/crates/crust-core/tests/data/import_baselines/stage_usda-1eb70e9572b3f131-1.image new file mode 100644 index 000000000..45221952b --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/stage_usda-1eb70e9572b3f131-1.image @@ -0,0 +1 @@ +640x360 16spp clamp-off 10ba161ffbe861d0 diff --git a/crates/crust-core/tests/data/import_baselines/stage_usda-22dd31756ff245fc-1.digest b/crates/crust-core/tests/data/import_baselines/stage_usda-22dd31756ff245fc-1.digest new file mode 100644 index 000000000..d0e3a74d1 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/stage_usda-22dd31756ff245fc-1.digest @@ -0,0 +1,30 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/World/cam2") +camera: Camera { origin: Vec3A(1.8, 1.2, 5.0), lower_left_corner: Vec3A(-4.3453856, -2.354873, -3.223331), horizontal: Vec3A(6.9992666, 0.0, -2.0070076), vertical: Vec3A(-0.16759291, 4.3262835, -0.5844659), u: Vec3A(0.9612617, 0.0, -0.2756374), v: Vec3A(-0.038361315, 0.9902681, -0.13378179), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: Some("/Render/settings") +settings: RenderSettings { samples_per_pixel: 16, max_depth: 2, width: 40, height: 24, region: PixelRect { x0: 0, y0: 0, x1: 40, y1: 24 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [AovProduct { prim_path: "/Render/beauty", name: "beauty.exr", vars: [AovVar { prim_path: "/Render/C", name: "C", channel_prefix: None, source: Color, components: 3, precision: Float, accumulation: Filtered, clear: 0.0, expression: None, raw: false, variance: false }], attributes: [] }], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 35.0, aperture: [20.955, 15.2908], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 10.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/stage.usda", "$DIR/ipr.usda", "$DIR/cooked.usda"], invisible_overrides: Some(0) } +layer: $DIR/cooked.usda +layer: $DIR/ipr.usda +layer: $DIR/stage.usda +lights: 2 +light 0: distant name Some("/World/Sun") lpe None pmf 0.5 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 1: dome name Some("/World/Sky") lpe None pmf 0.5 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 2 geometries, PrimitiveBreakdown { triangles: 4, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 4, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:0e0a4667da70ad35 camera=2:0e0a4667da70ad35 shadow=2:0e0a4667da70ad35 indirect=2:0e0a4667da70ad35 +geom 1: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:6787da8eacebee45 camera=2:6787da8eacebee45 shadow=2:6787da8eacebee45 indirect=2:6787da8eacebee45 +provenance light /World/Sky: LightOrigin { index: 1, geoms: 2..2 } +provenance light /World/Sun: LightOrigin { index: 0, geoms: 2..2 } +provenance geometry 0..1: /World/Card +provenance geometry 1..2: /World/Floor +provenance mesh: MeshOrigin { geom_id: 0, slot: 0, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 1, slot: 1, baked: true, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 18358658470076285213, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 1: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 800109031887815527, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: true }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/World/cam2"), cameras: ["/World/cam2", "/World/cam1"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/World/cam2"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/stage_usda-22dd31756ff245fc-1.image b/crates/crust-core/tests/data/import_baselines/stage_usda-22dd31756ff245fc-1.image new file mode 100644 index 000000000..d87432c64 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/stage_usda-22dd31756ff245fc-1.image @@ -0,0 +1 @@ +40x24 16spp clamp-off 159590ad28a7f55f diff --git a/crates/crust-core/tests/data/import_baselines/stage_usda-22e94b531779cff1-1.digest b/crates/crust-core/tests/data/import_baselines/stage_usda-22e94b531779cff1-1.digest new file mode 100644 index 000000000..173cdfddb --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/stage_usda-22e94b531779cff1-1.digest @@ -0,0 +1,22 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: None +camera: Camera { origin: Vec3A(15.0, 3.0, 3.0), lower_left_corner: Vec3A(4.8863316, -0.044797063, 4.174048), horizontal: Vec3A(1.2295314, 0.0, -6.147657), vertical: Vec3A(-0.44830504, 3.4967792, -0.08966101), u: Vec3A(0.19611613, 0.0, -0.9805807), v: Vec3A(-0.1271232, 0.991561, -0.02542464), lens_radius: 0.05, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: None +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 640, height: 360, region: PixelRect { x0: 0, y0: 0, x1: 640, y1: 360 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: None, depth_of_field: true, motion_blur: false, layer_stack: ["$DIR/stage.usda"], invisible_overrides: Some(0) } +layer: $DIR/stage.usda +warning: Warning { code: CameraMissing, kind: Skipped, count: 1, prims: [], message: "USD stage has no UsdGeomCamera — falling back to world::get_settings camera" } +lights: 0 +volumes: 0 +world: 1 geometries, PrimitiveBreakdown { triangles: 4, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 4, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +geom 0: material #0 Signature { kind: "MaterialX", cutout: false, straight: false, boundary: false, emits: true, uv: true, uv_primvar: None, face_texture: None, curve: None, primvars: Some(["tint"]) } class 65535 holdout false transparent false map None uv None shading Some(0) strands None aov None swapped false curves false scale 1.0 motion [] pieces all=4:f842628536678af5 camera=4:f842628536678af5 shadow=4:f842628536678af5 indirect=4:f842628536678af5 +provenance material /World/Looks/M: MaterialOrigin { slots: [0], displaced: false } +provenance geometry 0..1: /World/Q +provenance mesh: MeshOrigin { geom_id: 0, slot: 0, baked: true, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 219912570367011913, n_points: 6, n_indices: 8, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: None, cameras: [], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: None, offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/stage_usda-22e94b531779cff1-1.image b/crates/crust-core/tests/data/import_baselines/stage_usda-22e94b531779cff1-1.image new file mode 100644 index 000000000..cf592a6d4 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/stage_usda-22e94b531779cff1-1.image @@ -0,0 +1 @@ +640x360 16spp clamp-off 71ccd89e99a2b01f diff --git a/crates/crust-core/tests/data/import_baselines/stage_usda-24ad7c66559e9c80-1.digest b/crates/crust-core/tests/data/import_baselines/stage_usda-24ad7c66559e9c80-1.digest new file mode 100644 index 000000000..6f5377d23 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/stage_usda-24ad7c66559e9c80-1.digest @@ -0,0 +1,33 @@ +time: Some(5.0) +working space: Linear Rec.709 (sRGB) +camera path: Some("/World/Cam") +camera: Camera { origin: Vec3A(0.0, 1.5, 7.0), lower_left_corner: Vec3A(-5.6632595, -1.6855836, -3.0), horizontal: Vec3A(11.326519, 0.0, 0.0), vertical: Vec3A(0.0, 6.371167, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: Some("/Render/settings") +settings: RenderSettings { samples_per_pixel: 16, max_depth: 4, width: 128, height: 72, region: PixelRect { x0: 0, y0: 0, x1: 128, y1: 72 }, min_samples_per_pixel: 16, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 5, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [AovProduct { prim_path: "/Render/comp", name: "mv.exr", vars: [AovVar { prim_path: "/Render/comp/C", name: "C", channel_prefix: None, source: Color, components: 4, precision: Float, accumulation: Filtered, clear: 0.0, expression: None, raw: false, variance: false }, AovVar { prim_path: "/Render/comp/P", name: "P", channel_prefix: None, source: P, components: 3, precision: Float, accumulation: Closest, clear: 0.0, expression: None, raw: false, variance: false }, AovVar { prim_path: "/Render/comp/forward", name: "forward", channel_prefix: None, source: MotionVector, components: 2, precision: Float, accumulation: Closest, clear: 0.0, expression: None, raw: false, variance: false }], attributes: [] }], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 24.0, aperture: [20.955, 15.2908], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 10.0 }), depth_of_field: false, motion_blur: true, layer_stack: ["$DIR/stage.usda", "$ROOT/samples/animation.usda"], invisible_overrides: Some(0) } +layer: $ROOT/samples/animation.usda +layer: $DIR/stage.usda +lights: 2 +light 0: area name Some("/World/KeyLight") lpe None pmf 0.5 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 1: dome name Some("/World/Sky") lpe None pmf 0.5 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 4 geometries, PrimitiveBreakdown { triangles: 6, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 1 } top level, PrimitiveBreakdown { triangles: 6, spheres: 1, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 1 } unique, motion true +geom 0: material #0 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:9de8214b59f6ec57 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=2:9de8214b59f6ec57 +geom 1: material #1 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:be0b97004c4d3e85 camera=2:be0b97004c4d3e85 shadow=2:be0b97004c4d3e85 indirect=2:be0b97004c4d3e85 +geom 2: material #1 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:04a229f6b721d5f0 camera=2:04a229f6b721d5f0 shadow=2:04a229f6b721d5f0 indirect=2:04a229f6b721d5f0 +geom 3: material #1 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [Translation(Vec3A(0.44444445, 0.0, 0.0))] pieces all=1:eca0c2f96d67613b camera=1:eca0c2f96d67613b shadow=1:eca0c2f96d67613b indirect=1:eca0c2f96d67613b +provenance light /World/KeyLight: LightOrigin { index: 0, geoms: 0..1 } +provenance light /World/Sky: LightOrigin { index: 1, geoms: 4..4 } +provenance geometry 0..1: /World/KeyLight +provenance geometry 1..2: /World/Floor +provenance geometry 2..3: /World/Card +provenance geometry 3..4: /World/Mover +provenance mesh: MeshOrigin { geom_id: 1, slot: 0, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 2, slot: 1, baked: true, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 8416296582947184296, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 1: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 16680805309457723353, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: Some(5.0), camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: true, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/World/Cam"), cameras: ["/World/Cam"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/World/Cam"), offsets: [0, 4607182418800017408], interval: Some([4617315517961601024, 4618441417868443648]), query: true, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/stage_usda-24ad7c66559e9c80-1.image b/crates/crust-core/tests/data/import_baselines/stage_usda-24ad7c66559e9c80-1.image new file mode 100644 index 000000000..21fc0e6d8 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/stage_usda-24ad7c66559e9c80-1.image @@ -0,0 +1 @@ +128x72 16spp clamp-off 5ac05c518b0e1e9c diff --git a/crates/crust-core/tests/data/import_baselines/stage_usda-26105365b1fd8dbc-1.digest b/crates/crust-core/tests/data/import_baselines/stage_usda-26105365b1fd8dbc-1.digest new file mode 100644 index 000000000..22698c7ad --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/stage_usda-26105365b1fd8dbc-1.digest @@ -0,0 +1,24 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: None +camera: Camera { origin: Vec3A(15.0, 3.0, 3.0), lower_left_corner: Vec3A(4.8863316, -0.044797063, 4.174048), horizontal: Vec3A(1.2295314, 0.0, -6.147657), vertical: Vec3A(-0.44830504, 3.4967792, -0.08966101), u: Vec3A(0.19611613, 0.0, -0.9805807), v: Vec3A(-0.1271232, 0.991561, -0.02542464), lens_radius: 0.05, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: None +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 640, height: 360, region: PixelRect { x0: 0, y0: 0, x1: 640, y1: 360 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: None, depth_of_field: true, motion_blur: false, layer_stack: ["$DIR/stage.usda"], invisible_overrides: Some(0) } +layer: $DIR/stage.usda +warning: Warning { code: CameraMissing, kind: Skipped, count: 1, prims: [], message: "USD stage has no UsdGeomCamera — falling back to world::get_settings camera" } +lights: 0 +volumes: 0 +world: 2 geometries, PrimitiveBreakdown { triangles: 2, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 1 } top level, PrimitiveBreakdown { triangles: 2, spheres: 0, disks: 0, cylinders: 0, curve_segments: 1, cubic_curve_spans: 0, instances: 1 } unique, motion false +geom 0: material #0 Signature { kind: "MaterialX", cutout: false, straight: false, boundary: false, emits: true, uv: true, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:bdb3aa09e1ce3bf5 camera=2:bdb3aa09e1ce3bf5 shadow=2:bdb3aa09e1ce3bf5 indirect=2:bdb3aa09e1ce3bf5 +geom 1: material #0 Signature { kind: "MaterialX", cutout: false, straight: false, boundary: false, emits: true, uv: true, uv_primvar: None, face_texture: None, curve: Some((false, true, [])), primvars: None } class 65535 holdout false transparent false map None uv None shading None strands Some(0) aov None swapped false curves true scale 1.0 motion [] pieces all=1:17b9a0f8cfff9585 camera=1:17b9a0f8cfff9585 shadow=1:17b9a0f8cfff9585 indirect=1:17b9a0f8cfff9585 +provenance material /World/Looks/M: MaterialOrigin { slots: [0, 1], displaced: false } +provenance geometry 0..1: /World/Floor +provenance geometry 1..2: /World/C +provenance mesh: MeshOrigin { geom_id: 0, slot: 0, baked: true, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 13176316567238695505, n_points: 4, n_indices: 4, n_uvs: None, smooth: true, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: None, cameras: [], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: None, offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/stage_usda-26105365b1fd8dbc-1.image b/crates/crust-core/tests/data/import_baselines/stage_usda-26105365b1fd8dbc-1.image new file mode 100644 index 000000000..0f6bb47e6 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/stage_usda-26105365b1fd8dbc-1.image @@ -0,0 +1 @@ +640x360 16spp clamp-off be2be9919cb0403f diff --git a/crates/crust-core/tests/data/import_baselines/stage_usda-2912eb63656b3371-1.digest b/crates/crust-core/tests/data/import_baselines/stage_usda-2912eb63656b3371-1.digest new file mode 100644 index 000000000..4de3574d1 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/stage_usda-2912eb63656b3371-1.digest @@ -0,0 +1,22 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: None +camera: Camera { origin: Vec3A(15.0, 3.0, 3.0), lower_left_corner: Vec3A(4.8863316, -0.044797063, 4.174048), horizontal: Vec3A(1.2295314, 0.0, -6.147657), vertical: Vec3A(-0.44830504, 3.4967792, -0.08966101), u: Vec3A(0.19611613, 0.0, -0.9805807), v: Vec3A(-0.1271232, 0.991561, -0.02542464), lens_radius: 0.05, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: None +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 640, height: 360, region: PixelRect { x0: 0, y0: 0, x1: 640, y1: 360 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: None, depth_of_field: true, motion_blur: false, layer_stack: ["$DIR/stage.usda"], invisible_overrides: Some(0) } +layer: $DIR/stage.usda +warning: Warning { code: CameraMissing, kind: Skipped, count: 1, prims: [], message: "USD stage has no UsdGeomCamera — falling back to world::get_settings camera" } +lights: 0 +volumes: 0 +world: 1 geometries, PrimitiveBreakdown { triangles: 4, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 4, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +geom 0: material #0 Signature { kind: "MaterialX", cutout: false, straight: false, boundary: false, emits: true, uv: true, uv_primvar: None, face_texture: None, curve: None, primvars: Some(["ramp"]) } class 65535 holdout false transparent false map None uv None shading Some(0) strands None aov None swapped false curves false scale 1.0 motion [] pieces all=4:f842628536678af5 camera=4:f842628536678af5 shadow=4:f842628536678af5 indirect=4:f842628536678af5 +provenance material /World/Looks/M: MaterialOrigin { slots: [0], displaced: false } +provenance geometry 0..1: /World/Q +provenance mesh: MeshOrigin { geom_id: 0, slot: 0, baked: true, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 15182453685671876355, n_points: 8, n_indices: 8, n_uvs: None, smooth: true, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: None, cameras: [], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: None, offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/stage_usda-2912eb63656b3371-1.image b/crates/crust-core/tests/data/import_baselines/stage_usda-2912eb63656b3371-1.image new file mode 100644 index 000000000..452a40d74 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/stage_usda-2912eb63656b3371-1.image @@ -0,0 +1 @@ +640x360 16spp clamp-off da0d8844add128c3 diff --git a/crates/crust-core/tests/data/import_baselines/stage_usda-2c5736e1f1ba1f8d-1.digest b/crates/crust-core/tests/data/import_baselines/stage_usda-2c5736e1f1ba1f8d-1.digest new file mode 100644 index 000000000..0d6786cd3 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/stage_usda-2c5736e1f1ba1f8d-1.digest @@ -0,0 +1,22 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/World/cam") +camera: Camera { origin: Vec3A(0.0, 0.0, 0.0), lower_left_corner: Vec3A(-2.7183647, -1.5290802, -10.0), horizontal: Vec3A(5.4367294, 0.0, 0.0), vertical: Vec3A(0.0, 3.0581603, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: None +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 640, height: 360, region: PixelRect { x0: 0, y0: 0, x1: 640, y1: 360 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 50.0, aperture: [20.955, 15.2908], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 10.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/stage.usda"], invisible_overrides: Some(0) } +layer: $DIR/stage.usda +lights: 0 +volumes: 0 +world: 2 geometries, PrimitiveBreakdown { triangles: 0, spheres: 2, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 0, spheres: 2, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +geom 0: material #0 Signature { kind: "UsdPreviewSurface (textured)", cutout: false, straight: false, boundary: false, emits: false, uv: true, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:d46e920fbc035ae5 camera=1:d46e920fbc035ae5 shadow=1:d46e920fbc035ae5 indirect=1:d46e920fbc035ae5 +geom 1: material #1 Signature { kind: "UsdPreviewSurface (textured)", cutout: false, straight: false, boundary: false, emits: false, uv: true, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:fb1e7d48790aec95 camera=1:fb1e7d48790aec95 shadow=1:fb1e7d48790aec95 indirect=1:fb1e7d48790aec95 +provenance material /World/Looks/A: MaterialOrigin { slots: [1], displaced: false } +provenance material /World/Looks/B: MaterialOrigin { slots: [0], displaced: false } +provenance geometry 0..1: /World/Geo/ball_B +provenance geometry 1..2: /World/Geo/ball_A +provenance spheres: [0, 1] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/World/cam"), cameras: ["/World/cam"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/World/cam"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/stage_usda-2c5736e1f1ba1f8d-1.image b/crates/crust-core/tests/data/import_baselines/stage_usda-2c5736e1f1ba1f8d-1.image new file mode 100644 index 000000000..c734c5b1d --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/stage_usda-2c5736e1f1ba1f8d-1.image @@ -0,0 +1 @@ +640x360 16spp clamp-off a04a09c0d4b5e325 diff --git a/crates/crust-core/tests/data/import_baselines/stage_usda-2c8067fb553f81df-1.digest b/crates/crust-core/tests/data/import_baselines/stage_usda-2c8067fb553f81df-1.digest new file mode 100644 index 000000000..2d4163c1f --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/stage_usda-2c8067fb553f81df-1.digest @@ -0,0 +1,20 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: None +camera: Camera { origin: Vec3A(15.0, 3.0, 3.0), lower_left_corner: Vec3A(4.8863316, -0.044797063, 4.174048), horizontal: Vec3A(1.2295314, 0.0, -6.147657), vertical: Vec3A(-0.44830504, 3.4967792, -0.08966101), u: Vec3A(0.19611613, 0.0, -0.9805807), v: Vec3A(-0.1271232, 0.991561, -0.02542464), lens_radius: 0.05, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: None +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 640, height: 360, region: PixelRect { x0: 0, y0: 0, x1: 640, y1: 360 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: None, depth_of_field: true, motion_blur: false, layer_stack: ["$DIR/stage.usda"], invisible_overrides: Some(0) } +layer: $DIR/stage.usda +warning: Warning { code: CameraMissing, kind: Skipped, count: 1, prims: [], message: "USD stage has no UsdGeomCamera — falling back to world::get_settings camera" } +lights: 0 +volumes: 0 +world: 1 geometries, PrimitiveBreakdown { triangles: 0, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 1 } top level, PrimitiveBreakdown { triangles: 0, spheres: 0, disks: 0, cylinders: 0, curve_segments: 1, cubic_curve_spans: 0, instances: 1 } unique, motion false +geom 0: material #0 Signature { kind: "MaterialX", cutout: false, straight: false, boundary: false, emits: true, uv: true, uv_primvar: None, face_texture: None, curve: Some((true, false, [])), primvars: None } class 65535 holdout false transparent false map None uv None shading None strands Some(0) aov None swapped false curves true scale 1.0 motion [] pieces all=1:7a8114182eb4444e camera=1:7a8114182eb4444e shadow=1:7a8114182eb4444e indirect=1:7a8114182eb4444e +provenance material /World/Looks/M: MaterialOrigin { slots: [0], displaced: false } +provenance geometry 0..1: /World/C +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: None, cameras: [], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: None, offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/stage_usda-2c8067fb553f81df-1.image b/crates/crust-core/tests/data/import_baselines/stage_usda-2c8067fb553f81df-1.image new file mode 100644 index 000000000..cce857adb --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/stage_usda-2c8067fb553f81df-1.image @@ -0,0 +1 @@ +640x360 16spp clamp-off 5a2e886dbf4ce620 diff --git a/crates/crust-core/tests/data/import_baselines/stage_usda-2ce486f3dc966042-1.digest b/crates/crust-core/tests/data/import_baselines/stage_usda-2ce486f3dc966042-1.digest new file mode 100644 index 000000000..6c7e8fd32 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/stage_usda-2ce486f3dc966042-1.digest @@ -0,0 +1,19 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/World/cam") +camera: Camera { origin: Vec3A(0.0, 0.0, 0.0), lower_left_corner: Vec3A(-2.7183647, -1.5290802, -10.0), horizontal: Vec3A(5.4367294, 0.0, 0.0), vertical: Vec3A(0.0, 3.0581603, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: None +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 640, height: 360, region: PixelRect { x0: 0, y0: 0, x1: 640, y1: 360 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 50.0, aperture: [20.955, 15.2908], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 10.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/stage.usda"], invisible_overrides: Some(0) } +layer: $DIR/stage.usda +lights: 0 +volumes: 0 +world: 1 geometries, PrimitiveBreakdown { triangles: 0, spheres: 1, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 0, spheres: 1, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +geom 0: material #0 Signature { kind: "UsdPreviewSurface (textured)", cutout: false, straight: false, boundary: false, emits: false, uv: true, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:fb1e7d48790aec95 camera=1:fb1e7d48790aec95 shadow=1:fb1e7d48790aec95 indirect=1:fb1e7d48790aec95 +provenance material /World/Looks/M: MaterialOrigin { slots: [0], displaced: false } +provenance geometry 0..1: /World/ball +provenance spheres: [0] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: true, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/World/cam"), cameras: ["/World/cam"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/World/cam"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/stage_usda-2ce486f3dc966042-1.image b/crates/crust-core/tests/data/import_baselines/stage_usda-2ce486f3dc966042-1.image new file mode 100644 index 000000000..c734c5b1d --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/stage_usda-2ce486f3dc966042-1.image @@ -0,0 +1 @@ +640x360 16spp clamp-off a04a09c0d4b5e325 diff --git a/crates/crust-core/tests/data/import_baselines/stage_usda-2ffe73dbb471510a-1.digest b/crates/crust-core/tests/data/import_baselines/stage_usda-2ffe73dbb471510a-1.digest new file mode 100644 index 000000000..dc3f7f7fa --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/stage_usda-2ffe73dbb471510a-1.digest @@ -0,0 +1,20 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: None +camera: Camera { origin: Vec3A(15.0, 3.0, 3.0), lower_left_corner: Vec3A(4.8863316, -0.044797063, 4.174048), horizontal: Vec3A(1.2295314, 0.0, -6.147657), vertical: Vec3A(-0.44830504, 3.4967792, -0.08966101), u: Vec3A(0.19611613, 0.0, -0.9805807), v: Vec3A(-0.1271232, 0.991561, -0.02542464), lens_radius: 0.05, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: None +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 640, height: 360, region: PixelRect { x0: 0, y0: 0, x1: 640, y1: 360 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: None, depth_of_field: true, motion_blur: false, layer_stack: ["$DIR/stage.usda"], invisible_overrides: Some(0) } +layer: $DIR/stage.usda +warning: Warning { code: CameraMissing, kind: Skipped, count: 1, prims: [], message: "USD stage has no UsdGeomCamera — falling back to world::get_settings camera" } +lights: 0 +volumes: 0 +world: 1 geometries, PrimitiveBreakdown { triangles: 0, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 1 } top level, PrimitiveBreakdown { triangles: 0, spheres: 0, disks: 0, cylinders: 0, curve_segments: 1, cubic_curve_spans: 0, instances: 1 } unique, motion false +geom 0: material #0 Signature { kind: "MaterialX", cutout: false, straight: false, boundary: false, emits: true, uv: true, uv_primvar: None, face_texture: None, curve: Some((false, true, ["p0"])), primvars: None } class 65535 holdout false transparent false map None uv None shading None strands Some(0) aov None swapped false curves true scale 1.0 motion [] pieces all=1:ba28ac43777139fb camera=1:ba28ac43777139fb shadow=1:ba28ac43777139fb indirect=1:ba28ac43777139fb +provenance material /World/Looks/M: MaterialOrigin { slots: [0], displaced: false } +provenance geometry 0..1: /World/C +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: None, cameras: [], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: None, offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/stage_usda-2ffe73dbb471510a-1.image b/crates/crust-core/tests/data/import_baselines/stage_usda-2ffe73dbb471510a-1.image new file mode 100644 index 000000000..7bf6cc326 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/stage_usda-2ffe73dbb471510a-1.image @@ -0,0 +1 @@ +640x360 16spp clamp-off e6be38d02a9e05a8 diff --git a/crates/crust-core/tests/data/import_baselines/stage_usda-323a3e02a1f4d7b0-1.digest b/crates/crust-core/tests/data/import_baselines/stage_usda-323a3e02a1f4d7b0-1.digest new file mode 100644 index 000000000..d7c4d3594 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/stage_usda-323a3e02a1f4d7b0-1.digest @@ -0,0 +1,16 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/World/cam") +camera: Camera { origin: Vec3A(0.0, 0.0, 0.0), lower_left_corner: Vec3A(-2.7183647, -1.5290802, -10.0), horizontal: Vec3A(5.4367294, 0.0, 0.0), vertical: Vec3A(0.0, 3.0581603, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: None +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 640, height: 360, region: PixelRect { x0: 0, y0: 0, x1: 640, y1: 360 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 50.0, aperture: [20.955, 15.2908], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 10.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/stage.usda"], invisible_overrides: Some(0) } +layer: $DIR/stage.usda +lights: 0 +volumes: 0 +world: 0 geometries, PrimitiveBreakdown { triangles: 0, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 0, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: true, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/World/cam"), cameras: ["/World/cam"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/World/cam"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/stage_usda-323a3e02a1f4d7b0-1.image b/crates/crust-core/tests/data/import_baselines/stage_usda-323a3e02a1f4d7b0-1.image new file mode 100644 index 000000000..c734c5b1d --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/stage_usda-323a3e02a1f4d7b0-1.image @@ -0,0 +1 @@ +640x360 16spp clamp-off a04a09c0d4b5e325 diff --git a/crates/crust-core/tests/data/import_baselines/stage_usda-340b07ebab8f9091-1.digest b/crates/crust-core/tests/data/import_baselines/stage_usda-340b07ebab8f9091-1.digest new file mode 100644 index 000000000..ad7f415ec --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/stage_usda-340b07ebab8f9091-1.digest @@ -0,0 +1,20 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: None +camera: Camera { origin: Vec3A(15.0, 3.0, 3.0), lower_left_corner: Vec3A(4.8863316, -0.044797063, 4.174048), horizontal: Vec3A(1.2295314, 0.0, -6.147657), vertical: Vec3A(-0.44830504, 3.4967792, -0.08966101), u: Vec3A(0.19611613, 0.0, -0.9805807), v: Vec3A(-0.1271232, 0.991561, -0.02542464), lens_radius: 0.05, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: None +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 640, height: 360, region: PixelRect { x0: 0, y0: 0, x1: 640, y1: 360 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: None, depth_of_field: true, motion_blur: false, layer_stack: ["$DIR/stage.usda"], invisible_overrides: Some(0) } +layer: $DIR/stage.usda +warning: Warning { code: CameraMissing, kind: Skipped, count: 1, prims: [], message: "USD stage has no UsdGeomCamera — falling back to world::get_settings camera" } +lights: 0 +volumes: 0 +world: 1 geometries, PrimitiveBreakdown { triangles: 0, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 1 } top level, PrimitiveBreakdown { triangles: 0, spheres: 0, disks: 0, cylinders: 0, curve_segments: 1, cubic_curve_spans: 0, instances: 1 } unique, motion false +geom 0: material #0 Signature { kind: "MaterialX", cutout: false, straight: false, boundary: false, emits: true, uv: true, uv_primvar: None, face_texture: None, curve: Some((false, true, ["tint"])), primvars: None } class 65535 holdout false transparent false map None uv None shading None strands Some(0) aov None swapped false curves true scale 1.0 motion [] pieces all=1:ba28ac43777139fb camera=1:ba28ac43777139fb shadow=1:ba28ac43777139fb indirect=1:ba28ac43777139fb +provenance material /World/Looks/M: MaterialOrigin { slots: [0], displaced: false } +provenance geometry 0..1: /World/C +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: None, cameras: [], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: None, offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/stage_usda-340b07ebab8f9091-1.image b/crates/crust-core/tests/data/import_baselines/stage_usda-340b07ebab8f9091-1.image new file mode 100644 index 000000000..ddd05b285 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/stage_usda-340b07ebab8f9091-1.image @@ -0,0 +1 @@ +640x360 16spp clamp-off f9a6cf9848bb1592 diff --git a/crates/crust-core/tests/data/import_baselines/stage_usda-3622e7d90bc81d34-1.digest b/crates/crust-core/tests/data/import_baselines/stage_usda-3622e7d90bc81d34-1.digest new file mode 100644 index 000000000..45db059fd --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/stage_usda-3622e7d90bc81d34-1.digest @@ -0,0 +1,17 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: None +camera: Camera { origin: Vec3A(15.0, 3.0, 3.0), lower_left_corner: Vec3A(4.8863316, -0.044797063, 4.174048), horizontal: Vec3A(1.2295314, 0.0, -6.147657), vertical: Vec3A(-0.44830504, 3.4967792, -0.08966101), u: Vec3A(0.19611613, 0.0, -0.9805807), v: Vec3A(-0.1271232, 0.991561, -0.02542464), lens_radius: 0.05, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: None +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 640, height: 360, region: PixelRect { x0: 0, y0: 0, x1: 640, y1: 360 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: None, depth_of_field: true, motion_blur: false, layer_stack: ["$DIR/stage.usda"], invisible_overrides: Some(0) } +layer: $DIR/stage.usda +warning: Warning { code: CameraMissing, kind: Skipped, count: 1, prims: [], message: "USD stage has no UsdGeomCamera — falling back to world::get_settings camera" } +lights: 0 +volumes: 0 +world: 0 geometries, PrimitiveBreakdown { triangles: 0, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 0, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: None, cameras: [], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: None, offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/stage_usda-3622e7d90bc81d34-1.image b/crates/crust-core/tests/data/import_baselines/stage_usda-3622e7d90bc81d34-1.image new file mode 100644 index 000000000..c734c5b1d --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/stage_usda-3622e7d90bc81d34-1.image @@ -0,0 +1 @@ +640x360 16spp clamp-off a04a09c0d4b5e325 diff --git a/crates/crust-core/tests/data/import_baselines/stage_usda-370b26846e2e31bd-1.digest b/crates/crust-core/tests/data/import_baselines/stage_usda-370b26846e2e31bd-1.digest new file mode 100644 index 000000000..c5e9a3ecf --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/stage_usda-370b26846e2e31bd-1.digest @@ -0,0 +1,20 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: None +camera: Camera { origin: Vec3A(15.0, 3.0, 3.0), lower_left_corner: Vec3A(4.8863316, -0.044797063, 4.174048), horizontal: Vec3A(1.2295314, 0.0, -6.147657), vertical: Vec3A(-0.44830504, 3.4967792, -0.08966101), u: Vec3A(0.19611613, 0.0, -0.9805807), v: Vec3A(-0.1271232, 0.991561, -0.02542464), lens_radius: 0.05, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: None +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 640, height: 360, region: PixelRect { x0: 0, y0: 0, x1: 640, y1: 360 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: None, depth_of_field: true, motion_blur: false, layer_stack: ["$DIR/stage.usda"], invisible_overrides: Some(0) } +layer: $DIR/stage.usda +warning: Warning { code: CameraMissing, kind: Skipped, count: 1, prims: [], message: "USD stage has no UsdGeomCamera — falling back to world::get_settings camera" } +lights: 0 +volumes: 0 +world: 1 geometries, PrimitiveBreakdown { triangles: 0, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 1 } top level, PrimitiveBreakdown { triangles: 0, spheres: 0, disks: 0, cylinders: 0, curve_segments: 3, cubic_curve_spans: 0, instances: 1 } unique, motion false +geom 0: material #0 Signature { kind: "MaterialX", cutout: false, straight: false, boundary: false, emits: true, uv: true, uv_primvar: None, face_texture: None, curve: Some((false, true, ["strandId"])), primvars: None } class 65535 holdout false transparent false map None uv None shading None strands Some(0) aov None swapped false curves true scale 1.0 motion [] pieces all=3:1fef49a575dc157a camera=3:1fef49a575dc157a shadow=3:1fef49a575dc157a indirect=3:1fef49a575dc157a +provenance material /World/Looks/M: MaterialOrigin { slots: [0], displaced: false } +provenance geometry 0..1: /World/C +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: None, cameras: [], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: None, offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/stage_usda-370b26846e2e31bd-1.image b/crates/crust-core/tests/data/import_baselines/stage_usda-370b26846e2e31bd-1.image new file mode 100644 index 000000000..8a765116c --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/stage_usda-370b26846e2e31bd-1.image @@ -0,0 +1 @@ +640x360 16spp clamp-off 53c5c55e5b6a90ec diff --git a/crates/crust-core/tests/data/import_baselines/stage_usda-370b26846e2e31bd-2.digest b/crates/crust-core/tests/data/import_baselines/stage_usda-370b26846e2e31bd-2.digest new file mode 100644 index 000000000..17ba30c41 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/stage_usda-370b26846e2e31bd-2.digest @@ -0,0 +1,20 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: None +camera: Camera { origin: Vec3A(15.0, 3.0, 3.0), lower_left_corner: Vec3A(4.8863316, -0.044797063, 4.174048), horizontal: Vec3A(1.2295314, 0.0, -6.147657), vertical: Vec3A(-0.44830504, 3.4967792, -0.08966101), u: Vec3A(0.19611613, 0.0, -0.9805807), v: Vec3A(-0.1271232, 0.991561, -0.02542464), lens_radius: 0.05, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: None +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 640, height: 360, region: PixelRect { x0: 0, y0: 0, x1: 640, y1: 360 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: None, depth_of_field: true, motion_blur: false, layer_stack: ["$DIR/stage.usda"], invisible_overrides: Some(0) } +layer: $DIR/stage.usda +warning: Warning { code: CameraMissing, kind: Skipped, count: 1, prims: [], message: "USD stage has no UsdGeomCamera — falling back to world::get_settings camera" } +lights: 0 +volumes: 0 +world: 1 geometries, PrimitiveBreakdown { triangles: 0, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 1 } top level, PrimitiveBreakdown { triangles: 0, spheres: 0, disks: 0, cylinders: 0, curve_segments: 3, cubic_curve_spans: 0, instances: 1 } unique, motion false +geom 0: material #0 Signature { kind: "MaterialX", cutout: false, straight: false, boundary: false, emits: true, uv: true, uv_primvar: None, face_texture: None, curve: Some((false, true, [])), primvars: None } class 65535 holdout false transparent false map None uv None shading None strands Some(0) aov None swapped false curves true scale 1.0 motion [] pieces all=3:1fef49a575dc157a camera=3:1fef49a575dc157a shadow=3:1fef49a575dc157a indirect=3:1fef49a575dc157a +provenance material /World/Looks/M: MaterialOrigin { slots: [0], displaced: false } +provenance geometry 0..1: /World/C +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: None, cameras: [], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: None, offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/stage_usda-370b26846e2e31bd-2.image b/crates/crust-core/tests/data/import_baselines/stage_usda-370b26846e2e31bd-2.image new file mode 100644 index 000000000..921506d81 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/stage_usda-370b26846e2e31bd-2.image @@ -0,0 +1 @@ +640x360 16spp clamp-off e7125bb88c8183e3 diff --git a/crates/crust-core/tests/data/import_baselines/stage_usda-37a86d28c7d197ed-1.digest b/crates/crust-core/tests/data/import_baselines/stage_usda-37a86d28c7d197ed-1.digest new file mode 100644 index 000000000..965cec79f --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/stage_usda-37a86d28c7d197ed-1.digest @@ -0,0 +1,23 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: None +camera: Camera { origin: Vec3A(15.0, 3.0, 3.0), lower_left_corner: Vec3A(4.8863316, -0.044797063, 4.174048), horizontal: Vec3A(1.2295314, 0.0, -6.147657), vertical: Vec3A(-0.44830504, 3.4967792, -0.08966101), u: Vec3A(0.19611613, 0.0, -0.9805807), v: Vec3A(-0.1271232, 0.991561, -0.02542464), lens_radius: 0.05, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: None +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 640, height: 360, region: PixelRect { x0: 0, y0: 0, x1: 640, y1: 360 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: None, depth_of_field: true, motion_blur: false, layer_stack: ["$DIR/stage.usda"], invisible_overrides: Some(0) } +layer: $DIR/stage.usda +warning: Warning { code: MeshUnsupportedPrimvar, kind: Skipped, count: 1, prims: ["/World/Q"], message: "/World/Q: primvars:label is a float[] (authored empty) — the material reads its geompropvalue's default there" } +warning: Warning { code: CameraMissing, kind: Skipped, count: 1, prims: [], message: "USD stage has no UsdGeomCamera — falling back to world::get_settings camera" } +lights: 0 +volumes: 0 +world: 1 geometries, PrimitiveBreakdown { triangles: 4, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 4, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +geom 0: material #0 Signature { kind: "MaterialX", cutout: false, straight: false, boundary: false, emits: true, uv: true, uv_primvar: None, face_texture: None, curve: None, primvars: Some(["label"]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=4:f842628536678af5 camera=4:f842628536678af5 shadow=4:f842628536678af5 indirect=4:f842628536678af5 +provenance material /World/Looks/M: MaterialOrigin { slots: [0], displaced: false } +provenance geometry 0..1: /World/Q +provenance mesh: MeshOrigin { geom_id: 0, slot: 0, baked: true, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 17828304714785378767, n_points: 6, n_indices: 8, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: None, cameras: [], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: None, offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/stage_usda-37a86d28c7d197ed-1.image b/crates/crust-core/tests/data/import_baselines/stage_usda-37a86d28c7d197ed-1.image new file mode 100644 index 000000000..45c7c7673 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/stage_usda-37a86d28c7d197ed-1.image @@ -0,0 +1 @@ +640x360 16spp clamp-off a9b43f7c7735c3fb diff --git a/crates/crust-core/tests/data/import_baselines/stage_usda-3c67a25a0a341efb-1.digest b/crates/crust-core/tests/data/import_baselines/stage_usda-3c67a25a0a341efb-1.digest new file mode 100644 index 000000000..c72026c73 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/stage_usda-3c67a25a0a341efb-1.digest @@ -0,0 +1,21 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: None +camera: Camera { origin: Vec3A(15.0, 3.0, 3.0), lower_left_corner: Vec3A(4.8863316, -0.044797063, 4.174048), horizontal: Vec3A(1.2295314, 0.0, -6.147657), vertical: Vec3A(-0.44830504, 3.4967792, -0.08966101), u: Vec3A(0.19611613, 0.0, -0.9805807), v: Vec3A(-0.1271232, 0.991561, -0.02542464), lens_radius: 0.05, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: None +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 640, height: 360, region: PixelRect { x0: 0, y0: 0, x1: 640, y1: 360 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: None, depth_of_field: true, motion_blur: false, layer_stack: ["$DIR/stage.usda"], invisible_overrides: Some(0) } +layer: $DIR/stage.usda +warning: Warning { code: TextureTxStale, kind: Approximated, count: 1, prims: [], message: "$DIR/srgb_canon.png: 1 .tx tile(s) whose modification time is not their source's, used anyway — rerun with --auto-tx to reconvert" } +warning: Warning { code: CameraMissing, kind: Skipped, count: 1, prims: [], message: "USD stage has no UsdGeomCamera — falling back to world::get_settings camera" } +lights: 0 +volumes: 0 +world: 1 geometries, PrimitiveBreakdown { triangles: 0, spheres: 1, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 0, spheres: 1, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +geom 0: material #0 Signature { kind: "UsdPreviewSurface (textured)", cutout: false, straight: false, boundary: false, emits: false, uv: true, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:fb1e7d48790aec95 camera=1:fb1e7d48790aec95 shadow=1:fb1e7d48790aec95 indirect=1:fb1e7d48790aec95 +provenance material /World/M: MaterialOrigin { slots: [0], displaced: false } +provenance geometry 0..1: /World/ball +provenance spheres: [0] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: None, cameras: [], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: None, offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/stage_usda-3c67a25a0a341efb-1.image b/crates/crust-core/tests/data/import_baselines/stage_usda-3c67a25a0a341efb-1.image new file mode 100644 index 000000000..c734c5b1d --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/stage_usda-3c67a25a0a341efb-1.image @@ -0,0 +1 @@ +640x360 16spp clamp-off a04a09c0d4b5e325 diff --git a/crates/crust-core/tests/data/import_baselines/stage_usda-3effc82524d047c7-1.digest b/crates/crust-core/tests/data/import_baselines/stage_usda-3effc82524d047c7-1.digest new file mode 100644 index 000000000..a03b0328a --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/stage_usda-3effc82524d047c7-1.digest @@ -0,0 +1,22 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: None +camera: Camera { origin: Vec3A(15.0, 3.0, 3.0), lower_left_corner: Vec3A(4.8863316, -0.044797063, 4.174048), horizontal: Vec3A(1.2295314, 0.0, -6.147657), vertical: Vec3A(-0.44830504, 3.4967792, -0.08966101), u: Vec3A(0.19611613, 0.0, -0.9805807), v: Vec3A(-0.1271232, 0.991561, -0.02542464), lens_radius: 0.05, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: None +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 640, height: 360, region: PixelRect { x0: 0, y0: 0, x1: 640, y1: 360 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: None, depth_of_field: true, motion_blur: false, layer_stack: ["$DIR/stage.usda"], invisible_overrides: Some(0) } +layer: $DIR/stage.usda +warning: Warning { code: CameraMissing, kind: Skipped, count: 1, prims: [], message: "USD stage has no UsdGeomCamera — falling back to world::get_settings camera" } +lights: 0 +volumes: 0 +world: 1 geometries, PrimitiveBreakdown { triangles: 4, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 4, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +geom 0: material #0 Signature { kind: "MaterialX", cutout: false, straight: false, boundary: false, emits: true, uv: true, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=4:f842628536678af5 camera=4:f842628536678af5 shadow=4:f842628536678af5 indirect=4:f842628536678af5 +provenance material /World/Looks/M: MaterialOrigin { slots: [0], displaced: false } +provenance geometry 0..1: /World/Q +provenance mesh: MeshOrigin { geom_id: 0, slot: 0, baked: true, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 6908817154990386932, n_points: 6, n_indices: 8, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: None, cameras: [], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: None, offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/stage_usda-3effc82524d047c7-1.image b/crates/crust-core/tests/data/import_baselines/stage_usda-3effc82524d047c7-1.image new file mode 100644 index 000000000..75a962c65 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/stage_usda-3effc82524d047c7-1.image @@ -0,0 +1 @@ +640x360 16spp clamp-off 5ca6413c3316b681 diff --git a/crates/crust-core/tests/data/import_baselines/stage_usda-3f9cd9ed5581414a-1.digest b/crates/crust-core/tests/data/import_baselines/stage_usda-3f9cd9ed5581414a-1.digest new file mode 100644 index 000000000..fe6947dc7 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/stage_usda-3f9cd9ed5581414a-1.digest @@ -0,0 +1,22 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: None +camera: Camera { origin: Vec3A(15.0, 3.0, 3.0), lower_left_corner: Vec3A(4.8863316, -0.044797063, 4.174048), horizontal: Vec3A(1.2295314, 0.0, -6.147657), vertical: Vec3A(-0.44830504, 3.4967792, -0.08966101), u: Vec3A(0.19611613, 0.0, -0.9805807), v: Vec3A(-0.1271232, 0.991561, -0.02542464), lens_radius: 0.05, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: None +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 640, height: 360, region: PixelRect { x0: 0, y0: 0, x1: 640, y1: 360 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: None, depth_of_field: true, motion_blur: false, layer_stack: ["$DIR/stage.usda"], invisible_overrides: Some(0) } +layer: $DIR/stage.usda +warning: Warning { code: CameraMissing, kind: Skipped, count: 1, prims: [], message: "USD stage has no UsdGeomCamera — falling back to world::get_settings camera" } +lights: 0 +volumes: 0 +world: 1 geometries, PrimitiveBreakdown { triangles: 4, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 4, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +geom 0: material #0 Signature { kind: "MaterialX", cutout: false, straight: false, boundary: false, emits: true, uv: true, uv_primvar: None, face_texture: None, curve: None, primvars: Some(["ramp"]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=4:f842628536678af5 camera=4:f842628536678af5 shadow=4:f842628536678af5 indirect=4:f842628536678af5 +provenance material /World/Looks/M: MaterialOrigin { slots: [0], displaced: false } +provenance geometry 0..1: /World/Q +provenance mesh: MeshOrigin { geom_id: 0, slot: 0, baked: true, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 15189769101381604747, n_points: 8, n_indices: 8, n_uvs: None, smooth: true, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: None, cameras: [], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: None, offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/stage_usda-3f9cd9ed5581414a-1.image b/crates/crust-core/tests/data/import_baselines/stage_usda-3f9cd9ed5581414a-1.image new file mode 100644 index 000000000..45c7c7673 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/stage_usda-3f9cd9ed5581414a-1.image @@ -0,0 +1 @@ +640x360 16spp clamp-off a9b43f7c7735c3fb diff --git a/crates/crust-core/tests/data/import_baselines/stage_usda-41ded1a4c5604d81-1.digest b/crates/crust-core/tests/data/import_baselines/stage_usda-41ded1a4c5604d81-1.digest new file mode 100644 index 000000000..2724ad8fc --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/stage_usda-41ded1a4c5604d81-1.digest @@ -0,0 +1,22 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: None +camera: Camera { origin: Vec3A(15.0, 3.0, 3.0), lower_left_corner: Vec3A(4.8863316, -0.044797063, 4.174048), horizontal: Vec3A(1.2295314, 0.0, -6.147657), vertical: Vec3A(-0.44830504, 3.4967792, -0.08966101), u: Vec3A(0.19611613, 0.0, -0.9805807), v: Vec3A(-0.1271232, 0.991561, -0.02542464), lens_radius: 0.05, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: None +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 640, height: 360, region: PixelRect { x0: 0, y0: 0, x1: 640, y1: 360 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: None, depth_of_field: true, motion_blur: false, layer_stack: ["$DIR/stage.usda"], invisible_overrides: Some(0) } +layer: $DIR/stage.usda +warning: Warning { code: CameraMissing, kind: Skipped, count: 1, prims: [], message: "USD stage has no UsdGeomCamera — falling back to world::get_settings camera" } +lights: 0 +volumes: 0 +world: 2 geometries, PrimitiveBreakdown { triangles: 0, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 2 } top level, PrimitiveBreakdown { triangles: 0, spheres: 0, disks: 0, cylinders: 0, curve_segments: 2, cubic_curve_spans: 0, instances: 2 } unique, motion false +geom 0: material #0 Signature { kind: "MaterialX", cutout: false, straight: false, boundary: false, emits: true, uv: true, uv_primvar: None, face_texture: None, curve: Some((false, true, [])), primvars: None } class 65535 holdout false transparent false map None uv None shading None strands Some(0) aov None swapped false curves true scale 1.0 motion [] pieces all=1:c162abc6e963ca71 camera=1:c162abc6e963ca71 shadow=1:c162abc6e963ca71 indirect=1:c162abc6e963ca71 +geom 1: material #0 Signature { kind: "MaterialX", cutout: false, straight: false, boundary: false, emits: true, uv: true, uv_primvar: None, face_texture: None, curve: Some((false, true, [])), primvars: None } class 65535 holdout false transparent false map None uv None shading None strands Some(1) aov None swapped false curves true scale 1.0 motion [] pieces all=1:ba28ac43777139fb camera=1:ba28ac43777139fb shadow=1:ba28ac43777139fb indirect=1:ba28ac43777139fb +provenance material /World/Looks/M: MaterialOrigin { slots: [0, 1], displaced: false } +provenance geometry 0..1: /World/B +provenance geometry 1..2: /World/A +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: None, cameras: [], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: None, offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/stage_usda-41ded1a4c5604d81-1.image b/crates/crust-core/tests/data/import_baselines/stage_usda-41ded1a4c5604d81-1.image new file mode 100644 index 000000000..a527455fa --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/stage_usda-41ded1a4c5604d81-1.image @@ -0,0 +1 @@ +640x360 16spp clamp-off fa92bb7b7c98d4ac diff --git a/crates/crust-core/tests/data/import_baselines/stage_usda-41ded1a4c5604d81-2.digest b/crates/crust-core/tests/data/import_baselines/stage_usda-41ded1a4c5604d81-2.digest new file mode 100644 index 000000000..2724ad8fc --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/stage_usda-41ded1a4c5604d81-2.digest @@ -0,0 +1,22 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: None +camera: Camera { origin: Vec3A(15.0, 3.0, 3.0), lower_left_corner: Vec3A(4.8863316, -0.044797063, 4.174048), horizontal: Vec3A(1.2295314, 0.0, -6.147657), vertical: Vec3A(-0.44830504, 3.4967792, -0.08966101), u: Vec3A(0.19611613, 0.0, -0.9805807), v: Vec3A(-0.1271232, 0.991561, -0.02542464), lens_radius: 0.05, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: None +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 640, height: 360, region: PixelRect { x0: 0, y0: 0, x1: 640, y1: 360 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: None, depth_of_field: true, motion_blur: false, layer_stack: ["$DIR/stage.usda"], invisible_overrides: Some(0) } +layer: $DIR/stage.usda +warning: Warning { code: CameraMissing, kind: Skipped, count: 1, prims: [], message: "USD stage has no UsdGeomCamera — falling back to world::get_settings camera" } +lights: 0 +volumes: 0 +world: 2 geometries, PrimitiveBreakdown { triangles: 0, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 2 } top level, PrimitiveBreakdown { triangles: 0, spheres: 0, disks: 0, cylinders: 0, curve_segments: 2, cubic_curve_spans: 0, instances: 2 } unique, motion false +geom 0: material #0 Signature { kind: "MaterialX", cutout: false, straight: false, boundary: false, emits: true, uv: true, uv_primvar: None, face_texture: None, curve: Some((false, true, [])), primvars: None } class 65535 holdout false transparent false map None uv None shading None strands Some(0) aov None swapped false curves true scale 1.0 motion [] pieces all=1:c162abc6e963ca71 camera=1:c162abc6e963ca71 shadow=1:c162abc6e963ca71 indirect=1:c162abc6e963ca71 +geom 1: material #0 Signature { kind: "MaterialX", cutout: false, straight: false, boundary: false, emits: true, uv: true, uv_primvar: None, face_texture: None, curve: Some((false, true, [])), primvars: None } class 65535 holdout false transparent false map None uv None shading None strands Some(1) aov None swapped false curves true scale 1.0 motion [] pieces all=1:ba28ac43777139fb camera=1:ba28ac43777139fb shadow=1:ba28ac43777139fb indirect=1:ba28ac43777139fb +provenance material /World/Looks/M: MaterialOrigin { slots: [0, 1], displaced: false } +provenance geometry 0..1: /World/B +provenance geometry 1..2: /World/A +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: None, cameras: [], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: None, offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/stage_usda-41ded1a4c5604d81-2.image b/crates/crust-core/tests/data/import_baselines/stage_usda-41ded1a4c5604d81-2.image new file mode 100644 index 000000000..a527455fa --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/stage_usda-41ded1a4c5604d81-2.image @@ -0,0 +1 @@ +640x360 16spp clamp-off fa92bb7b7c98d4ac diff --git a/crates/crust-core/tests/data/import_baselines/stage_usda-48e70f6118b1f181-1.digest b/crates/crust-core/tests/data/import_baselines/stage_usda-48e70f6118b1f181-1.digest new file mode 100644 index 000000000..dd1c474f5 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/stage_usda-48e70f6118b1f181-1.digest @@ -0,0 +1,16 @@ +time: Some(5.5) +working space: Linear Rec.709 (sRGB) +camera path: Some("/World/cam") +camera: Camera { origin: Vec3A(0.0, 0.0, 0.0), lower_left_corner: Vec3A(-3.0581603, -1.5290802, -10.0), horizontal: Vec3A(6.1163206, 0.0, 0.0), vertical: Vec3A(0.0, 3.0581603, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: Some("/Render/settings") +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 32, height: 16, region: PixelRect { x0: 0, y0: 0, x1: 32, y1: 16 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 5, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [AovProduct { prim_path: "/Render/main", name: "renders/beauty.$F4.exr", vars: [AovVar { prim_path: "/Render/color", name: "color", channel_prefix: None, source: Color, components: 4, precision: Float, accumulation: Filtered, clear: 0.0, expression: None, raw: false, variance: false }], attributes: [] }, AovProduct { prim_path: "/Render/udim", name: "renders/raw..exr", vars: [AovVar { prim_path: "/Render/color", name: "color", channel_prefix: None, source: Color, components: 4, precision: Float, accumulation: Filtered, clear: 0.0, expression: None, raw: false, variance: false }], attributes: [] }, AovProduct { prim_path: "/Render/again", name: "renders/beauty.0005.exr", vars: [AovVar { prim_path: "/Render/color", name: "color", channel_prefix: None, source: Color, components: 4, precision: Float, accumulation: Filtered, clear: 0.0, expression: None, raw: false, variance: false }], attributes: [] }], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 50.0, aperture: [20.955, 15.2908], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 10.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/stage.usda"], invisible_overrides: Some(0) } +layer: $DIR/stage.usda +lights: 0 +volumes: 0 +world: 0 geometries, PrimitiveBreakdown { triangles: 0, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 0, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: Some(5.5), camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: true, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/World/cam"), cameras: ["/World/cam"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/World/cam"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/stage_usda-48e70f6118b1f181-1.image b/crates/crust-core/tests/data/import_baselines/stage_usda-48e70f6118b1f181-1.image new file mode 100644 index 000000000..f0b9b5b6b --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/stage_usda-48e70f6118b1f181-1.image @@ -0,0 +1 @@ +32x16 16spp clamp-off 6df0de0551480325 diff --git a/crates/crust-core/tests/data/import_baselines/stage_usda-49f9cb3e8a3fb9fb-1.digest b/crates/crust-core/tests/data/import_baselines/stage_usda-49f9cb3e8a3fb9fb-1.digest new file mode 100644 index 000000000..74521d4e0 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/stage_usda-49f9cb3e8a3fb9fb-1.digest @@ -0,0 +1,20 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: None +camera: Camera { origin: Vec3A(15.0, 3.0, 3.0), lower_left_corner: Vec3A(4.8863316, -0.044797063, 4.174048), horizontal: Vec3A(1.2295314, 0.0, -6.147657), vertical: Vec3A(-0.44830504, 3.4967792, -0.08966101), u: Vec3A(0.19611613, 0.0, -0.9805807), v: Vec3A(-0.1271232, 0.991561, -0.02542464), lens_radius: 0.05, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: None +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 640, height: 360, region: PixelRect { x0: 0, y0: 0, x1: 640, y1: 360 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: None, depth_of_field: true, motion_blur: false, layer_stack: ["$DIR/stage.usda"], invisible_overrides: Some(0) } +layer: $DIR/stage.usda +warning: Warning { code: CameraMissing, kind: Skipped, count: 1, prims: [], message: "USD stage has no UsdGeomCamera — falling back to world::get_settings camera" } +lights: 0 +volumes: 0 +world: 1 geometries, PrimitiveBreakdown { triangles: 0, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 1 } top level, PrimitiveBreakdown { triangles: 0, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 1, instances: 1 } unique, motion false +geom 0: material #0 Signature { kind: "MaterialX", cutout: false, straight: false, boundary: false, emits: true, uv: true, uv_primvar: None, face_texture: None, curve: Some((false, true, [])), primvars: None } class 65535 holdout false transparent false map None uv None shading None strands Some(0) aov None swapped false curves true scale 1.0 motion [] pieces all=1:01ad48faca6d45bb camera=1:01ad48faca6d45bb shadow=1:01ad48faca6d45bb indirect=1:01ad48faca6d45bb +provenance material /World/Looks/M: MaterialOrigin { slots: [0], displaced: false } +provenance geometry 0..1: /World/N +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: None, cameras: [], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: None, offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/stage_usda-49f9cb3e8a3fb9fb-1.image b/crates/crust-core/tests/data/import_baselines/stage_usda-49f9cb3e8a3fb9fb-1.image new file mode 100644 index 000000000..c1e4a588d --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/stage_usda-49f9cb3e8a3fb9fb-1.image @@ -0,0 +1 @@ +640x360 16spp clamp-off 4b15a79ca2ef8e64 diff --git a/crates/crust-core/tests/data/import_baselines/stage_usda-4a064c9610d45212-1.digest b/crates/crust-core/tests/data/import_baselines/stage_usda-4a064c9610d45212-1.digest new file mode 100644 index 000000000..d7c4d3594 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/stage_usda-4a064c9610d45212-1.digest @@ -0,0 +1,16 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/World/cam") +camera: Camera { origin: Vec3A(0.0, 0.0, 0.0), lower_left_corner: Vec3A(-2.7183647, -1.5290802, -10.0), horizontal: Vec3A(5.4367294, 0.0, 0.0), vertical: Vec3A(0.0, 3.0581603, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: None +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 640, height: 360, region: PixelRect { x0: 0, y0: 0, x1: 640, y1: 360 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 50.0, aperture: [20.955, 15.2908], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 10.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/stage.usda"], invisible_overrides: Some(0) } +layer: $DIR/stage.usda +lights: 0 +volumes: 0 +world: 0 geometries, PrimitiveBreakdown { triangles: 0, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 0, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: true, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/World/cam"), cameras: ["/World/cam"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/World/cam"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/stage_usda-4a064c9610d45212-1.image b/crates/crust-core/tests/data/import_baselines/stage_usda-4a064c9610d45212-1.image new file mode 100644 index 000000000..c734c5b1d --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/stage_usda-4a064c9610d45212-1.image @@ -0,0 +1 @@ +640x360 16spp clamp-off a04a09c0d4b5e325 diff --git a/crates/crust-core/tests/data/import_baselines/stage_usda-4f30830cd0cff6cf-1.digest b/crates/crust-core/tests/data/import_baselines/stage_usda-4f30830cd0cff6cf-1.digest new file mode 100644 index 000000000..fc58bf6f4 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/stage_usda-4f30830cd0cff6cf-1.digest @@ -0,0 +1,22 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: None +camera: Camera { origin: Vec3A(15.0, 3.0, 3.0), lower_left_corner: Vec3A(4.8863316, -0.044797063, 4.174048), horizontal: Vec3A(1.2295314, 0.0, -6.147657), vertical: Vec3A(-0.44830504, 3.4967792, -0.08966101), u: Vec3A(0.19611613, 0.0, -0.9805807), v: Vec3A(-0.1271232, 0.991561, -0.02542464), lens_radius: 0.05, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: None +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 640, height: 360, region: PixelRect { x0: 0, y0: 0, x1: 640, y1: 360 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: None, depth_of_field: true, motion_blur: false, layer_stack: ["$DIR/stage.usda"], invisible_overrides: Some(0) } +layer: $DIR/stage.usda +warning: Warning { code: CameraMissing, kind: Skipped, count: 1, prims: [], message: "USD stage has no UsdGeomCamera — falling back to world::get_settings camera" } +lights: 0 +volumes: 0 +world: 1 geometries, PrimitiveBreakdown { triangles: 4, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 4, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +geom 0: material #0 Signature { kind: "MaterialX", cutout: false, straight: false, boundary: false, emits: true, uv: true, uv_primvar: None, face_texture: None, curve: None, primvars: Some(["ramp"]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=4:f842628536678af5 camera=4:f842628536678af5 shadow=4:f842628536678af5 indirect=4:f842628536678af5 +provenance material /World/Looks/M: MaterialOrigin { slots: [0], displaced: false } +provenance geometry 0..1: /World/Q +provenance mesh: MeshOrigin { geom_id: 0, slot: 0, baked: true, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 17893806835409548195, n_points: 8, n_indices: 8, n_uvs: None, smooth: true, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: None, cameras: [], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: None, offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/stage_usda-4f30830cd0cff6cf-1.image b/crates/crust-core/tests/data/import_baselines/stage_usda-4f30830cd0cff6cf-1.image new file mode 100644 index 000000000..45c7c7673 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/stage_usda-4f30830cd0cff6cf-1.image @@ -0,0 +1 @@ +640x360 16spp clamp-off a9b43f7c7735c3fb diff --git a/crates/crust-core/tests/data/import_baselines/stage_usda-520aa0db2cddfe4a-1.digest b/crates/crust-core/tests/data/import_baselines/stage_usda-520aa0db2cddfe4a-1.digest new file mode 100644 index 000000000..cf76a884e --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/stage_usda-520aa0db2cddfe4a-1.digest @@ -0,0 +1,21 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/World/cam") +camera: Camera { origin: Vec3A(0.0, 0.0, 0.0), lower_left_corner: Vec3A(-2.7183647, -1.5290802, -10.0), horizontal: Vec3A(5.4367294, 0.0, 0.0), vertical: Vec3A(0.0, 3.0581603, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: None +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 640, height: 360, region: PixelRect { x0: 0, y0: 0, x1: 640, y1: 360 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 50.0, aperture: [20.955, 15.2908], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 10.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/stage.usda"], invisible_overrides: Some(0) } +layer: $DIR/stage.usda +lights: 0 +volumes: 0 +world: 1 geometries, PrimitiveBreakdown { triangles: 2, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 2, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +geom 0: material #0 Signature { kind: "MaterialX", cutout: false, straight: false, boundary: false, emits: false, uv: true, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:641133ab27378425 camera=2:641133ab27378425 shadow=2:641133ab27378425 indirect=2:641133ab27378425 +provenance material /World/Looks/M: MaterialOrigin { slots: [0], displaced: false } +provenance geometry 0..1: /World/Quad +provenance mesh: MeshOrigin { geom_id: 0, slot: 0, baked: true, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 6920314679913877878, n_points: 4, n_indices: 4, n_uvs: None, smooth: true, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: true, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/World/cam"), cameras: ["/World/cam"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [NodeDef { name: "studio_mix", node: "studio_mix", inputs: [DefInput { name: "fg_color", type_name: "color3", value: Some(Val { v: [0.0, 0.0, 0.0, 0.0], arity: 3 }), text: Some("0, 0, 0") }, DefInput { name: "bg_color", type_name: "color3", value: Some(Val { v: [0.0, 0.0, 0.0, 0.0], arity: 3 }), text: Some("0, 0, 0") }, DefInput { name: "amount", type_name: "float", value: Some(Val { v: [0.5, 0.5, 0.5, 0.5], arity: 1 }), text: Some("0.5") }], outputs: [DefOutput { name: "blended", type_name: "color3" }], inherit: None, version: None, default_version: false }], by_name: {"studio_mix": 0}, impls: {"studio_mix": Implementation { name: "NG_studio_mix", nodedef: "studio_mix", nodes: [Node { category: "mix", name: "mix", type_name: "color3", inputs: [Input { name: "bg", type_name: "color3", source: Value(Val { v: [0.0, 0.0, 0.0, 0.0], arity: 1 }), colorspace: None, text: None, interface: Some("bg_color") }, Input { name: "fg", type_name: "color3", source: Value(Val { v: [0.0, 0.0, 0.0, 0.0], arity: 1 }), colorspace: None, text: None, interface: Some("fg_color") }, Input { name: "mix", type_name: "float", source: Value(Val { v: [0.0, 0.0, 0.0, 0.0], arity: 1 }), colorspace: None, text: None, interface: Some("amount") }], graph: Some("NG_studio_mix"), version: None, colorspace: None }], outputs: [ImplOutput { name: "blended", type_name: "color3", node: "mix", output: None }] }}, files: ["$DIR/lib/blend.mtlx"] }, shutter: ShutterKey { camera: Some("/World/cam"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/stage_usda-520aa0db2cddfe4a-1.image b/crates/crust-core/tests/data/import_baselines/stage_usda-520aa0db2cddfe4a-1.image new file mode 100644 index 000000000..c734c5b1d --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/stage_usda-520aa0db2cddfe4a-1.image @@ -0,0 +1 @@ +640x360 16spp clamp-off a04a09c0d4b5e325 diff --git a/crates/crust-core/tests/data/import_baselines/stage_usda-54895eac26b3d68b-1.digest b/crates/crust-core/tests/data/import_baselines/stage_usda-54895eac26b3d68b-1.digest new file mode 100644 index 000000000..5f871fa06 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/stage_usda-54895eac26b3d68b-1.digest @@ -0,0 +1,16 @@ +time: Some(5.0) +working space: Linear Rec.709 (sRGB) +camera path: Some("/World/cam") +camera: Camera { origin: Vec3A(0.0, 0.0, 0.0), lower_left_corner: Vec3A(-3.0581603, -1.5290802, -10.0), horizontal: Vec3A(6.1163206, 0.0, 0.0), vertical: Vec3A(0.0, 3.0581603, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: Some("/Render/settings") +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 32, height: 16, region: PixelRect { x0: 0, y0: 0, x1: 32, y1: 16 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 5, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [AovProduct { prim_path: "/Render/main", name: "renders/beauty.$F4.exr", vars: [AovVar { prim_path: "/Render/color", name: "color", channel_prefix: None, source: Color, components: 4, precision: Float, accumulation: Filtered, clear: 0.0, expression: None, raw: false, variance: false }], attributes: [] }, AovProduct { prim_path: "/Render/udim", name: "renders/raw..exr", vars: [AovVar { prim_path: "/Render/color", name: "color", channel_prefix: None, source: Color, components: 4, precision: Float, accumulation: Filtered, clear: 0.0, expression: None, raw: false, variance: false }], attributes: [] }, AovProduct { prim_path: "/Render/again", name: "renders/beauty.0005.exr", vars: [AovVar { prim_path: "/Render/color", name: "color", channel_prefix: None, source: Color, components: 4, precision: Float, accumulation: Filtered, clear: 0.0, expression: None, raw: false, variance: false }], attributes: [] }], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 50.0, aperture: [20.955, 15.2908], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 10.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/stage.usda"], invisible_overrides: Some(0) } +layer: $DIR/stage.usda +lights: 0 +volumes: 0 +world: 0 geometries, PrimitiveBreakdown { triangles: 0, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 0, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: Some(5.0), camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: true, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/World/cam"), cameras: ["/World/cam"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/World/cam"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/stage_usda-54895eac26b3d68b-1.image b/crates/crust-core/tests/data/import_baselines/stage_usda-54895eac26b3d68b-1.image new file mode 100644 index 000000000..f0b9b5b6b --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/stage_usda-54895eac26b3d68b-1.image @@ -0,0 +1 @@ +32x16 16spp clamp-off 6df0de0551480325 diff --git a/crates/crust-core/tests/data/import_baselines/stage_usda-5842de9c4816f088-1.digest b/crates/crust-core/tests/data/import_baselines/stage_usda-5842de9c4816f088-1.digest new file mode 100644 index 000000000..8836b0749 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/stage_usda-5842de9c4816f088-1.digest @@ -0,0 +1,21 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: None +camera: Camera { origin: Vec3A(15.0, 3.0, 3.0), lower_left_corner: Vec3A(4.8863316, -0.044797063, 4.174048), horizontal: Vec3A(1.2295314, 0.0, -6.147657), vertical: Vec3A(-0.44830504, 3.4967792, -0.08966101), u: Vec3A(0.19611613, 0.0, -0.9805807), v: Vec3A(-0.1271232, 0.991561, -0.02542464), lens_radius: 0.05, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: None +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 640, height: 360, region: PixelRect { x0: 0, y0: 0, x1: 640, y1: 360 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: None, depth_of_field: true, motion_blur: false, layer_stack: ["$DIR/stage.usda"], invisible_overrides: Some(0) } +layer: $DIR/stage.usda +warning: Warning { code: CurvesUnsupportedPrimvar, kind: Skipped, count: 1, prims: ["/World/C"], message: "/World/C: primvars:label has 3 values where its Vertex interpolation needs 2 — the material reads its default there" } +warning: Warning { code: CameraMissing, kind: Skipped, count: 1, prims: [], message: "USD stage has no UsdGeomCamera — falling back to world::get_settings camera" } +lights: 0 +volumes: 0 +world: 1 geometries, PrimitiveBreakdown { triangles: 0, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 1 } top level, PrimitiveBreakdown { triangles: 0, spheres: 0, disks: 0, cylinders: 0, curve_segments: 1, cubic_curve_spans: 0, instances: 1 } unique, motion false +geom 0: material #0 Signature { kind: "MaterialX", cutout: false, straight: false, boundary: false, emits: true, uv: true, uv_primvar: None, face_texture: None, curve: Some((false, true, ["label"])), primvars: None } class 65535 holdout false transparent false map None uv None shading None strands Some(0) aov None swapped false curves true scale 1.0 motion [] pieces all=1:ba28ac43777139fb camera=1:ba28ac43777139fb shadow=1:ba28ac43777139fb indirect=1:ba28ac43777139fb +provenance material /World/Looks/M: MaterialOrigin { slots: [0], displaced: false } +provenance geometry 0..1: /World/C +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: None, cameras: [], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: None, offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/stage_usda-5842de9c4816f088-1.image b/crates/crust-core/tests/data/import_baselines/stage_usda-5842de9c4816f088-1.image new file mode 100644 index 000000000..c734c5b1d --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/stage_usda-5842de9c4816f088-1.image @@ -0,0 +1 @@ +640x360 16spp clamp-off a04a09c0d4b5e325 diff --git a/crates/crust-core/tests/data/import_baselines/stage_usda-591315737502029a-1.digest b/crates/crust-core/tests/data/import_baselines/stage_usda-591315737502029a-1.digest new file mode 100644 index 000000000..f781d95dc --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/stage_usda-591315737502029a-1.digest @@ -0,0 +1,22 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: None +camera: Camera { origin: Vec3A(15.0, 3.0, 3.0), lower_left_corner: Vec3A(4.8863316, -0.044797063, 4.174048), horizontal: Vec3A(1.2295314, 0.0, -6.147657), vertical: Vec3A(-0.44830504, 3.4967792, -0.08966101), u: Vec3A(0.19611613, 0.0, -0.9805807), v: Vec3A(-0.1271232, 0.991561, -0.02542464), lens_radius: 0.05, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: None +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 640, height: 360, region: PixelRect { x0: 0, y0: 0, x1: 640, y1: 360 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: None, depth_of_field: true, motion_blur: false, layer_stack: ["$DIR/stage.usda"], invisible_overrides: Some(0) } +layer: $DIR/stage.usda +warning: Warning { code: CameraMissing, kind: Skipped, count: 1, prims: [], message: "USD stage has no UsdGeomCamera — falling back to world::get_settings camera" } +lights: 0 +volumes: 0 +world: 1 geometries, PrimitiveBreakdown { triangles: 4, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 4, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +geom 0: material #0 Signature { kind: "MaterialX", cutout: false, straight: false, boundary: false, emits: true, uv: true, uv_primvar: None, face_texture: None, curve: None, primvars: Some(["ramp"]) } class 65535 holdout false transparent false map None uv None shading Some(0) strands None aov None swapped false curves false scale 1.0 motion [] pieces all=4:f842628536678af5 camera=4:f842628536678af5 shadow=4:f842628536678af5 indirect=4:f842628536678af5 +provenance material /World/Looks/M: MaterialOrigin { slots: [0], displaced: false } +provenance geometry 0..1: /World/Q +provenance mesh: MeshOrigin { geom_id: 0, slot: 0, baked: true, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 7300176459579144609, n_points: 6, n_indices: 8, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: None, cameras: [], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: None, offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/stage_usda-591315737502029a-1.image b/crates/crust-core/tests/data/import_baselines/stage_usda-591315737502029a-1.image new file mode 100644 index 000000000..452a40d74 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/stage_usda-591315737502029a-1.image @@ -0,0 +1 @@ +640x360 16spp clamp-off da0d8844add128c3 diff --git a/crates/crust-core/tests/data/import_baselines/stage_usda-592ba3007488df6d-1.digest b/crates/crust-core/tests/data/import_baselines/stage_usda-592ba3007488df6d-1.digest new file mode 100644 index 000000000..a35b1deb6 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/stage_usda-592ba3007488df6d-1.digest @@ -0,0 +1,21 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: None +camera: Camera { origin: Vec3A(15.0, 3.0, 3.0), lower_left_corner: Vec3A(4.8863316, -0.044797063, 4.174048), horizontal: Vec3A(1.2295314, 0.0, -6.147657), vertical: Vec3A(-0.44830504, 3.4967792, -0.08966101), u: Vec3A(0.19611613, 0.0, -0.9805807), v: Vec3A(-0.1271232, 0.991561, -0.02542464), lens_radius: 0.05, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: None +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 640, height: 360, region: PixelRect { x0: 0, y0: 0, x1: 640, y1: 360 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: None, depth_of_field: true, motion_blur: false, layer_stack: ["$DIR/stage.usda"], invisible_overrides: Some(0) } +layer: $DIR/stage.usda +warning: Warning { code: CurvesReservedPrimvar, kind: Skipped, count: 1, prims: ["/World/C"], message: "/World/C: /World/C.primvars:curve:v is under primvars:curve:, the namespace of the curve properties — the material reads curve:v, curve:index and curve:random, not these" } +warning: Warning { code: CameraMissing, kind: Skipped, count: 1, prims: [], message: "USD stage has no UsdGeomCamera — falling back to world::get_settings camera" } +lights: 0 +volumes: 0 +world: 1 geometries, PrimitiveBreakdown { triangles: 0, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 1 } top level, PrimitiveBreakdown { triangles: 0, spheres: 0, disks: 0, cylinders: 0, curve_segments: 1, cubic_curve_spans: 0, instances: 1 } unique, motion false +geom 0: material #0 Signature { kind: "MaterialX", cutout: false, straight: false, boundary: false, emits: true, uv: true, uv_primvar: None, face_texture: None, curve: Some((false, true, [])), primvars: None } class 65535 holdout false transparent false map None uv None shading None strands Some(0) aov None swapped false curves true scale 1.0 motion [] pieces all=1:7a8114182eb4444e camera=1:7a8114182eb4444e shadow=1:7a8114182eb4444e indirect=1:7a8114182eb4444e +provenance material /World/Looks/M: MaterialOrigin { slots: [0], displaced: false } +provenance geometry 0..1: /World/C +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: None, cameras: [], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: None, offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/stage_usda-592ba3007488df6d-1.image b/crates/crust-core/tests/data/import_baselines/stage_usda-592ba3007488df6d-1.image new file mode 100644 index 000000000..73c7bc452 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/stage_usda-592ba3007488df6d-1.image @@ -0,0 +1 @@ +640x360 16spp clamp-off 0c7c1916d1025acc diff --git a/crates/crust-core/tests/data/import_baselines/stage_usda-59354f1aad350085-1.digest b/crates/crust-core/tests/data/import_baselines/stage_usda-59354f1aad350085-1.digest new file mode 100644 index 000000000..df9e00c04 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/stage_usda-59354f1aad350085-1.digest @@ -0,0 +1,16 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/World/cam") +camera: Camera { origin: Vec3A(0.0, 0.0, 0.0), lower_left_corner: Vec3A(-3.0581603, -1.5290802, -10.0), horizontal: Vec3A(6.1163206, 0.0, 0.0), vertical: Vec3A(0.0, 3.0581603, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: Some("/Render/settings") +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 32, height: 16, region: PixelRect { x0: 0, y0: 0, x1: 32, y1: 16 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [AovProduct { prim_path: "/Render/main", name: "main.exr", vars: [AovVar { prim_path: "/Render/color", name: "color", channel_prefix: None, source: Color, components: 4, precision: Float, accumulation: Filtered, clear: 0.0, expression: None, raw: false, variance: false }, AovVar { prim_path: "/Render/albedo", name: "albedo", channel_prefix: None, source: Albedo, components: 3, precision: Float, accumulation: Filtered, clear: 0.0, expression: None, raw: false, variance: false }, AovVar { prim_path: "/Render/normal", name: "normal", channel_prefix: None, source: Normal, components: 3, precision: Float, accumulation: Filtered, clear: 0.0, expression: None, raw: false, variance: false }], attributes: [] }, AovProduct { prim_path: "/Render/extra", name: "extra.exr", vars: [AovVar { prim_path: "/Render/albedo", name: "albedo", channel_prefix: None, source: Albedo, components: 3, precision: Float, accumulation: Filtered, clear: 0.0, expression: None, raw: false, variance: false }], attributes: [] }], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 50.0, aperture: [20.955, 15.2908], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 10.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/stage.usda"], invisible_overrides: Some(0) } +layer: $DIR/stage.usda +lights: 0 +volumes: 0 +world: 0 geometries, PrimitiveBreakdown { triangles: 0, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 0, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: true, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/World/cam"), cameras: ["/World/cam"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/World/cam"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/stage_usda-59354f1aad350085-1.image b/crates/crust-core/tests/data/import_baselines/stage_usda-59354f1aad350085-1.image new file mode 100644 index 000000000..f0b9b5b6b --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/stage_usda-59354f1aad350085-1.image @@ -0,0 +1 @@ +32x16 16spp clamp-off 6df0de0551480325 diff --git a/crates/crust-core/tests/data/import_baselines/stage_usda-5b237a71fd087753-1.digest b/crates/crust-core/tests/data/import_baselines/stage_usda-5b237a71fd087753-1.digest new file mode 100644 index 000000000..6cddfef7b --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/stage_usda-5b237a71fd087753-1.digest @@ -0,0 +1,22 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: None +camera: Camera { origin: Vec3A(15.0, 3.0, 3.0), lower_left_corner: Vec3A(4.8863316, -0.044797063, 4.174048), horizontal: Vec3A(1.2295314, 0.0, -6.147657), vertical: Vec3A(-0.44830504, 3.4967792, -0.08966101), u: Vec3A(0.19611613, 0.0, -0.9805807), v: Vec3A(-0.1271232, 0.991561, -0.02542464), lens_radius: 0.05, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: None +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 640, height: 360, region: PixelRect { x0: 0, y0: 0, x1: 640, y1: 360 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: None, depth_of_field: true, motion_blur: false, layer_stack: ["$DIR/stage.usda"], invisible_overrides: Some(0) } +layer: $DIR/stage.usda +warning: Warning { code: CameraMissing, kind: Skipped, count: 1, prims: [], message: "USD stage has no UsdGeomCamera — falling back to world::get_settings camera" } +lights: 0 +volumes: 0 +world: 1 geometries, PrimitiveBreakdown { triangles: 4, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 4, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +geom 0: material #0 Signature { kind: "MaterialX", cutout: false, straight: false, boundary: false, emits: true, uv: true, uv_primvar: None, face_texture: None, curve: None, primvars: Some(["displayColor"]) } class 65535 holdout false transparent false map None uv None shading Some(0) strands None aov None swapped false curves false scale 1.0 motion [] pieces all=4:f842628536678af5 camera=4:f842628536678af5 shadow=4:f842628536678af5 indirect=4:f842628536678af5 +provenance material /World/Looks/M: MaterialOrigin { slots: [0], displaced: false } +provenance geometry 0..1: /World/Q +provenance mesh: MeshOrigin { geom_id: 0, slot: 0, baked: true, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 13252484707536945916, n_points: 6, n_indices: 8, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: None, cameras: [], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: None, offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/stage_usda-5b237a71fd087753-1.image b/crates/crust-core/tests/data/import_baselines/stage_usda-5b237a71fd087753-1.image new file mode 100644 index 000000000..84ac1ec24 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/stage_usda-5b237a71fd087753-1.image @@ -0,0 +1 @@ +640x360 16spp clamp-off fb7768bb3c8316c8 diff --git a/crates/crust-core/tests/data/import_baselines/stage_usda-5cc80e16451809c9-1.digest b/crates/crust-core/tests/data/import_baselines/stage_usda-5cc80e16451809c9-1.digest new file mode 100644 index 000000000..fc58bf6f4 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/stage_usda-5cc80e16451809c9-1.digest @@ -0,0 +1,22 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: None +camera: Camera { origin: Vec3A(15.0, 3.0, 3.0), lower_left_corner: Vec3A(4.8863316, -0.044797063, 4.174048), horizontal: Vec3A(1.2295314, 0.0, -6.147657), vertical: Vec3A(-0.44830504, 3.4967792, -0.08966101), u: Vec3A(0.19611613, 0.0, -0.9805807), v: Vec3A(-0.1271232, 0.991561, -0.02542464), lens_radius: 0.05, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: None +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 640, height: 360, region: PixelRect { x0: 0, y0: 0, x1: 640, y1: 360 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: None, depth_of_field: true, motion_blur: false, layer_stack: ["$DIR/stage.usda"], invisible_overrides: Some(0) } +layer: $DIR/stage.usda +warning: Warning { code: CameraMissing, kind: Skipped, count: 1, prims: [], message: "USD stage has no UsdGeomCamera — falling back to world::get_settings camera" } +lights: 0 +volumes: 0 +world: 1 geometries, PrimitiveBreakdown { triangles: 4, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 4, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +geom 0: material #0 Signature { kind: "MaterialX", cutout: false, straight: false, boundary: false, emits: true, uv: true, uv_primvar: None, face_texture: None, curve: None, primvars: Some(["ramp"]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=4:f842628536678af5 camera=4:f842628536678af5 shadow=4:f842628536678af5 indirect=4:f842628536678af5 +provenance material /World/Looks/M: MaterialOrigin { slots: [0], displaced: false } +provenance geometry 0..1: /World/Q +provenance mesh: MeshOrigin { geom_id: 0, slot: 0, baked: true, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 17893806835409548195, n_points: 8, n_indices: 8, n_uvs: None, smooth: true, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: None, cameras: [], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: None, offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/stage_usda-5cc80e16451809c9-1.image b/crates/crust-core/tests/data/import_baselines/stage_usda-5cc80e16451809c9-1.image new file mode 100644 index 000000000..45c7c7673 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/stage_usda-5cc80e16451809c9-1.image @@ -0,0 +1 @@ +640x360 16spp clamp-off a9b43f7c7735c3fb diff --git a/crates/crust-core/tests/data/import_baselines/stage_usda-5dc19c72025a0150-1.digest b/crates/crust-core/tests/data/import_baselines/stage_usda-5dc19c72025a0150-1.digest new file mode 100644 index 000000000..dc3f7f7fa --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/stage_usda-5dc19c72025a0150-1.digest @@ -0,0 +1,20 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: None +camera: Camera { origin: Vec3A(15.0, 3.0, 3.0), lower_left_corner: Vec3A(4.8863316, -0.044797063, 4.174048), horizontal: Vec3A(1.2295314, 0.0, -6.147657), vertical: Vec3A(-0.44830504, 3.4967792, -0.08966101), u: Vec3A(0.19611613, 0.0, -0.9805807), v: Vec3A(-0.1271232, 0.991561, -0.02542464), lens_radius: 0.05, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: None +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 640, height: 360, region: PixelRect { x0: 0, y0: 0, x1: 640, y1: 360 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: None, depth_of_field: true, motion_blur: false, layer_stack: ["$DIR/stage.usda"], invisible_overrides: Some(0) } +layer: $DIR/stage.usda +warning: Warning { code: CameraMissing, kind: Skipped, count: 1, prims: [], message: "USD stage has no UsdGeomCamera — falling back to world::get_settings camera" } +lights: 0 +volumes: 0 +world: 1 geometries, PrimitiveBreakdown { triangles: 0, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 1 } top level, PrimitiveBreakdown { triangles: 0, spheres: 0, disks: 0, cylinders: 0, curve_segments: 1, cubic_curve_spans: 0, instances: 1 } unique, motion false +geom 0: material #0 Signature { kind: "MaterialX", cutout: false, straight: false, boundary: false, emits: true, uv: true, uv_primvar: None, face_texture: None, curve: Some((false, true, ["p0"])), primvars: None } class 65535 holdout false transparent false map None uv None shading None strands Some(0) aov None swapped false curves true scale 1.0 motion [] pieces all=1:ba28ac43777139fb camera=1:ba28ac43777139fb shadow=1:ba28ac43777139fb indirect=1:ba28ac43777139fb +provenance material /World/Looks/M: MaterialOrigin { slots: [0], displaced: false } +provenance geometry 0..1: /World/C +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: None, cameras: [], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: None, offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/stage_usda-5dc19c72025a0150-1.image b/crates/crust-core/tests/data/import_baselines/stage_usda-5dc19c72025a0150-1.image new file mode 100644 index 000000000..c734c5b1d --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/stage_usda-5dc19c72025a0150-1.image @@ -0,0 +1 @@ +640x360 16spp clamp-off a04a09c0d4b5e325 diff --git a/crates/crust-core/tests/data/import_baselines/stage_usda-5f7140cec32f4f07-1.digest b/crates/crust-core/tests/data/import_baselines/stage_usda-5f7140cec32f4f07-1.digest new file mode 100644 index 000000000..fc58bf6f4 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/stage_usda-5f7140cec32f4f07-1.digest @@ -0,0 +1,22 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: None +camera: Camera { origin: Vec3A(15.0, 3.0, 3.0), lower_left_corner: Vec3A(4.8863316, -0.044797063, 4.174048), horizontal: Vec3A(1.2295314, 0.0, -6.147657), vertical: Vec3A(-0.44830504, 3.4967792, -0.08966101), u: Vec3A(0.19611613, 0.0, -0.9805807), v: Vec3A(-0.1271232, 0.991561, -0.02542464), lens_radius: 0.05, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: None +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 640, height: 360, region: PixelRect { x0: 0, y0: 0, x1: 640, y1: 360 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: None, depth_of_field: true, motion_blur: false, layer_stack: ["$DIR/stage.usda"], invisible_overrides: Some(0) } +layer: $DIR/stage.usda +warning: Warning { code: CameraMissing, kind: Skipped, count: 1, prims: [], message: "USD stage has no UsdGeomCamera — falling back to world::get_settings camera" } +lights: 0 +volumes: 0 +world: 1 geometries, PrimitiveBreakdown { triangles: 4, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 4, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +geom 0: material #0 Signature { kind: "MaterialX", cutout: false, straight: false, boundary: false, emits: true, uv: true, uv_primvar: None, face_texture: None, curve: None, primvars: Some(["ramp"]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=4:f842628536678af5 camera=4:f842628536678af5 shadow=4:f842628536678af5 indirect=4:f842628536678af5 +provenance material /World/Looks/M: MaterialOrigin { slots: [0], displaced: false } +provenance geometry 0..1: /World/Q +provenance mesh: MeshOrigin { geom_id: 0, slot: 0, baked: true, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 17893806835409548195, n_points: 8, n_indices: 8, n_uvs: None, smooth: true, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: None, cameras: [], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: None, offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/stage_usda-5f7140cec32f4f07-1.image b/crates/crust-core/tests/data/import_baselines/stage_usda-5f7140cec32f4f07-1.image new file mode 100644 index 000000000..45c7c7673 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/stage_usda-5f7140cec32f4f07-1.image @@ -0,0 +1 @@ +640x360 16spp clamp-off a9b43f7c7735c3fb diff --git a/crates/crust-core/tests/data/import_baselines/stage_usda-604932e0d3e70494-1.digest b/crates/crust-core/tests/data/import_baselines/stage_usda-604932e0d3e70494-1.digest new file mode 100644 index 000000000..8c61ff45e --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/stage_usda-604932e0d3e70494-1.digest @@ -0,0 +1,20 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: None +camera: Camera { origin: Vec3A(15.0, 3.0, 3.0), lower_left_corner: Vec3A(4.8863316, -0.044797063, 4.174048), horizontal: Vec3A(1.2295314, 0.0, -6.147657), vertical: Vec3A(-0.44830504, 3.4967792, -0.08966101), u: Vec3A(0.19611613, 0.0, -0.9805807), v: Vec3A(-0.1271232, 0.991561, -0.02542464), lens_radius: 0.05, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: None +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 640, height: 360, region: PixelRect { x0: 0, y0: 0, x1: 640, y1: 360 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: None, depth_of_field: true, motion_blur: false, layer_stack: ["$DIR/stage.usda"], invisible_overrides: Some(0) } +layer: $DIR/stage.usda +warning: Warning { code: CameraMissing, kind: Skipped, count: 1, prims: [], message: "USD stage has no UsdGeomCamera — falling back to world::get_settings camera" } +lights: 0 +volumes: 0 +world: 1 geometries, PrimitiveBreakdown { triangles: 0, spheres: 1, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 0, spheres: 1, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +geom 0: material #0 Signature { kind: "UsdPreviewSurface (textured)", cutout: false, straight: false, boundary: false, emits: false, uv: true, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:fb1e7d48790aec95 camera=1:fb1e7d48790aec95 shadow=1:fb1e7d48790aec95 indirect=1:fb1e7d48790aec95 +provenance material /World/M: MaterialOrigin { slots: [0], displaced: false } +provenance geometry 0..1: /World/ball +provenance spheres: [0] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: None, cameras: [], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: None, offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/stage_usda-604932e0d3e70494-1.image b/crates/crust-core/tests/data/import_baselines/stage_usda-604932e0d3e70494-1.image new file mode 100644 index 000000000..c734c5b1d --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/stage_usda-604932e0d3e70494-1.image @@ -0,0 +1 @@ +640x360 16spp clamp-off a04a09c0d4b5e325 diff --git a/crates/crust-core/tests/data/import_baselines/stage_usda-64b7039b1d43e540-1.digest b/crates/crust-core/tests/data/import_baselines/stage_usda-64b7039b1d43e540-1.digest new file mode 100644 index 000000000..cbbcf1775 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/stage_usda-64b7039b1d43e540-1.digest @@ -0,0 +1,16 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/World/cam") +camera: Camera { origin: Vec3A(0.0, 0.0, 0.0), lower_left_corner: Vec3A(-2.7183647, -1.5290802, -10.0), horizontal: Vec3A(5.4367294, 0.0, 0.0), vertical: Vec3A(0.0, 3.0581603, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: Some("/Render/settings") +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 640, height: 360, region: PixelRect { x0: 0, y0: 0, x1: 640, y1: 360 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Uniform, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 50.0, aperture: [20.955, 15.2908], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 10.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/stage.usda"], invisible_overrides: Some(0) } +layer: $DIR/stage.usda +lights: 0 +volumes: 0 +world: 0 geometries, PrimitiveBreakdown { triangles: 0, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 0, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: true, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/World/cam"), cameras: ["/World/cam"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/World/cam"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/stage_usda-64b7039b1d43e540-1.image b/crates/crust-core/tests/data/import_baselines/stage_usda-64b7039b1d43e540-1.image new file mode 100644 index 000000000..c734c5b1d --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/stage_usda-64b7039b1d43e540-1.image @@ -0,0 +1 @@ +640x360 16spp clamp-off a04a09c0d4b5e325 diff --git a/crates/crust-core/tests/data/import_baselines/stage_usda-65ee13ae526ffeea-1.digest b/crates/crust-core/tests/data/import_baselines/stage_usda-65ee13ae526ffeea-1.digest new file mode 100644 index 000000000..2d4163c1f --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/stage_usda-65ee13ae526ffeea-1.digest @@ -0,0 +1,20 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: None +camera: Camera { origin: Vec3A(15.0, 3.0, 3.0), lower_left_corner: Vec3A(4.8863316, -0.044797063, 4.174048), horizontal: Vec3A(1.2295314, 0.0, -6.147657), vertical: Vec3A(-0.44830504, 3.4967792, -0.08966101), u: Vec3A(0.19611613, 0.0, -0.9805807), v: Vec3A(-0.1271232, 0.991561, -0.02542464), lens_radius: 0.05, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: None +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 640, height: 360, region: PixelRect { x0: 0, y0: 0, x1: 640, y1: 360 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: None, depth_of_field: true, motion_blur: false, layer_stack: ["$DIR/stage.usda"], invisible_overrides: Some(0) } +layer: $DIR/stage.usda +warning: Warning { code: CameraMissing, kind: Skipped, count: 1, prims: [], message: "USD stage has no UsdGeomCamera — falling back to world::get_settings camera" } +lights: 0 +volumes: 0 +world: 1 geometries, PrimitiveBreakdown { triangles: 0, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 1 } top level, PrimitiveBreakdown { triangles: 0, spheres: 0, disks: 0, cylinders: 0, curve_segments: 1, cubic_curve_spans: 0, instances: 1 } unique, motion false +geom 0: material #0 Signature { kind: "MaterialX", cutout: false, straight: false, boundary: false, emits: true, uv: true, uv_primvar: None, face_texture: None, curve: Some((true, false, [])), primvars: None } class 65535 holdout false transparent false map None uv None shading None strands Some(0) aov None swapped false curves true scale 1.0 motion [] pieces all=1:7a8114182eb4444e camera=1:7a8114182eb4444e shadow=1:7a8114182eb4444e indirect=1:7a8114182eb4444e +provenance material /World/Looks/M: MaterialOrigin { slots: [0], displaced: false } +provenance geometry 0..1: /World/C +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: None, cameras: [], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: None, offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/stage_usda-65ee13ae526ffeea-1.image b/crates/crust-core/tests/data/import_baselines/stage_usda-65ee13ae526ffeea-1.image new file mode 100644 index 000000000..cb7355504 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/stage_usda-65ee13ae526ffeea-1.image @@ -0,0 +1 @@ +640x360 16spp clamp-off 650db2d54a2e44c9 diff --git a/crates/crust-core/tests/data/import_baselines/stage_usda-67247fa59107a671-1.digest b/crates/crust-core/tests/data/import_baselines/stage_usda-67247fa59107a671-1.digest new file mode 100644 index 000000000..6c7e8fd32 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/stage_usda-67247fa59107a671-1.digest @@ -0,0 +1,19 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/World/cam") +camera: Camera { origin: Vec3A(0.0, 0.0, 0.0), lower_left_corner: Vec3A(-2.7183647, -1.5290802, -10.0), horizontal: Vec3A(5.4367294, 0.0, 0.0), vertical: Vec3A(0.0, 3.0581603, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: None +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 640, height: 360, region: PixelRect { x0: 0, y0: 0, x1: 640, y1: 360 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 50.0, aperture: [20.955, 15.2908], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 10.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/stage.usda"], invisible_overrides: Some(0) } +layer: $DIR/stage.usda +lights: 0 +volumes: 0 +world: 1 geometries, PrimitiveBreakdown { triangles: 0, spheres: 1, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 0, spheres: 1, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +geom 0: material #0 Signature { kind: "UsdPreviewSurface (textured)", cutout: false, straight: false, boundary: false, emits: false, uv: true, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:fb1e7d48790aec95 camera=1:fb1e7d48790aec95 shadow=1:fb1e7d48790aec95 indirect=1:fb1e7d48790aec95 +provenance material /World/Looks/M: MaterialOrigin { slots: [0], displaced: false } +provenance geometry 0..1: /World/ball +provenance spheres: [0] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: true, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/World/cam"), cameras: ["/World/cam"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/World/cam"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/stage_usda-67247fa59107a671-1.image b/crates/crust-core/tests/data/import_baselines/stage_usda-67247fa59107a671-1.image new file mode 100644 index 000000000..c734c5b1d --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/stage_usda-67247fa59107a671-1.image @@ -0,0 +1 @@ +640x360 16spp clamp-off a04a09c0d4b5e325 diff --git a/crates/crust-core/tests/data/import_baselines/stage_usda-6bf959c4a9ccd0b3-1.digest b/crates/crust-core/tests/data/import_baselines/stage_usda-6bf959c4a9ccd0b3-1.digest new file mode 100644 index 000000000..713ead1e3 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/stage_usda-6bf959c4a9ccd0b3-1.digest @@ -0,0 +1,22 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: None +camera: Camera { origin: Vec3A(15.0, 3.0, 3.0), lower_left_corner: Vec3A(4.8863316, -0.044797063, 4.174048), horizontal: Vec3A(1.2295314, 0.0, -6.147657), vertical: Vec3A(-0.44830504, 3.4967792, -0.08966101), u: Vec3A(0.19611613, 0.0, -0.9805807), v: Vec3A(-0.1271232, 0.991561, -0.02542464), lens_radius: 0.05, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: None +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 640, height: 360, region: PixelRect { x0: 0, y0: 0, x1: 640, y1: 360 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: None, depth_of_field: true, motion_blur: false, layer_stack: ["$DIR/stage.usda"], invisible_overrides: Some(0) } +layer: $DIR/stage.usda +warning: Warning { code: CameraMissing, kind: Skipped, count: 1, prims: [], message: "USD stage has no UsdGeomCamera — falling back to world::get_settings camera" } +lights: 0 +volumes: 0 +world: 1 geometries, PrimitiveBreakdown { triangles: 4, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 4, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +geom 0: material #0 Signature { kind: "MaterialX", cutout: false, straight: false, boundary: false, emits: true, uv: true, uv_primvar: None, face_texture: None, curve: None, primvars: Some(["flat", "face"]) } class 65535 holdout false transparent false map None uv None shading Some(0) strands None aov None swapped false curves false scale 1.0 motion [] pieces all=4:f842628536678af5 camera=4:f842628536678af5 shadow=4:f842628536678af5 indirect=4:f842628536678af5 +provenance material /World/Looks/M: MaterialOrigin { slots: [0], displaced: false } +provenance geometry 0..1: /World/Q +provenance mesh: MeshOrigin { geom_id: 0, slot: 0, baked: true, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 8067649529554663034, n_points: 6, n_indices: 8, n_uvs: None, smooth: true, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: None, cameras: [], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: None, offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/stage_usda-6bf959c4a9ccd0b3-1.image b/crates/crust-core/tests/data/import_baselines/stage_usda-6bf959c4a9ccd0b3-1.image new file mode 100644 index 000000000..27c76a0e4 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/stage_usda-6bf959c4a9ccd0b3-1.image @@ -0,0 +1 @@ +640x360 16spp clamp-off 57f8edd356d509b8 diff --git a/crates/crust-core/tests/data/import_baselines/stage_usda-6d5fe86af042b6e1-1.digest b/crates/crust-core/tests/data/import_baselines/stage_usda-6d5fe86af042b6e1-1.digest new file mode 100644 index 000000000..aa8f01471 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/stage_usda-6d5fe86af042b6e1-1.digest @@ -0,0 +1,28 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: None +camera: Camera { origin: Vec3A(15.0, 3.0, 3.0), lower_left_corner: Vec3A(4.8863316, -0.044797063, 4.174048), horizontal: Vec3A(1.2295314, 0.0, -6.147657), vertical: Vec3A(-0.44830504, 3.4967792, -0.08966101), u: Vec3A(0.19611613, 0.0, -0.9805807), v: Vec3A(-0.1271232, 0.991561, -0.02542464), lens_radius: 0.05, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: None +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 640, height: 360, region: PixelRect { x0: 0, y0: 0, x1: 640, y1: 360 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: None, depth_of_field: true, motion_blur: false, layer_stack: ["$DIR/stage.usda"], invisible_overrides: Some(0) } +layer: $DIR/stage.usda +warning: Warning { code: CameraMissing, kind: Skipped, count: 1, prims: [], message: "USD stage has no UsdGeomCamera — falling back to world::get_settings camera" } +lights: 0 +volumes: 0 +world: 3 geometries, PrimitiveBreakdown { triangles: 0, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 3 } top level, PrimitiveBreakdown { triangles: 4, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 3 } unique, motion false +geom 0: material #0 Signature { kind: "MaterialX", cutout: false, straight: false, boundary: false, emits: true, uv: true, uv_primvar: None, face_texture: None, curve: None, primvars: Some(["ramp"]) } class 65535 holdout false transparent false map None uv None shading Some(0) strands None aov None swapped false curves false scale 1.0 motion [] pieces all=4:0db020eefb0d3b85 camera=4:0db020eefb0d3b85 shadow=4:0db020eefb0d3b85 indirect=4:0db020eefb0d3b85 +geom 1: material #0 Signature { kind: "MaterialX", cutout: false, straight: false, boundary: false, emits: true, uv: true, uv_primvar: None, face_texture: None, curve: None, primvars: Some(["ramp"]) } class 65535 holdout false transparent false map None uv None shading Some(0) strands None aov None swapped false curves false scale 1.0 motion [] pieces all=4:e621daa7ecf9bc75 camera=4:e621daa7ecf9bc75 shadow=4:e621daa7ecf9bc75 indirect=4:e621daa7ecf9bc75 +geom 2: material #0 Signature { kind: "MaterialX", cutout: false, straight: false, boundary: false, emits: true, uv: true, uv_primvar: None, face_texture: None, curve: None, primvars: Some(["ramp"]) } class 65535 holdout false transparent false map None uv None shading Some(0) strands None aov None swapped false curves false scale 1.0 motion [] pieces all=4:1d8e2216cd700db5 camera=4:1d8e2216cd700db5 shadow=4:1d8e2216cd700db5 indirect=4:1d8e2216cd700db5 +provenance material /World/Looks/M: MaterialOrigin { slots: [0, 1, 2], displaced: false } +provenance geometry 0..1: /World/Mirrored +provenance geometry 1..2: /World/A +provenance geometry 2..3: /World/B +provenance mesh: MeshOrigin { geom_id: 0, slot: 0, baked: false, moving: false } +provenance mesh: MeshOrigin { geom_id: 1, slot: 0, baked: false, moving: false } +provenance mesh: MeshOrigin { geom_id: 2, slot: 0, baked: false, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 7300176459579144609, n_points: 6, n_indices: 8, n_uvs: None, smooth: false, material: 0 }), placements: 3, shared: false, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: None, cameras: [], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: None, offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/stage_usda-6d5fe86af042b6e1-1.image b/crates/crust-core/tests/data/import_baselines/stage_usda-6d5fe86af042b6e1-1.image new file mode 100644 index 000000000..9e894f9e3 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/stage_usda-6d5fe86af042b6e1-1.image @@ -0,0 +1 @@ +640x360 16spp clamp-off 69e570402310d1da diff --git a/crates/crust-core/tests/data/import_baselines/stage_usda-71054a8e0c511721-1.digest b/crates/crust-core/tests/data/import_baselines/stage_usda-71054a8e0c511721-1.digest new file mode 100644 index 000000000..5dc7d2d23 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/stage_usda-71054a8e0c511721-1.digest @@ -0,0 +1,16 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/World/cam") +camera: Camera { origin: Vec3A(0.0, 0.0, 0.0), lower_left_corner: Vec3A(-3.0581603, -1.5290802, -10.0), horizontal: Vec3A(6.1163206, 0.0, 0.0), vertical: Vec3A(0.0, 3.0581603, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: Some("/Render/settings") +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 32, height: 16, region: PixelRect { x0: 0, y0: 0, x1: 32, y1: 16 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [AovProduct { prim_path: "/Render/main", name: "main.exr", vars: [AovVar { prim_path: "/Render/color", name: "color", channel_prefix: None, source: Color, components: 4, precision: Float, accumulation: Filtered, clear: 0.0, expression: None, raw: false, variance: false }], attributes: [] }, AovProduct { prim_path: "/Render/unnamed", name: "", vars: [AovVar { prim_path: "/Render/color", name: "color", channel_prefix: None, source: Color, components: 4, precision: Float, accumulation: Filtered, clear: 0.0, expression: None, raw: false, variance: false }], attributes: [] }, AovProduct { prim_path: "/Render/again", name: "main.exr", vars: [AovVar { prim_path: "/Render/color", name: "color", channel_prefix: None, source: Color, components: 4, precision: Float, accumulation: Filtered, clear: 0.0, expression: None, raw: false, variance: false }], attributes: [] }], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 50.0, aperture: [20.955, 15.2908], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 10.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/stage.usda"], invisible_overrides: Some(0) } +layer: $DIR/stage.usda +lights: 0 +volumes: 0 +world: 0 geometries, PrimitiveBreakdown { triangles: 0, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 0, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: true, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/World/cam"), cameras: ["/World/cam"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/World/cam"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/stage_usda-71054a8e0c511721-1.image b/crates/crust-core/tests/data/import_baselines/stage_usda-71054a8e0c511721-1.image new file mode 100644 index 000000000..f0b9b5b6b --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/stage_usda-71054a8e0c511721-1.image @@ -0,0 +1 @@ +32x16 16spp clamp-off 6df0de0551480325 diff --git a/crates/crust-core/tests/data/import_baselines/stage_usda-7c770edd10f5907e-1.digest b/crates/crust-core/tests/data/import_baselines/stage_usda-7c770edd10f5907e-1.digest new file mode 100644 index 000000000..afc197472 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/stage_usda-7c770edd10f5907e-1.digest @@ -0,0 +1,20 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: None +camera: Camera { origin: Vec3A(15.0, 3.0, 3.0), lower_left_corner: Vec3A(4.8863316, -0.044797063, 4.174048), horizontal: Vec3A(1.2295314, 0.0, -6.147657), vertical: Vec3A(-0.44830504, 3.4967792, -0.08966101), u: Vec3A(0.19611613, 0.0, -0.9805807), v: Vec3A(-0.1271232, 0.991561, -0.02542464), lens_radius: 0.05, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: None +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 640, height: 360, region: PixelRect { x0: 0, y0: 0, x1: 640, y1: 360 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: None, depth_of_field: true, motion_blur: false, layer_stack: ["$DIR/stage.usda"], invisible_overrides: Some(0) } +layer: $DIR/stage.usda +warning: Warning { code: CameraMissing, kind: Skipped, count: 1, prims: [], message: "USD stage has no UsdGeomCamera — falling back to world::get_settings camera" } +lights: 0 +volumes: 0 +world: 1 geometries, PrimitiveBreakdown { triangles: 0, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 1 } top level, PrimitiveBreakdown { triangles: 0, spheres: 0, disks: 0, cylinders: 0, curve_segments: 1, cubic_curve_spans: 0, instances: 1 } unique, motion false +geom 0: material #0 Signature { kind: "MaterialX", cutout: false, straight: false, boundary: false, emits: true, uv: true, uv_primvar: None, face_texture: None, curve: Some((true, false, [])), primvars: None } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves true scale 1.0 motion [] pieces all=1:7a8114182eb4444e camera=1:7a8114182eb4444e shadow=1:7a8114182eb4444e indirect=1:7a8114182eb4444e +provenance material /World/Looks/M: MaterialOrigin { slots: [0], displaced: false } +provenance geometry 0..1: /World/C +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: None, cameras: [], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: None, offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/stage_usda-7c770edd10f5907e-1.image b/crates/crust-core/tests/data/import_baselines/stage_usda-7c770edd10f5907e-1.image new file mode 100644 index 000000000..c734c5b1d --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/stage_usda-7c770edd10f5907e-1.image @@ -0,0 +1 @@ +640x360 16spp clamp-off a04a09c0d4b5e325 diff --git a/crates/crust-core/tests/data/import_baselines/stage_usda-8088e3bfe6185392-1.digest b/crates/crust-core/tests/data/import_baselines/stage_usda-8088e3bfe6185392-1.digest new file mode 100644 index 000000000..642e88dac --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/stage_usda-8088e3bfe6185392-1.digest @@ -0,0 +1,22 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: None +camera: Camera { origin: Vec3A(15.0, 3.0, 3.0), lower_left_corner: Vec3A(4.8863316, -0.044797063, 4.174048), horizontal: Vec3A(1.2295314, 0.0, -6.147657), vertical: Vec3A(-0.44830504, 3.4967792, -0.08966101), u: Vec3A(0.19611613, 0.0, -0.9805807), v: Vec3A(-0.1271232, 0.991561, -0.02542464), lens_radius: 0.05, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: None +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 640, height: 360, region: PixelRect { x0: 0, y0: 0, x1: 640, y1: 360 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: None, depth_of_field: true, motion_blur: false, layer_stack: ["$DIR/stage.usda"], invisible_overrides: Some(0) } +layer: $DIR/stage.usda +warning: Warning { code: CameraMissing, kind: Skipped, count: 1, prims: [], message: "USD stage has no UsdGeomCamera — falling back to world::get_settings camera" } +lights: 0 +volumes: 0 +world: 1 geometries, PrimitiveBreakdown { triangles: 4, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 4, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +geom 0: material #0 Signature { kind: "MaterialX", cutout: false, straight: false, boundary: false, emits: true, uv: true, uv_primvar: None, face_texture: None, curve: None, primvars: Some(["ramp"]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=4:f842628536678af5 camera=4:f842628536678af5 shadow=4:f842628536678af5 indirect=4:f842628536678af5 +provenance material /World/Looks/M: MaterialOrigin { slots: [0], displaced: false } +provenance geometry 0..1: /World/Q +provenance mesh: MeshOrigin { geom_id: 0, slot: 0, baked: true, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 16264184265957527656, n_points: 6, n_indices: 8, n_uvs: None, smooth: true, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: None, cameras: [], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: None, offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/stage_usda-8088e3bfe6185392-1.image b/crates/crust-core/tests/data/import_baselines/stage_usda-8088e3bfe6185392-1.image new file mode 100644 index 000000000..45c7c7673 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/stage_usda-8088e3bfe6185392-1.image @@ -0,0 +1 @@ +640x360 16spp clamp-off a9b43f7c7735c3fb diff --git a/crates/crust-core/tests/data/import_baselines/stage_usda-80aabe25c21585c0-1.digest b/crates/crust-core/tests/data/import_baselines/stage_usda-80aabe25c21585c0-1.digest new file mode 100644 index 000000000..207b139bc --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/stage_usda-80aabe25c21585c0-1.digest @@ -0,0 +1,26 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: None +camera: Camera { origin: Vec3A(15.0, 3.0, 3.0), lower_left_corner: Vec3A(4.8863316, -0.044797063, 4.174048), horizontal: Vec3A(1.2295314, 0.0, -6.147657), vertical: Vec3A(-0.44830504, 3.4967792, -0.08966101), u: Vec3A(0.19611613, 0.0, -0.9805807), v: Vec3A(-0.1271232, 0.991561, -0.02542464), lens_radius: 0.05, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: None +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 640, height: 360, region: PixelRect { x0: 0, y0: 0, x1: 640, y1: 360 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: None, depth_of_field: true, motion_blur: false, layer_stack: ["$DIR/stage.usda"], invisible_overrides: Some(0) } +layer: $DIR/stage.usda +warning: Warning { code: CameraMissing, kind: Skipped, count: 1, prims: [], message: "USD stage has no UsdGeomCamera — falling back to world::get_settings camera" } +lights: 0 +volumes: 0 +world: 2 geometries, PrimitiveBreakdown { triangles: 8, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 8, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +geom 0: material #0 Signature { kind: "MaterialX", cutout: false, straight: false, boundary: false, emits: true, uv: true, uv_primvar: None, face_texture: None, curve: None, primvars: Some(["ramp"]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=4:cc10802e6b403ef5 camera=4:cc10802e6b403ef5 shadow=4:cc10802e6b403ef5 indirect=4:cc10802e6b403ef5 +geom 1: material #0 Signature { kind: "MaterialX", cutout: false, straight: false, boundary: false, emits: true, uv: true, uv_primvar: None, face_texture: None, curve: None, primvars: Some(["ramp"]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=4:f842628536678af5 camera=4:f842628536678af5 shadow=4:f842628536678af5 indirect=4:f842628536678af5 +provenance material /World/Looks/M: MaterialOrigin { slots: [0, 1], displaced: false } +provenance geometry 0..1: /World/C +provenance geometry 1..2: /World/U +provenance mesh: MeshOrigin { geom_id: 0, slot: 0, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 1, slot: 1, baked: true, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 1288948547248249470, n_points: 6, n_indices: 8, n_uvs: None, smooth: true, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 1: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 17893806835409548195, n_points: 8, n_indices: 8, n_uvs: None, smooth: true, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: None, cameras: [], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: None, offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/stage_usda-80aabe25c21585c0-1.image b/crates/crust-core/tests/data/import_baselines/stage_usda-80aabe25c21585c0-1.image new file mode 100644 index 000000000..4f6fd594c --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/stage_usda-80aabe25c21585c0-1.image @@ -0,0 +1 @@ +640x360 16spp clamp-off 8cae0790e6eb3d3f diff --git a/crates/crust-core/tests/data/import_baselines/stage_usda-82538c264d2a03ab-1.digest b/crates/crust-core/tests/data/import_baselines/stage_usda-82538c264d2a03ab-1.digest new file mode 100644 index 000000000..a30507222 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/stage_usda-82538c264d2a03ab-1.digest @@ -0,0 +1,20 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: None +camera: Camera { origin: Vec3A(15.0, 3.0, 3.0), lower_left_corner: Vec3A(4.8863316, -0.044797063, 4.174048), horizontal: Vec3A(1.2295314, 0.0, -6.147657), vertical: Vec3A(-0.44830504, 3.4967792, -0.08966101), u: Vec3A(0.19611613, 0.0, -0.9805807), v: Vec3A(-0.1271232, 0.991561, -0.02542464), lens_radius: 0.05, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: None +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 640, height: 360, region: PixelRect { x0: 0, y0: 0, x1: 640, y1: 360 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: None, depth_of_field: true, motion_blur: false, layer_stack: ["$DIR/stage.usda"], invisible_overrides: Some(0) } +layer: $DIR/stage.usda +warning: Warning { code: CameraMissing, kind: Skipped, count: 1, prims: [], message: "USD stage has no UsdGeomCamera — falling back to world::get_settings camera" } +lights: 0 +volumes: 0 +world: 1 geometries, PrimitiveBreakdown { triangles: 0, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 1 } top level, PrimitiveBreakdown { triangles: 0, spheres: 0, disks: 0, cylinders: 0, curve_segments: 3, cubic_curve_spans: 0, instances: 1 } unique, motion false +geom 0: material #0 Signature { kind: "MaterialX", cutout: false, straight: false, boundary: false, emits: true, uv: true, uv_primvar: None, face_texture: None, curve: Some((false, true, ["strandId"])), primvars: None } class 65535 holdout false transparent false map None uv None shading None strands Some(0) aov None swapped false curves true scale 1.0 motion [] pieces all=3:d547abbd49b2a5fa camera=3:d547abbd49b2a5fa shadow=3:d547abbd49b2a5fa indirect=3:d547abbd49b2a5fa +provenance material /World/Looks/M: MaterialOrigin { slots: [0], displaced: false } +provenance geometry 0..1: /World/C +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: None, cameras: [], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: None, offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/stage_usda-82538c264d2a03ab-1.image b/crates/crust-core/tests/data/import_baselines/stage_usda-82538c264d2a03ab-1.image new file mode 100644 index 000000000..8a765116c --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/stage_usda-82538c264d2a03ab-1.image @@ -0,0 +1 @@ +640x360 16spp clamp-off 53c5c55e5b6a90ec diff --git a/crates/crust-core/tests/data/import_baselines/stage_usda-82538c264d2a03ab-2.digest b/crates/crust-core/tests/data/import_baselines/stage_usda-82538c264d2a03ab-2.digest new file mode 100644 index 000000000..c4dcf7ce8 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/stage_usda-82538c264d2a03ab-2.digest @@ -0,0 +1,20 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: None +camera: Camera { origin: Vec3A(15.0, 3.0, 3.0), lower_left_corner: Vec3A(4.8863316, -0.044797063, 4.174048), horizontal: Vec3A(1.2295314, 0.0, -6.147657), vertical: Vec3A(-0.44830504, 3.4967792, -0.08966101), u: Vec3A(0.19611613, 0.0, -0.9805807), v: Vec3A(-0.1271232, 0.991561, -0.02542464), lens_radius: 0.05, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: None +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 640, height: 360, region: PixelRect { x0: 0, y0: 0, x1: 640, y1: 360 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: None, depth_of_field: true, motion_blur: false, layer_stack: ["$DIR/stage.usda"], invisible_overrides: Some(0) } +layer: $DIR/stage.usda +warning: Warning { code: CameraMissing, kind: Skipped, count: 1, prims: [], message: "USD stage has no UsdGeomCamera — falling back to world::get_settings camera" } +lights: 0 +volumes: 0 +world: 1 geometries, PrimitiveBreakdown { triangles: 0, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 1 } top level, PrimitiveBreakdown { triangles: 0, spheres: 0, disks: 0, cylinders: 0, curve_segments: 3, cubic_curve_spans: 0, instances: 1 } unique, motion false +geom 0: material #0 Signature { kind: "MaterialX", cutout: false, straight: false, boundary: false, emits: true, uv: true, uv_primvar: None, face_texture: None, curve: Some((false, true, [])), primvars: None } class 65535 holdout false transparent false map None uv None shading None strands Some(0) aov None swapped false curves true scale 1.0 motion [] pieces all=3:d547abbd49b2a5fa camera=3:d547abbd49b2a5fa shadow=3:d547abbd49b2a5fa indirect=3:d547abbd49b2a5fa +provenance material /World/Looks/M: MaterialOrigin { slots: [0], displaced: false } +provenance geometry 0..1: /World/C +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: None, cameras: [], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: None, offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/stage_usda-82538c264d2a03ab-2.image b/crates/crust-core/tests/data/import_baselines/stage_usda-82538c264d2a03ab-2.image new file mode 100644 index 000000000..477334e78 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/stage_usda-82538c264d2a03ab-2.image @@ -0,0 +1 @@ +640x360 16spp clamp-off dee48553732bbb1e diff --git a/crates/crust-core/tests/data/import_baselines/stage_usda-82a10c399a16cdfe-1.digest b/crates/crust-core/tests/data/import_baselines/stage_usda-82a10c399a16cdfe-1.digest new file mode 100644 index 000000000..49d858ec1 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/stage_usda-82a10c399a16cdfe-1.digest @@ -0,0 +1,17 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/World/cam") +camera: Camera { origin: Vec3A(0.0, 0.0, 0.0), lower_left_corner: Vec3A(-2.7183647, -1.5290802, -10.0), horizontal: Vec3A(5.4367294, 0.0, 0.0), vertical: Vec3A(0.0, 3.0581603, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: None +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 640, height: 360, region: PixelRect { x0: 0, y0: 0, x1: 640, y1: 360 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 50.0, aperture: [20.955, 15.2908], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 10.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/stage.usda"], invisible_overrides: Some(0) } +layer: $DIR/stage.usda +warning: Warning { code: LightDegenerateShape, kind: Skipped, count: 2, prims: ["/World/b", "/World/a"], message: "RectLight at /World/b: width 0 × height 1 must be finite and positive — skipped" } +lights: 0 +volumes: 0 +world: 0 geometries, PrimitiveBreakdown { triangles: 0, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 0, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: true, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/World/cam"), cameras: ["/World/cam"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/World/cam"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/stage_usda-82a10c399a16cdfe-1.image b/crates/crust-core/tests/data/import_baselines/stage_usda-82a10c399a16cdfe-1.image new file mode 100644 index 000000000..c734c5b1d --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/stage_usda-82a10c399a16cdfe-1.image @@ -0,0 +1 @@ +640x360 16spp clamp-off a04a09c0d4b5e325 diff --git a/crates/crust-core/tests/data/import_baselines/stage_usda-8330e4bc297d2c11-1.digest b/crates/crust-core/tests/data/import_baselines/stage_usda-8330e4bc297d2c11-1.digest new file mode 100644 index 000000000..b8962d387 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/stage_usda-8330e4bc297d2c11-1.digest @@ -0,0 +1,20 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: None +camera: Camera { origin: Vec3A(15.0, 3.0, 3.0), lower_left_corner: Vec3A(4.8863316, -0.044797063, 4.174048), horizontal: Vec3A(1.2295314, 0.0, -6.147657), vertical: Vec3A(-0.44830504, 3.4967792, -0.08966101), u: Vec3A(0.19611613, 0.0, -0.9805807), v: Vec3A(-0.1271232, 0.991561, -0.02542464), lens_radius: 0.05, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: None +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 640, height: 360, region: PixelRect { x0: 0, y0: 0, x1: 640, y1: 360 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: None, depth_of_field: true, motion_blur: false, layer_stack: ["$DIR/stage.usda"], invisible_overrides: Some(0) } +layer: $DIR/stage.usda +warning: Warning { code: CameraMissing, kind: Skipped, count: 1, prims: [], message: "USD stage has no UsdGeomCamera — falling back to world::get_settings camera" } +lights: 0 +volumes: 0 +world: 1 geometries, PrimitiveBreakdown { triangles: 0, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 1 } top level, PrimitiveBreakdown { triangles: 0, spheres: 0, disks: 0, cylinders: 0, curve_segments: 9, cubic_curve_spans: 0, instances: 1 } unique, motion false +geom 0: material #0 Signature { kind: "MaterialX", cutout: false, straight: false, boundary: false, emits: true, uv: true, uv_primvar: None, face_texture: None, curve: Some((false, true, [])), primvars: None } class 65535 holdout false transparent false map None uv None shading None strands Some(0) aov None swapped false curves true scale 1.0 motion [] pieces all=9:7a09773c32617eb9 camera=9:7a09773c32617eb9 shadow=9:7a09773c32617eb9 indirect=9:7a09773c32617eb9 +provenance material /World/Looks/M: MaterialOrigin { slots: [0], displaced: false } +provenance geometry 0..1: /World/C +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: None, cameras: [], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: None, offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/stage_usda-8330e4bc297d2c11-1.image b/crates/crust-core/tests/data/import_baselines/stage_usda-8330e4bc297d2c11-1.image new file mode 100644 index 000000000..c7a7b735d --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/stage_usda-8330e4bc297d2c11-1.image @@ -0,0 +1 @@ +640x360 16spp clamp-off 786c513921b13438 diff --git a/crates/crust-core/tests/data/import_baselines/stage_usda-888072d0abcb4b7c-1.digest b/crates/crust-core/tests/data/import_baselines/stage_usda-888072d0abcb4b7c-1.digest new file mode 100644 index 000000000..0a61c2ae5 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/stage_usda-888072d0abcb4b7c-1.digest @@ -0,0 +1,20 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: None +camera: Camera { origin: Vec3A(15.0, 3.0, 3.0), lower_left_corner: Vec3A(4.8863316, -0.044797063, 4.174048), horizontal: Vec3A(1.2295314, 0.0, -6.147657), vertical: Vec3A(-0.44830504, 3.4967792, -0.08966101), u: Vec3A(0.19611613, 0.0, -0.9805807), v: Vec3A(-0.1271232, 0.991561, -0.02542464), lens_radius: 0.05, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: None +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 640, height: 360, region: PixelRect { x0: 0, y0: 0, x1: 640, y1: 360 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: None, depth_of_field: true, motion_blur: false, layer_stack: ["$DIR/stage.usda"], invisible_overrides: Some(0) } +layer: $DIR/stage.usda +warning: Warning { code: CameraMissing, kind: Skipped, count: 1, prims: [], message: "USD stage has no UsdGeomCamera — falling back to world::get_settings camera" } +lights: 0 +volumes: 0 +world: 1 geometries, PrimitiveBreakdown { triangles: 0, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 1 } top level, PrimitiveBreakdown { triangles: 0, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 4, instances: 1 } unique, motion false +geom 0: material #0 Signature { kind: "MaterialX", cutout: false, straight: false, boundary: false, emits: true, uv: true, uv_primvar: None, face_texture: None, curve: Some((false, true, ["w"])), primvars: None } class 65535 holdout false transparent false map None uv None shading None strands Some(0) aov None swapped false curves true scale 1.0 motion [] pieces all=4:181bf424aa0de76e camera=4:181bf424aa0de76e shadow=4:181bf424aa0de76e indirect=4:181bf424aa0de76e +provenance material /World/Looks/M: MaterialOrigin { slots: [0], displaced: false } +provenance geometry 0..1: /World/C +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: None, cameras: [], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: None, offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/stage_usda-888072d0abcb4b7c-1.image b/crates/crust-core/tests/data/import_baselines/stage_usda-888072d0abcb4b7c-1.image new file mode 100644 index 000000000..3e89d2306 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/stage_usda-888072d0abcb4b7c-1.image @@ -0,0 +1 @@ +640x360 16spp clamp-off ea4914ee7aca7470 diff --git a/crates/crust-core/tests/data/import_baselines/stage_usda-8a23f56494af42b0-1.digest b/crates/crust-core/tests/data/import_baselines/stage_usda-8a23f56494af42b0-1.digest new file mode 100644 index 000000000..8847530b6 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/stage_usda-8a23f56494af42b0-1.digest @@ -0,0 +1,22 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: None +camera: Camera { origin: Vec3A(15.0, 3.0, 3.0), lower_left_corner: Vec3A(4.8863316, -0.044797063, 4.174048), horizontal: Vec3A(1.2295314, 0.0, -6.147657), vertical: Vec3A(-0.44830504, 3.4967792, -0.08966101), u: Vec3A(0.19611613, 0.0, -0.9805807), v: Vec3A(-0.1271232, 0.991561, -0.02542464), lens_radius: 0.05, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: None +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 640, height: 360, region: PixelRect { x0: 0, y0: 0, x1: 640, y1: 360 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: None, depth_of_field: true, motion_blur: false, layer_stack: ["$DIR/stage.usda"], invisible_overrides: Some(0) } +layer: $DIR/stage.usda +warning: Warning { code: CameraMissing, kind: Skipped, count: 1, prims: [], message: "USD stage has no UsdGeomCamera — falling back to world::get_settings camera" } +lights: 0 +volumes: 0 +world: 1 geometries, PrimitiveBreakdown { triangles: 4, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 4, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +geom 0: material #0 Signature { kind: "MaterialX", cutout: true, straight: false, boundary: false, emits: true, uv: true, uv_primvar: None, face_texture: None, curve: None, primvars: Some(["Alpha"]) } class 65535 holdout false transparent false map None uv None shading Some(0) strands None aov None swapped false curves false scale 1.0 motion [] pieces all=4:f842628536678af5 camera=4:f842628536678af5 shadow=4:f842628536678af5 indirect=4:f842628536678af5 +provenance material /World/Looks/M: MaterialOrigin { slots: [0], displaced: false } +provenance geometry 0..1: /World/Q +provenance mesh: MeshOrigin { geom_id: 0, slot: 0, baked: true, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 11829234476885859690, n_points: 6, n_indices: 8, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: None, cameras: [], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: None, offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/stage_usda-8a23f56494af42b0-1.image b/crates/crust-core/tests/data/import_baselines/stage_usda-8a23f56494af42b0-1.image new file mode 100644 index 000000000..0de6d902e --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/stage_usda-8a23f56494af42b0-1.image @@ -0,0 +1 @@ +640x360 16spp clamp-off d07080be689e52ce diff --git a/crates/crust-core/tests/data/import_baselines/stage_usda-8b53eb2ddb581089-1.digest b/crates/crust-core/tests/data/import_baselines/stage_usda-8b53eb2ddb581089-1.digest new file mode 100644 index 000000000..3c45865fe --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/stage_usda-8b53eb2ddb581089-1.digest @@ -0,0 +1,20 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: None +camera: Camera { origin: Vec3A(15.0, 3.0, 3.0), lower_left_corner: Vec3A(4.8863316, -0.044797063, 4.174048), horizontal: Vec3A(1.2295314, 0.0, -6.147657), vertical: Vec3A(-0.44830504, 3.4967792, -0.08966101), u: Vec3A(0.19611613, 0.0, -0.9805807), v: Vec3A(-0.1271232, 0.991561, -0.02542464), lens_radius: 0.05, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: None +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 640, height: 360, region: PixelRect { x0: 0, y0: 0, x1: 640, y1: 360 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: None, depth_of_field: true, motion_blur: false, layer_stack: ["$DIR/stage.usda"], invisible_overrides: Some(0) } +layer: $DIR/stage.usda +warning: Warning { code: CameraMissing, kind: Skipped, count: 1, prims: [], message: "USD stage has no UsdGeomCamera — falling back to world::get_settings camera" } +lights: 0 +volumes: 0 +world: 1 geometries, PrimitiveBreakdown { triangles: 0, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 1 } top level, PrimitiveBreakdown { triangles: 0, spheres: 0, disks: 0, cylinders: 0, curve_segments: 1, cubic_curve_spans: 0, instances: 1 } unique, motion false +geom 0: material #0 Signature { kind: "MaterialX", cutout: false, straight: false, boundary: false, emits: true, uv: true, uv_primvar: None, face_texture: None, curve: Some((true, false, [])), primvars: None } class 65535 holdout false transparent false map None uv None shading None strands Some(0) aov None swapped false curves true scale 1.0 motion [] pieces all=1:dc4d947457595750 camera=1:dc4d947457595750 shadow=1:dc4d947457595750 indirect=1:dc4d947457595750 +provenance material /World/Looks/M: MaterialOrigin { slots: [0], displaced: false } +provenance geometry 0..1: /World/C +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: None, cameras: [], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: None, offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/stage_usda-8b53eb2ddb581089-1.image b/crates/crust-core/tests/data/import_baselines/stage_usda-8b53eb2ddb581089-1.image new file mode 100644 index 000000000..458c2cb77 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/stage_usda-8b53eb2ddb581089-1.image @@ -0,0 +1 @@ +640x360 16spp clamp-off 378b39f2275b91ae diff --git a/crates/crust-core/tests/data/import_baselines/stage_usda-8bc1102225447b76-1.digest b/crates/crust-core/tests/data/import_baselines/stage_usda-8bc1102225447b76-1.digest new file mode 100644 index 000000000..40fd5ecbe --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/stage_usda-8bc1102225447b76-1.digest @@ -0,0 +1,30 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/World/cam1") +camera: Camera { origin: Vec3A(0.0, 0.6, 6.0), lower_left_corner: Vec3A(-5.3093057, -2.5855837, -4.0), horizontal: Vec3A(10.618611, 0.0, 0.0), vertical: Vec3A(0.0, 6.371167, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: Some("/Render/settings") +settings: RenderSettings { samples_per_pixel: 16, max_depth: 2, width: 40, height: 24, region: PixelRect { x0: 0, y0: 0, x1: 40, y1: 24 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [AovProduct { prim_path: "/Render/beauty", name: "beauty.exr", vars: [AovVar { prim_path: "/Render/C", name: "C", channel_prefix: None, source: Color, components: 3, precision: Float, accumulation: Filtered, clear: 0.0, expression: None, raw: false, variance: false }], attributes: [] }], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 24.0, aperture: [20.955, 15.2908], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 10.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/stage.usda", "$DIR/ipr.usda", "$DIR/cooked.usda"], invisible_overrides: Some(0) } +layer: $DIR/cooked.usda +layer: $DIR/ipr.usda +layer: $DIR/stage.usda +lights: 2 +light 0: distant name Some("/World/Sun") lpe None pmf 0.5 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 1: dome name Some("/World/Sky") lpe None pmf 0.5 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 2 geometries, PrimitiveBreakdown { triangles: 4, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 4, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:0e0a4667da70ad35 camera=2:0e0a4667da70ad35 shadow=2:0e0a4667da70ad35 indirect=2:0e0a4667da70ad35 +geom 1: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:6787da8eacebee45 camera=2:6787da8eacebee45 shadow=2:6787da8eacebee45 indirect=2:6787da8eacebee45 +provenance light /World/Sky: LightOrigin { index: 1, geoms: 2..2 } +provenance light /World/Sun: LightOrigin { index: 0, geoms: 2..2 } +provenance geometry 0..1: /World/Card +provenance geometry 1..2: /World/Floor +provenance mesh: MeshOrigin { geom_id: 0, slot: 0, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 1, slot: 1, baked: true, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 18358658470076285213, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 1: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 800109031887815527, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: true }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/World/cam1"), cameras: ["/World/cam2", "/World/cam1"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/World/cam1"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/stage_usda-8bc1102225447b76-1.image b/crates/crust-core/tests/data/import_baselines/stage_usda-8bc1102225447b76-1.image new file mode 100644 index 000000000..656bbdb35 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/stage_usda-8bc1102225447b76-1.image @@ -0,0 +1 @@ +40x24 16spp clamp-off 723815149a4df964 diff --git a/crates/crust-core/tests/data/import_baselines/stage_usda-8bcafd97dd44d415-1.digest b/crates/crust-core/tests/data/import_baselines/stage_usda-8bcafd97dd44d415-1.digest new file mode 100644 index 000000000..5a11595d9 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/stage_usda-8bcafd97dd44d415-1.digest @@ -0,0 +1,20 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: None +camera: Camera { origin: Vec3A(15.0, 3.0, 3.0), lower_left_corner: Vec3A(4.8863316, -0.044797063, 4.174048), horizontal: Vec3A(1.2295314, 0.0, -6.147657), vertical: Vec3A(-0.44830504, 3.4967792, -0.08966101), u: Vec3A(0.19611613, 0.0, -0.9805807), v: Vec3A(-0.1271232, 0.991561, -0.02542464), lens_radius: 0.05, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: None +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 640, height: 360, region: PixelRect { x0: 0, y0: 0, x1: 640, y1: 360 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: None, depth_of_field: true, motion_blur: false, layer_stack: ["$DIR/stage.usda"], invisible_overrides: Some(0) } +layer: $DIR/stage.usda +warning: Warning { code: CameraMissing, kind: Skipped, count: 1, prims: [], message: "USD stage has no UsdGeomCamera — falling back to world::get_settings camera" } +lights: 0 +volumes: 0 +world: 1 geometries, PrimitiveBreakdown { triangles: 0, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 1 } top level, PrimitiveBreakdown { triangles: 0, spheres: 0, disks: 0, cylinders: 0, curve_segments: 3, cubic_curve_spans: 0, instances: 1 } unique, motion false +geom 0: material #0 Signature { kind: "MaterialX", cutout: false, straight: false, boundary: false, emits: true, uv: true, uv_primvar: None, face_texture: None, curve: Some((false, true, ["hairColor"])), primvars: None } class 65535 holdout false transparent false map None uv None shading None strands Some(0) aov None swapped false curves true scale 1.0 motion [] pieces all=3:1fef49a575dc157a camera=3:1fef49a575dc157a shadow=3:1fef49a575dc157a indirect=3:1fef49a575dc157a +provenance material /World/Looks/M: MaterialOrigin { slots: [0], displaced: false } +provenance geometry 0..1: /World/C +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: None, cameras: [], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: None, offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/stage_usda-8bcafd97dd44d415-1.image b/crates/crust-core/tests/data/import_baselines/stage_usda-8bcafd97dd44d415-1.image new file mode 100644 index 000000000..eb5105103 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/stage_usda-8bcafd97dd44d415-1.image @@ -0,0 +1 @@ +640x360 16spp clamp-off 6b1c72f0770374ac diff --git a/crates/crust-core/tests/data/import_baselines/stage_usda-8c1801ab78070f29-1.digest b/crates/crust-core/tests/data/import_baselines/stage_usda-8c1801ab78070f29-1.digest new file mode 100644 index 000000000..9daaebc0d --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/stage_usda-8c1801ab78070f29-1.digest @@ -0,0 +1,23 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: None +camera: Camera { origin: Vec3A(15.0, 3.0, 3.0), lower_left_corner: Vec3A(4.8863316, -0.044797063, 4.174048), horizontal: Vec3A(1.2295314, 0.0, -6.147657), vertical: Vec3A(-0.44830504, 3.4967792, -0.08966101), u: Vec3A(0.19611613, 0.0, -0.9805807), v: Vec3A(-0.1271232, 0.991561, -0.02542464), lens_radius: 0.05, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: None +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 640, height: 360, region: PixelRect { x0: 0, y0: 0, x1: 640, y1: 360 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: None, depth_of_field: true, motion_blur: false, layer_stack: ["$DIR/stage.usda"], invisible_overrides: Some(0) } +layer: $DIR/stage.usda +warning: Warning { code: MeshUnsupportedPrimvar, kind: Skipped, count: 1, prims: ["/World/Q"], message: "/World/Q: primvars:label is a string (no numeric value of one to three components per element) — the material reads its geompropvalue's default there" } +warning: Warning { code: CameraMissing, kind: Skipped, count: 1, prims: [], message: "USD stage has no UsdGeomCamera — falling back to world::get_settings camera" } +lights: 0 +volumes: 0 +world: 1 geometries, PrimitiveBreakdown { triangles: 4, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 4, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +geom 0: material #0 Signature { kind: "MaterialX", cutout: false, straight: false, boundary: false, emits: true, uv: true, uv_primvar: None, face_texture: None, curve: None, primvars: Some(["label"]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=4:f842628536678af5 camera=4:f842628536678af5 shadow=4:f842628536678af5 indirect=4:f842628536678af5 +provenance material /World/Looks/M: MaterialOrigin { slots: [0], displaced: false } +provenance geometry 0..1: /World/Q +provenance mesh: MeshOrigin { geom_id: 0, slot: 0, baked: true, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 17828304714785378767, n_points: 6, n_indices: 8, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: None, cameras: [], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: None, offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/stage_usda-8c1801ab78070f29-1.image b/crates/crust-core/tests/data/import_baselines/stage_usda-8c1801ab78070f29-1.image new file mode 100644 index 000000000..45c7c7673 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/stage_usda-8c1801ab78070f29-1.image @@ -0,0 +1 @@ +640x360 16spp clamp-off a9b43f7c7735c3fb diff --git a/crates/crust-core/tests/data/import_baselines/stage_usda-8cceeaf3cdd2ee51-1.digest b/crates/crust-core/tests/data/import_baselines/stage_usda-8cceeaf3cdd2ee51-1.digest new file mode 100644 index 000000000..ad7f415ec --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/stage_usda-8cceeaf3cdd2ee51-1.digest @@ -0,0 +1,20 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: None +camera: Camera { origin: Vec3A(15.0, 3.0, 3.0), lower_left_corner: Vec3A(4.8863316, -0.044797063, 4.174048), horizontal: Vec3A(1.2295314, 0.0, -6.147657), vertical: Vec3A(-0.44830504, 3.4967792, -0.08966101), u: Vec3A(0.19611613, 0.0, -0.9805807), v: Vec3A(-0.1271232, 0.991561, -0.02542464), lens_radius: 0.05, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: None +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 640, height: 360, region: PixelRect { x0: 0, y0: 0, x1: 640, y1: 360 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: None, depth_of_field: true, motion_blur: false, layer_stack: ["$DIR/stage.usda"], invisible_overrides: Some(0) } +layer: $DIR/stage.usda +warning: Warning { code: CameraMissing, kind: Skipped, count: 1, prims: [], message: "USD stage has no UsdGeomCamera — falling back to world::get_settings camera" } +lights: 0 +volumes: 0 +world: 1 geometries, PrimitiveBreakdown { triangles: 0, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 1 } top level, PrimitiveBreakdown { triangles: 0, spheres: 0, disks: 0, cylinders: 0, curve_segments: 1, cubic_curve_spans: 0, instances: 1 } unique, motion false +geom 0: material #0 Signature { kind: "MaterialX", cutout: false, straight: false, boundary: false, emits: true, uv: true, uv_primvar: None, face_texture: None, curve: Some((false, true, ["tint"])), primvars: None } class 65535 holdout false transparent false map None uv None shading None strands Some(0) aov None swapped false curves true scale 1.0 motion [] pieces all=1:ba28ac43777139fb camera=1:ba28ac43777139fb shadow=1:ba28ac43777139fb indirect=1:ba28ac43777139fb +provenance material /World/Looks/M: MaterialOrigin { slots: [0], displaced: false } +provenance geometry 0..1: /World/C +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: None, cameras: [], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: None, offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/stage_usda-8cceeaf3cdd2ee51-1.image b/crates/crust-core/tests/data/import_baselines/stage_usda-8cceeaf3cdd2ee51-1.image new file mode 100644 index 000000000..ddd05b285 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/stage_usda-8cceeaf3cdd2ee51-1.image @@ -0,0 +1 @@ +640x360 16spp clamp-off f9a6cf9848bb1592 diff --git a/crates/crust-core/tests/data/import_baselines/stage_usda-91c6c701cea6760c-1.digest b/crates/crust-core/tests/data/import_baselines/stage_usda-91c6c701cea6760c-1.digest new file mode 100644 index 000000000..b8c9325a8 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/stage_usda-91c6c701cea6760c-1.digest @@ -0,0 +1,21 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: None +camera: Camera { origin: Vec3A(15.0, 3.0, 3.0), lower_left_corner: Vec3A(4.8863316, -0.044797063, 4.174048), horizontal: Vec3A(1.2295314, 0.0, -6.147657), vertical: Vec3A(-0.44830504, 3.4967792, -0.08966101), u: Vec3A(0.19611613, 0.0, -0.9805807), v: Vec3A(-0.1271232, 0.991561, -0.02542464), lens_radius: 0.05, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: None +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 640, height: 360, region: PixelRect { x0: 0, y0: 0, x1: 640, y1: 360 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: None, depth_of_field: true, motion_blur: false, layer_stack: ["$DIR/stage.usda"], invisible_overrides: Some(0) } +layer: $DIR/stage.usda +warning: Warning { code: CurvesUnsupportedPrimvar, kind: Skipped, count: 1, prims: ["/World/C"], message: "/World/C: primvars:label is faceVarying, which curves do not read — the material reads its default there" } +warning: Warning { code: CameraMissing, kind: Skipped, count: 1, prims: [], message: "USD stage has no UsdGeomCamera — falling back to world::get_settings camera" } +lights: 0 +volumes: 0 +world: 1 geometries, PrimitiveBreakdown { triangles: 0, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 1 } top level, PrimitiveBreakdown { triangles: 0, spheres: 0, disks: 0, cylinders: 0, curve_segments: 1, cubic_curve_spans: 0, instances: 1 } unique, motion false +geom 0: material #0 Signature { kind: "MaterialX", cutout: false, straight: false, boundary: false, emits: true, uv: true, uv_primvar: None, face_texture: None, curve: Some((false, true, ["label"])), primvars: None } class 65535 holdout false transparent false map None uv None shading None strands Some(0) aov None swapped false curves true scale 1.0 motion [] pieces all=1:ba28ac43777139fb camera=1:ba28ac43777139fb shadow=1:ba28ac43777139fb indirect=1:ba28ac43777139fb +provenance material /World/Looks/M: MaterialOrigin { slots: [0], displaced: false } +provenance geometry 0..1: /World/C +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: None, cameras: [], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: None, offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/stage_usda-91c6c701cea6760c-1.image b/crates/crust-core/tests/data/import_baselines/stage_usda-91c6c701cea6760c-1.image new file mode 100644 index 000000000..c734c5b1d --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/stage_usda-91c6c701cea6760c-1.image @@ -0,0 +1 @@ +640x360 16spp clamp-off a04a09c0d4b5e325 diff --git a/crates/crust-core/tests/data/import_baselines/stage_usda-93b962ab026b22b8-1.digest b/crates/crust-core/tests/data/import_baselines/stage_usda-93b962ab026b22b8-1.digest new file mode 100644 index 000000000..08606a40d --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/stage_usda-93b962ab026b22b8-1.digest @@ -0,0 +1,20 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: None +camera: Camera { origin: Vec3A(15.0, 3.0, 3.0), lower_left_corner: Vec3A(4.8863316, -0.044797063, 4.174048), horizontal: Vec3A(1.2295314, 0.0, -6.147657), vertical: Vec3A(-0.44830504, 3.4967792, -0.08966101), u: Vec3A(0.19611613, 0.0, -0.9805807), v: Vec3A(-0.1271232, 0.991561, -0.02542464), lens_radius: 0.05, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: None +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 640, height: 360, region: PixelRect { x0: 0, y0: 0, x1: 640, y1: 360 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: None, depth_of_field: true, motion_blur: false, layer_stack: ["$DIR/stage.usda"], invisible_overrides: Some(0) } +layer: $DIR/stage.usda +warning: Warning { code: CameraMissing, kind: Skipped, count: 1, prims: [], message: "USD stage has no UsdGeomCamera — falling back to world::get_settings camera" } +lights: 0 +volumes: 0 +world: 1 geometries, PrimitiveBreakdown { triangles: 0, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 1 } top level, PrimitiveBreakdown { triangles: 0, spheres: 0, disks: 0, cylinders: 0, curve_segments: 1, cubic_curve_spans: 0, instances: 1 } unique, motion false +geom 0: material #0 Signature { kind: "MaterialX", cutout: false, straight: false, boundary: false, emits: true, uv: true, uv_primvar: None, face_texture: None, curve: Some((false, true, ["pair"])), primvars: None } class 65535 holdout false transparent false map None uv None shading None strands Some(0) aov None swapped false curves true scale 1.0 motion [] pieces all=1:ba28ac43777139fb camera=1:ba28ac43777139fb shadow=1:ba28ac43777139fb indirect=1:ba28ac43777139fb +provenance material /World/Looks/M: MaterialOrigin { slots: [0], displaced: false } +provenance geometry 0..1: /World/C +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: None, cameras: [], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: None, offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/stage_usda-93b962ab026b22b8-1.image b/crates/crust-core/tests/data/import_baselines/stage_usda-93b962ab026b22b8-1.image new file mode 100644 index 000000000..24c7ddb45 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/stage_usda-93b962ab026b22b8-1.image @@ -0,0 +1 @@ +640x360 16spp clamp-off 6211336cd955df3b diff --git a/crates/crust-core/tests/data/import_baselines/stage_usda-976234e8d4ff9d44-1.digest b/crates/crust-core/tests/data/import_baselines/stage_usda-976234e8d4ff9d44-1.digest new file mode 100644 index 000000000..47f87da93 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/stage_usda-976234e8d4ff9d44-1.digest @@ -0,0 +1,22 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: None +camera: Camera { origin: Vec3A(15.0, 3.0, 3.0), lower_left_corner: Vec3A(4.8863316, -0.044797063, 4.174048), horizontal: Vec3A(1.2295314, 0.0, -6.147657), vertical: Vec3A(-0.44830504, 3.4967792, -0.08966101), u: Vec3A(0.19611613, 0.0, -0.9805807), v: Vec3A(-0.1271232, 0.991561, -0.02542464), lens_radius: 0.05, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: None +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 640, height: 360, region: PixelRect { x0: 0, y0: 0, x1: 640, y1: 360 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: None, depth_of_field: true, motion_blur: false, layer_stack: ["$DIR/stage.usda"], invisible_overrides: Some(0) } +layer: $DIR/stage.usda +warning: Warning { code: CameraMissing, kind: Skipped, count: 1, prims: [], message: "USD stage has no UsdGeomCamera — falling back to world::get_settings camera" } +lights: 0 +volumes: 0 +world: 1 geometries, PrimitiveBreakdown { triangles: 4, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 4, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +geom 0: material #0 Signature { kind: "MaterialX", cutout: false, straight: false, boundary: false, emits: true, uv: true, uv_primvar: None, face_texture: None, curve: None, primvars: Some(["pair"]) } class 65535 holdout false transparent false map None uv None shading Some(0) strands None aov None swapped false curves false scale 1.0 motion [] pieces all=4:f842628536678af5 camera=4:f842628536678af5 shadow=4:f842628536678af5 indirect=4:f842628536678af5 +provenance material /World/Looks/M: MaterialOrigin { slots: [0], displaced: false } +provenance geometry 0..1: /World/Q +provenance mesh: MeshOrigin { geom_id: 0, slot: 0, baked: true, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 7931273347235586577, n_points: 6, n_indices: 8, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: None, cameras: [], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: None, offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/stage_usda-976234e8d4ff9d44-1.image b/crates/crust-core/tests/data/import_baselines/stage_usda-976234e8d4ff9d44-1.image new file mode 100644 index 000000000..a0fcec940 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/stage_usda-976234e8d4ff9d44-1.image @@ -0,0 +1 @@ +640x360 16spp clamp-off 9c351d0247b71f22 diff --git a/crates/crust-core/tests/data/import_baselines/stage_usda-9a4d212002571295-1.digest b/crates/crust-core/tests/data/import_baselines/stage_usda-9a4d212002571295-1.digest new file mode 100644 index 000000000..2d4163c1f --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/stage_usda-9a4d212002571295-1.digest @@ -0,0 +1,20 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: None +camera: Camera { origin: Vec3A(15.0, 3.0, 3.0), lower_left_corner: Vec3A(4.8863316, -0.044797063, 4.174048), horizontal: Vec3A(1.2295314, 0.0, -6.147657), vertical: Vec3A(-0.44830504, 3.4967792, -0.08966101), u: Vec3A(0.19611613, 0.0, -0.9805807), v: Vec3A(-0.1271232, 0.991561, -0.02542464), lens_radius: 0.05, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: None +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 640, height: 360, region: PixelRect { x0: 0, y0: 0, x1: 640, y1: 360 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: None, depth_of_field: true, motion_blur: false, layer_stack: ["$DIR/stage.usda"], invisible_overrides: Some(0) } +layer: $DIR/stage.usda +warning: Warning { code: CameraMissing, kind: Skipped, count: 1, prims: [], message: "USD stage has no UsdGeomCamera — falling back to world::get_settings camera" } +lights: 0 +volumes: 0 +world: 1 geometries, PrimitiveBreakdown { triangles: 0, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 1 } top level, PrimitiveBreakdown { triangles: 0, spheres: 0, disks: 0, cylinders: 0, curve_segments: 1, cubic_curve_spans: 0, instances: 1 } unique, motion false +geom 0: material #0 Signature { kind: "MaterialX", cutout: false, straight: false, boundary: false, emits: true, uv: true, uv_primvar: None, face_texture: None, curve: Some((true, false, [])), primvars: None } class 65535 holdout false transparent false map None uv None shading None strands Some(0) aov None swapped false curves true scale 1.0 motion [] pieces all=1:7a8114182eb4444e camera=1:7a8114182eb4444e shadow=1:7a8114182eb4444e indirect=1:7a8114182eb4444e +provenance material /World/Looks/M: MaterialOrigin { slots: [0], displaced: false } +provenance geometry 0..1: /World/C +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: None, cameras: [], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: None, offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/stage_usda-9a4d212002571295-1.image b/crates/crust-core/tests/data/import_baselines/stage_usda-9a4d212002571295-1.image new file mode 100644 index 000000000..b2a360e22 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/stage_usda-9a4d212002571295-1.image @@ -0,0 +1 @@ +640x360 16spp clamp-off 58582c7ae13d5973 diff --git a/crates/crust-core/tests/data/import_baselines/stage_usda-9af3795f55319fa5-1.digest b/crates/crust-core/tests/data/import_baselines/stage_usda-9af3795f55319fa5-1.digest new file mode 100644 index 000000000..435822e38 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/stage_usda-9af3795f55319fa5-1.digest @@ -0,0 +1,29 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: None +camera: Camera { origin: Vec3A(15.0, 3.0, 3.0), lower_left_corner: Vec3A(4.8863316, -0.044797063, 4.174048), horizontal: Vec3A(1.2295314, 0.0, -6.147657), vertical: Vec3A(-0.44830504, 3.4967792, -0.08966101), u: Vec3A(0.19611613, 0.0, -0.9805807), v: Vec3A(-0.1271232, 0.991561, -0.02542464), lens_radius: 0.05, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: None +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 640, height: 360, region: PixelRect { x0: 0, y0: 0, x1: 640, y1: 360 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: None, depth_of_field: true, motion_blur: false, layer_stack: ["$DIR/stage.usda"], invisible_overrides: Some(0) } +layer: $DIR/stage.usda +warning: Warning { code: MeshUnsupportedPrimvar, kind: Skipped, count: 1, prims: ["/World/Can"], message: "/World/Can: primvars:other is Uniform, and an implicit shape reads only constant primvars — the material reads its geompropvalue's default there" } +warning: Warning { code: CameraMissing, kind: Skipped, count: 1, prims: [], message: "USD stage has no UsdGeomCamera — falling back to world::get_settings camera" } +lights: 0 +volumes: 0 +world: 3 geometries, PrimitiveBreakdown { triangles: 204, spheres: 1, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 204, spheres: 1, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +geom 0: material #0 Signature { kind: "MaterialX", cutout: false, straight: false, boundary: false, emits: true, uv: true, uv_primvar: None, face_texture: None, curve: None, primvars: Some(["tint", "other"]) } class 65535 holdout false transparent false map None uv None shading Some(0) strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:fb1e7d48790aec95 camera=1:fb1e7d48790aec95 shadow=1:fb1e7d48790aec95 indirect=1:fb1e7d48790aec95 +geom 1: material #0 Signature { kind: "MaterialX", cutout: false, straight: false, boundary: false, emits: true, uv: true, uv_primvar: None, face_texture: None, curve: None, primvars: Some(["tint", "other"]) } class 65535 holdout false transparent false map None uv None shading Some(1) strands None aov None swapped false curves false scale 1.0 motion [] pieces all=12:e83b27b6cb99b825 camera=12:e83b27b6cb99b825 shadow=12:e83b27b6cb99b825 indirect=12:e83b27b6cb99b825 +geom 2: material #0 Signature { kind: "MaterialX", cutout: false, straight: false, boundary: false, emits: true, uv: true, uv_primvar: None, face_texture: None, curve: None, primvars: Some(["tint", "other"]) } class 65535 holdout false transparent false map None uv None shading Some(2) strands None aov None swapped false curves false scale 1.0 motion [] pieces all=192:e09abb0ee844faa9 camera=192:e09abb0ee844faa9 shadow=192:e09abb0ee844faa9 indirect=192:e09abb0ee844faa9 +provenance material /World/Looks/M: MaterialOrigin { slots: [0, 1, 2], displaced: false } +provenance geometry 0..1: /World/Ball +provenance geometry 1..2: /World/Box +provenance geometry 2..3: /World/Can +provenance mesh: MeshOrigin { geom_id: 1, slot: 0, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 2, slot: 1, baked: true, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 2154192007262944964, n_points: 8, n_indices: 24, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 1: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 110596993976722767, n_points: 194, n_indices: 480, n_uvs: None, smooth: true, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [0] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: None, cameras: [], dicing: None, on_screen_shapes: None, unsized_shapes: true, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: None, offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/stage_usda-9af3795f55319fa5-1.image b/crates/crust-core/tests/data/import_baselines/stage_usda-9af3795f55319fa5-1.image new file mode 100644 index 000000000..95f9e9895 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/stage_usda-9af3795f55319fa5-1.image @@ -0,0 +1 @@ +640x360 16spp clamp-off fe2f054c949853e4 diff --git a/crates/crust-core/tests/data/import_baselines/stage_usda-9f427c13a5c51892-1.digest b/crates/crust-core/tests/data/import_baselines/stage_usda-9f427c13a5c51892-1.digest new file mode 100644 index 000000000..c92a4a4c9 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/stage_usda-9f427c13a5c51892-1.digest @@ -0,0 +1,22 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/World/cam") +camera: Camera { origin: Vec3A(0.0, 0.0, 0.0), lower_left_corner: Vec3A(-2.7183647, -1.5290802, -10.0), horizontal: Vec3A(5.4367294, 0.0, 0.0), vertical: Vec3A(0.0, 3.0581603, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: None +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 640, height: 360, region: PixelRect { x0: 0, y0: 0, x1: 640, y1: 360 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 50.0, aperture: [20.955, 15.2908], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 10.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/stage.usda"], invisible_overrides: Some(0) } +layer: $DIR/stage.usda +warning: Warning { code: MtlxIncomplete, kind: Approximated, count: 1, prims: ["/World/Looks/M"], message: "Material /World/Looks/M: MaterialX network not fully translated — /World/Looks/M/Blend: not a MaterialX shader (studio_mix) — its input falls back to the default" } +lights: 0 +volumes: 0 +world: 1 geometries, PrimitiveBreakdown { triangles: 2, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 2, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +geom 0: material #0 Signature { kind: "MaterialX", cutout: false, straight: false, boundary: false, emits: false, uv: true, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:641133ab27378425 camera=2:641133ab27378425 shadow=2:641133ab27378425 indirect=2:641133ab27378425 +provenance material /World/Looks/M: MaterialOrigin { slots: [0], displaced: false } +provenance geometry 0..1: /World/Quad +provenance mesh: MeshOrigin { geom_id: 0, slot: 0, baked: true, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 6920314679913877878, n_points: 4, n_indices: 4, n_uvs: None, smooth: true, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: true, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/World/cam"), cameras: ["/World/cam"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/World/cam"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/stage_usda-9f427c13a5c51892-1.image b/crates/crust-core/tests/data/import_baselines/stage_usda-9f427c13a5c51892-1.image new file mode 100644 index 000000000..c734c5b1d --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/stage_usda-9f427c13a5c51892-1.image @@ -0,0 +1 @@ +640x360 16spp clamp-off a04a09c0d4b5e325 diff --git a/crates/crust-core/tests/data/import_baselines/stage_usda-a366debd179e59ca-1.digest b/crates/crust-core/tests/data/import_baselines/stage_usda-a366debd179e59ca-1.digest new file mode 100644 index 000000000..fc4ffdfd1 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/stage_usda-a366debd179e59ca-1.digest @@ -0,0 +1,21 @@ +time: Some(5.0) +working space: Linear Rec.709 (sRGB) +camera path: Some("/World/Cam") +camera: Camera { origin: Vec3A(0.0, 0.0, 8.0), lower_left_corner: Vec3A(-5.6632595, -3.1855836, -2.0), horizontal: Vec3A(11.326519, 0.0, 0.0), vertical: Vec3A(0.0, 6.371167, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: Some("/Render/settings") +settings: RenderSettings { samples_per_pixel: 16, max_depth: 32, width: 128, height: 72, region: PixelRect { x0: 0, y0: 0, x1: 128, y1: 72 }, min_samples_per_pixel: 16, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 5, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: false, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [AovProduct { prim_path: "/Render/comp", name: "mv.exr", vars: [AovVar { prim_path: "/Render/comp/C", name: "C", channel_prefix: None, source: Color, components: 4, precision: Float, accumulation: Filtered, clear: 0.0, expression: None, raw: false, variance: false }, AovVar { prim_path: "/Render/comp/P", name: "P", channel_prefix: None, source: P, components: 3, precision: Float, accumulation: Closest, clear: 0.0, expression: None, raw: false, variance: false }, AovVar { prim_path: "/Render/comp/forward", name: "forward", channel_prefix: None, source: MotionVector, components: 2, precision: Float, accumulation: Closest, clear: 0.0, expression: None, raw: false, variance: false }], attributes: [] }], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 24.0, aperture: [20.955, 15.2908], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 10.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/stage.usda", "$DIR_base/spin.usda"], invisible_overrides: Some(0) } +layer: $DIR/stage.usda +layer: $DIR_base/spin.usda +lights: 0 +volumes: 0 +world: 1 geometries, PrimitiveBreakdown { triangles: 0, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 1 } top level, PrimitiveBreakdown { triangles: 12, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 1 } unique, motion true +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [Affine([Affine3A { matrix3: Mat3A { x_axis: Vec3A(0.76604444, 0.64278764, 0.0), y_axis: Vec3A(-0.64278764, 0.76604444, 0.0), z_axis: Vec3A(0.0, 0.0, 1.0) }, translation: Vec3A(0.0, 0.0, 0.0) }, Affine3A { matrix3: Mat3A { x_axis: Vec3A(0.6427876, 0.7660445, 0.0), y_axis: Vec3A(-0.7660445, 0.6427876, 0.0), z_axis: Vec3A(0.0, 0.0, 1.0) }, translation: Vec3A(0.0, 0.0, 0.0) }])] pieces all=12:783937e14106bdd5 camera=12:783937e14106bdd5 shadow=12:783937e14106bdd5 indirect=12:783937e14106bdd5 +provenance geometry 0..1: /World/Spin +provenance mesh: MeshOrigin { geom_id: 0, slot: 0, baked: false, moving: true } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 8921584896192100385, n_points: 8, n_indices: 24, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: Some(5.0), camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: true, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/World/Cam"), cameras: ["/World/Cam"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/World/Cam"), offsets: [0, 4607182418800017408], interval: Some([4617315517961601024, 4618441417868443648]), query: true, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/stage_usda-a366debd179e59ca-1.image b/crates/crust-core/tests/data/import_baselines/stage_usda-a366debd179e59ca-1.image new file mode 100644 index 000000000..79021150d --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/stage_usda-a366debd179e59ca-1.image @@ -0,0 +1 @@ +128x72 16spp clamp-off 2d50ab0504cbe325 diff --git a/crates/crust-core/tests/data/import_baselines/stage_usda-a5b1d711f3b9ea59-1.digest b/crates/crust-core/tests/data/import_baselines/stage_usda-a5b1d711f3b9ea59-1.digest new file mode 100644 index 000000000..b043fe350 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/stage_usda-a5b1d711f3b9ea59-1.digest @@ -0,0 +1,20 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: None +camera: Camera { origin: Vec3A(15.0, 3.0, 3.0), lower_left_corner: Vec3A(4.8863316, -0.044797063, 4.174048), horizontal: Vec3A(1.2295314, 0.0, -6.147657), vertical: Vec3A(-0.44830504, 3.4967792, -0.08966101), u: Vec3A(0.19611613, 0.0, -0.9805807), v: Vec3A(-0.1271232, 0.991561, -0.02542464), lens_radius: 0.05, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: None +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 640, height: 360, region: PixelRect { x0: 0, y0: 0, x1: 640, y1: 360 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: None, depth_of_field: true, motion_blur: false, layer_stack: ["$DIR/stage.usda"], invisible_overrides: Some(0) } +layer: $DIR/stage.usda +warning: Warning { code: CameraMissing, kind: Skipped, count: 1, prims: [], message: "USD stage has no UsdGeomCamera — falling back to world::get_settings camera" } +lights: 0 +volumes: 0 +world: 1 geometries, PrimitiveBreakdown { triangles: 0, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 1 } top level, PrimitiveBreakdown { triangles: 0, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 4, instances: 1 } unique, motion false +geom 0: material #0 Signature { kind: "MaterialX", cutout: false, straight: false, boundary: false, emits: true, uv: true, uv_primvar: None, face_texture: None, curve: Some((false, true, ["ramp"])), primvars: None } class 65535 holdout false transparent false map None uv None shading None strands Some(0) aov None swapped false curves true scale 1.0 motion [] pieces all=4:181bf424aa0de76e camera=4:181bf424aa0de76e shadow=4:181bf424aa0de76e indirect=4:181bf424aa0de76e +provenance material /World/Looks/M: MaterialOrigin { slots: [0], displaced: false } +provenance geometry 0..1: /World/C +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: None, cameras: [], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: None, offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/stage_usda-a5b1d711f3b9ea59-1.image b/crates/crust-core/tests/data/import_baselines/stage_usda-a5b1d711f3b9ea59-1.image new file mode 100644 index 000000000..13a17527c --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/stage_usda-a5b1d711f3b9ea59-1.image @@ -0,0 +1 @@ +640x360 16spp clamp-off 6af97ded10026b30 diff --git a/crates/crust-core/tests/data/import_baselines/stage_usda-a74b5f3cf6bce97e-1.digest b/crates/crust-core/tests/data/import_baselines/stage_usda-a74b5f3cf6bce97e-1.digest new file mode 100644 index 000000000..6e50dbbff --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/stage_usda-a74b5f3cf6bce97e-1.digest @@ -0,0 +1,20 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: None +camera: Camera { origin: Vec3A(15.0, 3.0, 3.0), lower_left_corner: Vec3A(4.8863316, -0.044797063, 4.174048), horizontal: Vec3A(1.2295314, 0.0, -6.147657), vertical: Vec3A(-0.44830504, 3.4967792, -0.08966101), u: Vec3A(0.19611613, 0.0, -0.9805807), v: Vec3A(-0.1271232, 0.991561, -0.02542464), lens_radius: 0.05, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: None +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 640, height: 360, region: PixelRect { x0: 0, y0: 0, x1: 640, y1: 360 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: None, depth_of_field: true, motion_blur: false, layer_stack: ["$DIR/stage.usda"], invisible_overrides: Some(0) } +layer: $DIR/stage.usda +warning: Warning { code: CameraMissing, kind: Skipped, count: 1, prims: [], message: "USD stage has no UsdGeomCamera — falling back to world::get_settings camera" } +lights: 0 +volumes: 0 +world: 1 geometries, PrimitiveBreakdown { triangles: 0, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 1 } top level, PrimitiveBreakdown { triangles: 0, spheres: 0, disks: 0, cylinders: 0, curve_segments: 1, cubic_curve_spans: 0, instances: 1 } unique, motion false +geom 0: material #0 Signature { kind: "MaterialX", cutout: false, straight: false, boundary: false, emits: true, uv: true, uv_primvar: None, face_texture: None, curve: Some((false, true, ["density"])), primvars: None } class 65535 holdout false transparent false map None uv None shading None strands Some(0) aov None swapped false curves true scale 1.0 motion [] pieces all=1:ba28ac43777139fb camera=1:ba28ac43777139fb shadow=1:ba28ac43777139fb indirect=1:ba28ac43777139fb +provenance material /World/Looks/M: MaterialOrigin { slots: [0], displaced: false } +provenance geometry 0..1: /World/C +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: None, cameras: [], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: None, offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/stage_usda-a74b5f3cf6bce97e-1.image b/crates/crust-core/tests/data/import_baselines/stage_usda-a74b5f3cf6bce97e-1.image new file mode 100644 index 000000000..6a88ce76d --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/stage_usda-a74b5f3cf6bce97e-1.image @@ -0,0 +1 @@ +640x360 16spp clamp-off 620e19378fb5372d diff --git a/crates/crust-core/tests/data/import_baselines/stage_usda-a7f91b5a6640999a-1.digest b/crates/crust-core/tests/data/import_baselines/stage_usda-a7f91b5a6640999a-1.digest new file mode 100644 index 000000000..8e23ed54e --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/stage_usda-a7f91b5a6640999a-1.digest @@ -0,0 +1,32 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: None +camera: Camera { origin: Vec3A(15.0, 3.0, 3.0), lower_left_corner: Vec3A(4.8863316, -0.044797063, 4.174048), horizontal: Vec3A(1.2295314, 0.0, -6.147657), vertical: Vec3A(-0.44830504, 3.4967792, -0.08966101), u: Vec3A(0.19611613, 0.0, -0.9805807), v: Vec3A(-0.1271232, 0.991561, -0.02542464), lens_radius: 0.05, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: None +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 640, height: 360, region: PixelRect { x0: 0, y0: 0, x1: 640, y1: 360 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: None, depth_of_field: true, motion_blur: false, layer_stack: ["$DIR/stage.usda"], invisible_overrides: Some(0) } +layer: $DIR/stage.usda +warning: Warning { code: MeshInvalidNormals, kind: Skipped, count: 4, prims: ["/World/EmptyPrimvar", "/World/Float3Primvar", "/World/ColorPrimvar", "/World/EmptyNormals"], message: "/World/EmptyPrimvar: primvars:normals is a normal3f[] (authored empty) — the mesh renders faceted" } +warning: Warning { code: CameraMissing, kind: Skipped, count: 1, prims: [], message: "USD stage has no UsdGeomCamera — falling back to world::get_settings camera" } +lights: 0 +volumes: 0 +world: 4 geometries, PrimitiveBreakdown { triangles: 0, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 4 } top level, PrimitiveBreakdown { triangles: 4, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 4 } unique, motion false +geom 0: material #0 Signature { kind: "MaterialX", cutout: false, straight: false, boundary: false, emits: true, uv: true, uv_primvar: None, face_texture: None, curve: None, primvars: Some(["ramp"]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=4:f842628536678af5 camera=4:f842628536678af5 shadow=4:f842628536678af5 indirect=4:f842628536678af5 +geom 1: material #0 Signature { kind: "MaterialX", cutout: false, straight: false, boundary: false, emits: true, uv: true, uv_primvar: None, face_texture: None, curve: None, primvars: Some(["ramp"]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=4:cc10802e6b403ef5 camera=4:cc10802e6b403ef5 shadow=4:cc10802e6b403ef5 indirect=4:cc10802e6b403ef5 +geom 2: material #0 Signature { kind: "MaterialX", cutout: false, straight: false, boundary: false, emits: true, uv: true, uv_primvar: None, face_texture: None, curve: None, primvars: Some(["ramp"]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=4:e457f36d535b70f5 camera=4:e457f36d535b70f5 shadow=4:e457f36d535b70f5 indirect=4:e457f36d535b70f5 +geom 3: material #0 Signature { kind: "MaterialX", cutout: false, straight: false, boundary: false, emits: true, uv: true, uv_primvar: None, face_texture: None, curve: None, primvars: Some(["ramp"]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=4:2f2a1ebfe7211835 camera=4:2f2a1ebfe7211835 shadow=4:2f2a1ebfe7211835 indirect=4:2f2a1ebfe7211835 +provenance material /World/Looks/M: MaterialOrigin { slots: [0, 1, 2, 3], displaced: false } +provenance geometry 0..1: /World/EmptyPrimvar +provenance geometry 1..2: /World/Float3Primvar +provenance geometry 2..3: /World/ColorPrimvar +provenance geometry 3..4: /World/EmptyNormals +provenance mesh: MeshOrigin { geom_id: 0, slot: 0, baked: false, moving: false } +provenance mesh: MeshOrigin { geom_id: 1, slot: 0, baked: false, moving: false } +provenance mesh: MeshOrigin { geom_id: 2, slot: 0, baked: false, moving: false } +provenance mesh: MeshOrigin { geom_id: 3, slot: 0, baked: false, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 17828304714785378767, n_points: 6, n_indices: 8, n_uvs: None, smooth: false, material: 0 }), placements: 4, shared: false, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: None, cameras: [], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: None, offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/stage_usda-a7f91b5a6640999a-1.image b/crates/crust-core/tests/data/import_baselines/stage_usda-a7f91b5a6640999a-1.image new file mode 100644 index 000000000..4f6fd594c --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/stage_usda-a7f91b5a6640999a-1.image @@ -0,0 +1 @@ +640x360 16spp clamp-off 8cae0790e6eb3d3f diff --git a/crates/crust-core/tests/data/import_baselines/stage_usda-a87fd805403755dc-1.digest b/crates/crust-core/tests/data/import_baselines/stage_usda-a87fd805403755dc-1.digest new file mode 100644 index 000000000..bbf26a044 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/stage_usda-a87fd805403755dc-1.digest @@ -0,0 +1,20 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/World/cam") +camera: Camera { origin: Vec3A(0.0, 0.0, 0.0), lower_left_corner: Vec3A(-2.7183647, -1.5290802, -10.0), horizontal: Vec3A(5.4367294, 0.0, 0.0), vertical: Vec3A(0.0, 3.0581603, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: None +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 640, height: 360, region: PixelRect { x0: 0, y0: 0, x1: 640, y1: 360 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 50.0, aperture: [20.955, 15.2908], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 10.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/stage.usda"], invisible_overrides: Some(0) } +layer: $DIR/stage.usda +warning: Warning { code: TextureUdimTileMissing, kind: Skipped, count: 1, prims: [], message: "could not decode $DIR/albedo.1002.png: Format error decoding Png: Invalid PNG signature. — skipping that UDIM tile" } +lights: 0 +volumes: 0 +world: 1 geometries, PrimitiveBreakdown { triangles: 0, spheres: 1, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 0, spheres: 1, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +geom 0: material #0 Signature { kind: "UsdPreviewSurface (textured)", cutout: false, straight: false, boundary: false, emits: false, uv: true, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:fb1e7d48790aec95 camera=1:fb1e7d48790aec95 shadow=1:fb1e7d48790aec95 indirect=1:fb1e7d48790aec95 +provenance material /World/Looks/Tiled: MaterialOrigin { slots: [0], displaced: false } +provenance geometry 0..1: /World/Geo/ball_Tiled +provenance spheres: [0] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/World/cam"), cameras: ["/World/cam"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/World/cam"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/stage_usda-a87fd805403755dc-1.image b/crates/crust-core/tests/data/import_baselines/stage_usda-a87fd805403755dc-1.image new file mode 100644 index 000000000..c734c5b1d --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/stage_usda-a87fd805403755dc-1.image @@ -0,0 +1 @@ +640x360 16spp clamp-off a04a09c0d4b5e325 diff --git a/crates/crust-core/tests/data/import_baselines/stage_usda-abb589be134471f7-1.digest b/crates/crust-core/tests/data/import_baselines/stage_usda-abb589be134471f7-1.digest new file mode 100644 index 000000000..2d4163c1f --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/stage_usda-abb589be134471f7-1.digest @@ -0,0 +1,20 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: None +camera: Camera { origin: Vec3A(15.0, 3.0, 3.0), lower_left_corner: Vec3A(4.8863316, -0.044797063, 4.174048), horizontal: Vec3A(1.2295314, 0.0, -6.147657), vertical: Vec3A(-0.44830504, 3.4967792, -0.08966101), u: Vec3A(0.19611613, 0.0, -0.9805807), v: Vec3A(-0.1271232, 0.991561, -0.02542464), lens_radius: 0.05, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: None +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 640, height: 360, region: PixelRect { x0: 0, y0: 0, x1: 640, y1: 360 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: None, depth_of_field: true, motion_blur: false, layer_stack: ["$DIR/stage.usda"], invisible_overrides: Some(0) } +layer: $DIR/stage.usda +warning: Warning { code: CameraMissing, kind: Skipped, count: 1, prims: [], message: "USD stage has no UsdGeomCamera — falling back to world::get_settings camera" } +lights: 0 +volumes: 0 +world: 1 geometries, PrimitiveBreakdown { triangles: 0, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 1 } top level, PrimitiveBreakdown { triangles: 0, spheres: 0, disks: 0, cylinders: 0, curve_segments: 1, cubic_curve_spans: 0, instances: 1 } unique, motion false +geom 0: material #0 Signature { kind: "MaterialX", cutout: false, straight: false, boundary: false, emits: true, uv: true, uv_primvar: None, face_texture: None, curve: Some((true, false, [])), primvars: None } class 65535 holdout false transparent false map None uv None shading None strands Some(0) aov None swapped false curves true scale 1.0 motion [] pieces all=1:7a8114182eb4444e camera=1:7a8114182eb4444e shadow=1:7a8114182eb4444e indirect=1:7a8114182eb4444e +provenance material /World/Looks/M: MaterialOrigin { slots: [0], displaced: false } +provenance geometry 0..1: /World/C +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: None, cameras: [], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: None, offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/stage_usda-abb589be134471f7-1.image b/crates/crust-core/tests/data/import_baselines/stage_usda-abb589be134471f7-1.image new file mode 100644 index 000000000..cce857adb --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/stage_usda-abb589be134471f7-1.image @@ -0,0 +1 @@ +640x360 16spp clamp-off 5a2e886dbf4ce620 diff --git a/crates/crust-core/tests/data/import_baselines/stage_usda-abeca91af484e4eb-1.digest b/crates/crust-core/tests/data/import_baselines/stage_usda-abeca91af484e4eb-1.digest new file mode 100644 index 000000000..ad7f415ec --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/stage_usda-abeca91af484e4eb-1.digest @@ -0,0 +1,20 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: None +camera: Camera { origin: Vec3A(15.0, 3.0, 3.0), lower_left_corner: Vec3A(4.8863316, -0.044797063, 4.174048), horizontal: Vec3A(1.2295314, 0.0, -6.147657), vertical: Vec3A(-0.44830504, 3.4967792, -0.08966101), u: Vec3A(0.19611613, 0.0, -0.9805807), v: Vec3A(-0.1271232, 0.991561, -0.02542464), lens_radius: 0.05, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: None +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 640, height: 360, region: PixelRect { x0: 0, y0: 0, x1: 640, y1: 360 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: None, depth_of_field: true, motion_blur: false, layer_stack: ["$DIR/stage.usda"], invisible_overrides: Some(0) } +layer: $DIR/stage.usda +warning: Warning { code: CameraMissing, kind: Skipped, count: 1, prims: [], message: "USD stage has no UsdGeomCamera — falling back to world::get_settings camera" } +lights: 0 +volumes: 0 +world: 1 geometries, PrimitiveBreakdown { triangles: 0, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 1 } top level, PrimitiveBreakdown { triangles: 0, spheres: 0, disks: 0, cylinders: 0, curve_segments: 1, cubic_curve_spans: 0, instances: 1 } unique, motion false +geom 0: material #0 Signature { kind: "MaterialX", cutout: false, straight: false, boundary: false, emits: true, uv: true, uv_primvar: None, face_texture: None, curve: Some((false, true, ["tint"])), primvars: None } class 65535 holdout false transparent false map None uv None shading None strands Some(0) aov None swapped false curves true scale 1.0 motion [] pieces all=1:ba28ac43777139fb camera=1:ba28ac43777139fb shadow=1:ba28ac43777139fb indirect=1:ba28ac43777139fb +provenance material /World/Looks/M: MaterialOrigin { slots: [0], displaced: false } +provenance geometry 0..1: /World/C +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: None, cameras: [], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: None, offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/stage_usda-abeca91af484e4eb-1.image b/crates/crust-core/tests/data/import_baselines/stage_usda-abeca91af484e4eb-1.image new file mode 100644 index 000000000..ddd05b285 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/stage_usda-abeca91af484e4eb-1.image @@ -0,0 +1 @@ +640x360 16spp clamp-off f9a6cf9848bb1592 diff --git a/crates/crust-core/tests/data/import_baselines/stage_usda-b0726246200d796c-1.digest b/crates/crust-core/tests/data/import_baselines/stage_usda-b0726246200d796c-1.digest new file mode 100644 index 000000000..bdc2bb621 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/stage_usda-b0726246200d796c-1.digest @@ -0,0 +1,21 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: None +camera: Camera { origin: Vec3A(15.0, 3.0, 3.0), lower_left_corner: Vec3A(4.8863316, -0.044797063, 4.174048), horizontal: Vec3A(1.2295314, 0.0, -6.147657), vertical: Vec3A(-0.44830504, 3.4967792, -0.08966101), u: Vec3A(0.19611613, 0.0, -0.9805807), v: Vec3A(-0.1271232, 0.991561, -0.02542464), lens_radius: 0.05, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: None +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 640, height: 360, region: PixelRect { x0: 0, y0: 0, x1: 640, y1: 360 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: None, depth_of_field: true, motion_blur: false, layer_stack: ["$DIR/stage.usda"], invisible_overrides: Some(0) } +layer: $DIR/stage.usda +warning: Warning { code: CurvesUnsupportedPrimvar, kind: Skipped, count: 1, prims: ["/World/C"], message: "/World/C: primvars:label is a matrix4d, which curves do not read (float, float2, float3, color3f, int) — the material reads its default there" } +warning: Warning { code: CameraMissing, kind: Skipped, count: 1, prims: [], message: "USD stage has no UsdGeomCamera — falling back to world::get_settings camera" } +lights: 0 +volumes: 0 +world: 1 geometries, PrimitiveBreakdown { triangles: 0, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 1 } top level, PrimitiveBreakdown { triangles: 0, spheres: 0, disks: 0, cylinders: 0, curve_segments: 1, cubic_curve_spans: 0, instances: 1 } unique, motion false +geom 0: material #0 Signature { kind: "MaterialX", cutout: false, straight: false, boundary: false, emits: true, uv: true, uv_primvar: None, face_texture: None, curve: Some((false, true, ["label"])), primvars: None } class 65535 holdout false transparent false map None uv None shading None strands Some(0) aov None swapped false curves true scale 1.0 motion [] pieces all=1:ba28ac43777139fb camera=1:ba28ac43777139fb shadow=1:ba28ac43777139fb indirect=1:ba28ac43777139fb +provenance material /World/Looks/M: MaterialOrigin { slots: [0], displaced: false } +provenance geometry 0..1: /World/C +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: None, cameras: [], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: None, offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/stage_usda-b0726246200d796c-1.image b/crates/crust-core/tests/data/import_baselines/stage_usda-b0726246200d796c-1.image new file mode 100644 index 000000000..c734c5b1d --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/stage_usda-b0726246200d796c-1.image @@ -0,0 +1 @@ +640x360 16spp clamp-off a04a09c0d4b5e325 diff --git a/crates/crust-core/tests/data/import_baselines/stage_usda-b091ac35593cb491-1.digest b/crates/crust-core/tests/data/import_baselines/stage_usda-b091ac35593cb491-1.digest new file mode 100644 index 000000000..b2353e722 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/stage_usda-b091ac35593cb491-1.digest @@ -0,0 +1,26 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/World/cam") +camera: Camera { origin: Vec3A(0.0, 0.0, 0.0), lower_left_corner: Vec3A(-2.7183647, -1.5290802, -10.0), horizontal: Vec3A(5.4367294, 0.0, 0.0), vertical: Vec3A(0.0, 3.0581603, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: None +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 640, height: 360, region: PixelRect { x0: 0, y0: 0, x1: 640, y1: 360 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 50.0, aperture: [20.955, 15.2908], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 10.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/stage.usda"], invisible_overrides: Some(0) } +layer: $DIR/stage.usda +warning: Warning { code: TextureUnreadable, kind: Skipped, count: 3, prims: ["/World/Looks/C", "/World/Looks/B", "/World/Looks/A"], message: "could not read $DIR/missing_albedo.png: No such file or directory (os error 2) — the input reads its fallback" } +lights: 0 +volumes: 0 +world: 3 geometries, PrimitiveBreakdown { triangles: 0, spheres: 3, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 0, spheres: 3, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +geom 0: material #0 Signature { kind: "UsdPreviewSurface (textured)", cutout: false, straight: false, boundary: false, emits: false, uv: true, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:60208aa8cac759e5 camera=1:60208aa8cac759e5 shadow=1:60208aa8cac759e5 indirect=1:60208aa8cac759e5 +geom 1: material #1 Signature { kind: "UsdPreviewSurface (textured)", cutout: false, straight: false, boundary: false, emits: false, uv: true, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:d46e920fbc035ae5 camera=1:d46e920fbc035ae5 shadow=1:d46e920fbc035ae5 indirect=1:d46e920fbc035ae5 +geom 2: material #2 Signature { kind: "UsdPreviewSurface (textured)", cutout: false, straight: false, boundary: false, emits: false, uv: true, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:fb1e7d48790aec95 camera=1:fb1e7d48790aec95 shadow=1:fb1e7d48790aec95 indirect=1:fb1e7d48790aec95 +provenance material /World/Looks/A: MaterialOrigin { slots: [2], displaced: false } +provenance material /World/Looks/B: MaterialOrigin { slots: [1], displaced: false } +provenance material /World/Looks/C: MaterialOrigin { slots: [0], displaced: false } +provenance geometry 0..1: /World/Geo/ball_C +provenance geometry 1..2: /World/Geo/ball_B +provenance geometry 2..3: /World/Geo/ball_A +provenance spheres: [0, 1, 2] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/World/cam"), cameras: ["/World/cam"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/World/cam"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/stage_usda-b091ac35593cb491-1.image b/crates/crust-core/tests/data/import_baselines/stage_usda-b091ac35593cb491-1.image new file mode 100644 index 000000000..c734c5b1d --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/stage_usda-b091ac35593cb491-1.image @@ -0,0 +1 @@ +640x360 16spp clamp-off a04a09c0d4b5e325 diff --git a/crates/crust-core/tests/data/import_baselines/stage_usda-b8974322f9c3c9a8-1.digest b/crates/crust-core/tests/data/import_baselines/stage_usda-b8974322f9c3c9a8-1.digest new file mode 100644 index 000000000..7cdd232b5 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/stage_usda-b8974322f9c3c9a8-1.digest @@ -0,0 +1,30 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: None +camera: Camera { origin: Vec3A(15.0, 3.0, 3.0), lower_left_corner: Vec3A(4.8863316, -0.044797063, 4.174048), horizontal: Vec3A(1.2295314, 0.0, -6.147657), vertical: Vec3A(-0.44830504, 3.4967792, -0.08966101), u: Vec3A(0.19611613, 0.0, -0.9805807), v: Vec3A(-0.1271232, 0.991561, -0.02542464), lens_radius: 0.05, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: None +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 640, height: 360, region: PixelRect { x0: 0, y0: 0, x1: 640, y1: 360 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: None, depth_of_field: true, motion_blur: false, layer_stack: ["$DIR/stage.usda"], invisible_overrides: Some(0) } +layer: $DIR/stage.usda +warning: Warning { code: CameraMissing, kind: Skipped, count: 1, prims: [], message: "USD stage has no UsdGeomCamera — falling back to world::get_settings camera" } +lights: 0 +volumes: 0 +world: 3 geometries, PrimitiveBreakdown { triangles: 12, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 12, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +geom 0: material #0 Signature { kind: "MaterialX", cutout: false, straight: false, boundary: false, emits: true, uv: true, uv_primvar: None, face_texture: None, curve: None, primvars: Some(["ramp"]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=4:f842628536678af5 camera=4:f842628536678af5 shadow=4:f842628536678af5 indirect=4:f842628536678af5 +geom 1: material #0 Signature { kind: "MaterialX", cutout: false, straight: false, boundary: false, emits: true, uv: true, uv_primvar: None, face_texture: None, curve: None, primvars: Some(["ramp"]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=4:cc10802e6b403ef5 camera=4:cc10802e6b403ef5 shadow=4:cc10802e6b403ef5 indirect=4:cc10802e6b403ef5 +geom 2: material #0 Signature { kind: "MaterialX", cutout: false, straight: false, boundary: false, emits: true, uv: true, uv_primvar: None, face_texture: None, curve: None, primvars: Some(["ramp"]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=4:e457f36d535b70f5 camera=4:e457f36d535b70f5 shadow=4:e457f36d535b70f5 indirect=4:e457f36d535b70f5 +provenance material /World/Looks/M: MaterialOrigin { slots: [0, 1, 2], displaced: false } +provenance geometry 0..1: /World/A +provenance geometry 1..2: /World/B +provenance geometry 2..3: /World/C +provenance mesh: MeshOrigin { geom_id: 0, slot: 0, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 1, slot: 1, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 2, slot: 2, baked: true, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 17893806835409548195, n_points: 8, n_indices: 8, n_uvs: None, smooth: true, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 1: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 13698019543451785888, n_points: 6, n_indices: 8, n_uvs: None, smooth: true, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 2: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 17828304714785378767, n_points: 6, n_indices: 8, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: None, cameras: [], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: None, offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/stage_usda-b8974322f9c3c9a8-1.image b/crates/crust-core/tests/data/import_baselines/stage_usda-b8974322f9c3c9a8-1.image new file mode 100644 index 000000000..4f6fd594c --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/stage_usda-b8974322f9c3c9a8-1.image @@ -0,0 +1 @@ +640x360 16spp clamp-off 8cae0790e6eb3d3f diff --git a/crates/crust-core/tests/data/import_baselines/stage_usda-bb51bbccac634602-1.digest b/crates/crust-core/tests/data/import_baselines/stage_usda-bb51bbccac634602-1.digest new file mode 100644 index 000000000..7845be362 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/stage_usda-bb51bbccac634602-1.digest @@ -0,0 +1,16 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/World/cam") +camera: Camera { origin: Vec3A(0.0, 0.0, 0.0), lower_left_corner: Vec3A(-2.7183647, -1.5290802, -10.0), horizontal: Vec3A(5.4367294, 0.0, 0.0), vertical: Vec3A(0.0, 3.0581603, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: None +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 640, height: 360, region: PixelRect { x0: 0, y0: 0, x1: 640, y1: 360 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 50.0, aperture: [20.955, 15.2908], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 10.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/stage.usda"], invisible_overrides: Some(0) } +layer: $DIR/stage.usda +lights: 0 +volumes: 0 +world: 0 geometries, PrimitiveBreakdown { triangles: 0, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 0, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/World/cam"), cameras: ["/World/cam"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/World/cam"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/stage_usda-bb51bbccac634602-1.image b/crates/crust-core/tests/data/import_baselines/stage_usda-bb51bbccac634602-1.image new file mode 100644 index 000000000..c734c5b1d --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/stage_usda-bb51bbccac634602-1.image @@ -0,0 +1 @@ +640x360 16spp clamp-off a04a09c0d4b5e325 diff --git a/crates/crust-core/tests/data/import_baselines/stage_usda-bc2640abb95a8689-1.digest b/crates/crust-core/tests/data/import_baselines/stage_usda-bc2640abb95a8689-1.digest new file mode 100644 index 000000000..2283b13af --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/stage_usda-bc2640abb95a8689-1.digest @@ -0,0 +1,22 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: None +camera: Camera { origin: Vec3A(15.0, 3.0, 3.0), lower_left_corner: Vec3A(4.8863316, -0.044797063, 4.174048), horizontal: Vec3A(1.2295314, 0.0, -6.147657), vertical: Vec3A(-0.44830504, 3.4967792, -0.08966101), u: Vec3A(0.19611613, 0.0, -0.9805807), v: Vec3A(-0.1271232, 0.991561, -0.02542464), lens_radius: 0.05, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: None +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 640, height: 360, region: PixelRect { x0: 0, y0: 0, x1: 640, y1: 360 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: None, depth_of_field: true, motion_blur: false, layer_stack: ["$DIR/stage.usda"], invisible_overrides: Some(0) } +layer: $DIR/stage.usda +warning: Warning { code: CameraMissing, kind: Skipped, count: 1, prims: [], message: "USD stage has no UsdGeomCamera — falling back to world::get_settings camera" } +lights: 0 +volumes: 0 +world: 1 geometries, PrimitiveBreakdown { triangles: 4, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 4, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +geom 0: material #0 Signature { kind: "MaterialX", cutout: false, straight: false, boundary: false, emits: true, uv: true, uv_primvar: None, face_texture: None, curve: None, primvars: Some(["ramp"]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=4:f842628536678af5 camera=4:f842628536678af5 shadow=4:f842628536678af5 indirect=4:f842628536678af5 +provenance material /World/Looks/M: MaterialOrigin { slots: [0], displaced: false } +provenance geometry 0..1: /World/Q +provenance mesh: MeshOrigin { geom_id: 0, slot: 0, baked: true, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 8386128300084420682, n_points: 6, n_indices: 8, n_uvs: None, smooth: true, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: None, cameras: [], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: None, offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/stage_usda-bc2640abb95a8689-1.image b/crates/crust-core/tests/data/import_baselines/stage_usda-bc2640abb95a8689-1.image new file mode 100644 index 000000000..45c7c7673 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/stage_usda-bc2640abb95a8689-1.image @@ -0,0 +1 @@ +640x360 16spp clamp-off a9b43f7c7735c3fb diff --git a/crates/crust-core/tests/data/import_baselines/stage_usda-bdce5005dd991897-1.digest b/crates/crust-core/tests/data/import_baselines/stage_usda-bdce5005dd991897-1.digest new file mode 100644 index 000000000..0b865e807 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/stage_usda-bdce5005dd991897-1.digest @@ -0,0 +1,23 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: None +camera: Camera { origin: Vec3A(15.0, 3.0, 3.0), lower_left_corner: Vec3A(4.8863316, -0.044797063, 4.174048), horizontal: Vec3A(1.2295314, 0.0, -6.147657), vertical: Vec3A(-0.44830504, 3.4967792, -0.08966101), u: Vec3A(0.19611613, 0.0, -0.9805807), v: Vec3A(-0.1271232, 0.991561, -0.02542464), lens_radius: 0.05, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: None +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 640, height: 360, region: PixelRect { x0: 0, y0: 0, x1: 640, y1: 360 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: None, depth_of_field: true, motion_blur: false, layer_stack: ["$DIR/stage.usda"], invisible_overrides: Some(0) } +layer: $DIR/stage.usda +warning: Warning { code: MeshUnsupportedPrimvar, kind: Skipped, count: 1, prims: ["/World/Q"], message: "/World/Q: primvars:label is a float[] (indices that are not an int[]) — the material reads its geompropvalue's default there" } +warning: Warning { code: CameraMissing, kind: Skipped, count: 1, prims: [], message: "USD stage has no UsdGeomCamera — falling back to world::get_settings camera" } +lights: 0 +volumes: 0 +world: 1 geometries, PrimitiveBreakdown { triangles: 4, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 4, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +geom 0: material #0 Signature { kind: "MaterialX", cutout: false, straight: false, boundary: false, emits: true, uv: true, uv_primvar: None, face_texture: None, curve: None, primvars: Some(["label"]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=4:f842628536678af5 camera=4:f842628536678af5 shadow=4:f842628536678af5 indirect=4:f842628536678af5 +provenance material /World/Looks/M: MaterialOrigin { slots: [0], displaced: false } +provenance geometry 0..1: /World/Q +provenance mesh: MeshOrigin { geom_id: 0, slot: 0, baked: true, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 17828304714785378767, n_points: 6, n_indices: 8, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: None, cameras: [], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: None, offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/stage_usda-bdce5005dd991897-1.image b/crates/crust-core/tests/data/import_baselines/stage_usda-bdce5005dd991897-1.image new file mode 100644 index 000000000..45c7c7673 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/stage_usda-bdce5005dd991897-1.image @@ -0,0 +1 @@ +640x360 16spp clamp-off a9b43f7c7735c3fb diff --git a/crates/crust-core/tests/data/import_baselines/stage_usda-c3555672a13627c7-1.digest b/crates/crust-core/tests/data/import_baselines/stage_usda-c3555672a13627c7-1.digest new file mode 100644 index 000000000..e3f9986cd --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/stage_usda-c3555672a13627c7-1.digest @@ -0,0 +1,25 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: None +camera: Camera { origin: Vec3A(15.0, 3.0, 3.0), lower_left_corner: Vec3A(4.8863316, -0.044797063, 4.174048), horizontal: Vec3A(1.2295314, 0.0, -6.147657), vertical: Vec3A(-0.44830504, 3.4967792, -0.08966101), u: Vec3A(0.19611613, 0.0, -0.9805807), v: Vec3A(-0.1271232, 0.991561, -0.02542464), lens_radius: 0.05, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: None +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 640, height: 360, region: PixelRect { x0: 0, y0: 0, x1: 640, y1: 360 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: None, depth_of_field: true, motion_blur: false, layer_stack: ["$DIR/stage.usda"], invisible_overrides: Some(0) } +layer: $DIR/stage.usda +warning: Warning { code: CameraMissing, kind: Skipped, count: 1, prims: [], message: "USD stage has no UsdGeomCamera — falling back to world::get_settings camera" } +lights: 0 +volumes: 0 +world: 4 geometries, PrimitiveBreakdown { triangles: 0, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 4 } top level, PrimitiveBreakdown { triangles: 0, spheres: 0, disks: 0, cylinders: 0, curve_segments: 6, cubic_curve_spans: 0, instances: 4 } unique, motion false +geom 0: material #0 Signature { kind: "MaterialX", cutout: false, straight: false, boundary: false, emits: true, uv: true, uv_primvar: None, face_texture: None, curve: Some((false, true, [])), primvars: None } class 65535 holdout false transparent false map None uv None shading None strands Some(0) aov None swapped false curves true scale 1.0 motion [] pieces all=2:4efa2966eb9e8422 camera=2:4efa2966eb9e8422 shadow=2:4efa2966eb9e8422 indirect=2:4efa2966eb9e8422 +geom 1: material #0 Signature { kind: "MaterialX", cutout: false, straight: false, boundary: false, emits: true, uv: true, uv_primvar: None, face_texture: None, curve: Some((false, true, [])), primvars: None } class 65535 holdout false transparent false map None uv None shading None strands Some(1) aov None swapped false curves true scale 1.0 motion [] pieces all=2:415633d4ba8f2959 camera=2:415633d4ba8f2959 shadow=2:415633d4ba8f2959 indirect=2:415633d4ba8f2959 +geom 2: material #0 Signature { kind: "MaterialX", cutout: false, straight: false, boundary: false, emits: true, uv: true, uv_primvar: None, face_texture: None, curve: Some((false, true, [])), primvars: None } class 65535 holdout false transparent false map None uv None shading None strands Some(2) aov None swapped false curves true scale 1.0 motion [] pieces all=2:302b81f02f4f6445 camera=2:302b81f02f4f6445 shadow=2:302b81f02f4f6445 indirect=2:302b81f02f4f6445 +geom 3: material #0 Signature { kind: "MaterialX", cutout: false, straight: false, boundary: false, emits: true, uv: true, uv_primvar: None, face_texture: None, curve: Some((false, true, [])), primvars: None } class 65535 holdout false transparent false map None uv None shading None strands Some(2) aov None swapped false curves true scale 0.99999994 motion [] pieces all=2:9dc64ea1912070c2 camera=2:9dc64ea1912070c2 shadow=2:9dc64ea1912070c2 indirect=2:9dc64ea1912070c2 +provenance material /World/Looks/M: MaterialOrigin { slots: [0, 1, 2, 3], displaced: false } +provenance geometry 0..1: /World/Protos/P/Clump +provenance geometry 1..2: /World/Native +provenance geometry 2..4: /World/Scatter +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: None, cameras: [], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: None, offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/stage_usda-c3555672a13627c7-1.image b/crates/crust-core/tests/data/import_baselines/stage_usda-c3555672a13627c7-1.image new file mode 100644 index 000000000..ead6e63c8 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/stage_usda-c3555672a13627c7-1.image @@ -0,0 +1 @@ +640x360 16spp clamp-off 1c93901d5b1548e9 diff --git a/crates/crust-core/tests/data/import_baselines/stage_usda-c469a696e567b939-1.digest b/crates/crust-core/tests/data/import_baselines/stage_usda-c469a696e567b939-1.digest new file mode 100644 index 000000000..e86b7a076 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/stage_usda-c469a696e567b939-1.digest @@ -0,0 +1,20 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: None +camera: Camera { origin: Vec3A(15.0, 3.0, 3.0), lower_left_corner: Vec3A(4.8863316, -0.044797063, 4.174048), horizontal: Vec3A(1.2295314, 0.0, -6.147657), vertical: Vec3A(-0.44830504, 3.4967792, -0.08966101), u: Vec3A(0.19611613, 0.0, -0.9805807), v: Vec3A(-0.1271232, 0.991561, -0.02542464), lens_radius: 0.05, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: None +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 640, height: 360, region: PixelRect { x0: 0, y0: 0, x1: 640, y1: 360 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: None, depth_of_field: true, motion_blur: false, layer_stack: ["$DIR/stage.usda"], invisible_overrides: Some(0) } +layer: $DIR/stage.usda +warning: Warning { code: CameraMissing, kind: Skipped, count: 1, prims: [], message: "USD stage has no UsdGeomCamera — falling back to world::get_settings camera" } +lights: 0 +volumes: 0 +world: 1 geometries, PrimitiveBreakdown { triangles: 0, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 1 } top level, PrimitiveBreakdown { triangles: 0, spheres: 0, disks: 0, cylinders: 0, curve_segments: 1, cubic_curve_spans: 0, instances: 1 } unique, motion false +geom 0: material #0 Signature { kind: "MaterialX", cutout: false, straight: false, boundary: false, emits: true, uv: true, uv_primvar: None, face_texture: None, curve: Some((true, false, [])), primvars: None } class 65535 holdout false transparent false map None uv None shading None strands Some(0) aov None swapped false curves true scale 1.0 motion [] pieces all=1:ba28ac43777139fb camera=1:ba28ac43777139fb shadow=1:ba28ac43777139fb indirect=1:ba28ac43777139fb +provenance material /World/Looks/M: MaterialOrigin { slots: [0], displaced: false } +provenance geometry 0..1: /World/C +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: None, cameras: [], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: None, offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/stage_usda-c469a696e567b939-1.image b/crates/crust-core/tests/data/import_baselines/stage_usda-c469a696e567b939-1.image new file mode 100644 index 000000000..24c7ddb45 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/stage_usda-c469a696e567b939-1.image @@ -0,0 +1 @@ +640x360 16spp clamp-off 6211336cd955df3b diff --git a/crates/crust-core/tests/data/import_baselines/stage_usda-c7b4569174f0eec0-1.digest b/crates/crust-core/tests/data/import_baselines/stage_usda-c7b4569174f0eec0-1.digest new file mode 100644 index 000000000..6c7e8fd32 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/stage_usda-c7b4569174f0eec0-1.digest @@ -0,0 +1,19 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/World/cam") +camera: Camera { origin: Vec3A(0.0, 0.0, 0.0), lower_left_corner: Vec3A(-2.7183647, -1.5290802, -10.0), horizontal: Vec3A(5.4367294, 0.0, 0.0), vertical: Vec3A(0.0, 3.0581603, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: None +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 640, height: 360, region: PixelRect { x0: 0, y0: 0, x1: 640, y1: 360 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 50.0, aperture: [20.955, 15.2908], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 10.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/stage.usda"], invisible_overrides: Some(0) } +layer: $DIR/stage.usda +lights: 0 +volumes: 0 +world: 1 geometries, PrimitiveBreakdown { triangles: 0, spheres: 1, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 0, spheres: 1, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +geom 0: material #0 Signature { kind: "UsdPreviewSurface (textured)", cutout: false, straight: false, boundary: false, emits: false, uv: true, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:fb1e7d48790aec95 camera=1:fb1e7d48790aec95 shadow=1:fb1e7d48790aec95 indirect=1:fb1e7d48790aec95 +provenance material /World/Looks/M: MaterialOrigin { slots: [0], displaced: false } +provenance geometry 0..1: /World/ball +provenance spheres: [0] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: true, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/World/cam"), cameras: ["/World/cam"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/World/cam"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/stage_usda-c7b4569174f0eec0-1.image b/crates/crust-core/tests/data/import_baselines/stage_usda-c7b4569174f0eec0-1.image new file mode 100644 index 000000000..c734c5b1d --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/stage_usda-c7b4569174f0eec0-1.image @@ -0,0 +1 @@ +640x360 16spp clamp-off a04a09c0d4b5e325 diff --git a/crates/crust-core/tests/data/import_baselines/stage_usda-cd83faa181eb1fd7-1.digest b/crates/crust-core/tests/data/import_baselines/stage_usda-cd83faa181eb1fd7-1.digest new file mode 100644 index 000000000..0393272dd --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/stage_usda-cd83faa181eb1fd7-1.digest @@ -0,0 +1,33 @@ +time: Some(5.0) +working space: Linear Rec.709 (sRGB) +camera path: Some("/World/Cam") +camera: Camera { origin: Vec3A(0.0, 1.5, 7.0), lower_left_corner: Vec3A(-5.6632595, -1.6855836, -3.0), horizontal: Vec3A(11.326519, 0.0, 0.0), vertical: Vec3A(0.0, 6.371167, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: Some("/Render/settings") +settings: RenderSettings { samples_per_pixel: 16, max_depth: 4, width: 128, height: 72, region: PixelRect { x0: 0, y0: 0, x1: 128, y1: 72 }, min_samples_per_pixel: 16, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 5, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: false, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [AovProduct { prim_path: "/Render/comp", name: "mv.exr", vars: [AovVar { prim_path: "/Render/comp/C", name: "C", channel_prefix: None, source: Color, components: 4, precision: Float, accumulation: Filtered, clear: 0.0, expression: None, raw: false, variance: false }, AovVar { prim_path: "/Render/comp/P", name: "P", channel_prefix: None, source: P, components: 3, precision: Float, accumulation: Closest, clear: 0.0, expression: None, raw: false, variance: false }, AovVar { prim_path: "/Render/comp/forward", name: "forward", channel_prefix: None, source: MotionVector, components: 2, precision: Float, accumulation: Closest, clear: 0.0, expression: None, raw: false, variance: false }], attributes: [] }], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 24.0, aperture: [20.955, 15.2908], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 10.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/stage.usda", "$ROOT/samples/animation.usda"], invisible_overrides: Some(0) } +layer: $ROOT/samples/animation.usda +layer: $DIR/stage.usda +lights: 2 +light 0: area name Some("/World/KeyLight") lpe None pmf 0.5 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 1: dome name Some("/World/Sky") lpe None pmf 0.5 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 4 geometries, PrimitiveBreakdown { triangles: 6, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 1 } top level, PrimitiveBreakdown { triangles: 6, spheres: 1, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 1 } unique, motion true +geom 0: material #0 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:9de8214b59f6ec57 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=2:9de8214b59f6ec57 +geom 1: material #1 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:be0b97004c4d3e85 camera=2:be0b97004c4d3e85 shadow=2:be0b97004c4d3e85 indirect=2:be0b97004c4d3e85 +geom 2: material #1 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:04a229f6b721d5f0 camera=2:04a229f6b721d5f0 shadow=2:04a229f6b721d5f0 indirect=2:04a229f6b721d5f0 +geom 3: material #1 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [Translation(Vec3A(0.44444445, 0.0, 0.0))] pieces all=1:eca0c2f96d67613b camera=1:eca0c2f96d67613b shadow=1:eca0c2f96d67613b indirect=1:eca0c2f96d67613b +provenance light /World/KeyLight: LightOrigin { index: 0, geoms: 0..1 } +provenance light /World/Sky: LightOrigin { index: 1, geoms: 4..4 } +provenance geometry 0..1: /World/KeyLight +provenance geometry 1..2: /World/Floor +provenance geometry 2..3: /World/Card +provenance geometry 3..4: /World/Mover +provenance mesh: MeshOrigin { geom_id: 1, slot: 0, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 2, slot: 1, baked: true, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 8416296582947184296, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 1: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 16680805309457723353, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: Some(5.0), camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: true, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/World/Cam"), cameras: ["/World/Cam"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/World/Cam"), offsets: [0, 4607182418800017408], interval: Some([4617315517961601024, 4618441417868443648]), query: true, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/stage_usda-cd83faa181eb1fd7-1.image b/crates/crust-core/tests/data/import_baselines/stage_usda-cd83faa181eb1fd7-1.image new file mode 100644 index 000000000..bcdd2a68d --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/stage_usda-cd83faa181eb1fd7-1.image @@ -0,0 +1 @@ +128x72 16spp clamp-off 8dc69de5eba20193 diff --git a/crates/crust-core/tests/data/import_baselines/stage_usda-cf6459f3f81ccc47-1.digest b/crates/crust-core/tests/data/import_baselines/stage_usda-cf6459f3f81ccc47-1.digest new file mode 100644 index 000000000..49d858ec1 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/stage_usda-cf6459f3f81ccc47-1.digest @@ -0,0 +1,17 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/World/cam") +camera: Camera { origin: Vec3A(0.0, 0.0, 0.0), lower_left_corner: Vec3A(-2.7183647, -1.5290802, -10.0), horizontal: Vec3A(5.4367294, 0.0, 0.0), vertical: Vec3A(0.0, 3.0581603, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: None +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 640, height: 360, region: PixelRect { x0: 0, y0: 0, x1: 640, y1: 360 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 50.0, aperture: [20.955, 15.2908], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 10.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/stage.usda"], invisible_overrides: Some(0) } +layer: $DIR/stage.usda +warning: Warning { code: LightDegenerateShape, kind: Skipped, count: 2, prims: ["/World/b", "/World/a"], message: "RectLight at /World/b: width 0 × height 1 must be finite and positive — skipped" } +lights: 0 +volumes: 0 +world: 0 geometries, PrimitiveBreakdown { triangles: 0, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 0, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: true, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/World/cam"), cameras: ["/World/cam"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/World/cam"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/stage_usda-cf6459f3f81ccc47-1.image b/crates/crust-core/tests/data/import_baselines/stage_usda-cf6459f3f81ccc47-1.image new file mode 100644 index 000000000..c734c5b1d --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/stage_usda-cf6459f3f81ccc47-1.image @@ -0,0 +1 @@ +640x360 16spp clamp-off a04a09c0d4b5e325 diff --git a/crates/crust-core/tests/data/import_baselines/stage_usda-cf8a4ab339090107-1.digest b/crates/crust-core/tests/data/import_baselines/stage_usda-cf8a4ab339090107-1.digest new file mode 100644 index 000000000..fa08200b3 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/stage_usda-cf8a4ab339090107-1.digest @@ -0,0 +1,20 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: None +camera: Camera { origin: Vec3A(15.0, 3.0, 3.0), lower_left_corner: Vec3A(4.8863316, -0.044797063, 4.174048), horizontal: Vec3A(1.2295314, 0.0, -6.147657), vertical: Vec3A(-0.44830504, 3.4967792, -0.08966101), u: Vec3A(0.19611613, 0.0, -0.9805807), v: Vec3A(-0.1271232, 0.991561, -0.02542464), lens_radius: 0.05, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: None +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 640, height: 360, region: PixelRect { x0: 0, y0: 0, x1: 640, y1: 360 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: None, depth_of_field: true, motion_blur: false, layer_stack: ["$DIR/stage.usda"], invisible_overrides: Some(0) } +layer: $DIR/stage.usda +warning: Warning { code: CameraMissing, kind: Skipped, count: 1, prims: [], message: "USD stage has no UsdGeomCamera — falling back to world::get_settings camera" } +lights: 0 +volumes: 0 +world: 1 geometries, PrimitiveBreakdown { triangles: 0, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 1 } top level, PrimitiveBreakdown { triangles: 0, spheres: 0, disks: 0, cylinders: 0, curve_segments: 2, cubic_curve_spans: 0, instances: 1 } unique, motion false +geom 0: material #0 Signature { kind: "MaterialX", cutout: false, straight: false, boundary: false, emits: true, uv: true, uv_primvar: None, face_texture: None, curve: Some((false, true, ["tint"])), primvars: None } class 65535 holdout false transparent false map None uv None shading None strands Some(0) aov None swapped false curves true scale 1.0 motion [] pieces all=2:8dfd25c608412a7e camera=2:8dfd25c608412a7e shadow=2:8dfd25c608412a7e indirect=2:8dfd25c608412a7e +provenance material /World/Looks/M: MaterialOrigin { slots: [0], displaced: false } +provenance geometry 0..1: /World/C +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: None, cameras: [], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: None, offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/stage_usda-cf8a4ab339090107-1.image b/crates/crust-core/tests/data/import_baselines/stage_usda-cf8a4ab339090107-1.image new file mode 100644 index 000000000..70e223316 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/stage_usda-cf8a4ab339090107-1.image @@ -0,0 +1 @@ +640x360 16spp clamp-off 03bc6770d2d44278 diff --git a/crates/crust-core/tests/data/import_baselines/stage_usda-d2ee2497345d697d-1.digest b/crates/crust-core/tests/data/import_baselines/stage_usda-d2ee2497345d697d-1.digest new file mode 100644 index 000000000..a2119c466 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/stage_usda-d2ee2497345d697d-1.digest @@ -0,0 +1,26 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: None +camera: Camera { origin: Vec3A(15.0, 3.0, 3.0), lower_left_corner: Vec3A(4.8863316, -0.044797063, 4.174048), horizontal: Vec3A(1.2295314, 0.0, -6.147657), vertical: Vec3A(-0.44830504, 3.4967792, -0.08966101), u: Vec3A(0.19611613, 0.0, -0.9805807), v: Vec3A(-0.1271232, 0.991561, -0.02542464), lens_radius: 0.05, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: None +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 640, height: 360, region: PixelRect { x0: 0, y0: 0, x1: 640, y1: 360 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: None, depth_of_field: true, motion_blur: false, layer_stack: ["$DIR/stage.usda"], invisible_overrides: Some(0) } +layer: $DIR/stage.usda +warning: Warning { code: MeshInvalidNormals, kind: Skipped, count: 2, prims: ["/World/Flat", "/World/Short"], message: "/World/Flat: primvars:normals is a float[] (not a normal3f[], normal3d[] or normal3h[]) — the mesh renders faceted" } +warning: Warning { code: CameraMissing, kind: Skipped, count: 1, prims: [], message: "USD stage has no UsdGeomCamera — falling back to world::get_settings camera" } +lights: 0 +volumes: 0 +world: 2 geometries, PrimitiveBreakdown { triangles: 0, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 2 } top level, PrimitiveBreakdown { triangles: 4, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 2 } unique, motion false +geom 0: material #0 Signature { kind: "MaterialX", cutout: false, straight: false, boundary: false, emits: true, uv: true, uv_primvar: None, face_texture: None, curve: None, primvars: Some(["ramp"]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=4:cc10802e6b403ef5 camera=4:cc10802e6b403ef5 shadow=4:cc10802e6b403ef5 indirect=4:cc10802e6b403ef5 +geom 1: material #0 Signature { kind: "MaterialX", cutout: false, straight: false, boundary: false, emits: true, uv: true, uv_primvar: None, face_texture: None, curve: None, primvars: Some(["ramp"]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=4:f842628536678af5 camera=4:f842628536678af5 shadow=4:f842628536678af5 indirect=4:f842628536678af5 +provenance material /World/Looks/M: MaterialOrigin { slots: [0, 1], displaced: false } +provenance geometry 0..1: /World/Flat +provenance geometry 1..2: /World/Short +provenance mesh: MeshOrigin { geom_id: 0, slot: 0, baked: false, moving: false } +provenance mesh: MeshOrigin { geom_id: 1, slot: 0, baked: false, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 17828304714785378767, n_points: 6, n_indices: 8, n_uvs: None, smooth: false, material: 0 }), placements: 2, shared: false, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: None, cameras: [], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: None, offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/stage_usda-d2ee2497345d697d-1.image b/crates/crust-core/tests/data/import_baselines/stage_usda-d2ee2497345d697d-1.image new file mode 100644 index 000000000..4f6fd594c --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/stage_usda-d2ee2497345d697d-1.image @@ -0,0 +1 @@ +640x360 16spp clamp-off 8cae0790e6eb3d3f diff --git a/crates/crust-core/tests/data/import_baselines/stage_usda-d72f3f29bbbe2aac-1.digest b/crates/crust-core/tests/data/import_baselines/stage_usda-d72f3f29bbbe2aac-1.digest new file mode 100644 index 000000000..ffc0e4509 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/stage_usda-d72f3f29bbbe2aac-1.digest @@ -0,0 +1,20 @@ +time: Some(1.0) +working space: Linear Rec.709 (sRGB) +camera path: None +camera: Camera { origin: Vec3A(15.0, 3.0, 3.0), lower_left_corner: Vec3A(4.8863316, -0.044797063, 4.174048), horizontal: Vec3A(1.2295314, 0.0, -6.147657), vertical: Vec3A(-0.44830504, 3.4967792, -0.08966101), u: Vec3A(0.19611613, 0.0, -0.9805807), v: Vec3A(-0.1271232, 0.991561, -0.02542464), lens_radius: 0.05, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: None +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 640, height: 360, region: PixelRect { x0: 0, y0: 0, x1: 640, y1: 360 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 1, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: None, depth_of_field: true, motion_blur: false, layer_stack: ["$DIR/stage.usda"], invisible_overrides: Some(0) } +layer: $DIR/stage.usda +warning: Warning { code: CameraMissing, kind: Skipped, count: 1, prims: [], message: "USD stage has no UsdGeomCamera — falling back to world::get_settings camera" } +lights: 0 +volumes: 0 +world: 1 geometries, PrimitiveBreakdown { triangles: 0, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 1 } top level, PrimitiveBreakdown { triangles: 0, spheres: 0, disks: 0, cylinders: 0, curve_segments: 3, cubic_curve_spans: 0, instances: 1 } unique, motion false +geom 0: material #0 Signature { kind: "MaterialX", cutout: false, straight: false, boundary: false, emits: true, uv: true, uv_primvar: None, face_texture: None, curve: Some((false, true, [])), primvars: None } class 65535 holdout false transparent false map None uv None shading None strands Some(0) aov None swapped false curves true scale 1.0 motion [] pieces all=3:1fef49a575dc157a camera=3:1fef49a575dc157a shadow=3:1fef49a575dc157a indirect=3:1fef49a575dc157a +provenance material /World/Looks/M: MaterialOrigin { slots: [0], displaced: false } +provenance geometry 0..1: /World/C +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: Some(1.0), camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: None, cameras: [], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: None, offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/stage_usda-d72f3f29bbbe2aac-1.image b/crates/crust-core/tests/data/import_baselines/stage_usda-d72f3f29bbbe2aac-1.image new file mode 100644 index 000000000..f1453f795 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/stage_usda-d72f3f29bbbe2aac-1.image @@ -0,0 +1 @@ +640x360 16spp clamp-off 45f79c0aa79f8fca diff --git a/crates/crust-core/tests/data/import_baselines/stage_usda-db5313ef5e73713b-1.digest b/crates/crust-core/tests/data/import_baselines/stage_usda-db5313ef5e73713b-1.digest new file mode 100644 index 000000000..5ae26de5d --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/stage_usda-db5313ef5e73713b-1.digest @@ -0,0 +1,20 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: None +camera: Camera { origin: Vec3A(15.0, 3.0, 3.0), lower_left_corner: Vec3A(4.8863316, -0.044797063, 4.174048), horizontal: Vec3A(1.2295314, 0.0, -6.147657), vertical: Vec3A(-0.44830504, 3.4967792, -0.08966101), u: Vec3A(0.19611613, 0.0, -0.9805807), v: Vec3A(-0.1271232, 0.991561, -0.02542464), lens_radius: 0.05, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: None +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 640, height: 360, region: PixelRect { x0: 0, y0: 0, x1: 640, y1: 360 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: None, depth_of_field: true, motion_blur: false, layer_stack: ["$DIR/stage.usda"], invisible_overrides: Some(0) } +layer: $DIR/stage.usda +warning: Warning { code: CameraMissing, kind: Skipped, count: 1, prims: [], message: "USD stage has no UsdGeomCamera — falling back to world::get_settings camera" } +lights: 0 +volumes: 0 +world: 1 geometries, PrimitiveBreakdown { triangles: 0, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 1 } top level, PrimitiveBreakdown { triangles: 0, spheres: 0, disks: 0, cylinders: 0, curve_segments: 4, cubic_curve_spans: 0, instances: 1 } unique, motion false +geom 0: material #0 Signature { kind: "MaterialX", cutout: false, straight: false, boundary: false, emits: true, uv: true, uv_primvar: None, face_texture: None, curve: Some((false, true, [])), primvars: None } class 65535 holdout false transparent false map None uv None shading None strands Some(0) aov None swapped false curves true scale 1.0 motion [] pieces all=4:054f551c11432051 camera=4:054f551c11432051 shadow=4:054f551c11432051 indirect=4:054f551c11432051 +provenance material /World/Looks/M: MaterialOrigin { slots: [0], displaced: false } +provenance geometry 0..1: /World/C +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: None, cameras: [], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: None, offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/stage_usda-db5313ef5e73713b-1.image b/crates/crust-core/tests/data/import_baselines/stage_usda-db5313ef5e73713b-1.image new file mode 100644 index 000000000..7e165eda3 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/stage_usda-db5313ef5e73713b-1.image @@ -0,0 +1 @@ +640x360 16spp clamp-off ea53a46b507504bd diff --git a/crates/crust-core/tests/data/import_baselines/stage_usda-dbe57a2b9b304f79-1.digest b/crates/crust-core/tests/data/import_baselines/stage_usda-dbe57a2b9b304f79-1.digest new file mode 100644 index 000000000..9732e3080 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/stage_usda-dbe57a2b9b304f79-1.digest @@ -0,0 +1,24 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: None +camera: Camera { origin: Vec3A(15.0, 3.0, 3.0), lower_left_corner: Vec3A(4.8863316, -0.044797063, 4.174048), horizontal: Vec3A(1.2295314, 0.0, -6.147657), vertical: Vec3A(-0.44830504, 3.4967792, -0.08966101), u: Vec3A(0.19611613, 0.0, -0.9805807), v: Vec3A(-0.1271232, 0.991561, -0.02542464), lens_radius: 0.05, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: None +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 640, height: 360, region: PixelRect { x0: 0, y0: 0, x1: 640, y1: 360 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: None, depth_of_field: true, motion_blur: false, layer_stack: ["$DIR/stage.usda"], invisible_overrides: Some(0) } +layer: $DIR/stage.usda +warning: Warning { code: CameraMissing, kind: Skipped, count: 1, prims: [], message: "USD stage has no UsdGeomCamera — falling back to world::get_settings camera" } +lights: 0 +volumes: 0 +world: 5 geometries, PrimitiveBreakdown { triangles: 0, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 5 } top level, PrimitiveBreakdown { triangles: 0, spheres: 0, disks: 0, cylinders: 0, curve_segments: 1, cubic_curve_spans: 0, instances: 5 } unique, motion false +geom 0: material #0 Signature { kind: "MaterialX", cutout: false, straight: false, boundary: false, emits: true, uv: true, uv_primvar: None, face_texture: None, curve: Some((false, true, [])), primvars: None } class 65535 holdout false transparent false map None uv None shading None strands Some(0) aov None swapped false curves true scale 1.0 motion [] pieces all=1:ba28ac43777139fb camera=1:ba28ac43777139fb shadow=1:ba28ac43777139fb indirect=1:ba28ac43777139fb +geom 1: material #0 Signature { kind: "MaterialX", cutout: false, straight: false, boundary: false, emits: true, uv: true, uv_primvar: None, face_texture: None, curve: Some((false, true, [])), primvars: None } class 65535 holdout false transparent false map None uv None shading None strands Some(0) aov None swapped false curves true scale 1.0 motion [] pieces all=1:c162abc6e963ca71 camera=1:c162abc6e963ca71 shadow=1:c162abc6e963ca71 indirect=1:c162abc6e963ca71 +geom 2: material #0 Signature { kind: "MaterialX", cutout: false, straight: false, boundary: false, emits: true, uv: true, uv_primvar: None, face_texture: None, curve: Some((false, true, [])), primvars: None } class 65535 holdout false transparent false map None uv None shading None strands Some(0) aov None swapped false curves true scale 1.0 motion [] pieces all=1:cf44472ae23e8cde camera=1:cf44472ae23e8cde shadow=1:cf44472ae23e8cde indirect=1:cf44472ae23e8cde +geom 3: material #0 Signature { kind: "MaterialX", cutout: false, straight: false, boundary: false, emits: true, uv: true, uv_primvar: None, face_texture: None, curve: Some((false, true, [])), primvars: None } class 65535 holdout false transparent false map None uv None shading None strands Some(0) aov None swapped false curves true scale 1.0 motion [] pieces all=1:f2a9e8084f2836c7 camera=1:f2a9e8084f2836c7 shadow=1:f2a9e8084f2836c7 indirect=1:f2a9e8084f2836c7 +geom 4: material #0 Signature { kind: "MaterialX", cutout: false, straight: false, boundary: false, emits: true, uv: true, uv_primvar: None, face_texture: None, curve: Some((false, true, [])), primvars: None } class 65535 holdout false transparent false map None uv None shading None strands Some(0) aov None swapped false curves true scale 1.0 motion [] pieces all=1:fe7bef2391208aa9 camera=1:fe7bef2391208aa9 shadow=1:fe7bef2391208aa9 indirect=1:fe7bef2391208aa9 +provenance material /World/Looks/M: MaterialOrigin { slots: [0, 1, 2, 3, 4], displaced: false } +provenance geometry 0..5: /World/Scatter +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: None, cameras: [], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: None, offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/stage_usda-dbe57a2b9b304f79-1.image b/crates/crust-core/tests/data/import_baselines/stage_usda-dbe57a2b9b304f79-1.image new file mode 100644 index 000000000..3edc31727 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/stage_usda-dbe57a2b9b304f79-1.image @@ -0,0 +1 @@ +640x360 16spp clamp-off 5e812b419238b0b8 diff --git a/crates/crust-core/tests/data/import_baselines/stage_usda-dc3f3fbeccf7b47a-1.digest b/crates/crust-core/tests/data/import_baselines/stage_usda-dc3f3fbeccf7b47a-1.digest new file mode 100644 index 000000000..ad7f415ec --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/stage_usda-dc3f3fbeccf7b47a-1.digest @@ -0,0 +1,20 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: None +camera: Camera { origin: Vec3A(15.0, 3.0, 3.0), lower_left_corner: Vec3A(4.8863316, -0.044797063, 4.174048), horizontal: Vec3A(1.2295314, 0.0, -6.147657), vertical: Vec3A(-0.44830504, 3.4967792, -0.08966101), u: Vec3A(0.19611613, 0.0, -0.9805807), v: Vec3A(-0.1271232, 0.991561, -0.02542464), lens_radius: 0.05, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: None +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 640, height: 360, region: PixelRect { x0: 0, y0: 0, x1: 640, y1: 360 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: None, depth_of_field: true, motion_blur: false, layer_stack: ["$DIR/stage.usda"], invisible_overrides: Some(0) } +layer: $DIR/stage.usda +warning: Warning { code: CameraMissing, kind: Skipped, count: 1, prims: [], message: "USD stage has no UsdGeomCamera — falling back to world::get_settings camera" } +lights: 0 +volumes: 0 +world: 1 geometries, PrimitiveBreakdown { triangles: 0, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 1 } top level, PrimitiveBreakdown { triangles: 0, spheres: 0, disks: 0, cylinders: 0, curve_segments: 1, cubic_curve_spans: 0, instances: 1 } unique, motion false +geom 0: material #0 Signature { kind: "MaterialX", cutout: false, straight: false, boundary: false, emits: true, uv: true, uv_primvar: None, face_texture: None, curve: Some((false, true, ["tint"])), primvars: None } class 65535 holdout false transparent false map None uv None shading None strands Some(0) aov None swapped false curves true scale 1.0 motion [] pieces all=1:ba28ac43777139fb camera=1:ba28ac43777139fb shadow=1:ba28ac43777139fb indirect=1:ba28ac43777139fb +provenance material /World/Looks/M: MaterialOrigin { slots: [0], displaced: false } +provenance geometry 0..1: /World/C +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: None, cameras: [], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: None, offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/stage_usda-dc3f3fbeccf7b47a-1.image b/crates/crust-core/tests/data/import_baselines/stage_usda-dc3f3fbeccf7b47a-1.image new file mode 100644 index 000000000..ddd05b285 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/stage_usda-dc3f3fbeccf7b47a-1.image @@ -0,0 +1 @@ +640x360 16spp clamp-off f9a6cf9848bb1592 diff --git a/crates/crust-core/tests/data/import_baselines/stage_usda-df6e87952da2ef59-1.digest b/crates/crust-core/tests/data/import_baselines/stage_usda-df6e87952da2ef59-1.digest new file mode 100644 index 000000000..ad7f415ec --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/stage_usda-df6e87952da2ef59-1.digest @@ -0,0 +1,20 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: None +camera: Camera { origin: Vec3A(15.0, 3.0, 3.0), lower_left_corner: Vec3A(4.8863316, -0.044797063, 4.174048), horizontal: Vec3A(1.2295314, 0.0, -6.147657), vertical: Vec3A(-0.44830504, 3.4967792, -0.08966101), u: Vec3A(0.19611613, 0.0, -0.9805807), v: Vec3A(-0.1271232, 0.991561, -0.02542464), lens_radius: 0.05, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: None +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 640, height: 360, region: PixelRect { x0: 0, y0: 0, x1: 640, y1: 360 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: None, depth_of_field: true, motion_blur: false, layer_stack: ["$DIR/stage.usda"], invisible_overrides: Some(0) } +layer: $DIR/stage.usda +warning: Warning { code: CameraMissing, kind: Skipped, count: 1, prims: [], message: "USD stage has no UsdGeomCamera — falling back to world::get_settings camera" } +lights: 0 +volumes: 0 +world: 1 geometries, PrimitiveBreakdown { triangles: 0, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 1 } top level, PrimitiveBreakdown { triangles: 0, spheres: 0, disks: 0, cylinders: 0, curve_segments: 1, cubic_curve_spans: 0, instances: 1 } unique, motion false +geom 0: material #0 Signature { kind: "MaterialX", cutout: false, straight: false, boundary: false, emits: true, uv: true, uv_primvar: None, face_texture: None, curve: Some((false, true, ["tint"])), primvars: None } class 65535 holdout false transparent false map None uv None shading None strands Some(0) aov None swapped false curves true scale 1.0 motion [] pieces all=1:ba28ac43777139fb camera=1:ba28ac43777139fb shadow=1:ba28ac43777139fb indirect=1:ba28ac43777139fb +provenance material /World/Looks/M: MaterialOrigin { slots: [0], displaced: false } +provenance geometry 0..1: /World/C +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: None, cameras: [], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: None, offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/stage_usda-df6e87952da2ef59-1.image b/crates/crust-core/tests/data/import_baselines/stage_usda-df6e87952da2ef59-1.image new file mode 100644 index 000000000..ddd05b285 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/stage_usda-df6e87952da2ef59-1.image @@ -0,0 +1 @@ +640x360 16spp clamp-off f9a6cf9848bb1592 diff --git a/crates/crust-core/tests/data/import_baselines/stage_usda-dfcbe85c1522e1a0-1.digest b/crates/crust-core/tests/data/import_baselines/stage_usda-dfcbe85c1522e1a0-1.digest new file mode 100644 index 000000000..6c7e8fd32 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/stage_usda-dfcbe85c1522e1a0-1.digest @@ -0,0 +1,19 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/World/cam") +camera: Camera { origin: Vec3A(0.0, 0.0, 0.0), lower_left_corner: Vec3A(-2.7183647, -1.5290802, -10.0), horizontal: Vec3A(5.4367294, 0.0, 0.0), vertical: Vec3A(0.0, 3.0581603, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: None +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 640, height: 360, region: PixelRect { x0: 0, y0: 0, x1: 640, y1: 360 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 50.0, aperture: [20.955, 15.2908], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 10.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/stage.usda"], invisible_overrides: Some(0) } +layer: $DIR/stage.usda +lights: 0 +volumes: 0 +world: 1 geometries, PrimitiveBreakdown { triangles: 0, spheres: 1, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 0, spheres: 1, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +geom 0: material #0 Signature { kind: "UsdPreviewSurface (textured)", cutout: false, straight: false, boundary: false, emits: false, uv: true, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:fb1e7d48790aec95 camera=1:fb1e7d48790aec95 shadow=1:fb1e7d48790aec95 indirect=1:fb1e7d48790aec95 +provenance material /World/Looks/M: MaterialOrigin { slots: [0], displaced: false } +provenance geometry 0..1: /World/ball +provenance spheres: [0] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: true, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/World/cam"), cameras: ["/World/cam"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/World/cam"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/stage_usda-dfcbe85c1522e1a0-1.image b/crates/crust-core/tests/data/import_baselines/stage_usda-dfcbe85c1522e1a0-1.image new file mode 100644 index 000000000..c734c5b1d --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/stage_usda-dfcbe85c1522e1a0-1.image @@ -0,0 +1 @@ +640x360 16spp clamp-off a04a09c0d4b5e325 diff --git a/crates/crust-core/tests/data/import_baselines/stage_usda-e0281d61316ee28c-1.digest b/crates/crust-core/tests/data/import_baselines/stage_usda-e0281d61316ee28c-1.digest new file mode 100644 index 000000000..c0e5ee7bb --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/stage_usda-e0281d61316ee28c-1.digest @@ -0,0 +1,23 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: None +camera: Camera { origin: Vec3A(15.0, 3.0, 3.0), lower_left_corner: Vec3A(4.8863316, -0.044797063, 4.174048), horizontal: Vec3A(1.2295314, 0.0, -6.147657), vertical: Vec3A(-0.44830504, 3.4967792, -0.08966101), u: Vec3A(0.19611613, 0.0, -0.9805807), v: Vec3A(-0.1271232, 0.991561, -0.02542464), lens_radius: 0.05, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: None +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 640, height: 360, region: PixelRect { x0: 0, y0: 0, x1: 640, y1: 360 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: None, depth_of_field: true, motion_blur: false, layer_stack: ["$DIR/stage.usda"], invisible_overrides: Some(0) } +layer: $DIR/stage.usda +warning: Warning { code: MeshUnsupportedPrimvar, kind: Skipped, count: 1, prims: ["/World/Q"], message: "/World/Q: primvars:label is a float[] (2 entries where its Vertex interpolation needs 6) — the material reads its geompropvalue's default there" } +warning: Warning { code: CameraMissing, kind: Skipped, count: 1, prims: [], message: "USD stage has no UsdGeomCamera — falling back to world::get_settings camera" } +lights: 0 +volumes: 0 +world: 1 geometries, PrimitiveBreakdown { triangles: 4, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 4, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +geom 0: material #0 Signature { kind: "MaterialX", cutout: false, straight: false, boundary: false, emits: true, uv: true, uv_primvar: None, face_texture: None, curve: None, primvars: Some(["label"]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=4:f842628536678af5 camera=4:f842628536678af5 shadow=4:f842628536678af5 indirect=4:f842628536678af5 +provenance material /World/Looks/M: MaterialOrigin { slots: [0], displaced: false } +provenance geometry 0..1: /World/Q +provenance mesh: MeshOrigin { geom_id: 0, slot: 0, baked: true, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 17828304714785378767, n_points: 6, n_indices: 8, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: None, cameras: [], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: None, offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/stage_usda-e0281d61316ee28c-1.image b/crates/crust-core/tests/data/import_baselines/stage_usda-e0281d61316ee28c-1.image new file mode 100644 index 000000000..45c7c7673 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/stage_usda-e0281d61316ee28c-1.image @@ -0,0 +1 @@ +640x360 16spp clamp-off a9b43f7c7735c3fb diff --git a/crates/crust-core/tests/data/import_baselines/stage_usda-e190342a381695b4-1.digest b/crates/crust-core/tests/data/import_baselines/stage_usda-e190342a381695b4-1.digest new file mode 100644 index 000000000..e86b7a076 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/stage_usda-e190342a381695b4-1.digest @@ -0,0 +1,20 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: None +camera: Camera { origin: Vec3A(15.0, 3.0, 3.0), lower_left_corner: Vec3A(4.8863316, -0.044797063, 4.174048), horizontal: Vec3A(1.2295314, 0.0, -6.147657), vertical: Vec3A(-0.44830504, 3.4967792, -0.08966101), u: Vec3A(0.19611613, 0.0, -0.9805807), v: Vec3A(-0.1271232, 0.991561, -0.02542464), lens_radius: 0.05, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: None +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 640, height: 360, region: PixelRect { x0: 0, y0: 0, x1: 640, y1: 360 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: None, depth_of_field: true, motion_blur: false, layer_stack: ["$DIR/stage.usda"], invisible_overrides: Some(0) } +layer: $DIR/stage.usda +warning: Warning { code: CameraMissing, kind: Skipped, count: 1, prims: [], message: "USD stage has no UsdGeomCamera — falling back to world::get_settings camera" } +lights: 0 +volumes: 0 +world: 1 geometries, PrimitiveBreakdown { triangles: 0, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 1 } top level, PrimitiveBreakdown { triangles: 0, spheres: 0, disks: 0, cylinders: 0, curve_segments: 1, cubic_curve_spans: 0, instances: 1 } unique, motion false +geom 0: material #0 Signature { kind: "MaterialX", cutout: false, straight: false, boundary: false, emits: true, uv: true, uv_primvar: None, face_texture: None, curve: Some((true, false, [])), primvars: None } class 65535 holdout false transparent false map None uv None shading None strands Some(0) aov None swapped false curves true scale 1.0 motion [] pieces all=1:ba28ac43777139fb camera=1:ba28ac43777139fb shadow=1:ba28ac43777139fb indirect=1:ba28ac43777139fb +provenance material /World/Looks/M: MaterialOrigin { slots: [0], displaced: false } +provenance geometry 0..1: /World/C +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: None, cameras: [], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: None, offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/stage_usda-e190342a381695b4-1.image b/crates/crust-core/tests/data/import_baselines/stage_usda-e190342a381695b4-1.image new file mode 100644 index 000000000..24c7ddb45 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/stage_usda-e190342a381695b4-1.image @@ -0,0 +1 @@ +640x360 16spp clamp-off 6211336cd955df3b diff --git a/crates/crust-core/tests/data/import_baselines/stage_usda-e4221ab681d9d69c-1.digest b/crates/crust-core/tests/data/import_baselines/stage_usda-e4221ab681d9d69c-1.digest new file mode 100644 index 000000000..67784e99e --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/stage_usda-e4221ab681d9d69c-1.digest @@ -0,0 +1,22 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: None +camera: Camera { origin: Vec3A(15.0, 3.0, 3.0), lower_left_corner: Vec3A(4.8863316, -0.044797063, 4.174048), horizontal: Vec3A(1.2295314, 0.0, -6.147657), vertical: Vec3A(-0.44830504, 3.4967792, -0.08966101), u: Vec3A(0.19611613, 0.0, -0.9805807), v: Vec3A(-0.1271232, 0.991561, -0.02542464), lens_radius: 0.05, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: None +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 640, height: 360, region: PixelRect { x0: 0, y0: 0, x1: 640, y1: 360 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: None, depth_of_field: true, motion_blur: false, layer_stack: ["$DIR/stage.usda"], invisible_overrides: Some(0) } +layer: $DIR/stage.usda +warning: Warning { code: CameraMissing, kind: Skipped, count: 1, prims: [], message: "USD stage has no UsdGeomCamera — falling back to world::get_settings camera" } +lights: 0 +volumes: 0 +world: 1 geometries, PrimitiveBreakdown { triangles: 4, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 4, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +geom 0: material #0 Signature { kind: "MaterialX", cutout: false, straight: false, boundary: false, emits: true, uv: true, uv_primvar: None, face_texture: None, curve: None, primvars: Some(["missing"]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=4:f842628536678af5 camera=4:f842628536678af5 shadow=4:f842628536678af5 indirect=4:f842628536678af5 +provenance material /World/Looks/M: MaterialOrigin { slots: [0], displaced: false } +provenance geometry 0..1: /World/Q +provenance mesh: MeshOrigin { geom_id: 0, slot: 0, baked: true, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 17828304714785378767, n_points: 6, n_indices: 8, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: None, cameras: [], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: None, offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/stage_usda-e4221ab681d9d69c-1.image b/crates/crust-core/tests/data/import_baselines/stage_usda-e4221ab681d9d69c-1.image new file mode 100644 index 000000000..45c7c7673 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/stage_usda-e4221ab681d9d69c-1.image @@ -0,0 +1 @@ +640x360 16spp clamp-off a9b43f7c7735c3fb diff --git a/crates/crust-core/tests/data/import_baselines/stage_usda-e515f767109d59fd-1.digest b/crates/crust-core/tests/data/import_baselines/stage_usda-e515f767109d59fd-1.digest new file mode 100644 index 000000000..73322dbdf --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/stage_usda-e515f767109d59fd-1.digest @@ -0,0 +1,20 @@ +time: Some(2.0) +working space: Linear Rec.709 (sRGB) +camera path: None +camera: Camera { origin: Vec3A(15.0, 3.0, 3.0), lower_left_corner: Vec3A(4.8863316, -0.044797063, 4.174048), horizontal: Vec3A(1.2295314, 0.0, -6.147657), vertical: Vec3A(-0.44830504, 3.4967792, -0.08966101), u: Vec3A(0.19611613, 0.0, -0.9805807), v: Vec3A(-0.1271232, 0.991561, -0.02542464), lens_radius: 0.05, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: None +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 640, height: 360, region: PixelRect { x0: 0, y0: 0, x1: 640, y1: 360 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 2, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: None, depth_of_field: true, motion_blur: false, layer_stack: ["$DIR/stage.usda"], invisible_overrides: Some(0) } +layer: $DIR/stage.usda +warning: Warning { code: CameraMissing, kind: Skipped, count: 1, prims: [], message: "USD stage has no UsdGeomCamera — falling back to world::get_settings camera" } +lights: 0 +volumes: 0 +world: 1 geometries, PrimitiveBreakdown { triangles: 0, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 1 } top level, PrimitiveBreakdown { triangles: 0, spheres: 0, disks: 0, cylinders: 0, curve_segments: 3, cubic_curve_spans: 0, instances: 1 } unique, motion false +geom 0: material #0 Signature { kind: "MaterialX", cutout: false, straight: false, boundary: false, emits: true, uv: true, uv_primvar: None, face_texture: None, curve: Some((false, true, [])), primvars: None } class 65535 holdout false transparent false map None uv None shading None strands Some(0) aov None swapped false curves true scale 1.0 motion [] pieces all=3:b246b80dcbd366b3 camera=3:b246b80dcbd366b3 shadow=3:b246b80dcbd366b3 indirect=3:b246b80dcbd366b3 +provenance material /World/Looks/M: MaterialOrigin { slots: [0], displaced: false } +provenance geometry 0..1: /World/C +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: Some(2.0), camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: None, cameras: [], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: None, offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/stage_usda-e515f767109d59fd-1.image b/crates/crust-core/tests/data/import_baselines/stage_usda-e515f767109d59fd-1.image new file mode 100644 index 000000000..f899bb316 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/stage_usda-e515f767109d59fd-1.image @@ -0,0 +1 @@ +640x360 16spp clamp-off 493b8dcf1ce053b9 diff --git a/crates/crust-core/tests/data/import_baselines/stage_usda-e6a49698324053cb-1.digest b/crates/crust-core/tests/data/import_baselines/stage_usda-e6a49698324053cb-1.digest new file mode 100644 index 000000000..2871c5f10 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/stage_usda-e6a49698324053cb-1.digest @@ -0,0 +1,17 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/World/cam") +camera: Camera { origin: Vec3A(0.0, 0.0, 0.0), lower_left_corner: Vec3A(-2.7183647, -1.5290802, -10.0), horizontal: Vec3A(5.4367294, 0.0, 0.0), vertical: Vec3A(0.0, 3.0581603, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: Some("/Render/settings") +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 640, height: 360, region: PixelRect { x0: 0, y0: 0, x1: 640, y1: 360 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 50.0, aperture: [20.955, 15.2908], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 10.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/stage.usda"], invisible_overrides: Some(0) } +layer: $DIR/stage.usda +warning: Warning { code: CameraNotACamera, kind: Refused, count: 1, prims: ["/World/notACamera"], message: "RenderSettings.camera targets /World/notACamera, which is not a camera on this stage — rendering through /World/cam instead" } +lights: 0 +volumes: 0 +world: 0 geometries, PrimitiveBreakdown { triangles: 0, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 0, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: true, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/World/cam"), cameras: ["/World/cam"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/World/cam"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/stage_usda-e6a49698324053cb-1.image b/crates/crust-core/tests/data/import_baselines/stage_usda-e6a49698324053cb-1.image new file mode 100644 index 000000000..c734c5b1d --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/stage_usda-e6a49698324053cb-1.image @@ -0,0 +1 @@ +640x360 16spp clamp-off a04a09c0d4b5e325 diff --git a/crates/crust-core/tests/data/import_baselines/stage_usda-e725f8fd7bc55370-1.digest b/crates/crust-core/tests/data/import_baselines/stage_usda-e725f8fd7bc55370-1.digest new file mode 100644 index 000000000..afc197472 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/stage_usda-e725f8fd7bc55370-1.digest @@ -0,0 +1,20 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: None +camera: Camera { origin: Vec3A(15.0, 3.0, 3.0), lower_left_corner: Vec3A(4.8863316, -0.044797063, 4.174048), horizontal: Vec3A(1.2295314, 0.0, -6.147657), vertical: Vec3A(-0.44830504, 3.4967792, -0.08966101), u: Vec3A(0.19611613, 0.0, -0.9805807), v: Vec3A(-0.1271232, 0.991561, -0.02542464), lens_radius: 0.05, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: None +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 640, height: 360, region: PixelRect { x0: 0, y0: 0, x1: 640, y1: 360 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: None, depth_of_field: true, motion_blur: false, layer_stack: ["$DIR/stage.usda"], invisible_overrides: Some(0) } +layer: $DIR/stage.usda +warning: Warning { code: CameraMissing, kind: Skipped, count: 1, prims: [], message: "USD stage has no UsdGeomCamera — falling back to world::get_settings camera" } +lights: 0 +volumes: 0 +world: 1 geometries, PrimitiveBreakdown { triangles: 0, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 1 } top level, PrimitiveBreakdown { triangles: 0, spheres: 0, disks: 0, cylinders: 0, curve_segments: 1, cubic_curve_spans: 0, instances: 1 } unique, motion false +geom 0: material #0 Signature { kind: "MaterialX", cutout: false, straight: false, boundary: false, emits: true, uv: true, uv_primvar: None, face_texture: None, curve: Some((true, false, [])), primvars: None } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves true scale 1.0 motion [] pieces all=1:7a8114182eb4444e camera=1:7a8114182eb4444e shadow=1:7a8114182eb4444e indirect=1:7a8114182eb4444e +provenance material /World/Looks/M: MaterialOrigin { slots: [0], displaced: false } +provenance geometry 0..1: /World/C +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: None, cameras: [], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: None, offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/stage_usda-e725f8fd7bc55370-1.image b/crates/crust-core/tests/data/import_baselines/stage_usda-e725f8fd7bc55370-1.image new file mode 100644 index 000000000..c734c5b1d --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/stage_usda-e725f8fd7bc55370-1.image @@ -0,0 +1 @@ +640x360 16spp clamp-off a04a09c0d4b5e325 diff --git a/crates/crust-core/tests/data/import_baselines/stage_usda-eae49fc2a8ca60e5-1.digest b/crates/crust-core/tests/data/import_baselines/stage_usda-eae49fc2a8ca60e5-1.digest new file mode 100644 index 000000000..901defb7f --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/stage_usda-eae49fc2a8ca60e5-1.digest @@ -0,0 +1,22 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: None +camera: Camera { origin: Vec3A(15.0, 3.0, 3.0), lower_left_corner: Vec3A(4.8863316, -0.044797063, 4.174048), horizontal: Vec3A(1.2295314, 0.0, -6.147657), vertical: Vec3A(-0.44830504, 3.4967792, -0.08966101), u: Vec3A(0.19611613, 0.0, -0.9805807), v: Vec3A(-0.1271232, 0.991561, -0.02542464), lens_radius: 0.05, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: None +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 640, height: 360, region: PixelRect { x0: 0, y0: 0, x1: 640, y1: 360 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: None, depth_of_field: true, motion_blur: false, layer_stack: ["$DIR/stage.usda"], invisible_overrides: Some(0) } +layer: $DIR/stage.usda +warning: Warning { code: CameraMissing, kind: Skipped, count: 1, prims: [], message: "USD stage has no UsdGeomCamera — falling back to world::get_settings camera" } +lights: 0 +volumes: 0 +world: 1 geometries, PrimitiveBreakdown { triangles: 4, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 4, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +geom 0: material #0 Signature { kind: "MaterialX", cutout: false, straight: false, boundary: false, emits: true, uv: true, uv_primvar: None, face_texture: None, curve: None, primvars: Some(["tint"]) } class 65535 holdout false transparent false map None uv None shading Some(0) strands None aov None swapped false curves false scale 1.0 motion [] pieces all=4:f842628536678af5 camera=4:f842628536678af5 shadow=4:f842628536678af5 indirect=4:f842628536678af5 +provenance material /World/Looks/M: MaterialOrigin { slots: [0], displaced: false } +provenance geometry 0..1: /World/Q +provenance mesh: MeshOrigin { geom_id: 0, slot: 0, baked: true, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 7397703893271868288, n_points: 6, n_indices: 8, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: None, cameras: [], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: None, offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/stage_usda-eae49fc2a8ca60e5-1.image b/crates/crust-core/tests/data/import_baselines/stage_usda-eae49fc2a8ca60e5-1.image new file mode 100644 index 000000000..50b8d3ad8 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/stage_usda-eae49fc2a8ca60e5-1.image @@ -0,0 +1 @@ +640x360 16spp clamp-off 48eece89f0acddec diff --git a/crates/crust-core/tests/data/import_baselines/stage_usda-eb49e61d600c4d7e-1.digest b/crates/crust-core/tests/data/import_baselines/stage_usda-eb49e61d600c4d7e-1.digest new file mode 100644 index 000000000..aaf1d5ff5 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/stage_usda-eb49e61d600c4d7e-1.digest @@ -0,0 +1,20 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: None +camera: Camera { origin: Vec3A(15.0, 3.0, 3.0), lower_left_corner: Vec3A(4.8863316, -0.044797063, 4.174048), horizontal: Vec3A(1.2295314, 0.0, -6.147657), vertical: Vec3A(-0.44830504, 3.4967792, -0.08966101), u: Vec3A(0.19611613, 0.0, -0.9805807), v: Vec3A(-0.1271232, 0.991561, -0.02542464), lens_radius: 0.05, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: None +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 640, height: 360, region: PixelRect { x0: 0, y0: 0, x1: 640, y1: 360 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: None, depth_of_field: true, motion_blur: false, layer_stack: ["$DIR/stage.usda"], invisible_overrides: Some(0) } +layer: $DIR/stage.usda +warning: Warning { code: CameraMissing, kind: Skipped, count: 1, prims: [], message: "USD stage has no UsdGeomCamera — falling back to world::get_settings camera" } +lights: 0 +volumes: 0 +world: 1 geometries, PrimitiveBreakdown { triangles: 0, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 1 } top level, PrimitiveBreakdown { triangles: 0, spheres: 0, disks: 0, cylinders: 0, curve_segments: 1, cubic_curve_spans: 0, instances: 1 } unique, motion false +geom 0: material #0 Signature { kind: "MaterialX", cutout: false, straight: false, boundary: false, emits: true, uv: true, uv_primvar: None, face_texture: None, curve: Some((false, false, [])), primvars: None } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves true scale 1.0 motion [] pieces all=1:ba28ac43777139fb camera=1:ba28ac43777139fb shadow=1:ba28ac43777139fb indirect=1:ba28ac43777139fb +provenance material /World/Looks/M: MaterialOrigin { slots: [0], displaced: false } +provenance geometry 0..1: /World/C +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: None, cameras: [], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: None, offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/stage_usda-eb49e61d600c4d7e-1.image b/crates/crust-core/tests/data/import_baselines/stage_usda-eb49e61d600c4d7e-1.image new file mode 100644 index 000000000..9809feb10 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/stage_usda-eb49e61d600c4d7e-1.image @@ -0,0 +1 @@ +640x360 16spp clamp-off 7785b04f1682f99e diff --git a/crates/crust-core/tests/data/import_baselines/stage_usda-ebf6853a9256b461-1.digest b/crates/crust-core/tests/data/import_baselines/stage_usda-ebf6853a9256b461-1.digest new file mode 100644 index 000000000..e86b7a076 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/stage_usda-ebf6853a9256b461-1.digest @@ -0,0 +1,20 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: None +camera: Camera { origin: Vec3A(15.0, 3.0, 3.0), lower_left_corner: Vec3A(4.8863316, -0.044797063, 4.174048), horizontal: Vec3A(1.2295314, 0.0, -6.147657), vertical: Vec3A(-0.44830504, 3.4967792, -0.08966101), u: Vec3A(0.19611613, 0.0, -0.9805807), v: Vec3A(-0.1271232, 0.991561, -0.02542464), lens_radius: 0.05, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: None +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 640, height: 360, region: PixelRect { x0: 0, y0: 0, x1: 640, y1: 360 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: None, depth_of_field: true, motion_blur: false, layer_stack: ["$DIR/stage.usda"], invisible_overrides: Some(0) } +layer: $DIR/stage.usda +warning: Warning { code: CameraMissing, kind: Skipped, count: 1, prims: [], message: "USD stage has no UsdGeomCamera — falling back to world::get_settings camera" } +lights: 0 +volumes: 0 +world: 1 geometries, PrimitiveBreakdown { triangles: 0, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 1 } top level, PrimitiveBreakdown { triangles: 0, spheres: 0, disks: 0, cylinders: 0, curve_segments: 1, cubic_curve_spans: 0, instances: 1 } unique, motion false +geom 0: material #0 Signature { kind: "MaterialX", cutout: false, straight: false, boundary: false, emits: true, uv: true, uv_primvar: None, face_texture: None, curve: Some((true, false, [])), primvars: None } class 65535 holdout false transparent false map None uv None shading None strands Some(0) aov None swapped false curves true scale 1.0 motion [] pieces all=1:ba28ac43777139fb camera=1:ba28ac43777139fb shadow=1:ba28ac43777139fb indirect=1:ba28ac43777139fb +provenance material /World/Looks/M: MaterialOrigin { slots: [0], displaced: false } +provenance geometry 0..1: /World/C +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: None, cameras: [], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: None, offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/stage_usda-ebf6853a9256b461-1.image b/crates/crust-core/tests/data/import_baselines/stage_usda-ebf6853a9256b461-1.image new file mode 100644 index 000000000..24c7ddb45 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/stage_usda-ebf6853a9256b461-1.image @@ -0,0 +1 @@ +640x360 16spp clamp-off 6211336cd955df3b diff --git a/crates/crust-core/tests/data/import_baselines/stage_usda-ef8a900692712be4-1.digest b/crates/crust-core/tests/data/import_baselines/stage_usda-ef8a900692712be4-1.digest new file mode 100644 index 000000000..49d858ec1 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/stage_usda-ef8a900692712be4-1.digest @@ -0,0 +1,17 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/World/cam") +camera: Camera { origin: Vec3A(0.0, 0.0, 0.0), lower_left_corner: Vec3A(-2.7183647, -1.5290802, -10.0), horizontal: Vec3A(5.4367294, 0.0, 0.0), vertical: Vec3A(0.0, 3.0581603, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: None +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 640, height: 360, region: PixelRect { x0: 0, y0: 0, x1: 640, y1: 360 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 50.0, aperture: [20.955, 15.2908], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 10.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/stage.usda"], invisible_overrides: Some(0) } +layer: $DIR/stage.usda +warning: Warning { code: LightDegenerateShape, kind: Skipped, count: 2, prims: ["/World/b", "/World/a"], message: "RectLight at /World/b: width 0 × height 1 must be finite and positive — skipped" } +lights: 0 +volumes: 0 +world: 0 geometries, PrimitiveBreakdown { triangles: 0, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 0, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: true, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/World/cam"), cameras: ["/World/cam"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/World/cam"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/stage_usda-ef8a900692712be4-1.image b/crates/crust-core/tests/data/import_baselines/stage_usda-ef8a900692712be4-1.image new file mode 100644 index 000000000..c734c5b1d --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/stage_usda-ef8a900692712be4-1.image @@ -0,0 +1 @@ +640x360 16spp clamp-off a04a09c0d4b5e325 diff --git a/crates/crust-core/tests/data/import_baselines/stage_usda-efdcb2fb9f30efb6-1.digest b/crates/crust-core/tests/data/import_baselines/stage_usda-efdcb2fb9f30efb6-1.digest new file mode 100644 index 000000000..08c5156ef --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/stage_usda-efdcb2fb9f30efb6-1.digest @@ -0,0 +1,33 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/World/cam") +camera: Camera { origin: Vec3A(0.0, 0.0, 12.0), lower_left_corner: Vec3A(-2.7183647, -1.5290802, 2.0), horizontal: Vec3A(5.4367294, 0.0, 0.0), vertical: Vec3A(0.0, 3.0581603, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: None +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 640, height: 360, region: PixelRect { x0: 0, y0: 0, x1: 640, y1: 360 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 50.0, aperture: [20.955, 15.2908], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 10.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$TMP/crust_import_parity/five_subtrees/stage.usda"], invisible_overrides: Some(0) } +layer: $TMP/crust_import_parity/five_subtrees/stage.usda +lights: 1 +light 0: area name Some("/World/key") lpe None pmf 1.0 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 5 geometries, PrimitiveBreakdown { triangles: 192, spheres: 2, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 2 } top level, PrimitiveBreakdown { triangles: 204, spheres: 2, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 2 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=12:df1c10739a4243a5 camera=12:df1c10739a4243a5 shadow=12:df1c10739a4243a5 indirect=12:df1c10739a4243a5 +geom 1: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:eb131905b248d2a5 camera=1:eb131905b248d2a5 shadow=1:eb131905b248d2a5 indirect=1:eb131905b248d2a5 +geom 2: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=12:24a0b7ce9df7f2a5 camera=12:24a0b7ce9df7f2a5 shadow=12:24a0b7ce9df7f2a5 indirect=12:24a0b7ce9df7f2a5 +geom 3: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=192:2e37d41d85e568d9 camera=192:2e37d41d85e568d9 shadow=192:2e37d41d85e568d9 indirect=192:2e37d41d85e568d9 +geom 4: material #1 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:835871679188a475 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=1:835871679188a475 +provenance light /World/key: LightOrigin { index: 0, geoms: 4..5 } +provenance geometry 0..1: /World/A/box +provenance geometry 1..2: /World/B/ball +provenance geometry 2..3: /World/C/box +provenance geometry 3..4: /World/D/can +provenance geometry 4..5: /World/key +provenance mesh: MeshOrigin { geom_id: 0, slot: 0, baked: false, moving: false } +provenance mesh: MeshOrigin { geom_id: 2, slot: 0, baked: false, moving: false } +provenance mesh: MeshOrigin { geom_id: 3, slot: 1, baked: true, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 9204403525635746283, n_points: 8, n_indices: 24, n_uvs: None, smooth: false, material: 0 }), placements: 2, shared: false, displaced: false } +provenance mesh slot 1: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 6877125351767401758, n_points: 194, n_indices: 480, n_uvs: None, smooth: true, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [1] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: true, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/World/cam"), cameras: ["/World/cam"], dicing: None, on_screen_shapes: None, unsized_shapes: true, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/World/cam"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/stage_usda-efdcb2fb9f30efb6-1.image b/crates/crust-core/tests/data/import_baselines/stage_usda-efdcb2fb9f30efb6-1.image new file mode 100644 index 000000000..45221952b --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/stage_usda-efdcb2fb9f30efb6-1.image @@ -0,0 +1 @@ +640x360 16spp clamp-off 10ba161ffbe861d0 diff --git a/crates/crust-core/tests/data/import_baselines/stage_usda-f1cbf14d6569cda8-1.digest b/crates/crust-core/tests/data/import_baselines/stage_usda-f1cbf14d6569cda8-1.digest new file mode 100644 index 000000000..1827f46ac --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/stage_usda-f1cbf14d6569cda8-1.digest @@ -0,0 +1,20 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: None +camera: Camera { origin: Vec3A(15.0, 3.0, 3.0), lower_left_corner: Vec3A(4.8863316, -0.044797063, 4.174048), horizontal: Vec3A(1.2295314, 0.0, -6.147657), vertical: Vec3A(-0.44830504, 3.4967792, -0.08966101), u: Vec3A(0.19611613, 0.0, -0.9805807), v: Vec3A(-0.1271232, 0.991561, -0.02542464), lens_radius: 0.05, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: None +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 640, height: 360, region: PixelRect { x0: 0, y0: 0, x1: 640, y1: 360 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: None, depth_of_field: true, motion_blur: false, layer_stack: ["$DIR/stage.usda"], invisible_overrides: Some(0) } +layer: $DIR/stage.usda +warning: Warning { code: CameraMissing, kind: Skipped, count: 1, prims: [], message: "USD stage has no UsdGeomCamera — falling back to world::get_settings camera" } +lights: 0 +volumes: 0 +world: 1 geometries, PrimitiveBreakdown { triangles: 0, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 1 } top level, PrimitiveBreakdown { triangles: 0, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 2, instances: 1 } unique, motion false +geom 0: material #0 Signature { kind: "MaterialX", cutout: false, straight: false, boundary: false, emits: true, uv: true, uv_primvar: None, face_texture: None, curve: Some((false, true, [])), primvars: None } class 65535 holdout false transparent false map None uv None shading None strands Some(0) aov None swapped false curves true scale 1.0 motion [] pieces all=2:1778ed3b2c04ba78 camera=2:1778ed3b2c04ba78 shadow=2:1778ed3b2c04ba78 indirect=2:1778ed3b2c04ba78 +provenance material /World/Looks/M: MaterialOrigin { slots: [0], displaced: false } +provenance geometry 0..1: /World/N +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: None, cameras: [], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: None, offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/stage_usda-f1cbf14d6569cda8-1.image b/crates/crust-core/tests/data/import_baselines/stage_usda-f1cbf14d6569cda8-1.image new file mode 100644 index 000000000..da36b8ab1 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/stage_usda-f1cbf14d6569cda8-1.image @@ -0,0 +1 @@ +640x360 16spp clamp-off cc582f729d0f396a diff --git a/crates/crust-core/tests/data/import_baselines/stage_usda-f3300bdef5e06140-1.digest b/crates/crust-core/tests/data/import_baselines/stage_usda-f3300bdef5e06140-1.digest new file mode 100644 index 000000000..2c5c140a2 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/stage_usda-f3300bdef5e06140-1.digest @@ -0,0 +1,22 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: None +camera: Camera { origin: Vec3A(15.0, 3.0, 3.0), lower_left_corner: Vec3A(4.8863316, -0.044797063, 4.174048), horizontal: Vec3A(1.2295314, 0.0, -6.147657), vertical: Vec3A(-0.44830504, 3.4967792, -0.08966101), u: Vec3A(0.19611613, 0.0, -0.9805807), v: Vec3A(-0.1271232, 0.991561, -0.02542464), lens_radius: 0.05, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: None +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 640, height: 360, region: PixelRect { x0: 0, y0: 0, x1: 640, y1: 360 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: None, depth_of_field: true, motion_blur: false, layer_stack: ["$DIR/stage.usda"], invisible_overrides: Some(0) } +layer: $DIR/stage.usda +warning: Warning { code: CameraMissing, kind: Skipped, count: 1, prims: [], message: "USD stage has no UsdGeomCamera — falling back to world::get_settings camera" } +lights: 0 +volumes: 0 +world: 1 geometries, PrimitiveBreakdown { triangles: 4, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 4, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +geom 0: material #0 Signature { kind: "MaterialX", cutout: false, straight: false, boundary: false, emits: true, uv: true, uv_primvar: None, face_texture: None, curve: None, primvars: Some(["ramp"]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=4:f842628536678af5 camera=4:f842628536678af5 shadow=4:f842628536678af5 indirect=4:f842628536678af5 +provenance material /World/Looks/M: MaterialOrigin { slots: [0], displaced: false } +provenance geometry 0..1: /World/Q +provenance mesh: MeshOrigin { geom_id: 0, slot: 0, baked: true, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 17828304714785378767, n_points: 6, n_indices: 8, n_uvs: None, smooth: true, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: None, cameras: [], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: None, offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/stage_usda-f3300bdef5e06140-1.image b/crates/crust-core/tests/data/import_baselines/stage_usda-f3300bdef5e06140-1.image new file mode 100644 index 000000000..45c7c7673 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/stage_usda-f3300bdef5e06140-1.image @@ -0,0 +1 @@ +640x360 16spp clamp-off a9b43f7c7735c3fb diff --git a/crates/crust-core/tests/data/import_baselines/stage_usda-f33567936d2468ed-1.digest b/crates/crust-core/tests/data/import_baselines/stage_usda-f33567936d2468ed-1.digest new file mode 100644 index 000000000..a3153ea18 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/stage_usda-f33567936d2468ed-1.digest @@ -0,0 +1,33 @@ +time: Some(5.0) +working space: Linear Rec.709 (sRGB) +camera path: Some("/World/Cam") +camera: Camera { origin: Vec3A(0.0, 1.5, 7.0), lower_left_corner: Vec3A(-5.6632595, -1.6855836, -3.0), horizontal: Vec3A(11.326519, 0.0, 0.0), vertical: Vec3A(0.0, 6.371167, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: Some("/Render/settings") +settings: RenderSettings { samples_per_pixel: 16, max_depth: 4, width: 128, height: 72, region: PixelRect { x0: 0, y0: 0, x1: 128, y1: 72 }, min_samples_per_pixel: 16, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 5, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: false, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [AovProduct { prim_path: "/Render/comp", name: "mv.exr", vars: [AovVar { prim_path: "/Render/comp/C", name: "C", channel_prefix: None, source: Color, components: 4, precision: Float, accumulation: Filtered, clear: 0.0, expression: None, raw: false, variance: false }, AovVar { prim_path: "/Render/comp/P", name: "P", channel_prefix: None, source: P, components: 3, precision: Float, accumulation: Closest, clear: 0.0, expression: None, raw: false, variance: false }, AovVar { prim_path: "/Render/comp/forward", name: "forward", channel_prefix: None, source: MotionVector, components: 2, precision: Float, accumulation: Closest, clear: 0.0, expression: None, raw: false, variance: false }], attributes: [] }], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 24.0, aperture: [20.955, 15.2908], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 10.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/stage.usda", "$ROOT/samples/animation.usda"], invisible_overrides: Some(0) } +layer: $ROOT/samples/animation.usda +layer: $DIR/stage.usda +lights: 2 +light 0: area name Some("/World/KeyLight") lpe None pmf 0.5 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 1: dome name Some("/World/Sky") lpe None pmf 0.5 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 4 geometries, PrimitiveBreakdown { triangles: 6, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 1 } top level, PrimitiveBreakdown { triangles: 6, spheres: 1, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 1 } unique, motion true +geom 0: material #0 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:9de8214b59f6ec57 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=2:9de8214b59f6ec57 +geom 1: material #1 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:be0b97004c4d3e85 camera=2:be0b97004c4d3e85 shadow=2:be0b97004c4d3e85 indirect=2:be0b97004c4d3e85 +geom 2: material #1 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:04a229f6b721d5f0 camera=2:04a229f6b721d5f0 shadow=2:04a229f6b721d5f0 indirect=2:04a229f6b721d5f0 +geom 3: material #1 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [Translation(Vec3A(0.22222222, 0.0, 0.0))] pieces all=1:eca0c2f96d67613b camera=1:eca0c2f96d67613b shadow=1:eca0c2f96d67613b indirect=1:eca0c2f96d67613b +provenance light /World/KeyLight: LightOrigin { index: 0, geoms: 0..1 } +provenance light /World/Sky: LightOrigin { index: 1, geoms: 4..4 } +provenance geometry 0..1: /World/KeyLight +provenance geometry 1..2: /World/Floor +provenance geometry 2..3: /World/Card +provenance geometry 3..4: /World/Mover +provenance mesh: MeshOrigin { geom_id: 1, slot: 0, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 2, slot: 1, baked: true, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 8416296582947184296, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 1: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 16680805309457723353, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: Some(5.0), camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: true, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/World/Cam"), cameras: ["/World/Cam"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/World/Cam"), offsets: [0, 4602678819172646912], interval: Some([4617315517961601024, 4617878467915022336]), query: true, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/stage_usda-f33567936d2468ed-1.image b/crates/crust-core/tests/data/import_baselines/stage_usda-f33567936d2468ed-1.image new file mode 100644 index 000000000..bcdd2a68d --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/stage_usda-f33567936d2468ed-1.image @@ -0,0 +1 @@ +128x72 16spp clamp-off 8dc69de5eba20193 diff --git a/crates/crust-core/tests/data/import_baselines/stage_usda-fbc457cd2253b427-1.digest b/crates/crust-core/tests/data/import_baselines/stage_usda-fbc457cd2253b427-1.digest new file mode 100644 index 000000000..df58e3355 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/stage_usda-fbc457cd2253b427-1.digest @@ -0,0 +1,20 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: None +camera: Camera { origin: Vec3A(15.0, 3.0, 3.0), lower_left_corner: Vec3A(4.8863316, -0.044797063, 4.174048), horizontal: Vec3A(1.2295314, 0.0, -6.147657), vertical: Vec3A(-0.44830504, 3.4967792, -0.08966101), u: Vec3A(0.19611613, 0.0, -0.9805807), v: Vec3A(-0.1271232, 0.991561, -0.02542464), lens_radius: 0.05, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: None +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 640, height: 360, region: PixelRect { x0: 0, y0: 0, x1: 640, y1: 360 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: None, depth_of_field: true, motion_blur: false, layer_stack: ["$DIR/stage.usda"], invisible_overrides: Some(0) } +layer: $DIR/stage.usda +warning: Warning { code: CameraMissing, kind: Skipped, count: 1, prims: [], message: "USD stage has no UsdGeomCamera — falling back to world::get_settings camera" } +lights: 0 +volumes: 0 +world: 1 geometries, PrimitiveBreakdown { triangles: 0, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 1 } top level, PrimitiveBreakdown { triangles: 0, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 4, instances: 1 } unique, motion false +geom 0: material #0 Signature { kind: "MaterialX", cutout: false, straight: false, boundary: false, emits: true, uv: true, uv_primvar: None, face_texture: None, curve: Some((false, true, [])), primvars: None } class 65535 holdout false transparent false map None uv None shading None strands Some(0) aov None swapped false curves true scale 1.0 motion [] pieces all=4:181bf424aa0de76e camera=4:181bf424aa0de76e shadow=4:181bf424aa0de76e indirect=4:181bf424aa0de76e +provenance material /World/Looks/M: MaterialOrigin { slots: [0], displaced: false } +provenance geometry 0..1: /World/C +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: None, cameras: [], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: None, offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/stage_usda-fbc457cd2253b427-1.image b/crates/crust-core/tests/data/import_baselines/stage_usda-fbc457cd2253b427-1.image new file mode 100644 index 000000000..7ba3b0f93 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/stage_usda-fbc457cd2253b427-1.image @@ -0,0 +1 @@ +640x360 16spp clamp-off 64034cf73f5248d8 diff --git a/crates/crust-core/tests/data/import_baselines/stage_usda-fec7a3f24112f4ad-1.digest b/crates/crust-core/tests/data/import_baselines/stage_usda-fec7a3f24112f4ad-1.digest new file mode 100644 index 000000000..34fdfa149 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/stage_usda-fec7a3f24112f4ad-1.digest @@ -0,0 +1,21 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: None +camera: Camera { origin: Vec3A(15.0, 3.0, 3.0), lower_left_corner: Vec3A(4.8863316, -0.044797063, 4.174048), horizontal: Vec3A(1.2295314, 0.0, -6.147657), vertical: Vec3A(-0.44830504, 3.4967792, -0.08966101), u: Vec3A(0.19611613, 0.0, -0.9805807), v: Vec3A(-0.1271232, 0.991561, -0.02542464), lens_radius: 0.05, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: None +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 640, height: 360, region: PixelRect { x0: 0, y0: 0, x1: 640, y1: 360 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: None, depth_of_field: true, motion_blur: false, layer_stack: ["$DIR/stage.usda"], invisible_overrides: Some(0) } +layer: $DIR/stage.usda +warning: Warning { code: CurvesUnsupportedPrimvar, kind: Skipped, count: 1, prims: ["/World/C"], message: "/World/C: primvars:label is a string, which curves do not read (float, float2, float3, color3f, int) — the material reads its default there" } +warning: Warning { code: CameraMissing, kind: Skipped, count: 1, prims: [], message: "USD stage has no UsdGeomCamera — falling back to world::get_settings camera" } +lights: 0 +volumes: 0 +world: 1 geometries, PrimitiveBreakdown { triangles: 0, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 1 } top level, PrimitiveBreakdown { triangles: 0, spheres: 0, disks: 0, cylinders: 0, curve_segments: 1, cubic_curve_spans: 0, instances: 1 } unique, motion false +geom 0: material #0 Signature { kind: "MaterialX", cutout: false, straight: false, boundary: false, emits: true, uv: true, uv_primvar: None, face_texture: None, curve: Some((false, true, ["label"])), primvars: None } class 65535 holdout false transparent false map None uv None shading None strands Some(0) aov None swapped false curves true scale 1.0 motion [] pieces all=1:ba28ac43777139fb camera=1:ba28ac43777139fb shadow=1:ba28ac43777139fb indirect=1:ba28ac43777139fb +provenance material /World/Looks/M: MaterialOrigin { slots: [0], displaced: false } +provenance geometry 0..1: /World/C +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: None, cameras: [], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: None, offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/stage_usda-fec7a3f24112f4ad-1.image b/crates/crust-core/tests/data/import_baselines/stage_usda-fec7a3f24112f4ad-1.image new file mode 100644 index 000000000..c734c5b1d --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/stage_usda-fec7a3f24112f4ad-1.image @@ -0,0 +1 @@ +640x360 16spp clamp-off a04a09c0d4b5e325 diff --git a/crates/crust-core/tests/data/import_baselines/stage_usda-ffdbda6eb16c3b7d-1.digest b/crates/crust-core/tests/data/import_baselines/stage_usda-ffdbda6eb16c3b7d-1.digest new file mode 100644 index 000000000..f781d95dc --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/stage_usda-ffdbda6eb16c3b7d-1.digest @@ -0,0 +1,22 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: None +camera: Camera { origin: Vec3A(15.0, 3.0, 3.0), lower_left_corner: Vec3A(4.8863316, -0.044797063, 4.174048), horizontal: Vec3A(1.2295314, 0.0, -6.147657), vertical: Vec3A(-0.44830504, 3.4967792, -0.08966101), u: Vec3A(0.19611613, 0.0, -0.9805807), v: Vec3A(-0.1271232, 0.991561, -0.02542464), lens_radius: 0.05, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: None +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 640, height: 360, region: PixelRect { x0: 0, y0: 0, x1: 640, y1: 360 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: None, depth_of_field: true, motion_blur: false, layer_stack: ["$DIR/stage.usda"], invisible_overrides: Some(0) } +layer: $DIR/stage.usda +warning: Warning { code: CameraMissing, kind: Skipped, count: 1, prims: [], message: "USD stage has no UsdGeomCamera — falling back to world::get_settings camera" } +lights: 0 +volumes: 0 +world: 1 geometries, PrimitiveBreakdown { triangles: 4, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 4, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +geom 0: material #0 Signature { kind: "MaterialX", cutout: false, straight: false, boundary: false, emits: true, uv: true, uv_primvar: None, face_texture: None, curve: None, primvars: Some(["ramp"]) } class 65535 holdout false transparent false map None uv None shading Some(0) strands None aov None swapped false curves false scale 1.0 motion [] pieces all=4:f842628536678af5 camera=4:f842628536678af5 shadow=4:f842628536678af5 indirect=4:f842628536678af5 +provenance material /World/Looks/M: MaterialOrigin { slots: [0], displaced: false } +provenance geometry 0..1: /World/Q +provenance mesh: MeshOrigin { geom_id: 0, slot: 0, baked: true, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 7300176459579144609, n_points: 6, n_indices: 8, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: None, cameras: [], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: None, offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/stage_usda-ffdbda6eb16c3b7d-1.image b/crates/crust-core/tests/data/import_baselines/stage_usda-ffdbda6eb16c3b7d-1.image new file mode 100644 index 000000000..452a40d74 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/stage_usda-ffdbda6eb16c3b7d-1.image @@ -0,0 +1 @@ +640x360 16spp clamp-off da0d8844add128c3 diff --git a/crates/crust-core/tests/data/import_baselines/static_vectors_usda-fae85e3b03a2883e-1.digest b/crates/crust-core/tests/data/import_baselines/static_vectors_usda-fae85e3b03a2883e-1.digest new file mode 100644 index 000000000..9be588893 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/static_vectors_usda-fae85e3b03a2883e-1.digest @@ -0,0 +1,20 @@ +time: Some(5.0) +working space: Linear Rec.709 (sRGB) +camera path: Some("/World/cam") +camera: Camera { origin: Vec3A(0.0, 0.0, 8.0), lower_left_corner: Vec3A(-2.7183647, -1.5290802, -2.0), horizontal: Vec3A(5.4367294, 0.0, 0.0), vertical: Vec3A(0.0, 3.0581603, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: Some("/Render/settings") +settings: RenderSettings { samples_per_pixel: 16, max_depth: 2, width: 64, height: 36, region: PixelRect { x0: 0, y0: 0, x1: 64, y1: 36 }, min_samples_per_pixel: 16, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 5, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [AovProduct { prim_path: "/Render/comp", name: "static.exr", vars: [AovVar { prim_path: "/Render/comp/C", name: "C", channel_prefix: None, source: Color, components: 3, precision: Float, accumulation: Filtered, clear: 0.0, expression: None, raw: false, variance: false }, AovVar { prim_path: "/Render/comp/forward", name: "forward", channel_prefix: None, source: MotionVector, components: 2, precision: Float, accumulation: Closest, clear: 0.0, expression: None, raw: false, variance: false }], attributes: [] }], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 50.0, aperture: [20.955, 15.2908], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 10.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/static_vectors.usda", "$DIR/static_vectors_base.usda"], invisible_overrides: Some(0) } +layer: $DIR/static_vectors.usda +layer: $DIR/static_vectors_base.usda +lights: 0 +volumes: 0 +world: 1 geometries, PrimitiveBreakdown { triangles: 0, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 1 } top level, PrimitiveBreakdown { triangles: 0, spheres: 1, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 1 } unique, motion true +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [Translation(Vec3A(1.0, 0.0, 0.0))] pieces all=1:f548d1d419575bc7 camera=1:f548d1d419575bc7 shadow=1:f548d1d419575bc7 indirect=1:f548d1d419575bc7 +provenance material /World/Glow: MaterialOrigin { slots: [0], displaced: false } +provenance geometry 0..1: /World/Ball +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: Some(5.0), camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/World/cam"), cameras: ["/World/cam"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/World/cam"), offsets: [0, 0], interval: None, query: true, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/static_vectors_usda-fae85e3b03a2883e-1.image b/crates/crust-core/tests/data/import_baselines/static_vectors_usda-fae85e3b03a2883e-1.image new file mode 100644 index 000000000..c0c2a9d9e --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/static_vectors_usda-fae85e3b03a2883e-1.image @@ -0,0 +1 @@ +64x36 16spp clamp-off c4b8bd0ec744066e diff --git a/crates/crust-core/tests/data/import_baselines/static_with_usda-9af9d7b39f92f260-1.digest b/crates/crust-core/tests/data/import_baselines/static_with_usda-9af9d7b39f92f260-1.digest new file mode 100644 index 000000000..9b259c903 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/static_with_usda-9af9d7b39f92f260-1.digest @@ -0,0 +1,21 @@ +time: Some(5.0) +working space: Linear Rec.709 (sRGB) +camera path: Some("/World/cam") +camera: Camera { origin: Vec3A(0.0, 0.0, 8.0), lower_left_corner: Vec3A(-2.7183647, -1.5290802, -2.0), horizontal: Vec3A(5.4367294, 0.0, 0.0), vertical: Vec3A(0.0, 3.0581603, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: Some("/Render/settings") +settings: RenderSettings { samples_per_pixel: 16, max_depth: 2, width: 64, height: 36, region: PixelRect { x0: 0, y0: 0, x1: 64, y1: 36 }, min_samples_per_pixel: 16, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 5, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 50.0, aperture: [20.955, 15.2908], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 10.0 }), depth_of_field: false, motion_blur: true, layer_stack: ["$DIR/static_with.usda"], invisible_overrides: Some(0) } +layer: $DIR/static_with.usda +lights: 0 +volumes: 0 +world: 1 geometries, PrimitiveBreakdown { triangles: 2, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 2, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:8f5d9187c4202473 camera=2:8f5d9187c4202473 shadow=2:8f5d9187c4202473 indirect=2:8f5d9187c4202473 +provenance material /World/Glow: MaterialOrigin { slots: [0], displaced: false } +provenance geometry 0..1: /World/Card +provenance mesh: MeshOrigin { geom_id: 0, slot: 0, baked: true, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 18250419415378433236, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: Some(5.0), camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/World/cam"), cameras: ["/World/cam"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/World/cam"), offsets: [0, 4607182418800017408], interval: Some([4617315517961601024, 4618441417868443648]), query: true, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/static_with_usda-9af9d7b39f92f260-1.image b/crates/crust-core/tests/data/import_baselines/static_with_usda-9af9d7b39f92f260-1.image new file mode 100644 index 000000000..0e8a4d39e --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/static_with_usda-9af9d7b39f92f260-1.image @@ -0,0 +1 @@ +64x36 16spp clamp-off 51c3405b7660a8ac diff --git a/crates/crust-core/tests/data/import_baselines/static_without_usda-cd73d9530ee2de09-1.digest b/crates/crust-core/tests/data/import_baselines/static_without_usda-cd73d9530ee2de09-1.digest new file mode 100644 index 000000000..200a9a36a --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/static_without_usda-cd73d9530ee2de09-1.digest @@ -0,0 +1,21 @@ +time: Some(5.0) +working space: Linear Rec.709 (sRGB) +camera path: Some("/World/cam") +camera: Camera { origin: Vec3A(0.0, 0.0, 8.0), lower_left_corner: Vec3A(-2.7183647, -1.5290802, -2.0), horizontal: Vec3A(5.4367294, 0.0, 0.0), vertical: Vec3A(0.0, 3.0581603, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: Some("/Render/settings") +settings: RenderSettings { samples_per_pixel: 16, max_depth: 2, width: 64, height: 36, region: PixelRect { x0: 0, y0: 0, x1: 64, y1: 36 }, min_samples_per_pixel: 16, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 5, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 50.0, aperture: [20.955, 15.2908], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 10.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/static_without.usda"], invisible_overrides: Some(0) } +layer: $DIR/static_without.usda +lights: 0 +volumes: 0 +world: 1 geometries, PrimitiveBreakdown { triangles: 2, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 2, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:8f5d9187c4202473 camera=2:8f5d9187c4202473 shadow=2:8f5d9187c4202473 indirect=2:8f5d9187c4202473 +provenance material /World/Glow: MaterialOrigin { slots: [0], displaced: false } +provenance geometry 0..1: /World/Card +provenance mesh: MeshOrigin { geom_id: 0, slot: 0, baked: true, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 18250419415378433236, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: Some(5.0), camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/World/cam"), cameras: ["/World/cam"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/World/cam"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/static_without_usda-cd73d9530ee2de09-1.image b/crates/crust-core/tests/data/import_baselines/static_without_usda-cd73d9530ee2de09-1.image new file mode 100644 index 000000000..0e8a4d39e --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/static_without_usda-cd73d9530ee2de09-1.image @@ -0,0 +1 @@ +64x36 16spp clamp-off 51c3405b7660a8ac diff --git a/crates/crust-core/tests/data/import_baselines/stats_usda-00e508bd2c5eb608-1.digest b/crates/crust-core/tests/data/import_baselines/stats_usda-00e508bd2c5eb608-1.digest new file mode 100644 index 000000000..62b11c2f8 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/stats_usda-00e508bd2c5eb608-1.digest @@ -0,0 +1,25 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: None +camera: Camera { origin: Vec3A(15.0, 3.0, 3.0), lower_left_corner: Vec3A(4.8863316, -0.044797063, 4.174048), horizontal: Vec3A(1.2295314, 0.0, -6.147657), vertical: Vec3A(-0.44830504, 3.4967792, -0.08966101), u: Vec3A(0.19611613, 0.0, -0.9805807), v: Vec3A(-0.1271232, 0.991561, -0.02542464), lens_radius: 0.05, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: None +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 640, height: 360, region: PixelRect { x0: 0, y0: 0, x1: 640, y1: 360 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: None, depth_of_field: true, motion_blur: false, layer_stack: ["$DIR/stats.usda"], invisible_overrides: Some(0) } +layer: $DIR/stats.usda +warning: Warning { code: CameraMissing, kind: Skipped, count: 1, prims: [], message: "USD stage has no UsdGeomCamera — falling back to world::get_settings camera" } +lights: 1 +light 0: area name Some("/World/L") lpe None pmf 1.0 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 3 geometries, PrimitiveBreakdown { triangles: 0, spheres: 3, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 0, spheres: 3, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +geom 0: material #0 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:1c540e668befdb85 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=1:1c540e668befdb85 +geom 1: material #1 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:d46e920fbc035ae5 camera=1:d46e920fbc035ae5 shadow=1:d46e920fbc035ae5 indirect=1:d46e920fbc035ae5 +geom 2: material #1 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:fb1e7d48790aec95 camera=1:fb1e7d48790aec95 shadow=1:fb1e7d48790aec95 indirect=1:fb1e7d48790aec95 +provenance light /World/L: LightOrigin { index: 0, geoms: 0..1 } +provenance geometry 0..1: /World/L +provenance geometry 1..2: /World/B +provenance geometry 2..3: /World/A +provenance spheres: [1, 2] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: None, cameras: [], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: None, offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/stats_usda-00e508bd2c5eb608-1.image b/crates/crust-core/tests/data/import_baselines/stats_usda-00e508bd2c5eb608-1.image new file mode 100644 index 000000000..314a438c1 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/stats_usda-00e508bd2c5eb608-1.image @@ -0,0 +1 @@ +640x360 16spp clamp-off 0c7e6e89a269ec4d diff --git a/crates/crust-core/tests/data/import_baselines/stops_usda-f48d13a255e8b51e-1.digest b/crates/crust-core/tests/data/import_baselines/stops_usda-f48d13a255e8b51e-1.digest new file mode 100644 index 000000000..2955c3162 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/stops_usda-f48d13a255e8b51e-1.digest @@ -0,0 +1,16 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/cam") +camera: Camera { origin: Vec3A(0.0, 0.0, 0.0), lower_left_corner: Vec3A(-2.7183647, -1.5290802, -10.0), horizontal: Vec3A(5.4367294, 0.0, 0.0), vertical: Vec3A(0.0, 3.0581603, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: None +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 640, height: 360, region: PixelRect { x0: 0, y0: 0, x1: 640, y1: 360 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 4.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 50.0, aperture: [20.955, 15.2908], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 10.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/stops.usda"], invisible_overrides: Some(0) } +layer: $DIR/stops.usda +lights: 0 +volumes: 0 +world: 0 geometries, PrimitiveBreakdown { triangles: 0, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 0, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/cam"), cameras: ["/cam"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/cam"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/stops_usda-f48d13a255e8b51e-1.image b/crates/crust-core/tests/data/import_baselines/stops_usda-f48d13a255e8b51e-1.image new file mode 100644 index 000000000..c734c5b1d --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/stops_usda-f48d13a255e8b51e-1.image @@ -0,0 +1 @@ +640x360 16spp clamp-off a04a09c0d4b5e325 diff --git a/crates/crust-core/tests/data/import_baselines/strategy_balance_usda-bdbde883917b565d-1.digest b/crates/crust-core/tests/data/import_baselines/strategy_balance_usda-bdbde883917b565d-1.digest new file mode 100644 index 000000000..43968b831 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/strategy_balance_usda-bdbde883917b565d-1.digest @@ -0,0 +1,17 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: None +camera: Camera { origin: Vec3A(15.0, 3.0, 3.0), lower_left_corner: Vec3A(4.8863316, -0.044797063, 4.174048), horizontal: Vec3A(1.2295314, 0.0, -6.147657), vertical: Vec3A(-0.44830504, 3.4967792, -0.08966101), u: Vec3A(0.19611613, 0.0, -0.9805807), v: Vec3A(-0.1271232, 0.991561, -0.02542464), lens_radius: 0.05, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: Some("/Render/settings") +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 640, height: 360, region: PixelRect { x0: 0, y0: 0, x1: 640, y1: 360 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: BalanceMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: None, depth_of_field: true, motion_blur: false, layer_stack: ["$DIR/strategy_balance.usda"], invisible_overrides: Some(0) } +layer: $DIR/strategy_balance.usda +warning: Warning { code: CameraMissing, kind: Skipped, count: 1, prims: [], message: "USD stage has no UsdGeomCamera — falling back to world::get_settings camera" } +lights: 0 +volumes: 0 +world: 0 geometries, PrimitiveBreakdown { triangles: 0, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 0, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: None, cameras: [], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: None, offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/strategy_balance_usda-bdbde883917b565d-1.image b/crates/crust-core/tests/data/import_baselines/strategy_balance_usda-bdbde883917b565d-1.image new file mode 100644 index 000000000..c734c5b1d --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/strategy_balance_usda-bdbde883917b565d-1.image @@ -0,0 +1 @@ +640x360 16spp clamp-off a04a09c0d4b5e325 diff --git a/crates/crust-core/tests/data/import_baselines/strategy_bogus_usda-ab14768d89b4fe10-1.digest b/crates/crust-core/tests/data/import_baselines/strategy_bogus_usda-ab14768d89b4fe10-1.digest new file mode 100644 index 000000000..1a860f434 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/strategy_bogus_usda-ab14768d89b4fe10-1.digest @@ -0,0 +1,18 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: None +camera: Camera { origin: Vec3A(15.0, 3.0, 3.0), lower_left_corner: Vec3A(4.8863316, -0.044797063, 4.174048), horizontal: Vec3A(1.2295314, 0.0, -6.147657), vertical: Vec3A(-0.44830504, 3.4967792, -0.08966101), u: Vec3A(0.19611613, 0.0, -0.9805807), v: Vec3A(-0.1271232, 0.991561, -0.02542464), lens_radius: 0.05, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: Some("/Render/settings") +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 640, height: 360, region: PixelRect { x0: 0, y0: 0, x1: 640, y1: 360 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: None, depth_of_field: true, motion_blur: false, layer_stack: ["$DIR/strategy_bogus.usda"], invisible_overrides: Some(0) } +layer: $DIR/strategy_bogus.usda +warning: Warning { code: SettingsInvalidValue, kind: Refused, count: 1, prims: ["/Render/settings"], message: "crust:samplingStrategy: unknown sampling strategy \"banana\" (expected power | balance | light | bsdf) — using power MIS" } +warning: Warning { code: CameraMissing, kind: Skipped, count: 1, prims: [], message: "USD stage has no UsdGeomCamera — falling back to world::get_settings camera" } +lights: 0 +volumes: 0 +world: 0 geometries, PrimitiveBreakdown { triangles: 0, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 0, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: None, cameras: [], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: None, offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/strategy_bogus_usda-ab14768d89b4fe10-1.image b/crates/crust-core/tests/data/import_baselines/strategy_bogus_usda-ab14768d89b4fe10-1.image new file mode 100644 index 000000000..c734c5b1d --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/strategy_bogus_usda-ab14768d89b4fe10-1.image @@ -0,0 +1 @@ +640x360 16spp clamp-off a04a09c0d4b5e325 diff --git a/crates/crust-core/tests/data/import_baselines/strategy_bsdf_usda-f7c53ec9f704be37-1.digest b/crates/crust-core/tests/data/import_baselines/strategy_bsdf_usda-f7c53ec9f704be37-1.digest new file mode 100644 index 000000000..73194a50e --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/strategy_bsdf_usda-f7c53ec9f704be37-1.digest @@ -0,0 +1,17 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: None +camera: Camera { origin: Vec3A(15.0, 3.0, 3.0), lower_left_corner: Vec3A(4.8863316, -0.044797063, 4.174048), horizontal: Vec3A(1.2295314, 0.0, -6.147657), vertical: Vec3A(-0.44830504, 3.4967792, -0.08966101), u: Vec3A(0.19611613, 0.0, -0.9805807), v: Vec3A(-0.1271232, 0.991561, -0.02542464), lens_radius: 0.05, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: Some("/Render/settings") +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 640, height: 360, region: PixelRect { x0: 0, y0: 0, x1: 640, y1: 360 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: BsdfOnly, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: None, depth_of_field: true, motion_blur: false, layer_stack: ["$DIR/strategy_bsdf.usda"], invisible_overrides: Some(0) } +layer: $DIR/strategy_bsdf.usda +warning: Warning { code: CameraMissing, kind: Skipped, count: 1, prims: [], message: "USD stage has no UsdGeomCamera — falling back to world::get_settings camera" } +lights: 0 +volumes: 0 +world: 0 geometries, PrimitiveBreakdown { triangles: 0, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 0, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: None, cameras: [], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: None, offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/strategy_bsdf_usda-f7c53ec9f704be37-1.image b/crates/crust-core/tests/data/import_baselines/strategy_bsdf_usda-f7c53ec9f704be37-1.image new file mode 100644 index 000000000..c734c5b1d --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/strategy_bsdf_usda-f7c53ec9f704be37-1.image @@ -0,0 +1 @@ +640x360 16spp clamp-off a04a09c0d4b5e325 diff --git a/crates/crust-core/tests/data/import_baselines/strategy_light_usda-ec65e0dfb065b1f1-1.digest b/crates/crust-core/tests/data/import_baselines/strategy_light_usda-ec65e0dfb065b1f1-1.digest new file mode 100644 index 000000000..d63210039 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/strategy_light_usda-ec65e0dfb065b1f1-1.digest @@ -0,0 +1,17 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: None +camera: Camera { origin: Vec3A(15.0, 3.0, 3.0), lower_left_corner: Vec3A(4.8863316, -0.044797063, 4.174048), horizontal: Vec3A(1.2295314, 0.0, -6.147657), vertical: Vec3A(-0.44830504, 3.4967792, -0.08966101), u: Vec3A(0.19611613, 0.0, -0.9805807), v: Vec3A(-0.1271232, 0.991561, -0.02542464), lens_radius: 0.05, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: Some("/Render/settings") +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 640, height: 360, region: PixelRect { x0: 0, y0: 0, x1: 640, y1: 360 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: LightOnly, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: None, depth_of_field: true, motion_blur: false, layer_stack: ["$DIR/strategy_light.usda"], invisible_overrides: Some(0) } +layer: $DIR/strategy_light.usda +warning: Warning { code: CameraMissing, kind: Skipped, count: 1, prims: [], message: "USD stage has no UsdGeomCamera — falling back to world::get_settings camera" } +lights: 0 +volumes: 0 +world: 0 geometries, PrimitiveBreakdown { triangles: 0, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 0, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: None, cameras: [], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: None, offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/strategy_light_usda-ec65e0dfb065b1f1-1.image b/crates/crust-core/tests/data/import_baselines/strategy_light_usda-ec65e0dfb065b1f1-1.image new file mode 100644 index 000000000..c734c5b1d --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/strategy_light_usda-ec65e0dfb065b1f1-1.image @@ -0,0 +1 @@ +640x360 16spp clamp-off a04a09c0d4b5e325 diff --git a/crates/crust-core/tests/data/import_baselines/strategy_power_usda-03788414ab51c35f-1.digest b/crates/crust-core/tests/data/import_baselines/strategy_power_usda-03788414ab51c35f-1.digest new file mode 100644 index 000000000..b7452fce3 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/strategy_power_usda-03788414ab51c35f-1.digest @@ -0,0 +1,17 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: None +camera: Camera { origin: Vec3A(15.0, 3.0, 3.0), lower_left_corner: Vec3A(4.8863316, -0.044797063, 4.174048), horizontal: Vec3A(1.2295314, 0.0, -6.147657), vertical: Vec3A(-0.44830504, 3.4967792, -0.08966101), u: Vec3A(0.19611613, 0.0, -0.9805807), v: Vec3A(-0.1271232, 0.991561, -0.02542464), lens_radius: 0.05, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: Some("/Render/settings") +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 640, height: 360, region: PixelRect { x0: 0, y0: 0, x1: 640, y1: 360 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: None, depth_of_field: true, motion_blur: false, layer_stack: ["$DIR/strategy_power.usda"], invisible_overrides: Some(0) } +layer: $DIR/strategy_power.usda +warning: Warning { code: CameraMissing, kind: Skipped, count: 1, prims: [], message: "USD stage has no UsdGeomCamera — falling back to world::get_settings camera" } +lights: 0 +volumes: 0 +world: 0 geometries, PrimitiveBreakdown { triangles: 0, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 0, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: None, cameras: [], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: None, offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/strategy_power_usda-03788414ab51c35f-1.image b/crates/crust-core/tests/data/import_baselines/strategy_power_usda-03788414ab51c35f-1.image new file mode 100644 index 000000000..c734c5b1d --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/strategy_power_usda-03788414ab51c35f-1.image @@ -0,0 +1 @@ +640x360 16spp clamp-off a04a09c0d4b5e325 diff --git a/crates/crust-core/tests/data/import_baselines/streamed_usda-08988239fcd84b0c-1.digest b/crates/crust-core/tests/data/import_baselines/streamed_usda-08988239fcd84b0c-1.digest new file mode 100644 index 000000000..aafd07f30 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/streamed_usda-08988239fcd84b0c-1.digest @@ -0,0 +1,28 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: None +camera: Camera { origin: Vec3A(15.0, 3.0, 3.0), lower_left_corner: Vec3A(4.8863316, -0.044797063, 4.174048), horizontal: Vec3A(1.2295314, 0.0, -6.147657), vertical: Vec3A(-0.44830504, 3.4967792, -0.08966101), u: Vec3A(0.19611613, 0.0, -0.9805807), v: Vec3A(-0.1271232, 0.991561, -0.02542464), lens_radius: 0.05, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: None +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 640, height: 360, region: PixelRect { x0: 0, y0: 0, x1: 640, y1: 360 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: None, depth_of_field: true, motion_blur: false, layer_stack: ["$DIR/streamed.usda"], invisible_overrides: Some(0) } +layer: $DIR/streamed.usda +warning: Warning { code: CameraMissing, kind: Skipped, count: 1, prims: [], message: "USD stage has no UsdGeomCamera — falling back to world::get_settings camera" } +lights: 0 +volumes: 0 +world: 5 geometries, PrimitiveBreakdown { triangles: 0, spheres: 5, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 0, spheres: 5, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:fb1e7d48790aec95 camera=1:fb1e7d48790aec95 shadow=1:fb1e7d48790aec95 indirect=1:fb1e7d48790aec95 +geom 1: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:9d94b40ec65de025 camera=1:9d94b40ec65de025 shadow=1:9d94b40ec65de025 indirect=1:9d94b40ec65de025 +geom 2: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:1be64b9e0ddad3f8 camera=1:1be64b9e0ddad3f8 shadow=1:1be64b9e0ddad3f8 indirect=1:1be64b9e0ddad3f8 +geom 3: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:d46e920fbc035ae5 camera=1:d46e920fbc035ae5 shadow=1:d46e920fbc035ae5 indirect=1:d46e920fbc035ae5 +geom 4: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:c0b9b61d00035a45 camera=1:c0b9b61d00035a45 shadow=1:c0b9b61d00035a45 indirect=1:c0b9b61d00035a45 +provenance material /World/Looks/M: MaterialOrigin { slots: [0, 1, 2, 3, 4], displaced: false } +provenance geometry 0..1: /World/S0 +provenance geometry 1..2: /World/S1 +provenance geometry 2..3: /World/S2 +provenance geometry 3..4: /World/S3 +provenance geometry 4..5: /World/S4 +provenance spheres: [0, 1, 2, 3, 4] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: None, cameras: [], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: None, offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/streamed_usda-08988239fcd84b0c-1.image b/crates/crust-core/tests/data/import_baselines/streamed_usda-08988239fcd84b0c-1.image new file mode 100644 index 000000000..c734c5b1d --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/streamed_usda-08988239fcd84b0c-1.image @@ -0,0 +1 @@ +640x360 16spp clamp-off a04a09c0d4b5e325 diff --git a/crates/crust-core/tests/data/import_baselines/streamed_usda-274e7e68b089c3ac-1.digest b/crates/crust-core/tests/data/import_baselines/streamed_usda-274e7e68b089c3ac-1.digest new file mode 100644 index 000000000..9c8493e42 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/streamed_usda-274e7e68b089c3ac-1.digest @@ -0,0 +1,22 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/W/Cam") +camera: Camera { origin: Vec3A(0.0, 0.0, 0.0), lower_left_corner: Vec3A(-2.0955, -1.1787187, -10.0), horizontal: Vec3A(4.191, 0.0, 0.0), vertical: Vec3A(0.0, 2.3574374, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: Some("/W/Render/settings") +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 640, height: 360, region: PixelRect { x0: 0, y0: 0, x1: 640, y1: 360 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 50.0, aperture: [20.955, 11.787188], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 10.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/streamed.usda"], invisible_overrides: Some(0) } +layer: $DIR/streamed.usda +lights: 0 +volumes: 0 +world: 2 geometries, PrimitiveBreakdown { triangles: 0, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 2 } top level, PrimitiveBreakdown { triangles: 1200, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 2 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=768:bb9aeaae01563c51 camera=768:bb9aeaae01563c51 shadow=768:bb9aeaae01563c51 indirect=768:bb9aeaae01563c51 +geom 1: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=432:acd7359f035cf995 camera=432:acd7359f035cf995 shadow=432:acd7359f035cf995 indirect=432:acd7359f035cf995 +provenance geometry 0..1: /A +provenance geometry 1..2: /B +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 13487480004083563611, n_points: 386, n_indices: 2304, n_uvs: None, smooth: true, material: 0 }), placements: 0, shared: true, displaced: false } +provenance mesh slot 1: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 11483454623663573887, n_points: 218, n_indices: 1296, n_uvs: None, smooth: true, material: 0 }), placements: 0, shared: true, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/W/Render/settings"), subdiv_level: 0, adaptive: Some(ScreenKey([0, 0, 0, 1153360542, 0, 0, 0, 3212836864, 0, 3193345094, 1065353216, 0, 3193345094, 0, 3212836864, 3186714319, 0, 1065353216, 3186714319, 0, 0, 3212836864, 1073741824, 3])), domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/W/Cam"), cameras: ["/W/Cam"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/W/Cam"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/streamed_usda-274e7e68b089c3ac-1.image b/crates/crust-core/tests/data/import_baselines/streamed_usda-274e7e68b089c3ac-1.image new file mode 100644 index 000000000..c734c5b1d --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/streamed_usda-274e7e68b089c3ac-1.image @@ -0,0 +1 @@ +640x360 16spp clamp-off a04a09c0d4b5e325 diff --git a/crates/crust-core/tests/data/import_baselines/string_id_usda-4ef78239c4d0e1cc-1.digest b/crates/crust-core/tests/data/import_baselines/string_id_usda-4ef78239c4d0e1cc-1.digest new file mode 100644 index 000000000..bd7bdb2b1 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/string_id_usda-4ef78239c4d0e1cc-1.digest @@ -0,0 +1,22 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: None +camera: Camera { origin: Vec3A(15.0, 3.0, 3.0), lower_left_corner: Vec3A(4.8863316, -0.044797063, 4.174048), horizontal: Vec3A(1.2295314, 0.0, -6.147657), vertical: Vec3A(-0.44830504, 3.4967792, -0.08966101), u: Vec3A(0.19611613, 0.0, -0.9805807), v: Vec3A(-0.1271232, 0.991561, -0.02542464), lens_radius: 0.05, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: None +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 640, height: 360, region: PixelRect { x0: 0, y0: 0, x1: 640, y1: 360 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: None, depth_of_field: true, motion_blur: false, layer_stack: ["$DIR/string_id.usda"], invisible_overrides: Some(0) } +layer: $DIR/string_id.usda +warning: Warning { code: CameraMissing, kind: Skipped, count: 1, prims: [], message: "USD stage has no UsdGeomCamera — falling back to world::get_settings camera" } +lights: 0 +volumes: 0 +world: 1 geometries, PrimitiveBreakdown { triangles: 8, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 8, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=8:781080fc8e9e0af5 camera=8:781080fc8e9e0af5 shadow=8:781080fc8e9e0af5 indirect=8:781080fc8e9e0af5 +provenance material /World/Rock: MaterialOrigin { slots: [0], displaced: true } +provenance geometry 0..1: /World/Ground +provenance mesh: MeshOrigin { geom_id: 0, slot: 0, baked: true, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 485570829870313581, n_points: 9, n_indices: 16, n_uvs: None, smooth: true, material: 0 }), placements: 1, shared: false, displaced: true } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: Some(1), subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 1, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: None, cameras: [], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: None, offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/string_id_usda-4ef78239c4d0e1cc-1.image b/crates/crust-core/tests/data/import_baselines/string_id_usda-4ef78239c4d0e1cc-1.image new file mode 100644 index 000000000..c734c5b1d --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/string_id_usda-4ef78239c4d0e1cc-1.image @@ -0,0 +1 @@ +640x360 16spp clamp-off a04a09c0d4b5e325 diff --git a/crates/crust-core/tests/data/import_baselines/string_usda-edd62f0c52a0bd52-1.digest b/crates/crust-core/tests/data/import_baselines/string_usda-edd62f0c52a0bd52-1.digest new file mode 100644 index 000000000..a50b3b667 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/string_usda-edd62f0c52a0bd52-1.digest @@ -0,0 +1,23 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/World/cam") +camera: Camera { origin: Vec3A(0.0, 0.0, 10.0), lower_left_corner: Vec3A(-2.0955, -1.5716249, 0.0), horizontal: Vec3A(4.191, 0.0, 0.0), vertical: Vec3A(0.0, 3.1432498, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: Some("/Render/settings") +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 48, height: 36, region: PixelRect { x0: 0, y0: 0, x1: 48, y1: 36 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [AovProduct { prim_path: "/Render/p", name: "p.exr", vars: [AovVar { prim_path: "/Render/P", name: "P", channel_prefix: None, source: P, components: 3, precision: Float, accumulation: Closest, clear: 0.0, expression: None, raw: false, variance: false }, AovVar { prim_path: "/Render/label", name: "label", channel_prefix: None, source: Primvar(PrimvarSource { index: 0, components: 1, role: Float }), components: 1, precision: Float, accumulation: Filtered, clear: 0.0, expression: None, raw: false, variance: false }], attributes: [] }], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 50.0, aperture: [20.955, 15.2908], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 10.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/string.usda"], invisible_overrides: Some(0) } +layer: $DIR/string.usda +warning: Warning { code: PrimvarMismatch, kind: Skipped, count: 1, prims: ["/World/mesh"], message: "/Render/label asks for primvar \"label\" as 1 component(s), but /World/mesh authors it as string (no numeric value of one to three components per element); that prim reads the clear value" } +lights: 1 +light 0: dome name Some("/World/dome") lpe None pmf 1.0 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 1 geometries, PrimitiveBreakdown { triangles: 2, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 2, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:32f1a52c797bfee5 camera=2:32f1a52c797bfee5 shadow=2:32f1a52c797bfee5 indirect=2:32f1a52c797bfee5 +provenance light /World/dome: LightOrigin { index: 0, geoms: 1..1 } +provenance geometry 0..1: /World/mesh +provenance mesh: MeshOrigin { geom_id: 0, slot: 0, baked: true, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 16756132900457544540, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/World/cam"), cameras: ["/World/cam"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [("label", 1)], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/World/cam"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/string_usda-edd62f0c52a0bd52-1.image b/crates/crust-core/tests/data/import_baselines/string_usda-edd62f0c52a0bd52-1.image new file mode 100644 index 000000000..648a9f248 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/string_usda-edd62f0c52a0bd52-1.image @@ -0,0 +1 @@ +48x36 16spp clamp-off 54407d51eeed59ca diff --git a/crates/crust-core/tests/data/import_baselines/strip_cracks_usda-5cdf0130b2848b76-1.digest b/crates/crust-core/tests/data/import_baselines/strip_cracks_usda-5cdf0130b2848b76-1.digest new file mode 100644 index 000000000..917eef9bd --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/strip_cracks_usda-5cdf0130b2848b76-1.digest @@ -0,0 +1,20 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/W/Cam") +camera: Camera { origin: Vec3A(0.0, 0.0, 0.0), lower_left_corner: Vec3A(-2.0955, -1.1787187, -10.0), horizontal: Vec3A(4.191, 0.0, 0.0), vertical: Vec3A(0.0, 2.3574374, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: Some("/Render/settings") +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 640, height: 360, region: PixelRect { x0: 0, y0: 0, x1: 640, y1: 360 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 50.0, aperture: [20.955, 11.787188], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 10.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/strip_cracks.usda"], invisible_overrides: Some(0) } +layer: $DIR/strip_cracks.usda +lights: 0 +volumes: 0 +world: 1 geometries, PrimitiveBreakdown { triangles: 112291, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 112291, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=112291:7ea7c978acd3a676 camera=112291:7ea7c978acd3a676 shadow=112291:7ea7c978acd3a676 indirect=112291:7ea7c978acd3a676 +provenance geometry 0..1: /W/Strip +provenance mesh: MeshOrigin { geom_id: 0, slot: 0, baked: true, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 13966500460057317815, n_points: 59340, n_indices: 336873, n_uvs: None, smooth: true, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: Some(ScreenKey([0, 0, 0, 1153360542, 0, 0, 0, 3212836864, 0, 3193345094, 1065353216, 0, 3193345094, 0, 3212836864, 3186714319, 0, 1065353216, 3186714319, 0, 0, 3212836864, 1073741824, 3])), domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/W/Cam"), cameras: ["/W/Cam"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/W/Cam"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/strip_cracks_usda-5cdf0130b2848b76-1.image b/crates/crust-core/tests/data/import_baselines/strip_cracks_usda-5cdf0130b2848b76-1.image new file mode 100644 index 000000000..c734c5b1d --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/strip_cracks_usda-5cdf0130b2848b76-1.image @@ -0,0 +1 @@ +640x360 16spp clamp-off a04a09c0d4b5e325 diff --git a/crates/crust-core/tests/data/import_baselines/strip_usda-a747742859825b3a-1.digest b/crates/crust-core/tests/data/import_baselines/strip_usda-a747742859825b3a-1.digest new file mode 100644 index 000000000..f62ca8b16 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/strip_usda-a747742859825b3a-1.digest @@ -0,0 +1,20 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/W/Cam") +camera: Camera { origin: Vec3A(0.0, 0.0, 0.0), lower_left_corner: Vec3A(-2.0955, -1.1787187, -10.0), horizontal: Vec3A(4.191, 0.0, 0.0), vertical: Vec3A(0.0, 2.3574374, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: Some("/Render/settings") +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 640, height: 360, region: PixelRect { x0: 0, y0: 0, x1: 640, y1: 360 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 50.0, aperture: [20.955, 11.787188], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 10.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/strip.usda"], invisible_overrides: Some(0) } +layer: $DIR/strip.usda +lights: 0 +volumes: 0 +world: 1 geometries, PrimitiveBreakdown { triangles: 126691, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 126691, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=126691:41bb67776dc8d7b3 camera=126691:41bb67776dc8d7b3 shadow=126691:41bb67776dc8d7b3 indirect=126691:41bb67776dc8d7b3 +provenance geometry 0..1: /W/Strip +provenance mesh: MeshOrigin { geom_id: 0, slot: 0, baked: true, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 5200819178695756285, n_points: 68340, n_indices: 380073, n_uvs: None, smooth: true, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: Some(ScreenKey([0, 0, 0, 1153360542, 0, 0, 0, 3212836864, 0, 3193345094, 1065353216, 0, 3193345094, 0, 3212836864, 3186714319, 0, 1065353216, 3186714319, 0, 0, 3212836864, 1073741824, 3])), domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/W/Cam"), cameras: ["/W/Cam"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/W/Cam"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/strip_usda-a747742859825b3a-1.image b/crates/crust-core/tests/data/import_baselines/strip_usda-a747742859825b3a-1.image new file mode 100644 index 000000000..c734c5b1d --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/strip_usda-a747742859825b3a-1.image @@ -0,0 +1 @@ +640x360 16spp clamp-off a04a09c0d4b5e325 diff --git a/crates/crust-core/tests/data/import_baselines/subdiv_0_usda-6db126ded01c4707-1.digest b/crates/crust-core/tests/data/import_baselines/subdiv_0_usda-6db126ded01c4707-1.digest new file mode 100644 index 000000000..89c19b20d --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/subdiv_0_usda-6db126ded01c4707-1.digest @@ -0,0 +1,21 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: None +camera: Camera { origin: Vec3A(15.0, 3.0, 3.0), lower_left_corner: Vec3A(4.8863316, -0.044797063, 4.174048), horizontal: Vec3A(1.2295314, 0.0, -6.147657), vertical: Vec3A(-0.44830504, 3.4967792, -0.08966101), u: Vec3A(0.19611613, 0.0, -0.9805807), v: Vec3A(-0.1271232, 0.991561, -0.02542464), lens_radius: 0.05, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: Some("/Render/settings") +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 640, height: 360, region: PixelRect { x0: 0, y0: 0, x1: 640, y1: 360 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: None, depth_of_field: true, motion_blur: false, layer_stack: ["$DIR/subdiv_0.usda"], invisible_overrides: Some(0) } +layer: $DIR/subdiv_0.usda +warning: Warning { code: CameraMissing, kind: Skipped, count: 1, prims: [], message: "USD stage has no UsdGeomCamera — falling back to world::get_settings camera" } +lights: 0 +volumes: 0 +world: 1 geometries, PrimitiveBreakdown { triangles: 12, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 12, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=12:722462f98b2cf305 camera=12:722462f98b2cf305 shadow=12:722462f98b2cf305 indirect=12:722462f98b2cf305 +provenance geometry 0..1: /World/Cube +provenance mesh: MeshOrigin { geom_id: 0, slot: 0, baked: true, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 14289806633734265804, n_points: 8, n_indices: 24, n_uvs: None, smooth: true, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: None, cameras: [], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: None, offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/subdiv_0_usda-6db126ded01c4707-1.image b/crates/crust-core/tests/data/import_baselines/subdiv_0_usda-6db126ded01c4707-1.image new file mode 100644 index 000000000..c734c5b1d --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/subdiv_0_usda-6db126ded01c4707-1.image @@ -0,0 +1 @@ +640x360 16spp clamp-off a04a09c0d4b5e325 diff --git a/crates/crust-core/tests/data/import_baselines/subdiv_1_usda-bde0e042f33df4a5-1.digest b/crates/crust-core/tests/data/import_baselines/subdiv_1_usda-bde0e042f33df4a5-1.digest new file mode 100644 index 000000000..a0b388a91 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/subdiv_1_usda-bde0e042f33df4a5-1.digest @@ -0,0 +1,21 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: None +camera: Camera { origin: Vec3A(15.0, 3.0, 3.0), lower_left_corner: Vec3A(4.8863316, -0.044797063, 4.174048), horizontal: Vec3A(1.2295314, 0.0, -6.147657), vertical: Vec3A(-0.44830504, 3.4967792, -0.08966101), u: Vec3A(0.19611613, 0.0, -0.9805807), v: Vec3A(-0.1271232, 0.991561, -0.02542464), lens_radius: 0.05, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: Some("/Render/settings") +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 640, height: 360, region: PixelRect { x0: 0, y0: 0, x1: 640, y1: 360 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: None, depth_of_field: true, motion_blur: false, layer_stack: ["$DIR/subdiv_1.usda"], invisible_overrides: Some(0) } +layer: $DIR/subdiv_1.usda +warning: Warning { code: CameraMissing, kind: Skipped, count: 1, prims: [], message: "USD stage has no UsdGeomCamera — falling back to world::get_settings camera" } +lights: 0 +volumes: 0 +world: 1 geometries, PrimitiveBreakdown { triangles: 48, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 48, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=48:5716bd3df4bea055 camera=48:5716bd3df4bea055 shadow=48:5716bd3df4bea055 indirect=48:5716bd3df4bea055 +provenance geometry 0..1: /World/Cube +provenance mesh: MeshOrigin { geom_id: 0, slot: 0, baked: true, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 7668848715455400612, n_points: 26, n_indices: 96, n_uvs: None, smooth: true, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 1, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: None, cameras: [], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: None, offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/subdiv_1_usda-bde0e042f33df4a5-1.image b/crates/crust-core/tests/data/import_baselines/subdiv_1_usda-bde0e042f33df4a5-1.image new file mode 100644 index 000000000..c734c5b1d --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/subdiv_1_usda-bde0e042f33df4a5-1.image @@ -0,0 +1 @@ +640x360 16spp clamp-off a04a09c0d4b5e325 diff --git a/crates/crust-core/tests/data/import_baselines/subdiv_2_usda-47f822571f7427d3-1.digest b/crates/crust-core/tests/data/import_baselines/subdiv_2_usda-47f822571f7427d3-1.digest new file mode 100644 index 000000000..ea562069c --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/subdiv_2_usda-47f822571f7427d3-1.digest @@ -0,0 +1,21 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: None +camera: Camera { origin: Vec3A(15.0, 3.0, 3.0), lower_left_corner: Vec3A(4.8863316, -0.044797063, 4.174048), horizontal: Vec3A(1.2295314, 0.0, -6.147657), vertical: Vec3A(-0.44830504, 3.4967792, -0.08966101), u: Vec3A(0.19611613, 0.0, -0.9805807), v: Vec3A(-0.1271232, 0.991561, -0.02542464), lens_radius: 0.05, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: Some("/Render/settings") +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 640, height: 360, region: PixelRect { x0: 0, y0: 0, x1: 640, y1: 360 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: None, depth_of_field: true, motion_blur: false, layer_stack: ["$DIR/subdiv_2.usda"], invisible_overrides: Some(0) } +layer: $DIR/subdiv_2.usda +warning: Warning { code: CameraMissing, kind: Skipped, count: 1, prims: [], message: "USD stage has no UsdGeomCamera — falling back to world::get_settings camera" } +lights: 0 +volumes: 0 +world: 1 geometries, PrimitiveBreakdown { triangles: 192, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 192, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=192:e64844954f934f25 camera=192:e64844954f934f25 shadow=192:e64844954f934f25 indirect=192:e64844954f934f25 +provenance geometry 0..1: /World/Cube +provenance mesh: MeshOrigin { geom_id: 0, slot: 0, baked: true, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 5789864894772039601, n_points: 98, n_indices: 384, n_uvs: None, smooth: true, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 2, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: None, cameras: [], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: None, offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/subdiv_2_usda-47f822571f7427d3-1.image b/crates/crust-core/tests/data/import_baselines/subdiv_2_usda-47f822571f7427d3-1.image new file mode 100644 index 000000000..c734c5b1d --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/subdiv_2_usda-47f822571f7427d3-1.image @@ -0,0 +1 @@ +640x360 16spp clamp-off a04a09c0d4b5e325 diff --git a/crates/crust-core/tests/data/import_baselines/subdiv_bilinear_usda-287ba8f91aef206f-1.digest b/crates/crust-core/tests/data/import_baselines/subdiv_bilinear_usda-287ba8f91aef206f-1.digest new file mode 100644 index 000000000..0b8aab26c --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/subdiv_bilinear_usda-287ba8f91aef206f-1.digest @@ -0,0 +1,21 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: None +camera: Camera { origin: Vec3A(15.0, 3.0, 3.0), lower_left_corner: Vec3A(4.8863316, -0.044797063, 4.174048), horizontal: Vec3A(1.2295314, 0.0, -6.147657), vertical: Vec3A(-0.44830504, 3.4967792, -0.08966101), u: Vec3A(0.19611613, 0.0, -0.9805807), v: Vec3A(-0.1271232, 0.991561, -0.02542464), lens_radius: 0.05, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: None +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 640, height: 360, region: PixelRect { x0: 0, y0: 0, x1: 640, y1: 360 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: None, depth_of_field: true, motion_blur: false, layer_stack: ["$DIR/subdiv_bilinear.usda"], invisible_overrides: Some(0) } +layer: $DIR/subdiv_bilinear.usda +warning: Warning { code: CameraMissing, kind: Skipped, count: 1, prims: [], message: "USD stage has no UsdGeomCamera — falling back to world::get_settings camera" } +lights: 0 +volumes: 0 +world: 1 geometries, PrimitiveBreakdown { triangles: 48, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 48, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=48:851d83468f6410a5 camera=48:851d83468f6410a5 shadow=48:851d83468f6410a5 indirect=48:851d83468f6410a5 +provenance geometry 0..1: /World/Cube +provenance mesh: MeshOrigin { geom_id: 0, slot: 0, baked: true, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 13808998999592966347, n_points: 26, n_indices: 96, n_uvs: None, smooth: true, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: Some(1), subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 1, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: None, cameras: [], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: None, offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/subdiv_bilinear_usda-287ba8f91aef206f-1.image b/crates/crust-core/tests/data/import_baselines/subdiv_bilinear_usda-287ba8f91aef206f-1.image new file mode 100644 index 000000000..c734c5b1d --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/subdiv_bilinear_usda-287ba8f91aef206f-1.image @@ -0,0 +1 @@ +640x360 16spp clamp-off a04a09c0d4b5e325 diff --git a/crates/crust-core/tests/data/import_baselines/subdiv_cage_usda-17f666e1e5c6d08f-1.digest b/crates/crust-core/tests/data/import_baselines/subdiv_cage_usda-17f666e1e5c6d08f-1.digest new file mode 100644 index 000000000..82d338db2 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/subdiv_cage_usda-17f666e1e5c6d08f-1.digest @@ -0,0 +1,21 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: None +camera: Camera { origin: Vec3A(15.0, 3.0, 3.0), lower_left_corner: Vec3A(4.8863316, -0.044797063, 4.174048), horizontal: Vec3A(1.2295314, 0.0, -6.147657), vertical: Vec3A(-0.44830504, 3.4967792, -0.08966101), u: Vec3A(0.19611613, 0.0, -0.9805807), v: Vec3A(-0.1271232, 0.991561, -0.02542464), lens_radius: 0.05, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: None +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 640, height: 360, region: PixelRect { x0: 0, y0: 0, x1: 640, y1: 360 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: None, depth_of_field: true, motion_blur: false, layer_stack: ["$DIR/subdiv_cage.usda"], invisible_overrides: Some(0) } +layer: $DIR/subdiv_cage.usda +warning: Warning { code: CameraMissing, kind: Skipped, count: 1, prims: [], message: "USD stage has no UsdGeomCamera — falling back to world::get_settings camera" } +lights: 0 +volumes: 0 +world: 1 geometries, PrimitiveBreakdown { triangles: 12, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 12, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=12:722462f98b2cf305 camera=12:722462f98b2cf305 shadow=12:722462f98b2cf305 indirect=12:722462f98b2cf305 +provenance geometry 0..1: /World/Cube +provenance mesh: MeshOrigin { geom_id: 0, slot: 0, baked: true, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 14289806633734265804, n_points: 8, n_indices: 24, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: None, cameras: [], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: None, offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/subdiv_cage_usda-17f666e1e5c6d08f-1.image b/crates/crust-core/tests/data/import_baselines/subdiv_cage_usda-17f666e1e5c6d08f-1.image new file mode 100644 index 000000000..c734c5b1d --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/subdiv_cage_usda-17f666e1e5c6d08f-1.image @@ -0,0 +1 @@ +640x360 16spp clamp-off a04a09c0d4b5e325 diff --git a/crates/crust-core/tests/data/import_baselines/subdiv_clamped_usda-01685ab19e968980-1.digest b/crates/crust-core/tests/data/import_baselines/subdiv_clamped_usda-01685ab19e968980-1.digest new file mode 100644 index 000000000..cb6ae7ad2 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/subdiv_clamped_usda-01685ab19e968980-1.digest @@ -0,0 +1,22 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: None +camera: Camera { origin: Vec3A(15.0, 3.0, 3.0), lower_left_corner: Vec3A(4.8863316, -0.044797063, 4.174048), horizontal: Vec3A(1.2295314, 0.0, -6.147657), vertical: Vec3A(-0.44830504, 3.4967792, -0.08966101), u: Vec3A(0.19611613, 0.0, -0.9805807), v: Vec3A(-0.1271232, 0.991561, -0.02542464), lens_radius: 0.05, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: Some("/Render/settings") +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 640, height: 360, region: PixelRect { x0: 0, y0: 0, x1: 640, y1: 360 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: None, depth_of_field: true, motion_blur: false, layer_stack: ["$DIR/subdiv_clamped.usda"], invisible_overrides: Some(0) } +layer: $DIR/subdiv_clamped.usda +warning: Warning { code: SubdivLevelClamped, kind: Approximated, count: 1, prims: [], message: "Subdivision level 40 from crust:subdivisionLevel clamped to 6" } +warning: Warning { code: CameraMissing, kind: Skipped, count: 1, prims: [], message: "USD stage has no UsdGeomCamera — falling back to world::get_settings camera" } +lights: 0 +volumes: 0 +world: 1 geometries, PrimitiveBreakdown { triangles: 49152, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 49152, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=49152:5f7ae9b0032fd5dd camera=49152:5f7ae9b0032fd5dd shadow=49152:5f7ae9b0032fd5dd indirect=49152:5f7ae9b0032fd5dd +provenance geometry 0..1: /World/Cube +provenance mesh: MeshOrigin { geom_id: 0, slot: 0, baked: true, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 1422250545753333406, n_points: 24578, n_indices: 98304, n_uvs: None, smooth: true, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 6, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: None, cameras: [], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: None, offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/subdiv_clamped_usda-01685ab19e968980-1.image b/crates/crust-core/tests/data/import_baselines/subdiv_clamped_usda-01685ab19e968980-1.image new file mode 100644 index 000000000..c734c5b1d --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/subdiv_clamped_usda-01685ab19e968980-1.image @@ -0,0 +1 @@ +640x360 16spp clamp-off a04a09c0d4b5e325 diff --git a/crates/crust-core/tests/data/import_baselines/subdiv_default_usda-be76976c79a95643-1.digest b/crates/crust-core/tests/data/import_baselines/subdiv_default_usda-be76976c79a95643-1.digest new file mode 100644 index 000000000..5bf7ecf79 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/subdiv_default_usda-be76976c79a95643-1.digest @@ -0,0 +1,21 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: None +camera: Camera { origin: Vec3A(15.0, 3.0, 3.0), lower_left_corner: Vec3A(4.8863316, -0.044797063, 4.174048), horizontal: Vec3A(1.2295314, 0.0, -6.147657), vertical: Vec3A(-0.44830504, 3.4967792, -0.08966101), u: Vec3A(0.19611613, 0.0, -0.9805807), v: Vec3A(-0.1271232, 0.991561, -0.02542464), lens_radius: 0.05, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: None +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 640, height: 360, region: PixelRect { x0: 0, y0: 0, x1: 640, y1: 360 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: None, depth_of_field: true, motion_blur: false, layer_stack: ["$DIR/subdiv_default.usda"], invisible_overrides: Some(0) } +layer: $DIR/subdiv_default.usda +warning: Warning { code: CameraMissing, kind: Skipped, count: 1, prims: [], message: "USD stage has no UsdGeomCamera — falling back to world::get_settings camera" } +lights: 0 +volumes: 0 +world: 1 geometries, PrimitiveBreakdown { triangles: 12, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 12, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=12:722462f98b2cf305 camera=12:722462f98b2cf305 shadow=12:722462f98b2cf305 indirect=12:722462f98b2cf305 +provenance geometry 0..1: /World/Cube +provenance mesh: MeshOrigin { geom_id: 0, slot: 0, baked: true, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 14289806633734265804, n_points: 8, n_indices: 24, n_uvs: None, smooth: true, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: None, cameras: [], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: None, offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/subdiv_default_usda-be76976c79a95643-1.image b/crates/crust-core/tests/data/import_baselines/subdiv_default_usda-be76976c79a95643-1.image new file mode 100644 index 000000000..c734c5b1d --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/subdiv_default_usda-be76976c79a95643-1.image @@ -0,0 +1 @@ +640x360 16spp clamp-off a04a09c0d4b5e325 diff --git a/crates/crust-core/tests/data/import_baselines/subdiv_key_faceted_first_usda-510113487f701e14-1.digest b/crates/crust-core/tests/data/import_baselines/subdiv_key_faceted_first_usda-510113487f701e14-1.digest new file mode 100644 index 000000000..3036db936 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/subdiv_key_faceted_first_usda-510113487f701e14-1.digest @@ -0,0 +1,26 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: None +camera: Camera { origin: Vec3A(15.0, 3.0, 3.0), lower_left_corner: Vec3A(4.8863316, -0.044797063, 4.174048), horizontal: Vec3A(1.2295314, 0.0, -6.147657), vertical: Vec3A(-0.44830504, 3.4967792, -0.08966101), u: Vec3A(0.19611613, 0.0, -0.9805807), v: Vec3A(-0.1271232, 0.991561, -0.02542464), lens_radius: 0.05, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: None +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 640, height: 360, region: PixelRect { x0: 0, y0: 0, x1: 640, y1: 360 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: None, depth_of_field: true, motion_blur: false, layer_stack: ["$DIR/subdiv_key_faceted_first.usda"], invisible_overrides: Some(0) } +layer: $DIR/subdiv_key_faceted_first.usda +warning: Warning { code: CameraMissing, kind: Skipped, count: 1, prims: [], message: "USD stage has no UsdGeomCamera — falling back to world::get_settings camera" } +lights: 0 +volumes: 0 +world: 2 geometries, PrimitiveBreakdown { triangles: 24, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 24, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=12:ad19041182dcd9a5 camera=12:ad19041182dcd9a5 shadow=12:ad19041182dcd9a5 indirect=12:ad19041182dcd9a5 +geom 1: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=12:8f6a449f0679f4a5 camera=12:8f6a449f0679f4a5 shadow=12:8f6a449f0679f4a5 indirect=12:8f6a449f0679f4a5 +provenance material /World/Looks/Grey: MaterialOrigin { slots: [0, 1], displaced: false } +provenance geometry 0..1: /World/Smooth +provenance geometry 1..2: /World/Faceted +provenance mesh: MeshOrigin { geom_id: 0, slot: 0, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 1, slot: 1, baked: true, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 14289806633734265804, n_points: 8, n_indices: 24, n_uvs: None, smooth: true, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 1: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 14289806633734265804, n_points: 8, n_indices: 24, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: None, cameras: [], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: None, offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/subdiv_key_faceted_first_usda-510113487f701e14-1.image b/crates/crust-core/tests/data/import_baselines/subdiv_key_faceted_first_usda-510113487f701e14-1.image new file mode 100644 index 000000000..c734c5b1d --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/subdiv_key_faceted_first_usda-510113487f701e14-1.image @@ -0,0 +1 @@ +640x360 16spp clamp-off a04a09c0d4b5e325 diff --git a/crates/crust-core/tests/data/import_baselines/subdiv_key_smooth_first_usda-9375effdf17e1f42-1.digest b/crates/crust-core/tests/data/import_baselines/subdiv_key_smooth_first_usda-9375effdf17e1f42-1.digest new file mode 100644 index 000000000..4831cd1d4 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/subdiv_key_smooth_first_usda-9375effdf17e1f42-1.digest @@ -0,0 +1,26 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: None +camera: Camera { origin: Vec3A(15.0, 3.0, 3.0), lower_left_corner: Vec3A(4.8863316, -0.044797063, 4.174048), horizontal: Vec3A(1.2295314, 0.0, -6.147657), vertical: Vec3A(-0.44830504, 3.4967792, -0.08966101), u: Vec3A(0.19611613, 0.0, -0.9805807), v: Vec3A(-0.1271232, 0.991561, -0.02542464), lens_radius: 0.05, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: None +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 640, height: 360, region: PixelRect { x0: 0, y0: 0, x1: 640, y1: 360 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: None, depth_of_field: true, motion_blur: false, layer_stack: ["$DIR/subdiv_key_smooth_first.usda"], invisible_overrides: Some(0) } +layer: $DIR/subdiv_key_smooth_first.usda +warning: Warning { code: CameraMissing, kind: Skipped, count: 1, prims: [], message: "USD stage has no UsdGeomCamera — falling back to world::get_settings camera" } +lights: 0 +volumes: 0 +world: 2 geometries, PrimitiveBreakdown { triangles: 24, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 24, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=12:8f6a449f0679f4a5 camera=12:8f6a449f0679f4a5 shadow=12:8f6a449f0679f4a5 indirect=12:8f6a449f0679f4a5 +geom 1: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=12:ad19041182dcd9a5 camera=12:ad19041182dcd9a5 shadow=12:ad19041182dcd9a5 indirect=12:ad19041182dcd9a5 +provenance material /World/Looks/Grey: MaterialOrigin { slots: [0, 1], displaced: false } +provenance geometry 0..1: /World/Faceted +provenance geometry 1..2: /World/Smooth +provenance mesh: MeshOrigin { geom_id: 0, slot: 0, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 1, slot: 1, baked: true, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 14289806633734265804, n_points: 8, n_indices: 24, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 1: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 14289806633734265804, n_points: 8, n_indices: 24, n_uvs: None, smooth: true, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: None, cameras: [], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: None, offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/subdiv_key_smooth_first_usda-9375effdf17e1f42-1.image b/crates/crust-core/tests/data/import_baselines/subdiv_key_smooth_first_usda-9375effdf17e1f42-1.image new file mode 100644 index 000000000..c734c5b1d --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/subdiv_key_smooth_first_usda-9375effdf17e1f42-1.image @@ -0,0 +1 @@ +640x360 16spp clamp-off a04a09c0d4b5e325 diff --git a/crates/crust-core/tests/data/import_baselines/subdiv_legacy_usda-e769c33757ced97c-1.digest b/crates/crust-core/tests/data/import_baselines/subdiv_legacy_usda-e769c33757ced97c-1.digest new file mode 100644 index 000000000..455ee10f3 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/subdiv_legacy_usda-e769c33757ced97c-1.digest @@ -0,0 +1,22 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: None +camera: Camera { origin: Vec3A(15.0, 3.0, 3.0), lower_left_corner: Vec3A(4.8863316, -0.044797063, 4.174048), horizontal: Vec3A(1.2295314, 0.0, -6.147657), vertical: Vec3A(-0.44830504, 3.4967792, -0.08966101), u: Vec3A(0.19611613, 0.0, -0.9805807), v: Vec3A(-0.1271232, 0.991561, -0.02542464), lens_radius: 0.05, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: None +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 640, height: 360, region: PixelRect { x0: 0, y0: 0, x1: 640, y1: 360 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: None, depth_of_field: true, motion_blur: false, layer_stack: ["$DIR/subdiv_legacy.usda"], invisible_overrides: Some(0) } +layer: $DIR/subdiv_legacy.usda +warning: Warning { code: SubdivLegacyLevel, kind: Skipped, count: 1, prims: ["/World/Cube"], message: "Mesh at /World/Cube: the per-prim crust:subdivisionLevel is no longer read — a mesh is subdivided when it authors subdivisionScheme, to the level set by crust:subdivisionLevel on the RenderSettings prim or --subdiv-level (further occurrences are counted in the import's warnings)" } +warning: Warning { code: CameraMissing, kind: Skipped, count: 1, prims: [], message: "USD stage has no UsdGeomCamera — falling back to world::get_settings camera" } +lights: 0 +volumes: 0 +world: 1 geometries, PrimitiveBreakdown { triangles: 12, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 12, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=12:722462f98b2cf305 camera=12:722462f98b2cf305 shadow=12:722462f98b2cf305 indirect=12:722462f98b2cf305 +provenance geometry 0..1: /World/Cube +provenance mesh: MeshOrigin { geom_id: 0, slot: 0, baked: true, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 14289806633734265804, n_points: 8, n_indices: 24, n_uvs: None, smooth: true, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: None, cameras: [], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: None, offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/subdiv_legacy_usda-e769c33757ced97c-1.image b/crates/crust-core/tests/data/import_baselines/subdiv_legacy_usda-e769c33757ced97c-1.image new file mode 100644 index 000000000..c734c5b1d --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/subdiv_legacy_usda-e769c33757ced97c-1.image @@ -0,0 +1 @@ +640x360 16spp clamp-off a04a09c0d4b5e325 diff --git a/crates/crust-core/tests/data/import_baselines/subdiv_level0_usda-436132ac852dd08e-1.digest b/crates/crust-core/tests/data/import_baselines/subdiv_level0_usda-436132ac852dd08e-1.digest new file mode 100644 index 000000000..56d76e53a --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/subdiv_level0_usda-436132ac852dd08e-1.digest @@ -0,0 +1,21 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: None +camera: Camera { origin: Vec3A(15.0, 3.0, 3.0), lower_left_corner: Vec3A(4.8863316, -0.044797063, 4.174048), horizontal: Vec3A(1.2295314, 0.0, -6.147657), vertical: Vec3A(-0.44830504, 3.4967792, -0.08966101), u: Vec3A(0.19611613, 0.0, -0.9805807), v: Vec3A(-0.1271232, 0.991561, -0.02542464), lens_radius: 0.05, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: Some("/Render/settings") +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 640, height: 360, region: PixelRect { x0: 0, y0: 0, x1: 640, y1: 360 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: None, depth_of_field: true, motion_blur: false, layer_stack: ["$DIR/subdiv_level0.usda"], invisible_overrides: Some(0) } +layer: $DIR/subdiv_level0.usda +warning: Warning { code: CameraMissing, kind: Skipped, count: 1, prims: [], message: "USD stage has no UsdGeomCamera — falling back to world::get_settings camera" } +lights: 0 +volumes: 0 +world: 1 geometries, PrimitiveBreakdown { triangles: 12, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 12, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=12:722462f98b2cf305 camera=12:722462f98b2cf305 shadow=12:722462f98b2cf305 indirect=12:722462f98b2cf305 +provenance geometry 0..1: /World/Cube +provenance mesh: MeshOrigin { geom_id: 0, slot: 0, baked: true, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 14289806633734265804, n_points: 8, n_indices: 24, n_uvs: None, smooth: true, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: None, cameras: [], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: None, offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/subdiv_level0_usda-436132ac852dd08e-1.image b/crates/crust-core/tests/data/import_baselines/subdiv_level0_usda-436132ac852dd08e-1.image new file mode 100644 index 000000000..c734c5b1d --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/subdiv_level0_usda-436132ac852dd08e-1.image @@ -0,0 +1 @@ +640x360 16spp clamp-off a04a09c0d4b5e325 diff --git a/crates/crust-core/tests/data/import_baselines/subdiv_loop_quads_usda-1e8f941ca190d506-1.digest b/crates/crust-core/tests/data/import_baselines/subdiv_loop_quads_usda-1e8f941ca190d506-1.digest new file mode 100644 index 000000000..22b55fc98 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/subdiv_loop_quads_usda-1e8f941ca190d506-1.digest @@ -0,0 +1,22 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: None +camera: Camera { origin: Vec3A(15.0, 3.0, 3.0), lower_left_corner: Vec3A(4.8863316, -0.044797063, 4.174048), horizontal: Vec3A(1.2295314, 0.0, -6.147657), vertical: Vec3A(-0.44830504, 3.4967792, -0.08966101), u: Vec3A(0.19611613, 0.0, -0.9805807), v: Vec3A(-0.1271232, 0.991561, -0.02542464), lens_radius: 0.05, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: None +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 640, height: 360, region: PixelRect { x0: 0, y0: 0, x1: 640, y1: 360 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: None, depth_of_field: true, motion_blur: false, layer_stack: ["$DIR/subdiv_loop_quads.usda"], invisible_overrides: Some(0) } +layer: $DIR/subdiv_loop_quads.usda +warning: Warning { code: SubdivLoopNeedsTriangles, kind: Approximated, count: 1, prims: ["/World/Cube"], message: "Mesh at /World/Cube: subdivisionScheme = loop needs an all-triangle mesh — rendering the base cage" } +warning: Warning { code: CameraMissing, kind: Skipped, count: 1, prims: [], message: "USD stage has no UsdGeomCamera — falling back to world::get_settings camera" } +lights: 0 +volumes: 0 +world: 1 geometries, PrimitiveBreakdown { triangles: 12, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 12, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=12:722462f98b2cf305 camera=12:722462f98b2cf305 shadow=12:722462f98b2cf305 indirect=12:722462f98b2cf305 +provenance geometry 0..1: /World/Cube +provenance mesh: MeshOrigin { geom_id: 0, slot: 0, baked: true, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 14289806633734265804, n_points: 8, n_indices: 24, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: Some(1), subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 1, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: None, cameras: [], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: None, offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/subdiv_loop_quads_usda-1e8f941ca190d506-1.image b/crates/crust-core/tests/data/import_baselines/subdiv_loop_quads_usda-1e8f941ca190d506-1.image new file mode 100644 index 000000000..c734c5b1d --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/subdiv_loop_quads_usda-1e8f941ca190d506-1.image @@ -0,0 +1 @@ +640x360 16spp clamp-off a04a09c0d4b5e325 diff --git a/crates/crust-core/tests/data/import_baselines/subdiv_none_faceted_usda-7ad44c4961677420-1.digest b/crates/crust-core/tests/data/import_baselines/subdiv_none_faceted_usda-7ad44c4961677420-1.digest new file mode 100644 index 000000000..efe158748 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/subdiv_none_faceted_usda-7ad44c4961677420-1.digest @@ -0,0 +1,21 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: None +camera: Camera { origin: Vec3A(15.0, 3.0, 3.0), lower_left_corner: Vec3A(4.8863316, -0.044797063, 4.174048), horizontal: Vec3A(1.2295314, 0.0, -6.147657), vertical: Vec3A(-0.44830504, 3.4967792, -0.08966101), u: Vec3A(0.19611613, 0.0, -0.9805807), v: Vec3A(-0.1271232, 0.991561, -0.02542464), lens_radius: 0.05, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: None +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 640, height: 360, region: PixelRect { x0: 0, y0: 0, x1: 640, y1: 360 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: None, depth_of_field: true, motion_blur: false, layer_stack: ["$DIR/subdiv_none_faceted.usda"], invisible_overrides: Some(0) } +layer: $DIR/subdiv_none_faceted.usda +warning: Warning { code: CameraMissing, kind: Skipped, count: 1, prims: [], message: "USD stage has no UsdGeomCamera — falling back to world::get_settings camera" } +lights: 0 +volumes: 0 +world: 1 geometries, PrimitiveBreakdown { triangles: 12, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 12, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=12:722462f98b2cf305 camera=12:722462f98b2cf305 shadow=12:722462f98b2cf305 indirect=12:722462f98b2cf305 +provenance geometry 0..1: /World/Cube +provenance mesh: MeshOrigin { geom_id: 0, slot: 0, baked: true, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 14289806633734265804, n_points: 8, n_indices: 24, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: None, cameras: [], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: None, offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/subdiv_none_faceted_usda-7ad44c4961677420-1.image b/crates/crust-core/tests/data/import_baselines/subdiv_none_faceted_usda-7ad44c4961677420-1.image new file mode 100644 index 000000000..c734c5b1d --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/subdiv_none_faceted_usda-7ad44c4961677420-1.image @@ -0,0 +1 @@ +640x360 16spp clamp-off a04a09c0d4b5e325 diff --git a/crates/crust-core/tests/data/import_baselines/subdiv_none_usda-38f763827a18343d-1.digest b/crates/crust-core/tests/data/import_baselines/subdiv_none_usda-38f763827a18343d-1.digest new file mode 100644 index 000000000..fbdeebce5 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/subdiv_none_usda-38f763827a18343d-1.digest @@ -0,0 +1,21 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: None +camera: Camera { origin: Vec3A(15.0, 3.0, 3.0), lower_left_corner: Vec3A(4.8863316, -0.044797063, 4.174048), horizontal: Vec3A(1.2295314, 0.0, -6.147657), vertical: Vec3A(-0.44830504, 3.4967792, -0.08966101), u: Vec3A(0.19611613, 0.0, -0.9805807), v: Vec3A(-0.1271232, 0.991561, -0.02542464), lens_radius: 0.05, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: Some("/Render/settings") +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 640, height: 360, region: PixelRect { x0: 0, y0: 0, x1: 640, y1: 360 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: None, depth_of_field: true, motion_blur: false, layer_stack: ["$DIR/subdiv_none.usda"], invisible_overrides: Some(0) } +layer: $DIR/subdiv_none.usda +warning: Warning { code: CameraMissing, kind: Skipped, count: 1, prims: [], message: "USD stage has no UsdGeomCamera — falling back to world::get_settings camera" } +lights: 0 +volumes: 0 +world: 1 geometries, PrimitiveBreakdown { triangles: 12, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 12, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=12:722462f98b2cf305 camera=12:722462f98b2cf305 shadow=12:722462f98b2cf305 indirect=12:722462f98b2cf305 +provenance geometry 0..1: /World/Cube +provenance mesh: MeshOrigin { geom_id: 0, slot: 0, baked: true, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 14289806633734265804, n_points: 8, n_indices: 24, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 2, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: None, cameras: [], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: None, offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/subdiv_none_usda-38f763827a18343d-1.image b/crates/crust-core/tests/data/import_baselines/subdiv_none_usda-38f763827a18343d-1.image new file mode 100644 index 000000000..c734c5b1d --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/subdiv_none_usda-38f763827a18343d-1.image @@ -0,0 +1 @@ +640x360 16spp clamp-off a04a09c0d4b5e325 diff --git a/crates/crust-core/tests/data/import_baselines/subdiv_none_usda-aea9b45539bdf216-1.digest b/crates/crust-core/tests/data/import_baselines/subdiv_none_usda-aea9b45539bdf216-1.digest new file mode 100644 index 000000000..4a51ff455 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/subdiv_none_usda-aea9b45539bdf216-1.digest @@ -0,0 +1,21 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: None +camera: Camera { origin: Vec3A(15.0, 3.0, 3.0), lower_left_corner: Vec3A(4.8863316, -0.044797063, 4.174048), horizontal: Vec3A(1.2295314, 0.0, -6.147657), vertical: Vec3A(-0.44830504, 3.4967792, -0.08966101), u: Vec3A(0.19611613, 0.0, -0.9805807), v: Vec3A(-0.1271232, 0.991561, -0.02542464), lens_radius: 0.05, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: Some("/Render/settings") +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 640, height: 360, region: PixelRect { x0: 0, y0: 0, x1: 640, y1: 360 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: None, depth_of_field: true, motion_blur: false, layer_stack: ["$DIR/subdiv_none.usda"], invisible_overrides: Some(0) } +layer: $DIR/subdiv_none.usda +warning: Warning { code: CameraMissing, kind: Skipped, count: 1, prims: [], message: "USD stage has no UsdGeomCamera — falling back to world::get_settings camera" } +lights: 0 +volumes: 0 +world: 1 geometries, PrimitiveBreakdown { triangles: 12, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 12, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=12:a8f4b3e2f9e3d205 camera=12:a8f4b3e2f9e3d205 shadow=12:a8f4b3e2f9e3d205 indirect=12:a8f4b3e2f9e3d205 +provenance geometry 0..1: /W/Cube +provenance mesh: MeshOrigin { geom_id: 0, slot: 0, baked: true, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 16234188082663099353, n_points: 8, n_indices: 24, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 3, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: None, cameras: [], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: None, offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/subdiv_none_usda-aea9b45539bdf216-1.image b/crates/crust-core/tests/data/import_baselines/subdiv_none_usda-aea9b45539bdf216-1.image new file mode 100644 index 000000000..c734c5b1d --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/subdiv_none_usda-aea9b45539bdf216-1.image @@ -0,0 +1 @@ +640x360 16spp clamp-off a04a09c0d4b5e325 diff --git a/crates/crust-core/tests/data/import_baselines/subdiv_override_usda-347cb15990d5b2db-1.digest b/crates/crust-core/tests/data/import_baselines/subdiv_override_usda-347cb15990d5b2db-1.digest new file mode 100644 index 000000000..0ae812956 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/subdiv_override_usda-347cb15990d5b2db-1.digest @@ -0,0 +1,21 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: None +camera: Camera { origin: Vec3A(15.0, 3.0, 3.0), lower_left_corner: Vec3A(4.8863316, -0.044797063, 4.174048), horizontal: Vec3A(1.2295314, 0.0, -6.147657), vertical: Vec3A(-0.44830504, 3.4967792, -0.08966101), u: Vec3A(0.19611613, 0.0, -0.9805807), v: Vec3A(-0.1271232, 0.991561, -0.02542464), lens_radius: 0.05, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: Some("/Render/settings") +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 640, height: 360, region: PixelRect { x0: 0, y0: 0, x1: 640, y1: 360 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: None, depth_of_field: true, motion_blur: false, layer_stack: ["$DIR/subdiv_override.usda"], invisible_overrides: Some(0) } +layer: $DIR/subdiv_override.usda +warning: Warning { code: CameraMissing, kind: Skipped, count: 1, prims: [], message: "USD stage has no UsdGeomCamera — falling back to world::get_settings camera" } +lights: 0 +volumes: 0 +world: 1 geometries, PrimitiveBreakdown { triangles: 768, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 768, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=768:323308a3061f196d camera=768:323308a3061f196d shadow=768:323308a3061f196d indirect=768:323308a3061f196d +provenance geometry 0..1: /World/Cube +provenance mesh: MeshOrigin { geom_id: 0, slot: 0, baked: true, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 6811870252920726220, n_points: 386, n_indices: 1536, n_uvs: None, smooth: true, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 3, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: None, cameras: [], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: None, offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/subdiv_override_usda-347cb15990d5b2db-1.image b/crates/crust-core/tests/data/import_baselines/subdiv_override_usda-347cb15990d5b2db-1.image new file mode 100644 index 000000000..c734c5b1d --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/subdiv_override_usda-347cb15990d5b2db-1.image @@ -0,0 +1 @@ +640x360 16spp clamp-off a04a09c0d4b5e325 diff --git a/crates/crust-core/tests/data/import_baselines/subdiv_override_usda-4180b38ea57c9096-1.digest b/crates/crust-core/tests/data/import_baselines/subdiv_override_usda-4180b38ea57c9096-1.digest new file mode 100644 index 000000000..ca1819438 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/subdiv_override_usda-4180b38ea57c9096-1.digest @@ -0,0 +1,21 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: None +camera: Camera { origin: Vec3A(15.0, 3.0, 3.0), lower_left_corner: Vec3A(4.8863316, -0.044797063, 4.174048), horizontal: Vec3A(1.2295314, 0.0, -6.147657), vertical: Vec3A(-0.44830504, 3.4967792, -0.08966101), u: Vec3A(0.19611613, 0.0, -0.9805807), v: Vec3A(-0.1271232, 0.991561, -0.02542464), lens_radius: 0.05, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: Some("/Render/settings") +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 640, height: 360, region: PixelRect { x0: 0, y0: 0, x1: 640, y1: 360 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: None, depth_of_field: true, motion_blur: false, layer_stack: ["$DIR/subdiv_override.usda"], invisible_overrides: Some(0) } +layer: $DIR/subdiv_override.usda +warning: Warning { code: CameraMissing, kind: Skipped, count: 1, prims: [], message: "USD stage has no UsdGeomCamera — falling back to world::get_settings camera" } +lights: 0 +volumes: 0 +world: 1 geometries, PrimitiveBreakdown { triangles: 12, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 12, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=12:722462f98b2cf305 camera=12:722462f98b2cf305 shadow=12:722462f98b2cf305 indirect=12:722462f98b2cf305 +provenance geometry 0..1: /World/Cube +provenance mesh: MeshOrigin { geom_id: 0, slot: 0, baked: true, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 14289806633734265804, n_points: 8, n_indices: 24, n_uvs: None, smooth: true, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: Some(0), subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: None, cameras: [], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: None, offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/subdiv_override_usda-4180b38ea57c9096-1.image b/crates/crust-core/tests/data/import_baselines/subdiv_override_usda-4180b38ea57c9096-1.image new file mode 100644 index 000000000..c734c5b1d --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/subdiv_override_usda-4180b38ea57c9096-1.image @@ -0,0 +1 @@ +640x360 16spp clamp-off a04a09c0d4b5e325 diff --git a/crates/crust-core/tests/data/import_baselines/subdiv_override_usda-633f8e7fec39c727-1.digest b/crates/crust-core/tests/data/import_baselines/subdiv_override_usda-633f8e7fec39c727-1.digest new file mode 100644 index 000000000..3f6e2438d --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/subdiv_override_usda-633f8e7fec39c727-1.digest @@ -0,0 +1,21 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: None +camera: Camera { origin: Vec3A(15.0, 3.0, 3.0), lower_left_corner: Vec3A(4.8863316, -0.044797063, 4.174048), horizontal: Vec3A(1.2295314, 0.0, -6.147657), vertical: Vec3A(-0.44830504, 3.4967792, -0.08966101), u: Vec3A(0.19611613, 0.0, -0.9805807), v: Vec3A(-0.1271232, 0.991561, -0.02542464), lens_radius: 0.05, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: Some("/Render/settings") +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 640, height: 360, region: PixelRect { x0: 0, y0: 0, x1: 640, y1: 360 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: None, depth_of_field: true, motion_blur: false, layer_stack: ["$DIR/subdiv_override.usda"], invisible_overrides: Some(0) } +layer: $DIR/subdiv_override.usda +warning: Warning { code: CameraMissing, kind: Skipped, count: 1, prims: [], message: "USD stage has no UsdGeomCamera — falling back to world::get_settings camera" } +lights: 0 +volumes: 0 +world: 1 geometries, PrimitiveBreakdown { triangles: 48, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 48, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=48:5716bd3df4bea055 camera=48:5716bd3df4bea055 shadow=48:5716bd3df4bea055 indirect=48:5716bd3df4bea055 +provenance geometry 0..1: /World/Cube +provenance mesh: MeshOrigin { geom_id: 0, slot: 0, baked: true, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 7668848715455400612, n_points: 26, n_indices: 96, n_uvs: None, smooth: true, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: Some(1), subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 1, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: None, cameras: [], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: None, offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/subdiv_override_usda-633f8e7fec39c727-1.image b/crates/crust-core/tests/data/import_baselines/subdiv_override_usda-633f8e7fec39c727-1.image new file mode 100644 index 000000000..c734c5b1d --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/subdiv_override_usda-633f8e7fec39c727-1.image @@ -0,0 +1 @@ +640x360 16spp clamp-off a04a09c0d4b5e325 diff --git a/crates/crust-core/tests/data/import_baselines/subdiv_rest_15_usda-dcdc5eeb73b7d3e8-1.digest b/crates/crust-core/tests/data/import_baselines/subdiv_rest_15_usda-dcdc5eeb73b7d3e8-1.digest new file mode 100644 index 000000000..b85e2d1a2 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/subdiv_rest_15_usda-dcdc5eeb73b7d3e8-1.digest @@ -0,0 +1,22 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/World/cam") +camera: Camera { origin: Vec3A(0.0, 0.0, 10.0), lower_left_corner: Vec3A(-2.0955, -1.5716249, 0.0), horizontal: Vec3A(4.191, 0.0, 0.0), vertical: Vec3A(0.0, 3.1432498, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: Some("/Render/settings") +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 48, height: 36, region: PixelRect { x0: 0, y0: 0, x1: 48, y1: 36 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [AovProduct { prim_path: "/Render/p", name: "p.exr", vars: [AovVar { prim_path: "/Render/P", name: "P", channel_prefix: None, source: P, components: 3, precision: Float, accumulation: Closest, clear: 0.0, expression: None, raw: false, variance: false }, AovVar { prim_path: "/Render/Pref", name: "Pref", channel_prefix: None, source: Primvar(PrimvarSource { index: 0, components: 3, role: Vector }), components: 3, precision: Float, accumulation: Closest, clear: 0.0, expression: None, raw: false, variance: false }], attributes: [] }], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 50.0, aperture: [20.955, 15.2908], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 10.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/subdiv_rest_15.usda"], invisible_overrides: Some(0) } +layer: $DIR/subdiv_rest_15.usda +lights: 1 +light 0: dome name Some("/World/dome") lpe None pmf 1.0 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 1 geometries, PrimitiveBreakdown { triangles: 768, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 768, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov Some((Some(0), false)) swapped false curves false scale 1.0 motion [] pieces all=768:1448a6168e2b11fd camera=768:1448a6168e2b11fd shadow=768:1448a6168e2b11fd indirect=768:1448a6168e2b11fd +provenance light /World/dome: LightOrigin { index: 0, geoms: 1..1 } +provenance geometry 0..1: /World/cube +provenance mesh: MeshOrigin { geom_id: 0, slot: 0, baked: true, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 890298128050539104, n_points: 386, n_indices: 1536, n_uvs: None, smooth: true, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 3, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/World/cam"), cameras: ["/World/cam"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [("rest", 3)], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/World/cam"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/subdiv_rest_15_usda-dcdc5eeb73b7d3e8-1.image b/crates/crust-core/tests/data/import_baselines/subdiv_rest_15_usda-dcdc5eeb73b7d3e8-1.image new file mode 100644 index 000000000..90eff2c39 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/subdiv_rest_15_usda-dcdc5eeb73b7d3e8-1.image @@ -0,0 +1 @@ +48x36 16spp clamp-off c48e0766e3dd2c0f diff --git a/crates/crust-core/tests/data/import_baselines/subdiv_rest_8_usda-c9f6f9ef6bd5e50d-1.digest b/crates/crust-core/tests/data/import_baselines/subdiv_rest_8_usda-c9f6f9ef6bd5e50d-1.digest new file mode 100644 index 000000000..d5b313e08 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/subdiv_rest_8_usda-c9f6f9ef6bd5e50d-1.digest @@ -0,0 +1,22 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/World/cam") +camera: Camera { origin: Vec3A(0.0, 0.0, 10.0), lower_left_corner: Vec3A(-2.0955, -1.5716249, 0.0), horizontal: Vec3A(4.191, 0.0, 0.0), vertical: Vec3A(0.0, 3.1432498, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: Some("/Render/settings") +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 48, height: 36, region: PixelRect { x0: 0, y0: 0, x1: 48, y1: 36 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [AovProduct { prim_path: "/Render/p", name: "p.exr", vars: [AovVar { prim_path: "/Render/P", name: "P", channel_prefix: None, source: P, components: 3, precision: Float, accumulation: Closest, clear: 0.0, expression: None, raw: false, variance: false }, AovVar { prim_path: "/Render/Pref", name: "Pref", channel_prefix: None, source: Primvar(PrimvarSource { index: 0, components: 3, role: Vector }), components: 3, precision: Float, accumulation: Closest, clear: 0.0, expression: None, raw: false, variance: false }], attributes: [] }], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 50.0, aperture: [20.955, 15.2908], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 10.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/subdiv_rest_8.usda"], invisible_overrides: Some(0) } +layer: $DIR/subdiv_rest_8.usda +lights: 1 +light 0: dome name Some("/World/dome") lpe None pmf 1.0 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 1 geometries, PrimitiveBreakdown { triangles: 762, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 762, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov Some((Some(0), false)) swapped false curves false scale 1.0 motion [] pieces all=762:ce10b44f81e44647 camera=762:ce10b44f81e44647 shadow=762:ce10b44f81e44647 indirect=762:ce10b44f81e44647 +provenance light /World/dome: LightOrigin { index: 0, geoms: 1..1 } +provenance geometry 0..1: /World/cube +provenance mesh: MeshOrigin { geom_id: 0, slot: 0, baked: true, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 12027994692895467752, n_points: 383, n_indices: 2286, n_uvs: None, smooth: true, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: Some(ScreenKey([0, 0, 1092616192, 1122308082, 0, 0, 1092616192, 3212836864, 0, 3193345093, 1065353216, 0, 3193345093, 0, 3212836864, 3189829428, 0, 1065353216, 3189829428, 0, 0, 3212836864, 1073741824, 3])), domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/World/cam"), cameras: ["/World/cam"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [("rest", 3)], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/World/cam"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/subdiv_rest_8_usda-c9f6f9ef6bd5e50d-1.image b/crates/crust-core/tests/data/import_baselines/subdiv_rest_8_usda-c9f6f9ef6bd5e50d-1.image new file mode 100644 index 000000000..d5305b79c --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/subdiv_rest_8_usda-c9f6f9ef6bd5e50d-1.image @@ -0,0 +1 @@ +48x36 16spp clamp-off b28189e9be2c15a1 diff --git a/crates/crust-core/tests/data/import_baselines/subdiv_rule_all_usda-7c4745bac0fe1ad7-1.digest b/crates/crust-core/tests/data/import_baselines/subdiv_rule_all_usda-7c4745bac0fe1ad7-1.digest new file mode 100644 index 000000000..24d6a4f66 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/subdiv_rule_all_usda-7c4745bac0fe1ad7-1.digest @@ -0,0 +1,22 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: None +camera: Camera { origin: Vec3A(15.0, 3.0, 3.0), lower_left_corner: Vec3A(4.8863316, -0.044797063, 4.174048), horizontal: Vec3A(1.2295314, 0.0, -6.147657), vertical: Vec3A(-0.44830504, 3.4967792, -0.08966101), u: Vec3A(0.19611613, 0.0, -0.9805807), v: Vec3A(-0.1271232, 0.991561, -0.02542464), lens_radius: 0.05, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: None +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 640, height: 360, region: PixelRect { x0: 0, y0: 0, x1: 640, y1: 360 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: None, depth_of_field: true, motion_blur: false, layer_stack: ["$DIR/subdiv_rule_all.usda"], invisible_overrides: Some(0) } +layer: $DIR/subdiv_rule_all.usda +warning: Warning { code: CameraMissing, kind: Skipped, count: 1, prims: [], message: "USD stage has no UsdGeomCamera — falling back to world::get_settings camera" } +lights: 0 +volumes: 0 +world: 1 geometries, PrimitiveBreakdown { triangles: 32, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 32, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +geom 0: material #0 Signature { kind: "MaterialX", cutout: false, straight: false, boundary: false, emits: false, uv: true, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv Some(0) shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=32:98445e4ef6263805 camera=32:98445e4ef6263805 shadow=32:98445e4ef6263805 indirect=32:98445e4ef6263805 +provenance material /World/Looks/Mtl: MaterialOrigin { slots: [0], displaced: false } +provenance geometry 0..1: /World/Quad +provenance mesh: MeshOrigin { geom_id: 0, slot: 0, baked: true, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 10574267906873308772, n_points: 25, n_indices: 64, n_uvs: Some(25), smooth: true, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: Some(1), subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 1, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: None, cameras: [], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: None, offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/subdiv_rule_all_usda-7c4745bac0fe1ad7-1.image b/crates/crust-core/tests/data/import_baselines/subdiv_rule_all_usda-7c4745bac0fe1ad7-1.image new file mode 100644 index 000000000..c734c5b1d --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/subdiv_rule_all_usda-7c4745bac0fe1ad7-1.image @@ -0,0 +1 @@ +640x360 16spp clamp-off a04a09c0d4b5e325 diff --git a/crates/crust-core/tests/data/import_baselines/subdiv_rule_boundaries_usda-3c0d79de547dbc49-1.digest b/crates/crust-core/tests/data/import_baselines/subdiv_rule_boundaries_usda-3c0d79de547dbc49-1.digest new file mode 100644 index 000000000..57bbe3cc9 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/subdiv_rule_boundaries_usda-3c0d79de547dbc49-1.digest @@ -0,0 +1,22 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: None +camera: Camera { origin: Vec3A(15.0, 3.0, 3.0), lower_left_corner: Vec3A(4.8863316, -0.044797063, 4.174048), horizontal: Vec3A(1.2295314, 0.0, -6.147657), vertical: Vec3A(-0.44830504, 3.4967792, -0.08966101), u: Vec3A(0.19611613, 0.0, -0.9805807), v: Vec3A(-0.1271232, 0.991561, -0.02542464), lens_radius: 0.05, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: None +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 640, height: 360, region: PixelRect { x0: 0, y0: 0, x1: 640, y1: 360 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: None, depth_of_field: true, motion_blur: false, layer_stack: ["$DIR/subdiv_rule_boundaries.usda"], invisible_overrides: Some(0) } +layer: $DIR/subdiv_rule_boundaries.usda +warning: Warning { code: CameraMissing, kind: Skipped, count: 1, prims: [], message: "USD stage has no UsdGeomCamera — falling back to world::get_settings camera" } +lights: 0 +volumes: 0 +world: 1 geometries, PrimitiveBreakdown { triangles: 32, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 32, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +geom 0: material #0 Signature { kind: "MaterialX", cutout: false, straight: false, boundary: false, emits: false, uv: true, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv Some(0) shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=32:98445e4ef6263805 camera=32:98445e4ef6263805 shadow=32:98445e4ef6263805 indirect=32:98445e4ef6263805 +provenance material /World/Looks/Mtl: MaterialOrigin { slots: [0], displaced: false } +provenance geometry 0..1: /World/Quad +provenance mesh: MeshOrigin { geom_id: 0, slot: 0, baked: true, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 10124617692305081626, n_points: 25, n_indices: 64, n_uvs: Some(25), smooth: true, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: Some(1), subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 1, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: None, cameras: [], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: None, offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/subdiv_rule_boundaries_usda-3c0d79de547dbc49-1.image b/crates/crust-core/tests/data/import_baselines/subdiv_rule_boundaries_usda-3c0d79de547dbc49-1.image new file mode 100644 index 000000000..c734c5b1d --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/subdiv_rule_boundaries_usda-3c0d79de547dbc49-1.image @@ -0,0 +1 @@ +640x360 16spp clamp-off a04a09c0d4b5e325 diff --git a/crates/crust-core/tests/data/import_baselines/subdiv_rule_cornersOnly_usda-3a7940237cbe0a3d-1.digest b/crates/crust-core/tests/data/import_baselines/subdiv_rule_cornersOnly_usda-3a7940237cbe0a3d-1.digest new file mode 100644 index 000000000..5c3973d01 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/subdiv_rule_cornersOnly_usda-3a7940237cbe0a3d-1.digest @@ -0,0 +1,22 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: None +camera: Camera { origin: Vec3A(15.0, 3.0, 3.0), lower_left_corner: Vec3A(4.8863316, -0.044797063, 4.174048), horizontal: Vec3A(1.2295314, 0.0, -6.147657), vertical: Vec3A(-0.44830504, 3.4967792, -0.08966101), u: Vec3A(0.19611613, 0.0, -0.9805807), v: Vec3A(-0.1271232, 0.991561, -0.02542464), lens_radius: 0.05, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: None +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 640, height: 360, region: PixelRect { x0: 0, y0: 0, x1: 640, y1: 360 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: None, depth_of_field: true, motion_blur: false, layer_stack: ["$DIR/subdiv_rule_cornersOnly.usda"], invisible_overrides: Some(0) } +layer: $DIR/subdiv_rule_cornersOnly.usda +warning: Warning { code: CameraMissing, kind: Skipped, count: 1, prims: [], message: "USD stage has no UsdGeomCamera — falling back to world::get_settings camera" } +lights: 0 +volumes: 0 +world: 1 geometries, PrimitiveBreakdown { triangles: 32, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 32, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +geom 0: material #0 Signature { kind: "MaterialX", cutout: false, straight: false, boundary: false, emits: false, uv: true, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv Some(0) shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=32:98445e4ef6263805 camera=32:98445e4ef6263805 shadow=32:98445e4ef6263805 indirect=32:98445e4ef6263805 +provenance material /World/Looks/Mtl: MaterialOrigin { slots: [0], displaced: false } +provenance geometry 0..1: /World/Quad +provenance mesh: MeshOrigin { geom_id: 0, slot: 0, baked: true, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 10124617692305081626, n_points: 25, n_indices: 64, n_uvs: Some(25), smooth: true, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: Some(1), subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 1, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: None, cameras: [], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: None, offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/subdiv_rule_cornersOnly_usda-3a7940237cbe0a3d-1.image b/crates/crust-core/tests/data/import_baselines/subdiv_rule_cornersOnly_usda-3a7940237cbe0a3d-1.image new file mode 100644 index 000000000..c734c5b1d --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/subdiv_rule_cornersOnly_usda-3a7940237cbe0a3d-1.image @@ -0,0 +1 @@ +640x360 16spp clamp-off a04a09c0d4b5e325 diff --git a/crates/crust-core/tests/data/import_baselines/subdiv_rule_cornersPlus1_usda-10da8f737cfaea1d-1.digest b/crates/crust-core/tests/data/import_baselines/subdiv_rule_cornersPlus1_usda-10da8f737cfaea1d-1.digest new file mode 100644 index 000000000..7f01779a3 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/subdiv_rule_cornersPlus1_usda-10da8f737cfaea1d-1.digest @@ -0,0 +1,22 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: None +camera: Camera { origin: Vec3A(15.0, 3.0, 3.0), lower_left_corner: Vec3A(4.8863316, -0.044797063, 4.174048), horizontal: Vec3A(1.2295314, 0.0, -6.147657), vertical: Vec3A(-0.44830504, 3.4967792, -0.08966101), u: Vec3A(0.19611613, 0.0, -0.9805807), v: Vec3A(-0.1271232, 0.991561, -0.02542464), lens_radius: 0.05, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: None +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 640, height: 360, region: PixelRect { x0: 0, y0: 0, x1: 640, y1: 360 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: None, depth_of_field: true, motion_blur: false, layer_stack: ["$DIR/subdiv_rule_cornersPlus1.usda"], invisible_overrides: Some(0) } +layer: $DIR/subdiv_rule_cornersPlus1.usda +warning: Warning { code: CameraMissing, kind: Skipped, count: 1, prims: [], message: "USD stage has no UsdGeomCamera — falling back to world::get_settings camera" } +lights: 0 +volumes: 0 +world: 1 geometries, PrimitiveBreakdown { triangles: 32, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 32, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +geom 0: material #0 Signature { kind: "MaterialX", cutout: false, straight: false, boundary: false, emits: false, uv: true, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv Some(0) shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=32:98445e4ef6263805 camera=32:98445e4ef6263805 shadow=32:98445e4ef6263805 indirect=32:98445e4ef6263805 +provenance material /World/Looks/Mtl: MaterialOrigin { slots: [0], displaced: false } +provenance geometry 0..1: /World/Quad +provenance mesh: MeshOrigin { geom_id: 0, slot: 0, baked: true, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 10124617692305081626, n_points: 25, n_indices: 64, n_uvs: Some(25), smooth: true, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: Some(1), subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 1, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: None, cameras: [], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: None, offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/subdiv_rule_cornersPlus1_usda-10da8f737cfaea1d-1.image b/crates/crust-core/tests/data/import_baselines/subdiv_rule_cornersPlus1_usda-10da8f737cfaea1d-1.image new file mode 100644 index 000000000..c734c5b1d --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/subdiv_rule_cornersPlus1_usda-10da8f737cfaea1d-1.image @@ -0,0 +1 @@ +640x360 16spp clamp-off a04a09c0d4b5e325 diff --git a/crates/crust-core/tests/data/import_baselines/subdiv_rule_cornersPlus2_usda-7ab350be92df8201-1.digest b/crates/crust-core/tests/data/import_baselines/subdiv_rule_cornersPlus2_usda-7ab350be92df8201-1.digest new file mode 100644 index 000000000..858e1d4e2 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/subdiv_rule_cornersPlus2_usda-7ab350be92df8201-1.digest @@ -0,0 +1,22 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: None +camera: Camera { origin: Vec3A(15.0, 3.0, 3.0), lower_left_corner: Vec3A(4.8863316, -0.044797063, 4.174048), horizontal: Vec3A(1.2295314, 0.0, -6.147657), vertical: Vec3A(-0.44830504, 3.4967792, -0.08966101), u: Vec3A(0.19611613, 0.0, -0.9805807), v: Vec3A(-0.1271232, 0.991561, -0.02542464), lens_radius: 0.05, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: None +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 640, height: 360, region: PixelRect { x0: 0, y0: 0, x1: 640, y1: 360 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: None, depth_of_field: true, motion_blur: false, layer_stack: ["$DIR/subdiv_rule_cornersPlus2.usda"], invisible_overrides: Some(0) } +layer: $DIR/subdiv_rule_cornersPlus2.usda +warning: Warning { code: CameraMissing, kind: Skipped, count: 1, prims: [], message: "USD stage has no UsdGeomCamera — falling back to world::get_settings camera" } +lights: 0 +volumes: 0 +world: 1 geometries, PrimitiveBreakdown { triangles: 32, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 32, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +geom 0: material #0 Signature { kind: "MaterialX", cutout: false, straight: false, boundary: false, emits: false, uv: true, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv Some(0) shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=32:98445e4ef6263805 camera=32:98445e4ef6263805 shadow=32:98445e4ef6263805 indirect=32:98445e4ef6263805 +provenance material /World/Looks/Mtl: MaterialOrigin { slots: [0], displaced: false } +provenance geometry 0..1: /World/Quad +provenance mesh: MeshOrigin { geom_id: 0, slot: 0, baked: true, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 10124617692305081626, n_points: 25, n_indices: 64, n_uvs: Some(25), smooth: true, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: Some(1), subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 1, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: None, cameras: [], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: None, offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/subdiv_rule_cornersPlus2_usda-7ab350be92df8201-1.image b/crates/crust-core/tests/data/import_baselines/subdiv_rule_cornersPlus2_usda-7ab350be92df8201-1.image new file mode 100644 index 000000000..c734c5b1d --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/subdiv_rule_cornersPlus2_usda-7ab350be92df8201-1.image @@ -0,0 +1 @@ +640x360 16spp clamp-off a04a09c0d4b5e325 diff --git a/crates/crust-core/tests/data/import_baselines/subdiv_rule_none_usda-86622a148177c839-1.digest b/crates/crust-core/tests/data/import_baselines/subdiv_rule_none_usda-86622a148177c839-1.digest new file mode 100644 index 000000000..b63aa2413 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/subdiv_rule_none_usda-86622a148177c839-1.digest @@ -0,0 +1,22 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: None +camera: Camera { origin: Vec3A(15.0, 3.0, 3.0), lower_left_corner: Vec3A(4.8863316, -0.044797063, 4.174048), horizontal: Vec3A(1.2295314, 0.0, -6.147657), vertical: Vec3A(-0.44830504, 3.4967792, -0.08966101), u: Vec3A(0.19611613, 0.0, -0.9805807), v: Vec3A(-0.1271232, 0.991561, -0.02542464), lens_radius: 0.05, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: None +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 640, height: 360, region: PixelRect { x0: 0, y0: 0, x1: 640, y1: 360 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: None, depth_of_field: true, motion_blur: false, layer_stack: ["$DIR/subdiv_rule_none.usda"], invisible_overrides: Some(0) } +layer: $DIR/subdiv_rule_none.usda +warning: Warning { code: CameraMissing, kind: Skipped, count: 1, prims: [], message: "USD stage has no UsdGeomCamera — falling back to world::get_settings camera" } +lights: 0 +volumes: 0 +world: 1 geometries, PrimitiveBreakdown { triangles: 32, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 32, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +geom 0: material #0 Signature { kind: "MaterialX", cutout: false, straight: false, boundary: false, emits: false, uv: true, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv Some(0) shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=32:98445e4ef6263805 camera=32:98445e4ef6263805 shadow=32:98445e4ef6263805 indirect=32:98445e4ef6263805 +provenance material /World/Looks/Mtl: MaterialOrigin { slots: [0], displaced: false } +provenance geometry 0..1: /World/Quad +provenance mesh: MeshOrigin { geom_id: 0, slot: 0, baked: true, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 10124617692305081626, n_points: 25, n_indices: 64, n_uvs: Some(25), smooth: true, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: Some(1), subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 1, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: None, cameras: [], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: None, offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/subdiv_rule_none_usda-86622a148177c839-1.image b/crates/crust-core/tests/data/import_baselines/subdiv_rule_none_usda-86622a148177c839-1.image new file mode 100644 index 000000000..c734c5b1d --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/subdiv_rule_none_usda-86622a148177c839-1.image @@ -0,0 +1 @@ +640x360 16spp clamp-off a04a09c0d4b5e325 diff --git a/crates/crust-core/tests/data/import_baselines/subdiv_smooth_usda-ecacf29cbe8c3a69-1.digest b/crates/crust-core/tests/data/import_baselines/subdiv_smooth_usda-ecacf29cbe8c3a69-1.digest new file mode 100644 index 000000000..fa244a7f3 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/subdiv_smooth_usda-ecacf29cbe8c3a69-1.digest @@ -0,0 +1,21 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: None +camera: Camera { origin: Vec3A(15.0, 3.0, 3.0), lower_left_corner: Vec3A(4.8863316, -0.044797063, 4.174048), horizontal: Vec3A(1.2295314, 0.0, -6.147657), vertical: Vec3A(-0.44830504, 3.4967792, -0.08966101), u: Vec3A(0.19611613, 0.0, -0.9805807), v: Vec3A(-0.1271232, 0.991561, -0.02542464), lens_radius: 0.05, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: Some("/Render/settings") +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 640, height: 360, region: PixelRect { x0: 0, y0: 0, x1: 640, y1: 360 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: None, depth_of_field: true, motion_blur: false, layer_stack: ["$DIR/subdiv_smooth.usda"], invisible_overrides: Some(0) } +layer: $DIR/subdiv_smooth.usda +warning: Warning { code: CameraMissing, kind: Skipped, count: 1, prims: [], message: "USD stage has no UsdGeomCamera — falling back to world::get_settings camera" } +lights: 0 +volumes: 0 +world: 1 geometries, PrimitiveBreakdown { triangles: 768, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 768, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=768:323308a3061f196d camera=768:323308a3061f196d shadow=768:323308a3061f196d indirect=768:323308a3061f196d +provenance geometry 0..1: /World/Cube +provenance mesh: MeshOrigin { geom_id: 0, slot: 0, baked: true, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 6811870252920726220, n_points: 386, n_indices: 1536, n_uvs: None, smooth: true, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 3, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: None, cameras: [], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: None, offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/subdiv_smooth_usda-ecacf29cbe8c3a69-1.image b/crates/crust-core/tests/data/import_baselines/subdiv_smooth_usda-ecacf29cbe8c3a69-1.image new file mode 100644 index 000000000..c734c5b1d --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/subdiv_smooth_usda-ecacf29cbe8c3a69-1.image @@ -0,0 +1 @@ +640x360 16spp clamp-off a04a09c0d4b5e325 diff --git a/crates/crust-core/tests/data/import_baselines/subdiv_streamed_usda-6897e2d021bbe857-1.digest b/crates/crust-core/tests/data/import_baselines/subdiv_streamed_usda-6897e2d021bbe857-1.digest new file mode 100644 index 000000000..4c1722dc8 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/subdiv_streamed_usda-6897e2d021bbe857-1.digest @@ -0,0 +1,30 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: None +camera: Camera { origin: Vec3A(15.0, 3.0, 3.0), lower_left_corner: Vec3A(4.8863316, -0.044797063, 4.174048), horizontal: Vec3A(1.2295314, 0.0, -6.147657), vertical: Vec3A(-0.44830504, 3.4967792, -0.08966101), u: Vec3A(0.19611613, 0.0, -0.9805807), v: Vec3A(-0.1271232, 0.991561, -0.02542464), lens_radius: 0.05, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: None +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 640, height: 360, region: PixelRect { x0: 0, y0: 0, x1: 640, y1: 360 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: None, depth_of_field: true, motion_blur: false, layer_stack: ["$DIR/subdiv_streamed.usda"], invisible_overrides: Some(0) } +layer: $DIR/subdiv_streamed.usda +warning: Warning { code: CameraMissing, kind: Skipped, count: 1, prims: [], message: "USD stage has no UsdGeomCamera — falling back to world::get_settings camera" } +lights: 0 +volumes: 0 +world: 4 geometries, PrimitiveBreakdown { triangles: 0, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 4 } top level, PrimitiveBreakdown { triangles: 48, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 4 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=48:5716bd3df4bea055 camera=48:5716bd3df4bea055 shadow=48:5716bd3df4bea055 indirect=48:5716bd3df4bea055 +geom 1: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=48:ce4166a9a1b841e5 camera=48:ce4166a9a1b841e5 shadow=48:ce4166a9a1b841e5 indirect=48:ce4166a9a1b841e5 +geom 2: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=48:ce3f589a90debe65 camera=48:ce3f589a90debe65 shadow=48:ce3f589a90debe65 indirect=48:ce3f589a90debe65 +geom 3: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=48:7904d0733a1a8e65 camera=48:7904d0733a1a8e65 shadow=48:7904d0733a1a8e65 indirect=48:7904d0733a1a8e65 +provenance geometry 0..1: /World/Cube0 +provenance geometry 1..2: /World/Cube1 +provenance geometry 2..3: /World/Cube2 +provenance geometry 3..4: /World/Cube3 +provenance mesh: MeshOrigin { geom_id: 0, slot: 0, baked: false, moving: false } +provenance mesh: MeshOrigin { geom_id: 1, slot: 0, baked: false, moving: false } +provenance mesh: MeshOrigin { geom_id: 2, slot: 0, baked: false, moving: false } +provenance mesh: MeshOrigin { geom_id: 3, slot: 0, baked: false, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 7668848715455400612, n_points: 26, n_indices: 96, n_uvs: None, smooth: true, material: 0 }), placements: 4, shared: false, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: Some(1), subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 1, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: None, cameras: [], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: None, offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/subdiv_streamed_usda-6897e2d021bbe857-1.image b/crates/crust-core/tests/data/import_baselines/subdiv_streamed_usda-6897e2d021bbe857-1.image new file mode 100644 index 000000000..c734c5b1d --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/subdiv_streamed_usda-6897e2d021bbe857-1.image @@ -0,0 +1 @@ +640x360 16spp clamp-off a04a09c0d4b5e325 diff --git a/crates/crust-core/tests/data/import_baselines/subdiv_unauthored_usda-1f8d567cba520aee-1.digest b/crates/crust-core/tests/data/import_baselines/subdiv_unauthored_usda-1f8d567cba520aee-1.digest new file mode 100644 index 000000000..0ca4519cc --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/subdiv_unauthored_usda-1f8d567cba520aee-1.digest @@ -0,0 +1,21 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: None +camera: Camera { origin: Vec3A(15.0, 3.0, 3.0), lower_left_corner: Vec3A(4.8863316, -0.044797063, 4.174048), horizontal: Vec3A(1.2295314, 0.0, -6.147657), vertical: Vec3A(-0.44830504, 3.4967792, -0.08966101), u: Vec3A(0.19611613, 0.0, -0.9805807), v: Vec3A(-0.1271232, 0.991561, -0.02542464), lens_radius: 0.05, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: Some("/Render/settings") +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 640, height: 360, region: PixelRect { x0: 0, y0: 0, x1: 640, y1: 360 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: None, depth_of_field: true, motion_blur: false, layer_stack: ["$DIR/subdiv_unauthored.usda"], invisible_overrides: Some(0) } +layer: $DIR/subdiv_unauthored.usda +warning: Warning { code: CameraMissing, kind: Skipped, count: 1, prims: [], message: "USD stage has no UsdGeomCamera — falling back to world::get_settings camera" } +lights: 0 +volumes: 0 +world: 1 geometries, PrimitiveBreakdown { triangles: 768, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 768, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=768:323308a3061f196d camera=768:323308a3061f196d shadow=768:323308a3061f196d indirect=768:323308a3061f196d +provenance geometry 0..1: /World/Cube +provenance mesh: MeshOrigin { geom_id: 0, slot: 0, baked: true, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 6811870252920726220, n_points: 386, n_indices: 1536, n_uvs: None, smooth: true, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 3, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: None, cameras: [], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: None, offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/subdiv_unauthored_usda-1f8d567cba520aee-1.image b/crates/crust-core/tests/data/import_baselines/subdiv_unauthored_usda-1f8d567cba520aee-1.image new file mode 100644 index 000000000..c734c5b1d --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/subdiv_unauthored_usda-1f8d567cba520aee-1.image @@ -0,0 +1 @@ +640x360 16spp clamp-off a04a09c0d4b5e325 diff --git a/crates/crust-core/tests/data/import_baselines/subdiv_uv_fv_usda-5e00e8c1f3e1cc34-1.digest b/crates/crust-core/tests/data/import_baselines/subdiv_uv_fv_usda-5e00e8c1f3e1cc34-1.digest new file mode 100644 index 000000000..431bf65c7 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/subdiv_uv_fv_usda-5e00e8c1f3e1cc34-1.digest @@ -0,0 +1,22 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: None +camera: Camera { origin: Vec3A(15.0, 3.0, 3.0), lower_left_corner: Vec3A(4.8863316, -0.044797063, 4.174048), horizontal: Vec3A(1.2295314, 0.0, -6.147657), vertical: Vec3A(-0.44830504, 3.4967792, -0.08966101), u: Vec3A(0.19611613, 0.0, -0.9805807), v: Vec3A(-0.1271232, 0.991561, -0.02542464), lens_radius: 0.05, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: None +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 640, height: 360, region: PixelRect { x0: 0, y0: 0, x1: 640, y1: 360 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: None, depth_of_field: true, motion_blur: false, layer_stack: ["$DIR/subdiv_uv_fv.usda"], invisible_overrides: Some(0) } +layer: $DIR/subdiv_uv_fv.usda +warning: Warning { code: CameraMissing, kind: Skipped, count: 1, prims: [], message: "USD stage has no UsdGeomCamera — falling back to world::get_settings camera" } +lights: 0 +volumes: 0 +world: 1 geometries, PrimitiveBreakdown { triangles: 8, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 8, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +geom 0: material #0 Signature { kind: "MaterialX", cutout: false, straight: false, boundary: false, emits: false, uv: true, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv Some(0) shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=8:4cf8106e75555fa5 camera=8:4cf8106e75555fa5 shadow=8:4cf8106e75555fa5 indirect=8:4cf8106e75555fa5 +provenance material /World/Looks/Mtl: MaterialOrigin { slots: [0], displaced: false } +provenance geometry 0..1: /World/Quad +provenance mesh: MeshOrigin { geom_id: 0, slot: 0, baked: true, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 11244973979129046869, n_points: 9, n_indices: 16, n_uvs: Some(9), smooth: true, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: Some(1), subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 1, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: None, cameras: [], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: None, offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/subdiv_uv_fv_usda-5e00e8c1f3e1cc34-1.image b/crates/crust-core/tests/data/import_baselines/subdiv_uv_fv_usda-5e00e8c1f3e1cc34-1.image new file mode 100644 index 000000000..c734c5b1d --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/subdiv_uv_fv_usda-5e00e8c1f3e1cc34-1.image @@ -0,0 +1 @@ +640x360 16spp clamp-off a04a09c0d4b5e325 diff --git a/crates/crust-core/tests/data/import_baselines/subdiv_uv_vertex_usda-b6cc7115ae3418dd-1.digest b/crates/crust-core/tests/data/import_baselines/subdiv_uv_vertex_usda-b6cc7115ae3418dd-1.digest new file mode 100644 index 000000000..8a96738f6 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/subdiv_uv_vertex_usda-b6cc7115ae3418dd-1.digest @@ -0,0 +1,22 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: None +camera: Camera { origin: Vec3A(15.0, 3.0, 3.0), lower_left_corner: Vec3A(4.8863316, -0.044797063, 4.174048), horizontal: Vec3A(1.2295314, 0.0, -6.147657), vertical: Vec3A(-0.44830504, 3.4967792, -0.08966101), u: Vec3A(0.19611613, 0.0, -0.9805807), v: Vec3A(-0.1271232, 0.991561, -0.02542464), lens_radius: 0.05, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: None +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 640, height: 360, region: PixelRect { x0: 0, y0: 0, x1: 640, y1: 360 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: None, depth_of_field: true, motion_blur: false, layer_stack: ["$DIR/subdiv_uv_vertex.usda"], invisible_overrides: Some(0) } +layer: $DIR/subdiv_uv_vertex.usda +warning: Warning { code: CameraMissing, kind: Skipped, count: 1, prims: [], message: "USD stage has no UsdGeomCamera — falling back to world::get_settings camera" } +lights: 0 +volumes: 0 +world: 1 geometries, PrimitiveBreakdown { triangles: 8, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 8, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +geom 0: material #0 Signature { kind: "MaterialX", cutout: false, straight: false, boundary: false, emits: false, uv: true, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv Some(0) shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=8:4cf8106e75555fa5 camera=8:4cf8106e75555fa5 shadow=8:4cf8106e75555fa5 indirect=8:4cf8106e75555fa5 +provenance material /World/Looks/Mtl: MaterialOrigin { slots: [0], displaced: false } +provenance geometry 0..1: /World/Quad +provenance mesh: MeshOrigin { geom_id: 0, slot: 0, baked: true, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 10103364612324037507, n_points: 9, n_indices: 16, n_uvs: Some(9), smooth: true, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: Some(1), subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 1, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: None, cameras: [], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: None, offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/subdiv_uv_vertex_usda-b6cc7115ae3418dd-1.image b/crates/crust-core/tests/data/import_baselines/subdiv_uv_vertex_usda-b6cc7115ae3418dd-1.image new file mode 100644 index 000000000..c734c5b1d --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/subdiv_uv_vertex_usda-b6cc7115ae3418dd-1.image @@ -0,0 +1 @@ +640x360 16spp clamp-off a04a09c0d4b5e325 diff --git a/crates/crust-core/tests/data/import_baselines/subdivision_adaptive_usda-4b5883574262488d-1.digest b/crates/crust-core/tests/data/import_baselines/subdivision_adaptive_usda-4b5883574262488d-1.digest new file mode 100644 index 000000000..0fd8605d5 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/subdivision_adaptive_usda-4b5883574262488d-1.digest @@ -0,0 +1,45 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/World/Cam") +camera: Camera { origin: Vec3A(0.0, 0.5, 0.0), lower_left_corner: Vec3A(-2.0955, -0.6787187, -10.0), horizontal: Vec3A(4.191, 0.0, 0.0), vertical: Vec3A(0.0, 2.3574374, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: Some("/Render/settings") +settings: RenderSettings { samples_per_pixel: 64, max_depth: 4, width: 320, height: 180, region: PixelRect { x0: 0, y0: 0, x1: 320, y1: 180 }, min_samples_per_pixel: 16, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 50.0, aperture: [20.955, 11.787188], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 10.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/subdivision_adaptive.usda"], invisible_overrides: Some(0) } +layer: $DIR/subdivision_adaptive.usda +warning: Warning { code: AssetUnsupportedByHost, kind: Skipped, count: 1, prims: [], message: "No asset loader: environment map $DIR/sky_gradient.exr ignored — the dome falls back to its uniform colour. Use Scene::from_usd_with_assets to supply one." } +lights: 2 +light 0: distant name Some("/World/Sun") lpe None pmf 0.5 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 1: dome name Some("/World/Sky") lpe None pmf 0.5 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 6 geometries, PrimitiveBreakdown { triangles: 254, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 2 } top level, PrimitiveBreakdown { triangles: 1022, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 2 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:4d8d0a8634ac849c camera=2:4d8d0a8634ac849c shadow=2:4d8d0a8634ac849c indirect=2:4d8d0a8634ac849c +geom 1: material #1 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=12:9b9b8ee224ae5549 camera=12:9b9b8ee224ae5549 shadow=12:9b9b8ee224ae5549 indirect=12:9b9b8ee224ae5549 +geom 2: material #1 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=48:c6523960f6a63cbd camera=48:c6523960f6a63cbd shadow=48:c6523960f6a63cbd indirect=48:c6523960f6a63cbd +geom 3: material #1 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=192:fba6e41b7614f3a5 camera=192:fba6e41b7614f3a5 shadow=192:fba6e41b7614f3a5 indirect=192:fba6e41b7614f3a5 +geom 4: material #1 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=768:599da110e719724d camera=768:599da110e719724d shadow=768:599da110e719724d indirect=768:599da110e719724d +geom 5: material #1 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=768:e38e45049fa014e1 camera=768:e38e45049fa014e1 shadow=768:e38e45049fa014e1 indirect=768:e38e45049fa014e1 +provenance material /World/Materials/clay: MaterialOrigin { slots: [1, 2, 3, 4, 5], displaced: false } +provenance light /World/Sky: LightOrigin { index: 1, geoms: 6..6 } +provenance light /World/Sun: LightOrigin { index: 0, geoms: 0..0 } +provenance geometry 0..1: /World/Floor +provenance geometry 1..2: /World/Cube5 +provenance geometry 2..3: /World/Cube4 +provenance geometry 3..4: /World/Cube3 +provenance geometry 4..5: /World/Cube2 +provenance geometry 5..6: /World/Cube1 +provenance mesh: MeshOrigin { geom_id: 0, slot: 0, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 1, slot: 1, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 2, slot: 2, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 3, slot: 3, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 4, slot: 4, baked: false, moving: false } +provenance mesh: MeshOrigin { geom_id: 5, slot: 4, baked: false, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 2079923942787246473, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 1: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 16825702510234920227, n_points: 8, n_indices: 36, n_uvs: None, smooth: true, material: 1 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 2: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 9125125757038733368, n_points: 26, n_indices: 144, n_uvs: None, smooth: true, material: 1 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 3: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 6639708518727051630, n_points: 98, n_indices: 576, n_uvs: None, smooth: true, material: 1 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 4: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 10122139134762046380, n_points: 386, n_indices: 2304, n_uvs: None, smooth: true, material: 1 }), placements: 2, shared: false, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: Some(ScreenKey([0, 1056964608, 0, 1144971934, 0, 1056964608, 0, 3212836864, 0, 3193345094, 1065353216, 0, 3193345094, 0, 3212836864, 3186714319, 0, 1065353216, 3186714319, 0, 0, 3212836864, 1090519040, 3])), domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/World/Cam"), cameras: ["/World/Cam"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/World/Cam"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/subdivision_adaptive_usda-4b5883574262488d-1.image b/crates/crust-core/tests/data/import_baselines/subdivision_adaptive_usda-4b5883574262488d-1.image new file mode 100644 index 000000000..4016203b3 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/subdivision_adaptive_usda-4b5883574262488d-1.image @@ -0,0 +1 @@ +320x180 16spp clamp-off 3298c20839e2d7dc diff --git a/crates/crust-core/tests/data/import_baselines/subdivision_adaptive_usda-8765a889a888ae6b-1.digest b/crates/crust-core/tests/data/import_baselines/subdivision_adaptive_usda-8765a889a888ae6b-1.digest new file mode 100644 index 000000000..0fd8605d5 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/subdivision_adaptive_usda-8765a889a888ae6b-1.digest @@ -0,0 +1,45 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/World/Cam") +camera: Camera { origin: Vec3A(0.0, 0.5, 0.0), lower_left_corner: Vec3A(-2.0955, -0.6787187, -10.0), horizontal: Vec3A(4.191, 0.0, 0.0), vertical: Vec3A(0.0, 2.3574374, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: Some("/Render/settings") +settings: RenderSettings { samples_per_pixel: 64, max_depth: 4, width: 320, height: 180, region: PixelRect { x0: 0, y0: 0, x1: 320, y1: 180 }, min_samples_per_pixel: 16, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 50.0, aperture: [20.955, 11.787188], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 10.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/subdivision_adaptive.usda"], invisible_overrides: Some(0) } +layer: $DIR/subdivision_adaptive.usda +warning: Warning { code: AssetUnsupportedByHost, kind: Skipped, count: 1, prims: [], message: "No asset loader: environment map $DIR/sky_gradient.exr ignored — the dome falls back to its uniform colour. Use Scene::from_usd_with_assets to supply one." } +lights: 2 +light 0: distant name Some("/World/Sun") lpe None pmf 0.5 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 1: dome name Some("/World/Sky") lpe None pmf 0.5 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 6 geometries, PrimitiveBreakdown { triangles: 254, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 2 } top level, PrimitiveBreakdown { triangles: 1022, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 2 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:4d8d0a8634ac849c camera=2:4d8d0a8634ac849c shadow=2:4d8d0a8634ac849c indirect=2:4d8d0a8634ac849c +geom 1: material #1 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=12:9b9b8ee224ae5549 camera=12:9b9b8ee224ae5549 shadow=12:9b9b8ee224ae5549 indirect=12:9b9b8ee224ae5549 +geom 2: material #1 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=48:c6523960f6a63cbd camera=48:c6523960f6a63cbd shadow=48:c6523960f6a63cbd indirect=48:c6523960f6a63cbd +geom 3: material #1 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=192:fba6e41b7614f3a5 camera=192:fba6e41b7614f3a5 shadow=192:fba6e41b7614f3a5 indirect=192:fba6e41b7614f3a5 +geom 4: material #1 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=768:599da110e719724d camera=768:599da110e719724d shadow=768:599da110e719724d indirect=768:599da110e719724d +geom 5: material #1 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=768:e38e45049fa014e1 camera=768:e38e45049fa014e1 shadow=768:e38e45049fa014e1 indirect=768:e38e45049fa014e1 +provenance material /World/Materials/clay: MaterialOrigin { slots: [1, 2, 3, 4, 5], displaced: false } +provenance light /World/Sky: LightOrigin { index: 1, geoms: 6..6 } +provenance light /World/Sun: LightOrigin { index: 0, geoms: 0..0 } +provenance geometry 0..1: /World/Floor +provenance geometry 1..2: /World/Cube5 +provenance geometry 2..3: /World/Cube4 +provenance geometry 3..4: /World/Cube3 +provenance geometry 4..5: /World/Cube2 +provenance geometry 5..6: /World/Cube1 +provenance mesh: MeshOrigin { geom_id: 0, slot: 0, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 1, slot: 1, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 2, slot: 2, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 3, slot: 3, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 4, slot: 4, baked: false, moving: false } +provenance mesh: MeshOrigin { geom_id: 5, slot: 4, baked: false, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 2079923942787246473, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 1: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 16825702510234920227, n_points: 8, n_indices: 36, n_uvs: None, smooth: true, material: 1 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 2: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 9125125757038733368, n_points: 26, n_indices: 144, n_uvs: None, smooth: true, material: 1 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 3: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 6639708518727051630, n_points: 98, n_indices: 576, n_uvs: None, smooth: true, material: 1 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 4: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 10122139134762046380, n_points: 386, n_indices: 2304, n_uvs: None, smooth: true, material: 1 }), placements: 2, shared: false, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: Some(ScreenKey([0, 1056964608, 0, 1144971934, 0, 1056964608, 0, 3212836864, 0, 3193345094, 1065353216, 0, 3193345094, 0, 3212836864, 3186714319, 0, 1065353216, 3186714319, 0, 0, 3212836864, 1090519040, 3])), domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/World/Cam"), cameras: ["/World/Cam"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/World/Cam"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/subdivision_adaptive_usda-8765a889a888ae6b-1.image b/crates/crust-core/tests/data/import_baselines/subdivision_adaptive_usda-8765a889a888ae6b-1.image new file mode 100644 index 000000000..4016203b3 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/subdivision_adaptive_usda-8765a889a888ae6b-1.image @@ -0,0 +1 @@ +320x180 16spp clamp-off 3298c20839e2d7dc diff --git a/crates/crust-core/tests/data/import_baselines/subdivision_adaptive_usda-95a3e0a9db67a1fb-1.digest b/crates/crust-core/tests/data/import_baselines/subdivision_adaptive_usda-95a3e0a9db67a1fb-1.digest new file mode 100644 index 000000000..4c4b3d132 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/subdivision_adaptive_usda-95a3e0a9db67a1fb-1.digest @@ -0,0 +1,44 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/World/Cam") +camera: Camera { origin: Vec3A(0.0, 0.5, 0.0), lower_left_corner: Vec3A(-2.0955, -0.6787187, -10.0), horizontal: Vec3A(4.191, 0.0, 0.0), vertical: Vec3A(0.0, 2.3574374, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: Some("/Render/settings") +settings: RenderSettings { samples_per_pixel: 64, max_depth: 4, width: 320, height: 180, region: PixelRect { x0: 0, y0: 0, x1: 320, y1: 180 }, min_samples_per_pixel: 16, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 50.0, aperture: [20.955, 11.787188], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 10.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/subdivision_adaptive.usda"], invisible_overrides: Some(0) } +layer: $DIR/subdivision_adaptive.usda +lights: 2 +light 0: distant name Some("/World/Sun") lpe None pmf 0.5 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 1: dome name Some("/World/Sky") lpe None pmf 0.5 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 6 geometries, PrimitiveBreakdown { triangles: 254, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 2 } top level, PrimitiveBreakdown { triangles: 1022, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 2 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:4d8d0a8634ac849c camera=2:4d8d0a8634ac849c shadow=2:4d8d0a8634ac849c indirect=2:4d8d0a8634ac849c +geom 1: material #1 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=12:9b9b8ee224ae5549 camera=12:9b9b8ee224ae5549 shadow=12:9b9b8ee224ae5549 indirect=12:9b9b8ee224ae5549 +geom 2: material #1 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=48:c6523960f6a63cbd camera=48:c6523960f6a63cbd shadow=48:c6523960f6a63cbd indirect=48:c6523960f6a63cbd +geom 3: material #1 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=192:fba6e41b7614f3a5 camera=192:fba6e41b7614f3a5 shadow=192:fba6e41b7614f3a5 indirect=192:fba6e41b7614f3a5 +geom 4: material #1 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=768:599da110e719724d camera=768:599da110e719724d shadow=768:599da110e719724d indirect=768:599da110e719724d +geom 5: material #1 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=768:e38e45049fa014e1 camera=768:e38e45049fa014e1 shadow=768:e38e45049fa014e1 indirect=768:e38e45049fa014e1 +provenance material /World/Materials/clay: MaterialOrigin { slots: [1, 2, 3, 4, 5], displaced: false } +provenance light /World/Sky: LightOrigin { index: 1, geoms: 6..6 } +provenance light /World/Sun: LightOrigin { index: 0, geoms: 0..0 } +provenance geometry 0..1: /World/Floor +provenance geometry 1..2: /World/Cube5 +provenance geometry 2..3: /World/Cube4 +provenance geometry 3..4: /World/Cube3 +provenance geometry 4..5: /World/Cube2 +provenance geometry 5..6: /World/Cube1 +provenance mesh: MeshOrigin { geom_id: 0, slot: 0, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 1, slot: 1, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 2, slot: 2, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 3, slot: 3, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 4, slot: 4, baked: false, moving: false } +provenance mesh: MeshOrigin { geom_id: 5, slot: 4, baked: false, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 2079923942787246473, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 1: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 16825702510234920227, n_points: 8, n_indices: 36, n_uvs: None, smooth: true, material: 1 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 2: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 9125125757038733368, n_points: 26, n_indices: 144, n_uvs: None, smooth: true, material: 1 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 3: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 6639708518727051630, n_points: 98, n_indices: 576, n_uvs: None, smooth: true, material: 1 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 4: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 10122139134762046380, n_points: 386, n_indices: 2304, n_uvs: None, smooth: true, material: 1 }), placements: 2, shared: false, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: true, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: Some(ScreenKey([0, 1056964608, 0, 1144971934, 0, 1056964608, 0, 3212836864, 0, 3193345094, 1065353216, 0, 3193345094, 0, 3212836864, 3186714319, 0, 1065353216, 3186714319, 0, 0, 3212836864, 1090519040, 3])), domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/World/Cam"), cameras: ["/World/Cam"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/World/Cam"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/subdivision_adaptive_usda-95a3e0a9db67a1fb-1.image b/crates/crust-core/tests/data/import_baselines/subdivision_adaptive_usda-95a3e0a9db67a1fb-1.image new file mode 100644 index 000000000..2b3e41d4a --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/subdivision_adaptive_usda-95a3e0a9db67a1fb-1.image @@ -0,0 +1 @@ +320x180 16spp clamp-off e033f583c1c6e52f diff --git a/crates/crust-core/tests/data/import_baselines/subdivision_adaptive_usda-de7625b66c9d664b-1.digest b/crates/crust-core/tests/data/import_baselines/subdivision_adaptive_usda-de7625b66c9d664b-1.digest new file mode 100644 index 000000000..0fd8605d5 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/subdivision_adaptive_usda-de7625b66c9d664b-1.digest @@ -0,0 +1,45 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/World/Cam") +camera: Camera { origin: Vec3A(0.0, 0.5, 0.0), lower_left_corner: Vec3A(-2.0955, -0.6787187, -10.0), horizontal: Vec3A(4.191, 0.0, 0.0), vertical: Vec3A(0.0, 2.3574374, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: Some("/Render/settings") +settings: RenderSettings { samples_per_pixel: 64, max_depth: 4, width: 320, height: 180, region: PixelRect { x0: 0, y0: 0, x1: 320, y1: 180 }, min_samples_per_pixel: 16, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 50.0, aperture: [20.955, 11.787188], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 10.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/subdivision_adaptive.usda"], invisible_overrides: Some(0) } +layer: $DIR/subdivision_adaptive.usda +warning: Warning { code: AssetUnsupportedByHost, kind: Skipped, count: 1, prims: [], message: "No asset loader: environment map $DIR/sky_gradient.exr ignored — the dome falls back to its uniform colour. Use Scene::from_usd_with_assets to supply one." } +lights: 2 +light 0: distant name Some("/World/Sun") lpe None pmf 0.5 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 1: dome name Some("/World/Sky") lpe None pmf 0.5 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 6 geometries, PrimitiveBreakdown { triangles: 254, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 2 } top level, PrimitiveBreakdown { triangles: 1022, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 2 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:4d8d0a8634ac849c camera=2:4d8d0a8634ac849c shadow=2:4d8d0a8634ac849c indirect=2:4d8d0a8634ac849c +geom 1: material #1 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=12:9b9b8ee224ae5549 camera=12:9b9b8ee224ae5549 shadow=12:9b9b8ee224ae5549 indirect=12:9b9b8ee224ae5549 +geom 2: material #1 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=48:c6523960f6a63cbd camera=48:c6523960f6a63cbd shadow=48:c6523960f6a63cbd indirect=48:c6523960f6a63cbd +geom 3: material #1 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=192:fba6e41b7614f3a5 camera=192:fba6e41b7614f3a5 shadow=192:fba6e41b7614f3a5 indirect=192:fba6e41b7614f3a5 +geom 4: material #1 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=768:599da110e719724d camera=768:599da110e719724d shadow=768:599da110e719724d indirect=768:599da110e719724d +geom 5: material #1 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=768:e38e45049fa014e1 camera=768:e38e45049fa014e1 shadow=768:e38e45049fa014e1 indirect=768:e38e45049fa014e1 +provenance material /World/Materials/clay: MaterialOrigin { slots: [1, 2, 3, 4, 5], displaced: false } +provenance light /World/Sky: LightOrigin { index: 1, geoms: 6..6 } +provenance light /World/Sun: LightOrigin { index: 0, geoms: 0..0 } +provenance geometry 0..1: /World/Floor +provenance geometry 1..2: /World/Cube5 +provenance geometry 2..3: /World/Cube4 +provenance geometry 3..4: /World/Cube3 +provenance geometry 4..5: /World/Cube2 +provenance geometry 5..6: /World/Cube1 +provenance mesh: MeshOrigin { geom_id: 0, slot: 0, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 1, slot: 1, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 2, slot: 2, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 3, slot: 3, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 4, slot: 4, baked: false, moving: false } +provenance mesh: MeshOrigin { geom_id: 5, slot: 4, baked: false, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 2079923942787246473, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 1: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 16825702510234920227, n_points: 8, n_indices: 36, n_uvs: None, smooth: true, material: 1 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 2: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 9125125757038733368, n_points: 26, n_indices: 144, n_uvs: None, smooth: true, material: 1 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 3: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 6639708518727051630, n_points: 98, n_indices: 576, n_uvs: None, smooth: true, material: 1 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 4: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 10122139134762046380, n_points: 386, n_indices: 2304, n_uvs: None, smooth: true, material: 1 }), placements: 2, shared: false, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: Some(ScreenKey([0, 1056964608, 0, 1144971934, 0, 1056964608, 0, 3212836864, 0, 3193345094, 1065353216, 0, 3193345094, 0, 3212836864, 3186714319, 0, 1065353216, 3186714319, 0, 0, 3212836864, 1090519040, 3])), domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/World/Cam"), cameras: ["/World/Cam"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/World/Cam"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/subdivision_adaptive_usda-de7625b66c9d664b-1.image b/crates/crust-core/tests/data/import_baselines/subdivision_adaptive_usda-de7625b66c9d664b-1.image new file mode 100644 index 000000000..4016203b3 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/subdivision_adaptive_usda-de7625b66c9d664b-1.image @@ -0,0 +1 @@ +320x180 16spp clamp-off 3298c20839e2d7dc diff --git a/crates/crust-core/tests/data/import_baselines/subdivision_adaptive_usda-de7625b66c9d664b-2.digest b/crates/crust-core/tests/data/import_baselines/subdivision_adaptive_usda-de7625b66c9d664b-2.digest new file mode 100644 index 000000000..0fd8605d5 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/subdivision_adaptive_usda-de7625b66c9d664b-2.digest @@ -0,0 +1,45 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/World/Cam") +camera: Camera { origin: Vec3A(0.0, 0.5, 0.0), lower_left_corner: Vec3A(-2.0955, -0.6787187, -10.0), horizontal: Vec3A(4.191, 0.0, 0.0), vertical: Vec3A(0.0, 2.3574374, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: Some("/Render/settings") +settings: RenderSettings { samples_per_pixel: 64, max_depth: 4, width: 320, height: 180, region: PixelRect { x0: 0, y0: 0, x1: 320, y1: 180 }, min_samples_per_pixel: 16, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 50.0, aperture: [20.955, 11.787188], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 10.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/subdivision_adaptive.usda"], invisible_overrides: Some(0) } +layer: $DIR/subdivision_adaptive.usda +warning: Warning { code: AssetUnsupportedByHost, kind: Skipped, count: 1, prims: [], message: "No asset loader: environment map $DIR/sky_gradient.exr ignored — the dome falls back to its uniform colour. Use Scene::from_usd_with_assets to supply one." } +lights: 2 +light 0: distant name Some("/World/Sun") lpe None pmf 0.5 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 1: dome name Some("/World/Sky") lpe None pmf 0.5 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 6 geometries, PrimitiveBreakdown { triangles: 254, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 2 } top level, PrimitiveBreakdown { triangles: 1022, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 2 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:4d8d0a8634ac849c camera=2:4d8d0a8634ac849c shadow=2:4d8d0a8634ac849c indirect=2:4d8d0a8634ac849c +geom 1: material #1 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=12:9b9b8ee224ae5549 camera=12:9b9b8ee224ae5549 shadow=12:9b9b8ee224ae5549 indirect=12:9b9b8ee224ae5549 +geom 2: material #1 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=48:c6523960f6a63cbd camera=48:c6523960f6a63cbd shadow=48:c6523960f6a63cbd indirect=48:c6523960f6a63cbd +geom 3: material #1 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=192:fba6e41b7614f3a5 camera=192:fba6e41b7614f3a5 shadow=192:fba6e41b7614f3a5 indirect=192:fba6e41b7614f3a5 +geom 4: material #1 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=768:599da110e719724d camera=768:599da110e719724d shadow=768:599da110e719724d indirect=768:599da110e719724d +geom 5: material #1 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=768:e38e45049fa014e1 camera=768:e38e45049fa014e1 shadow=768:e38e45049fa014e1 indirect=768:e38e45049fa014e1 +provenance material /World/Materials/clay: MaterialOrigin { slots: [1, 2, 3, 4, 5], displaced: false } +provenance light /World/Sky: LightOrigin { index: 1, geoms: 6..6 } +provenance light /World/Sun: LightOrigin { index: 0, geoms: 0..0 } +provenance geometry 0..1: /World/Floor +provenance geometry 1..2: /World/Cube5 +provenance geometry 2..3: /World/Cube4 +provenance geometry 3..4: /World/Cube3 +provenance geometry 4..5: /World/Cube2 +provenance geometry 5..6: /World/Cube1 +provenance mesh: MeshOrigin { geom_id: 0, slot: 0, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 1, slot: 1, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 2, slot: 2, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 3, slot: 3, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 4, slot: 4, baked: false, moving: false } +provenance mesh: MeshOrigin { geom_id: 5, slot: 4, baked: false, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 2079923942787246473, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 1: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 16825702510234920227, n_points: 8, n_indices: 36, n_uvs: None, smooth: true, material: 1 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 2: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 9125125757038733368, n_points: 26, n_indices: 144, n_uvs: None, smooth: true, material: 1 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 3: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 6639708518727051630, n_points: 98, n_indices: 576, n_uvs: None, smooth: true, material: 1 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 4: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 10122139134762046380, n_points: 386, n_indices: 2304, n_uvs: None, smooth: true, material: 1 }), placements: 2, shared: false, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: Some(ScreenKey([0, 1056964608, 0, 1144971934, 0, 1056964608, 0, 3212836864, 0, 3193345094, 1065353216, 0, 3193345094, 0, 3212836864, 3186714319, 0, 1065353216, 3186714319, 0, 0, 3212836864, 1090519040, 3])), domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/World/Cam"), cameras: ["/World/Cam"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/World/Cam"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/subdivision_adaptive_usda-de7625b66c9d664b-2.image b/crates/crust-core/tests/data/import_baselines/subdivision_adaptive_usda-de7625b66c9d664b-2.image new file mode 100644 index 000000000..4016203b3 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/subdivision_adaptive_usda-de7625b66c9d664b-2.image @@ -0,0 +1 @@ +320x180 16spp clamp-off 3298c20839e2d7dc diff --git a/crates/crust-core/tests/data/import_baselines/subdivision_usda-093423ee46de2ab4-1.digest b/crates/crust-core/tests/data/import_baselines/subdivision_usda-093423ee46de2ab4-1.digest new file mode 100644 index 000000000..cd4704226 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/subdivision_usda-093423ee46de2ab4-1.digest @@ -0,0 +1,56 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/World/Cam") +camera: Camera { origin: Vec3A(0.0, 3.5, 17.0), lower_left_corner: Vec3A(-7.551013, -2.4193983, 7.8894835), horizontal: Vec3A(15.102026, -0.0, 0.0), vertical: Vec3A(0.0, 8.365833, -1.4751221), u: Vec3A(1.0, -0.0, 0.0), v: Vec3A(0.0, 0.98480767, -0.17364816), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: Some("/Render/settings") +settings: RenderSettings { samples_per_pixel: 64, max_depth: 4, width: 320, height: 180, region: PixelRect { x0: 0, y0: 0, x1: 320, y1: 180 }, min_samples_per_pixel: 16, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 18.0, aperture: [20.955, 15.2908], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 10.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/subdivision.usda"], invisible_overrides: Some(0) } +layer: $DIR/subdivision.usda +lights: 2 +light 0: area name Some("/World/KeyLight") lpe None pmf 0.5 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 1: dome name Some("/World/Sky") lpe None pmf 0.5 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 8 geometries, PrimitiveBreakdown { triangles: 976, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 976, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +geom 0: material #0 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:1f6ce7ff10fbd00c camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=2:1f6ce7ff10fbd00c +geom 1: material #1 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:9ea5922e2246c6c5 camera=2:9ea5922e2246c6c5 shadow=2:9ea5922e2246c6c5 indirect=2:9ea5922e2246c6c5 +geom 2: material #2 Signature { kind: "UsdPreviewSurface (textured)", cutout: false, straight: false, boundary: false, emits: false, uv: true, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv Some(0) shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=192:7840fe2c141dfc8d camera=192:7840fe2c141dfc8d shadow=192:7840fe2c141dfc8d indirect=192:7840fe2c141dfc8d +geom 3: material #3 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=192:a769be906b64daa5 camera=192:a769be906b64daa5 shadow=192:a769be906b64daa5 indirect=192:a769be906b64daa5 +geom 4: material #4 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=192:71d1eafb60fc6cb1 camera=192:71d1eafb60fc6cb1 shadow=192:71d1eafb60fc6cb1 indirect=192:71d1eafb60fc6cb1 +geom 5: material #5 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=192:0e16ab2cc684f225 camera=192:0e16ab2cc684f225 shadow=192:0e16ab2cc684f225 indirect=192:0e16ab2cc684f225 +geom 6: material #6 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=12:83e01b8ae3269cc5 camera=12:83e01b8ae3269cc5 shadow=12:83e01b8ae3269cc5 indirect=12:83e01b8ae3269cc5 +geom 7: material #7 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=192:8e974c5245414bcd camera=192:8e974c5245414bcd shadow=192:8e974c5245414bcd indirect=192:8e974c5245414bcd +provenance material /World/Materials/amber: MaterialOrigin { slots: [4], displaced: false } +provenance material /World/Materials/blue: MaterialOrigin { slots: [7], displaced: false } +provenance material /World/Materials/checker: MaterialOrigin { slots: [2], displaced: false } +provenance material /World/Materials/green: MaterialOrigin { slots: [5], displaced: false } +provenance material /World/Materials/red: MaterialOrigin { slots: [3], displaced: false } +provenance material /World/Materials/teal: MaterialOrigin { slots: [6], displaced: false } +provenance light /World/KeyLight: LightOrigin { index: 0, geoms: 0..1 } +provenance light /World/Sky: LightOrigin { index: 1, geoms: 8..8 } +provenance geometry 0..1: /World/KeyLight +provenance geometry 1..2: /World/Floor +provenance geometry 2..3: /World/CubeTextured +provenance geometry 3..4: /World/CubeCreased +provenance geometry 4..5: /World/CubeCatmullClark +provenance geometry 5..6: /World/CubeBilinear +provenance geometry 6..7: /World/CubeNone +provenance geometry 7..8: /World/CubeCage +provenance mesh: MeshOrigin { geom_id: 1, slot: 0, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 2, slot: 1, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 3, slot: 2, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 4, slot: 3, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 5, slot: 4, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 6, slot: 5, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 7, slot: 6, baked: true, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 11663793508701957868, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 1: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 3674895141745399482, n_points: 98, n_indices: 384, n_uvs: Some(150), smooth: true, material: 1 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 2: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 3479353540423503200, n_points: 98, n_indices: 384, n_uvs: None, smooth: true, material: 2 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 3: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 9922834378028892030, n_points: 98, n_indices: 384, n_uvs: None, smooth: true, material: 3 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 4: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 3479353540423503200, n_points: 98, n_indices: 384, n_uvs: None, smooth: true, material: 4 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 5: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 16234188082663099353, n_points: 8, n_indices: 24, n_uvs: None, smooth: false, material: 5 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 6: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 9922834378028892030, n_points: 98, n_indices: 384, n_uvs: None, smooth: true, material: 6 }), placements: 1, shared: false, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: true, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 2, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/World/Cam"), cameras: ["/World/Cam"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/World/Cam"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/subdivision_usda-093423ee46de2ab4-1.image b/crates/crust-core/tests/data/import_baselines/subdivision_usda-093423ee46de2ab4-1.image new file mode 100644 index 000000000..99f49e031 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/subdivision_usda-093423ee46de2ab4-1.image @@ -0,0 +1 @@ +320x180 16spp clamp-off 9d9354c30c7d3ed6 diff --git a/crates/crust-core/tests/data/import_baselines/subdivision_usda-59b7fc0fc3af435b-1.digest b/crates/crust-core/tests/data/import_baselines/subdivision_usda-59b7fc0fc3af435b-1.digest new file mode 100644 index 000000000..bddb5ebfa --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/subdivision_usda-59b7fc0fc3af435b-1.digest @@ -0,0 +1,57 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/World/Cam") +camera: Camera { origin: Vec3A(0.0, 3.5, 17.0), lower_left_corner: Vec3A(-7.551013, -2.4193983, 7.8894835), horizontal: Vec3A(15.102026, -0.0, 0.0), vertical: Vec3A(0.0, 8.365833, -1.4751221), u: Vec3A(1.0, -0.0, 0.0), v: Vec3A(0.0, 0.98480767, -0.17364816), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: Some("/Render/settings") +settings: RenderSettings { samples_per_pixel: 64, max_depth: 4, width: 320, height: 180, region: PixelRect { x0: 0, y0: 0, x1: 320, y1: 180 }, min_samples_per_pixel: 16, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 18.0, aperture: [20.955, 15.2908], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 10.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/subdivision.usda"], invisible_overrides: Some(0) } +layer: $DIR/subdivision.usda +warning: Warning { code: AssetUnsupportedByHost, kind: Skipped, count: 2, prims: [], message: "Asset loader does not decode UV textures: $DIR/textures/usdpreview_albedo.exr ignored — the input falls back to its constant value." } +lights: 2 +light 0: area name Some("/World/KeyLight") lpe None pmf 0.5 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 1: dome name Some("/World/Sky") lpe None pmf 0.5 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 8 geometries, PrimitiveBreakdown { triangles: 976, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 976, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +geom 0: material #0 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:1f6ce7ff10fbd00c camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=2:1f6ce7ff10fbd00c +geom 1: material #1 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:9ea5922e2246c6c5 camera=2:9ea5922e2246c6c5 shadow=2:9ea5922e2246c6c5 indirect=2:9ea5922e2246c6c5 +geom 2: material #2 Signature { kind: "UsdPreviewSurface (textured)", cutout: false, straight: false, boundary: false, emits: false, uv: true, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv Some(0) shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=192:7840fe2c141dfc8d camera=192:7840fe2c141dfc8d shadow=192:7840fe2c141dfc8d indirect=192:7840fe2c141dfc8d +geom 3: material #3 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=192:a769be906b64daa5 camera=192:a769be906b64daa5 shadow=192:a769be906b64daa5 indirect=192:a769be906b64daa5 +geom 4: material #4 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=192:71d1eafb60fc6cb1 camera=192:71d1eafb60fc6cb1 shadow=192:71d1eafb60fc6cb1 indirect=192:71d1eafb60fc6cb1 +geom 5: material #5 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=192:0e16ab2cc684f225 camera=192:0e16ab2cc684f225 shadow=192:0e16ab2cc684f225 indirect=192:0e16ab2cc684f225 +geom 6: material #6 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=12:83e01b8ae3269cc5 camera=12:83e01b8ae3269cc5 shadow=12:83e01b8ae3269cc5 indirect=12:83e01b8ae3269cc5 +geom 7: material #7 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=192:8e974c5245414bcd camera=192:8e974c5245414bcd shadow=192:8e974c5245414bcd indirect=192:8e974c5245414bcd +provenance material /World/Materials/amber: MaterialOrigin { slots: [4], displaced: false } +provenance material /World/Materials/blue: MaterialOrigin { slots: [7], displaced: false } +provenance material /World/Materials/checker: MaterialOrigin { slots: [2], displaced: false } +provenance material /World/Materials/green: MaterialOrigin { slots: [5], displaced: false } +provenance material /World/Materials/red: MaterialOrigin { slots: [3], displaced: false } +provenance material /World/Materials/teal: MaterialOrigin { slots: [6], displaced: false } +provenance light /World/KeyLight: LightOrigin { index: 0, geoms: 0..1 } +provenance light /World/Sky: LightOrigin { index: 1, geoms: 8..8 } +provenance geometry 0..1: /World/KeyLight +provenance geometry 1..2: /World/Floor +provenance geometry 2..3: /World/CubeTextured +provenance geometry 3..4: /World/CubeCreased +provenance geometry 4..5: /World/CubeCatmullClark +provenance geometry 5..6: /World/CubeBilinear +provenance geometry 6..7: /World/CubeNone +provenance geometry 7..8: /World/CubeCage +provenance mesh: MeshOrigin { geom_id: 1, slot: 0, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 2, slot: 1, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 3, slot: 2, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 4, slot: 3, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 5, slot: 4, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 6, slot: 5, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 7, slot: 6, baked: true, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 11663793508701957868, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 1: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 3674895141745399482, n_points: 98, n_indices: 384, n_uvs: Some(150), smooth: true, material: 1 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 2: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 3479353540423503200, n_points: 98, n_indices: 384, n_uvs: None, smooth: true, material: 2 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 3: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 9922834378028892030, n_points: 98, n_indices: 384, n_uvs: None, smooth: true, material: 3 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 4: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 3479353540423503200, n_points: 98, n_indices: 384, n_uvs: None, smooth: true, material: 4 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 5: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 16234188082663099353, n_points: 8, n_indices: 24, n_uvs: None, smooth: false, material: 5 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 6: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 9922834378028892030, n_points: 98, n_indices: 384, n_uvs: None, smooth: true, material: 6 }), placements: 1, shared: false, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 2, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/World/Cam"), cameras: ["/World/Cam"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/World/Cam"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/subdivision_usda-59b7fc0fc3af435b-1.image b/crates/crust-core/tests/data/import_baselines/subdivision_usda-59b7fc0fc3af435b-1.image new file mode 100644 index 000000000..d48051dbe --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/subdivision_usda-59b7fc0fc3af435b-1.image @@ -0,0 +1 @@ +320x180 16spp clamp-off dec5335d8cedbab3 diff --git a/crates/crust-core/tests/data/import_baselines/subdivision_usda-59b7fc0fc3af435b-2.digest b/crates/crust-core/tests/data/import_baselines/subdivision_usda-59b7fc0fc3af435b-2.digest new file mode 100644 index 000000000..bddb5ebfa --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/subdivision_usda-59b7fc0fc3af435b-2.digest @@ -0,0 +1,57 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/World/Cam") +camera: Camera { origin: Vec3A(0.0, 3.5, 17.0), lower_left_corner: Vec3A(-7.551013, -2.4193983, 7.8894835), horizontal: Vec3A(15.102026, -0.0, 0.0), vertical: Vec3A(0.0, 8.365833, -1.4751221), u: Vec3A(1.0, -0.0, 0.0), v: Vec3A(0.0, 0.98480767, -0.17364816), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: Some("/Render/settings") +settings: RenderSettings { samples_per_pixel: 64, max_depth: 4, width: 320, height: 180, region: PixelRect { x0: 0, y0: 0, x1: 320, y1: 180 }, min_samples_per_pixel: 16, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 18.0, aperture: [20.955, 15.2908], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 10.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/subdivision.usda"], invisible_overrides: Some(0) } +layer: $DIR/subdivision.usda +warning: Warning { code: AssetUnsupportedByHost, kind: Skipped, count: 2, prims: [], message: "Asset loader does not decode UV textures: $DIR/textures/usdpreview_albedo.exr ignored — the input falls back to its constant value." } +lights: 2 +light 0: area name Some("/World/KeyLight") lpe None pmf 0.5 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 1: dome name Some("/World/Sky") lpe None pmf 0.5 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 8 geometries, PrimitiveBreakdown { triangles: 976, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 976, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +geom 0: material #0 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:1f6ce7ff10fbd00c camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=2:1f6ce7ff10fbd00c +geom 1: material #1 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:9ea5922e2246c6c5 camera=2:9ea5922e2246c6c5 shadow=2:9ea5922e2246c6c5 indirect=2:9ea5922e2246c6c5 +geom 2: material #2 Signature { kind: "UsdPreviewSurface (textured)", cutout: false, straight: false, boundary: false, emits: false, uv: true, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv Some(0) shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=192:7840fe2c141dfc8d camera=192:7840fe2c141dfc8d shadow=192:7840fe2c141dfc8d indirect=192:7840fe2c141dfc8d +geom 3: material #3 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=192:a769be906b64daa5 camera=192:a769be906b64daa5 shadow=192:a769be906b64daa5 indirect=192:a769be906b64daa5 +geom 4: material #4 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=192:71d1eafb60fc6cb1 camera=192:71d1eafb60fc6cb1 shadow=192:71d1eafb60fc6cb1 indirect=192:71d1eafb60fc6cb1 +geom 5: material #5 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=192:0e16ab2cc684f225 camera=192:0e16ab2cc684f225 shadow=192:0e16ab2cc684f225 indirect=192:0e16ab2cc684f225 +geom 6: material #6 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=12:83e01b8ae3269cc5 camera=12:83e01b8ae3269cc5 shadow=12:83e01b8ae3269cc5 indirect=12:83e01b8ae3269cc5 +geom 7: material #7 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=192:8e974c5245414bcd camera=192:8e974c5245414bcd shadow=192:8e974c5245414bcd indirect=192:8e974c5245414bcd +provenance material /World/Materials/amber: MaterialOrigin { slots: [4], displaced: false } +provenance material /World/Materials/blue: MaterialOrigin { slots: [7], displaced: false } +provenance material /World/Materials/checker: MaterialOrigin { slots: [2], displaced: false } +provenance material /World/Materials/green: MaterialOrigin { slots: [5], displaced: false } +provenance material /World/Materials/red: MaterialOrigin { slots: [3], displaced: false } +provenance material /World/Materials/teal: MaterialOrigin { slots: [6], displaced: false } +provenance light /World/KeyLight: LightOrigin { index: 0, geoms: 0..1 } +provenance light /World/Sky: LightOrigin { index: 1, geoms: 8..8 } +provenance geometry 0..1: /World/KeyLight +provenance geometry 1..2: /World/Floor +provenance geometry 2..3: /World/CubeTextured +provenance geometry 3..4: /World/CubeCreased +provenance geometry 4..5: /World/CubeCatmullClark +provenance geometry 5..6: /World/CubeBilinear +provenance geometry 6..7: /World/CubeNone +provenance geometry 7..8: /World/CubeCage +provenance mesh: MeshOrigin { geom_id: 1, slot: 0, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 2, slot: 1, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 3, slot: 2, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 4, slot: 3, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 5, slot: 4, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 6, slot: 5, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 7, slot: 6, baked: true, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 11663793508701957868, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 1: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 3674895141745399482, n_points: 98, n_indices: 384, n_uvs: Some(150), smooth: true, material: 1 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 2: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 3479353540423503200, n_points: 98, n_indices: 384, n_uvs: None, smooth: true, material: 2 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 3: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 9922834378028892030, n_points: 98, n_indices: 384, n_uvs: None, smooth: true, material: 3 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 4: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 3479353540423503200, n_points: 98, n_indices: 384, n_uvs: None, smooth: true, material: 4 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 5: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 16234188082663099353, n_points: 8, n_indices: 24, n_uvs: None, smooth: false, material: 5 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 6: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 9922834378028892030, n_points: 98, n_indices: 384, n_uvs: None, smooth: true, material: 6 }), placements: 1, shared: false, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 2, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/World/Cam"), cameras: ["/World/Cam"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/World/Cam"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/subdivision_usda-59b7fc0fc3af435b-2.image b/crates/crust-core/tests/data/import_baselines/subdivision_usda-59b7fc0fc3af435b-2.image new file mode 100644 index 000000000..d48051dbe --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/subdivision_usda-59b7fc0fc3af435b-2.image @@ -0,0 +1 @@ +320x180 16spp clamp-off dec5335d8cedbab3 diff --git a/crates/crust-core/tests/data/import_baselines/subdivision_usda-c1e09f9374aaab81-1.digest b/crates/crust-core/tests/data/import_baselines/subdivision_usda-c1e09f9374aaab81-1.digest new file mode 100644 index 000000000..bddb5ebfa --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/subdivision_usda-c1e09f9374aaab81-1.digest @@ -0,0 +1,57 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/World/Cam") +camera: Camera { origin: Vec3A(0.0, 3.5, 17.0), lower_left_corner: Vec3A(-7.551013, -2.4193983, 7.8894835), horizontal: Vec3A(15.102026, -0.0, 0.0), vertical: Vec3A(0.0, 8.365833, -1.4751221), u: Vec3A(1.0, -0.0, 0.0), v: Vec3A(0.0, 0.98480767, -0.17364816), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: Some("/Render/settings") +settings: RenderSettings { samples_per_pixel: 64, max_depth: 4, width: 320, height: 180, region: PixelRect { x0: 0, y0: 0, x1: 320, y1: 180 }, min_samples_per_pixel: 16, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 18.0, aperture: [20.955, 15.2908], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 10.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/subdivision.usda"], invisible_overrides: Some(0) } +layer: $DIR/subdivision.usda +warning: Warning { code: AssetUnsupportedByHost, kind: Skipped, count: 2, prims: [], message: "Asset loader does not decode UV textures: $DIR/textures/usdpreview_albedo.exr ignored — the input falls back to its constant value." } +lights: 2 +light 0: area name Some("/World/KeyLight") lpe None pmf 0.5 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 1: dome name Some("/World/Sky") lpe None pmf 0.5 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 8 geometries, PrimitiveBreakdown { triangles: 976, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 976, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +geom 0: material #0 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:1f6ce7ff10fbd00c camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=2:1f6ce7ff10fbd00c +geom 1: material #1 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:9ea5922e2246c6c5 camera=2:9ea5922e2246c6c5 shadow=2:9ea5922e2246c6c5 indirect=2:9ea5922e2246c6c5 +geom 2: material #2 Signature { kind: "UsdPreviewSurface (textured)", cutout: false, straight: false, boundary: false, emits: false, uv: true, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv Some(0) shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=192:7840fe2c141dfc8d camera=192:7840fe2c141dfc8d shadow=192:7840fe2c141dfc8d indirect=192:7840fe2c141dfc8d +geom 3: material #3 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=192:a769be906b64daa5 camera=192:a769be906b64daa5 shadow=192:a769be906b64daa5 indirect=192:a769be906b64daa5 +geom 4: material #4 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=192:71d1eafb60fc6cb1 camera=192:71d1eafb60fc6cb1 shadow=192:71d1eafb60fc6cb1 indirect=192:71d1eafb60fc6cb1 +geom 5: material #5 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=192:0e16ab2cc684f225 camera=192:0e16ab2cc684f225 shadow=192:0e16ab2cc684f225 indirect=192:0e16ab2cc684f225 +geom 6: material #6 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=12:83e01b8ae3269cc5 camera=12:83e01b8ae3269cc5 shadow=12:83e01b8ae3269cc5 indirect=12:83e01b8ae3269cc5 +geom 7: material #7 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=192:8e974c5245414bcd camera=192:8e974c5245414bcd shadow=192:8e974c5245414bcd indirect=192:8e974c5245414bcd +provenance material /World/Materials/amber: MaterialOrigin { slots: [4], displaced: false } +provenance material /World/Materials/blue: MaterialOrigin { slots: [7], displaced: false } +provenance material /World/Materials/checker: MaterialOrigin { slots: [2], displaced: false } +provenance material /World/Materials/green: MaterialOrigin { slots: [5], displaced: false } +provenance material /World/Materials/red: MaterialOrigin { slots: [3], displaced: false } +provenance material /World/Materials/teal: MaterialOrigin { slots: [6], displaced: false } +provenance light /World/KeyLight: LightOrigin { index: 0, geoms: 0..1 } +provenance light /World/Sky: LightOrigin { index: 1, geoms: 8..8 } +provenance geometry 0..1: /World/KeyLight +provenance geometry 1..2: /World/Floor +provenance geometry 2..3: /World/CubeTextured +provenance geometry 3..4: /World/CubeCreased +provenance geometry 4..5: /World/CubeCatmullClark +provenance geometry 5..6: /World/CubeBilinear +provenance geometry 6..7: /World/CubeNone +provenance geometry 7..8: /World/CubeCage +provenance mesh: MeshOrigin { geom_id: 1, slot: 0, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 2, slot: 1, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 3, slot: 2, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 4, slot: 3, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 5, slot: 4, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 6, slot: 5, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 7, slot: 6, baked: true, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 11663793508701957868, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 1: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 3674895141745399482, n_points: 98, n_indices: 384, n_uvs: Some(150), smooth: true, material: 1 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 2: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 3479353540423503200, n_points: 98, n_indices: 384, n_uvs: None, smooth: true, material: 2 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 3: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 9922834378028892030, n_points: 98, n_indices: 384, n_uvs: None, smooth: true, material: 3 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 4: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 3479353540423503200, n_points: 98, n_indices: 384, n_uvs: None, smooth: true, material: 4 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 5: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 16234188082663099353, n_points: 8, n_indices: 24, n_uvs: None, smooth: false, material: 5 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 6: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 9922834378028892030, n_points: 98, n_indices: 384, n_uvs: None, smooth: true, material: 6 }), placements: 1, shared: false, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 2, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/World/Cam"), cameras: ["/World/Cam"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/World/Cam"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/subdivision_usda-c1e09f9374aaab81-1.image b/crates/crust-core/tests/data/import_baselines/subdivision_usda-c1e09f9374aaab81-1.image new file mode 100644 index 000000000..d48051dbe --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/subdivision_usda-c1e09f9374aaab81-1.image @@ -0,0 +1 @@ +320x180 16spp clamp-off dec5335d8cedbab3 diff --git a/crates/crust-core/tests/data/import_baselines/sun_delta_usda-ea8cdfc115606b89-1.digest b/crates/crust-core/tests/data/import_baselines/sun_delta_usda-ea8cdfc115606b89-1.digest new file mode 100644 index 000000000..5937d80a5 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/sun_delta_usda-ea8cdfc115606b89-1.digest @@ -0,0 +1,19 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: None +camera: Camera { origin: Vec3A(15.0, 3.0, 3.0), lower_left_corner: Vec3A(4.8863316, -0.044797063, 4.174048), horizontal: Vec3A(1.2295314, 0.0, -6.147657), vertical: Vec3A(-0.44830504, 3.4967792, -0.08966101), u: Vec3A(0.19611613, 0.0, -0.9805807), v: Vec3A(-0.1271232, 0.991561, -0.02542464), lens_radius: 0.05, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: None +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 640, height: 360, region: PixelRect { x0: 0, y0: 0, x1: 640, y1: 360 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: None, depth_of_field: true, motion_blur: false, layer_stack: ["$DIR/sun_delta.usda"], invisible_overrides: Some(0) } +layer: $DIR/sun_delta.usda +warning: Warning { code: CameraMissing, kind: Skipped, count: 1, prims: [], message: "USD stage has no UsdGeomCamera — falling back to world::get_settings camera" } +lights: 1 +light 0: distant name Some("/World/Sun") lpe None pmf 1.0 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 0 geometries, PrimitiveBreakdown { triangles: 0, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 0, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +provenance light /World/Sun: LightOrigin { index: 0, geoms: 0..0 } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: None, cameras: [], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: None, offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/sun_delta_usda-ea8cdfc115606b89-1.image b/crates/crust-core/tests/data/import_baselines/sun_delta_usda-ea8cdfc115606b89-1.image new file mode 100644 index 000000000..c734c5b1d --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/sun_delta_usda-ea8cdfc115606b89-1.image @@ -0,0 +1 @@ +640x360 16spp clamp-off a04a09c0d4b5e325 diff --git a/crates/crust-core/tests/data/import_baselines/sun_lux_usda-f3cb39d866e6c449-1.digest b/crates/crust-core/tests/data/import_baselines/sun_lux_usda-f3cb39d866e6c449-1.digest new file mode 100644 index 000000000..39cc634a4 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/sun_lux_usda-f3cb39d866e6c449-1.digest @@ -0,0 +1,19 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: None +camera: Camera { origin: Vec3A(15.0, 3.0, 3.0), lower_left_corner: Vec3A(4.8863316, -0.044797063, 4.174048), horizontal: Vec3A(1.2295314, 0.0, -6.147657), vertical: Vec3A(-0.44830504, 3.4967792, -0.08966101), u: Vec3A(0.19611613, 0.0, -0.9805807), v: Vec3A(-0.1271232, 0.991561, -0.02542464), lens_radius: 0.05, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: None +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 640, height: 360, region: PixelRect { x0: 0, y0: 0, x1: 640, y1: 360 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: None, depth_of_field: true, motion_blur: false, layer_stack: ["$DIR/sun_lux.usda"], invisible_overrides: Some(0) } +layer: $DIR/sun_lux.usda +warning: Warning { code: CameraMissing, kind: Skipped, count: 1, prims: [], message: "USD stage has no UsdGeomCamera — falling back to world::get_settings camera" } +lights: 1 +light 0: distant name Some("/World/Sun") lpe None pmf 1.0 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 0 geometries, PrimitiveBreakdown { triangles: 0, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 0, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +provenance light /World/Sun: LightOrigin { index: 0, geoms: 0..0 } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: None, cameras: [], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: None, offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/sun_lux_usda-f3cb39d866e6c449-1.image b/crates/crust-core/tests/data/import_baselines/sun_lux_usda-f3cb39d866e6c449-1.image new file mode 100644 index 000000000..c734c5b1d --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/sun_lux_usda-f3cb39d866e6c449-1.image @@ -0,0 +1 @@ +640x360 16spp clamp-off a04a09c0d4b5e325 diff --git a/crates/crust-core/tests/data/import_baselines/sun_narrow_usda-cc46151e1eb78ebf-1.digest b/crates/crust-core/tests/data/import_baselines/sun_narrow_usda-cc46151e1eb78ebf-1.digest new file mode 100644 index 000000000..ffb459ff3 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/sun_narrow_usda-cc46151e1eb78ebf-1.digest @@ -0,0 +1,19 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: None +camera: Camera { origin: Vec3A(15.0, 3.0, 3.0), lower_left_corner: Vec3A(4.8863316, -0.044797063, 4.174048), horizontal: Vec3A(1.2295314, 0.0, -6.147657), vertical: Vec3A(-0.44830504, 3.4967792, -0.08966101), u: Vec3A(0.19611613, 0.0, -0.9805807), v: Vec3A(-0.1271232, 0.991561, -0.02542464), lens_radius: 0.05, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: None +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 640, height: 360, region: PixelRect { x0: 0, y0: 0, x1: 640, y1: 360 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: None, depth_of_field: true, motion_blur: false, layer_stack: ["$DIR/sun_narrow.usda"], invisible_overrides: Some(0) } +layer: $DIR/sun_narrow.usda +warning: Warning { code: CameraMissing, kind: Skipped, count: 1, prims: [], message: "USD stage has no UsdGeomCamera — falling back to world::get_settings camera" } +lights: 1 +light 0: distant name Some("/World/Sun") lpe None pmf 1.0 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 0 geometries, PrimitiveBreakdown { triangles: 0, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 0, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +provenance light /World/Sun: LightOrigin { index: 0, geoms: 0..0 } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: None, cameras: [], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: None, offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/sun_narrow_usda-cc46151e1eb78ebf-1.image b/crates/crust-core/tests/data/import_baselines/sun_narrow_usda-cc46151e1eb78ebf-1.image new file mode 100644 index 000000000..c734c5b1d --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/sun_narrow_usda-cc46151e1eb78ebf-1.image @@ -0,0 +1 @@ +640x360 16spp clamp-off a04a09c0d4b5e325 diff --git a/crates/crust-core/tests/data/import_baselines/sun_nits_usda-8ccba3be0d36785e-1.digest b/crates/crust-core/tests/data/import_baselines/sun_nits_usda-8ccba3be0d36785e-1.digest new file mode 100644 index 000000000..706c11a9a --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/sun_nits_usda-8ccba3be0d36785e-1.digest @@ -0,0 +1,19 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: None +camera: Camera { origin: Vec3A(15.0, 3.0, 3.0), lower_left_corner: Vec3A(4.8863316, -0.044797063, 4.174048), horizontal: Vec3A(1.2295314, 0.0, -6.147657), vertical: Vec3A(-0.44830504, 3.4967792, -0.08966101), u: Vec3A(0.19611613, 0.0, -0.9805807), v: Vec3A(-0.1271232, 0.991561, -0.02542464), lens_radius: 0.05, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: None +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 640, height: 360, region: PixelRect { x0: 0, y0: 0, x1: 640, y1: 360 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: None, depth_of_field: true, motion_blur: false, layer_stack: ["$DIR/sun_nits.usda"], invisible_overrides: Some(0) } +layer: $DIR/sun_nits.usda +warning: Warning { code: CameraMissing, kind: Skipped, count: 1, prims: [], message: "USD stage has no UsdGeomCamera — falling back to world::get_settings camera" } +lights: 1 +light 0: distant name Some("/World/Sun") lpe None pmf 1.0 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 0 geometries, PrimitiveBreakdown { triangles: 0, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 0, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +provenance light /World/Sun: LightOrigin { index: 0, geoms: 0..0 } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: None, cameras: [], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: None, offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/sun_nits_usda-8ccba3be0d36785e-1.image b/crates/crust-core/tests/data/import_baselines/sun_nits_usda-8ccba3be0d36785e-1.image new file mode 100644 index 000000000..c734c5b1d --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/sun_nits_usda-8ccba3be0d36785e-1.image @@ -0,0 +1 @@ +640x360 16spp clamp-off a04a09c0d4b5e325 diff --git a/crates/crust-core/tests/data/import_baselines/supported_types_usda-5cac3f5a887f68e8-1.digest b/crates/crust-core/tests/data/import_baselines/supported_types_usda-5cac3f5a887f68e8-1.digest new file mode 100644 index 000000000..1ca0cac49 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/supported_types_usda-5cac3f5a887f68e8-1.digest @@ -0,0 +1,55 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/World/cam") +camera: Camera { origin: Vec3A(0.0, 0.0, 0.0), lower_left_corner: Vec3A(-2.7183647, -1.5290802, -10.0), horizontal: Vec3A(5.4367294, 0.0, 0.0), vertical: Vec3A(0.0, 3.0581603, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: None +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 640, height: 360, region: PixelRect { x0: 0, y0: 0, x1: 640, y1: 360 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 50.0, aperture: [20.955, 15.2908], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 10.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/supported_types.usda"], invisible_overrides: Some(0) } +layer: $DIR/supported_types.usda +lights: 2 +light 0: area name Some("/World/lamp") lpe None pmf 0.5 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 1: distant name Some("/World/sun") lpe None pmf 0.5 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 1 +volume 0: sigma_s Vec3A(0.5, 0.5, 0.5) sigma_a Vec3A(0.0, 0.0, 0.0) g 0.0 emission Vec3A(0.0, 0.0, 0.0) mask RayMask(4294967295) class 65535 homogeneous true +world: 10 geometries, PrimitiveBreakdown { triangles: 159, spheres: 2, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 4 } top level, PrimitiveBreakdown { triangles: 2655, spheres: 2, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 4 } unique, motion false +geom 0: material #0 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:13c54b934599bf61 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=1:13c54b934599bf61 +geom 1: material #1 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=12:d3f93325e3445105 camera=12:d3f93325e3445105 shadow=12:d3f93325e3445105 indirect=12:d3f93325e3445105 +geom 2: material #1 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:1ce8f33592c1cce5 camera=2:1ce8f33592c1cce5 shadow=2:1ce8f33592c1cce5 indirect=2:1ce8f33592c1cce5 +geom 3: material #1 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=192:417dbfabd3a17585 camera=192:417dbfabd3a17585 shadow=192:417dbfabd3a17585 indirect=192:417dbfabd3a17585 +geom 4: material #1 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=192:417dbfabd3a17585 camera=192:417dbfabd3a17585 shadow=192:417dbfabd3a17585 indirect=192:417dbfabd3a17585 +geom 5: material #1 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=144:cb5c3b5933666a1f camera=144:cb5c3b5933666a1f shadow=144:cb5c3b5933666a1f indirect=144:cb5c3b5933666a1f +geom 6: material #1 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2304:ed03a97ba251327d camera=2304:ed03a97ba251327d shadow=2304:ed03a97ba251327d indirect=2304:ed03a97ba251327d +geom 7: material #1 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2304:ed03a97ba251327d camera=2304:ed03a97ba251327d shadow=2304:ed03a97ba251327d indirect=2304:ed03a97ba251327d +geom 8: material #1 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:1d3535e07c06fa35 camera=1:1d3535e07c06fa35 shadow=1:1d3535e07c06fa35 indirect=1:1d3535e07c06fa35 +geom 9: material #1 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:fb1e7d48790aec95 camera=1:fb1e7d48790aec95 shadow=1:fb1e7d48790aec95 indirect=1:fb1e7d48790aec95 +provenance light /World/lamp: LightOrigin { index: 0, geoms: 0..1 } +provenance light /World/sun: LightOrigin { index: 1, geoms: 1..1 } +provenance geometry 0..1: /World/lamp +provenance geometry 1..2: /World/cube +provenance geometry 2..3: /World/plane +provenance geometry 3..4: /World/cylinder +provenance geometry 4..5: /World/cylinder1 +provenance geometry 5..6: /World/cone +provenance geometry 6..7: /World/capsule +provenance geometry 7..8: /World/capsule1 +provenance geometry 8..9: /World/mesh +provenance geometry 9..10: /World/sphere +provenance mesh: MeshOrigin { geom_id: 1, slot: 0, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 2, slot: 1, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 3, slot: 2, baked: false, moving: false } +provenance mesh: MeshOrigin { geom_id: 4, slot: 2, baked: false, moving: false } +provenance mesh: MeshOrigin { geom_id: 5, slot: 3, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 6, slot: 4, baked: false, moving: false } +provenance mesh: MeshOrigin { geom_id: 7, slot: 4, baked: false, moving: false } +provenance mesh: MeshOrigin { geom_id: 8, slot: 5, baked: true, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 9204403525635746283, n_points: 8, n_indices: 24, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 1: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 4144177092627173538, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 2: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 6877125351767401758, n_points: 194, n_indices: 480, n_uvs: None, smooth: true, material: 0 }), placements: 2, shared: false, displaced: false } +provenance mesh slot 3: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 17337873428103508369, n_points: 145, n_indices: 336, n_uvs: None, smooth: true, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 4: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 5116155558073966183, n_points: 1154, n_indices: 4704, n_uvs: None, smooth: true, material: 0 }), placements: 2, shared: false, displaced: false } +provenance mesh slot 5: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 819217792897349932, n_points: 3, n_indices: 3, n_uvs: None, smooth: true, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [9] +provenance volumes: ["/World/fog"] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/World/cam"), cameras: ["/World/cam"], dicing: None, on_screen_shapes: None, unsized_shapes: true, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/World/cam"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/supported_types_usda-5cac3f5a887f68e8-1.image b/crates/crust-core/tests/data/import_baselines/supported_types_usda-5cac3f5a887f68e8-1.image new file mode 100644 index 000000000..b3b6b7bfe --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/supported_types_usda-5cac3f5a887f68e8-1.image @@ -0,0 +1 @@ +640x360 16spp clamp-off a788697d7c6dadfb diff --git a/crates/crust-core/tests/data/import_baselines/synonym_a_usda-c8543088a0bca8e3-1.digest b/crates/crust-core/tests/data/import_baselines/synonym_a_usda-c8543088a0bca8e3-1.digest new file mode 100644 index 000000000..286e40354 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/synonym_a_usda-c8543088a0bca8e3-1.digest @@ -0,0 +1,19 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/World/cam") +camera: Camera { origin: Vec3A(0.0, 0.0, 8.0), lower_left_corner: Vec3A(-2.7183647, -1.5290802, -2.0), horizontal: Vec3A(5.4367294, 0.0, 0.0), vertical: Vec3A(0.0, 3.0581603, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: Some("/Render/settings") +settings: RenderSettings { samples_per_pixel: 16, max_depth: 2, width: 64, height: 36, region: PixelRect { x0: 0, y0: 0, x1: 64, y1: 36 }, min_samples_per_pixel: 16, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: false, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 50.0, aperture: [20.955, 15.2908], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 10.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/synonym_a.usda"], invisible_overrides: Some(0) } +layer: $DIR/synonym_a.usda +lights: 0 +volumes: 0 +world: 1 geometries, PrimitiveBreakdown { triangles: 0, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 1 } top level, PrimitiveBreakdown { triangles: 0, spheres: 1, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 1 } unique, motion true +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [Translation(Vec3A(1.2, 0.0, 0.0))] pieces all=1:6246e4b1bcdf2dac camera=1:6246e4b1bcdf2dac shadow=1:6246e4b1bcdf2dac indirect=1:6246e4b1bcdf2dac +provenance material /World/Glow: MaterialOrigin { slots: [0], displaced: false } +provenance geometry 0..1: /World/Mover +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/World/cam"), cameras: ["/World/cam"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/World/cam"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/synonym_a_usda-c8543088a0bca8e3-1.image b/crates/crust-core/tests/data/import_baselines/synonym_a_usda-c8543088a0bca8e3-1.image new file mode 100644 index 000000000..410d887f2 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/synonym_a_usda-c8543088a0bca8e3-1.image @@ -0,0 +1 @@ +64x36 16spp clamp-off f27fb0620765d10a diff --git a/crates/crust-core/tests/data/import_baselines/synonym_b_usda-5b26c8cc28a6baa8-1.digest b/crates/crust-core/tests/data/import_baselines/synonym_b_usda-5b26c8cc28a6baa8-1.digest new file mode 100644 index 000000000..f00956fbb --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/synonym_b_usda-5b26c8cc28a6baa8-1.digest @@ -0,0 +1,19 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/World/cam") +camera: Camera { origin: Vec3A(0.0, 0.0, 8.0), lower_left_corner: Vec3A(-2.7183647, -1.5290802, -2.0), horizontal: Vec3A(5.4367294, 0.0, 0.0), vertical: Vec3A(0.0, 3.0581603, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: Some("/Render/settings") +settings: RenderSettings { samples_per_pixel: 16, max_depth: 2, width: 64, height: 36, region: PixelRect { x0: 0, y0: 0, x1: 64, y1: 36 }, min_samples_per_pixel: 16, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: false, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 50.0, aperture: [20.955, 15.2908], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 10.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/synonym_b.usda"], invisible_overrides: Some(0) } +layer: $DIR/synonym_b.usda +lights: 0 +volumes: 0 +world: 1 geometries, PrimitiveBreakdown { triangles: 0, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 1 } top level, PrimitiveBreakdown { triangles: 0, spheres: 1, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 1 } unique, motion true +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [Translation(Vec3A(1.2, 0.0, 0.0))] pieces all=1:6246e4b1bcdf2dac camera=1:6246e4b1bcdf2dac shadow=1:6246e4b1bcdf2dac indirect=1:6246e4b1bcdf2dac +provenance material /World/Glow: MaterialOrigin { slots: [0], displaced: false } +provenance geometry 0..1: /World/Mover +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/World/cam"), cameras: ["/World/cam"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/World/cam"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/synonym_b_usda-5b26c8cc28a6baa8-1.image b/crates/crust-core/tests/data/import_baselines/synonym_b_usda-5b26c8cc28a6baa8-1.image new file mode 100644 index 000000000..410d887f2 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/synonym_b_usda-5b26c8cc28a6baa8-1.image @@ -0,0 +1 @@ +64x36 16spp clamp-off f27fb0620765d10a diff --git a/crates/crust-core/tests/data/import_baselines/textured_usda-addde73d309fca5e-1.digest b/crates/crust-core/tests/data/import_baselines/textured_usda-addde73d309fca5e-1.digest new file mode 100644 index 000000000..e92262356 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/textured_usda-addde73d309fca5e-1.digest @@ -0,0 +1,22 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: None +camera: Camera { origin: Vec3A(15.0, 3.0, 3.0), lower_left_corner: Vec3A(4.8863316, -0.044797063, 4.174048), horizontal: Vec3A(1.2295314, 0.0, -6.147657), vertical: Vec3A(-0.44830504, 3.4967792, -0.08966101), u: Vec3A(0.19611613, 0.0, -0.9805807), v: Vec3A(-0.1271232, 0.991561, -0.02542464), lens_radius: 0.05, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: None +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 640, height: 360, region: PixelRect { x0: 0, y0: 0, x1: 640, y1: 360 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: None, depth_of_field: true, motion_blur: false, layer_stack: ["$DIR/textured.usda"], invisible_overrides: Some(0) } +layer: $DIR/textured.usda +warning: Warning { code: CameraMissing, kind: Skipped, count: 1, prims: [], message: "USD stage has no UsdGeomCamera — falling back to world::get_settings camera" } +lights: 0 +volumes: 0 +world: 1 geometries, PrimitiveBreakdown { triangles: 32, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 32, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=32:ac771f7e6a6314dd camera=32:ac771f7e6a6314dd shadow=32:ac771f7e6a6314dd indirect=32:ac771f7e6a6314dd +provenance material /World/Height: MaterialOrigin { slots: [0], displaced: true } +provenance geometry 0..1: /World/Ground +provenance mesh: MeshOrigin { geom_id: 0, slot: 0, baked: true, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 5577808108587403347, n_points: 25, n_indices: 64, n_uvs: Some(25), smooth: true, material: 0 }), placements: 1, shared: false, displaced: true } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: Some(2), subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 2, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: None, cameras: [], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: None, offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/textured_usda-addde73d309fca5e-1.image b/crates/crust-core/tests/data/import_baselines/textured_usda-addde73d309fca5e-1.image new file mode 100644 index 000000000..c734c5b1d --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/textured_usda-addde73d309fca5e-1.image @@ -0,0 +1 @@ +640x360 16spp clamp-off a04a09c0d4b5e325 diff --git a/crates/crust-core/tests/data/import_baselines/thin_window_usda-61e111e4ca995610-1.digest b/crates/crust-core/tests/data/import_baselines/thin_window_usda-61e111e4ca995610-1.digest new file mode 100644 index 000000000..f3e9c6285 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/thin_window_usda-61e111e4ca995610-1.digest @@ -0,0 +1,35 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/World/ShotCam") +camera: Camera { origin: Vec3A(0.0, 1.3, 5.0), lower_left_corner: Vec3A(-7.5000005, -6.0845304, -2.9540281), horizontal: Vec3A(15.000001, -0.0, 0.0), vertical: Vec3A(0.0, 7.9286575, -2.8857954), u: Vec3A(1.0, -0.0, 0.0), v: Vec3A(0.0, 0.9396926, -0.34202015), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: Some("/Render/settings") +settings: RenderSettings { samples_per_pixel: 64, max_depth: 8, width: 480, height: 270, region: PixelRect { x0: 0, y0: 0, x1: 480, y1: 270 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 24.0, aperture: [36.0, 15.2908], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 10.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/thin_window.usda"], invisible_overrides: Some(0) } +layer: $DIR/thin_window.usda +lights: 1 +light 0: area name Some("/World/Key") lpe None pmf 1.0 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 4 geometries, PrimitiveBreakdown { triangles: 6, spheres: 1, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 6, spheres: 1, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +geom 0: material #0 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:49b0a8af4f524a43 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=1:49b0a8af4f524a43 +geom 1: material #1 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:58d360c7905fa0c5 camera=2:58d360c7905fa0c5 shadow=2:58d360c7905fa0c5 indirect=2:58d360c7905fa0c5 +geom 2: material #2 Signature { kind: "MaterialX", cutout: false, straight: true, boundary: false, emits: false, uv: true, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:025b586767a82275 camera=2:025b586767a82275 shadow=2:025b586767a82275 indirect=2:025b586767a82275 +geom 3: material #3 Signature { kind: "OpenPBR", cutout: false, straight: true, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:8c8b5f7964604bf5 camera=2:8c8b5f7964604bf5 shadow=2:8c8b5f7964604bf5 indirect=2:8c8b5f7964604bf5 +provenance material /World/Looks/Floor: MaterialOrigin { slots: [1], displaced: false } +provenance material /World/Looks/Pane: MaterialOrigin { slots: [3], displaced: false } +provenance material /World/Looks/Window: MaterialOrigin { slots: [2], displaced: false } +provenance light /World/Key: LightOrigin { index: 0, geoms: 0..1 } +provenance geometry 0..1: /World/Key +provenance geometry 1..2: /World/Floor +provenance geometry 2..3: /World/Window +provenance geometry 3..4: /World/Pane +provenance mesh: MeshOrigin { geom_id: 1, slot: 0, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 2, slot: 1, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 3, slot: 2, baked: true, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 6334356113930313994, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 1: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 9621829451479420765, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 1 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 2: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 12790827634220154733, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 2 }), placements: 1, shared: false, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/World/ShotCam"), cameras: ["/World/ShotCam"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/World/ShotCam"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/thin_window_usda-61e111e4ca995610-1.image b/crates/crust-core/tests/data/import_baselines/thin_window_usda-61e111e4ca995610-1.image new file mode 100644 index 000000000..eb2a957cb --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/thin_window_usda-61e111e4ca995610-1.image @@ -0,0 +1 @@ +480x270 16spp clamp-off 12cf29137cae9287 diff --git a/crates/crust-core/tests/data/import_baselines/thin_window_usda-9e0a6257872a8f5f-1.digest b/crates/crust-core/tests/data/import_baselines/thin_window_usda-9e0a6257872a8f5f-1.digest new file mode 100644 index 000000000..ff8e81369 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/thin_window_usda-9e0a6257872a8f5f-1.digest @@ -0,0 +1,35 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/World/ShotCam") +camera: Camera { origin: Vec3A(0.0, 1.3, 5.0), lower_left_corner: Vec3A(-7.5000005, -6.0845304, -2.9540281), horizontal: Vec3A(15.000001, -0.0, 0.0), vertical: Vec3A(0.0, 7.9286575, -2.8857954), u: Vec3A(1.0, -0.0, 0.0), v: Vec3A(0.0, 0.9396926, -0.34202015), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: Some("/Render/settings") +settings: RenderSettings { samples_per_pixel: 64, max_depth: 8, width: 480, height: 270, region: PixelRect { x0: 0, y0: 0, x1: 480, y1: 270 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 24.0, aperture: [36.0, 15.2908], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 10.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/thin_window.usda"], invisible_overrides: Some(0) } +layer: $DIR/thin_window.usda +lights: 1 +light 0: area name Some("/World/Key") lpe None pmf 1.0 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 4 geometries, PrimitiveBreakdown { triangles: 6, spheres: 1, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 6, spheres: 1, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +geom 0: material #0 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:49b0a8af4f524a43 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=1:49b0a8af4f524a43 +geom 1: material #1 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:58d360c7905fa0c5 camera=2:58d360c7905fa0c5 shadow=2:58d360c7905fa0c5 indirect=2:58d360c7905fa0c5 +geom 2: material #2 Signature { kind: "MaterialX", cutout: false, straight: true, boundary: false, emits: false, uv: true, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:025b586767a82275 camera=2:025b586767a82275 shadow=2:025b586767a82275 indirect=2:025b586767a82275 +geom 3: material #3 Signature { kind: "OpenPBR", cutout: false, straight: true, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:8c8b5f7964604bf5 camera=2:8c8b5f7964604bf5 shadow=2:8c8b5f7964604bf5 indirect=2:8c8b5f7964604bf5 +provenance material /World/Looks/Floor: MaterialOrigin { slots: [1], displaced: false } +provenance material /World/Looks/Pane: MaterialOrigin { slots: [3], displaced: false } +provenance material /World/Looks/Window: MaterialOrigin { slots: [2], displaced: false } +provenance light /World/Key: LightOrigin { index: 0, geoms: 0..1 } +provenance geometry 0..1: /World/Key +provenance geometry 1..2: /World/Floor +provenance geometry 2..3: /World/Window +provenance geometry 3..4: /World/Pane +provenance mesh: MeshOrigin { geom_id: 1, slot: 0, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 2, slot: 1, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 3, slot: 2, baked: true, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 6334356113930313994, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 1: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 9621829451479420765, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 1 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 2: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 12790827634220154733, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 2 }), placements: 1, shared: false, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: true, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/World/ShotCam"), cameras: ["/World/ShotCam"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/World/ShotCam"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/thin_window_usda-9e0a6257872a8f5f-1.image b/crates/crust-core/tests/data/import_baselines/thin_window_usda-9e0a6257872a8f5f-1.image new file mode 100644 index 000000000..eb2a957cb --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/thin_window_usda-9e0a6257872a8f5f-1.image @@ -0,0 +1 @@ +480x270 16spp clamp-off 12cf29137cae9287 diff --git a/crates/crust-core/tests/data/import_baselines/thin_window_usda-da2b075160721507-1.digest b/crates/crust-core/tests/data/import_baselines/thin_window_usda-da2b075160721507-1.digest new file mode 100644 index 000000000..f3e9c6285 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/thin_window_usda-da2b075160721507-1.digest @@ -0,0 +1,35 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/World/ShotCam") +camera: Camera { origin: Vec3A(0.0, 1.3, 5.0), lower_left_corner: Vec3A(-7.5000005, -6.0845304, -2.9540281), horizontal: Vec3A(15.000001, -0.0, 0.0), vertical: Vec3A(0.0, 7.9286575, -2.8857954), u: Vec3A(1.0, -0.0, 0.0), v: Vec3A(0.0, 0.9396926, -0.34202015), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: Some("/Render/settings") +settings: RenderSettings { samples_per_pixel: 64, max_depth: 8, width: 480, height: 270, region: PixelRect { x0: 0, y0: 0, x1: 480, y1: 270 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 24.0, aperture: [36.0, 15.2908], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 10.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/thin_window.usda"], invisible_overrides: Some(0) } +layer: $DIR/thin_window.usda +lights: 1 +light 0: area name Some("/World/Key") lpe None pmf 1.0 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 4 geometries, PrimitiveBreakdown { triangles: 6, spheres: 1, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 6, spheres: 1, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +geom 0: material #0 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:49b0a8af4f524a43 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=1:49b0a8af4f524a43 +geom 1: material #1 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:58d360c7905fa0c5 camera=2:58d360c7905fa0c5 shadow=2:58d360c7905fa0c5 indirect=2:58d360c7905fa0c5 +geom 2: material #2 Signature { kind: "MaterialX", cutout: false, straight: true, boundary: false, emits: false, uv: true, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:025b586767a82275 camera=2:025b586767a82275 shadow=2:025b586767a82275 indirect=2:025b586767a82275 +geom 3: material #3 Signature { kind: "OpenPBR", cutout: false, straight: true, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:8c8b5f7964604bf5 camera=2:8c8b5f7964604bf5 shadow=2:8c8b5f7964604bf5 indirect=2:8c8b5f7964604bf5 +provenance material /World/Looks/Floor: MaterialOrigin { slots: [1], displaced: false } +provenance material /World/Looks/Pane: MaterialOrigin { slots: [3], displaced: false } +provenance material /World/Looks/Window: MaterialOrigin { slots: [2], displaced: false } +provenance light /World/Key: LightOrigin { index: 0, geoms: 0..1 } +provenance geometry 0..1: /World/Key +provenance geometry 1..2: /World/Floor +provenance geometry 2..3: /World/Window +provenance geometry 3..4: /World/Pane +provenance mesh: MeshOrigin { geom_id: 1, slot: 0, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 2, slot: 1, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 3, slot: 2, baked: true, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 6334356113930313994, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 1: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 9621829451479420765, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 1 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 2: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 12790827634220154733, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 2 }), placements: 1, shared: false, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/World/ShotCam"), cameras: ["/World/ShotCam"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/World/ShotCam"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/thin_window_usda-da2b075160721507-1.image b/crates/crust-core/tests/data/import_baselines/thin_window_usda-da2b075160721507-1.image new file mode 100644 index 000000000..eb2a957cb --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/thin_window_usda-da2b075160721507-1.image @@ -0,0 +1 @@ +480x270 16spp clamp-off 12cf29137cae9287 diff --git a/crates/crust-core/tests/data/import_baselines/thin_window_usda-da2b075160721507-2.digest b/crates/crust-core/tests/data/import_baselines/thin_window_usda-da2b075160721507-2.digest new file mode 100644 index 000000000..f3e9c6285 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/thin_window_usda-da2b075160721507-2.digest @@ -0,0 +1,35 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/World/ShotCam") +camera: Camera { origin: Vec3A(0.0, 1.3, 5.0), lower_left_corner: Vec3A(-7.5000005, -6.0845304, -2.9540281), horizontal: Vec3A(15.000001, -0.0, 0.0), vertical: Vec3A(0.0, 7.9286575, -2.8857954), u: Vec3A(1.0, -0.0, 0.0), v: Vec3A(0.0, 0.9396926, -0.34202015), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: Some("/Render/settings") +settings: RenderSettings { samples_per_pixel: 64, max_depth: 8, width: 480, height: 270, region: PixelRect { x0: 0, y0: 0, x1: 480, y1: 270 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 24.0, aperture: [36.0, 15.2908], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 10.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/thin_window.usda"], invisible_overrides: Some(0) } +layer: $DIR/thin_window.usda +lights: 1 +light 0: area name Some("/World/Key") lpe None pmf 1.0 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 4 geometries, PrimitiveBreakdown { triangles: 6, spheres: 1, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 6, spheres: 1, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +geom 0: material #0 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:49b0a8af4f524a43 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=1:49b0a8af4f524a43 +geom 1: material #1 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:58d360c7905fa0c5 camera=2:58d360c7905fa0c5 shadow=2:58d360c7905fa0c5 indirect=2:58d360c7905fa0c5 +geom 2: material #2 Signature { kind: "MaterialX", cutout: false, straight: true, boundary: false, emits: false, uv: true, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:025b586767a82275 camera=2:025b586767a82275 shadow=2:025b586767a82275 indirect=2:025b586767a82275 +geom 3: material #3 Signature { kind: "OpenPBR", cutout: false, straight: true, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:8c8b5f7964604bf5 camera=2:8c8b5f7964604bf5 shadow=2:8c8b5f7964604bf5 indirect=2:8c8b5f7964604bf5 +provenance material /World/Looks/Floor: MaterialOrigin { slots: [1], displaced: false } +provenance material /World/Looks/Pane: MaterialOrigin { slots: [3], displaced: false } +provenance material /World/Looks/Window: MaterialOrigin { slots: [2], displaced: false } +provenance light /World/Key: LightOrigin { index: 0, geoms: 0..1 } +provenance geometry 0..1: /World/Key +provenance geometry 1..2: /World/Floor +provenance geometry 2..3: /World/Window +provenance geometry 3..4: /World/Pane +provenance mesh: MeshOrigin { geom_id: 1, slot: 0, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 2, slot: 1, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 3, slot: 2, baked: true, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 6334356113930313994, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 1: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 9621829451479420765, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 1 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 2: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 12790827634220154733, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 2 }), placements: 1, shared: false, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/World/ShotCam"), cameras: ["/World/ShotCam"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/World/ShotCam"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/thin_window_usda-da2b075160721507-2.image b/crates/crust-core/tests/data/import_baselines/thin_window_usda-da2b075160721507-2.image new file mode 100644 index 000000000..eb2a957cb --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/thin_window_usda-da2b075160721507-2.image @@ -0,0 +1 @@ +480x270 16spp clamp-off 12cf29137cae9287 diff --git a/crates/crust-core/tests/data/import_baselines/tiles_usda-63de672cd360cf69-1.digest b/crates/crust-core/tests/data/import_baselines/tiles_usda-63de672cd360cf69-1.digest new file mode 100644 index 000000000..28028303d --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/tiles_usda-63de672cd360cf69-1.digest @@ -0,0 +1,26 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/World/cam") +camera: Camera { origin: Vec3A(0.0, 0.0, 10.0), lower_left_corner: Vec3A(-2.0955, -1.5716249, 0.0), horizontal: Vec3A(4.191, 0.0, 0.0), vertical: Vec3A(0.0, 3.1432498, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: Some("/Render/settings") +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 48, height: 36, region: PixelRect { x0: 0, y0: 0, x1: 48, y1: 36 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [AovProduct { prim_path: "/Render/p", name: "p.exr", vars: [AovVar { prim_path: "/Render/P", name: "P", channel_prefix: None, source: P, components: 3, precision: Float, accumulation: Closest, clear: 0.0, expression: None, raw: false, variance: false }, AovVar { prim_path: "/Render/Pref", name: "Pref", channel_prefix: None, source: Primvar(PrimvarSource { index: 0, components: 3, role: Vector }), components: 3, precision: Float, accumulation: Closest, clear: 0.0, expression: None, raw: false, variance: false }, AovVar { prim_path: "/Render/Cd", name: "Cd", channel_prefix: None, source: Primvar(PrimvarSource { index: 1, components: 3, role: Color }), components: 3, precision: Float, accumulation: Filtered, clear: 0.0, expression: None, raw: false, variance: false }], attributes: [] }], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 50.0, aperture: [20.955, 15.2908], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 10.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/tiles.usda"], invisible_overrides: Some(0) } +layer: $DIR/tiles.usda +lights: 1 +light 0: dome name Some("/World/dome") lpe None pmf 1.0 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 2 geometries, PrimitiveBreakdown { triangles: 4, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 4, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov Some((Some(0), false)) swapped false curves false scale 1.0 motion [] pieces all=2:25db25008e735125 camera=2:25db25008e735125 shadow=2:25db25008e735125 indirect=2:25db25008e735125 +geom 1: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov Some((Some(1), false)) swapped false curves false scale 1.0 motion [] pieces all=2:20ce8af92139f69f camera=2:20ce8af92139f69f shadow=2:20ce8af92139f69f indirect=2:20ce8af92139f69f +provenance light /World/dome: LightOrigin { index: 0, geoms: 2..2 } +provenance geometry 0..1: /World/back +provenance geometry 1..2: /World/front +provenance mesh: MeshOrigin { geom_id: 0, slot: 0, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 1, slot: 1, baked: true, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 7627698346972322759, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 1: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 15030511554815353325, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/World/cam"), cameras: ["/World/cam"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [("rest", 3), ("displayColor", 3)], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/World/cam"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/tiles_usda-63de672cd360cf69-1.image b/crates/crust-core/tests/data/import_baselines/tiles_usda-63de672cd360cf69-1.image new file mode 100644 index 000000000..4a30c4d68 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/tiles_usda-63de672cd360cf69-1.image @@ -0,0 +1 @@ +48x36 16spp clamp-off 04cf6161c383092a diff --git a/crates/crust-core/tests/data/import_baselines/time_sampled_1_usda-ee3787d0222ab673-1.digest b/crates/crust-core/tests/data/import_baselines/time_sampled_1_usda-ee3787d0222ab673-1.digest new file mode 100644 index 000000000..706fcfc2f --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/time_sampled_1_usda-ee3787d0222ab673-1.digest @@ -0,0 +1,18 @@ +time: Some(1.0) +working space: Linear Rec.709 (sRGB) +camera path: Some("/World/other") +camera: Camera { origin: Vec3A(0.0, 0.0, 0.0), lower_left_corner: Vec3A(-2.7183647, -1.5290802, -10.0), horizontal: Vec3A(5.4367294, 0.0, 0.0), vertical: Vec3A(0.0, 3.0581603, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: Some("/Render/settings") +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 640, height: 360, region: PixelRect { x0: 0, y0: 0, x1: 640, y1: 360 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 1, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [AovProduct { prim_path: "/Render/shot", name: "shot.0001.exr", vars: [AovVar { prim_path: "/Render/beauty", name: "beauty", channel_prefix: None, source: Color, components: 4, precision: Float, accumulation: Filtered, clear: 0.0, expression: None, raw: false, variance: false }], attributes: [] }], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 50.0, aperture: [20.955, 15.2908], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 10.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/time_sampled_1.usda"], invisible_overrides: Some(0) } +layer: $DIR/time_sampled_1.usda +lights: 0 +volumes: 0 +world: 1 geometries, PrimitiveBreakdown { triangles: 0, spheres: 1, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 0, spheres: 1, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:fb1e7d48790aec95 camera=1:fb1e7d48790aec95 shadow=1:fb1e7d48790aec95 indirect=1:fb1e7d48790aec95 +provenance geometry 0..1: /World/ball +provenance spheres: [0] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: Some(1.0), camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/World/other"), cameras: ["/World/other", "/World/cam"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/World/other"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/time_sampled_1_usda-ee3787d0222ab673-1.image b/crates/crust-core/tests/data/import_baselines/time_sampled_1_usda-ee3787d0222ab673-1.image new file mode 100644 index 000000000..c734c5b1d --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/time_sampled_1_usda-ee3787d0222ab673-1.image @@ -0,0 +1 @@ +640x360 16spp clamp-off a04a09c0d4b5e325 diff --git a/crates/crust-core/tests/data/import_baselines/time_sampled_2_usda-4dad1e9703710b97-1.digest b/crates/crust-core/tests/data/import_baselines/time_sampled_2_usda-4dad1e9703710b97-1.digest new file mode 100644 index 000000000..8a161b6c2 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/time_sampled_2_usda-4dad1e9703710b97-1.digest @@ -0,0 +1,18 @@ +time: Some(2.0) +working space: Linear Rec.709 (sRGB) +camera path: Some("/World/other") +camera: Camera { origin: Vec3A(0.0, 0.0, 0.0), lower_left_corner: Vec3A(-2.7183647, -1.5290802, -10.0), horizontal: Vec3A(5.4367294, 0.0, 0.0), vertical: Vec3A(0.0, 3.0581603, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: Some("/Render/settings") +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 640, height: 360, region: PixelRect { x0: 0, y0: 0, x1: 640, y1: 360 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 2, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [AovProduct { prim_path: "/Render/shot", name: "shot.0002.exr", vars: [AovVar { prim_path: "/Render/beauty", name: "beauty", channel_prefix: None, source: Color, components: 4, precision: Float, accumulation: Filtered, clear: 0.0, expression: None, raw: false, variance: false }], attributes: [] }], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 50.0, aperture: [20.955, 15.2908], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 10.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/time_sampled_2.usda"], invisible_overrides: Some(0) } +layer: $DIR/time_sampled_2.usda +lights: 0 +volumes: 0 +world: 1 geometries, PrimitiveBreakdown { triangles: 0, spheres: 1, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 0, spheres: 1, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:fb1e7d48790aec95 camera=1:fb1e7d48790aec95 shadow=1:fb1e7d48790aec95 indirect=1:fb1e7d48790aec95 +provenance geometry 0..1: /World/ball +provenance spheres: [0] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: Some(2.0), camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/World/other"), cameras: ["/World/other", "/World/cam"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/World/other"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/time_sampled_2_usda-4dad1e9703710b97-1.image b/crates/crust-core/tests/data/import_baselines/time_sampled_2_usda-4dad1e9703710b97-1.image new file mode 100644 index 000000000..c734c5b1d --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/time_sampled_2_usda-4dad1e9703710b97-1.image @@ -0,0 +1 @@ +640x360 16spp clamp-off a04a09c0d4b5e325 diff --git a/crates/crust-core/tests/data/import_baselines/time_usda-a4ea088a5cd5b4c7-1.digest b/crates/crust-core/tests/data/import_baselines/time_usda-a4ea088a5cd5b4c7-1.digest new file mode 100644 index 000000000..e76e60d96 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/time_usda-a4ea088a5cd5b4c7-1.digest @@ -0,0 +1,17 @@ +time: Some(42.0) +working space: Linear Rec.709 (sRGB) +camera path: Some("/cam") +camera: Camera { origin: Vec3A(0.0, 0.0, 0.0), lower_left_corner: Vec3A(-2.7183647, -1.5290802, -10.0), horizontal: Vec3A(5.4367294, 0.0, 0.0), vertical: Vec3A(0.0, 3.0581603, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: None +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 640, height: 360, region: PixelRect { x0: 0, y0: 0, x1: 640, y1: 360 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 42, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 50.0, aperture: [20.955, 15.2908], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 10.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/time.usda"], invisible_overrides: Some(0) } +layer: $DIR/time.usda +warning: Warning { code: TimeOutsideRange, kind: Approximated, count: 1, prims: [], message: "Frame 42 is outside the stage's time range [1, 10]; animated attributes hold their nearest time sample" } +lights: 0 +volumes: 0 +world: 0 geometries, PrimitiveBreakdown { triangles: 0, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 0, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: Some(42.0), camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/cam"), cameras: ["/cam"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/cam"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/time_usda-a4ea088a5cd5b4c7-1.image b/crates/crust-core/tests/data/import_baselines/time_usda-a4ea088a5cd5b4c7-1.image new file mode 100644 index 000000000..c734c5b1d --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/time_usda-a4ea088a5cd5b4c7-1.image @@ -0,0 +1 @@ +640x360 16spp clamp-off a04a09c0d4b5e325 diff --git a/crates/crust-core/tests/data/import_baselines/tolerance_default_usda-3a112890c553cc1b-1.digest b/crates/crust-core/tests/data/import_baselines/tolerance_default_usda-3a112890c553cc1b-1.digest new file mode 100644 index 000000000..67dc8b3b3 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/tolerance_default_usda-3a112890c553cc1b-1.digest @@ -0,0 +1,17 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: None +camera: Camera { origin: Vec3A(15.0, 3.0, 3.0), lower_left_corner: Vec3A(4.8863316, -0.044797063, 4.174048), horizontal: Vec3A(1.2295314, 0.0, -6.147657), vertical: Vec3A(-0.44830504, 3.4967792, -0.08966101), u: Vec3A(0.19611613, 0.0, -0.9805807), v: Vec3A(-0.1271232, 0.991561, -0.02542464), lens_radius: 0.05, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: Some("/Render/settings") +settings: RenderSettings { samples_per_pixel: 7, max_depth: 3, width: 32, height: 16, region: PixelRect { x0: 0, y0: 0, x1: 32, y1: 16 }, min_samples_per_pixel: 2, variance_threshold: 0.1, adaptive_neighbour_tolerance: 1.0, frame: 4, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: BalanceMis, pixel_filter: Gaussian { radius: 2.5 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 4, light_samples_indirect: 2, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: None, depth_of_field: true, motion_blur: false, layer_stack: ["$DIR/tolerance_default.usda"], invisible_overrides: Some(0) } +layer: $DIR/tolerance_default.usda +warning: Warning { code: CameraMissing, kind: Skipped, count: 1, prims: [], message: "USD stage has no UsdGeomCamera — falling back to world::get_settings camera" } +lights: 0 +volumes: 0 +world: 0 geometries, PrimitiveBreakdown { triangles: 0, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 0, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: None, cameras: [], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: None, offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/tolerance_default_usda-3a112890c553cc1b-1.image b/crates/crust-core/tests/data/import_baselines/tolerance_default_usda-3a112890c553cc1b-1.image new file mode 100644 index 000000000..f0b9b5b6b --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/tolerance_default_usda-3a112890c553cc1b-1.image @@ -0,0 +1 @@ +32x16 16spp clamp-off 6df0de0551480325 diff --git a/crates/crust-core/tests/data/import_baselines/tolerance_nan_usda-22547c2684ba9e8c-1.digest b/crates/crust-core/tests/data/import_baselines/tolerance_nan_usda-22547c2684ba9e8c-1.digest new file mode 100644 index 000000000..0abdf2a83 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/tolerance_nan_usda-22547c2684ba9e8c-1.digest @@ -0,0 +1,18 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: None +camera: Camera { origin: Vec3A(15.0, 3.0, 3.0), lower_left_corner: Vec3A(4.8863316, -0.044797063, 4.174048), horizontal: Vec3A(1.2295314, 0.0, -6.147657), vertical: Vec3A(-0.44830504, 3.4967792, -0.08966101), u: Vec3A(0.19611613, 0.0, -0.9805807), v: Vec3A(-0.1271232, 0.991561, -0.02542464), lens_radius: 0.05, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: Some("/Render/settings") +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 640, height: 360, region: PixelRect { x0: 0, y0: 0, x1: 640, y1: 360 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: None, depth_of_field: true, motion_blur: false, layer_stack: ["$DIR/tolerance_nan.usda"], invisible_overrides: Some(0) } +layer: $DIR/tolerance_nan.usda +warning: Warning { code: SettingsInvalidValue, kind: Refused, count: 1, prims: ["/Render/settings"], message: "crust:adaptiveNeighbourTolerance = NaN is not finite — using 1" } +warning: Warning { code: CameraMissing, kind: Skipped, count: 1, prims: [], message: "USD stage has no UsdGeomCamera — falling back to world::get_settings camera" } +lights: 0 +volumes: 0 +world: 0 geometries, PrimitiveBreakdown { triangles: 0, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 0, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: None, cameras: [], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: None, offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/tolerance_nan_usda-22547c2684ba9e8c-1.image b/crates/crust-core/tests/data/import_baselines/tolerance_nan_usda-22547c2684ba9e8c-1.image new file mode 100644 index 000000000..c734c5b1d --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/tolerance_nan_usda-22547c2684ba9e8c-1.image @@ -0,0 +1 @@ +640x360 16spp clamp-off a04a09c0d4b5e325 diff --git a/crates/crust-core/tests/data/import_baselines/tolerance_off_usda-f5f012b4db29329d-1.digest b/crates/crust-core/tests/data/import_baselines/tolerance_off_usda-f5f012b4db29329d-1.digest new file mode 100644 index 000000000..af3c51260 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/tolerance_off_usda-f5f012b4db29329d-1.digest @@ -0,0 +1,17 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: None +camera: Camera { origin: Vec3A(15.0, 3.0, 3.0), lower_left_corner: Vec3A(4.8863316, -0.044797063, 4.174048), horizontal: Vec3A(1.2295314, 0.0, -6.147657), vertical: Vec3A(-0.44830504, 3.4967792, -0.08966101), u: Vec3A(0.19611613, 0.0, -0.9805807), v: Vec3A(-0.1271232, 0.991561, -0.02542464), lens_radius: 0.05, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: Some("/Render/settings") +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 640, height: 360, region: PixelRect { x0: 0, y0: 0, x1: 640, y1: 360 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: -1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: None, depth_of_field: true, motion_blur: false, layer_stack: ["$DIR/tolerance_off.usda"], invisible_overrides: Some(0) } +layer: $DIR/tolerance_off.usda +warning: Warning { code: CameraMissing, kind: Skipped, count: 1, prims: [], message: "USD stage has no UsdGeomCamera — falling back to world::get_settings camera" } +lights: 0 +volumes: 0 +world: 0 geometries, PrimitiveBreakdown { triangles: 0, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 0, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: None, cameras: [], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: None, offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/tolerance_off_usda-f5f012b4db29329d-1.image b/crates/crust-core/tests/data/import_baselines/tolerance_off_usda-f5f012b4db29329d-1.image new file mode 100644 index 000000000..c734c5b1d --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/tolerance_off_usda-f5f012b4db29329d-1.image @@ -0,0 +1 @@ +640x360 16spp clamp-off a04a09c0d4b5e325 diff --git a/crates/crust-core/tests/data/import_baselines/translate_scale_usda-f3698f1a1411c8b2-1.digest b/crates/crust-core/tests/data/import_baselines/translate_scale_usda-f3698f1a1411c8b2-1.digest new file mode 100644 index 000000000..7a72dde50 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/translate_scale_usda-f3698f1a1411c8b2-1.digest @@ -0,0 +1,21 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: None +camera: Camera { origin: Vec3A(15.0, 3.0, 3.0), lower_left_corner: Vec3A(4.8863316, -0.044797063, 4.174048), horizontal: Vec3A(1.2295314, 0.0, -6.147657), vertical: Vec3A(-0.44830504, 3.4967792, -0.08966101), u: Vec3A(0.19611613, 0.0, -0.9805807), v: Vec3A(-0.1271232, 0.991561, -0.02542464), lens_radius: 0.05, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: None +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 640, height: 360, region: PixelRect { x0: 0, y0: 0, x1: 640, y1: 360 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: None, depth_of_field: true, motion_blur: false, layer_stack: ["$DIR/translate_scale.usda"], invisible_overrides: Some(0) } +layer: $DIR/translate_scale.usda +warning: Warning { code: CameraMissing, kind: Skipped, count: 1, prims: [], message: "USD stage has no UsdGeomCamera — falling back to world::get_settings camera" } +lights: 0 +volumes: 0 +world: 1 geometries, PrimitiveBreakdown { triangles: 2, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 2, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 2.0 motion [] pieces all=2:014f7263e760b405 camera=2:014f7263e760b405 shadow=2:014f7263e760b405 indirect=2:014f7263e760b405 +provenance geometry 0..1: /World/A/Quad +provenance mesh: MeshOrigin { geom_id: 0, slot: 0, baked: true, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 14414187199170096052, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: None, cameras: [], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: None, offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/translate_scale_usda-f3698f1a1411c8b2-1.image b/crates/crust-core/tests/data/import_baselines/translate_scale_usda-f3698f1a1411c8b2-1.image new file mode 100644 index 000000000..c734c5b1d --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/translate_scale_usda-f3698f1a1411c8b2-1.image @@ -0,0 +1 @@ +640x360 16spp clamp-off a04a09c0d4b5e325 diff --git a/crates/crust-core/tests/data/import_baselines/translatex_curves_usda-65ef3846123d9b35-1.digest b/crates/crust-core/tests/data/import_baselines/translatex_curves_usda-65ef3846123d9b35-1.digest new file mode 100644 index 000000000..d92327676 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/translatex_curves_usda-65ef3846123d9b35-1.digest @@ -0,0 +1,19 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: None +camera: Camera { origin: Vec3A(15.0, 3.0, 3.0), lower_left_corner: Vec3A(4.8863316, -0.044797063, 4.174048), horizontal: Vec3A(1.2295314, 0.0, -6.147657), vertical: Vec3A(-0.44830504, 3.4967792, -0.08966101), u: Vec3A(0.19611613, 0.0, -0.9805807), v: Vec3A(-0.1271232, 0.991561, -0.02542464), lens_radius: 0.05, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: None +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 640, height: 360, region: PixelRect { x0: 0, y0: 0, x1: 640, y1: 360 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: None, depth_of_field: true, motion_blur: false, layer_stack: ["$DIR/translatex_curves.usda"], invisible_overrides: Some(0) } +layer: $DIR/translatex_curves.usda +warning: Warning { code: CameraMissing, kind: Skipped, count: 1, prims: [], message: "USD stage has no UsdGeomCamera — falling back to world::get_settings camera" } +lights: 0 +volumes: 0 +world: 1 geometries, PrimitiveBreakdown { triangles: 0, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 1 } top level, PrimitiveBreakdown { triangles: 0, spheres: 0, disks: 0, cylinders: 0, curve_segments: 1, cubic_curve_spans: 0, instances: 1 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: Some((false, false, [])), primvars: None } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves true scale 1.0 motion [] pieces all=1:54eca4df97173997 camera=1:54eca4df97173997 shadow=1:54eca4df97173997 indirect=1:54eca4df97173997 +provenance geometry 0..1: /W/C +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: None, cameras: [], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: None, offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/translatex_curves_usda-65ef3846123d9b35-1.image b/crates/crust-core/tests/data/import_baselines/translatex_curves_usda-65ef3846123d9b35-1.image new file mode 100644 index 000000000..c734c5b1d --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/translatex_curves_usda-65ef3846123d9b35-1.image @@ -0,0 +1 @@ +640x360 16spp clamp-off a04a09c0d4b5e325 diff --git a/crates/crust-core/tests/data/import_baselines/translatex_disk_usda-9d38522639915278-1.digest b/crates/crust-core/tests/data/import_baselines/translatex_disk_usda-9d38522639915278-1.digest new file mode 100644 index 000000000..78684174e --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/translatex_disk_usda-9d38522639915278-1.digest @@ -0,0 +1,21 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: None +camera: Camera { origin: Vec3A(15.0, 3.0, 3.0), lower_left_corner: Vec3A(4.8863316, -0.044797063, 4.174048), horizontal: Vec3A(1.2295314, 0.0, -6.147657), vertical: Vec3A(-0.44830504, 3.4967792, -0.08966101), u: Vec3A(0.19611613, 0.0, -0.9805807), v: Vec3A(-0.1271232, 0.991561, -0.02542464), lens_radius: 0.05, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: None +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 640, height: 360, region: PixelRect { x0: 0, y0: 0, x1: 640, y1: 360 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: None, depth_of_field: true, motion_blur: false, layer_stack: ["$DIR/translatex_disk.usda"], invisible_overrides: Some(0) } +layer: $DIR/translatex_disk.usda +warning: Warning { code: CameraMissing, kind: Skipped, count: 1, prims: [], message: "USD stage has no UsdGeomCamera — falling back to world::get_settings camera" } +lights: 1 +light 0: area name Some("/W/D") lpe None pmf 1.0 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 1 geometries, PrimitiveBreakdown { triangles: 0, spheres: 0, disks: 1, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 0, spheres: 0, disks: 1, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +geom 0: material #0 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:e39c0b05fb39fbb2 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=1:e39c0b05fb39fbb2 +provenance light /W/D: LightOrigin { index: 0, geoms: 0..1 } +provenance geometry 0..1: /W/D +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: None, cameras: [], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: None, offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/translatex_disk_usda-9d38522639915278-1.image b/crates/crust-core/tests/data/import_baselines/translatex_disk_usda-9d38522639915278-1.image new file mode 100644 index 000000000..c734c5b1d --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/translatex_disk_usda-9d38522639915278-1.image @@ -0,0 +1 @@ +640x360 16spp clamp-off a04a09c0d4b5e325 diff --git a/crates/crust-core/tests/data/import_baselines/tuft_shadow_usda-1baacafb4242e12e-1.digest b/crates/crust-core/tests/data/import_baselines/tuft_shadow_usda-1baacafb4242e12e-1.digest new file mode 100644 index 000000000..f0e1e7550 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/tuft_shadow_usda-1baacafb4242e12e-1.digest @@ -0,0 +1,28 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: None +camera: Camera { origin: Vec3A(15.0, 3.0, 3.0), lower_left_corner: Vec3A(4.8863316, -0.044797063, 4.174048), horizontal: Vec3A(1.2295314, 0.0, -6.147657), vertical: Vec3A(-0.44830504, 3.4967792, -0.08966101), u: Vec3A(0.19611613, 0.0, -0.9805807), v: Vec3A(-0.1271232, 0.991561, -0.02542464), lens_radius: 0.05, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: None +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 640, height: 360, region: PixelRect { x0: 0, y0: 0, x1: 640, y1: 360 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: None, depth_of_field: true, motion_blur: false, layer_stack: ["$DIR/tuft_shadow.usda"], invisible_overrides: Some(0) } +layer: $DIR/tuft_shadow.usda +warning: Warning { code: CameraMissing, kind: Skipped, count: 1, prims: [], message: "USD stage has no UsdGeomCamera — falling back to world::get_settings camera" } +lights: 1 +light 0: area name Some("/World/Top") lpe None pmf 1.0 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 3 geometries, PrimitiveBreakdown { triangles: 2, spheres: 1, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 1 } top level, PrimitiveBreakdown { triangles: 2, spheres: 1, disks: 0, cylinders: 0, curve_segments: 3, cubic_curve_spans: 0, instances: 1 } unique, motion false +geom 0: material #0 Signature { kind: "MaterialX", cutout: false, straight: false, boundary: false, emits: false, uv: true, uv_primvar: None, face_texture: None, curve: Some((false, false, [])), primvars: None } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves true scale 1.0 motion [] pieces all=3:34486483e0680ea8 camera=3:34486483e0680ea8 shadow=3:34486483e0680ea8 indirect=3:34486483e0680ea8 +geom 1: material #1 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:fce6de5b675a55c5 camera=2:fce6de5b675a55c5 shadow=2:fce6de5b675a55c5 indirect=2:fce6de5b675a55c5 +geom 2: material #2 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:e939c6ba7277c7b1 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=1:e939c6ba7277c7b1 +provenance material /World/Looks/mtlx_hair_clear: MaterialOrigin { slots: [0], displaced: false } +provenance light /World/Top: LightOrigin { index: 0, geoms: 2..3 } +provenance geometry 0..1: /World/Tuft +provenance geometry 1..2: /World/Floor +provenance geometry 2..3: /World/Top +provenance mesh: MeshOrigin { geom_id: 1, slot: 0, baked: true, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 14903623499644419787, n_points: 4, n_indices: 4, n_uvs: None, smooth: true, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: None, cameras: [], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: None, offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/tuft_shadow_usda-1baacafb4242e12e-1.image b/crates/crust-core/tests/data/import_baselines/tuft_shadow_usda-1baacafb4242e12e-1.image new file mode 100644 index 000000000..489355c92 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/tuft_shadow_usda-1baacafb4242e12e-1.image @@ -0,0 +1 @@ +640x360 16spp clamp-off 411019cc72b6935b diff --git a/crates/crust-core/tests/data/import_baselines/twice_a_usda-0f943c80bd7e2c65-1.digest b/crates/crust-core/tests/data/import_baselines/twice_a_usda-0f943c80bd7e2c65-1.digest new file mode 100644 index 000000000..6ab57baa8 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/twice_a_usda-0f943c80bd7e2c65-1.digest @@ -0,0 +1,23 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: None +camera: Camera { origin: Vec3A(15.0, 3.0, 3.0), lower_left_corner: Vec3A(4.8863316, -0.044797063, 4.174048), horizontal: Vec3A(1.2295314, 0.0, -6.147657), vertical: Vec3A(-0.44830504, 3.4967792, -0.08966101), u: Vec3A(0.19611613, 0.0, -0.9805807), v: Vec3A(-0.1271232, 0.991561, -0.02542464), lens_radius: 0.05, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: None +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 640, height: 360, region: PixelRect { x0: 0, y0: 0, x1: 640, y1: 360 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: None, depth_of_field: true, motion_blur: false, layer_stack: ["$DIR/twice_a.usda"], invisible_overrides: Some(0) } +layer: $DIR/twice_a.usda +warning: Warning { code: CameraMissing, kind: Skipped, count: 1, prims: [], message: "USD stage has no UsdGeomCamera — falling back to world::get_settings camera" } +lights: 0 +volumes: 0 +world: 2 geometries, PrimitiveBreakdown { triangles: 2, spheres: 1, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 2, spheres: 1, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:40a1409b067b13e5 camera=2:40a1409b067b13e5 shadow=2:40a1409b067b13e5 indirect=2:40a1409b067b13e5 +geom 1: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:0e5e0fe2df6a1be5 camera=1:0e5e0fe2df6a1be5 shadow=1:0e5e0fe2df6a1be5 indirect=1:0e5e0fe2df6a1be5 +provenance geometry 0..1: /World/Q +provenance geometry 1..2: /World/A +provenance mesh: MeshOrigin { geom_id: 0, slot: 0, baked: true, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 2488158973558984587, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [1] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: None, cameras: [], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: None, offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/twice_a_usda-0f943c80bd7e2c65-1.image b/crates/crust-core/tests/data/import_baselines/twice_a_usda-0f943c80bd7e2c65-1.image new file mode 100644 index 000000000..c734c5b1d --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/twice_a_usda-0f943c80bd7e2c65-1.image @@ -0,0 +1 @@ +640x360 16spp clamp-off a04a09c0d4b5e325 diff --git a/crates/crust-core/tests/data/import_baselines/twice_b_usda-b96b0ece9c5875aa-1.digest b/crates/crust-core/tests/data/import_baselines/twice_b_usda-b96b0ece9c5875aa-1.digest new file mode 100644 index 000000000..13e63f94e --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/twice_b_usda-b96b0ece9c5875aa-1.digest @@ -0,0 +1,23 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: None +camera: Camera { origin: Vec3A(15.0, 3.0, 3.0), lower_left_corner: Vec3A(4.8863316, -0.044797063, 4.174048), horizontal: Vec3A(1.2295314, 0.0, -6.147657), vertical: Vec3A(-0.44830504, 3.4967792, -0.08966101), u: Vec3A(0.19611613, 0.0, -0.9805807), v: Vec3A(-0.1271232, 0.991561, -0.02542464), lens_radius: 0.05, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: None +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 640, height: 360, region: PixelRect { x0: 0, y0: 0, x1: 640, y1: 360 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: None, depth_of_field: true, motion_blur: false, layer_stack: ["$DIR/twice_b.usda"], invisible_overrides: Some(0) } +layer: $DIR/twice_b.usda +warning: Warning { code: CameraMissing, kind: Skipped, count: 1, prims: [], message: "USD stage has no UsdGeomCamera — falling back to world::get_settings camera" } +lights: 0 +volumes: 0 +world: 2 geometries, PrimitiveBreakdown { triangles: 2, spheres: 1, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 2, spheres: 1, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:40a1409b067b13e5 camera=2:40a1409b067b13e5 shadow=2:40a1409b067b13e5 indirect=2:40a1409b067b13e5 +geom 1: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:0e5e0fe2df6a1be5 camera=1:0e5e0fe2df6a1be5 shadow=1:0e5e0fe2df6a1be5 indirect=1:0e5e0fe2df6a1be5 +provenance geometry 0..1: /World/Q +provenance geometry 1..2: /World/A +provenance mesh: MeshOrigin { geom_id: 0, slot: 0, baked: true, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 2488158973558984587, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [1] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: None, cameras: [], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: None, offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/twice_b_usda-b96b0ece9c5875aa-1.image b/crates/crust-core/tests/data/import_baselines/twice_b_usda-b96b0ece9c5875aa-1.image new file mode 100644 index 000000000..c734c5b1d --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/twice_b_usda-b96b0ece9c5875aa-1.image @@ -0,0 +1 @@ +640x360 16spp clamp-off a04a09c0d4b5e325 diff --git a/crates/crust-core/tests/data/import_baselines/two_cameras_broken_first_usda-3cb7946e1e445b8e-1.digest b/crates/crust-core/tests/data/import_baselines/two_cameras_broken_first_usda-3cb7946e1e445b8e-1.digest new file mode 100644 index 000000000..4c0a29525 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/two_cameras_broken_first_usda-3cb7946e1e445b8e-1.digest @@ -0,0 +1,16 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/shot") +camera: Camera { origin: Vec3A(0.0, 0.0, 0.0), lower_left_corner: Vec3A(-2.7183647, -1.5290802, -10.0), horizontal: Vec3A(5.4367294, 0.0, 0.0), vertical: Vec3A(0.0, 3.0581603, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: Some("/Render/settings") +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 640, height: 360, region: PixelRect { x0: 0, y0: 0, x1: 640, y1: 360 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 4.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 50.0, aperture: [20.955, 15.2908], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 10.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/two_cameras_broken_first.usda"], invisible_overrides: Some(0) } +layer: $DIR/two_cameras_broken_first.usda +lights: 0 +volumes: 0 +world: 0 geometries, PrimitiveBreakdown { triangles: 0, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 0, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/shot"), cameras: ["/shot", "/broken"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/shot"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/two_cameras_broken_first_usda-3cb7946e1e445b8e-1.image b/crates/crust-core/tests/data/import_baselines/two_cameras_broken_first_usda-3cb7946e1e445b8e-1.image new file mode 100644 index 000000000..c734c5b1d --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/two_cameras_broken_first_usda-3cb7946e1e445b8e-1.image @@ -0,0 +1 @@ +640x360 16spp clamp-off a04a09c0d4b5e325 diff --git a/crates/crust-core/tests/data/import_baselines/two_cameras_shot_first_usda-a7d808f7cd7c7a83-1.digest b/crates/crust-core/tests/data/import_baselines/two_cameras_shot_first_usda-a7d808f7cd7c7a83-1.digest new file mode 100644 index 000000000..3a754c982 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/two_cameras_shot_first_usda-a7d808f7cd7c7a83-1.digest @@ -0,0 +1,16 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/shot") +camera: Camera { origin: Vec3A(0.0, 0.0, 0.0), lower_left_corner: Vec3A(-2.7183647, -1.5290802, -10.0), horizontal: Vec3A(5.4367294, 0.0, 0.0), vertical: Vec3A(0.0, 3.0581603, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: Some("/Render/settings") +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 640, height: 360, region: PixelRect { x0: 0, y0: 0, x1: 640, y1: 360 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 4.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 50.0, aperture: [20.955, 15.2908], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 10.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/two_cameras_shot_first.usda"], invisible_overrides: Some(0) } +layer: $DIR/two_cameras_shot_first.usda +lights: 0 +volumes: 0 +world: 0 geometries, PrimitiveBreakdown { triangles: 0, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 0, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/shot"), cameras: ["/broken", "/shot"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/shot"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/two_cameras_shot_first_usda-a7d808f7cd7c7a83-1.image b/crates/crust-core/tests/data/import_baselines/two_cameras_shot_first_usda-a7d808f7cd7c7a83-1.image new file mode 100644 index 000000000..c734c5b1d --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/two_cameras_shot_first_usda-a7d808f7cd7c7a83-1.image @@ -0,0 +1 @@ +640x360 16spp clamp-off a04a09c0d4b5e325 diff --git a/crates/crust-core/tests/data/import_baselines/two_instancers_usda-287c7bdad0690e3b-1.digest b/crates/crust-core/tests/data/import_baselines/two_instancers_usda-287c7bdad0690e3b-1.digest new file mode 100644 index 000000000..2f63fe63f --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/two_instancers_usda-287c7bdad0690e3b-1.digest @@ -0,0 +1,21 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/W/Cam") +camera: Camera { origin: Vec3A(0.0, 0.0, 0.0), lower_left_corner: Vec3A(-2.0955, -1.1787187, -10.0), horizontal: Vec3A(4.191, 0.0, 0.0), vertical: Vec3A(0.0, 2.3574374, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: Some("/Render/settings") +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 640, height: 360, region: PixelRect { x0: 0, y0: 0, x1: 640, y1: 360 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 50.0, aperture: [20.955, 11.787188], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 10.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/two_instancers.usda"], invisible_overrides: Some(0) } +layer: $DIR/two_instancers.usda +lights: 0 +volumes: 0 +world: 2 geometries, PrimitiveBreakdown { triangles: 0, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 2 } top level, PrimitiveBreakdown { triangles: 12, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 2 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=12:79242cac1c06bed5 camera=12:79242cac1c06bed5 shadow=12:79242cac1c06bed5 indirect=12:79242cac1c06bed5 +geom 1: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=12:30eed4ffaf7e9cd5 camera=12:30eed4ffaf7e9cd5 shadow=12:30eed4ffaf7e9cd5 indirect=12:30eed4ffaf7e9cd5 +provenance geometry 0..1: /W/Group/Right +provenance geometry 1..2: /W/Group/Left +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 14289806633734265804, n_points: 8, n_indices: 24, n_uvs: None, smooth: true, material: 0 }), placements: 0, shared: true, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: Some(ScreenKey([0, 0, 0, 1153360542, 0, 0, 0, 3212836864, 0, 3193345094, 1065353216, 0, 3193345094, 0, 3212836864, 3186714319, 0, 1065353216, 3186714319, 0, 0, 3212836864, 1073741824, 3])), domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/W/Cam"), cameras: ["/W/Cam"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/W/Cam"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/two_instancers_usda-287c7bdad0690e3b-1.image b/crates/crust-core/tests/data/import_baselines/two_instancers_usda-287c7bdad0690e3b-1.image new file mode 100644 index 000000000..c734c5b1d --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/two_instancers_usda-287c7bdad0690e3b-1.image @@ -0,0 +1 @@ +640x360 16spp clamp-off a04a09c0d4b5e325 diff --git a/crates/crust-core/tests/data/import_baselines/unauthored_usda-1a04ae4ebcf35cb8-1.digest b/crates/crust-core/tests/data/import_baselines/unauthored_usda-1a04ae4ebcf35cb8-1.digest new file mode 100644 index 000000000..9277973bd --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/unauthored_usda-1a04ae4ebcf35cb8-1.digest @@ -0,0 +1,18 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/World/Cam") +camera: Camera { origin: Vec3A(0.0, 0.0, 5.0), lower_left_corner: Vec3A(-0.27183646, -0.15290801, -5.0), horizontal: Vec3A(0.5436729, 0.0, 0.0), vertical: Vec3A(0.0, 0.30581602, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: None +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 640, height: 360, region: PixelRect { x0: 0, y0: 0, x1: 640, y1: 360 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 500.0, aperture: [20.955, 15.2908], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 10.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/unauthored.usda"], invisible_overrides: Some(0) } +layer: $DIR/unauthored.usda +lights: 0 +volumes: 0 +world: 1 geometries, PrimitiveBreakdown { triangles: 0, spheres: 1, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 0, spheres: 1, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:d5fa2ac5108a1585 camera=1:d5fa2ac5108a1585 shadow=1:d5fa2ac5108a1585 indirect=1:d5fa2ac5108a1585 +provenance geometry 0..1: /World/Ball +provenance spheres: [0] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/World/Cam"), cameras: ["/World/Cam"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/World/Cam"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/unauthored_usda-1a04ae4ebcf35cb8-1.image b/crates/crust-core/tests/data/import_baselines/unauthored_usda-1a04ae4ebcf35cb8-1.image new file mode 100644 index 000000000..c734c5b1d --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/unauthored_usda-1a04ae4ebcf35cb8-1.image @@ -0,0 +1 @@ +640x360 16spp clamp-off a04a09c0d4b5e325 diff --git a/crates/crust-core/tests/data/import_baselines/unauthored_usda-9a9d89c801b1b740-1.digest b/crates/crust-core/tests/data/import_baselines/unauthored_usda-9a9d89c801b1b740-1.digest new file mode 100644 index 000000000..8dc9b46a1 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/unauthored_usda-9a9d89c801b1b740-1.digest @@ -0,0 +1,30 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/World/Cam") +camera: Camera { origin: Vec3A(0.0, 2.3, 8.5), lower_left_corner: Vec3A(-4.4023113, -1.5620966, -1.0554943), horizontal: Vec3A(8.804623, -0.0, 0.0), vertical: Vec3A(0.0, 4.9407306, -0.6943745), u: Vec3A(1.0, -0.0, 0.0), v: Vec3A(0.0, 0.9902681, -0.13917312), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: Some("/Render/settings") +settings: RenderSettings { samples_per_pixel: 32, max_depth: 8, width: 240, height: 136, region: PixelRect { x0: 0, y0: 0, x1: 240, y1: 136 }, min_samples_per_pixel: 16, variance_threshold: 0.02, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 28.0, aperture: [20.955, 13.97], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 10.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/unauthored.usda", "$ROOT/samples/dome_backdrop.usda"], invisible_overrides: Some(0) } +layer: $ROOT/samples/dome_backdrop.usda +layer: $DIR/unauthored.usda +lights: 1 +light 0: dome name Some("/World/Hdri") lpe None pmf 1.0 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 3 geometries, PrimitiveBreakdown { triangles: 2, spheres: 2, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 2, spheres: 2, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:f6fecef7f865e305 camera=2:f6fecef7f865e305 shadow=2:f6fecef7f865e305 indirect=2:f6fecef7f865e305 +geom 1: material #1 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:571f57a6ae5dd002 camera=1:571f57a6ae5dd002 shadow=1:571f57a6ae5dd002 indirect=1:571f57a6ae5dd002 +geom 2: material #2 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:bb4ca329e9417ce2 camera=1:bb4ca329e9417ce2 shadow=1:bb4ca329e9417ce2 indirect=1:bb4ca329e9417ce2 +provenance material /World/Looks/Clay: MaterialOrigin { slots: [1], displaced: false } +provenance material /World/Looks/Ground: MaterialOrigin { slots: [0], displaced: false } +provenance material /World/Looks/Mirror: MaterialOrigin { slots: [2], displaced: false } +provenance light /World/Hdri: LightOrigin { index: 0, geoms: 3..3 } +provenance geometry 0..1: /World/Floor +provenance geometry 1..2: /World/Matte +provenance geometry 2..3: /World/Mirror +provenance mesh: MeshOrigin { geom_id: 0, slot: 0, baked: true, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 10492340787237780741, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [1, 2] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/World/Cam"), cameras: ["/World/Cam"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/World/Cam"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/unauthored_usda-9a9d89c801b1b740-1.image b/crates/crust-core/tests/data/import_baselines/unauthored_usda-9a9d89c801b1b740-1.image new file mode 100644 index 000000000..9b1ded9a0 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/unauthored_usda-9a9d89c801b1b740-1.image @@ -0,0 +1 @@ +240x136 16spp clamp-off 2a2ae02b81d14fd2 diff --git a/crates/crust-core/tests/data/import_baselines/unbindable_usda-a5d47f8d674e7ddd-1.digest b/crates/crust-core/tests/data/import_baselines/unbindable_usda-a5d47f8d674e7ddd-1.digest new file mode 100644 index 000000000..b3b8b2440 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/unbindable_usda-a5d47f8d674e7ddd-1.digest @@ -0,0 +1,27 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/World/cam") +camera: Camera { origin: Vec3A(0.0, 0.0, 0.0), lower_left_corner: Vec3A(-5.0, -3.75, -10.0), horizontal: Vec3A(10.0, 0.0, 0.0), vertical: Vec3A(0.0, 7.5, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: Some("/Render/settings") +settings: RenderSettings { samples_per_pixel: 16, max_depth: 2, width: 32, height: 24, region: PixelRect { x0: 0, y0: 0, x1: 32, y1: 24 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [AovProduct { prim_path: "/Render/p", name: "p.exr", vars: [AovVar { prim_path: "/Render/C", name: "C", channel_prefix: None, source: Color, components: 3, precision: Float, accumulation: Filtered, clear: 0.0, expression: None, raw: false, variance: false }, AovVar { prim_path: "/Render/matte", name: "matte", channel_prefix: None, source: Primvar(PrimvarSource { index: 0, components: 1, role: Float }), components: 1, precision: Float, accumulation: Filtered, clear: 0.0, expression: None, raw: false, variance: false }, AovVar { prim_path: "/Render/depth", name: "depth", channel_prefix: None, source: Depth, components: 1, precision: Float, accumulation: Closest, clear: inf, expression: None, raw: false, variance: false }, AovVar { prim_path: "/Render/depth_filtered", name: "depth_filtered", channel_prefix: None, source: Depth, components: 1, precision: Float, accumulation: Filtered, clear: inf, expression: None, raw: false, variance: false }, AovVar { prim_path: "/Render/variance", name: "variance", channel_prefix: None, source: Variance, components: 1, precision: Float, accumulation: Filtered, clear: 0.0, expression: None, raw: false, variance: false }], attributes: [] }], precomp: Some(Precomp { sample_filters: ["/Render/g"], display_filters: [], display: "beauty" }) } +pass: None +source: Source { lens: Some(Lens { focal_length: 24.0, aperture: [24.0, 18.0], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 10.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/unbindable.usda"], invisible_overrides: Some(0) } +layer: $DIR/unbindable.usda +warning: Warning { code: PrecompUnbindableInput, kind: Refused, count: 1, prims: ["/Render/g"], message: "/Render/g: input \"variance\" reads /Render/variance, which has no per-sample value; it reads its default" } +lights: 1 +light 0: dome name Some("/World/sky") lpe None pmf 1.0 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 2 geometries, PrimitiveBreakdown { triangles: 4, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 4, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov Some((Some(0), false)) swapped false curves false scale 1.0 motion [] pieces all=2:2a13523c8e09c13d camera=2:2a13523c8e09c13d shadow=2:2a13523c8e09c13d indirect=2:2a13523c8e09c13d +geom 1: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:31db52e4afd4a225 camera=2:31db52e4afd4a225 shadow=2:31db52e4afd4a225 indirect=2:31db52e4afd4a225 +provenance light /World/sky: LightOrigin { index: 0, geoms: 0..0 } +provenance geometry 0..1: /World/Card +provenance geometry 1..2: /World/Wall +provenance mesh: MeshOrigin { geom_id: 0, slot: 0, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 1, slot: 1, baked: true, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 3430351340666728903, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 1: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 13118596165941616386, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: true, working: None, camera: Some("/World/cam"), cameras: ["/World/cam"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [("matte", 1)], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/World/cam"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/unbindable_usda-a5d47f8d674e7ddd-1.image b/crates/crust-core/tests/data/import_baselines/unbindable_usda-a5d47f8d674e7ddd-1.image new file mode 100644 index 000000000..f08c49d36 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/unbindable_usda-a5d47f8d674e7ddd-1.image @@ -0,0 +1 @@ +32x24 16spp clamp-off e72b7b7cff87e77d diff --git a/crates/crust-core/tests/data/import_baselines/unbound_usda-19c17e4f548a50df-1.digest b/crates/crust-core/tests/data/import_baselines/unbound_usda-19c17e4f548a50df-1.digest new file mode 100644 index 000000000..272b4c3a0 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/unbound_usda-19c17e4f548a50df-1.digest @@ -0,0 +1,23 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: None +camera: Camera { origin: Vec3A(15.0, 3.0, 3.0), lower_left_corner: Vec3A(4.8863316, -0.044797063, 4.174048), horizontal: Vec3A(1.2295314, 0.0, -6.147657), vertical: Vec3A(-0.44830504, 3.4967792, -0.08966101), u: Vec3A(0.19611613, 0.0, -0.9805807), v: Vec3A(-0.1271232, 0.991561, -0.02542464), lens_radius: 0.05, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: None +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 640, height: 360, region: PixelRect { x0: 0, y0: 0, x1: 640, y1: 360 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: None, depth_of_field: true, motion_blur: false, layer_stack: ["$DIR/unbound.usda"], invisible_overrides: Some(0) } +layer: $DIR/unbound.usda +warning: Warning { code: MaterialFallbackDefault, kind: Skipped, count: 1, prims: ["/World/Weird"], message: "Unrecognized shader id 'SomeUnknownShader' at /World/Weird — using default grey OpenPBR" } +warning: Warning { code: CameraMissing, kind: Skipped, count: 1, prims: [], message: "USD stage has no UsdGeomCamera — falling back to world::get_settings camera" } +lights: 0 +volumes: 0 +world: 2 geometries, PrimitiveBreakdown { triangles: 0, spheres: 2, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 0, spheres: 2, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:d46e920fbc035ae5 camera=1:d46e920fbc035ae5 shadow=1:d46e920fbc035ae5 indirect=1:d46e920fbc035ae5 +geom 1: material #1 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:fb1e7d48790aec95 camera=1:fb1e7d48790aec95 shadow=1:fb1e7d48790aec95 indirect=1:fb1e7d48790aec95 +provenance material /World/Weird: MaterialOrigin { slots: [0], displaced: false } +provenance geometry 0..1: /World/Bound +provenance geometry 1..2: /World/Plain +provenance spheres: [0, 1] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: None, cameras: [], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: None, offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/unbound_usda-19c17e4f548a50df-1.image b/crates/crust-core/tests/data/import_baselines/unbound_usda-19c17e4f548a50df-1.image new file mode 100644 index 000000000..c734c5b1d --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/unbound_usda-19c17e4f548a50df-1.image @@ -0,0 +1 @@ +640x360 16spp clamp-off a04a09c0d4b5e325 diff --git a/crates/crust-core/tests/data/import_baselines/unbound_usda-4ae577ca0b682f0f-1.digest b/crates/crust-core/tests/data/import_baselines/unbound_usda-4ae577ca0b682f0f-1.digest new file mode 100644 index 000000000..f10411483 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/unbound_usda-4ae577ca0b682f0f-1.digest @@ -0,0 +1,27 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/World/cam") +camera: Camera { origin: Vec3A(0.0, 0.0, 0.0), lower_left_corner: Vec3A(-5.0, -3.75, -10.0), horizontal: Vec3A(10.0, 0.0, 0.0), vertical: Vec3A(0.0, 7.5, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: Some("/Render/settings") +settings: RenderSettings { samples_per_pixel: 16, max_depth: 2, width: 32, height: 24, region: PixelRect { x0: 0, y0: 0, x1: 32, y1: 24 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [AovProduct { prim_path: "/Render/p", name: "p.exr", vars: [AovVar { prim_path: "/Render/C", name: "C", channel_prefix: None, source: Color, components: 3, precision: Float, accumulation: Filtered, clear: 0.0, expression: None, raw: false, variance: false }, AovVar { prim_path: "/Render/matte", name: "matte", channel_prefix: None, source: Primvar(PrimvarSource { index: 0, components: 1, role: Float }), components: 1, precision: Float, accumulation: Filtered, clear: 0.0, expression: None, raw: false, variance: false }, AovVar { prim_path: "/Render/depth", name: "depth", channel_prefix: None, source: Depth, components: 1, precision: Float, accumulation: Closest, clear: inf, expression: None, raw: false, variance: false }, AovVar { prim_path: "/Render/depth_filtered", name: "depth_filtered", channel_prefix: None, source: Depth, components: 1, precision: Float, accumulation: Filtered, clear: inf, expression: None, raw: false, variance: false }, AovVar { prim_path: "/Render/variance", name: "variance", channel_prefix: None, source: Variance, components: 1, precision: Float, accumulation: Filtered, clear: 0.0, expression: None, raw: false, variance: false }, AovVar { prim_path: "/Render/g_out", name: "g_out", channel_prefix: None, source: Filter(FilterSource { display: false, filter: 0, output: 0, components: 1, radiance: false }), components: 1, precision: Float, accumulation: Filtered, clear: 0.0, expression: None, raw: false, variance: false }], attributes: [] }], precomp: Some(Precomp { sample_filters: ["/Render/g"], display_filters: [], display: "beauty" }) } +pass: None +source: Source { lens: Some(Lens { focal_length: 24.0, aperture: [24.0, 18.0], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 10.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/unbound.usda"], invisible_overrides: Some(0) } +layer: $DIR/unbound.usda +warning: Warning { code: PrecompUnboundInput, kind: Refused, count: 1, prims: ["/Render/g"], message: "/Render/g: input \"nothing\" names no RenderVar of the render; it reads its default" } +lights: 1 +light 0: dome name Some("/World/sky") lpe None pmf 1.0 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 2 geometries, PrimitiveBreakdown { triangles: 4, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 4, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov Some((Some(0), false)) swapped false curves false scale 1.0 motion [] pieces all=2:2a13523c8e09c13d camera=2:2a13523c8e09c13d shadow=2:2a13523c8e09c13d indirect=2:2a13523c8e09c13d +geom 1: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:31db52e4afd4a225 camera=2:31db52e4afd4a225 shadow=2:31db52e4afd4a225 indirect=2:31db52e4afd4a225 +provenance light /World/sky: LightOrigin { index: 0, geoms: 0..0 } +provenance geometry 0..1: /World/Card +provenance geometry 1..2: /World/Wall +provenance mesh: MeshOrigin { geom_id: 0, slot: 0, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 1, slot: 1, baked: true, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 3430351340666728903, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 1: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 13118596165941616386, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: true, working: None, camera: Some("/World/cam"), cameras: ["/World/cam"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [("matte", 1)], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/World/cam"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/unbound_usda-4ae577ca0b682f0f-1.image b/crates/crust-core/tests/data/import_baselines/unbound_usda-4ae577ca0b682f0f-1.image new file mode 100644 index 000000000..f08c49d36 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/unbound_usda-4ae577ca0b682f0f-1.image @@ -0,0 +1 @@ +32x24 16spp clamp-off e72b7b7cff87e77d diff --git a/crates/crust-core/tests/data/import_baselines/uniform_cages_usda-2c90ea028524eadd-1.digest b/crates/crust-core/tests/data/import_baselines/uniform_cages_usda-2c90ea028524eadd-1.digest new file mode 100644 index 000000000..cb5583f5b --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/uniform_cages_usda-2c90ea028524eadd-1.digest @@ -0,0 +1,22 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/World/cam") +camera: Camera { origin: Vec3A(0.0, 0.0, 10.0), lower_left_corner: Vec3A(-2.0955, -1.5716249, 0.0), horizontal: Vec3A(4.191, 0.0, 0.0), vertical: Vec3A(0.0, 3.1432498, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: Some("/Render/settings") +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 48, height: 36, region: PixelRect { x0: 0, y0: 0, x1: 48, y1: 36 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [AovProduct { prim_path: "/Render/p", name: "p.exr", vars: [AovVar { prim_path: "/Render/P", name: "P", channel_prefix: None, source: P, components: 3, precision: Float, accumulation: Closest, clear: 0.0, expression: None, raw: false, variance: false }, AovVar { prim_path: "/Render/id", name: "id", channel_prefix: None, source: Primvar(PrimvarSource { index: 0, components: 1, role: Float }), components: 1, precision: Float, accumulation: Closest, clear: 0.0, expression: None, raw: false, variance: false }], attributes: [] }], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 50.0, aperture: [20.955, 15.2908], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 10.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/uniform_cages.usda"], invisible_overrides: Some(0) } +layer: $DIR/uniform_cages.usda +lights: 1 +light 0: dome name Some("/World/dome") lpe None pmf 1.0 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 1 geometries, PrimitiveBreakdown { triangles: 128, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 128, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov Some((Some(0), false)) swapped false curves false scale 1.0 motion [] pieces all=128:92e706974a651d05 camera=128:92e706974a651d05 shadow=128:92e706974a651d05 indirect=128:92e706974a651d05 +provenance light /World/dome: LightOrigin { index: 0, geoms: 1..1 } +provenance geometry 0..1: /World/octa +provenance mesh: MeshOrigin { geom_id: 0, slot: 0, baked: true, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 4839734000856103295, n_points: 66, n_indices: 384, n_uvs: None, smooth: true, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 2, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/World/cam"), cameras: ["/World/cam"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [("faceId", 1)], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/World/cam"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/uniform_cages_usda-2c90ea028524eadd-1.image b/crates/crust-core/tests/data/import_baselines/uniform_cages_usda-2c90ea028524eadd-1.image new file mode 100644 index 000000000..a2eecad9d --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/uniform_cages_usda-2c90ea028524eadd-1.image @@ -0,0 +1 @@ +48x36 16spp clamp-off c6767216609b1ec9 diff --git a/crates/crust-core/tests/data/import_baselines/uniform_cages_usda-b6490d10d0de391f-1.digest b/crates/crust-core/tests/data/import_baselines/uniform_cages_usda-b6490d10d0de391f-1.digest new file mode 100644 index 000000000..8477a4ae1 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/uniform_cages_usda-b6490d10d0de391f-1.digest @@ -0,0 +1,22 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/World/cam") +camera: Camera { origin: Vec3A(0.0, 0.0, 10.0), lower_left_corner: Vec3A(-2.0955, -1.5716249, 0.0), horizontal: Vec3A(4.191, 0.0, 0.0), vertical: Vec3A(0.0, 3.1432498, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: Some("/Render/settings") +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 48, height: 36, region: PixelRect { x0: 0, y0: 0, x1: 48, y1: 36 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [AovProduct { prim_path: "/Render/p", name: "p.exr", vars: [AovVar { prim_path: "/Render/P", name: "P", channel_prefix: None, source: P, components: 3, precision: Float, accumulation: Closest, clear: 0.0, expression: None, raw: false, variance: false }, AovVar { prim_path: "/Render/id", name: "id", channel_prefix: None, source: Primvar(PrimvarSource { index: 0, components: 1, role: Float }), components: 1, precision: Float, accumulation: Closest, clear: 0.0, expression: None, raw: false, variance: false }], attributes: [] }], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 50.0, aperture: [20.955, 15.2908], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 10.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/uniform_cages.usda"], invisible_overrides: Some(0) } +layer: $DIR/uniform_cages.usda +lights: 1 +light 0: dome name Some("/World/dome") lpe None pmf 1.0 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 1 geometries, PrimitiveBreakdown { triangles: 96, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 96, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov Some((Some(0), false)) swapped false curves false scale 1.0 motion [] pieces all=96:d2e5727b31e4eaa5 camera=96:d2e5727b31e4eaa5 shadow=96:d2e5727b31e4eaa5 indirect=96:d2e5727b31e4eaa5 +provenance light /World/dome: LightOrigin { index: 0, geoms: 1..1 } +provenance geometry 0..1: /World/mixed +provenance mesh: MeshOrigin { geom_id: 0, slot: 0, baked: true, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 15495891107158519071, n_points: 65, n_indices: 192, n_uvs: None, smooth: true, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 2, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/World/cam"), cameras: ["/World/cam"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [("faceId", 1)], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/World/cam"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/uniform_cages_usda-b6490d10d0de391f-1.image b/crates/crust-core/tests/data/import_baselines/uniform_cages_usda-b6490d10d0de391f-1.image new file mode 100644 index 000000000..1de1f76dc --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/uniform_cages_usda-b6490d10d0de391f-1.image @@ -0,0 +1 @@ +48x36 16spp clamp-off 141030b0243f9996 diff --git a/crates/crust-core/tests/data/import_baselines/uniform_cages_usda-d12f6f58167b27f9-1.digest b/crates/crust-core/tests/data/import_baselines/uniform_cages_usda-d12f6f58167b27f9-1.digest new file mode 100644 index 000000000..360b5f320 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/uniform_cages_usda-d12f6f58167b27f9-1.digest @@ -0,0 +1,22 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/World/cam") +camera: Camera { origin: Vec3A(0.0, 0.0, 10.0), lower_left_corner: Vec3A(-2.0955, -1.5716249, 0.0), horizontal: Vec3A(4.191, 0.0, 0.0), vertical: Vec3A(0.0, 3.1432498, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: Some("/Render/settings") +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 48, height: 36, region: PixelRect { x0: 0, y0: 0, x1: 48, y1: 36 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [AovProduct { prim_path: "/Render/p", name: "p.exr", vars: [AovVar { prim_path: "/Render/P", name: "P", channel_prefix: None, source: P, components: 3, precision: Float, accumulation: Closest, clear: 0.0, expression: None, raw: false, variance: false }, AovVar { prim_path: "/Render/id", name: "id", channel_prefix: None, source: Primvar(PrimvarSource { index: 0, components: 1, role: Float }), components: 1, precision: Float, accumulation: Closest, clear: 0.0, expression: None, raw: false, variance: false }], attributes: [] }], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 50.0, aperture: [20.955, 15.2908], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 10.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/uniform_cages.usda"], invisible_overrides: Some(0) } +layer: $DIR/uniform_cages.usda +lights: 1 +light 0: dome name Some("/World/dome") lpe None pmf 1.0 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 1 geometries, PrimitiveBreakdown { triangles: 216, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 216, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov Some((Some(0), false)) swapped false curves false scale 1.0 motion [] pieces all=216:5bd77612007ad9b8 camera=216:5bd77612007ad9b8 shadow=216:5bd77612007ad9b8 indirect=216:5bd77612007ad9b8 +provenance light /World/dome: LightOrigin { index: 0, geoms: 1..1 } +provenance geometry 0..1: /World/mixed +provenance mesh: MeshOrigin { geom_id: 0, slot: 0, baked: true, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 17661192499183501319, n_points: 131, n_indices: 648, n_uvs: None, smooth: true, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: Some(ScreenKey([0, 0, 1092616192, 1122308082, 0, 0, 1092616192, 3212836864, 0, 3193345093, 1065353216, 0, 3193345093, 0, 3212836864, 3189829428, 0, 1065353216, 3189829428, 0, 0, 3212836864, 1082130432, 3])), domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/World/cam"), cameras: ["/World/cam"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [("faceId", 1)], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/World/cam"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/uniform_cages_usda-d12f6f58167b27f9-1.image b/crates/crust-core/tests/data/import_baselines/uniform_cages_usda-d12f6f58167b27f9-1.image new file mode 100644 index 000000000..c028b9ae4 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/uniform_cages_usda-d12f6f58167b27f9-1.image @@ -0,0 +1 @@ +48x36 16spp clamp-off d99fe12da3896caf diff --git a/crates/crust-core/tests/data/import_baselines/uniform_cages_usda-d982dbb48b0da21b-1.digest b/crates/crust-core/tests/data/import_baselines/uniform_cages_usda-d982dbb48b0da21b-1.digest new file mode 100644 index 000000000..c13694bb9 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/uniform_cages_usda-d982dbb48b0da21b-1.digest @@ -0,0 +1,22 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/World/cam") +camera: Camera { origin: Vec3A(0.0, 0.0, 10.0), lower_left_corner: Vec3A(-2.0955, -1.5716249, 0.0), horizontal: Vec3A(4.191, 0.0, 0.0), vertical: Vec3A(0.0, 3.1432498, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: Some("/Render/settings") +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 48, height: 36, region: PixelRect { x0: 0, y0: 0, x1: 48, y1: 36 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [AovProduct { prim_path: "/Render/p", name: "p.exr", vars: [AovVar { prim_path: "/Render/P", name: "P", channel_prefix: None, source: P, components: 3, precision: Float, accumulation: Closest, clear: 0.0, expression: None, raw: false, variance: false }, AovVar { prim_path: "/Render/id", name: "id", channel_prefix: None, source: Primvar(PrimvarSource { index: 0, components: 1, role: Float }), components: 1, precision: Float, accumulation: Closest, clear: 0.0, expression: None, raw: false, variance: false }], attributes: [] }], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 50.0, aperture: [20.955, 15.2908], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 10.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/uniform_cages.usda"], invisible_overrides: Some(0) } +layer: $DIR/uniform_cages.usda +lights: 1 +light 0: dome name Some("/World/dome") lpe None pmf 1.0 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 1 geometries, PrimitiveBreakdown { triangles: 512, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 512, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov Some((Some(0), false)) swapped false curves false scale 1.0 motion [] pieces all=512:66924c114fcb9c75 camera=512:66924c114fcb9c75 shadow=512:66924c114fcb9c75 indirect=512:66924c114fcb9c75 +provenance light /World/dome: LightOrigin { index: 0, geoms: 1..1 } +provenance geometry 0..1: /World/octa +provenance mesh: MeshOrigin { geom_id: 0, slot: 0, baked: true, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 4772320826425062510, n_points: 258, n_indices: 1536, n_uvs: None, smooth: true, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: Some(ScreenKey([0, 0, 1092616192, 1122308082, 0, 0, 1092616192, 3212836864, 0, 3193345093, 1065353216, 0, 3193345093, 0, 3212836864, 3189829428, 0, 1065353216, 3189829428, 0, 0, 3212836864, 1082130432, 3])), domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/World/cam"), cameras: ["/World/cam"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [("faceId", 1)], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/World/cam"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/uniform_cages_usda-d982dbb48b0da21b-1.image b/crates/crust-core/tests/data/import_baselines/uniform_cages_usda-d982dbb48b0da21b-1.image new file mode 100644 index 000000000..23a30560e --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/uniform_cages_usda-d982dbb48b0da21b-1.image @@ -0,0 +1 @@ +48x36 16spp clamp-off 4356982c6a04ab80 diff --git a/crates/crust-core/tests/data/import_baselines/uniform_colour_usda-6a475987121a1476-1.digest b/crates/crust-core/tests/data/import_baselines/uniform_colour_usda-6a475987121a1476-1.digest new file mode 100644 index 000000000..5fa25ba22 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/uniform_colour_usda-6a475987121a1476-1.digest @@ -0,0 +1,22 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/World/cam") +camera: Camera { origin: Vec3A(0.0, 0.0, 10.0), lower_left_corner: Vec3A(-2.0955, -1.5716249, 0.0), horizontal: Vec3A(4.191, 0.0, 0.0), vertical: Vec3A(0.0, 3.1432498, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: Some("/Render/settings") +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 48, height: 36, region: PixelRect { x0: 0, y0: 0, x1: 48, y1: 36 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [AovProduct { prim_path: "/Render/p", name: "p.exr", vars: [AovVar { prim_path: "/Render/P", name: "P", channel_prefix: None, source: P, components: 3, precision: Float, accumulation: Closest, clear: 0.0, expression: None, raw: false, variance: false }, AovVar { prim_path: "/Render/Cd", name: "Cd", channel_prefix: None, source: Primvar(PrimvarSource { index: 0, components: 3, role: Color }), components: 3, precision: Float, accumulation: Filtered, clear: 0.0, expression: None, raw: false, variance: false }], attributes: [] }], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 50.0, aperture: [20.955, 15.2908], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 10.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/uniform_colour.usda"], invisible_overrides: Some(0) } +layer: $DIR/uniform_colour.usda +lights: 1 +light 0: dome name Some("/World/dome") lpe None pmf 1.0 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 1 geometries, PrimitiveBreakdown { triangles: 4, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 4, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov Some((Some(0), false)) swapped false curves false scale 1.0 motion [] pieces all=4:4a0c58876aa29995 camera=4:4a0c58876aa29995 shadow=4:4a0c58876aa29995 indirect=4:4a0c58876aa29995 +provenance light /World/dome: LightOrigin { index: 0, geoms: 1..1 } +provenance geometry 0..1: /World/mesh +provenance mesh: MeshOrigin { geom_id: 0, slot: 0, baked: true, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 5760922452270159177, n_points: 6, n_indices: 8, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/World/cam"), cameras: ["/World/cam"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [("displayColor", 3)], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/World/cam"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/uniform_colour_usda-6a475987121a1476-1.image b/crates/crust-core/tests/data/import_baselines/uniform_colour_usda-6a475987121a1476-1.image new file mode 100644 index 000000000..648a9f248 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/uniform_colour_usda-6a475987121a1476-1.image @@ -0,0 +1 @@ +48x36 16spp clamp-off 54407d51eeed59ca diff --git a/crates/crust-core/tests/data/import_baselines/unit_tiny_lens_usda-aa2efc45eecd1493-1.digest b/crates/crust-core/tests/data/import_baselines/unit_tiny_lens_usda-aa2efc45eecd1493-1.digest new file mode 100644 index 000000000..75e616f19 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/unit_tiny_lens_usda-aa2efc45eecd1493-1.digest @@ -0,0 +1,17 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/World/Cam") +camera: Camera { origin: Vec3A(0.0, 0.0, 0.0), lower_left_corner: Vec3A(-2.7183647, -1.5290802, -10.0), horizontal: Vec3A(5.4367294, 0.0, 0.0), vertical: Vec3A(0.0, 3.0581603, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 1.25, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: None +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 640, height: 360, region: PixelRect { x0: 0, y0: 0, x1: 640, y1: 360 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 50.0, aperture: [20.955, 15.2908], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 2.0, focus_distance: 10.0 }), depth_of_field: true, motion_blur: false, layer_stack: ["$DIR/unit_tiny_lens.usda"], invisible_overrides: Some(0) } +layer: $DIR/unit_tiny_lens.usda +warning: Warning { code: CameraInvalidMetersPerUnit, kind: Refused, count: 1, prims: [], message: "/World/Cam: the stage's metersPerUnit = 0.000000000000000000000000000000000000000001 is not a length the lens can use; it reads it as 0.01 (a centimetre)" } +lights: 0 +volumes: 0 +world: 0 geometries, PrimitiveBreakdown { triangles: 0, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 0, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/World/Cam"), cameras: ["/World/Cam"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/World/Cam"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/unit_tiny_lens_usda-aa2efc45eecd1493-1.image b/crates/crust-core/tests/data/import_baselines/unit_tiny_lens_usda-aa2efc45eecd1493-1.image new file mode 100644 index 000000000..c734c5b1d --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/unit_tiny_lens_usda-aa2efc45eecd1493-1.image @@ -0,0 +1 @@ +640x360 16spp clamp-off a04a09c0d4b5e325 diff --git a/crates/crust-core/tests/data/import_baselines/unit_volume_usda-693980b7090e37bf-1.digest b/crates/crust-core/tests/data/import_baselines/unit_volume_usda-693980b7090e37bf-1.digest new file mode 100644 index 000000000..d1e17ad12 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/unit_volume_usda-693980b7090e37bf-1.digest @@ -0,0 +1,18 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: None +camera: Camera { origin: Vec3A(15.0, 3.0, 3.0), lower_left_corner: Vec3A(4.8863316, -0.044797063, 4.174048), horizontal: Vec3A(1.2295314, 0.0, -6.147657), vertical: Vec3A(-0.44830504, 3.4967792, -0.08966101), u: Vec3A(0.19611613, 0.0, -0.9805807), v: Vec3A(-0.1271232, 0.991561, -0.02542464), lens_radius: 0.05, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: None +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 640, height: 360, region: PixelRect { x0: 0, y0: 0, x1: 640, y1: 360 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: None, depth_of_field: true, motion_blur: false, layer_stack: ["$DIR/unit_volume.usda"], invisible_overrides: Some(0) } +layer: $DIR/unit_volume.usda +warning: Warning { code: CameraMissing, kind: Skipped, count: 1, prims: [], message: "USD stage has no UsdGeomCamera — falling back to world::get_settings camera" } +lights: 0 +volumes: 1 +volume 0: sigma_s Vec3A(0.5, 0.5, 0.5) sigma_a Vec3A(0.0, 0.0, 0.0) g 0.0 emission Vec3A(0.0, 0.0, 0.0) mask RayMask(4294967295) class 65535 homogeneous true +world: 0 geometries, PrimitiveBreakdown { triangles: 0, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 0, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +provenance spheres: [] +provenance volumes: ["/World/Fog"] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: None, cameras: [], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: None, offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/unit_volume_usda-693980b7090e37bf-1.image b/crates/crust-core/tests/data/import_baselines/unit_volume_usda-693980b7090e37bf-1.image new file mode 100644 index 000000000..c734c5b1d --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/unit_volume_usda-693980b7090e37bf-1.image @@ -0,0 +1 @@ +640x360 16spp clamp-off a04a09c0d4b5e325 diff --git a/crates/crust-core/tests/data/import_baselines/unit_zero_lens_usda-d1f56221f44bb692-1.digest b/crates/crust-core/tests/data/import_baselines/unit_zero_lens_usda-d1f56221f44bb692-1.digest new file mode 100644 index 000000000..ab6dfc759 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/unit_zero_lens_usda-d1f56221f44bb692-1.digest @@ -0,0 +1,17 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/World/Cam") +camera: Camera { origin: Vec3A(0.0, 0.0, 0.0), lower_left_corner: Vec3A(-2.7183647, -1.5290802, -10.0), horizontal: Vec3A(5.4367294, 0.0, 0.0), vertical: Vec3A(0.0, 3.0581603, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 1.25, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: None +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 640, height: 360, region: PixelRect { x0: 0, y0: 0, x1: 640, y1: 360 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 50.0, aperture: [20.955, 15.2908], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 2.0, focus_distance: 10.0 }), depth_of_field: true, motion_blur: false, layer_stack: ["$DIR/unit_zero_lens.usda"], invisible_overrides: Some(0) } +layer: $DIR/unit_zero_lens.usda +warning: Warning { code: CameraInvalidMetersPerUnit, kind: Refused, count: 1, prims: [], message: "/World/Cam: the stage's metersPerUnit = 0 is not a length the lens can use; it reads it as 0.01 (a centimetre)" } +lights: 0 +volumes: 0 +world: 0 geometries, PrimitiveBreakdown { triangles: 0, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 0, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/World/Cam"), cameras: ["/World/Cam"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/World/Cam"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/unit_zero_lens_usda-d1f56221f44bb692-1.image b/crates/crust-core/tests/data/import_baselines/unit_zero_lens_usda-d1f56221f44bb692-1.image new file mode 100644 index 000000000..c734c5b1d --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/unit_zero_lens_usda-d1f56221f44bb692-1.image @@ -0,0 +1 @@ +640x360 16spp clamp-off a04a09c0d4b5e325 diff --git a/crates/crust-core/tests/data/import_baselines/unit_zero_named_usda-9847ffecfd9df22b-1.digest b/crates/crust-core/tests/data/import_baselines/unit_zero_named_usda-9847ffecfd9df22b-1.digest new file mode 100644 index 000000000..76470227e --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/unit_zero_named_usda-9847ffecfd9df22b-1.digest @@ -0,0 +1,17 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/World/Named") +camera: Camera { origin: Vec3A(0.0, 0.0, 0.0), lower_left_corner: Vec3A(-2.7183647, -1.5290802, -10.0), horizontal: Vec3A(5.4367294, 0.0, 0.0), vertical: Vec3A(0.0, 3.0581603, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.625, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: Some("/Render/settings") +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 640, height: 360, region: PixelRect { x0: 0, y0: 0, x1: 640, y1: 360 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 50.0, aperture: [20.955, 15.2908], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 4.0, focus_distance: 10.0 }), depth_of_field: true, motion_blur: false, layer_stack: ["$DIR/unit_zero_named.usda"], invisible_overrides: Some(0) } +layer: $DIR/unit_zero_named.usda +warning: Warning { code: CameraInvalidMetersPerUnit, kind: Refused, count: 1, prims: [], message: "/World/Named: the stage's metersPerUnit = 0 is not a length the lens can use; it reads it as 0.01 (a centimetre)" } +lights: 0 +volumes: 0 +world: 0 geometries, PrimitiveBreakdown { triangles: 0, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 0, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/World/Named"), cameras: ["/World/Named", "/World/First"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/World/Named"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/unit_zero_named_usda-9847ffecfd9df22b-1.image b/crates/crust-core/tests/data/import_baselines/unit_zero_named_usda-9847ffecfd9df22b-1.image new file mode 100644 index 000000000..c734c5b1d --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/unit_zero_named_usda-9847ffecfd9df22b-1.image @@ -0,0 +1 @@ +640x360 16spp clamp-off a04a09c0d4b5e325 diff --git a/crates/crust-core/tests/data/import_baselines/unit_zero_pinhole_usda-af47867eeabcfd70-1.digest b/crates/crust-core/tests/data/import_baselines/unit_zero_pinhole_usda-af47867eeabcfd70-1.digest new file mode 100644 index 000000000..ab868630e --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/unit_zero_pinhole_usda-af47867eeabcfd70-1.digest @@ -0,0 +1,16 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/World/Cam") +camera: Camera { origin: Vec3A(0.0, 0.0, 0.0), lower_left_corner: Vec3A(-2.7183647, -1.5290802, -10.0), horizontal: Vec3A(5.4367294, 0.0, 0.0), vertical: Vec3A(0.0, 3.0581603, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: None +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 640, height: 360, region: PixelRect { x0: 0, y0: 0, x1: 640, y1: 360 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 50.0, aperture: [20.955, 15.2908], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 10.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/unit_zero_pinhole.usda"], invisible_overrides: Some(0) } +layer: $DIR/unit_zero_pinhole.usda +lights: 0 +volumes: 0 +world: 0 geometries, PrimitiveBreakdown { triangles: 0, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 0, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/World/Cam"), cameras: ["/World/Cam"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/World/Cam"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/unit_zero_pinhole_usda-af47867eeabcfd70-1.image b/crates/crust-core/tests/data/import_baselines/unit_zero_pinhole_usda-af47867eeabcfd70-1.image new file mode 100644 index 000000000..c734c5b1d --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/unit_zero_pinhole_usda-af47867eeabcfd70-1.image @@ -0,0 +1 @@ +640x360 16spp clamp-off a04a09c0d4b5e325 diff --git a/crates/crust-core/tests/data/import_baselines/unknown_display_usda-e75f3f3b8d756ec8-1.digest b/crates/crust-core/tests/data/import_baselines/unknown_display_usda-e75f3f3b8d756ec8-1.digest new file mode 100644 index 000000000..2b4bdba23 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/unknown_display_usda-e75f3f3b8d756ec8-1.digest @@ -0,0 +1,27 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/World/cam") +camera: Camera { origin: Vec3A(0.0, 0.0, 0.0), lower_left_corner: Vec3A(-5.0, -3.75, -10.0), horizontal: Vec3A(10.0, 0.0, 0.0), vertical: Vec3A(0.0, 7.5, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: Some("/Render/settings") +settings: RenderSettings { samples_per_pixel: 16, max_depth: 2, width: 32, height: 24, region: PixelRect { x0: 0, y0: 0, x1: 32, y1: 24 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [AovProduct { prim_path: "/Render/p", name: "p.exr", vars: [AovVar { prim_path: "/Render/C", name: "C", channel_prefix: None, source: Color, components: 3, precision: Float, accumulation: Filtered, clear: 0.0, expression: None, raw: false, variance: false }, AovVar { prim_path: "/Render/matte", name: "matte", channel_prefix: None, source: Primvar(PrimvarSource { index: 0, components: 1, role: Float }), components: 1, precision: Float, accumulation: Filtered, clear: 0.0, expression: None, raw: false, variance: false }, AovVar { prim_path: "/Render/depth", name: "depth", channel_prefix: None, source: Depth, components: 1, precision: Float, accumulation: Closest, clear: inf, expression: None, raw: false, variance: false }, AovVar { prim_path: "/Render/depth_filtered", name: "depth_filtered", channel_prefix: None, source: Depth, components: 1, precision: Float, accumulation: Filtered, clear: inf, expression: None, raw: false, variance: false }, AovVar { prim_path: "/Render/variance", name: "variance", channel_prefix: None, source: Variance, components: 1, precision: Float, accumulation: Filtered, clear: 0.0, expression: None, raw: false, variance: false }], attributes: [] }], precomp: Some(Precomp { sample_filters: [], display_filters: [], display: "beauty" }) } +pass: None +source: Source { lens: Some(Lens { focal_length: 24.0, aperture: [24.0, 18.0], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 10.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/unknown_display.usda"], invisible_overrides: Some(0) } +layer: $DIR/unknown_display.usda +warning: Warning { code: PrecompUnknownDisplay, kind: Refused, count: 1, prims: ["/Render/settings"], message: "/Render/settings: crust:display = \"nope\" names no RenderVar of the render; the beauty is shown" } +lights: 1 +light 0: dome name Some("/World/sky") lpe None pmf 1.0 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 2 geometries, PrimitiveBreakdown { triangles: 4, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 4, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov Some((Some(0), false)) swapped false curves false scale 1.0 motion [] pieces all=2:2a13523c8e09c13d camera=2:2a13523c8e09c13d shadow=2:2a13523c8e09c13d indirect=2:2a13523c8e09c13d +geom 1: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:31db52e4afd4a225 camera=2:31db52e4afd4a225 shadow=2:31db52e4afd4a225 indirect=2:31db52e4afd4a225 +provenance light /World/sky: LightOrigin { index: 0, geoms: 0..0 } +provenance geometry 0..1: /World/Card +provenance geometry 1..2: /World/Wall +provenance mesh: MeshOrigin { geom_id: 0, slot: 0, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 1, slot: 1, baked: true, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 3430351340666728903, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 1: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 13118596165941616386, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: true, working: None, camera: Some("/World/cam"), cameras: ["/World/cam"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [("matte", 1)], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/World/cam"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/unknown_display_usda-e75f3f3b8d756ec8-1.image b/crates/crust-core/tests/data/import_baselines/unknown_display_usda-e75f3f3b8d756ec8-1.image new file mode 100644 index 000000000..f08c49d36 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/unknown_display_usda-e75f3f3b8d756ec8-1.image @@ -0,0 +1 @@ +32x24 16spp clamp-off e72b7b7cff87e77d diff --git a/crates/crust-core/tests/data/import_baselines/unknown_filter_usda-ed678783aa9ef74d-1.digest b/crates/crust-core/tests/data/import_baselines/unknown_filter_usda-ed678783aa9ef74d-1.digest new file mode 100644 index 000000000..af6da6b99 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/unknown_filter_usda-ed678783aa9ef74d-1.digest @@ -0,0 +1,27 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/World/cam") +camera: Camera { origin: Vec3A(0.0, 0.0, 0.0), lower_left_corner: Vec3A(-5.0, -3.75, -10.0), horizontal: Vec3A(10.0, 0.0, 0.0), vertical: Vec3A(0.0, 7.5, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: Some("/Render/settings") +settings: RenderSettings { samples_per_pixel: 16, max_depth: 2, width: 32, height: 24, region: PixelRect { x0: 0, y0: 0, x1: 32, y1: 24 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [AovProduct { prim_path: "/Render/p", name: "p.exr", vars: [AovVar { prim_path: "/Render/C", name: "C", channel_prefix: None, source: Color, components: 3, precision: Float, accumulation: Filtered, clear: 0.0, expression: None, raw: false, variance: false }, AovVar { prim_path: "/Render/matte", name: "matte", channel_prefix: None, source: Primvar(PrimvarSource { index: 0, components: 1, role: Float }), components: 1, precision: Float, accumulation: Filtered, clear: 0.0, expression: None, raw: false, variance: false }, AovVar { prim_path: "/Render/depth", name: "depth", channel_prefix: None, source: Depth, components: 1, precision: Float, accumulation: Closest, clear: inf, expression: None, raw: false, variance: false }, AovVar { prim_path: "/Render/depth_filtered", name: "depth_filtered", channel_prefix: None, source: Depth, components: 1, precision: Float, accumulation: Filtered, clear: inf, expression: None, raw: false, variance: false }, AovVar { prim_path: "/Render/variance", name: "variance", channel_prefix: None, source: Variance, components: 1, precision: Float, accumulation: Filtered, clear: 0.0, expression: None, raw: false, variance: false }], attributes: [] }], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 24.0, aperture: [24.0, 18.0], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 10.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/unknown_filter.usda"], invisible_overrides: Some(0) } +layer: $DIR/unknown_filter.usda +warning: Warning { code: PrecompUnknownFilter, kind: Skipped, count: 1, prims: ["/Render/look_out"], message: "/Render/look_out: crust:filter targets /Render/look, which is in neither crust:sampleFilters nor crust:displayFilters; no channel written" } +lights: 1 +light 0: dome name Some("/World/sky") lpe None pmf 1.0 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 2 geometries, PrimitiveBreakdown { triangles: 4, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 4, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov Some((Some(0), false)) swapped false curves false scale 1.0 motion [] pieces all=2:2a13523c8e09c13d camera=2:2a13523c8e09c13d shadow=2:2a13523c8e09c13d indirect=2:2a13523c8e09c13d +geom 1: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:31db52e4afd4a225 camera=2:31db52e4afd4a225 shadow=2:31db52e4afd4a225 indirect=2:31db52e4afd4a225 +provenance light /World/sky: LightOrigin { index: 0, geoms: 0..0 } +provenance geometry 0..1: /World/Card +provenance geometry 1..2: /World/Wall +provenance mesh: MeshOrigin { geom_id: 0, slot: 0, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 1, slot: 1, baked: true, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 3430351340666728903, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 1: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 13118596165941616386, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/World/cam"), cameras: ["/World/cam"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [("matte", 1)], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/World/cam"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/unknown_filter_usda-ed678783aa9ef74d-1.image b/crates/crust-core/tests/data/import_baselines/unknown_filter_usda-ed678783aa9ef74d-1.image new file mode 100644 index 000000000..f08c49d36 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/unknown_filter_usda-ed678783aa9ef74d-1.image @@ -0,0 +1 @@ +32x24 16spp clamp-off e72b7b7cff87e77d diff --git a/crates/crust-core/tests/data/import_baselines/unknown_op_usda-954c2bfc62b12357-1.digest b/crates/crust-core/tests/data/import_baselines/unknown_op_usda-954c2bfc62b12357-1.digest new file mode 100644 index 000000000..875165fc2 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/unknown_op_usda-954c2bfc62b12357-1.digest @@ -0,0 +1,27 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/World/cam") +camera: Camera { origin: Vec3A(0.0, 0.0, 0.0), lower_left_corner: Vec3A(-5.0, -3.75, -10.0), horizontal: Vec3A(10.0, 0.0, 0.0), vertical: Vec3A(0.0, 7.5, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: Some("/Render/settings") +settings: RenderSettings { samples_per_pixel: 16, max_depth: 2, width: 32, height: 24, region: PixelRect { x0: 0, y0: 0, x1: 32, y1: 24 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [AovProduct { prim_path: "/Render/p", name: "p.exr", vars: [AovVar { prim_path: "/Render/C", name: "C", channel_prefix: None, source: Color, components: 3, precision: Float, accumulation: Filtered, clear: 0.0, expression: None, raw: false, variance: false }, AovVar { prim_path: "/Render/matte", name: "matte", channel_prefix: None, source: Primvar(PrimvarSource { index: 0, components: 1, role: Float }), components: 1, precision: Float, accumulation: Filtered, clear: 0.0, expression: None, raw: false, variance: false }, AovVar { prim_path: "/Render/depth", name: "depth", channel_prefix: None, source: Depth, components: 1, precision: Float, accumulation: Closest, clear: inf, expression: None, raw: false, variance: false }, AovVar { prim_path: "/Render/depth_filtered", name: "depth_filtered", channel_prefix: None, source: Depth, components: 1, precision: Float, accumulation: Filtered, clear: inf, expression: None, raw: false, variance: false }, AovVar { prim_path: "/Render/variance", name: "variance", channel_prefix: None, source: Variance, components: 1, precision: Float, accumulation: Filtered, clear: 0.0, expression: None, raw: false, variance: false }, AovVar { prim_path: "/Render/look_out", name: "look_out", channel_prefix: None, source: Filter(FilterSource { display: false, filter: 0, output: 0, components: 3, radiance: true }), components: 3, precision: Float, accumulation: Filtered, clear: 0.0, expression: None, raw: false, variance: false }, AovVar { prim_path: "/Render/glare_out", name: "glare_out", channel_prefix: None, source: Filter(FilterSource { display: true, filter: 0, output: 0, components: 3, radiance: false }), components: 3, precision: Float, accumulation: Filtered, clear: 0.0, expression: None, raw: false, variance: false }], attributes: [] }], precomp: Some(Precomp { sample_filters: ["/Render/look"], display_filters: ["/Render/glare"], display: "beauty" }) } +pass: None +source: Source { lens: Some(Lens { focal_length: 24.0, aperture: [24.0, 18.0], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 10.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/unknown_op.usda"], invisible_overrides: Some(0) } +layer: $DIR/unknown_op.usda +warning: Warning { code: PrecompUnknownOperation, kind: Skipped, count: 1, prims: ["/Render/glare"], message: "/Render/glare: info:id \"crust:glare\" is not a display operation (crust:convolve, crust:blur, crust:vectorBlur, crust:merge, crust:grade); the filter passes its input through" } +lights: 1 +light 0: dome name Some("/World/sky") lpe None pmf 1.0 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 2 geometries, PrimitiveBreakdown { triangles: 4, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 4, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov Some((Some(0), false)) swapped false curves false scale 1.0 motion [] pieces all=2:2a13523c8e09c13d camera=2:2a13523c8e09c13d shadow=2:2a13523c8e09c13d indirect=2:2a13523c8e09c13d +geom 1: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:31db52e4afd4a225 camera=2:31db52e4afd4a225 shadow=2:31db52e4afd4a225 indirect=2:31db52e4afd4a225 +provenance light /World/sky: LightOrigin { index: 0, geoms: 0..0 } +provenance geometry 0..1: /World/Card +provenance geometry 1..2: /World/Wall +provenance mesh: MeshOrigin { geom_id: 0, slot: 0, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 1, slot: 1, baked: true, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 3430351340666728903, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 1: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 13118596165941616386, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: true, working: None, camera: Some("/World/cam"), cameras: ["/World/cam"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [("matte", 1)], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/World/cam"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/unknown_op_usda-954c2bfc62b12357-1.image b/crates/crust-core/tests/data/import_baselines/unknown_op_usda-954c2bfc62b12357-1.image new file mode 100644 index 000000000..f08c49d36 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/unknown_op_usda-954c2bfc62b12357-1.image @@ -0,0 +1 @@ +32x24 16spp clamp-off e72b7b7cff87e77d diff --git a/crates/crust-core/tests/data/import_baselines/unknown_type_usda-d0386e0b10524625-1.digest b/crates/crust-core/tests/data/import_baselines/unknown_type_usda-d0386e0b10524625-1.digest new file mode 100644 index 000000000..578304709 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/unknown_type_usda-d0386e0b10524625-1.digest @@ -0,0 +1,19 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/World/cam") +camera: Camera { origin: Vec3A(0.0, 0.0, 0.0), lower_left_corner: Vec3A(-2.7183647, -1.5290802, -10.0), horizontal: Vec3A(5.4367294, 0.0, 0.0), vertical: Vec3A(0.0, 3.0581603, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: None +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 640, height: 360, region: PixelRect { x0: 0, y0: 0, x1: 640, y1: 360 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 50.0, aperture: [20.955, 15.2908], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 10.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/unknown_type.usda"], invisible_overrides: Some(0) } +layer: $DIR/unknown_type.usda +warning: Warning { code: XformUnknownType, kind: Skipped, count: 1, prims: ["/World/rig"], message: "/World/rig: its type StudioRig is not one the schema registry knows, so it is not Xformable and its xformOps are ignored (further occurrences are counted in the import's warnings)" } +lights: 0 +volumes: 0 +world: 1 geometries, PrimitiveBreakdown { triangles: 0, spheres: 1, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 0, spheres: 1, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:fb1e7d48790aec95 camera=1:fb1e7d48790aec95 shadow=1:fb1e7d48790aec95 indirect=1:fb1e7d48790aec95 +provenance geometry 0..1: /World/rig/ball +provenance spheres: [0] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/World/cam"), cameras: ["/World/cam"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/World/cam"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/unknown_type_usda-d0386e0b10524625-1.image b/crates/crust-core/tests/data/import_baselines/unknown_type_usda-d0386e0b10524625-1.image new file mode 100644 index 000000000..c734c5b1d --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/unknown_type_usda-d0386e0b10524625-1.image @@ -0,0 +1 @@ +640x360 16spp clamp-off a04a09c0d4b5e325 diff --git a/crates/crust-core/tests/data/import_baselines/unnamed_usda-ed6b84994bc45537-1.digest b/crates/crust-core/tests/data/import_baselines/unnamed_usda-ed6b84994bc45537-1.digest new file mode 100644 index 000000000..1d40d9527 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/unnamed_usda-ed6b84994bc45537-1.digest @@ -0,0 +1,16 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/cams/Hidden/witness") +camera: Camera { origin: Vec3A(0.0, 0.0, 0.0), lower_left_corner: Vec3A(-2.7183647, -1.5290802, -10.0), horizontal: Vec3A(5.4367294, 0.0, 0.0), vertical: Vec3A(0.0, 3.0581603, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: Some("/Render/settings") +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 640, height: 360, region: PixelRect { x0: 0, y0: 0, x1: 640, y1: 360 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 50.0, aperture: [20.955, 15.2908], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 10.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/unnamed.usda"], invisible_overrides: Some(0) } +layer: $DIR/unnamed.usda +lights: 0 +volumes: 0 +world: 0 geometries, PrimitiveBreakdown { triangles: 0, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 0, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/cams/Hidden/witness"), cameras: ["/cams/Hidden/witness", "/cams/shot", "/cams/layout"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/cams/Hidden/witness"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/unnamed_usda-ed6b84994bc45537-1.image b/crates/crust-core/tests/data/import_baselines/unnamed_usda-ed6b84994bc45537-1.image new file mode 100644 index 000000000..c734c5b1d --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/unnamed_usda-ed6b84994bc45537-1.image @@ -0,0 +1 @@ +640x360 16spp clamp-off a04a09c0d4b5e325 diff --git a/crates/crust-core/tests/data/import_baselines/unresolvable_winner_usda-514f97ffe2814294-1.digest b/crates/crust-core/tests/data/import_baselines/unresolvable_winner_usda-514f97ffe2814294-1.digest new file mode 100644 index 000000000..f7a23864d --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/unresolvable_winner_usda-514f97ffe2814294-1.digest @@ -0,0 +1,23 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/World/cam") +camera: Camera { origin: Vec3A(0.0, 0.0, 0.0), lower_left_corner: Vec3A(-2.7183647, -1.5290802, -10.0), horizontal: Vec3A(5.4367294, 0.0, 0.0), vertical: Vec3A(0.0, 3.0581603, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: None +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 640, height: 360, region: PixelRect { x0: 0, y0: 0, x1: 640, y1: 360 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 50.0, aperture: [20.955, 15.2908], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 10.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/unresolvable_winner.usda"], invisible_overrides: Some(0) } +layer: $DIR/unresolvable_winner.usda +warning: Warning { code: MaterialFallbackDefault, kind: Skipped, count: 2, prims: ["/World/Gone", "/World/Missing"], message: "Material at /World/Gone not resolvable — using default grey OpenPBR" } +lights: 0 +volumes: 0 +world: 2 geometries, PrimitiveBreakdown { triangles: 0, spheres: 2, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 0, spheres: 2, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:fb1e7d48790aec95 camera=1:fb1e7d48790aec95 shadow=1:fb1e7d48790aec95 indirect=1:fb1e7d48790aec95 +geom 1: material #1 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:fb1e7d48790aec95 camera=1:fb1e7d48790aec95 shadow=1:fb1e7d48790aec95 indirect=1:fb1e7d48790aec95 +provenance material /World/Gone: MaterialOrigin { slots: [0], displaced: false } +provenance material /World/Missing: MaterialOrigin { slots: [1], displaced: false } +provenance geometry 0..1: /World/Coll/b +provenance geometry 1..2: /World/Strong/a +provenance spheres: [0, 1] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/World/cam"), cameras: ["/World/cam"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/World/cam"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/unresolvable_winner_usda-514f97ffe2814294-1.image b/crates/crust-core/tests/data/import_baselines/unresolvable_winner_usda-514f97ffe2814294-1.image new file mode 100644 index 000000000..c734c5b1d --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/unresolvable_winner_usda-514f97ffe2814294-1.image @@ -0,0 +1 @@ +640x360 16spp clamp-off a04a09c0d4b5e325 diff --git a/crates/crust-core/tests/data/import_baselines/unsupported_in_prototype_usda-d2aca9633823884e-1.digest b/crates/crust-core/tests/data/import_baselines/unsupported_in_prototype_usda-d2aca9633823884e-1.digest new file mode 100644 index 000000000..ddb101b3a --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/unsupported_in_prototype_usda-d2aca9633823884e-1.digest @@ -0,0 +1,18 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/World/cam") +camera: Camera { origin: Vec3A(0.0, 0.0, 0.0), lower_left_corner: Vec3A(-2.7183647, -1.5290802, -10.0), horizontal: Vec3A(5.4367294, 0.0, 0.0), vertical: Vec3A(0.0, 3.0581603, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: None +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 640, height: 360, region: PixelRect { x0: 0, y0: 0, x1: 640, y1: 360 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 50.0, aperture: [20.955, 15.2908], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 10.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/unsupported_in_prototype.usda"], invisible_overrides: Some(0) } +layer: $DIR/unsupported_in_prototype.usda +warning: Warning { code: InstancingEmptyPrototype, kind: Skipped, count: 1, prims: ["/World/scatter/Protos/Dust"], message: "Prototype /World/scatter/Protos/Dust contributed no geometry" } +warning: Warning { code: GeomUnsupportedType, kind: Skipped, count: 1, prims: ["/World/scatter/Protos/Dust/grains"], message: "1 Points prim render nothing: crust does not read the Points type (the first at /World/scatter/Protos/Dust/grains)" } +lights: 0 +volumes: 0 +world: 0 geometries, PrimitiveBreakdown { triangles: 0, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 0, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/World/cam"), cameras: ["/World/cam"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/World/cam"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/unsupported_in_prototype_usda-d2aca9633823884e-1.image b/crates/crust-core/tests/data/import_baselines/unsupported_in_prototype_usda-d2aca9633823884e-1.image new file mode 100644 index 000000000..c734c5b1d --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/unsupported_in_prototype_usda-d2aca9633823884e-1.image @@ -0,0 +1 @@ +640x360 16spp clamp-off a04a09c0d4b5e325 diff --git a/crates/crust-core/tests/data/import_baselines/unsupported_type_one_usda-61236dabf0bd2054-1.digest b/crates/crust-core/tests/data/import_baselines/unsupported_type_one_usda-61236dabf0bd2054-1.digest new file mode 100644 index 000000000..a464d387b --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/unsupported_type_one_usda-61236dabf0bd2054-1.digest @@ -0,0 +1,17 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/World/cam") +camera: Camera { origin: Vec3A(0.0, 0.0, 0.0), lower_left_corner: Vec3A(-2.7183647, -1.5290802, -10.0), horizontal: Vec3A(5.4367294, 0.0, 0.0), vertical: Vec3A(0.0, 3.0581603, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: None +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 640, height: 360, region: PixelRect { x0: 0, y0: 0, x1: 640, y1: 360 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 50.0, aperture: [20.955, 15.2908], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 10.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/unsupported_type_one.usda"], invisible_overrides: Some(0) } +layer: $DIR/unsupported_type_one.usda +warning: Warning { code: GeomUnsupportedType, kind: Skipped, count: 1, prims: ["/World/sheet"], message: "1 NurbsPatch prim render nothing: crust does not read the NurbsPatch type (the first at /World/sheet)" } +lights: 0 +volumes: 0 +world: 0 geometries, PrimitiveBreakdown { triangles: 0, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 0, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/World/cam"), cameras: ["/World/cam"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/World/cam"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/unsupported_type_one_usda-61236dabf0bd2054-1.image b/crates/crust-core/tests/data/import_baselines/unsupported_type_one_usda-61236dabf0bd2054-1.image new file mode 100644 index 000000000..c734c5b1d --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/unsupported_type_one_usda-61236dabf0bd2054-1.image @@ -0,0 +1 @@ +640x360 16spp clamp-off a04a09c0d4b5e325 diff --git a/crates/crust-core/tests/data/import_baselines/unsupported_types_usda-4026b0fff876b77b-1.digest b/crates/crust-core/tests/data/import_baselines/unsupported_types_usda-4026b0fff876b77b-1.digest new file mode 100644 index 000000000..7772cb568 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/unsupported_types_usda-4026b0fff876b77b-1.digest @@ -0,0 +1,17 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/World/cam") +camera: Camera { origin: Vec3A(0.0, 0.0, 0.0), lower_left_corner: Vec3A(-2.7183647, -1.5290802, -10.0), horizontal: Vec3A(5.4367294, 0.0, 0.0), vertical: Vec3A(0.0, 3.0581603, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: None +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 640, height: 360, region: PixelRect { x0: 0, y0: 0, x1: 640, y1: 360 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 50.0, aperture: [20.955, 15.2908], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 10.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/unsupported_types.usda"], invisible_overrides: Some(0) } +layer: $DIR/unsupported_types.usda +warning: Warning { code: GeomUnsupportedType, kind: Skipped, count: 2, prims: ["/World/dust1", "/World/sheet"], message: "3 Points prims render nothing: crust does not read the Points type (the first at /World/dust1)" } +lights: 0 +volumes: 0 +world: 0 geometries, PrimitiveBreakdown { triangles: 0, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 0, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/World/cam"), cameras: ["/World/cam"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/World/cam"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/unsupported_types_usda-4026b0fff876b77b-1.image b/crates/crust-core/tests/data/import_baselines/unsupported_types_usda-4026b0fff876b77b-1.image new file mode 100644 index 000000000..c734c5b1d --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/unsupported_types_usda-4026b0fff876b77b-1.image @@ -0,0 +1 @@ +640x360 16spp clamp-off a04a09c0d4b5e325 diff --git a/crates/crust-core/tests/data/import_baselines/unsupported_usda-25a7c1709e68a39b-1.digest b/crates/crust-core/tests/data/import_baselines/unsupported_usda-25a7c1709e68a39b-1.digest new file mode 100644 index 000000000..33b956ebc --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/unsupported_usda-25a7c1709e68a39b-1.digest @@ -0,0 +1,27 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/World/cam") +camera: Camera { origin: Vec3A(0.0, 0.0, 0.0), lower_left_corner: Vec3A(-5.0, -3.75, -10.0), horizontal: Vec3A(10.0, 0.0, 0.0), vertical: Vec3A(0.0, 7.5, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: Some("/Render/settings") +settings: RenderSettings { samples_per_pixel: 16, max_depth: 2, width: 32, height: 24, region: PixelRect { x0: 0, y0: 0, x1: 32, y1: 24 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [AovProduct { prim_path: "/Render/p", name: "p.exr", vars: [AovVar { prim_path: "/Render/C", name: "C", channel_prefix: None, source: Color, components: 3, precision: Float, accumulation: Filtered, clear: 0.0, expression: None, raw: false, variance: false }, AovVar { prim_path: "/Render/matte", name: "matte", channel_prefix: None, source: Primvar(PrimvarSource { index: 0, components: 1, role: Float }), components: 1, precision: Float, accumulation: Filtered, clear: 0.0, expression: None, raw: false, variance: false }, AovVar { prim_path: "/Render/depth", name: "depth", channel_prefix: None, source: Depth, components: 1, precision: Float, accumulation: Closest, clear: inf, expression: None, raw: false, variance: false }, AovVar { prim_path: "/Render/depth_filtered", name: "depth_filtered", channel_prefix: None, source: Depth, components: 1, precision: Float, accumulation: Filtered, clear: inf, expression: None, raw: false, variance: false }, AovVar { prim_path: "/Render/variance", name: "variance", channel_prefix: None, source: Variance, components: 1, precision: Float, accumulation: Filtered, clear: 0.0, expression: None, raw: false, variance: false }, AovVar { prim_path: "/Render/g_out", name: "g_out", channel_prefix: None, source: Filter(FilterSource { display: false, filter: 0, output: 0, components: 3, radiance: true }), components: 3, precision: Float, accumulation: Filtered, clear: 0.0, expression: None, raw: false, variance: false }], attributes: [] }], precomp: Some(Precomp { sample_filters: ["/Render/g"], display_filters: [], display: "beauty" }) } +pass: None +source: Source { lens: Some(Lens { focal_length: 24.0, aperture: [24.0, 18.0], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 10.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/unsupported.usda"], invisible_overrides: Some(0) } +layer: $DIR/unsupported.usda +warning: Warning { code: PrecompUnsupportedNode, kind: Skipped, count: 1, prims: ["/Render/g"], message: "/Render/g: a sample filter cannot evaluate this graph (/Render/g/tex (image): reads the shading point or a texture); its outputs read their clear value" } +lights: 1 +light 0: dome name Some("/World/sky") lpe None pmf 1.0 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 2 geometries, PrimitiveBreakdown { triangles: 4, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 4, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov Some((Some(0), false)) swapped false curves false scale 1.0 motion [] pieces all=2:2a13523c8e09c13d camera=2:2a13523c8e09c13d shadow=2:2a13523c8e09c13d indirect=2:2a13523c8e09c13d +geom 1: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:31db52e4afd4a225 camera=2:31db52e4afd4a225 shadow=2:31db52e4afd4a225 indirect=2:31db52e4afd4a225 +provenance light /World/sky: LightOrigin { index: 0, geoms: 0..0 } +provenance geometry 0..1: /World/Card +provenance geometry 1..2: /World/Wall +provenance mesh: MeshOrigin { geom_id: 0, slot: 0, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 1, slot: 1, baked: true, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 3430351340666728903, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 1: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 13118596165941616386, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: true, working: None, camera: Some("/World/cam"), cameras: ["/World/cam"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [("matte", 1)], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/World/cam"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/unsupported_usda-25a7c1709e68a39b-1.image b/crates/crust-core/tests/data/import_baselines/unsupported_usda-25a7c1709e68a39b-1.image new file mode 100644 index 000000000..f08c49d36 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/unsupported_usda-25a7c1709e68a39b-1.image @@ -0,0 +1 @@ +32x24 16spp clamp-off e72b7b7cff87e77d diff --git a/crates/crust-core/tests/data/import_baselines/unusable_texture_usda-0a21b6baa96879e3-1.digest b/crates/crust-core/tests/data/import_baselines/unusable_texture_usda-0a21b6baa96879e3-1.digest new file mode 100644 index 000000000..3d7f6d17d --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/unusable_texture_usda-0a21b6baa96879e3-1.digest @@ -0,0 +1,23 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: None +camera: Camera { origin: Vec3A(15.0, 3.0, 3.0), lower_left_corner: Vec3A(4.8863316, -0.044797063, 4.174048), horizontal: Vec3A(1.2295314, 0.0, -6.147657), vertical: Vec3A(-0.44830504, 3.4967792, -0.08966101), u: Vec3A(0.19611613, 0.0, -0.9805807), v: Vec3A(-0.1271232, 0.991561, -0.02542464), lens_radius: 0.05, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: None +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 640, height: 360, region: PixelRect { x0: 0, y0: 0, x1: 640, y1: 360 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: None, depth_of_field: true, motion_blur: false, layer_stack: ["$DIR/unusable_texture.usda"], invisible_overrides: Some(0) } +layer: $DIR/unusable_texture.usda +warning: Warning { code: PreviewTextureWithoutFile, kind: Skipped, count: 1, prims: ["/World/Fallback/Map"], message: "UsdUVTexture /World/Fallback/Map: no inputs:file — displacement keeps its constant" } +warning: Warning { code: CameraMissing, kind: Skipped, count: 1, prims: [], message: "USD stage has no UsdGeomCamera — falling back to world::get_settings camera" } +lights: 0 +volumes: 0 +world: 1 geometries, PrimitiveBreakdown { triangles: 8, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 8, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=8:d7d5715877f61cf5 camera=8:d7d5715877f61cf5 shadow=8:d7d5715877f61cf5 indirect=8:d7d5715877f61cf5 +provenance material /World/Fallback: MaterialOrigin { slots: [0], displaced: true } +provenance geometry 0..1: /World/Ground +provenance mesh: MeshOrigin { geom_id: 0, slot: 0, baked: true, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 485570829870313581, n_points: 9, n_indices: 16, n_uvs: None, smooth: true, material: 0 }), placements: 1, shared: false, displaced: true } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: Some(1), subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 1, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: None, cameras: [], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: None, offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/unusable_texture_usda-0a21b6baa96879e3-1.image b/crates/crust-core/tests/data/import_baselines/unusable_texture_usda-0a21b6baa96879e3-1.image new file mode 100644 index 000000000..c734c5b1d --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/unusable_texture_usda-0a21b6baa96879e3-1.image @@ -0,0 +1 @@ +640x360 16spp clamp-off a04a09c0d4b5e325 diff --git a/crates/crust-core/tests/data/import_baselines/usdlux_usda-0d6669b552eae2be-1.digest b/crates/crust-core/tests/data/import_baselines/usdlux_usda-0d6669b552eae2be-1.digest new file mode 100644 index 000000000..886ee7681 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/usdlux_usda-0d6669b552eae2be-1.digest @@ -0,0 +1,56 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/World/Cam") +camera: Camera { origin: Vec3A(0.0, 2.4, 9.5), lower_left_corner: Vec3A(-7.5000005, -3.169425, 0.18445492), horizontal: Vec3A(15.000001, -0.0, 0.0), vertical: Vec3A(0.0, 8.355388, -1.1742734), u: Vec3A(1.0, -0.0, 0.0), v: Vec3A(0.0, 0.9902681, -0.13917312), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: Some("/Render/settings") +settings: RenderSettings { samples_per_pixel: 256, max_depth: 6, width: 640, height: 360, region: PixelRect { x0: 0, y0: 0, x1: 640, y1: 360 }, min_samples_per_pixel: 32, variance_threshold: 0.02, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 24.0, aperture: [36.0, 15.2908], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 10.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/usdlux.usda"], invisible_overrides: Some(0) } +layer: $DIR/usdlux.usda +lights: 7 +light 0: dome name Some("/World/Fill") lpe None pmf 0.14285715 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 1: area name Some("/World/WindowCard") lpe None pmf 0.14285715 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 2: area name Some("/World/Ellipsoid") lpe None pmf 0.14285715 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 3: area name Some("/World/IesFixture") lpe None pmf 0.14285715 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 4: area name Some("/World/Spot") lpe None pmf 0.14285715 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 5: area name Some("/World/CoolTube") lpe None pmf 0.14285715 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 6: area name Some("/World/WarmDisk") lpe None pmf 0.14285715 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 11 geometries, PrimitiveBreakdown { triangles: 8, spheres: 4, disks: 1, cylinders: 1, curve_segments: 0, cubic_curve_spans: 0, instances: 1 } top level, PrimitiveBreakdown { triangles: 8, spheres: 5, disks: 1, cylinders: 1, curve_segments: 0, cubic_curve_spans: 0, instances: 1 } unique, motion false +geom 0: material #0 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:3dbc69f15b1ac77d camera=2:3dbc69f15b1ac77d shadow=2:3dbc69f15b1ac77d indirect=2:3dbc69f15b1ac77d +geom 1: material #1 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:edbf703ad643543d camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=1:edbf703ad643543d +geom 2: material #2 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:2df0f9dd89eeee0f camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=1:2df0f9dd89eeee0f +geom 3: material #3 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:4f58e5897b156a45 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=2:4f58e5897b156a45 +geom 4: material #4 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:6e3deb80ada04f92 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=1:6e3deb80ada04f92 +geom 5: material #5 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:251665dcff744d36 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=1:251665dcff744d36 +geom 6: material #6 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:5a9c9481f8865ae2 camera=1:5a9c9481f8865ae2 shadow=1:5a9c9481f8865ae2 indirect=1:5a9c9481f8865ae2 +geom 7: material #6 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:b28b0932afc7774d camera=1:b28b0932afc7774d shadow=1:b28b0932afc7774d indirect=1:b28b0932afc7774d +geom 8: material #6 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:4a7da724207a40a6 camera=1:4a7da724207a40a6 shadow=1:4a7da724207a40a6 indirect=1:4a7da724207a40a6 +geom 9: material #6 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:89df991028a13015 camera=2:89df991028a13015 shadow=2:89df991028a13015 indirect=2:89df991028a13015 +geom 10: material #6 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:b4a7d808553c2cb2 camera=2:b4a7d808553c2cb2 shadow=2:b4a7d808553c2cb2 indirect=2:b4a7d808553c2cb2 +provenance light /World/CoolTube: LightOrigin { index: 5, geoms: 4..5 } +provenance light /World/Ellipsoid: LightOrigin { index: 2, geoms: 1..2 } +provenance light /World/Fill: LightOrigin { index: 0, geoms: 0..0 } +provenance light /World/IesFixture: LightOrigin { index: 3, geoms: 2..3 } +provenance light /World/Spot: LightOrigin { index: 4, geoms: 3..4 } +provenance light /World/WarmDisk: LightOrigin { index: 6, geoms: 5..6 } +provenance light /World/WindowCard: LightOrigin { index: 1, geoms: 0..1 } +provenance geometry 0..1: /World/WindowCard +provenance geometry 1..2: /World/Ellipsoid +provenance geometry 2..3: /World/IesFixture +provenance geometry 3..4: /World/Spot +provenance geometry 4..5: /World/CoolTube +provenance geometry 5..6: /World/WarmDisk +provenance geometry 6..7: /World/BallRight +provenance geometry 7..8: /World/BallCenter +provenance geometry 8..9: /World/BallLeft +provenance geometry 9..10: /World/BackWall +provenance geometry 10..11: /World/Floor +provenance mesh: MeshOrigin { geom_id: 9, slot: 0, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 10, slot: 1, baked: true, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 14805932933694298385, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 1: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 8254717367002287235, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [6, 7, 8] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: true, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/World/Cam"), cameras: ["/World/Cam"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/World/Cam"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/usdlux_usda-0d6669b552eae2be-1.image b/crates/crust-core/tests/data/import_baselines/usdlux_usda-0d6669b552eae2be-1.image new file mode 100644 index 000000000..3eeccdcf4 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/usdlux_usda-0d6669b552eae2be-1.image @@ -0,0 +1 @@ +640x360 16spp clamp-off 261a1de10d2ae6ef diff --git a/crates/crust-core/tests/data/import_baselines/usdlux_usda-39cf98150f7f0d03-1.digest b/crates/crust-core/tests/data/import_baselines/usdlux_usda-39cf98150f7f0d03-1.digest new file mode 100644 index 000000000..12cd00454 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/usdlux_usda-39cf98150f7f0d03-1.digest @@ -0,0 +1,57 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/World/Cam") +camera: Camera { origin: Vec3A(0.0, 2.4, 9.5), lower_left_corner: Vec3A(-7.5000005, -3.169425, 0.18445492), horizontal: Vec3A(15.000001, -0.0, 0.0), vertical: Vec3A(0.0, 8.355388, -1.1742734), u: Vec3A(1.0, -0.0, 0.0), v: Vec3A(0.0, 0.9902681, -0.13917312), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: Some("/Render/settings") +settings: RenderSettings { samples_per_pixel: 256, max_depth: 6, width: 640, height: 360, region: PixelRect { x0: 0, y0: 0, x1: 640, y1: 360 }, min_samples_per_pixel: 32, variance_threshold: 0.02, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 24.0, aperture: [36.0, 15.2908], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 10.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/usdlux.usda"], invisible_overrides: Some(0) } +layer: $DIR/usdlux.usda +warning: Warning { code: AssetUnsupportedByHost, kind: Skipped, count: 2, prims: [], message: "Asset loader does not decode light textures: $DIR/textures/window_card.exr ignored — the light emits its uniform colour." } +lights: 7 +light 0: dome name Some("/World/Fill") lpe None pmf 0.14285715 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 1: area name Some("/World/WindowCard") lpe None pmf 0.14285715 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 2: area name Some("/World/Ellipsoid") lpe None pmf 0.14285715 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 3: area name Some("/World/IesFixture") lpe None pmf 0.14285715 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 4: area name Some("/World/Spot") lpe None pmf 0.14285715 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 5: area name Some("/World/CoolTube") lpe None pmf 0.14285715 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 6: area name Some("/World/WarmDisk") lpe None pmf 0.14285715 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 11 geometries, PrimitiveBreakdown { triangles: 8, spheres: 4, disks: 1, cylinders: 1, curve_segments: 0, cubic_curve_spans: 0, instances: 1 } top level, PrimitiveBreakdown { triangles: 8, spheres: 5, disks: 1, cylinders: 1, curve_segments: 0, cubic_curve_spans: 0, instances: 1 } unique, motion false +geom 0: material #0 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:3dbc69f15b1ac77d camera=2:3dbc69f15b1ac77d shadow=2:3dbc69f15b1ac77d indirect=2:3dbc69f15b1ac77d +geom 1: material #1 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:edbf703ad643543d camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=1:edbf703ad643543d +geom 2: material #2 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:2df0f9dd89eeee0f camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=1:2df0f9dd89eeee0f +geom 3: material #3 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:4f58e5897b156a45 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=2:4f58e5897b156a45 +geom 4: material #4 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:6e3deb80ada04f92 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=1:6e3deb80ada04f92 +geom 5: material #5 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:251665dcff744d36 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=1:251665dcff744d36 +geom 6: material #6 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:5a9c9481f8865ae2 camera=1:5a9c9481f8865ae2 shadow=1:5a9c9481f8865ae2 indirect=1:5a9c9481f8865ae2 +geom 7: material #6 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:b28b0932afc7774d camera=1:b28b0932afc7774d shadow=1:b28b0932afc7774d indirect=1:b28b0932afc7774d +geom 8: material #6 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:4a7da724207a40a6 camera=1:4a7da724207a40a6 shadow=1:4a7da724207a40a6 indirect=1:4a7da724207a40a6 +geom 9: material #6 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:89df991028a13015 camera=2:89df991028a13015 shadow=2:89df991028a13015 indirect=2:89df991028a13015 +geom 10: material #6 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:b4a7d808553c2cb2 camera=2:b4a7d808553c2cb2 shadow=2:b4a7d808553c2cb2 indirect=2:b4a7d808553c2cb2 +provenance light /World/CoolTube: LightOrigin { index: 5, geoms: 4..5 } +provenance light /World/Ellipsoid: LightOrigin { index: 2, geoms: 1..2 } +provenance light /World/Fill: LightOrigin { index: 0, geoms: 0..0 } +provenance light /World/IesFixture: LightOrigin { index: 3, geoms: 2..3 } +provenance light /World/Spot: LightOrigin { index: 4, geoms: 3..4 } +provenance light /World/WarmDisk: LightOrigin { index: 6, geoms: 5..6 } +provenance light /World/WindowCard: LightOrigin { index: 1, geoms: 0..1 } +provenance geometry 0..1: /World/WindowCard +provenance geometry 1..2: /World/Ellipsoid +provenance geometry 2..3: /World/IesFixture +provenance geometry 3..4: /World/Spot +provenance geometry 4..5: /World/CoolTube +provenance geometry 5..6: /World/WarmDisk +provenance geometry 6..7: /World/BallRight +provenance geometry 7..8: /World/BallCenter +provenance geometry 8..9: /World/BallLeft +provenance geometry 9..10: /World/BackWall +provenance geometry 10..11: /World/Floor +provenance mesh: MeshOrigin { geom_id: 9, slot: 0, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 10, slot: 1, baked: true, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 14805932933694298385, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 1: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 8254717367002287235, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [6, 7, 8] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/World/Cam"), cameras: ["/World/Cam"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/World/Cam"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/usdlux_usda-39cf98150f7f0d03-1.image b/crates/crust-core/tests/data/import_baselines/usdlux_usda-39cf98150f7f0d03-1.image new file mode 100644 index 000000000..4d80eacc3 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/usdlux_usda-39cf98150f7f0d03-1.image @@ -0,0 +1 @@ +640x360 16spp clamp-off 6e992d079a88699b diff --git a/crates/crust-core/tests/data/import_baselines/usdlux_usda-39cf98150f7f0d03-2.digest b/crates/crust-core/tests/data/import_baselines/usdlux_usda-39cf98150f7f0d03-2.digest new file mode 100644 index 000000000..12cd00454 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/usdlux_usda-39cf98150f7f0d03-2.digest @@ -0,0 +1,57 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/World/Cam") +camera: Camera { origin: Vec3A(0.0, 2.4, 9.5), lower_left_corner: Vec3A(-7.5000005, -3.169425, 0.18445492), horizontal: Vec3A(15.000001, -0.0, 0.0), vertical: Vec3A(0.0, 8.355388, -1.1742734), u: Vec3A(1.0, -0.0, 0.0), v: Vec3A(0.0, 0.9902681, -0.13917312), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: Some("/Render/settings") +settings: RenderSettings { samples_per_pixel: 256, max_depth: 6, width: 640, height: 360, region: PixelRect { x0: 0, y0: 0, x1: 640, y1: 360 }, min_samples_per_pixel: 32, variance_threshold: 0.02, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 24.0, aperture: [36.0, 15.2908], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 10.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/usdlux.usda"], invisible_overrides: Some(0) } +layer: $DIR/usdlux.usda +warning: Warning { code: AssetUnsupportedByHost, kind: Skipped, count: 2, prims: [], message: "Asset loader does not decode light textures: $DIR/textures/window_card.exr ignored — the light emits its uniform colour." } +lights: 7 +light 0: dome name Some("/World/Fill") lpe None pmf 0.14285715 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 1: area name Some("/World/WindowCard") lpe None pmf 0.14285715 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 2: area name Some("/World/Ellipsoid") lpe None pmf 0.14285715 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 3: area name Some("/World/IesFixture") lpe None pmf 0.14285715 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 4: area name Some("/World/Spot") lpe None pmf 0.14285715 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 5: area name Some("/World/CoolTube") lpe None pmf 0.14285715 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 6: area name Some("/World/WarmDisk") lpe None pmf 0.14285715 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 11 geometries, PrimitiveBreakdown { triangles: 8, spheres: 4, disks: 1, cylinders: 1, curve_segments: 0, cubic_curve_spans: 0, instances: 1 } top level, PrimitiveBreakdown { triangles: 8, spheres: 5, disks: 1, cylinders: 1, curve_segments: 0, cubic_curve_spans: 0, instances: 1 } unique, motion false +geom 0: material #0 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:3dbc69f15b1ac77d camera=2:3dbc69f15b1ac77d shadow=2:3dbc69f15b1ac77d indirect=2:3dbc69f15b1ac77d +geom 1: material #1 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:edbf703ad643543d camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=1:edbf703ad643543d +geom 2: material #2 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:2df0f9dd89eeee0f camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=1:2df0f9dd89eeee0f +geom 3: material #3 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:4f58e5897b156a45 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=2:4f58e5897b156a45 +geom 4: material #4 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:6e3deb80ada04f92 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=1:6e3deb80ada04f92 +geom 5: material #5 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:251665dcff744d36 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=1:251665dcff744d36 +geom 6: material #6 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:5a9c9481f8865ae2 camera=1:5a9c9481f8865ae2 shadow=1:5a9c9481f8865ae2 indirect=1:5a9c9481f8865ae2 +geom 7: material #6 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:b28b0932afc7774d camera=1:b28b0932afc7774d shadow=1:b28b0932afc7774d indirect=1:b28b0932afc7774d +geom 8: material #6 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:4a7da724207a40a6 camera=1:4a7da724207a40a6 shadow=1:4a7da724207a40a6 indirect=1:4a7da724207a40a6 +geom 9: material #6 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:89df991028a13015 camera=2:89df991028a13015 shadow=2:89df991028a13015 indirect=2:89df991028a13015 +geom 10: material #6 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:b4a7d808553c2cb2 camera=2:b4a7d808553c2cb2 shadow=2:b4a7d808553c2cb2 indirect=2:b4a7d808553c2cb2 +provenance light /World/CoolTube: LightOrigin { index: 5, geoms: 4..5 } +provenance light /World/Ellipsoid: LightOrigin { index: 2, geoms: 1..2 } +provenance light /World/Fill: LightOrigin { index: 0, geoms: 0..0 } +provenance light /World/IesFixture: LightOrigin { index: 3, geoms: 2..3 } +provenance light /World/Spot: LightOrigin { index: 4, geoms: 3..4 } +provenance light /World/WarmDisk: LightOrigin { index: 6, geoms: 5..6 } +provenance light /World/WindowCard: LightOrigin { index: 1, geoms: 0..1 } +provenance geometry 0..1: /World/WindowCard +provenance geometry 1..2: /World/Ellipsoid +provenance geometry 2..3: /World/IesFixture +provenance geometry 3..4: /World/Spot +provenance geometry 4..5: /World/CoolTube +provenance geometry 5..6: /World/WarmDisk +provenance geometry 6..7: /World/BallRight +provenance geometry 7..8: /World/BallCenter +provenance geometry 8..9: /World/BallLeft +provenance geometry 9..10: /World/BackWall +provenance geometry 10..11: /World/Floor +provenance mesh: MeshOrigin { geom_id: 9, slot: 0, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 10, slot: 1, baked: true, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 14805932933694298385, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 1: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 8254717367002287235, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [6, 7, 8] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/World/Cam"), cameras: ["/World/Cam"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/World/Cam"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/usdlux_usda-39cf98150f7f0d03-2.image b/crates/crust-core/tests/data/import_baselines/usdlux_usda-39cf98150f7f0d03-2.image new file mode 100644 index 000000000..4d80eacc3 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/usdlux_usda-39cf98150f7f0d03-2.image @@ -0,0 +1 @@ +640x360 16spp clamp-off 6e992d079a88699b diff --git a/crates/crust-core/tests/data/import_baselines/usdpreview_textured_usda-36a3119df926a1de-1.digest b/crates/crust-core/tests/data/import_baselines/usdpreview_textured_usda-36a3119df926a1de-1.digest new file mode 100644 index 000000000..cbb255638 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/usdpreview_textured_usda-36a3119df926a1de-1.digest @@ -0,0 +1,42 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/World/ShotCam") +camera: Camera { origin: Vec3A(0.0, -0.1, 7.0), lower_left_corner: Vec3A(-2.5200002, -1.5175003, 0.0), horizontal: Vec3A(5.0400004, 0.0, 0.0), vertical: Vec3A(0.0, 2.8350005, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: Some("/Render/settings") +settings: RenderSettings { samples_per_pixel: 64, max_depth: 8, width: 640, height: 360, region: PixelRect { x0: 0, y0: 0, x1: 640, y1: 360 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 50.0, aperture: [36.0, 15.2908], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 7.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/usdpreview_textured.usda"], invisible_overrides: Some(0) } +layer: $DIR/usdpreview_textured.usda +lights: 2 +light 0: area name Some("/World/Key") lpe None pmf 0.5 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 1: dome name Some("/World/Sky") lpe None pmf 0.5 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 5 geometries, PrimitiveBreakdown { triangles: 10, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 10, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +geom 0: material #0 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:d922ac2ec48f4f97 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=2:d922ac2ec48f4f97 +geom 1: material #1 Signature { kind: "UsdPreviewSurface (textured)", cutout: false, straight: false, boundary: false, emits: false, uv: true, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv Some(0) shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:23063c3980664227 camera=2:23063c3980664227 shadow=2:23063c3980664227 indirect=2:23063c3980664227 +geom 2: material #2 Signature { kind: "UsdPreviewSurface (textured)", cutout: false, straight: false, boundary: false, emits: false, uv: true, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv Some(1) shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:380b2e0280de83db camera=2:380b2e0280de83db shadow=2:380b2e0280de83db indirect=2:380b2e0280de83db +geom 3: material #3 Signature { kind: "UsdPreviewSurface (textured)", cutout: false, straight: false, boundary: false, emits: false, uv: true, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv Some(2) shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:14161eeed09e7034 camera=2:14161eeed09e7034 shadow=2:14161eeed09e7034 indirect=2:14161eeed09e7034 +geom 4: material #4 Signature { kind: "UsdPreviewSurface (textured)", cutout: false, straight: false, boundary: false, emits: false, uv: true, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv Some(3) shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:08414313d8d6e290 camera=2:08414313d8d6e290 shadow=2:08414313d8d6e290 indirect=2:08414313d8d6e290 +provenance material /World/Looks/ExrAuto: MaterialOrigin { slots: [3], displaced: false } +provenance material /World/Looks/MaskedMetal: MaterialOrigin { slots: [2], displaced: false } +provenance material /World/Looks/NormalMapped: MaterialOrigin { slots: [1], displaced: false } +provenance material /World/Looks/UdimSrgb: MaterialOrigin { slots: [4], displaced: false } +provenance light /World/Key: LightOrigin { index: 0, geoms: 0..1 } +provenance light /World/Sky: LightOrigin { index: 1, geoms: 1..1 } +provenance geometry 0..1: /World/Key +provenance geometry 1..2: /World/NormalQuad +provenance geometry 2..3: /World/MetalQuad +provenance geometry 3..4: /World/ExrQuad +provenance geometry 4..5: /World/UdimQuad +provenance mesh: MeshOrigin { geom_id: 1, slot: 0, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 2, slot: 1, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 3, slot: 2, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 4, slot: 3, baked: true, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 9086379455125602793, n_points: 4, n_indices: 4, n_uvs: Some(4), smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 1: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 10115957615497089662, n_points: 4, n_indices: 4, n_uvs: Some(4), smooth: false, material: 1 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 2: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 10519275802662681676, n_points: 4, n_indices: 4, n_uvs: Some(4), smooth: false, material: 2 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 3: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 11939811521305294379, n_points: 4, n_indices: 4, n_uvs: Some(4), smooth: false, material: 3 }), placements: 1, shared: false, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/World/ShotCam"), cameras: ["/World/ShotCam"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/World/ShotCam"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/usdpreview_textured_usda-36a3119df926a1de-1.image b/crates/crust-core/tests/data/import_baselines/usdpreview_textured_usda-36a3119df926a1de-1.image new file mode 100644 index 000000000..689eb29ff --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/usdpreview_textured_usda-36a3119df926a1de-1.image @@ -0,0 +1 @@ +640x360 16spp clamp-off a8300ec22558283c diff --git a/crates/crust-core/tests/data/import_baselines/usdpreview_textured_usda-7e17862f6c19bca4-1.digest b/crates/crust-core/tests/data/import_baselines/usdpreview_textured_usda-7e17862f6c19bca4-1.digest new file mode 100644 index 000000000..2b9e1183e --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/usdpreview_textured_usda-7e17862f6c19bca4-1.digest @@ -0,0 +1,42 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/World/ShotCam") +camera: Camera { origin: Vec3A(0.0, -0.1, 7.0), lower_left_corner: Vec3A(-2.5200002, -1.5175003, 0.0), horizontal: Vec3A(5.0400004, 0.0, 0.0), vertical: Vec3A(0.0, 2.8350005, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: Some("/Render/settings") +settings: RenderSettings { samples_per_pixel: 64, max_depth: 8, width: 640, height: 360, region: PixelRect { x0: 0, y0: 0, x1: 640, y1: 360 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 50.0, aperture: [36.0, 15.2908], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 7.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/usdpreview_textured.usda"], invisible_overrides: Some(0) } +layer: $DIR/usdpreview_textured.usda +lights: 2 +light 0: area name Some("/World/Key") lpe None pmf 0.5 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 1: dome name Some("/World/Sky") lpe None pmf 0.5 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 5 geometries, PrimitiveBreakdown { triangles: 10, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 10, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +geom 0: material #0 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:d922ac2ec48f4f97 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=2:d922ac2ec48f4f97 +geom 1: material #1 Signature { kind: "UsdPreviewSurface (textured)", cutout: false, straight: false, boundary: false, emits: false, uv: true, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv Some(0) shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:23063c3980664227 camera=2:23063c3980664227 shadow=2:23063c3980664227 indirect=2:23063c3980664227 +geom 2: material #2 Signature { kind: "UsdPreviewSurface (textured)", cutout: false, straight: false, boundary: false, emits: false, uv: true, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv Some(1) shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:380b2e0280de83db camera=2:380b2e0280de83db shadow=2:380b2e0280de83db indirect=2:380b2e0280de83db +geom 3: material #3 Signature { kind: "UsdPreviewSurface (textured)", cutout: false, straight: false, boundary: false, emits: false, uv: true, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv Some(2) shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:14161eeed09e7034 camera=2:14161eeed09e7034 shadow=2:14161eeed09e7034 indirect=2:14161eeed09e7034 +geom 4: material #4 Signature { kind: "UsdPreviewSurface (textured)", cutout: false, straight: false, boundary: false, emits: false, uv: true, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv Some(3) shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:08414313d8d6e290 camera=2:08414313d8d6e290 shadow=2:08414313d8d6e290 indirect=2:08414313d8d6e290 +provenance material /World/Looks/ExrAuto: MaterialOrigin { slots: [3], displaced: false } +provenance material /World/Looks/MaskedMetal: MaterialOrigin { slots: [2], displaced: false } +provenance material /World/Looks/NormalMapped: MaterialOrigin { slots: [1], displaced: false } +provenance material /World/Looks/UdimSrgb: MaterialOrigin { slots: [4], displaced: false } +provenance light /World/Key: LightOrigin { index: 0, geoms: 0..1 } +provenance light /World/Sky: LightOrigin { index: 1, geoms: 1..1 } +provenance geometry 0..1: /World/Key +provenance geometry 1..2: /World/NormalQuad +provenance geometry 2..3: /World/MetalQuad +provenance geometry 3..4: /World/ExrQuad +provenance geometry 4..5: /World/UdimQuad +provenance mesh: MeshOrigin { geom_id: 1, slot: 0, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 2, slot: 1, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 3, slot: 2, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 4, slot: 3, baked: true, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 9086379455125602793, n_points: 4, n_indices: 4, n_uvs: Some(4), smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 1: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 10115957615497089662, n_points: 4, n_indices: 4, n_uvs: Some(4), smooth: false, material: 1 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 2: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 10519275802662681676, n_points: 4, n_indices: 4, n_uvs: Some(4), smooth: false, material: 2 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 3: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 11939811521305294379, n_points: 4, n_indices: 4, n_uvs: Some(4), smooth: false, material: 3 }), placements: 1, shared: false, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: true, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/World/ShotCam"), cameras: ["/World/ShotCam"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/World/ShotCam"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/usdpreview_textured_usda-7e17862f6c19bca4-1.image b/crates/crust-core/tests/data/import_baselines/usdpreview_textured_usda-7e17862f6c19bca4-1.image new file mode 100644 index 000000000..89bca8581 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/usdpreview_textured_usda-7e17862f6c19bca4-1.image @@ -0,0 +1 @@ +640x360 16spp clamp-off dda8670152809087 diff --git a/crates/crust-core/tests/data/import_baselines/usdpreview_textured_usda-ae16aa06d4e182b3-1.digest b/crates/crust-core/tests/data/import_baselines/usdpreview_textured_usda-ae16aa06d4e182b3-1.digest new file mode 100644 index 000000000..5a71a4842 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/usdpreview_textured_usda-ae16aa06d4e182b3-1.digest @@ -0,0 +1,43 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/World/ShotCam") +camera: Camera { origin: Vec3A(0.0, -0.1, 7.0), lower_left_corner: Vec3A(-2.5200002, -1.5175003, 0.0), horizontal: Vec3A(5.0400004, 0.0, 0.0), vertical: Vec3A(0.0, 2.8350005, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: Some("/Render/settings") +settings: RenderSettings { samples_per_pixel: 64, max_depth: 8, width: 640, height: 360, region: PixelRect { x0: 0, y0: 0, x1: 640, y1: 360 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 50.0, aperture: [36.0, 15.2908], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 7.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/usdpreview_textured.usda"], invisible_overrides: Some(0) } +layer: $DIR/usdpreview_textured.usda +warning: Warning { code: AssetUnsupportedByHost, kind: Skipped, count: 5, prims: [], message: "Asset loader does not decode UV textures: $DIR/textures/mtlx_normal..png ignored — the input falls back to its constant value." } +lights: 2 +light 0: area name Some("/World/Key") lpe None pmf 0.5 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 1: dome name Some("/World/Sky") lpe None pmf 0.5 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 5 geometries, PrimitiveBreakdown { triangles: 10, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 10, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +geom 0: material #0 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:d922ac2ec48f4f97 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=2:d922ac2ec48f4f97 +geom 1: material #1 Signature { kind: "UsdPreviewSurface (textured)", cutout: false, straight: false, boundary: false, emits: false, uv: true, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv Some(0) shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:23063c3980664227 camera=2:23063c3980664227 shadow=2:23063c3980664227 indirect=2:23063c3980664227 +geom 2: material #2 Signature { kind: "UsdPreviewSurface (textured)", cutout: false, straight: false, boundary: false, emits: false, uv: true, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv Some(1) shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:380b2e0280de83db camera=2:380b2e0280de83db shadow=2:380b2e0280de83db indirect=2:380b2e0280de83db +geom 3: material #3 Signature { kind: "UsdPreviewSurface (textured)", cutout: false, straight: false, boundary: false, emits: false, uv: true, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv Some(2) shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:14161eeed09e7034 camera=2:14161eeed09e7034 shadow=2:14161eeed09e7034 indirect=2:14161eeed09e7034 +geom 4: material #4 Signature { kind: "UsdPreviewSurface (textured)", cutout: false, straight: false, boundary: false, emits: false, uv: true, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv Some(3) shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:08414313d8d6e290 camera=2:08414313d8d6e290 shadow=2:08414313d8d6e290 indirect=2:08414313d8d6e290 +provenance material /World/Looks/ExrAuto: MaterialOrigin { slots: [3], displaced: false } +provenance material /World/Looks/MaskedMetal: MaterialOrigin { slots: [2], displaced: false } +provenance material /World/Looks/NormalMapped: MaterialOrigin { slots: [1], displaced: false } +provenance material /World/Looks/UdimSrgb: MaterialOrigin { slots: [4], displaced: false } +provenance light /World/Key: LightOrigin { index: 0, geoms: 0..1 } +provenance light /World/Sky: LightOrigin { index: 1, geoms: 1..1 } +provenance geometry 0..1: /World/Key +provenance geometry 1..2: /World/NormalQuad +provenance geometry 2..3: /World/MetalQuad +provenance geometry 3..4: /World/ExrQuad +provenance geometry 4..5: /World/UdimQuad +provenance mesh: MeshOrigin { geom_id: 1, slot: 0, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 2, slot: 1, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 3, slot: 2, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 4, slot: 3, baked: true, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 9086379455125602793, n_points: 4, n_indices: 4, n_uvs: Some(4), smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 1: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 10115957615497089662, n_points: 4, n_indices: 4, n_uvs: Some(4), smooth: false, material: 1 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 2: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 10519275802662681676, n_points: 4, n_indices: 4, n_uvs: Some(4), smooth: false, material: 2 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 3: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 11939811521305294379, n_points: 4, n_indices: 4, n_uvs: Some(4), smooth: false, material: 3 }), placements: 1, shared: false, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/World/ShotCam"), cameras: ["/World/ShotCam"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/World/ShotCam"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/usdpreview_textured_usda-ae16aa06d4e182b3-1.image b/crates/crust-core/tests/data/import_baselines/usdpreview_textured_usda-ae16aa06d4e182b3-1.image new file mode 100644 index 000000000..689eb29ff --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/usdpreview_textured_usda-ae16aa06d4e182b3-1.image @@ -0,0 +1 @@ +640x360 16spp clamp-off a8300ec22558283c diff --git a/crates/crust-core/tests/data/import_baselines/usdpreview_textured_usda-ae16aa06d4e182b3-2.digest b/crates/crust-core/tests/data/import_baselines/usdpreview_textured_usda-ae16aa06d4e182b3-2.digest new file mode 100644 index 000000000..5a71a4842 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/usdpreview_textured_usda-ae16aa06d4e182b3-2.digest @@ -0,0 +1,43 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/World/ShotCam") +camera: Camera { origin: Vec3A(0.0, -0.1, 7.0), lower_left_corner: Vec3A(-2.5200002, -1.5175003, 0.0), horizontal: Vec3A(5.0400004, 0.0, 0.0), vertical: Vec3A(0.0, 2.8350005, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: Some("/Render/settings") +settings: RenderSettings { samples_per_pixel: 64, max_depth: 8, width: 640, height: 360, region: PixelRect { x0: 0, y0: 0, x1: 640, y1: 360 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 50.0, aperture: [36.0, 15.2908], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 7.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/usdpreview_textured.usda"], invisible_overrides: Some(0) } +layer: $DIR/usdpreview_textured.usda +warning: Warning { code: AssetUnsupportedByHost, kind: Skipped, count: 5, prims: [], message: "Asset loader does not decode UV textures: $DIR/textures/mtlx_normal..png ignored — the input falls back to its constant value." } +lights: 2 +light 0: area name Some("/World/Key") lpe None pmf 0.5 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 1: dome name Some("/World/Sky") lpe None pmf 0.5 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 5 geometries, PrimitiveBreakdown { triangles: 10, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 10, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +geom 0: material #0 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:d922ac2ec48f4f97 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=2:d922ac2ec48f4f97 +geom 1: material #1 Signature { kind: "UsdPreviewSurface (textured)", cutout: false, straight: false, boundary: false, emits: false, uv: true, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv Some(0) shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:23063c3980664227 camera=2:23063c3980664227 shadow=2:23063c3980664227 indirect=2:23063c3980664227 +geom 2: material #2 Signature { kind: "UsdPreviewSurface (textured)", cutout: false, straight: false, boundary: false, emits: false, uv: true, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv Some(1) shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:380b2e0280de83db camera=2:380b2e0280de83db shadow=2:380b2e0280de83db indirect=2:380b2e0280de83db +geom 3: material #3 Signature { kind: "UsdPreviewSurface (textured)", cutout: false, straight: false, boundary: false, emits: false, uv: true, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv Some(2) shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:14161eeed09e7034 camera=2:14161eeed09e7034 shadow=2:14161eeed09e7034 indirect=2:14161eeed09e7034 +geom 4: material #4 Signature { kind: "UsdPreviewSurface (textured)", cutout: false, straight: false, boundary: false, emits: false, uv: true, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv Some(3) shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:08414313d8d6e290 camera=2:08414313d8d6e290 shadow=2:08414313d8d6e290 indirect=2:08414313d8d6e290 +provenance material /World/Looks/ExrAuto: MaterialOrigin { slots: [3], displaced: false } +provenance material /World/Looks/MaskedMetal: MaterialOrigin { slots: [2], displaced: false } +provenance material /World/Looks/NormalMapped: MaterialOrigin { slots: [1], displaced: false } +provenance material /World/Looks/UdimSrgb: MaterialOrigin { slots: [4], displaced: false } +provenance light /World/Key: LightOrigin { index: 0, geoms: 0..1 } +provenance light /World/Sky: LightOrigin { index: 1, geoms: 1..1 } +provenance geometry 0..1: /World/Key +provenance geometry 1..2: /World/NormalQuad +provenance geometry 2..3: /World/MetalQuad +provenance geometry 3..4: /World/ExrQuad +provenance geometry 4..5: /World/UdimQuad +provenance mesh: MeshOrigin { geom_id: 1, slot: 0, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 2, slot: 1, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 3, slot: 2, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 4, slot: 3, baked: true, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 9086379455125602793, n_points: 4, n_indices: 4, n_uvs: Some(4), smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 1: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 10115957615497089662, n_points: 4, n_indices: 4, n_uvs: Some(4), smooth: false, material: 1 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 2: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 10519275802662681676, n_points: 4, n_indices: 4, n_uvs: Some(4), smooth: false, material: 2 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 3: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 11939811521305294379, n_points: 4, n_indices: 4, n_uvs: Some(4), smooth: false, material: 3 }), placements: 1, shared: false, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/World/ShotCam"), cameras: ["/World/ShotCam"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/World/ShotCam"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/usdpreview_textured_usda-ae16aa06d4e182b3-2.image b/crates/crust-core/tests/data/import_baselines/usdpreview_textured_usda-ae16aa06d4e182b3-2.image new file mode 100644 index 000000000..689eb29ff --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/usdpreview_textured_usda-ae16aa06d4e182b3-2.image @@ -0,0 +1 @@ +640x360 16spp clamp-off a8300ec22558283c diff --git a/crates/crust-core/tests/data/import_baselines/uv2_usda-a9136787dec77f95-1.digest b/crates/crust-core/tests/data/import_baselines/uv2_usda-a9136787dec77f95-1.digest new file mode 100644 index 000000000..267d1e0ee --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/uv2_usda-a9136787dec77f95-1.digest @@ -0,0 +1,22 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/World/cam") +camera: Camera { origin: Vec3A(0.0, 0.0, 10.0), lower_left_corner: Vec3A(-2.0955, -1.5716249, 0.0), horizontal: Vec3A(4.191, 0.0, 0.0), vertical: Vec3A(0.0, 3.1432498, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: Some("/Render/settings") +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 48, height: 36, region: PixelRect { x0: 0, y0: 0, x1: 48, y1: 36 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [AovProduct { prim_path: "/Render/p", name: "p.exr", vars: [AovVar { prim_path: "/Render/P", name: "P", channel_prefix: None, source: P, components: 3, precision: Float, accumulation: Closest, clear: 0.0, expression: None, raw: false, variance: false }, AovVar { prim_path: "/Render/uv2", name: "uv2", channel_prefix: None, source: Primvar(PrimvarSource { index: 0, components: 2, role: TexCoord }), components: 2, precision: Float, accumulation: Closest, clear: 0.0, expression: None, raw: false, variance: false }], attributes: [] }], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 50.0, aperture: [20.955, 15.2908], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 10.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/uv2.usda"], invisible_overrides: Some(0) } +layer: $DIR/uv2.usda +lights: 1 +light 0: dome name Some("/World/dome") lpe None pmf 1.0 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 1 geometries, PrimitiveBreakdown { triangles: 4, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 4, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov Some((Some(0), false)) swapped false curves false scale 1.0 motion [] pieces all=4:4a0c58876aa29995 camera=4:4a0c58876aa29995 shadow=4:4a0c58876aa29995 indirect=4:4a0c58876aa29995 +provenance light /World/dome: LightOrigin { index: 0, geoms: 1..1 } +provenance geometry 0..1: /World/mesh +provenance mesh: MeshOrigin { geom_id: 0, slot: 0, baked: true, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 13769581966721318563, n_points: 6, n_indices: 8, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/World/cam"), cameras: ["/World/cam"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [("uv2", 2)], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/World/cam"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/uv2_usda-a9136787dec77f95-1.image b/crates/crust-core/tests/data/import_baselines/uv2_usda-a9136787dec77f95-1.image new file mode 100644 index 000000000..648a9f248 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/uv2_usda-a9136787dec77f95-1.image @@ -0,0 +1 @@ +48x36 16spp clamp-off 54407d51eeed59ca diff --git a/crates/crust-core/tests/data/import_baselines/uv_dedup_same_usda-9ef71121455e022c-1.digest b/crates/crust-core/tests/data/import_baselines/uv_dedup_same_usda-9ef71121455e022c-1.digest new file mode 100644 index 000000000..7d417212c --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/uv_dedup_same_usda-9ef71121455e022c-1.digest @@ -0,0 +1,25 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: None +camera: Camera { origin: Vec3A(15.0, 3.0, 3.0), lower_left_corner: Vec3A(4.8863316, -0.044797063, 4.174048), horizontal: Vec3A(1.2295314, 0.0, -6.147657), vertical: Vec3A(-0.44830504, 3.4967792, -0.08966101), u: Vec3A(0.19611613, 0.0, -0.9805807), v: Vec3A(-0.1271232, 0.991561, -0.02542464), lens_radius: 0.05, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: None +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 640, height: 360, region: PixelRect { x0: 0, y0: 0, x1: 640, y1: 360 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: None, depth_of_field: true, motion_blur: false, layer_stack: ["$DIR/uv_dedup_same.usda"], invisible_overrides: Some(0) } +layer: $DIR/uv_dedup_same.usda +warning: Warning { code: CameraMissing, kind: Skipped, count: 1, prims: [], message: "USD stage has no UsdGeomCamera — falling back to world::get_settings camera" } +lights: 0 +volumes: 0 +world: 2 geometries, PrimitiveBreakdown { triangles: 0, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 2 } top level, PrimitiveBreakdown { triangles: 2, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 2 } unique, motion false +geom 0: material #0 Signature { kind: "MaterialX", cutout: false, straight: false, boundary: false, emits: false, uv: true, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv Some(0) shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:f351a5c2dfca1185 camera=2:f351a5c2dfca1185 shadow=2:f351a5c2dfca1185 indirect=2:f351a5c2dfca1185 +geom 1: material #0 Signature { kind: "MaterialX", cutout: false, straight: false, boundary: false, emits: false, uv: true, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv Some(0) shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:b90e40d4201e3f85 camera=2:b90e40d4201e3f85 shadow=2:b90e40d4201e3f85 indirect=2:b90e40d4201e3f85 +provenance material /W/Looks/Mtl: MaterialOrigin { slots: [0, 1], displaced: false } +provenance geometry 0..1: /W/B +provenance geometry 1..2: /W/A +provenance mesh: MeshOrigin { geom_id: 0, slot: 0, baked: false, moving: false } +provenance mesh: MeshOrigin { geom_id: 1, slot: 0, baked: false, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 11383868175397459472, n_points: 4, n_indices: 4, n_uvs: Some(4), smooth: false, material: 0 }), placements: 2, shared: false, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: None, cameras: [], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: None, offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/uv_dedup_same_usda-9ef71121455e022c-1.image b/crates/crust-core/tests/data/import_baselines/uv_dedup_same_usda-9ef71121455e022c-1.image new file mode 100644 index 000000000..c734c5b1d --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/uv_dedup_same_usda-9ef71121455e022c-1.image @@ -0,0 +1 @@ +640x360 16spp clamp-off a04a09c0d4b5e325 diff --git a/crates/crust-core/tests/data/import_baselines/uv_dedup_usda-3e327caf2288bcc5-1.digest b/crates/crust-core/tests/data/import_baselines/uv_dedup_usda-3e327caf2288bcc5-1.digest new file mode 100644 index 000000000..846996201 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/uv_dedup_usda-3e327caf2288bcc5-1.digest @@ -0,0 +1,26 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: None +camera: Camera { origin: Vec3A(15.0, 3.0, 3.0), lower_left_corner: Vec3A(4.8863316, -0.044797063, 4.174048), horizontal: Vec3A(1.2295314, 0.0, -6.147657), vertical: Vec3A(-0.44830504, 3.4967792, -0.08966101), u: Vec3A(0.19611613, 0.0, -0.9805807), v: Vec3A(-0.1271232, 0.991561, -0.02542464), lens_radius: 0.05, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: None +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 640, height: 360, region: PixelRect { x0: 0, y0: 0, x1: 640, y1: 360 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: None, depth_of_field: true, motion_blur: false, layer_stack: ["$DIR/uv_dedup.usda"], invisible_overrides: Some(0) } +layer: $DIR/uv_dedup.usda +warning: Warning { code: CameraMissing, kind: Skipped, count: 1, prims: [], message: "USD stage has no UsdGeomCamera — falling back to world::get_settings camera" } +lights: 0 +volumes: 0 +world: 2 geometries, PrimitiveBreakdown { triangles: 4, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 4, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +geom 0: material #0 Signature { kind: "MaterialX", cutout: false, straight: false, boundary: false, emits: false, uv: true, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv Some(0) shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:f351a5c2dfca1185 camera=2:f351a5c2dfca1185 shadow=2:f351a5c2dfca1185 indirect=2:f351a5c2dfca1185 +geom 1: material #0 Signature { kind: "MaterialX", cutout: false, straight: false, boundary: false, emits: false, uv: true, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv Some(1) shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:b90e40d4201e3f85 camera=2:b90e40d4201e3f85 shadow=2:b90e40d4201e3f85 indirect=2:b90e40d4201e3f85 +provenance material /W/Looks/Mtl: MaterialOrigin { slots: [0, 1], displaced: false } +provenance geometry 0..1: /W/B +provenance geometry 1..2: /W/A +provenance mesh: MeshOrigin { geom_id: 0, slot: 0, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 1, slot: 1, baked: true, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 5692795894678414049, n_points: 4, n_indices: 4, n_uvs: Some(4), smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 1: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 11383868175397459472, n_points: 4, n_indices: 4, n_uvs: Some(4), smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: None, cameras: [], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: None, offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/uv_dedup_usda-3e327caf2288bcc5-1.image b/crates/crust-core/tests/data/import_baselines/uv_dedup_usda-3e327caf2288bcc5-1.image new file mode 100644 index 000000000..c734c5b1d --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/uv_dedup_usda-3e327caf2288bcc5-1.image @@ -0,0 +1 @@ +640x360 16spp clamp-off a04a09c0d4b5e325 diff --git a/crates/crust-core/tests/data/import_baselines/var_authored_usda-30d82aafae5b77cb-1.digest b/crates/crust-core/tests/data/import_baselines/var_authored_usda-30d82aafae5b77cb-1.digest new file mode 100644 index 000000000..b340e66b4 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/var_authored_usda-30d82aafae5b77cb-1.digest @@ -0,0 +1,24 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/World/cam") +camera: Camera { origin: Vec3A(0.0, 0.0, 10.0), lower_left_corner: Vec3A(-2.0955, -1.5716249, 0.0), horizontal: Vec3A(4.191, 0.0, 0.0), vertical: Vec3A(0.0, 3.1432498, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: Some("/Render/settings") +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 48, height: 36, region: PixelRect { x0: 0, y0: 0, x1: 48, y1: 36 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [AovProduct { prim_path: "/Render/p", name: "p.exr", vars: [AovVar { prim_path: "/Render/P", name: "P", channel_prefix: None, source: P, components: 3, precision: Float, accumulation: Closest, clear: 0.0, expression: None, raw: false, variance: false }, AovVar { prim_path: "/Render/Pref", name: "Pref", channel_prefix: None, source: Primvar(PrimvarSource { index: 0, components: 3, role: Vector }), components: 3, precision: Float, accumulation: Closest, clear: 0.0, expression: None, raw: false, variance: false }, AovVar { prim_path: "/Render/Cd", name: "Cd", channel_prefix: None, source: Primvar(PrimvarSource { index: 1, components: 3, role: Color }), components: 3, precision: Float, accumulation: Filtered, clear: 0.0, expression: None, raw: false, variance: false }], attributes: [] }], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 50.0, aperture: [20.955, 15.2908], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 10.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/var_authored.usda"], invisible_overrides: Some(0) } +layer: $DIR/var_authored.usda +lights: 1 +light 0: dome name Some("/World/dome") lpe None pmf 1.0 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 2 geometries, PrimitiveBreakdown { triangles: 2, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 1 } top level, PrimitiveBreakdown { triangles: 2, spheres: 0, disks: 0, cylinders: 0, curve_segments: 1, cubic_curve_spans: 0, instances: 1 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: Some((false, false, [])), primvars: None } class 65535 holdout false transparent false map None uv None shading None strands Some(0) aov None swapped false curves true scale 1.0 motion [] pieces all=1:a8881b13d8325a63 camera=1:a8881b13d8325a63 shadow=1:a8881b13d8325a63 indirect=1:a8881b13d8325a63 +geom 1: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov Some((Some(1), false)) swapped false curves false scale 1.0 motion [] pieces all=2:32f1a52c797bfee5 camera=2:32f1a52c797bfee5 shadow=2:32f1a52c797bfee5 indirect=2:32f1a52c797bfee5 +provenance light /World/dome: LightOrigin { index: 0, geoms: 2..2 } +provenance geometry 0..1: /World/hair +provenance geometry 1..2: /World/mesh +provenance mesh: MeshOrigin { geom_id: 1, slot: 0, baked: true, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 14779366758744255248, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/World/cam"), cameras: ["/World/cam"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [("rest", 3), ("displayColor", 3)], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/World/cam"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/var_authored_usda-30d82aafae5b77cb-1.image b/crates/crust-core/tests/data/import_baselines/var_authored_usda-30d82aafae5b77cb-1.image new file mode 100644 index 000000000..6e17c7cc4 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/var_authored_usda-30d82aafae5b77cb-1.image @@ -0,0 +1 @@ +48x36 16spp clamp-off b92ef83454fdd3cb diff --git a/crates/crust-core/tests/data/import_baselines/veach_mis_usda-30c729cf3e421f8c-1.digest b/crates/crust-core/tests/data/import_baselines/veach_mis_usda-30c729cf3e421f8c-1.digest new file mode 100644 index 000000000..6c2cda342 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/veach_mis_usda-30c729cf3e421f8c-1.digest @@ -0,0 +1,61 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/World/Cam") +camera: Camera { origin: Vec3A(0.0, 4.0, 12.0), lower_left_corner: Vec3A(-8.494889, -2.4422622, 2.981679), horizontal: Vec3A(16.989779, -0.0, 0.0), vertical: Vec3A(0.0, 9.411561, -1.6595122), u: Vec3A(1.0, -0.0, 0.0), v: Vec3A(0.0, 0.98480767, -0.17364816), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: Some("/Render/settings") +settings: RenderSettings { samples_per_pixel: 128, max_depth: 8, width: 960, height: 540, region: PixelRect { x0: 0, y0: 0, x1: 960, y1: 540 }, min_samples_per_pixel: 32, variance_threshold: 0.0, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: BalanceMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 16.0, aperture: [20.955, 15.2908], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 10.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/veach_mis.usda"], invisible_overrides: Some(0) } +layer: $DIR/veach_mis.usda +lights: 4 +light 0: area name Some("/World/LightBig") lpe None pmf 0.25 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 1: area name Some("/World/LightMedium") lpe None pmf 0.25 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 2: area name Some("/World/LightSmall") lpe None pmf 0.25 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 3: area name Some("/World/LightTiny") lpe None pmf 0.25 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 10 geometries, PrimitiveBreakdown { triangles: 12, spheres: 4, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 12, spheres: 4, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:68d4160149942562 camera=2:68d4160149942562 shadow=2:68d4160149942562 indirect=2:68d4160149942562 +geom 1: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:c752315e4cdb3b45 camera=2:c752315e4cdb3b45 shadow=2:c752315e4cdb3b45 indirect=2:c752315e4cdb3b45 +geom 2: material #1 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:faaee6e5a0219d28 camera=2:faaee6e5a0219d28 shadow=2:faaee6e5a0219d28 indirect=2:faaee6e5a0219d28 +geom 3: material #2 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:55522c246731933e camera=2:55522c246731933e shadow=2:55522c246731933e indirect=2:55522c246731933e +geom 4: material #3 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:6a1c895a634c0162 camera=2:6a1c895a634c0162 shadow=2:6a1c895a634c0162 indirect=2:6a1c895a634c0162 +geom 5: material #4 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:d7e184c050c2f9e4 camera=2:d7e184c050c2f9e4 shadow=2:d7e184c050c2f9e4 indirect=2:d7e184c050c2f9e4 +geom 6: material #5 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:0072c0dd41a28391 camera=1:0072c0dd41a28391 shadow=1:0072c0dd41a28391 indirect=1:0072c0dd41a28391 +geom 7: material #6 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:25d33e066e9377ce camera=1:25d33e066e9377ce shadow=1:25d33e066e9377ce indirect=1:25d33e066e9377ce +geom 8: material #7 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:946393500a4eba02 camera=1:946393500a4eba02 shadow=1:946393500a4eba02 indirect=1:946393500a4eba02 +geom 9: material #8 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:c0b8734402fc2ca3 camera=1:c0b8734402fc2ca3 shadow=1:c0b8734402fc2ca3 indirect=1:c0b8734402fc2ca3 +provenance material /World/Materials/Backdrop: MaterialOrigin { slots: [0, 1], displaced: false } +provenance material /World/Materials/PlateRough: MaterialOrigin { slots: [3], displaced: false } +provenance material /World/Materials/PlateRoughest: MaterialOrigin { slots: [2], displaced: false } +provenance material /World/Materials/PlateSmooth: MaterialOrigin { slots: [4], displaced: false } +provenance material /World/Materials/PlateSmoothest: MaterialOrigin { slots: [5], displaced: false } +provenance light /World/LightBig: LightOrigin { index: 0, geoms: 6..7 } +provenance light /World/LightMedium: LightOrigin { index: 1, geoms: 7..8 } +provenance light /World/LightSmall: LightOrigin { index: 2, geoms: 8..9 } +provenance light /World/LightTiny: LightOrigin { index: 3, geoms: 9..10 } +provenance geometry 0..1: /World/BackWall +provenance geometry 1..2: /World/Floor +provenance geometry 2..3: /World/Plate3 +provenance geometry 3..4: /World/Plate2 +provenance geometry 4..5: /World/Plate1 +provenance geometry 5..6: /World/Plate0 +provenance geometry 6..7: /World/LightBig +provenance geometry 7..8: /World/LightMedium +provenance geometry 8..9: /World/LightSmall +provenance geometry 9..10: /World/LightTiny +provenance mesh: MeshOrigin { geom_id: 0, slot: 0, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 1, slot: 1, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 2, slot: 2, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 3, slot: 3, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 4, slot: 4, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 5, slot: 5, baked: true, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 2412432479217055457, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 1: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 5856995924472605639, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 2: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 6402661692534233033, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 1 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 3: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 13696518014408431155, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 2 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 4: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 15384334289683032877, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 3 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 5: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 6481752197548623432, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 4 }), placements: 1, shared: false, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/World/Cam"), cameras: ["/World/Cam"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/World/Cam"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/veach_mis_usda-30c729cf3e421f8c-1.image b/crates/crust-core/tests/data/import_baselines/veach_mis_usda-30c729cf3e421f8c-1.image new file mode 100644 index 000000000..96aff8304 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/veach_mis_usda-30c729cf3e421f8c-1.image @@ -0,0 +1 @@ +960x540 16spp clamp-off c795c604ff2181ef diff --git a/crates/crust-core/tests/data/import_baselines/veach_mis_usda-30c729cf3e421f8c-2.digest b/crates/crust-core/tests/data/import_baselines/veach_mis_usda-30c729cf3e421f8c-2.digest new file mode 100644 index 000000000..6c2cda342 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/veach_mis_usda-30c729cf3e421f8c-2.digest @@ -0,0 +1,61 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/World/Cam") +camera: Camera { origin: Vec3A(0.0, 4.0, 12.0), lower_left_corner: Vec3A(-8.494889, -2.4422622, 2.981679), horizontal: Vec3A(16.989779, -0.0, 0.0), vertical: Vec3A(0.0, 9.411561, -1.6595122), u: Vec3A(1.0, -0.0, 0.0), v: Vec3A(0.0, 0.98480767, -0.17364816), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: Some("/Render/settings") +settings: RenderSettings { samples_per_pixel: 128, max_depth: 8, width: 960, height: 540, region: PixelRect { x0: 0, y0: 0, x1: 960, y1: 540 }, min_samples_per_pixel: 32, variance_threshold: 0.0, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: BalanceMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 16.0, aperture: [20.955, 15.2908], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 10.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/veach_mis.usda"], invisible_overrides: Some(0) } +layer: $DIR/veach_mis.usda +lights: 4 +light 0: area name Some("/World/LightBig") lpe None pmf 0.25 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 1: area name Some("/World/LightMedium") lpe None pmf 0.25 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 2: area name Some("/World/LightSmall") lpe None pmf 0.25 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 3: area name Some("/World/LightTiny") lpe None pmf 0.25 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 10 geometries, PrimitiveBreakdown { triangles: 12, spheres: 4, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 12, spheres: 4, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:68d4160149942562 camera=2:68d4160149942562 shadow=2:68d4160149942562 indirect=2:68d4160149942562 +geom 1: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:c752315e4cdb3b45 camera=2:c752315e4cdb3b45 shadow=2:c752315e4cdb3b45 indirect=2:c752315e4cdb3b45 +geom 2: material #1 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:faaee6e5a0219d28 camera=2:faaee6e5a0219d28 shadow=2:faaee6e5a0219d28 indirect=2:faaee6e5a0219d28 +geom 3: material #2 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:55522c246731933e camera=2:55522c246731933e shadow=2:55522c246731933e indirect=2:55522c246731933e +geom 4: material #3 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:6a1c895a634c0162 camera=2:6a1c895a634c0162 shadow=2:6a1c895a634c0162 indirect=2:6a1c895a634c0162 +geom 5: material #4 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:d7e184c050c2f9e4 camera=2:d7e184c050c2f9e4 shadow=2:d7e184c050c2f9e4 indirect=2:d7e184c050c2f9e4 +geom 6: material #5 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:0072c0dd41a28391 camera=1:0072c0dd41a28391 shadow=1:0072c0dd41a28391 indirect=1:0072c0dd41a28391 +geom 7: material #6 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:25d33e066e9377ce camera=1:25d33e066e9377ce shadow=1:25d33e066e9377ce indirect=1:25d33e066e9377ce +geom 8: material #7 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:946393500a4eba02 camera=1:946393500a4eba02 shadow=1:946393500a4eba02 indirect=1:946393500a4eba02 +geom 9: material #8 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:c0b8734402fc2ca3 camera=1:c0b8734402fc2ca3 shadow=1:c0b8734402fc2ca3 indirect=1:c0b8734402fc2ca3 +provenance material /World/Materials/Backdrop: MaterialOrigin { slots: [0, 1], displaced: false } +provenance material /World/Materials/PlateRough: MaterialOrigin { slots: [3], displaced: false } +provenance material /World/Materials/PlateRoughest: MaterialOrigin { slots: [2], displaced: false } +provenance material /World/Materials/PlateSmooth: MaterialOrigin { slots: [4], displaced: false } +provenance material /World/Materials/PlateSmoothest: MaterialOrigin { slots: [5], displaced: false } +provenance light /World/LightBig: LightOrigin { index: 0, geoms: 6..7 } +provenance light /World/LightMedium: LightOrigin { index: 1, geoms: 7..8 } +provenance light /World/LightSmall: LightOrigin { index: 2, geoms: 8..9 } +provenance light /World/LightTiny: LightOrigin { index: 3, geoms: 9..10 } +provenance geometry 0..1: /World/BackWall +provenance geometry 1..2: /World/Floor +provenance geometry 2..3: /World/Plate3 +provenance geometry 3..4: /World/Plate2 +provenance geometry 4..5: /World/Plate1 +provenance geometry 5..6: /World/Plate0 +provenance geometry 6..7: /World/LightBig +provenance geometry 7..8: /World/LightMedium +provenance geometry 8..9: /World/LightSmall +provenance geometry 9..10: /World/LightTiny +provenance mesh: MeshOrigin { geom_id: 0, slot: 0, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 1, slot: 1, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 2, slot: 2, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 3, slot: 3, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 4, slot: 4, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 5, slot: 5, baked: true, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 2412432479217055457, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 1: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 5856995924472605639, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 2: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 6402661692534233033, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 1 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 3: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 13696518014408431155, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 2 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 4: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 15384334289683032877, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 3 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 5: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 6481752197548623432, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 4 }), placements: 1, shared: false, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/World/Cam"), cameras: ["/World/Cam"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/World/Cam"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/veach_mis_usda-30c729cf3e421f8c-2.image b/crates/crust-core/tests/data/import_baselines/veach_mis_usda-30c729cf3e421f8c-2.image new file mode 100644 index 000000000..96aff8304 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/veach_mis_usda-30c729cf3e421f8c-2.image @@ -0,0 +1 @@ +960x540 16spp clamp-off c795c604ff2181ef diff --git a/crates/crust-core/tests/data/import_baselines/veach_mis_usda-324cce08805da6ff-1.digest b/crates/crust-core/tests/data/import_baselines/veach_mis_usda-324cce08805da6ff-1.digest new file mode 100644 index 000000000..6c2cda342 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/veach_mis_usda-324cce08805da6ff-1.digest @@ -0,0 +1,61 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/World/Cam") +camera: Camera { origin: Vec3A(0.0, 4.0, 12.0), lower_left_corner: Vec3A(-8.494889, -2.4422622, 2.981679), horizontal: Vec3A(16.989779, -0.0, 0.0), vertical: Vec3A(0.0, 9.411561, -1.6595122), u: Vec3A(1.0, -0.0, 0.0), v: Vec3A(0.0, 0.98480767, -0.17364816), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: Some("/Render/settings") +settings: RenderSettings { samples_per_pixel: 128, max_depth: 8, width: 960, height: 540, region: PixelRect { x0: 0, y0: 0, x1: 960, y1: 540 }, min_samples_per_pixel: 32, variance_threshold: 0.0, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: BalanceMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 16.0, aperture: [20.955, 15.2908], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 10.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/veach_mis.usda"], invisible_overrides: Some(0) } +layer: $DIR/veach_mis.usda +lights: 4 +light 0: area name Some("/World/LightBig") lpe None pmf 0.25 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 1: area name Some("/World/LightMedium") lpe None pmf 0.25 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 2: area name Some("/World/LightSmall") lpe None pmf 0.25 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 3: area name Some("/World/LightTiny") lpe None pmf 0.25 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 10 geometries, PrimitiveBreakdown { triangles: 12, spheres: 4, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 12, spheres: 4, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:68d4160149942562 camera=2:68d4160149942562 shadow=2:68d4160149942562 indirect=2:68d4160149942562 +geom 1: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:c752315e4cdb3b45 camera=2:c752315e4cdb3b45 shadow=2:c752315e4cdb3b45 indirect=2:c752315e4cdb3b45 +geom 2: material #1 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:faaee6e5a0219d28 camera=2:faaee6e5a0219d28 shadow=2:faaee6e5a0219d28 indirect=2:faaee6e5a0219d28 +geom 3: material #2 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:55522c246731933e camera=2:55522c246731933e shadow=2:55522c246731933e indirect=2:55522c246731933e +geom 4: material #3 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:6a1c895a634c0162 camera=2:6a1c895a634c0162 shadow=2:6a1c895a634c0162 indirect=2:6a1c895a634c0162 +geom 5: material #4 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:d7e184c050c2f9e4 camera=2:d7e184c050c2f9e4 shadow=2:d7e184c050c2f9e4 indirect=2:d7e184c050c2f9e4 +geom 6: material #5 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:0072c0dd41a28391 camera=1:0072c0dd41a28391 shadow=1:0072c0dd41a28391 indirect=1:0072c0dd41a28391 +geom 7: material #6 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:25d33e066e9377ce camera=1:25d33e066e9377ce shadow=1:25d33e066e9377ce indirect=1:25d33e066e9377ce +geom 8: material #7 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:946393500a4eba02 camera=1:946393500a4eba02 shadow=1:946393500a4eba02 indirect=1:946393500a4eba02 +geom 9: material #8 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:c0b8734402fc2ca3 camera=1:c0b8734402fc2ca3 shadow=1:c0b8734402fc2ca3 indirect=1:c0b8734402fc2ca3 +provenance material /World/Materials/Backdrop: MaterialOrigin { slots: [0, 1], displaced: false } +provenance material /World/Materials/PlateRough: MaterialOrigin { slots: [3], displaced: false } +provenance material /World/Materials/PlateRoughest: MaterialOrigin { slots: [2], displaced: false } +provenance material /World/Materials/PlateSmooth: MaterialOrigin { slots: [4], displaced: false } +provenance material /World/Materials/PlateSmoothest: MaterialOrigin { slots: [5], displaced: false } +provenance light /World/LightBig: LightOrigin { index: 0, geoms: 6..7 } +provenance light /World/LightMedium: LightOrigin { index: 1, geoms: 7..8 } +provenance light /World/LightSmall: LightOrigin { index: 2, geoms: 8..9 } +provenance light /World/LightTiny: LightOrigin { index: 3, geoms: 9..10 } +provenance geometry 0..1: /World/BackWall +provenance geometry 1..2: /World/Floor +provenance geometry 2..3: /World/Plate3 +provenance geometry 3..4: /World/Plate2 +provenance geometry 4..5: /World/Plate1 +provenance geometry 5..6: /World/Plate0 +provenance geometry 6..7: /World/LightBig +provenance geometry 7..8: /World/LightMedium +provenance geometry 8..9: /World/LightSmall +provenance geometry 9..10: /World/LightTiny +provenance mesh: MeshOrigin { geom_id: 0, slot: 0, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 1, slot: 1, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 2, slot: 2, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 3, slot: 3, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 4, slot: 4, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 5, slot: 5, baked: true, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 2412432479217055457, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 1: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 5856995924472605639, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 2: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 6402661692534233033, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 1 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 3: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 13696518014408431155, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 2 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 4: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 15384334289683032877, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 3 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 5: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 6481752197548623432, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 4 }), placements: 1, shared: false, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/World/Cam"), cameras: ["/World/Cam"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/World/Cam"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/veach_mis_usda-324cce08805da6ff-1.image b/crates/crust-core/tests/data/import_baselines/veach_mis_usda-324cce08805da6ff-1.image new file mode 100644 index 000000000..96aff8304 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/veach_mis_usda-324cce08805da6ff-1.image @@ -0,0 +1 @@ +960x540 16spp clamp-off c795c604ff2181ef diff --git a/crates/crust-core/tests/data/import_baselines/veach_mis_usda-3b12df225993b91b-1.digest b/crates/crust-core/tests/data/import_baselines/veach_mis_usda-3b12df225993b91b-1.digest new file mode 100644 index 000000000..6c2cda342 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/veach_mis_usda-3b12df225993b91b-1.digest @@ -0,0 +1,61 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/World/Cam") +camera: Camera { origin: Vec3A(0.0, 4.0, 12.0), lower_left_corner: Vec3A(-8.494889, -2.4422622, 2.981679), horizontal: Vec3A(16.989779, -0.0, 0.0), vertical: Vec3A(0.0, 9.411561, -1.6595122), u: Vec3A(1.0, -0.0, 0.0), v: Vec3A(0.0, 0.98480767, -0.17364816), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: Some("/Render/settings") +settings: RenderSettings { samples_per_pixel: 128, max_depth: 8, width: 960, height: 540, region: PixelRect { x0: 0, y0: 0, x1: 960, y1: 540 }, min_samples_per_pixel: 32, variance_threshold: 0.0, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: BalanceMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 16.0, aperture: [20.955, 15.2908], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 10.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/veach_mis.usda"], invisible_overrides: Some(0) } +layer: $DIR/veach_mis.usda +lights: 4 +light 0: area name Some("/World/LightBig") lpe None pmf 0.25 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 1: area name Some("/World/LightMedium") lpe None pmf 0.25 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 2: area name Some("/World/LightSmall") lpe None pmf 0.25 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 3: area name Some("/World/LightTiny") lpe None pmf 0.25 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 10 geometries, PrimitiveBreakdown { triangles: 12, spheres: 4, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 12, spheres: 4, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:68d4160149942562 camera=2:68d4160149942562 shadow=2:68d4160149942562 indirect=2:68d4160149942562 +geom 1: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:c752315e4cdb3b45 camera=2:c752315e4cdb3b45 shadow=2:c752315e4cdb3b45 indirect=2:c752315e4cdb3b45 +geom 2: material #1 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:faaee6e5a0219d28 camera=2:faaee6e5a0219d28 shadow=2:faaee6e5a0219d28 indirect=2:faaee6e5a0219d28 +geom 3: material #2 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:55522c246731933e camera=2:55522c246731933e shadow=2:55522c246731933e indirect=2:55522c246731933e +geom 4: material #3 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:6a1c895a634c0162 camera=2:6a1c895a634c0162 shadow=2:6a1c895a634c0162 indirect=2:6a1c895a634c0162 +geom 5: material #4 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:d7e184c050c2f9e4 camera=2:d7e184c050c2f9e4 shadow=2:d7e184c050c2f9e4 indirect=2:d7e184c050c2f9e4 +geom 6: material #5 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:0072c0dd41a28391 camera=1:0072c0dd41a28391 shadow=1:0072c0dd41a28391 indirect=1:0072c0dd41a28391 +geom 7: material #6 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:25d33e066e9377ce camera=1:25d33e066e9377ce shadow=1:25d33e066e9377ce indirect=1:25d33e066e9377ce +geom 8: material #7 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:946393500a4eba02 camera=1:946393500a4eba02 shadow=1:946393500a4eba02 indirect=1:946393500a4eba02 +geom 9: material #8 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:c0b8734402fc2ca3 camera=1:c0b8734402fc2ca3 shadow=1:c0b8734402fc2ca3 indirect=1:c0b8734402fc2ca3 +provenance material /World/Materials/Backdrop: MaterialOrigin { slots: [0, 1], displaced: false } +provenance material /World/Materials/PlateRough: MaterialOrigin { slots: [3], displaced: false } +provenance material /World/Materials/PlateRoughest: MaterialOrigin { slots: [2], displaced: false } +provenance material /World/Materials/PlateSmooth: MaterialOrigin { slots: [4], displaced: false } +provenance material /World/Materials/PlateSmoothest: MaterialOrigin { slots: [5], displaced: false } +provenance light /World/LightBig: LightOrigin { index: 0, geoms: 6..7 } +provenance light /World/LightMedium: LightOrigin { index: 1, geoms: 7..8 } +provenance light /World/LightSmall: LightOrigin { index: 2, geoms: 8..9 } +provenance light /World/LightTiny: LightOrigin { index: 3, geoms: 9..10 } +provenance geometry 0..1: /World/BackWall +provenance geometry 1..2: /World/Floor +provenance geometry 2..3: /World/Plate3 +provenance geometry 3..4: /World/Plate2 +provenance geometry 4..5: /World/Plate1 +provenance geometry 5..6: /World/Plate0 +provenance geometry 6..7: /World/LightBig +provenance geometry 7..8: /World/LightMedium +provenance geometry 8..9: /World/LightSmall +provenance geometry 9..10: /World/LightTiny +provenance mesh: MeshOrigin { geom_id: 0, slot: 0, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 1, slot: 1, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 2, slot: 2, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 3, slot: 3, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 4, slot: 4, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 5, slot: 5, baked: true, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 2412432479217055457, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 1: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 5856995924472605639, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 2: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 6402661692534233033, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 1 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 3: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 13696518014408431155, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 2 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 4: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 15384334289683032877, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 3 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 5: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 6481752197548623432, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 4 }), placements: 1, shared: false, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/World/Cam"), cameras: ["/World/Cam"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/World/Cam"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/veach_mis_usda-3b12df225993b91b-1.image b/crates/crust-core/tests/data/import_baselines/veach_mis_usda-3b12df225993b91b-1.image new file mode 100644 index 000000000..96aff8304 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/veach_mis_usda-3b12df225993b91b-1.image @@ -0,0 +1 @@ +960x540 16spp clamp-off c795c604ff2181ef diff --git a/crates/crust-core/tests/data/import_baselines/veach_mis_usda-3b12df225993b91b-2.digest b/crates/crust-core/tests/data/import_baselines/veach_mis_usda-3b12df225993b91b-2.digest new file mode 100644 index 000000000..6c2cda342 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/veach_mis_usda-3b12df225993b91b-2.digest @@ -0,0 +1,61 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/World/Cam") +camera: Camera { origin: Vec3A(0.0, 4.0, 12.0), lower_left_corner: Vec3A(-8.494889, -2.4422622, 2.981679), horizontal: Vec3A(16.989779, -0.0, 0.0), vertical: Vec3A(0.0, 9.411561, -1.6595122), u: Vec3A(1.0, -0.0, 0.0), v: Vec3A(0.0, 0.98480767, -0.17364816), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: Some("/Render/settings") +settings: RenderSettings { samples_per_pixel: 128, max_depth: 8, width: 960, height: 540, region: PixelRect { x0: 0, y0: 0, x1: 960, y1: 540 }, min_samples_per_pixel: 32, variance_threshold: 0.0, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: BalanceMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 16.0, aperture: [20.955, 15.2908], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 10.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/veach_mis.usda"], invisible_overrides: Some(0) } +layer: $DIR/veach_mis.usda +lights: 4 +light 0: area name Some("/World/LightBig") lpe None pmf 0.25 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 1: area name Some("/World/LightMedium") lpe None pmf 0.25 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 2: area name Some("/World/LightSmall") lpe None pmf 0.25 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 3: area name Some("/World/LightTiny") lpe None pmf 0.25 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 10 geometries, PrimitiveBreakdown { triangles: 12, spheres: 4, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 12, spheres: 4, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:68d4160149942562 camera=2:68d4160149942562 shadow=2:68d4160149942562 indirect=2:68d4160149942562 +geom 1: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:c752315e4cdb3b45 camera=2:c752315e4cdb3b45 shadow=2:c752315e4cdb3b45 indirect=2:c752315e4cdb3b45 +geom 2: material #1 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:faaee6e5a0219d28 camera=2:faaee6e5a0219d28 shadow=2:faaee6e5a0219d28 indirect=2:faaee6e5a0219d28 +geom 3: material #2 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:55522c246731933e camera=2:55522c246731933e shadow=2:55522c246731933e indirect=2:55522c246731933e +geom 4: material #3 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:6a1c895a634c0162 camera=2:6a1c895a634c0162 shadow=2:6a1c895a634c0162 indirect=2:6a1c895a634c0162 +geom 5: material #4 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:d7e184c050c2f9e4 camera=2:d7e184c050c2f9e4 shadow=2:d7e184c050c2f9e4 indirect=2:d7e184c050c2f9e4 +geom 6: material #5 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:0072c0dd41a28391 camera=1:0072c0dd41a28391 shadow=1:0072c0dd41a28391 indirect=1:0072c0dd41a28391 +geom 7: material #6 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:25d33e066e9377ce camera=1:25d33e066e9377ce shadow=1:25d33e066e9377ce indirect=1:25d33e066e9377ce +geom 8: material #7 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:946393500a4eba02 camera=1:946393500a4eba02 shadow=1:946393500a4eba02 indirect=1:946393500a4eba02 +geom 9: material #8 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:c0b8734402fc2ca3 camera=1:c0b8734402fc2ca3 shadow=1:c0b8734402fc2ca3 indirect=1:c0b8734402fc2ca3 +provenance material /World/Materials/Backdrop: MaterialOrigin { slots: [0, 1], displaced: false } +provenance material /World/Materials/PlateRough: MaterialOrigin { slots: [3], displaced: false } +provenance material /World/Materials/PlateRoughest: MaterialOrigin { slots: [2], displaced: false } +provenance material /World/Materials/PlateSmooth: MaterialOrigin { slots: [4], displaced: false } +provenance material /World/Materials/PlateSmoothest: MaterialOrigin { slots: [5], displaced: false } +provenance light /World/LightBig: LightOrigin { index: 0, geoms: 6..7 } +provenance light /World/LightMedium: LightOrigin { index: 1, geoms: 7..8 } +provenance light /World/LightSmall: LightOrigin { index: 2, geoms: 8..9 } +provenance light /World/LightTiny: LightOrigin { index: 3, geoms: 9..10 } +provenance geometry 0..1: /World/BackWall +provenance geometry 1..2: /World/Floor +provenance geometry 2..3: /World/Plate3 +provenance geometry 3..4: /World/Plate2 +provenance geometry 4..5: /World/Plate1 +provenance geometry 5..6: /World/Plate0 +provenance geometry 6..7: /World/LightBig +provenance geometry 7..8: /World/LightMedium +provenance geometry 8..9: /World/LightSmall +provenance geometry 9..10: /World/LightTiny +provenance mesh: MeshOrigin { geom_id: 0, slot: 0, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 1, slot: 1, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 2, slot: 2, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 3, slot: 3, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 4, slot: 4, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 5, slot: 5, baked: true, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 2412432479217055457, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 1: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 5856995924472605639, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 2: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 6402661692534233033, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 1 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 3: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 13696518014408431155, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 2 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 4: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 15384334289683032877, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 3 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 5: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 6481752197548623432, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 4 }), placements: 1, shared: false, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/World/Cam"), cameras: ["/World/Cam"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/World/Cam"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/veach_mis_usda-3b12df225993b91b-2.image b/crates/crust-core/tests/data/import_baselines/veach_mis_usda-3b12df225993b91b-2.image new file mode 100644 index 000000000..96aff8304 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/veach_mis_usda-3b12df225993b91b-2.image @@ -0,0 +1 @@ +960x540 16spp clamp-off c795c604ff2181ef diff --git a/crates/crust-core/tests/data/import_baselines/veach_mis_usda-3d8992b3ea4a144d-1.digest b/crates/crust-core/tests/data/import_baselines/veach_mis_usda-3d8992b3ea4a144d-1.digest new file mode 100644 index 000000000..6c2cda342 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/veach_mis_usda-3d8992b3ea4a144d-1.digest @@ -0,0 +1,61 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/World/Cam") +camera: Camera { origin: Vec3A(0.0, 4.0, 12.0), lower_left_corner: Vec3A(-8.494889, -2.4422622, 2.981679), horizontal: Vec3A(16.989779, -0.0, 0.0), vertical: Vec3A(0.0, 9.411561, -1.6595122), u: Vec3A(1.0, -0.0, 0.0), v: Vec3A(0.0, 0.98480767, -0.17364816), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: Some("/Render/settings") +settings: RenderSettings { samples_per_pixel: 128, max_depth: 8, width: 960, height: 540, region: PixelRect { x0: 0, y0: 0, x1: 960, y1: 540 }, min_samples_per_pixel: 32, variance_threshold: 0.0, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: BalanceMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 16.0, aperture: [20.955, 15.2908], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 10.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/veach_mis.usda"], invisible_overrides: Some(0) } +layer: $DIR/veach_mis.usda +lights: 4 +light 0: area name Some("/World/LightBig") lpe None pmf 0.25 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 1: area name Some("/World/LightMedium") lpe None pmf 0.25 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 2: area name Some("/World/LightSmall") lpe None pmf 0.25 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 3: area name Some("/World/LightTiny") lpe None pmf 0.25 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 10 geometries, PrimitiveBreakdown { triangles: 12, spheres: 4, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 12, spheres: 4, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:68d4160149942562 camera=2:68d4160149942562 shadow=2:68d4160149942562 indirect=2:68d4160149942562 +geom 1: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:c752315e4cdb3b45 camera=2:c752315e4cdb3b45 shadow=2:c752315e4cdb3b45 indirect=2:c752315e4cdb3b45 +geom 2: material #1 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:faaee6e5a0219d28 camera=2:faaee6e5a0219d28 shadow=2:faaee6e5a0219d28 indirect=2:faaee6e5a0219d28 +geom 3: material #2 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:55522c246731933e camera=2:55522c246731933e shadow=2:55522c246731933e indirect=2:55522c246731933e +geom 4: material #3 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:6a1c895a634c0162 camera=2:6a1c895a634c0162 shadow=2:6a1c895a634c0162 indirect=2:6a1c895a634c0162 +geom 5: material #4 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:d7e184c050c2f9e4 camera=2:d7e184c050c2f9e4 shadow=2:d7e184c050c2f9e4 indirect=2:d7e184c050c2f9e4 +geom 6: material #5 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:0072c0dd41a28391 camera=1:0072c0dd41a28391 shadow=1:0072c0dd41a28391 indirect=1:0072c0dd41a28391 +geom 7: material #6 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:25d33e066e9377ce camera=1:25d33e066e9377ce shadow=1:25d33e066e9377ce indirect=1:25d33e066e9377ce +geom 8: material #7 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:946393500a4eba02 camera=1:946393500a4eba02 shadow=1:946393500a4eba02 indirect=1:946393500a4eba02 +geom 9: material #8 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:c0b8734402fc2ca3 camera=1:c0b8734402fc2ca3 shadow=1:c0b8734402fc2ca3 indirect=1:c0b8734402fc2ca3 +provenance material /World/Materials/Backdrop: MaterialOrigin { slots: [0, 1], displaced: false } +provenance material /World/Materials/PlateRough: MaterialOrigin { slots: [3], displaced: false } +provenance material /World/Materials/PlateRoughest: MaterialOrigin { slots: [2], displaced: false } +provenance material /World/Materials/PlateSmooth: MaterialOrigin { slots: [4], displaced: false } +provenance material /World/Materials/PlateSmoothest: MaterialOrigin { slots: [5], displaced: false } +provenance light /World/LightBig: LightOrigin { index: 0, geoms: 6..7 } +provenance light /World/LightMedium: LightOrigin { index: 1, geoms: 7..8 } +provenance light /World/LightSmall: LightOrigin { index: 2, geoms: 8..9 } +provenance light /World/LightTiny: LightOrigin { index: 3, geoms: 9..10 } +provenance geometry 0..1: /World/BackWall +provenance geometry 1..2: /World/Floor +provenance geometry 2..3: /World/Plate3 +provenance geometry 3..4: /World/Plate2 +provenance geometry 4..5: /World/Plate1 +provenance geometry 5..6: /World/Plate0 +provenance geometry 6..7: /World/LightBig +provenance geometry 7..8: /World/LightMedium +provenance geometry 8..9: /World/LightSmall +provenance geometry 9..10: /World/LightTiny +provenance mesh: MeshOrigin { geom_id: 0, slot: 0, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 1, slot: 1, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 2, slot: 2, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 3, slot: 3, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 4, slot: 4, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 5, slot: 5, baked: true, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 2412432479217055457, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 1: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 5856995924472605639, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 2: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 6402661692534233033, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 1 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 3: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 13696518014408431155, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 2 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 4: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 15384334289683032877, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 3 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 5: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 6481752197548623432, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 4 }), placements: 1, shared: false, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/World/Cam"), cameras: ["/World/Cam"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/World/Cam"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/veach_mis_usda-3d8992b3ea4a144d-1.image b/crates/crust-core/tests/data/import_baselines/veach_mis_usda-3d8992b3ea4a144d-1.image new file mode 100644 index 000000000..96aff8304 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/veach_mis_usda-3d8992b3ea4a144d-1.image @@ -0,0 +1 @@ +960x540 16spp clamp-off c795c604ff2181ef diff --git a/crates/crust-core/tests/data/import_baselines/veach_mis_usda-3fdc201d13c79fac-1.digest b/crates/crust-core/tests/data/import_baselines/veach_mis_usda-3fdc201d13c79fac-1.digest new file mode 100644 index 000000000..6c2cda342 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/veach_mis_usda-3fdc201d13c79fac-1.digest @@ -0,0 +1,61 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/World/Cam") +camera: Camera { origin: Vec3A(0.0, 4.0, 12.0), lower_left_corner: Vec3A(-8.494889, -2.4422622, 2.981679), horizontal: Vec3A(16.989779, -0.0, 0.0), vertical: Vec3A(0.0, 9.411561, -1.6595122), u: Vec3A(1.0, -0.0, 0.0), v: Vec3A(0.0, 0.98480767, -0.17364816), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: Some("/Render/settings") +settings: RenderSettings { samples_per_pixel: 128, max_depth: 8, width: 960, height: 540, region: PixelRect { x0: 0, y0: 0, x1: 960, y1: 540 }, min_samples_per_pixel: 32, variance_threshold: 0.0, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: BalanceMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 16.0, aperture: [20.955, 15.2908], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 10.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/veach_mis.usda"], invisible_overrides: Some(0) } +layer: $DIR/veach_mis.usda +lights: 4 +light 0: area name Some("/World/LightBig") lpe None pmf 0.25 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 1: area name Some("/World/LightMedium") lpe None pmf 0.25 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 2: area name Some("/World/LightSmall") lpe None pmf 0.25 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 3: area name Some("/World/LightTiny") lpe None pmf 0.25 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 10 geometries, PrimitiveBreakdown { triangles: 12, spheres: 4, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 12, spheres: 4, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:68d4160149942562 camera=2:68d4160149942562 shadow=2:68d4160149942562 indirect=2:68d4160149942562 +geom 1: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:c752315e4cdb3b45 camera=2:c752315e4cdb3b45 shadow=2:c752315e4cdb3b45 indirect=2:c752315e4cdb3b45 +geom 2: material #1 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:faaee6e5a0219d28 camera=2:faaee6e5a0219d28 shadow=2:faaee6e5a0219d28 indirect=2:faaee6e5a0219d28 +geom 3: material #2 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:55522c246731933e camera=2:55522c246731933e shadow=2:55522c246731933e indirect=2:55522c246731933e +geom 4: material #3 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:6a1c895a634c0162 camera=2:6a1c895a634c0162 shadow=2:6a1c895a634c0162 indirect=2:6a1c895a634c0162 +geom 5: material #4 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:d7e184c050c2f9e4 camera=2:d7e184c050c2f9e4 shadow=2:d7e184c050c2f9e4 indirect=2:d7e184c050c2f9e4 +geom 6: material #5 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:0072c0dd41a28391 camera=1:0072c0dd41a28391 shadow=1:0072c0dd41a28391 indirect=1:0072c0dd41a28391 +geom 7: material #6 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:25d33e066e9377ce camera=1:25d33e066e9377ce shadow=1:25d33e066e9377ce indirect=1:25d33e066e9377ce +geom 8: material #7 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:946393500a4eba02 camera=1:946393500a4eba02 shadow=1:946393500a4eba02 indirect=1:946393500a4eba02 +geom 9: material #8 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:c0b8734402fc2ca3 camera=1:c0b8734402fc2ca3 shadow=1:c0b8734402fc2ca3 indirect=1:c0b8734402fc2ca3 +provenance material /World/Materials/Backdrop: MaterialOrigin { slots: [0, 1], displaced: false } +provenance material /World/Materials/PlateRough: MaterialOrigin { slots: [3], displaced: false } +provenance material /World/Materials/PlateRoughest: MaterialOrigin { slots: [2], displaced: false } +provenance material /World/Materials/PlateSmooth: MaterialOrigin { slots: [4], displaced: false } +provenance material /World/Materials/PlateSmoothest: MaterialOrigin { slots: [5], displaced: false } +provenance light /World/LightBig: LightOrigin { index: 0, geoms: 6..7 } +provenance light /World/LightMedium: LightOrigin { index: 1, geoms: 7..8 } +provenance light /World/LightSmall: LightOrigin { index: 2, geoms: 8..9 } +provenance light /World/LightTiny: LightOrigin { index: 3, geoms: 9..10 } +provenance geometry 0..1: /World/BackWall +provenance geometry 1..2: /World/Floor +provenance geometry 2..3: /World/Plate3 +provenance geometry 3..4: /World/Plate2 +provenance geometry 4..5: /World/Plate1 +provenance geometry 5..6: /World/Plate0 +provenance geometry 6..7: /World/LightBig +provenance geometry 7..8: /World/LightMedium +provenance geometry 8..9: /World/LightSmall +provenance geometry 9..10: /World/LightTiny +provenance mesh: MeshOrigin { geom_id: 0, slot: 0, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 1, slot: 1, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 2, slot: 2, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 3, slot: 3, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 4, slot: 4, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 5, slot: 5, baked: true, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 2412432479217055457, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 1: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 5856995924472605639, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 2: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 6402661692534233033, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 1 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 3: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 13696518014408431155, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 2 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 4: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 15384334289683032877, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 3 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 5: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 6481752197548623432, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 4 }), placements: 1, shared: false, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/World/Cam"), cameras: ["/World/Cam"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/World/Cam"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/veach_mis_usda-3fdc201d13c79fac-1.image b/crates/crust-core/tests/data/import_baselines/veach_mis_usda-3fdc201d13c79fac-1.image new file mode 100644 index 000000000..96aff8304 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/veach_mis_usda-3fdc201d13c79fac-1.image @@ -0,0 +1 @@ +960x540 16spp clamp-off c795c604ff2181ef diff --git a/crates/crust-core/tests/data/import_baselines/veach_mis_usda-4f2fb0dc74121654-1.digest b/crates/crust-core/tests/data/import_baselines/veach_mis_usda-4f2fb0dc74121654-1.digest new file mode 100644 index 000000000..6c2cda342 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/veach_mis_usda-4f2fb0dc74121654-1.digest @@ -0,0 +1,61 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/World/Cam") +camera: Camera { origin: Vec3A(0.0, 4.0, 12.0), lower_left_corner: Vec3A(-8.494889, -2.4422622, 2.981679), horizontal: Vec3A(16.989779, -0.0, 0.0), vertical: Vec3A(0.0, 9.411561, -1.6595122), u: Vec3A(1.0, -0.0, 0.0), v: Vec3A(0.0, 0.98480767, -0.17364816), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: Some("/Render/settings") +settings: RenderSettings { samples_per_pixel: 128, max_depth: 8, width: 960, height: 540, region: PixelRect { x0: 0, y0: 0, x1: 960, y1: 540 }, min_samples_per_pixel: 32, variance_threshold: 0.0, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: BalanceMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 16.0, aperture: [20.955, 15.2908], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 10.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/veach_mis.usda"], invisible_overrides: Some(0) } +layer: $DIR/veach_mis.usda +lights: 4 +light 0: area name Some("/World/LightBig") lpe None pmf 0.25 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 1: area name Some("/World/LightMedium") lpe None pmf 0.25 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 2: area name Some("/World/LightSmall") lpe None pmf 0.25 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 3: area name Some("/World/LightTiny") lpe None pmf 0.25 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 10 geometries, PrimitiveBreakdown { triangles: 12, spheres: 4, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 12, spheres: 4, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:68d4160149942562 camera=2:68d4160149942562 shadow=2:68d4160149942562 indirect=2:68d4160149942562 +geom 1: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:c752315e4cdb3b45 camera=2:c752315e4cdb3b45 shadow=2:c752315e4cdb3b45 indirect=2:c752315e4cdb3b45 +geom 2: material #1 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:faaee6e5a0219d28 camera=2:faaee6e5a0219d28 shadow=2:faaee6e5a0219d28 indirect=2:faaee6e5a0219d28 +geom 3: material #2 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:55522c246731933e camera=2:55522c246731933e shadow=2:55522c246731933e indirect=2:55522c246731933e +geom 4: material #3 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:6a1c895a634c0162 camera=2:6a1c895a634c0162 shadow=2:6a1c895a634c0162 indirect=2:6a1c895a634c0162 +geom 5: material #4 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:d7e184c050c2f9e4 camera=2:d7e184c050c2f9e4 shadow=2:d7e184c050c2f9e4 indirect=2:d7e184c050c2f9e4 +geom 6: material #5 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:0072c0dd41a28391 camera=1:0072c0dd41a28391 shadow=1:0072c0dd41a28391 indirect=1:0072c0dd41a28391 +geom 7: material #6 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:25d33e066e9377ce camera=1:25d33e066e9377ce shadow=1:25d33e066e9377ce indirect=1:25d33e066e9377ce +geom 8: material #7 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:946393500a4eba02 camera=1:946393500a4eba02 shadow=1:946393500a4eba02 indirect=1:946393500a4eba02 +geom 9: material #8 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:c0b8734402fc2ca3 camera=1:c0b8734402fc2ca3 shadow=1:c0b8734402fc2ca3 indirect=1:c0b8734402fc2ca3 +provenance material /World/Materials/Backdrop: MaterialOrigin { slots: [0, 1], displaced: false } +provenance material /World/Materials/PlateRough: MaterialOrigin { slots: [3], displaced: false } +provenance material /World/Materials/PlateRoughest: MaterialOrigin { slots: [2], displaced: false } +provenance material /World/Materials/PlateSmooth: MaterialOrigin { slots: [4], displaced: false } +provenance material /World/Materials/PlateSmoothest: MaterialOrigin { slots: [5], displaced: false } +provenance light /World/LightBig: LightOrigin { index: 0, geoms: 6..7 } +provenance light /World/LightMedium: LightOrigin { index: 1, geoms: 7..8 } +provenance light /World/LightSmall: LightOrigin { index: 2, geoms: 8..9 } +provenance light /World/LightTiny: LightOrigin { index: 3, geoms: 9..10 } +provenance geometry 0..1: /World/BackWall +provenance geometry 1..2: /World/Floor +provenance geometry 2..3: /World/Plate3 +provenance geometry 3..4: /World/Plate2 +provenance geometry 4..5: /World/Plate1 +provenance geometry 5..6: /World/Plate0 +provenance geometry 6..7: /World/LightBig +provenance geometry 7..8: /World/LightMedium +provenance geometry 8..9: /World/LightSmall +provenance geometry 9..10: /World/LightTiny +provenance mesh: MeshOrigin { geom_id: 0, slot: 0, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 1, slot: 1, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 2, slot: 2, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 3, slot: 3, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 4, slot: 4, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 5, slot: 5, baked: true, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 2412432479217055457, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 1: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 5856995924472605639, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 2: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 6402661692534233033, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 1 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 3: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 13696518014408431155, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 2 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 4: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 15384334289683032877, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 3 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 5: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 6481752197548623432, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 4 }), placements: 1, shared: false, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/World/Cam"), cameras: ["/World/Cam"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/World/Cam"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/veach_mis_usda-4f2fb0dc74121654-1.image b/crates/crust-core/tests/data/import_baselines/veach_mis_usda-4f2fb0dc74121654-1.image new file mode 100644 index 000000000..96aff8304 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/veach_mis_usda-4f2fb0dc74121654-1.image @@ -0,0 +1 @@ +960x540 16spp clamp-off c795c604ff2181ef diff --git a/crates/crust-core/tests/data/import_baselines/veach_mis_usda-4f2fb0dc74121654-2.digest b/crates/crust-core/tests/data/import_baselines/veach_mis_usda-4f2fb0dc74121654-2.digest new file mode 100644 index 000000000..6c2cda342 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/veach_mis_usda-4f2fb0dc74121654-2.digest @@ -0,0 +1,61 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/World/Cam") +camera: Camera { origin: Vec3A(0.0, 4.0, 12.0), lower_left_corner: Vec3A(-8.494889, -2.4422622, 2.981679), horizontal: Vec3A(16.989779, -0.0, 0.0), vertical: Vec3A(0.0, 9.411561, -1.6595122), u: Vec3A(1.0, -0.0, 0.0), v: Vec3A(0.0, 0.98480767, -0.17364816), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: Some("/Render/settings") +settings: RenderSettings { samples_per_pixel: 128, max_depth: 8, width: 960, height: 540, region: PixelRect { x0: 0, y0: 0, x1: 960, y1: 540 }, min_samples_per_pixel: 32, variance_threshold: 0.0, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: BalanceMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 16.0, aperture: [20.955, 15.2908], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 10.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/veach_mis.usda"], invisible_overrides: Some(0) } +layer: $DIR/veach_mis.usda +lights: 4 +light 0: area name Some("/World/LightBig") lpe None pmf 0.25 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 1: area name Some("/World/LightMedium") lpe None pmf 0.25 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 2: area name Some("/World/LightSmall") lpe None pmf 0.25 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 3: area name Some("/World/LightTiny") lpe None pmf 0.25 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 10 geometries, PrimitiveBreakdown { triangles: 12, spheres: 4, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 12, spheres: 4, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:68d4160149942562 camera=2:68d4160149942562 shadow=2:68d4160149942562 indirect=2:68d4160149942562 +geom 1: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:c752315e4cdb3b45 camera=2:c752315e4cdb3b45 shadow=2:c752315e4cdb3b45 indirect=2:c752315e4cdb3b45 +geom 2: material #1 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:faaee6e5a0219d28 camera=2:faaee6e5a0219d28 shadow=2:faaee6e5a0219d28 indirect=2:faaee6e5a0219d28 +geom 3: material #2 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:55522c246731933e camera=2:55522c246731933e shadow=2:55522c246731933e indirect=2:55522c246731933e +geom 4: material #3 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:6a1c895a634c0162 camera=2:6a1c895a634c0162 shadow=2:6a1c895a634c0162 indirect=2:6a1c895a634c0162 +geom 5: material #4 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:d7e184c050c2f9e4 camera=2:d7e184c050c2f9e4 shadow=2:d7e184c050c2f9e4 indirect=2:d7e184c050c2f9e4 +geom 6: material #5 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:0072c0dd41a28391 camera=1:0072c0dd41a28391 shadow=1:0072c0dd41a28391 indirect=1:0072c0dd41a28391 +geom 7: material #6 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:25d33e066e9377ce camera=1:25d33e066e9377ce shadow=1:25d33e066e9377ce indirect=1:25d33e066e9377ce +geom 8: material #7 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:946393500a4eba02 camera=1:946393500a4eba02 shadow=1:946393500a4eba02 indirect=1:946393500a4eba02 +geom 9: material #8 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:c0b8734402fc2ca3 camera=1:c0b8734402fc2ca3 shadow=1:c0b8734402fc2ca3 indirect=1:c0b8734402fc2ca3 +provenance material /World/Materials/Backdrop: MaterialOrigin { slots: [0, 1], displaced: false } +provenance material /World/Materials/PlateRough: MaterialOrigin { slots: [3], displaced: false } +provenance material /World/Materials/PlateRoughest: MaterialOrigin { slots: [2], displaced: false } +provenance material /World/Materials/PlateSmooth: MaterialOrigin { slots: [4], displaced: false } +provenance material /World/Materials/PlateSmoothest: MaterialOrigin { slots: [5], displaced: false } +provenance light /World/LightBig: LightOrigin { index: 0, geoms: 6..7 } +provenance light /World/LightMedium: LightOrigin { index: 1, geoms: 7..8 } +provenance light /World/LightSmall: LightOrigin { index: 2, geoms: 8..9 } +provenance light /World/LightTiny: LightOrigin { index: 3, geoms: 9..10 } +provenance geometry 0..1: /World/BackWall +provenance geometry 1..2: /World/Floor +provenance geometry 2..3: /World/Plate3 +provenance geometry 3..4: /World/Plate2 +provenance geometry 4..5: /World/Plate1 +provenance geometry 5..6: /World/Plate0 +provenance geometry 6..7: /World/LightBig +provenance geometry 7..8: /World/LightMedium +provenance geometry 8..9: /World/LightSmall +provenance geometry 9..10: /World/LightTiny +provenance mesh: MeshOrigin { geom_id: 0, slot: 0, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 1, slot: 1, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 2, slot: 2, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 3, slot: 3, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 4, slot: 4, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 5, slot: 5, baked: true, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 2412432479217055457, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 1: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 5856995924472605639, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 2: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 6402661692534233033, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 1 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 3: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 13696518014408431155, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 2 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 4: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 15384334289683032877, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 3 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 5: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 6481752197548623432, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 4 }), placements: 1, shared: false, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/World/Cam"), cameras: ["/World/Cam"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/World/Cam"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/veach_mis_usda-4f2fb0dc74121654-2.image b/crates/crust-core/tests/data/import_baselines/veach_mis_usda-4f2fb0dc74121654-2.image new file mode 100644 index 000000000..96aff8304 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/veach_mis_usda-4f2fb0dc74121654-2.image @@ -0,0 +1 @@ +960x540 16spp clamp-off c795c604ff2181ef diff --git a/crates/crust-core/tests/data/import_baselines/veach_mis_usda-4f2fb0dc74121654-3.digest b/crates/crust-core/tests/data/import_baselines/veach_mis_usda-4f2fb0dc74121654-3.digest new file mode 100644 index 000000000..6c2cda342 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/veach_mis_usda-4f2fb0dc74121654-3.digest @@ -0,0 +1,61 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/World/Cam") +camera: Camera { origin: Vec3A(0.0, 4.0, 12.0), lower_left_corner: Vec3A(-8.494889, -2.4422622, 2.981679), horizontal: Vec3A(16.989779, -0.0, 0.0), vertical: Vec3A(0.0, 9.411561, -1.6595122), u: Vec3A(1.0, -0.0, 0.0), v: Vec3A(0.0, 0.98480767, -0.17364816), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: Some("/Render/settings") +settings: RenderSettings { samples_per_pixel: 128, max_depth: 8, width: 960, height: 540, region: PixelRect { x0: 0, y0: 0, x1: 960, y1: 540 }, min_samples_per_pixel: 32, variance_threshold: 0.0, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: BalanceMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 16.0, aperture: [20.955, 15.2908], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 10.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/veach_mis.usda"], invisible_overrides: Some(0) } +layer: $DIR/veach_mis.usda +lights: 4 +light 0: area name Some("/World/LightBig") lpe None pmf 0.25 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 1: area name Some("/World/LightMedium") lpe None pmf 0.25 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 2: area name Some("/World/LightSmall") lpe None pmf 0.25 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 3: area name Some("/World/LightTiny") lpe None pmf 0.25 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 10 geometries, PrimitiveBreakdown { triangles: 12, spheres: 4, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 12, spheres: 4, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:68d4160149942562 camera=2:68d4160149942562 shadow=2:68d4160149942562 indirect=2:68d4160149942562 +geom 1: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:c752315e4cdb3b45 camera=2:c752315e4cdb3b45 shadow=2:c752315e4cdb3b45 indirect=2:c752315e4cdb3b45 +geom 2: material #1 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:faaee6e5a0219d28 camera=2:faaee6e5a0219d28 shadow=2:faaee6e5a0219d28 indirect=2:faaee6e5a0219d28 +geom 3: material #2 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:55522c246731933e camera=2:55522c246731933e shadow=2:55522c246731933e indirect=2:55522c246731933e +geom 4: material #3 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:6a1c895a634c0162 camera=2:6a1c895a634c0162 shadow=2:6a1c895a634c0162 indirect=2:6a1c895a634c0162 +geom 5: material #4 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:d7e184c050c2f9e4 camera=2:d7e184c050c2f9e4 shadow=2:d7e184c050c2f9e4 indirect=2:d7e184c050c2f9e4 +geom 6: material #5 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:0072c0dd41a28391 camera=1:0072c0dd41a28391 shadow=1:0072c0dd41a28391 indirect=1:0072c0dd41a28391 +geom 7: material #6 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:25d33e066e9377ce camera=1:25d33e066e9377ce shadow=1:25d33e066e9377ce indirect=1:25d33e066e9377ce +geom 8: material #7 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:946393500a4eba02 camera=1:946393500a4eba02 shadow=1:946393500a4eba02 indirect=1:946393500a4eba02 +geom 9: material #8 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:c0b8734402fc2ca3 camera=1:c0b8734402fc2ca3 shadow=1:c0b8734402fc2ca3 indirect=1:c0b8734402fc2ca3 +provenance material /World/Materials/Backdrop: MaterialOrigin { slots: [0, 1], displaced: false } +provenance material /World/Materials/PlateRough: MaterialOrigin { slots: [3], displaced: false } +provenance material /World/Materials/PlateRoughest: MaterialOrigin { slots: [2], displaced: false } +provenance material /World/Materials/PlateSmooth: MaterialOrigin { slots: [4], displaced: false } +provenance material /World/Materials/PlateSmoothest: MaterialOrigin { slots: [5], displaced: false } +provenance light /World/LightBig: LightOrigin { index: 0, geoms: 6..7 } +provenance light /World/LightMedium: LightOrigin { index: 1, geoms: 7..8 } +provenance light /World/LightSmall: LightOrigin { index: 2, geoms: 8..9 } +provenance light /World/LightTiny: LightOrigin { index: 3, geoms: 9..10 } +provenance geometry 0..1: /World/BackWall +provenance geometry 1..2: /World/Floor +provenance geometry 2..3: /World/Plate3 +provenance geometry 3..4: /World/Plate2 +provenance geometry 4..5: /World/Plate1 +provenance geometry 5..6: /World/Plate0 +provenance geometry 6..7: /World/LightBig +provenance geometry 7..8: /World/LightMedium +provenance geometry 8..9: /World/LightSmall +provenance geometry 9..10: /World/LightTiny +provenance mesh: MeshOrigin { geom_id: 0, slot: 0, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 1, slot: 1, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 2, slot: 2, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 3, slot: 3, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 4, slot: 4, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 5, slot: 5, baked: true, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 2412432479217055457, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 1: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 5856995924472605639, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 2: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 6402661692534233033, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 1 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 3: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 13696518014408431155, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 2 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 4: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 15384334289683032877, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 3 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 5: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 6481752197548623432, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 4 }), placements: 1, shared: false, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/World/Cam"), cameras: ["/World/Cam"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/World/Cam"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/veach_mis_usda-4f2fb0dc74121654-3.image b/crates/crust-core/tests/data/import_baselines/veach_mis_usda-4f2fb0dc74121654-3.image new file mode 100644 index 000000000..96aff8304 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/veach_mis_usda-4f2fb0dc74121654-3.image @@ -0,0 +1 @@ +960x540 16spp clamp-off c795c604ff2181ef diff --git a/crates/crust-core/tests/data/import_baselines/veach_mis_usda-4f2fb0dc74121654-4.digest b/crates/crust-core/tests/data/import_baselines/veach_mis_usda-4f2fb0dc74121654-4.digest new file mode 100644 index 000000000..6c2cda342 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/veach_mis_usda-4f2fb0dc74121654-4.digest @@ -0,0 +1,61 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/World/Cam") +camera: Camera { origin: Vec3A(0.0, 4.0, 12.0), lower_left_corner: Vec3A(-8.494889, -2.4422622, 2.981679), horizontal: Vec3A(16.989779, -0.0, 0.0), vertical: Vec3A(0.0, 9.411561, -1.6595122), u: Vec3A(1.0, -0.0, 0.0), v: Vec3A(0.0, 0.98480767, -0.17364816), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: Some("/Render/settings") +settings: RenderSettings { samples_per_pixel: 128, max_depth: 8, width: 960, height: 540, region: PixelRect { x0: 0, y0: 0, x1: 960, y1: 540 }, min_samples_per_pixel: 32, variance_threshold: 0.0, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: BalanceMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 16.0, aperture: [20.955, 15.2908], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 10.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/veach_mis.usda"], invisible_overrides: Some(0) } +layer: $DIR/veach_mis.usda +lights: 4 +light 0: area name Some("/World/LightBig") lpe None pmf 0.25 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 1: area name Some("/World/LightMedium") lpe None pmf 0.25 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 2: area name Some("/World/LightSmall") lpe None pmf 0.25 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 3: area name Some("/World/LightTiny") lpe None pmf 0.25 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 10 geometries, PrimitiveBreakdown { triangles: 12, spheres: 4, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 12, spheres: 4, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:68d4160149942562 camera=2:68d4160149942562 shadow=2:68d4160149942562 indirect=2:68d4160149942562 +geom 1: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:c752315e4cdb3b45 camera=2:c752315e4cdb3b45 shadow=2:c752315e4cdb3b45 indirect=2:c752315e4cdb3b45 +geom 2: material #1 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:faaee6e5a0219d28 camera=2:faaee6e5a0219d28 shadow=2:faaee6e5a0219d28 indirect=2:faaee6e5a0219d28 +geom 3: material #2 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:55522c246731933e camera=2:55522c246731933e shadow=2:55522c246731933e indirect=2:55522c246731933e +geom 4: material #3 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:6a1c895a634c0162 camera=2:6a1c895a634c0162 shadow=2:6a1c895a634c0162 indirect=2:6a1c895a634c0162 +geom 5: material #4 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:d7e184c050c2f9e4 camera=2:d7e184c050c2f9e4 shadow=2:d7e184c050c2f9e4 indirect=2:d7e184c050c2f9e4 +geom 6: material #5 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:0072c0dd41a28391 camera=1:0072c0dd41a28391 shadow=1:0072c0dd41a28391 indirect=1:0072c0dd41a28391 +geom 7: material #6 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:25d33e066e9377ce camera=1:25d33e066e9377ce shadow=1:25d33e066e9377ce indirect=1:25d33e066e9377ce +geom 8: material #7 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:946393500a4eba02 camera=1:946393500a4eba02 shadow=1:946393500a4eba02 indirect=1:946393500a4eba02 +geom 9: material #8 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:c0b8734402fc2ca3 camera=1:c0b8734402fc2ca3 shadow=1:c0b8734402fc2ca3 indirect=1:c0b8734402fc2ca3 +provenance material /World/Materials/Backdrop: MaterialOrigin { slots: [0, 1], displaced: false } +provenance material /World/Materials/PlateRough: MaterialOrigin { slots: [3], displaced: false } +provenance material /World/Materials/PlateRoughest: MaterialOrigin { slots: [2], displaced: false } +provenance material /World/Materials/PlateSmooth: MaterialOrigin { slots: [4], displaced: false } +provenance material /World/Materials/PlateSmoothest: MaterialOrigin { slots: [5], displaced: false } +provenance light /World/LightBig: LightOrigin { index: 0, geoms: 6..7 } +provenance light /World/LightMedium: LightOrigin { index: 1, geoms: 7..8 } +provenance light /World/LightSmall: LightOrigin { index: 2, geoms: 8..9 } +provenance light /World/LightTiny: LightOrigin { index: 3, geoms: 9..10 } +provenance geometry 0..1: /World/BackWall +provenance geometry 1..2: /World/Floor +provenance geometry 2..3: /World/Plate3 +provenance geometry 3..4: /World/Plate2 +provenance geometry 4..5: /World/Plate1 +provenance geometry 5..6: /World/Plate0 +provenance geometry 6..7: /World/LightBig +provenance geometry 7..8: /World/LightMedium +provenance geometry 8..9: /World/LightSmall +provenance geometry 9..10: /World/LightTiny +provenance mesh: MeshOrigin { geom_id: 0, slot: 0, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 1, slot: 1, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 2, slot: 2, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 3, slot: 3, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 4, slot: 4, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 5, slot: 5, baked: true, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 2412432479217055457, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 1: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 5856995924472605639, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 2: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 6402661692534233033, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 1 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 3: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 13696518014408431155, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 2 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 4: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 15384334289683032877, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 3 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 5: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 6481752197548623432, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 4 }), placements: 1, shared: false, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/World/Cam"), cameras: ["/World/Cam"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/World/Cam"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/veach_mis_usda-4f2fb0dc74121654-4.image b/crates/crust-core/tests/data/import_baselines/veach_mis_usda-4f2fb0dc74121654-4.image new file mode 100644 index 000000000..96aff8304 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/veach_mis_usda-4f2fb0dc74121654-4.image @@ -0,0 +1 @@ +960x540 16spp clamp-off c795c604ff2181ef diff --git a/crates/crust-core/tests/data/import_baselines/veach_mis_usda-6dae75008d5ac94f-1.digest b/crates/crust-core/tests/data/import_baselines/veach_mis_usda-6dae75008d5ac94f-1.digest new file mode 100644 index 000000000..6c2cda342 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/veach_mis_usda-6dae75008d5ac94f-1.digest @@ -0,0 +1,61 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/World/Cam") +camera: Camera { origin: Vec3A(0.0, 4.0, 12.0), lower_left_corner: Vec3A(-8.494889, -2.4422622, 2.981679), horizontal: Vec3A(16.989779, -0.0, 0.0), vertical: Vec3A(0.0, 9.411561, -1.6595122), u: Vec3A(1.0, -0.0, 0.0), v: Vec3A(0.0, 0.98480767, -0.17364816), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: Some("/Render/settings") +settings: RenderSettings { samples_per_pixel: 128, max_depth: 8, width: 960, height: 540, region: PixelRect { x0: 0, y0: 0, x1: 960, y1: 540 }, min_samples_per_pixel: 32, variance_threshold: 0.0, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: BalanceMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 16.0, aperture: [20.955, 15.2908], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 10.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/veach_mis.usda"], invisible_overrides: Some(0) } +layer: $DIR/veach_mis.usda +lights: 4 +light 0: area name Some("/World/LightBig") lpe None pmf 0.25 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 1: area name Some("/World/LightMedium") lpe None pmf 0.25 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 2: area name Some("/World/LightSmall") lpe None pmf 0.25 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 3: area name Some("/World/LightTiny") lpe None pmf 0.25 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 10 geometries, PrimitiveBreakdown { triangles: 12, spheres: 4, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 12, spheres: 4, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:68d4160149942562 camera=2:68d4160149942562 shadow=2:68d4160149942562 indirect=2:68d4160149942562 +geom 1: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:c752315e4cdb3b45 camera=2:c752315e4cdb3b45 shadow=2:c752315e4cdb3b45 indirect=2:c752315e4cdb3b45 +geom 2: material #1 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:faaee6e5a0219d28 camera=2:faaee6e5a0219d28 shadow=2:faaee6e5a0219d28 indirect=2:faaee6e5a0219d28 +geom 3: material #2 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:55522c246731933e camera=2:55522c246731933e shadow=2:55522c246731933e indirect=2:55522c246731933e +geom 4: material #3 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:6a1c895a634c0162 camera=2:6a1c895a634c0162 shadow=2:6a1c895a634c0162 indirect=2:6a1c895a634c0162 +geom 5: material #4 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:d7e184c050c2f9e4 camera=2:d7e184c050c2f9e4 shadow=2:d7e184c050c2f9e4 indirect=2:d7e184c050c2f9e4 +geom 6: material #5 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:0072c0dd41a28391 camera=1:0072c0dd41a28391 shadow=1:0072c0dd41a28391 indirect=1:0072c0dd41a28391 +geom 7: material #6 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:25d33e066e9377ce camera=1:25d33e066e9377ce shadow=1:25d33e066e9377ce indirect=1:25d33e066e9377ce +geom 8: material #7 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:946393500a4eba02 camera=1:946393500a4eba02 shadow=1:946393500a4eba02 indirect=1:946393500a4eba02 +geom 9: material #8 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:c0b8734402fc2ca3 camera=1:c0b8734402fc2ca3 shadow=1:c0b8734402fc2ca3 indirect=1:c0b8734402fc2ca3 +provenance material /World/Materials/Backdrop: MaterialOrigin { slots: [0, 1], displaced: false } +provenance material /World/Materials/PlateRough: MaterialOrigin { slots: [3], displaced: false } +provenance material /World/Materials/PlateRoughest: MaterialOrigin { slots: [2], displaced: false } +provenance material /World/Materials/PlateSmooth: MaterialOrigin { slots: [4], displaced: false } +provenance material /World/Materials/PlateSmoothest: MaterialOrigin { slots: [5], displaced: false } +provenance light /World/LightBig: LightOrigin { index: 0, geoms: 6..7 } +provenance light /World/LightMedium: LightOrigin { index: 1, geoms: 7..8 } +provenance light /World/LightSmall: LightOrigin { index: 2, geoms: 8..9 } +provenance light /World/LightTiny: LightOrigin { index: 3, geoms: 9..10 } +provenance geometry 0..1: /World/BackWall +provenance geometry 1..2: /World/Floor +provenance geometry 2..3: /World/Plate3 +provenance geometry 3..4: /World/Plate2 +provenance geometry 4..5: /World/Plate1 +provenance geometry 5..6: /World/Plate0 +provenance geometry 6..7: /World/LightBig +provenance geometry 7..8: /World/LightMedium +provenance geometry 8..9: /World/LightSmall +provenance geometry 9..10: /World/LightTiny +provenance mesh: MeshOrigin { geom_id: 0, slot: 0, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 1, slot: 1, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 2, slot: 2, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 3, slot: 3, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 4, slot: 4, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 5, slot: 5, baked: true, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 2412432479217055457, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 1: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 5856995924472605639, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 2: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 6402661692534233033, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 1 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 3: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 13696518014408431155, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 2 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 4: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 15384334289683032877, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 3 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 5: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 6481752197548623432, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 4 }), placements: 1, shared: false, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/World/Cam"), cameras: ["/World/Cam"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/World/Cam"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/veach_mis_usda-6dae75008d5ac94f-1.image b/crates/crust-core/tests/data/import_baselines/veach_mis_usda-6dae75008d5ac94f-1.image new file mode 100644 index 000000000..96aff8304 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/veach_mis_usda-6dae75008d5ac94f-1.image @@ -0,0 +1 @@ +960x540 16spp clamp-off c795c604ff2181ef diff --git a/crates/crust-core/tests/data/import_baselines/veach_mis_usda-6dae75008d5ac94f-2.digest b/crates/crust-core/tests/data/import_baselines/veach_mis_usda-6dae75008d5ac94f-2.digest new file mode 100644 index 000000000..6c2cda342 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/veach_mis_usda-6dae75008d5ac94f-2.digest @@ -0,0 +1,61 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/World/Cam") +camera: Camera { origin: Vec3A(0.0, 4.0, 12.0), lower_left_corner: Vec3A(-8.494889, -2.4422622, 2.981679), horizontal: Vec3A(16.989779, -0.0, 0.0), vertical: Vec3A(0.0, 9.411561, -1.6595122), u: Vec3A(1.0, -0.0, 0.0), v: Vec3A(0.0, 0.98480767, -0.17364816), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: Some("/Render/settings") +settings: RenderSettings { samples_per_pixel: 128, max_depth: 8, width: 960, height: 540, region: PixelRect { x0: 0, y0: 0, x1: 960, y1: 540 }, min_samples_per_pixel: 32, variance_threshold: 0.0, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: BalanceMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 16.0, aperture: [20.955, 15.2908], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 10.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/veach_mis.usda"], invisible_overrides: Some(0) } +layer: $DIR/veach_mis.usda +lights: 4 +light 0: area name Some("/World/LightBig") lpe None pmf 0.25 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 1: area name Some("/World/LightMedium") lpe None pmf 0.25 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 2: area name Some("/World/LightSmall") lpe None pmf 0.25 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 3: area name Some("/World/LightTiny") lpe None pmf 0.25 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 10 geometries, PrimitiveBreakdown { triangles: 12, spheres: 4, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 12, spheres: 4, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:68d4160149942562 camera=2:68d4160149942562 shadow=2:68d4160149942562 indirect=2:68d4160149942562 +geom 1: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:c752315e4cdb3b45 camera=2:c752315e4cdb3b45 shadow=2:c752315e4cdb3b45 indirect=2:c752315e4cdb3b45 +geom 2: material #1 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:faaee6e5a0219d28 camera=2:faaee6e5a0219d28 shadow=2:faaee6e5a0219d28 indirect=2:faaee6e5a0219d28 +geom 3: material #2 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:55522c246731933e camera=2:55522c246731933e shadow=2:55522c246731933e indirect=2:55522c246731933e +geom 4: material #3 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:6a1c895a634c0162 camera=2:6a1c895a634c0162 shadow=2:6a1c895a634c0162 indirect=2:6a1c895a634c0162 +geom 5: material #4 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:d7e184c050c2f9e4 camera=2:d7e184c050c2f9e4 shadow=2:d7e184c050c2f9e4 indirect=2:d7e184c050c2f9e4 +geom 6: material #5 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:0072c0dd41a28391 camera=1:0072c0dd41a28391 shadow=1:0072c0dd41a28391 indirect=1:0072c0dd41a28391 +geom 7: material #6 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:25d33e066e9377ce camera=1:25d33e066e9377ce shadow=1:25d33e066e9377ce indirect=1:25d33e066e9377ce +geom 8: material #7 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:946393500a4eba02 camera=1:946393500a4eba02 shadow=1:946393500a4eba02 indirect=1:946393500a4eba02 +geom 9: material #8 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:c0b8734402fc2ca3 camera=1:c0b8734402fc2ca3 shadow=1:c0b8734402fc2ca3 indirect=1:c0b8734402fc2ca3 +provenance material /World/Materials/Backdrop: MaterialOrigin { slots: [0, 1], displaced: false } +provenance material /World/Materials/PlateRough: MaterialOrigin { slots: [3], displaced: false } +provenance material /World/Materials/PlateRoughest: MaterialOrigin { slots: [2], displaced: false } +provenance material /World/Materials/PlateSmooth: MaterialOrigin { slots: [4], displaced: false } +provenance material /World/Materials/PlateSmoothest: MaterialOrigin { slots: [5], displaced: false } +provenance light /World/LightBig: LightOrigin { index: 0, geoms: 6..7 } +provenance light /World/LightMedium: LightOrigin { index: 1, geoms: 7..8 } +provenance light /World/LightSmall: LightOrigin { index: 2, geoms: 8..9 } +provenance light /World/LightTiny: LightOrigin { index: 3, geoms: 9..10 } +provenance geometry 0..1: /World/BackWall +provenance geometry 1..2: /World/Floor +provenance geometry 2..3: /World/Plate3 +provenance geometry 3..4: /World/Plate2 +provenance geometry 4..5: /World/Plate1 +provenance geometry 5..6: /World/Plate0 +provenance geometry 6..7: /World/LightBig +provenance geometry 7..8: /World/LightMedium +provenance geometry 8..9: /World/LightSmall +provenance geometry 9..10: /World/LightTiny +provenance mesh: MeshOrigin { geom_id: 0, slot: 0, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 1, slot: 1, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 2, slot: 2, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 3, slot: 3, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 4, slot: 4, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 5, slot: 5, baked: true, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 2412432479217055457, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 1: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 5856995924472605639, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 2: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 6402661692534233033, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 1 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 3: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 13696518014408431155, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 2 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 4: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 15384334289683032877, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 3 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 5: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 6481752197548623432, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 4 }), placements: 1, shared: false, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/World/Cam"), cameras: ["/World/Cam"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/World/Cam"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/veach_mis_usda-6dae75008d5ac94f-2.image b/crates/crust-core/tests/data/import_baselines/veach_mis_usda-6dae75008d5ac94f-2.image new file mode 100644 index 000000000..96aff8304 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/veach_mis_usda-6dae75008d5ac94f-2.image @@ -0,0 +1 @@ +960x540 16spp clamp-off c795c604ff2181ef diff --git a/crates/crust-core/tests/data/import_baselines/veach_mis_usda-6dae75008d5ac94f-3.digest b/crates/crust-core/tests/data/import_baselines/veach_mis_usda-6dae75008d5ac94f-3.digest new file mode 100644 index 000000000..6c2cda342 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/veach_mis_usda-6dae75008d5ac94f-3.digest @@ -0,0 +1,61 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/World/Cam") +camera: Camera { origin: Vec3A(0.0, 4.0, 12.0), lower_left_corner: Vec3A(-8.494889, -2.4422622, 2.981679), horizontal: Vec3A(16.989779, -0.0, 0.0), vertical: Vec3A(0.0, 9.411561, -1.6595122), u: Vec3A(1.0, -0.0, 0.0), v: Vec3A(0.0, 0.98480767, -0.17364816), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: Some("/Render/settings") +settings: RenderSettings { samples_per_pixel: 128, max_depth: 8, width: 960, height: 540, region: PixelRect { x0: 0, y0: 0, x1: 960, y1: 540 }, min_samples_per_pixel: 32, variance_threshold: 0.0, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: BalanceMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 16.0, aperture: [20.955, 15.2908], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 10.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/veach_mis.usda"], invisible_overrides: Some(0) } +layer: $DIR/veach_mis.usda +lights: 4 +light 0: area name Some("/World/LightBig") lpe None pmf 0.25 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 1: area name Some("/World/LightMedium") lpe None pmf 0.25 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 2: area name Some("/World/LightSmall") lpe None pmf 0.25 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 3: area name Some("/World/LightTiny") lpe None pmf 0.25 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 10 geometries, PrimitiveBreakdown { triangles: 12, spheres: 4, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 12, spheres: 4, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:68d4160149942562 camera=2:68d4160149942562 shadow=2:68d4160149942562 indirect=2:68d4160149942562 +geom 1: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:c752315e4cdb3b45 camera=2:c752315e4cdb3b45 shadow=2:c752315e4cdb3b45 indirect=2:c752315e4cdb3b45 +geom 2: material #1 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:faaee6e5a0219d28 camera=2:faaee6e5a0219d28 shadow=2:faaee6e5a0219d28 indirect=2:faaee6e5a0219d28 +geom 3: material #2 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:55522c246731933e camera=2:55522c246731933e shadow=2:55522c246731933e indirect=2:55522c246731933e +geom 4: material #3 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:6a1c895a634c0162 camera=2:6a1c895a634c0162 shadow=2:6a1c895a634c0162 indirect=2:6a1c895a634c0162 +geom 5: material #4 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:d7e184c050c2f9e4 camera=2:d7e184c050c2f9e4 shadow=2:d7e184c050c2f9e4 indirect=2:d7e184c050c2f9e4 +geom 6: material #5 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:0072c0dd41a28391 camera=1:0072c0dd41a28391 shadow=1:0072c0dd41a28391 indirect=1:0072c0dd41a28391 +geom 7: material #6 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:25d33e066e9377ce camera=1:25d33e066e9377ce shadow=1:25d33e066e9377ce indirect=1:25d33e066e9377ce +geom 8: material #7 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:946393500a4eba02 camera=1:946393500a4eba02 shadow=1:946393500a4eba02 indirect=1:946393500a4eba02 +geom 9: material #8 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:c0b8734402fc2ca3 camera=1:c0b8734402fc2ca3 shadow=1:c0b8734402fc2ca3 indirect=1:c0b8734402fc2ca3 +provenance material /World/Materials/Backdrop: MaterialOrigin { slots: [0, 1], displaced: false } +provenance material /World/Materials/PlateRough: MaterialOrigin { slots: [3], displaced: false } +provenance material /World/Materials/PlateRoughest: MaterialOrigin { slots: [2], displaced: false } +provenance material /World/Materials/PlateSmooth: MaterialOrigin { slots: [4], displaced: false } +provenance material /World/Materials/PlateSmoothest: MaterialOrigin { slots: [5], displaced: false } +provenance light /World/LightBig: LightOrigin { index: 0, geoms: 6..7 } +provenance light /World/LightMedium: LightOrigin { index: 1, geoms: 7..8 } +provenance light /World/LightSmall: LightOrigin { index: 2, geoms: 8..9 } +provenance light /World/LightTiny: LightOrigin { index: 3, geoms: 9..10 } +provenance geometry 0..1: /World/BackWall +provenance geometry 1..2: /World/Floor +provenance geometry 2..3: /World/Plate3 +provenance geometry 3..4: /World/Plate2 +provenance geometry 4..5: /World/Plate1 +provenance geometry 5..6: /World/Plate0 +provenance geometry 6..7: /World/LightBig +provenance geometry 7..8: /World/LightMedium +provenance geometry 8..9: /World/LightSmall +provenance geometry 9..10: /World/LightTiny +provenance mesh: MeshOrigin { geom_id: 0, slot: 0, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 1, slot: 1, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 2, slot: 2, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 3, slot: 3, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 4, slot: 4, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 5, slot: 5, baked: true, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 2412432479217055457, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 1: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 5856995924472605639, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 2: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 6402661692534233033, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 1 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 3: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 13696518014408431155, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 2 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 4: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 15384334289683032877, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 3 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 5: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 6481752197548623432, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 4 }), placements: 1, shared: false, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/World/Cam"), cameras: ["/World/Cam"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/World/Cam"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/veach_mis_usda-6dae75008d5ac94f-3.image b/crates/crust-core/tests/data/import_baselines/veach_mis_usda-6dae75008d5ac94f-3.image new file mode 100644 index 000000000..96aff8304 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/veach_mis_usda-6dae75008d5ac94f-3.image @@ -0,0 +1 @@ +960x540 16spp clamp-off c795c604ff2181ef diff --git a/crates/crust-core/tests/data/import_baselines/veach_mis_usda-6dae75008d5ac94f-4.digest b/crates/crust-core/tests/data/import_baselines/veach_mis_usda-6dae75008d5ac94f-4.digest new file mode 100644 index 000000000..6c2cda342 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/veach_mis_usda-6dae75008d5ac94f-4.digest @@ -0,0 +1,61 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/World/Cam") +camera: Camera { origin: Vec3A(0.0, 4.0, 12.0), lower_left_corner: Vec3A(-8.494889, -2.4422622, 2.981679), horizontal: Vec3A(16.989779, -0.0, 0.0), vertical: Vec3A(0.0, 9.411561, -1.6595122), u: Vec3A(1.0, -0.0, 0.0), v: Vec3A(0.0, 0.98480767, -0.17364816), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: Some("/Render/settings") +settings: RenderSettings { samples_per_pixel: 128, max_depth: 8, width: 960, height: 540, region: PixelRect { x0: 0, y0: 0, x1: 960, y1: 540 }, min_samples_per_pixel: 32, variance_threshold: 0.0, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: BalanceMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 16.0, aperture: [20.955, 15.2908], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 10.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/veach_mis.usda"], invisible_overrides: Some(0) } +layer: $DIR/veach_mis.usda +lights: 4 +light 0: area name Some("/World/LightBig") lpe None pmf 0.25 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 1: area name Some("/World/LightMedium") lpe None pmf 0.25 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 2: area name Some("/World/LightSmall") lpe None pmf 0.25 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 3: area name Some("/World/LightTiny") lpe None pmf 0.25 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 10 geometries, PrimitiveBreakdown { triangles: 12, spheres: 4, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 12, spheres: 4, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:68d4160149942562 camera=2:68d4160149942562 shadow=2:68d4160149942562 indirect=2:68d4160149942562 +geom 1: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:c752315e4cdb3b45 camera=2:c752315e4cdb3b45 shadow=2:c752315e4cdb3b45 indirect=2:c752315e4cdb3b45 +geom 2: material #1 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:faaee6e5a0219d28 camera=2:faaee6e5a0219d28 shadow=2:faaee6e5a0219d28 indirect=2:faaee6e5a0219d28 +geom 3: material #2 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:55522c246731933e camera=2:55522c246731933e shadow=2:55522c246731933e indirect=2:55522c246731933e +geom 4: material #3 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:6a1c895a634c0162 camera=2:6a1c895a634c0162 shadow=2:6a1c895a634c0162 indirect=2:6a1c895a634c0162 +geom 5: material #4 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:d7e184c050c2f9e4 camera=2:d7e184c050c2f9e4 shadow=2:d7e184c050c2f9e4 indirect=2:d7e184c050c2f9e4 +geom 6: material #5 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:0072c0dd41a28391 camera=1:0072c0dd41a28391 shadow=1:0072c0dd41a28391 indirect=1:0072c0dd41a28391 +geom 7: material #6 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:25d33e066e9377ce camera=1:25d33e066e9377ce shadow=1:25d33e066e9377ce indirect=1:25d33e066e9377ce +geom 8: material #7 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:946393500a4eba02 camera=1:946393500a4eba02 shadow=1:946393500a4eba02 indirect=1:946393500a4eba02 +geom 9: material #8 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:c0b8734402fc2ca3 camera=1:c0b8734402fc2ca3 shadow=1:c0b8734402fc2ca3 indirect=1:c0b8734402fc2ca3 +provenance material /World/Materials/Backdrop: MaterialOrigin { slots: [0, 1], displaced: false } +provenance material /World/Materials/PlateRough: MaterialOrigin { slots: [3], displaced: false } +provenance material /World/Materials/PlateRoughest: MaterialOrigin { slots: [2], displaced: false } +provenance material /World/Materials/PlateSmooth: MaterialOrigin { slots: [4], displaced: false } +provenance material /World/Materials/PlateSmoothest: MaterialOrigin { slots: [5], displaced: false } +provenance light /World/LightBig: LightOrigin { index: 0, geoms: 6..7 } +provenance light /World/LightMedium: LightOrigin { index: 1, geoms: 7..8 } +provenance light /World/LightSmall: LightOrigin { index: 2, geoms: 8..9 } +provenance light /World/LightTiny: LightOrigin { index: 3, geoms: 9..10 } +provenance geometry 0..1: /World/BackWall +provenance geometry 1..2: /World/Floor +provenance geometry 2..3: /World/Plate3 +provenance geometry 3..4: /World/Plate2 +provenance geometry 4..5: /World/Plate1 +provenance geometry 5..6: /World/Plate0 +provenance geometry 6..7: /World/LightBig +provenance geometry 7..8: /World/LightMedium +provenance geometry 8..9: /World/LightSmall +provenance geometry 9..10: /World/LightTiny +provenance mesh: MeshOrigin { geom_id: 0, slot: 0, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 1, slot: 1, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 2, slot: 2, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 3, slot: 3, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 4, slot: 4, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 5, slot: 5, baked: true, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 2412432479217055457, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 1: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 5856995924472605639, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 2: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 6402661692534233033, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 1 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 3: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 13696518014408431155, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 2 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 4: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 15384334289683032877, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 3 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 5: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 6481752197548623432, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 4 }), placements: 1, shared: false, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/World/Cam"), cameras: ["/World/Cam"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/World/Cam"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/veach_mis_usda-6dae75008d5ac94f-4.image b/crates/crust-core/tests/data/import_baselines/veach_mis_usda-6dae75008d5ac94f-4.image new file mode 100644 index 000000000..96aff8304 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/veach_mis_usda-6dae75008d5ac94f-4.image @@ -0,0 +1 @@ +960x540 16spp clamp-off c795c604ff2181ef diff --git a/crates/crust-core/tests/data/import_baselines/veach_mis_usda-70c995e092ab1d61-1.digest b/crates/crust-core/tests/data/import_baselines/veach_mis_usda-70c995e092ab1d61-1.digest new file mode 100644 index 000000000..6c2cda342 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/veach_mis_usda-70c995e092ab1d61-1.digest @@ -0,0 +1,61 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/World/Cam") +camera: Camera { origin: Vec3A(0.0, 4.0, 12.0), lower_left_corner: Vec3A(-8.494889, -2.4422622, 2.981679), horizontal: Vec3A(16.989779, -0.0, 0.0), vertical: Vec3A(0.0, 9.411561, -1.6595122), u: Vec3A(1.0, -0.0, 0.0), v: Vec3A(0.0, 0.98480767, -0.17364816), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: Some("/Render/settings") +settings: RenderSettings { samples_per_pixel: 128, max_depth: 8, width: 960, height: 540, region: PixelRect { x0: 0, y0: 0, x1: 960, y1: 540 }, min_samples_per_pixel: 32, variance_threshold: 0.0, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: BalanceMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 16.0, aperture: [20.955, 15.2908], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 10.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/veach_mis.usda"], invisible_overrides: Some(0) } +layer: $DIR/veach_mis.usda +lights: 4 +light 0: area name Some("/World/LightBig") lpe None pmf 0.25 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 1: area name Some("/World/LightMedium") lpe None pmf 0.25 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 2: area name Some("/World/LightSmall") lpe None pmf 0.25 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 3: area name Some("/World/LightTiny") lpe None pmf 0.25 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 10 geometries, PrimitiveBreakdown { triangles: 12, spheres: 4, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 12, spheres: 4, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:68d4160149942562 camera=2:68d4160149942562 shadow=2:68d4160149942562 indirect=2:68d4160149942562 +geom 1: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:c752315e4cdb3b45 camera=2:c752315e4cdb3b45 shadow=2:c752315e4cdb3b45 indirect=2:c752315e4cdb3b45 +geom 2: material #1 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:faaee6e5a0219d28 camera=2:faaee6e5a0219d28 shadow=2:faaee6e5a0219d28 indirect=2:faaee6e5a0219d28 +geom 3: material #2 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:55522c246731933e camera=2:55522c246731933e shadow=2:55522c246731933e indirect=2:55522c246731933e +geom 4: material #3 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:6a1c895a634c0162 camera=2:6a1c895a634c0162 shadow=2:6a1c895a634c0162 indirect=2:6a1c895a634c0162 +geom 5: material #4 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:d7e184c050c2f9e4 camera=2:d7e184c050c2f9e4 shadow=2:d7e184c050c2f9e4 indirect=2:d7e184c050c2f9e4 +geom 6: material #5 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:0072c0dd41a28391 camera=1:0072c0dd41a28391 shadow=1:0072c0dd41a28391 indirect=1:0072c0dd41a28391 +geom 7: material #6 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:25d33e066e9377ce camera=1:25d33e066e9377ce shadow=1:25d33e066e9377ce indirect=1:25d33e066e9377ce +geom 8: material #7 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:946393500a4eba02 camera=1:946393500a4eba02 shadow=1:946393500a4eba02 indirect=1:946393500a4eba02 +geom 9: material #8 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:c0b8734402fc2ca3 camera=1:c0b8734402fc2ca3 shadow=1:c0b8734402fc2ca3 indirect=1:c0b8734402fc2ca3 +provenance material /World/Materials/Backdrop: MaterialOrigin { slots: [0, 1], displaced: false } +provenance material /World/Materials/PlateRough: MaterialOrigin { slots: [3], displaced: false } +provenance material /World/Materials/PlateRoughest: MaterialOrigin { slots: [2], displaced: false } +provenance material /World/Materials/PlateSmooth: MaterialOrigin { slots: [4], displaced: false } +provenance material /World/Materials/PlateSmoothest: MaterialOrigin { slots: [5], displaced: false } +provenance light /World/LightBig: LightOrigin { index: 0, geoms: 6..7 } +provenance light /World/LightMedium: LightOrigin { index: 1, geoms: 7..8 } +provenance light /World/LightSmall: LightOrigin { index: 2, geoms: 8..9 } +provenance light /World/LightTiny: LightOrigin { index: 3, geoms: 9..10 } +provenance geometry 0..1: /World/BackWall +provenance geometry 1..2: /World/Floor +provenance geometry 2..3: /World/Plate3 +provenance geometry 3..4: /World/Plate2 +provenance geometry 4..5: /World/Plate1 +provenance geometry 5..6: /World/Plate0 +provenance geometry 6..7: /World/LightBig +provenance geometry 7..8: /World/LightMedium +provenance geometry 8..9: /World/LightSmall +provenance geometry 9..10: /World/LightTiny +provenance mesh: MeshOrigin { geom_id: 0, slot: 0, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 1, slot: 1, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 2, slot: 2, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 3, slot: 3, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 4, slot: 4, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 5, slot: 5, baked: true, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 2412432479217055457, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 1: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 5856995924472605639, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 2: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 6402661692534233033, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 1 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 3: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 13696518014408431155, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 2 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 4: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 15384334289683032877, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 3 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 5: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 6481752197548623432, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 4 }), placements: 1, shared: false, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/World/Cam"), cameras: ["/World/Cam"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/World/Cam"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/veach_mis_usda-70c995e092ab1d61-1.image b/crates/crust-core/tests/data/import_baselines/veach_mis_usda-70c995e092ab1d61-1.image new file mode 100644 index 000000000..96aff8304 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/veach_mis_usda-70c995e092ab1d61-1.image @@ -0,0 +1 @@ +960x540 16spp clamp-off c795c604ff2181ef diff --git a/crates/crust-core/tests/data/import_baselines/veach_mis_usda-70c995e092ab1d61-10.digest b/crates/crust-core/tests/data/import_baselines/veach_mis_usda-70c995e092ab1d61-10.digest new file mode 100644 index 000000000..6c2cda342 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/veach_mis_usda-70c995e092ab1d61-10.digest @@ -0,0 +1,61 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/World/Cam") +camera: Camera { origin: Vec3A(0.0, 4.0, 12.0), lower_left_corner: Vec3A(-8.494889, -2.4422622, 2.981679), horizontal: Vec3A(16.989779, -0.0, 0.0), vertical: Vec3A(0.0, 9.411561, -1.6595122), u: Vec3A(1.0, -0.0, 0.0), v: Vec3A(0.0, 0.98480767, -0.17364816), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: Some("/Render/settings") +settings: RenderSettings { samples_per_pixel: 128, max_depth: 8, width: 960, height: 540, region: PixelRect { x0: 0, y0: 0, x1: 960, y1: 540 }, min_samples_per_pixel: 32, variance_threshold: 0.0, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: BalanceMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 16.0, aperture: [20.955, 15.2908], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 10.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/veach_mis.usda"], invisible_overrides: Some(0) } +layer: $DIR/veach_mis.usda +lights: 4 +light 0: area name Some("/World/LightBig") lpe None pmf 0.25 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 1: area name Some("/World/LightMedium") lpe None pmf 0.25 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 2: area name Some("/World/LightSmall") lpe None pmf 0.25 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 3: area name Some("/World/LightTiny") lpe None pmf 0.25 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 10 geometries, PrimitiveBreakdown { triangles: 12, spheres: 4, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 12, spheres: 4, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:68d4160149942562 camera=2:68d4160149942562 shadow=2:68d4160149942562 indirect=2:68d4160149942562 +geom 1: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:c752315e4cdb3b45 camera=2:c752315e4cdb3b45 shadow=2:c752315e4cdb3b45 indirect=2:c752315e4cdb3b45 +geom 2: material #1 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:faaee6e5a0219d28 camera=2:faaee6e5a0219d28 shadow=2:faaee6e5a0219d28 indirect=2:faaee6e5a0219d28 +geom 3: material #2 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:55522c246731933e camera=2:55522c246731933e shadow=2:55522c246731933e indirect=2:55522c246731933e +geom 4: material #3 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:6a1c895a634c0162 camera=2:6a1c895a634c0162 shadow=2:6a1c895a634c0162 indirect=2:6a1c895a634c0162 +geom 5: material #4 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:d7e184c050c2f9e4 camera=2:d7e184c050c2f9e4 shadow=2:d7e184c050c2f9e4 indirect=2:d7e184c050c2f9e4 +geom 6: material #5 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:0072c0dd41a28391 camera=1:0072c0dd41a28391 shadow=1:0072c0dd41a28391 indirect=1:0072c0dd41a28391 +geom 7: material #6 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:25d33e066e9377ce camera=1:25d33e066e9377ce shadow=1:25d33e066e9377ce indirect=1:25d33e066e9377ce +geom 8: material #7 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:946393500a4eba02 camera=1:946393500a4eba02 shadow=1:946393500a4eba02 indirect=1:946393500a4eba02 +geom 9: material #8 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:c0b8734402fc2ca3 camera=1:c0b8734402fc2ca3 shadow=1:c0b8734402fc2ca3 indirect=1:c0b8734402fc2ca3 +provenance material /World/Materials/Backdrop: MaterialOrigin { slots: [0, 1], displaced: false } +provenance material /World/Materials/PlateRough: MaterialOrigin { slots: [3], displaced: false } +provenance material /World/Materials/PlateRoughest: MaterialOrigin { slots: [2], displaced: false } +provenance material /World/Materials/PlateSmooth: MaterialOrigin { slots: [4], displaced: false } +provenance material /World/Materials/PlateSmoothest: MaterialOrigin { slots: [5], displaced: false } +provenance light /World/LightBig: LightOrigin { index: 0, geoms: 6..7 } +provenance light /World/LightMedium: LightOrigin { index: 1, geoms: 7..8 } +provenance light /World/LightSmall: LightOrigin { index: 2, geoms: 8..9 } +provenance light /World/LightTiny: LightOrigin { index: 3, geoms: 9..10 } +provenance geometry 0..1: /World/BackWall +provenance geometry 1..2: /World/Floor +provenance geometry 2..3: /World/Plate3 +provenance geometry 3..4: /World/Plate2 +provenance geometry 4..5: /World/Plate1 +provenance geometry 5..6: /World/Plate0 +provenance geometry 6..7: /World/LightBig +provenance geometry 7..8: /World/LightMedium +provenance geometry 8..9: /World/LightSmall +provenance geometry 9..10: /World/LightTiny +provenance mesh: MeshOrigin { geom_id: 0, slot: 0, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 1, slot: 1, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 2, slot: 2, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 3, slot: 3, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 4, slot: 4, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 5, slot: 5, baked: true, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 2412432479217055457, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 1: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 5856995924472605639, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 2: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 6402661692534233033, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 1 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 3: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 13696518014408431155, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 2 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 4: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 15384334289683032877, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 3 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 5: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 6481752197548623432, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 4 }), placements: 1, shared: false, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/World/Cam"), cameras: ["/World/Cam"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/World/Cam"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/veach_mis_usda-70c995e092ab1d61-10.image b/crates/crust-core/tests/data/import_baselines/veach_mis_usda-70c995e092ab1d61-10.image new file mode 100644 index 000000000..96aff8304 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/veach_mis_usda-70c995e092ab1d61-10.image @@ -0,0 +1 @@ +960x540 16spp clamp-off c795c604ff2181ef diff --git a/crates/crust-core/tests/data/import_baselines/veach_mis_usda-70c995e092ab1d61-11.digest b/crates/crust-core/tests/data/import_baselines/veach_mis_usda-70c995e092ab1d61-11.digest new file mode 100644 index 000000000..6c2cda342 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/veach_mis_usda-70c995e092ab1d61-11.digest @@ -0,0 +1,61 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/World/Cam") +camera: Camera { origin: Vec3A(0.0, 4.0, 12.0), lower_left_corner: Vec3A(-8.494889, -2.4422622, 2.981679), horizontal: Vec3A(16.989779, -0.0, 0.0), vertical: Vec3A(0.0, 9.411561, -1.6595122), u: Vec3A(1.0, -0.0, 0.0), v: Vec3A(0.0, 0.98480767, -0.17364816), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: Some("/Render/settings") +settings: RenderSettings { samples_per_pixel: 128, max_depth: 8, width: 960, height: 540, region: PixelRect { x0: 0, y0: 0, x1: 960, y1: 540 }, min_samples_per_pixel: 32, variance_threshold: 0.0, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: BalanceMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 16.0, aperture: [20.955, 15.2908], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 10.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/veach_mis.usda"], invisible_overrides: Some(0) } +layer: $DIR/veach_mis.usda +lights: 4 +light 0: area name Some("/World/LightBig") lpe None pmf 0.25 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 1: area name Some("/World/LightMedium") lpe None pmf 0.25 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 2: area name Some("/World/LightSmall") lpe None pmf 0.25 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 3: area name Some("/World/LightTiny") lpe None pmf 0.25 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 10 geometries, PrimitiveBreakdown { triangles: 12, spheres: 4, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 12, spheres: 4, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:68d4160149942562 camera=2:68d4160149942562 shadow=2:68d4160149942562 indirect=2:68d4160149942562 +geom 1: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:c752315e4cdb3b45 camera=2:c752315e4cdb3b45 shadow=2:c752315e4cdb3b45 indirect=2:c752315e4cdb3b45 +geom 2: material #1 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:faaee6e5a0219d28 camera=2:faaee6e5a0219d28 shadow=2:faaee6e5a0219d28 indirect=2:faaee6e5a0219d28 +geom 3: material #2 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:55522c246731933e camera=2:55522c246731933e shadow=2:55522c246731933e indirect=2:55522c246731933e +geom 4: material #3 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:6a1c895a634c0162 camera=2:6a1c895a634c0162 shadow=2:6a1c895a634c0162 indirect=2:6a1c895a634c0162 +geom 5: material #4 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:d7e184c050c2f9e4 camera=2:d7e184c050c2f9e4 shadow=2:d7e184c050c2f9e4 indirect=2:d7e184c050c2f9e4 +geom 6: material #5 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:0072c0dd41a28391 camera=1:0072c0dd41a28391 shadow=1:0072c0dd41a28391 indirect=1:0072c0dd41a28391 +geom 7: material #6 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:25d33e066e9377ce camera=1:25d33e066e9377ce shadow=1:25d33e066e9377ce indirect=1:25d33e066e9377ce +geom 8: material #7 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:946393500a4eba02 camera=1:946393500a4eba02 shadow=1:946393500a4eba02 indirect=1:946393500a4eba02 +geom 9: material #8 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:c0b8734402fc2ca3 camera=1:c0b8734402fc2ca3 shadow=1:c0b8734402fc2ca3 indirect=1:c0b8734402fc2ca3 +provenance material /World/Materials/Backdrop: MaterialOrigin { slots: [0, 1], displaced: false } +provenance material /World/Materials/PlateRough: MaterialOrigin { slots: [3], displaced: false } +provenance material /World/Materials/PlateRoughest: MaterialOrigin { slots: [2], displaced: false } +provenance material /World/Materials/PlateSmooth: MaterialOrigin { slots: [4], displaced: false } +provenance material /World/Materials/PlateSmoothest: MaterialOrigin { slots: [5], displaced: false } +provenance light /World/LightBig: LightOrigin { index: 0, geoms: 6..7 } +provenance light /World/LightMedium: LightOrigin { index: 1, geoms: 7..8 } +provenance light /World/LightSmall: LightOrigin { index: 2, geoms: 8..9 } +provenance light /World/LightTiny: LightOrigin { index: 3, geoms: 9..10 } +provenance geometry 0..1: /World/BackWall +provenance geometry 1..2: /World/Floor +provenance geometry 2..3: /World/Plate3 +provenance geometry 3..4: /World/Plate2 +provenance geometry 4..5: /World/Plate1 +provenance geometry 5..6: /World/Plate0 +provenance geometry 6..7: /World/LightBig +provenance geometry 7..8: /World/LightMedium +provenance geometry 8..9: /World/LightSmall +provenance geometry 9..10: /World/LightTiny +provenance mesh: MeshOrigin { geom_id: 0, slot: 0, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 1, slot: 1, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 2, slot: 2, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 3, slot: 3, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 4, slot: 4, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 5, slot: 5, baked: true, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 2412432479217055457, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 1: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 5856995924472605639, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 2: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 6402661692534233033, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 1 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 3: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 13696518014408431155, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 2 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 4: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 15384334289683032877, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 3 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 5: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 6481752197548623432, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 4 }), placements: 1, shared: false, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/World/Cam"), cameras: ["/World/Cam"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/World/Cam"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/veach_mis_usda-70c995e092ab1d61-11.image b/crates/crust-core/tests/data/import_baselines/veach_mis_usda-70c995e092ab1d61-11.image new file mode 100644 index 000000000..96aff8304 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/veach_mis_usda-70c995e092ab1d61-11.image @@ -0,0 +1 @@ +960x540 16spp clamp-off c795c604ff2181ef diff --git a/crates/crust-core/tests/data/import_baselines/veach_mis_usda-70c995e092ab1d61-12.digest b/crates/crust-core/tests/data/import_baselines/veach_mis_usda-70c995e092ab1d61-12.digest new file mode 100644 index 000000000..6c2cda342 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/veach_mis_usda-70c995e092ab1d61-12.digest @@ -0,0 +1,61 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/World/Cam") +camera: Camera { origin: Vec3A(0.0, 4.0, 12.0), lower_left_corner: Vec3A(-8.494889, -2.4422622, 2.981679), horizontal: Vec3A(16.989779, -0.0, 0.0), vertical: Vec3A(0.0, 9.411561, -1.6595122), u: Vec3A(1.0, -0.0, 0.0), v: Vec3A(0.0, 0.98480767, -0.17364816), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: Some("/Render/settings") +settings: RenderSettings { samples_per_pixel: 128, max_depth: 8, width: 960, height: 540, region: PixelRect { x0: 0, y0: 0, x1: 960, y1: 540 }, min_samples_per_pixel: 32, variance_threshold: 0.0, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: BalanceMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 16.0, aperture: [20.955, 15.2908], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 10.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/veach_mis.usda"], invisible_overrides: Some(0) } +layer: $DIR/veach_mis.usda +lights: 4 +light 0: area name Some("/World/LightBig") lpe None pmf 0.25 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 1: area name Some("/World/LightMedium") lpe None pmf 0.25 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 2: area name Some("/World/LightSmall") lpe None pmf 0.25 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 3: area name Some("/World/LightTiny") lpe None pmf 0.25 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 10 geometries, PrimitiveBreakdown { triangles: 12, spheres: 4, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 12, spheres: 4, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:68d4160149942562 camera=2:68d4160149942562 shadow=2:68d4160149942562 indirect=2:68d4160149942562 +geom 1: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:c752315e4cdb3b45 camera=2:c752315e4cdb3b45 shadow=2:c752315e4cdb3b45 indirect=2:c752315e4cdb3b45 +geom 2: material #1 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:faaee6e5a0219d28 camera=2:faaee6e5a0219d28 shadow=2:faaee6e5a0219d28 indirect=2:faaee6e5a0219d28 +geom 3: material #2 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:55522c246731933e camera=2:55522c246731933e shadow=2:55522c246731933e indirect=2:55522c246731933e +geom 4: material #3 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:6a1c895a634c0162 camera=2:6a1c895a634c0162 shadow=2:6a1c895a634c0162 indirect=2:6a1c895a634c0162 +geom 5: material #4 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:d7e184c050c2f9e4 camera=2:d7e184c050c2f9e4 shadow=2:d7e184c050c2f9e4 indirect=2:d7e184c050c2f9e4 +geom 6: material #5 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:0072c0dd41a28391 camera=1:0072c0dd41a28391 shadow=1:0072c0dd41a28391 indirect=1:0072c0dd41a28391 +geom 7: material #6 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:25d33e066e9377ce camera=1:25d33e066e9377ce shadow=1:25d33e066e9377ce indirect=1:25d33e066e9377ce +geom 8: material #7 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:946393500a4eba02 camera=1:946393500a4eba02 shadow=1:946393500a4eba02 indirect=1:946393500a4eba02 +geom 9: material #8 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:c0b8734402fc2ca3 camera=1:c0b8734402fc2ca3 shadow=1:c0b8734402fc2ca3 indirect=1:c0b8734402fc2ca3 +provenance material /World/Materials/Backdrop: MaterialOrigin { slots: [0, 1], displaced: false } +provenance material /World/Materials/PlateRough: MaterialOrigin { slots: [3], displaced: false } +provenance material /World/Materials/PlateRoughest: MaterialOrigin { slots: [2], displaced: false } +provenance material /World/Materials/PlateSmooth: MaterialOrigin { slots: [4], displaced: false } +provenance material /World/Materials/PlateSmoothest: MaterialOrigin { slots: [5], displaced: false } +provenance light /World/LightBig: LightOrigin { index: 0, geoms: 6..7 } +provenance light /World/LightMedium: LightOrigin { index: 1, geoms: 7..8 } +provenance light /World/LightSmall: LightOrigin { index: 2, geoms: 8..9 } +provenance light /World/LightTiny: LightOrigin { index: 3, geoms: 9..10 } +provenance geometry 0..1: /World/BackWall +provenance geometry 1..2: /World/Floor +provenance geometry 2..3: /World/Plate3 +provenance geometry 3..4: /World/Plate2 +provenance geometry 4..5: /World/Plate1 +provenance geometry 5..6: /World/Plate0 +provenance geometry 6..7: /World/LightBig +provenance geometry 7..8: /World/LightMedium +provenance geometry 8..9: /World/LightSmall +provenance geometry 9..10: /World/LightTiny +provenance mesh: MeshOrigin { geom_id: 0, slot: 0, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 1, slot: 1, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 2, slot: 2, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 3, slot: 3, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 4, slot: 4, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 5, slot: 5, baked: true, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 2412432479217055457, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 1: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 5856995924472605639, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 2: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 6402661692534233033, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 1 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 3: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 13696518014408431155, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 2 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 4: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 15384334289683032877, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 3 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 5: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 6481752197548623432, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 4 }), placements: 1, shared: false, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/World/Cam"), cameras: ["/World/Cam"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/World/Cam"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/veach_mis_usda-70c995e092ab1d61-12.image b/crates/crust-core/tests/data/import_baselines/veach_mis_usda-70c995e092ab1d61-12.image new file mode 100644 index 000000000..96aff8304 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/veach_mis_usda-70c995e092ab1d61-12.image @@ -0,0 +1 @@ +960x540 16spp clamp-off c795c604ff2181ef diff --git a/crates/crust-core/tests/data/import_baselines/veach_mis_usda-70c995e092ab1d61-13.digest b/crates/crust-core/tests/data/import_baselines/veach_mis_usda-70c995e092ab1d61-13.digest new file mode 100644 index 000000000..6c2cda342 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/veach_mis_usda-70c995e092ab1d61-13.digest @@ -0,0 +1,61 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/World/Cam") +camera: Camera { origin: Vec3A(0.0, 4.0, 12.0), lower_left_corner: Vec3A(-8.494889, -2.4422622, 2.981679), horizontal: Vec3A(16.989779, -0.0, 0.0), vertical: Vec3A(0.0, 9.411561, -1.6595122), u: Vec3A(1.0, -0.0, 0.0), v: Vec3A(0.0, 0.98480767, -0.17364816), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: Some("/Render/settings") +settings: RenderSettings { samples_per_pixel: 128, max_depth: 8, width: 960, height: 540, region: PixelRect { x0: 0, y0: 0, x1: 960, y1: 540 }, min_samples_per_pixel: 32, variance_threshold: 0.0, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: BalanceMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 16.0, aperture: [20.955, 15.2908], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 10.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/veach_mis.usda"], invisible_overrides: Some(0) } +layer: $DIR/veach_mis.usda +lights: 4 +light 0: area name Some("/World/LightBig") lpe None pmf 0.25 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 1: area name Some("/World/LightMedium") lpe None pmf 0.25 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 2: area name Some("/World/LightSmall") lpe None pmf 0.25 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 3: area name Some("/World/LightTiny") lpe None pmf 0.25 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 10 geometries, PrimitiveBreakdown { triangles: 12, spheres: 4, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 12, spheres: 4, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:68d4160149942562 camera=2:68d4160149942562 shadow=2:68d4160149942562 indirect=2:68d4160149942562 +geom 1: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:c752315e4cdb3b45 camera=2:c752315e4cdb3b45 shadow=2:c752315e4cdb3b45 indirect=2:c752315e4cdb3b45 +geom 2: material #1 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:faaee6e5a0219d28 camera=2:faaee6e5a0219d28 shadow=2:faaee6e5a0219d28 indirect=2:faaee6e5a0219d28 +geom 3: material #2 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:55522c246731933e camera=2:55522c246731933e shadow=2:55522c246731933e indirect=2:55522c246731933e +geom 4: material #3 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:6a1c895a634c0162 camera=2:6a1c895a634c0162 shadow=2:6a1c895a634c0162 indirect=2:6a1c895a634c0162 +geom 5: material #4 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:d7e184c050c2f9e4 camera=2:d7e184c050c2f9e4 shadow=2:d7e184c050c2f9e4 indirect=2:d7e184c050c2f9e4 +geom 6: material #5 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:0072c0dd41a28391 camera=1:0072c0dd41a28391 shadow=1:0072c0dd41a28391 indirect=1:0072c0dd41a28391 +geom 7: material #6 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:25d33e066e9377ce camera=1:25d33e066e9377ce shadow=1:25d33e066e9377ce indirect=1:25d33e066e9377ce +geom 8: material #7 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:946393500a4eba02 camera=1:946393500a4eba02 shadow=1:946393500a4eba02 indirect=1:946393500a4eba02 +geom 9: material #8 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:c0b8734402fc2ca3 camera=1:c0b8734402fc2ca3 shadow=1:c0b8734402fc2ca3 indirect=1:c0b8734402fc2ca3 +provenance material /World/Materials/Backdrop: MaterialOrigin { slots: [0, 1], displaced: false } +provenance material /World/Materials/PlateRough: MaterialOrigin { slots: [3], displaced: false } +provenance material /World/Materials/PlateRoughest: MaterialOrigin { slots: [2], displaced: false } +provenance material /World/Materials/PlateSmooth: MaterialOrigin { slots: [4], displaced: false } +provenance material /World/Materials/PlateSmoothest: MaterialOrigin { slots: [5], displaced: false } +provenance light /World/LightBig: LightOrigin { index: 0, geoms: 6..7 } +provenance light /World/LightMedium: LightOrigin { index: 1, geoms: 7..8 } +provenance light /World/LightSmall: LightOrigin { index: 2, geoms: 8..9 } +provenance light /World/LightTiny: LightOrigin { index: 3, geoms: 9..10 } +provenance geometry 0..1: /World/BackWall +provenance geometry 1..2: /World/Floor +provenance geometry 2..3: /World/Plate3 +provenance geometry 3..4: /World/Plate2 +provenance geometry 4..5: /World/Plate1 +provenance geometry 5..6: /World/Plate0 +provenance geometry 6..7: /World/LightBig +provenance geometry 7..8: /World/LightMedium +provenance geometry 8..9: /World/LightSmall +provenance geometry 9..10: /World/LightTiny +provenance mesh: MeshOrigin { geom_id: 0, slot: 0, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 1, slot: 1, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 2, slot: 2, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 3, slot: 3, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 4, slot: 4, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 5, slot: 5, baked: true, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 2412432479217055457, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 1: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 5856995924472605639, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 2: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 6402661692534233033, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 1 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 3: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 13696518014408431155, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 2 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 4: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 15384334289683032877, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 3 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 5: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 6481752197548623432, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 4 }), placements: 1, shared: false, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/World/Cam"), cameras: ["/World/Cam"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/World/Cam"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/veach_mis_usda-70c995e092ab1d61-13.image b/crates/crust-core/tests/data/import_baselines/veach_mis_usda-70c995e092ab1d61-13.image new file mode 100644 index 000000000..96aff8304 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/veach_mis_usda-70c995e092ab1d61-13.image @@ -0,0 +1 @@ +960x540 16spp clamp-off c795c604ff2181ef diff --git a/crates/crust-core/tests/data/import_baselines/veach_mis_usda-70c995e092ab1d61-14.digest b/crates/crust-core/tests/data/import_baselines/veach_mis_usda-70c995e092ab1d61-14.digest new file mode 100644 index 000000000..6c2cda342 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/veach_mis_usda-70c995e092ab1d61-14.digest @@ -0,0 +1,61 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/World/Cam") +camera: Camera { origin: Vec3A(0.0, 4.0, 12.0), lower_left_corner: Vec3A(-8.494889, -2.4422622, 2.981679), horizontal: Vec3A(16.989779, -0.0, 0.0), vertical: Vec3A(0.0, 9.411561, -1.6595122), u: Vec3A(1.0, -0.0, 0.0), v: Vec3A(0.0, 0.98480767, -0.17364816), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: Some("/Render/settings") +settings: RenderSettings { samples_per_pixel: 128, max_depth: 8, width: 960, height: 540, region: PixelRect { x0: 0, y0: 0, x1: 960, y1: 540 }, min_samples_per_pixel: 32, variance_threshold: 0.0, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: BalanceMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 16.0, aperture: [20.955, 15.2908], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 10.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/veach_mis.usda"], invisible_overrides: Some(0) } +layer: $DIR/veach_mis.usda +lights: 4 +light 0: area name Some("/World/LightBig") lpe None pmf 0.25 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 1: area name Some("/World/LightMedium") lpe None pmf 0.25 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 2: area name Some("/World/LightSmall") lpe None pmf 0.25 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 3: area name Some("/World/LightTiny") lpe None pmf 0.25 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 10 geometries, PrimitiveBreakdown { triangles: 12, spheres: 4, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 12, spheres: 4, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:68d4160149942562 camera=2:68d4160149942562 shadow=2:68d4160149942562 indirect=2:68d4160149942562 +geom 1: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:c752315e4cdb3b45 camera=2:c752315e4cdb3b45 shadow=2:c752315e4cdb3b45 indirect=2:c752315e4cdb3b45 +geom 2: material #1 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:faaee6e5a0219d28 camera=2:faaee6e5a0219d28 shadow=2:faaee6e5a0219d28 indirect=2:faaee6e5a0219d28 +geom 3: material #2 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:55522c246731933e camera=2:55522c246731933e shadow=2:55522c246731933e indirect=2:55522c246731933e +geom 4: material #3 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:6a1c895a634c0162 camera=2:6a1c895a634c0162 shadow=2:6a1c895a634c0162 indirect=2:6a1c895a634c0162 +geom 5: material #4 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:d7e184c050c2f9e4 camera=2:d7e184c050c2f9e4 shadow=2:d7e184c050c2f9e4 indirect=2:d7e184c050c2f9e4 +geom 6: material #5 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:0072c0dd41a28391 camera=1:0072c0dd41a28391 shadow=1:0072c0dd41a28391 indirect=1:0072c0dd41a28391 +geom 7: material #6 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:25d33e066e9377ce camera=1:25d33e066e9377ce shadow=1:25d33e066e9377ce indirect=1:25d33e066e9377ce +geom 8: material #7 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:946393500a4eba02 camera=1:946393500a4eba02 shadow=1:946393500a4eba02 indirect=1:946393500a4eba02 +geom 9: material #8 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:c0b8734402fc2ca3 camera=1:c0b8734402fc2ca3 shadow=1:c0b8734402fc2ca3 indirect=1:c0b8734402fc2ca3 +provenance material /World/Materials/Backdrop: MaterialOrigin { slots: [0, 1], displaced: false } +provenance material /World/Materials/PlateRough: MaterialOrigin { slots: [3], displaced: false } +provenance material /World/Materials/PlateRoughest: MaterialOrigin { slots: [2], displaced: false } +provenance material /World/Materials/PlateSmooth: MaterialOrigin { slots: [4], displaced: false } +provenance material /World/Materials/PlateSmoothest: MaterialOrigin { slots: [5], displaced: false } +provenance light /World/LightBig: LightOrigin { index: 0, geoms: 6..7 } +provenance light /World/LightMedium: LightOrigin { index: 1, geoms: 7..8 } +provenance light /World/LightSmall: LightOrigin { index: 2, geoms: 8..9 } +provenance light /World/LightTiny: LightOrigin { index: 3, geoms: 9..10 } +provenance geometry 0..1: /World/BackWall +provenance geometry 1..2: /World/Floor +provenance geometry 2..3: /World/Plate3 +provenance geometry 3..4: /World/Plate2 +provenance geometry 4..5: /World/Plate1 +provenance geometry 5..6: /World/Plate0 +provenance geometry 6..7: /World/LightBig +provenance geometry 7..8: /World/LightMedium +provenance geometry 8..9: /World/LightSmall +provenance geometry 9..10: /World/LightTiny +provenance mesh: MeshOrigin { geom_id: 0, slot: 0, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 1, slot: 1, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 2, slot: 2, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 3, slot: 3, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 4, slot: 4, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 5, slot: 5, baked: true, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 2412432479217055457, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 1: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 5856995924472605639, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 2: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 6402661692534233033, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 1 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 3: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 13696518014408431155, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 2 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 4: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 15384334289683032877, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 3 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 5: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 6481752197548623432, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 4 }), placements: 1, shared: false, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/World/Cam"), cameras: ["/World/Cam"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/World/Cam"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/veach_mis_usda-70c995e092ab1d61-14.image b/crates/crust-core/tests/data/import_baselines/veach_mis_usda-70c995e092ab1d61-14.image new file mode 100644 index 000000000..96aff8304 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/veach_mis_usda-70c995e092ab1d61-14.image @@ -0,0 +1 @@ +960x540 16spp clamp-off c795c604ff2181ef diff --git a/crates/crust-core/tests/data/import_baselines/veach_mis_usda-70c995e092ab1d61-15.digest b/crates/crust-core/tests/data/import_baselines/veach_mis_usda-70c995e092ab1d61-15.digest new file mode 100644 index 000000000..6c2cda342 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/veach_mis_usda-70c995e092ab1d61-15.digest @@ -0,0 +1,61 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/World/Cam") +camera: Camera { origin: Vec3A(0.0, 4.0, 12.0), lower_left_corner: Vec3A(-8.494889, -2.4422622, 2.981679), horizontal: Vec3A(16.989779, -0.0, 0.0), vertical: Vec3A(0.0, 9.411561, -1.6595122), u: Vec3A(1.0, -0.0, 0.0), v: Vec3A(0.0, 0.98480767, -0.17364816), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: Some("/Render/settings") +settings: RenderSettings { samples_per_pixel: 128, max_depth: 8, width: 960, height: 540, region: PixelRect { x0: 0, y0: 0, x1: 960, y1: 540 }, min_samples_per_pixel: 32, variance_threshold: 0.0, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: BalanceMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 16.0, aperture: [20.955, 15.2908], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 10.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/veach_mis.usda"], invisible_overrides: Some(0) } +layer: $DIR/veach_mis.usda +lights: 4 +light 0: area name Some("/World/LightBig") lpe None pmf 0.25 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 1: area name Some("/World/LightMedium") lpe None pmf 0.25 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 2: area name Some("/World/LightSmall") lpe None pmf 0.25 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 3: area name Some("/World/LightTiny") lpe None pmf 0.25 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 10 geometries, PrimitiveBreakdown { triangles: 12, spheres: 4, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 12, spheres: 4, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:68d4160149942562 camera=2:68d4160149942562 shadow=2:68d4160149942562 indirect=2:68d4160149942562 +geom 1: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:c752315e4cdb3b45 camera=2:c752315e4cdb3b45 shadow=2:c752315e4cdb3b45 indirect=2:c752315e4cdb3b45 +geom 2: material #1 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:faaee6e5a0219d28 camera=2:faaee6e5a0219d28 shadow=2:faaee6e5a0219d28 indirect=2:faaee6e5a0219d28 +geom 3: material #2 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:55522c246731933e camera=2:55522c246731933e shadow=2:55522c246731933e indirect=2:55522c246731933e +geom 4: material #3 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:6a1c895a634c0162 camera=2:6a1c895a634c0162 shadow=2:6a1c895a634c0162 indirect=2:6a1c895a634c0162 +geom 5: material #4 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:d7e184c050c2f9e4 camera=2:d7e184c050c2f9e4 shadow=2:d7e184c050c2f9e4 indirect=2:d7e184c050c2f9e4 +geom 6: material #5 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:0072c0dd41a28391 camera=1:0072c0dd41a28391 shadow=1:0072c0dd41a28391 indirect=1:0072c0dd41a28391 +geom 7: material #6 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:25d33e066e9377ce camera=1:25d33e066e9377ce shadow=1:25d33e066e9377ce indirect=1:25d33e066e9377ce +geom 8: material #7 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:946393500a4eba02 camera=1:946393500a4eba02 shadow=1:946393500a4eba02 indirect=1:946393500a4eba02 +geom 9: material #8 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:c0b8734402fc2ca3 camera=1:c0b8734402fc2ca3 shadow=1:c0b8734402fc2ca3 indirect=1:c0b8734402fc2ca3 +provenance material /World/Materials/Backdrop: MaterialOrigin { slots: [0, 1], displaced: false } +provenance material /World/Materials/PlateRough: MaterialOrigin { slots: [3], displaced: false } +provenance material /World/Materials/PlateRoughest: MaterialOrigin { slots: [2], displaced: false } +provenance material /World/Materials/PlateSmooth: MaterialOrigin { slots: [4], displaced: false } +provenance material /World/Materials/PlateSmoothest: MaterialOrigin { slots: [5], displaced: false } +provenance light /World/LightBig: LightOrigin { index: 0, geoms: 6..7 } +provenance light /World/LightMedium: LightOrigin { index: 1, geoms: 7..8 } +provenance light /World/LightSmall: LightOrigin { index: 2, geoms: 8..9 } +provenance light /World/LightTiny: LightOrigin { index: 3, geoms: 9..10 } +provenance geometry 0..1: /World/BackWall +provenance geometry 1..2: /World/Floor +provenance geometry 2..3: /World/Plate3 +provenance geometry 3..4: /World/Plate2 +provenance geometry 4..5: /World/Plate1 +provenance geometry 5..6: /World/Plate0 +provenance geometry 6..7: /World/LightBig +provenance geometry 7..8: /World/LightMedium +provenance geometry 8..9: /World/LightSmall +provenance geometry 9..10: /World/LightTiny +provenance mesh: MeshOrigin { geom_id: 0, slot: 0, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 1, slot: 1, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 2, slot: 2, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 3, slot: 3, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 4, slot: 4, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 5, slot: 5, baked: true, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 2412432479217055457, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 1: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 5856995924472605639, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 2: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 6402661692534233033, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 1 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 3: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 13696518014408431155, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 2 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 4: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 15384334289683032877, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 3 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 5: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 6481752197548623432, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 4 }), placements: 1, shared: false, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/World/Cam"), cameras: ["/World/Cam"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/World/Cam"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/veach_mis_usda-70c995e092ab1d61-15.image b/crates/crust-core/tests/data/import_baselines/veach_mis_usda-70c995e092ab1d61-15.image new file mode 100644 index 000000000..96aff8304 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/veach_mis_usda-70c995e092ab1d61-15.image @@ -0,0 +1 @@ +960x540 16spp clamp-off c795c604ff2181ef diff --git a/crates/crust-core/tests/data/import_baselines/veach_mis_usda-70c995e092ab1d61-16.digest b/crates/crust-core/tests/data/import_baselines/veach_mis_usda-70c995e092ab1d61-16.digest new file mode 100644 index 000000000..6c2cda342 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/veach_mis_usda-70c995e092ab1d61-16.digest @@ -0,0 +1,61 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/World/Cam") +camera: Camera { origin: Vec3A(0.0, 4.0, 12.0), lower_left_corner: Vec3A(-8.494889, -2.4422622, 2.981679), horizontal: Vec3A(16.989779, -0.0, 0.0), vertical: Vec3A(0.0, 9.411561, -1.6595122), u: Vec3A(1.0, -0.0, 0.0), v: Vec3A(0.0, 0.98480767, -0.17364816), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: Some("/Render/settings") +settings: RenderSettings { samples_per_pixel: 128, max_depth: 8, width: 960, height: 540, region: PixelRect { x0: 0, y0: 0, x1: 960, y1: 540 }, min_samples_per_pixel: 32, variance_threshold: 0.0, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: BalanceMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 16.0, aperture: [20.955, 15.2908], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 10.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/veach_mis.usda"], invisible_overrides: Some(0) } +layer: $DIR/veach_mis.usda +lights: 4 +light 0: area name Some("/World/LightBig") lpe None pmf 0.25 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 1: area name Some("/World/LightMedium") lpe None pmf 0.25 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 2: area name Some("/World/LightSmall") lpe None pmf 0.25 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 3: area name Some("/World/LightTiny") lpe None pmf 0.25 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 10 geometries, PrimitiveBreakdown { triangles: 12, spheres: 4, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 12, spheres: 4, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:68d4160149942562 camera=2:68d4160149942562 shadow=2:68d4160149942562 indirect=2:68d4160149942562 +geom 1: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:c752315e4cdb3b45 camera=2:c752315e4cdb3b45 shadow=2:c752315e4cdb3b45 indirect=2:c752315e4cdb3b45 +geom 2: material #1 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:faaee6e5a0219d28 camera=2:faaee6e5a0219d28 shadow=2:faaee6e5a0219d28 indirect=2:faaee6e5a0219d28 +geom 3: material #2 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:55522c246731933e camera=2:55522c246731933e shadow=2:55522c246731933e indirect=2:55522c246731933e +geom 4: material #3 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:6a1c895a634c0162 camera=2:6a1c895a634c0162 shadow=2:6a1c895a634c0162 indirect=2:6a1c895a634c0162 +geom 5: material #4 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:d7e184c050c2f9e4 camera=2:d7e184c050c2f9e4 shadow=2:d7e184c050c2f9e4 indirect=2:d7e184c050c2f9e4 +geom 6: material #5 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:0072c0dd41a28391 camera=1:0072c0dd41a28391 shadow=1:0072c0dd41a28391 indirect=1:0072c0dd41a28391 +geom 7: material #6 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:25d33e066e9377ce camera=1:25d33e066e9377ce shadow=1:25d33e066e9377ce indirect=1:25d33e066e9377ce +geom 8: material #7 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:946393500a4eba02 camera=1:946393500a4eba02 shadow=1:946393500a4eba02 indirect=1:946393500a4eba02 +geom 9: material #8 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:c0b8734402fc2ca3 camera=1:c0b8734402fc2ca3 shadow=1:c0b8734402fc2ca3 indirect=1:c0b8734402fc2ca3 +provenance material /World/Materials/Backdrop: MaterialOrigin { slots: [0, 1], displaced: false } +provenance material /World/Materials/PlateRough: MaterialOrigin { slots: [3], displaced: false } +provenance material /World/Materials/PlateRoughest: MaterialOrigin { slots: [2], displaced: false } +provenance material /World/Materials/PlateSmooth: MaterialOrigin { slots: [4], displaced: false } +provenance material /World/Materials/PlateSmoothest: MaterialOrigin { slots: [5], displaced: false } +provenance light /World/LightBig: LightOrigin { index: 0, geoms: 6..7 } +provenance light /World/LightMedium: LightOrigin { index: 1, geoms: 7..8 } +provenance light /World/LightSmall: LightOrigin { index: 2, geoms: 8..9 } +provenance light /World/LightTiny: LightOrigin { index: 3, geoms: 9..10 } +provenance geometry 0..1: /World/BackWall +provenance geometry 1..2: /World/Floor +provenance geometry 2..3: /World/Plate3 +provenance geometry 3..4: /World/Plate2 +provenance geometry 4..5: /World/Plate1 +provenance geometry 5..6: /World/Plate0 +provenance geometry 6..7: /World/LightBig +provenance geometry 7..8: /World/LightMedium +provenance geometry 8..9: /World/LightSmall +provenance geometry 9..10: /World/LightTiny +provenance mesh: MeshOrigin { geom_id: 0, slot: 0, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 1, slot: 1, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 2, slot: 2, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 3, slot: 3, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 4, slot: 4, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 5, slot: 5, baked: true, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 2412432479217055457, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 1: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 5856995924472605639, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 2: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 6402661692534233033, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 1 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 3: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 13696518014408431155, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 2 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 4: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 15384334289683032877, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 3 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 5: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 6481752197548623432, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 4 }), placements: 1, shared: false, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/World/Cam"), cameras: ["/World/Cam"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/World/Cam"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/veach_mis_usda-70c995e092ab1d61-16.image b/crates/crust-core/tests/data/import_baselines/veach_mis_usda-70c995e092ab1d61-16.image new file mode 100644 index 000000000..96aff8304 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/veach_mis_usda-70c995e092ab1d61-16.image @@ -0,0 +1 @@ +960x540 16spp clamp-off c795c604ff2181ef diff --git a/crates/crust-core/tests/data/import_baselines/veach_mis_usda-70c995e092ab1d61-17.digest b/crates/crust-core/tests/data/import_baselines/veach_mis_usda-70c995e092ab1d61-17.digest new file mode 100644 index 000000000..6c2cda342 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/veach_mis_usda-70c995e092ab1d61-17.digest @@ -0,0 +1,61 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/World/Cam") +camera: Camera { origin: Vec3A(0.0, 4.0, 12.0), lower_left_corner: Vec3A(-8.494889, -2.4422622, 2.981679), horizontal: Vec3A(16.989779, -0.0, 0.0), vertical: Vec3A(0.0, 9.411561, -1.6595122), u: Vec3A(1.0, -0.0, 0.0), v: Vec3A(0.0, 0.98480767, -0.17364816), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: Some("/Render/settings") +settings: RenderSettings { samples_per_pixel: 128, max_depth: 8, width: 960, height: 540, region: PixelRect { x0: 0, y0: 0, x1: 960, y1: 540 }, min_samples_per_pixel: 32, variance_threshold: 0.0, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: BalanceMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 16.0, aperture: [20.955, 15.2908], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 10.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/veach_mis.usda"], invisible_overrides: Some(0) } +layer: $DIR/veach_mis.usda +lights: 4 +light 0: area name Some("/World/LightBig") lpe None pmf 0.25 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 1: area name Some("/World/LightMedium") lpe None pmf 0.25 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 2: area name Some("/World/LightSmall") lpe None pmf 0.25 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 3: area name Some("/World/LightTiny") lpe None pmf 0.25 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 10 geometries, PrimitiveBreakdown { triangles: 12, spheres: 4, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 12, spheres: 4, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:68d4160149942562 camera=2:68d4160149942562 shadow=2:68d4160149942562 indirect=2:68d4160149942562 +geom 1: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:c752315e4cdb3b45 camera=2:c752315e4cdb3b45 shadow=2:c752315e4cdb3b45 indirect=2:c752315e4cdb3b45 +geom 2: material #1 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:faaee6e5a0219d28 camera=2:faaee6e5a0219d28 shadow=2:faaee6e5a0219d28 indirect=2:faaee6e5a0219d28 +geom 3: material #2 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:55522c246731933e camera=2:55522c246731933e shadow=2:55522c246731933e indirect=2:55522c246731933e +geom 4: material #3 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:6a1c895a634c0162 camera=2:6a1c895a634c0162 shadow=2:6a1c895a634c0162 indirect=2:6a1c895a634c0162 +geom 5: material #4 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:d7e184c050c2f9e4 camera=2:d7e184c050c2f9e4 shadow=2:d7e184c050c2f9e4 indirect=2:d7e184c050c2f9e4 +geom 6: material #5 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:0072c0dd41a28391 camera=1:0072c0dd41a28391 shadow=1:0072c0dd41a28391 indirect=1:0072c0dd41a28391 +geom 7: material #6 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:25d33e066e9377ce camera=1:25d33e066e9377ce shadow=1:25d33e066e9377ce indirect=1:25d33e066e9377ce +geom 8: material #7 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:946393500a4eba02 camera=1:946393500a4eba02 shadow=1:946393500a4eba02 indirect=1:946393500a4eba02 +geom 9: material #8 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:c0b8734402fc2ca3 camera=1:c0b8734402fc2ca3 shadow=1:c0b8734402fc2ca3 indirect=1:c0b8734402fc2ca3 +provenance material /World/Materials/Backdrop: MaterialOrigin { slots: [0, 1], displaced: false } +provenance material /World/Materials/PlateRough: MaterialOrigin { slots: [3], displaced: false } +provenance material /World/Materials/PlateRoughest: MaterialOrigin { slots: [2], displaced: false } +provenance material /World/Materials/PlateSmooth: MaterialOrigin { slots: [4], displaced: false } +provenance material /World/Materials/PlateSmoothest: MaterialOrigin { slots: [5], displaced: false } +provenance light /World/LightBig: LightOrigin { index: 0, geoms: 6..7 } +provenance light /World/LightMedium: LightOrigin { index: 1, geoms: 7..8 } +provenance light /World/LightSmall: LightOrigin { index: 2, geoms: 8..9 } +provenance light /World/LightTiny: LightOrigin { index: 3, geoms: 9..10 } +provenance geometry 0..1: /World/BackWall +provenance geometry 1..2: /World/Floor +provenance geometry 2..3: /World/Plate3 +provenance geometry 3..4: /World/Plate2 +provenance geometry 4..5: /World/Plate1 +provenance geometry 5..6: /World/Plate0 +provenance geometry 6..7: /World/LightBig +provenance geometry 7..8: /World/LightMedium +provenance geometry 8..9: /World/LightSmall +provenance geometry 9..10: /World/LightTiny +provenance mesh: MeshOrigin { geom_id: 0, slot: 0, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 1, slot: 1, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 2, slot: 2, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 3, slot: 3, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 4, slot: 4, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 5, slot: 5, baked: true, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 2412432479217055457, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 1: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 5856995924472605639, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 2: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 6402661692534233033, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 1 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 3: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 13696518014408431155, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 2 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 4: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 15384334289683032877, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 3 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 5: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 6481752197548623432, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 4 }), placements: 1, shared: false, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/World/Cam"), cameras: ["/World/Cam"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/World/Cam"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/veach_mis_usda-70c995e092ab1d61-17.image b/crates/crust-core/tests/data/import_baselines/veach_mis_usda-70c995e092ab1d61-17.image new file mode 100644 index 000000000..96aff8304 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/veach_mis_usda-70c995e092ab1d61-17.image @@ -0,0 +1 @@ +960x540 16spp clamp-off c795c604ff2181ef diff --git a/crates/crust-core/tests/data/import_baselines/veach_mis_usda-70c995e092ab1d61-18.digest b/crates/crust-core/tests/data/import_baselines/veach_mis_usda-70c995e092ab1d61-18.digest new file mode 100644 index 000000000..6c2cda342 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/veach_mis_usda-70c995e092ab1d61-18.digest @@ -0,0 +1,61 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/World/Cam") +camera: Camera { origin: Vec3A(0.0, 4.0, 12.0), lower_left_corner: Vec3A(-8.494889, -2.4422622, 2.981679), horizontal: Vec3A(16.989779, -0.0, 0.0), vertical: Vec3A(0.0, 9.411561, -1.6595122), u: Vec3A(1.0, -0.0, 0.0), v: Vec3A(0.0, 0.98480767, -0.17364816), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: Some("/Render/settings") +settings: RenderSettings { samples_per_pixel: 128, max_depth: 8, width: 960, height: 540, region: PixelRect { x0: 0, y0: 0, x1: 960, y1: 540 }, min_samples_per_pixel: 32, variance_threshold: 0.0, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: BalanceMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 16.0, aperture: [20.955, 15.2908], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 10.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/veach_mis.usda"], invisible_overrides: Some(0) } +layer: $DIR/veach_mis.usda +lights: 4 +light 0: area name Some("/World/LightBig") lpe None pmf 0.25 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 1: area name Some("/World/LightMedium") lpe None pmf 0.25 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 2: area name Some("/World/LightSmall") lpe None pmf 0.25 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 3: area name Some("/World/LightTiny") lpe None pmf 0.25 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 10 geometries, PrimitiveBreakdown { triangles: 12, spheres: 4, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 12, spheres: 4, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:68d4160149942562 camera=2:68d4160149942562 shadow=2:68d4160149942562 indirect=2:68d4160149942562 +geom 1: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:c752315e4cdb3b45 camera=2:c752315e4cdb3b45 shadow=2:c752315e4cdb3b45 indirect=2:c752315e4cdb3b45 +geom 2: material #1 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:faaee6e5a0219d28 camera=2:faaee6e5a0219d28 shadow=2:faaee6e5a0219d28 indirect=2:faaee6e5a0219d28 +geom 3: material #2 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:55522c246731933e camera=2:55522c246731933e shadow=2:55522c246731933e indirect=2:55522c246731933e +geom 4: material #3 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:6a1c895a634c0162 camera=2:6a1c895a634c0162 shadow=2:6a1c895a634c0162 indirect=2:6a1c895a634c0162 +geom 5: material #4 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:d7e184c050c2f9e4 camera=2:d7e184c050c2f9e4 shadow=2:d7e184c050c2f9e4 indirect=2:d7e184c050c2f9e4 +geom 6: material #5 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:0072c0dd41a28391 camera=1:0072c0dd41a28391 shadow=1:0072c0dd41a28391 indirect=1:0072c0dd41a28391 +geom 7: material #6 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:25d33e066e9377ce camera=1:25d33e066e9377ce shadow=1:25d33e066e9377ce indirect=1:25d33e066e9377ce +geom 8: material #7 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:946393500a4eba02 camera=1:946393500a4eba02 shadow=1:946393500a4eba02 indirect=1:946393500a4eba02 +geom 9: material #8 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:c0b8734402fc2ca3 camera=1:c0b8734402fc2ca3 shadow=1:c0b8734402fc2ca3 indirect=1:c0b8734402fc2ca3 +provenance material /World/Materials/Backdrop: MaterialOrigin { slots: [0, 1], displaced: false } +provenance material /World/Materials/PlateRough: MaterialOrigin { slots: [3], displaced: false } +provenance material /World/Materials/PlateRoughest: MaterialOrigin { slots: [2], displaced: false } +provenance material /World/Materials/PlateSmooth: MaterialOrigin { slots: [4], displaced: false } +provenance material /World/Materials/PlateSmoothest: MaterialOrigin { slots: [5], displaced: false } +provenance light /World/LightBig: LightOrigin { index: 0, geoms: 6..7 } +provenance light /World/LightMedium: LightOrigin { index: 1, geoms: 7..8 } +provenance light /World/LightSmall: LightOrigin { index: 2, geoms: 8..9 } +provenance light /World/LightTiny: LightOrigin { index: 3, geoms: 9..10 } +provenance geometry 0..1: /World/BackWall +provenance geometry 1..2: /World/Floor +provenance geometry 2..3: /World/Plate3 +provenance geometry 3..4: /World/Plate2 +provenance geometry 4..5: /World/Plate1 +provenance geometry 5..6: /World/Plate0 +provenance geometry 6..7: /World/LightBig +provenance geometry 7..8: /World/LightMedium +provenance geometry 8..9: /World/LightSmall +provenance geometry 9..10: /World/LightTiny +provenance mesh: MeshOrigin { geom_id: 0, slot: 0, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 1, slot: 1, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 2, slot: 2, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 3, slot: 3, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 4, slot: 4, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 5, slot: 5, baked: true, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 2412432479217055457, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 1: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 5856995924472605639, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 2: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 6402661692534233033, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 1 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 3: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 13696518014408431155, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 2 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 4: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 15384334289683032877, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 3 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 5: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 6481752197548623432, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 4 }), placements: 1, shared: false, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/World/Cam"), cameras: ["/World/Cam"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/World/Cam"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/veach_mis_usda-70c995e092ab1d61-18.image b/crates/crust-core/tests/data/import_baselines/veach_mis_usda-70c995e092ab1d61-18.image new file mode 100644 index 000000000..96aff8304 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/veach_mis_usda-70c995e092ab1d61-18.image @@ -0,0 +1 @@ +960x540 16spp clamp-off c795c604ff2181ef diff --git a/crates/crust-core/tests/data/import_baselines/veach_mis_usda-70c995e092ab1d61-19.digest b/crates/crust-core/tests/data/import_baselines/veach_mis_usda-70c995e092ab1d61-19.digest new file mode 100644 index 000000000..6c2cda342 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/veach_mis_usda-70c995e092ab1d61-19.digest @@ -0,0 +1,61 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/World/Cam") +camera: Camera { origin: Vec3A(0.0, 4.0, 12.0), lower_left_corner: Vec3A(-8.494889, -2.4422622, 2.981679), horizontal: Vec3A(16.989779, -0.0, 0.0), vertical: Vec3A(0.0, 9.411561, -1.6595122), u: Vec3A(1.0, -0.0, 0.0), v: Vec3A(0.0, 0.98480767, -0.17364816), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: Some("/Render/settings") +settings: RenderSettings { samples_per_pixel: 128, max_depth: 8, width: 960, height: 540, region: PixelRect { x0: 0, y0: 0, x1: 960, y1: 540 }, min_samples_per_pixel: 32, variance_threshold: 0.0, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: BalanceMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 16.0, aperture: [20.955, 15.2908], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 10.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/veach_mis.usda"], invisible_overrides: Some(0) } +layer: $DIR/veach_mis.usda +lights: 4 +light 0: area name Some("/World/LightBig") lpe None pmf 0.25 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 1: area name Some("/World/LightMedium") lpe None pmf 0.25 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 2: area name Some("/World/LightSmall") lpe None pmf 0.25 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 3: area name Some("/World/LightTiny") lpe None pmf 0.25 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 10 geometries, PrimitiveBreakdown { triangles: 12, spheres: 4, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 12, spheres: 4, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:68d4160149942562 camera=2:68d4160149942562 shadow=2:68d4160149942562 indirect=2:68d4160149942562 +geom 1: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:c752315e4cdb3b45 camera=2:c752315e4cdb3b45 shadow=2:c752315e4cdb3b45 indirect=2:c752315e4cdb3b45 +geom 2: material #1 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:faaee6e5a0219d28 camera=2:faaee6e5a0219d28 shadow=2:faaee6e5a0219d28 indirect=2:faaee6e5a0219d28 +geom 3: material #2 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:55522c246731933e camera=2:55522c246731933e shadow=2:55522c246731933e indirect=2:55522c246731933e +geom 4: material #3 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:6a1c895a634c0162 camera=2:6a1c895a634c0162 shadow=2:6a1c895a634c0162 indirect=2:6a1c895a634c0162 +geom 5: material #4 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:d7e184c050c2f9e4 camera=2:d7e184c050c2f9e4 shadow=2:d7e184c050c2f9e4 indirect=2:d7e184c050c2f9e4 +geom 6: material #5 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:0072c0dd41a28391 camera=1:0072c0dd41a28391 shadow=1:0072c0dd41a28391 indirect=1:0072c0dd41a28391 +geom 7: material #6 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:25d33e066e9377ce camera=1:25d33e066e9377ce shadow=1:25d33e066e9377ce indirect=1:25d33e066e9377ce +geom 8: material #7 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:946393500a4eba02 camera=1:946393500a4eba02 shadow=1:946393500a4eba02 indirect=1:946393500a4eba02 +geom 9: material #8 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:c0b8734402fc2ca3 camera=1:c0b8734402fc2ca3 shadow=1:c0b8734402fc2ca3 indirect=1:c0b8734402fc2ca3 +provenance material /World/Materials/Backdrop: MaterialOrigin { slots: [0, 1], displaced: false } +provenance material /World/Materials/PlateRough: MaterialOrigin { slots: [3], displaced: false } +provenance material /World/Materials/PlateRoughest: MaterialOrigin { slots: [2], displaced: false } +provenance material /World/Materials/PlateSmooth: MaterialOrigin { slots: [4], displaced: false } +provenance material /World/Materials/PlateSmoothest: MaterialOrigin { slots: [5], displaced: false } +provenance light /World/LightBig: LightOrigin { index: 0, geoms: 6..7 } +provenance light /World/LightMedium: LightOrigin { index: 1, geoms: 7..8 } +provenance light /World/LightSmall: LightOrigin { index: 2, geoms: 8..9 } +provenance light /World/LightTiny: LightOrigin { index: 3, geoms: 9..10 } +provenance geometry 0..1: /World/BackWall +provenance geometry 1..2: /World/Floor +provenance geometry 2..3: /World/Plate3 +provenance geometry 3..4: /World/Plate2 +provenance geometry 4..5: /World/Plate1 +provenance geometry 5..6: /World/Plate0 +provenance geometry 6..7: /World/LightBig +provenance geometry 7..8: /World/LightMedium +provenance geometry 8..9: /World/LightSmall +provenance geometry 9..10: /World/LightTiny +provenance mesh: MeshOrigin { geom_id: 0, slot: 0, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 1, slot: 1, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 2, slot: 2, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 3, slot: 3, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 4, slot: 4, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 5, slot: 5, baked: true, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 2412432479217055457, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 1: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 5856995924472605639, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 2: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 6402661692534233033, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 1 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 3: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 13696518014408431155, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 2 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 4: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 15384334289683032877, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 3 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 5: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 6481752197548623432, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 4 }), placements: 1, shared: false, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/World/Cam"), cameras: ["/World/Cam"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/World/Cam"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/veach_mis_usda-70c995e092ab1d61-19.image b/crates/crust-core/tests/data/import_baselines/veach_mis_usda-70c995e092ab1d61-19.image new file mode 100644 index 000000000..96aff8304 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/veach_mis_usda-70c995e092ab1d61-19.image @@ -0,0 +1 @@ +960x540 16spp clamp-off c795c604ff2181ef diff --git a/crates/crust-core/tests/data/import_baselines/veach_mis_usda-70c995e092ab1d61-2.digest b/crates/crust-core/tests/data/import_baselines/veach_mis_usda-70c995e092ab1d61-2.digest new file mode 100644 index 000000000..6c2cda342 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/veach_mis_usda-70c995e092ab1d61-2.digest @@ -0,0 +1,61 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/World/Cam") +camera: Camera { origin: Vec3A(0.0, 4.0, 12.0), lower_left_corner: Vec3A(-8.494889, -2.4422622, 2.981679), horizontal: Vec3A(16.989779, -0.0, 0.0), vertical: Vec3A(0.0, 9.411561, -1.6595122), u: Vec3A(1.0, -0.0, 0.0), v: Vec3A(0.0, 0.98480767, -0.17364816), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: Some("/Render/settings") +settings: RenderSettings { samples_per_pixel: 128, max_depth: 8, width: 960, height: 540, region: PixelRect { x0: 0, y0: 0, x1: 960, y1: 540 }, min_samples_per_pixel: 32, variance_threshold: 0.0, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: BalanceMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 16.0, aperture: [20.955, 15.2908], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 10.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/veach_mis.usda"], invisible_overrides: Some(0) } +layer: $DIR/veach_mis.usda +lights: 4 +light 0: area name Some("/World/LightBig") lpe None pmf 0.25 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 1: area name Some("/World/LightMedium") lpe None pmf 0.25 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 2: area name Some("/World/LightSmall") lpe None pmf 0.25 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 3: area name Some("/World/LightTiny") lpe None pmf 0.25 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 10 geometries, PrimitiveBreakdown { triangles: 12, spheres: 4, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 12, spheres: 4, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:68d4160149942562 camera=2:68d4160149942562 shadow=2:68d4160149942562 indirect=2:68d4160149942562 +geom 1: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:c752315e4cdb3b45 camera=2:c752315e4cdb3b45 shadow=2:c752315e4cdb3b45 indirect=2:c752315e4cdb3b45 +geom 2: material #1 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:faaee6e5a0219d28 camera=2:faaee6e5a0219d28 shadow=2:faaee6e5a0219d28 indirect=2:faaee6e5a0219d28 +geom 3: material #2 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:55522c246731933e camera=2:55522c246731933e shadow=2:55522c246731933e indirect=2:55522c246731933e +geom 4: material #3 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:6a1c895a634c0162 camera=2:6a1c895a634c0162 shadow=2:6a1c895a634c0162 indirect=2:6a1c895a634c0162 +geom 5: material #4 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:d7e184c050c2f9e4 camera=2:d7e184c050c2f9e4 shadow=2:d7e184c050c2f9e4 indirect=2:d7e184c050c2f9e4 +geom 6: material #5 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:0072c0dd41a28391 camera=1:0072c0dd41a28391 shadow=1:0072c0dd41a28391 indirect=1:0072c0dd41a28391 +geom 7: material #6 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:25d33e066e9377ce camera=1:25d33e066e9377ce shadow=1:25d33e066e9377ce indirect=1:25d33e066e9377ce +geom 8: material #7 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:946393500a4eba02 camera=1:946393500a4eba02 shadow=1:946393500a4eba02 indirect=1:946393500a4eba02 +geom 9: material #8 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:c0b8734402fc2ca3 camera=1:c0b8734402fc2ca3 shadow=1:c0b8734402fc2ca3 indirect=1:c0b8734402fc2ca3 +provenance material /World/Materials/Backdrop: MaterialOrigin { slots: [0, 1], displaced: false } +provenance material /World/Materials/PlateRough: MaterialOrigin { slots: [3], displaced: false } +provenance material /World/Materials/PlateRoughest: MaterialOrigin { slots: [2], displaced: false } +provenance material /World/Materials/PlateSmooth: MaterialOrigin { slots: [4], displaced: false } +provenance material /World/Materials/PlateSmoothest: MaterialOrigin { slots: [5], displaced: false } +provenance light /World/LightBig: LightOrigin { index: 0, geoms: 6..7 } +provenance light /World/LightMedium: LightOrigin { index: 1, geoms: 7..8 } +provenance light /World/LightSmall: LightOrigin { index: 2, geoms: 8..9 } +provenance light /World/LightTiny: LightOrigin { index: 3, geoms: 9..10 } +provenance geometry 0..1: /World/BackWall +provenance geometry 1..2: /World/Floor +provenance geometry 2..3: /World/Plate3 +provenance geometry 3..4: /World/Plate2 +provenance geometry 4..5: /World/Plate1 +provenance geometry 5..6: /World/Plate0 +provenance geometry 6..7: /World/LightBig +provenance geometry 7..8: /World/LightMedium +provenance geometry 8..9: /World/LightSmall +provenance geometry 9..10: /World/LightTiny +provenance mesh: MeshOrigin { geom_id: 0, slot: 0, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 1, slot: 1, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 2, slot: 2, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 3, slot: 3, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 4, slot: 4, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 5, slot: 5, baked: true, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 2412432479217055457, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 1: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 5856995924472605639, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 2: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 6402661692534233033, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 1 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 3: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 13696518014408431155, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 2 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 4: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 15384334289683032877, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 3 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 5: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 6481752197548623432, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 4 }), placements: 1, shared: false, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/World/Cam"), cameras: ["/World/Cam"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/World/Cam"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/veach_mis_usda-70c995e092ab1d61-2.image b/crates/crust-core/tests/data/import_baselines/veach_mis_usda-70c995e092ab1d61-2.image new file mode 100644 index 000000000..96aff8304 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/veach_mis_usda-70c995e092ab1d61-2.image @@ -0,0 +1 @@ +960x540 16spp clamp-off c795c604ff2181ef diff --git a/crates/crust-core/tests/data/import_baselines/veach_mis_usda-70c995e092ab1d61-20.digest b/crates/crust-core/tests/data/import_baselines/veach_mis_usda-70c995e092ab1d61-20.digest new file mode 100644 index 000000000..6c2cda342 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/veach_mis_usda-70c995e092ab1d61-20.digest @@ -0,0 +1,61 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/World/Cam") +camera: Camera { origin: Vec3A(0.0, 4.0, 12.0), lower_left_corner: Vec3A(-8.494889, -2.4422622, 2.981679), horizontal: Vec3A(16.989779, -0.0, 0.0), vertical: Vec3A(0.0, 9.411561, -1.6595122), u: Vec3A(1.0, -0.0, 0.0), v: Vec3A(0.0, 0.98480767, -0.17364816), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: Some("/Render/settings") +settings: RenderSettings { samples_per_pixel: 128, max_depth: 8, width: 960, height: 540, region: PixelRect { x0: 0, y0: 0, x1: 960, y1: 540 }, min_samples_per_pixel: 32, variance_threshold: 0.0, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: BalanceMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 16.0, aperture: [20.955, 15.2908], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 10.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/veach_mis.usda"], invisible_overrides: Some(0) } +layer: $DIR/veach_mis.usda +lights: 4 +light 0: area name Some("/World/LightBig") lpe None pmf 0.25 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 1: area name Some("/World/LightMedium") lpe None pmf 0.25 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 2: area name Some("/World/LightSmall") lpe None pmf 0.25 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 3: area name Some("/World/LightTiny") lpe None pmf 0.25 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 10 geometries, PrimitiveBreakdown { triangles: 12, spheres: 4, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 12, spheres: 4, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:68d4160149942562 camera=2:68d4160149942562 shadow=2:68d4160149942562 indirect=2:68d4160149942562 +geom 1: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:c752315e4cdb3b45 camera=2:c752315e4cdb3b45 shadow=2:c752315e4cdb3b45 indirect=2:c752315e4cdb3b45 +geom 2: material #1 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:faaee6e5a0219d28 camera=2:faaee6e5a0219d28 shadow=2:faaee6e5a0219d28 indirect=2:faaee6e5a0219d28 +geom 3: material #2 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:55522c246731933e camera=2:55522c246731933e shadow=2:55522c246731933e indirect=2:55522c246731933e +geom 4: material #3 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:6a1c895a634c0162 camera=2:6a1c895a634c0162 shadow=2:6a1c895a634c0162 indirect=2:6a1c895a634c0162 +geom 5: material #4 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:d7e184c050c2f9e4 camera=2:d7e184c050c2f9e4 shadow=2:d7e184c050c2f9e4 indirect=2:d7e184c050c2f9e4 +geom 6: material #5 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:0072c0dd41a28391 camera=1:0072c0dd41a28391 shadow=1:0072c0dd41a28391 indirect=1:0072c0dd41a28391 +geom 7: material #6 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:25d33e066e9377ce camera=1:25d33e066e9377ce shadow=1:25d33e066e9377ce indirect=1:25d33e066e9377ce +geom 8: material #7 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:946393500a4eba02 camera=1:946393500a4eba02 shadow=1:946393500a4eba02 indirect=1:946393500a4eba02 +geom 9: material #8 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:c0b8734402fc2ca3 camera=1:c0b8734402fc2ca3 shadow=1:c0b8734402fc2ca3 indirect=1:c0b8734402fc2ca3 +provenance material /World/Materials/Backdrop: MaterialOrigin { slots: [0, 1], displaced: false } +provenance material /World/Materials/PlateRough: MaterialOrigin { slots: [3], displaced: false } +provenance material /World/Materials/PlateRoughest: MaterialOrigin { slots: [2], displaced: false } +provenance material /World/Materials/PlateSmooth: MaterialOrigin { slots: [4], displaced: false } +provenance material /World/Materials/PlateSmoothest: MaterialOrigin { slots: [5], displaced: false } +provenance light /World/LightBig: LightOrigin { index: 0, geoms: 6..7 } +provenance light /World/LightMedium: LightOrigin { index: 1, geoms: 7..8 } +provenance light /World/LightSmall: LightOrigin { index: 2, geoms: 8..9 } +provenance light /World/LightTiny: LightOrigin { index: 3, geoms: 9..10 } +provenance geometry 0..1: /World/BackWall +provenance geometry 1..2: /World/Floor +provenance geometry 2..3: /World/Plate3 +provenance geometry 3..4: /World/Plate2 +provenance geometry 4..5: /World/Plate1 +provenance geometry 5..6: /World/Plate0 +provenance geometry 6..7: /World/LightBig +provenance geometry 7..8: /World/LightMedium +provenance geometry 8..9: /World/LightSmall +provenance geometry 9..10: /World/LightTiny +provenance mesh: MeshOrigin { geom_id: 0, slot: 0, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 1, slot: 1, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 2, slot: 2, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 3, slot: 3, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 4, slot: 4, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 5, slot: 5, baked: true, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 2412432479217055457, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 1: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 5856995924472605639, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 2: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 6402661692534233033, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 1 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 3: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 13696518014408431155, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 2 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 4: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 15384334289683032877, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 3 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 5: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 6481752197548623432, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 4 }), placements: 1, shared: false, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/World/Cam"), cameras: ["/World/Cam"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/World/Cam"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/veach_mis_usda-70c995e092ab1d61-20.image b/crates/crust-core/tests/data/import_baselines/veach_mis_usda-70c995e092ab1d61-20.image new file mode 100644 index 000000000..96aff8304 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/veach_mis_usda-70c995e092ab1d61-20.image @@ -0,0 +1 @@ +960x540 16spp clamp-off c795c604ff2181ef diff --git a/crates/crust-core/tests/data/import_baselines/veach_mis_usda-70c995e092ab1d61-21.digest b/crates/crust-core/tests/data/import_baselines/veach_mis_usda-70c995e092ab1d61-21.digest new file mode 100644 index 000000000..6c2cda342 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/veach_mis_usda-70c995e092ab1d61-21.digest @@ -0,0 +1,61 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/World/Cam") +camera: Camera { origin: Vec3A(0.0, 4.0, 12.0), lower_left_corner: Vec3A(-8.494889, -2.4422622, 2.981679), horizontal: Vec3A(16.989779, -0.0, 0.0), vertical: Vec3A(0.0, 9.411561, -1.6595122), u: Vec3A(1.0, -0.0, 0.0), v: Vec3A(0.0, 0.98480767, -0.17364816), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: Some("/Render/settings") +settings: RenderSettings { samples_per_pixel: 128, max_depth: 8, width: 960, height: 540, region: PixelRect { x0: 0, y0: 0, x1: 960, y1: 540 }, min_samples_per_pixel: 32, variance_threshold: 0.0, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: BalanceMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 16.0, aperture: [20.955, 15.2908], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 10.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/veach_mis.usda"], invisible_overrides: Some(0) } +layer: $DIR/veach_mis.usda +lights: 4 +light 0: area name Some("/World/LightBig") lpe None pmf 0.25 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 1: area name Some("/World/LightMedium") lpe None pmf 0.25 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 2: area name Some("/World/LightSmall") lpe None pmf 0.25 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 3: area name Some("/World/LightTiny") lpe None pmf 0.25 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 10 geometries, PrimitiveBreakdown { triangles: 12, spheres: 4, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 12, spheres: 4, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:68d4160149942562 camera=2:68d4160149942562 shadow=2:68d4160149942562 indirect=2:68d4160149942562 +geom 1: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:c752315e4cdb3b45 camera=2:c752315e4cdb3b45 shadow=2:c752315e4cdb3b45 indirect=2:c752315e4cdb3b45 +geom 2: material #1 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:faaee6e5a0219d28 camera=2:faaee6e5a0219d28 shadow=2:faaee6e5a0219d28 indirect=2:faaee6e5a0219d28 +geom 3: material #2 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:55522c246731933e camera=2:55522c246731933e shadow=2:55522c246731933e indirect=2:55522c246731933e +geom 4: material #3 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:6a1c895a634c0162 camera=2:6a1c895a634c0162 shadow=2:6a1c895a634c0162 indirect=2:6a1c895a634c0162 +geom 5: material #4 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:d7e184c050c2f9e4 camera=2:d7e184c050c2f9e4 shadow=2:d7e184c050c2f9e4 indirect=2:d7e184c050c2f9e4 +geom 6: material #5 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:0072c0dd41a28391 camera=1:0072c0dd41a28391 shadow=1:0072c0dd41a28391 indirect=1:0072c0dd41a28391 +geom 7: material #6 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:25d33e066e9377ce camera=1:25d33e066e9377ce shadow=1:25d33e066e9377ce indirect=1:25d33e066e9377ce +geom 8: material #7 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:946393500a4eba02 camera=1:946393500a4eba02 shadow=1:946393500a4eba02 indirect=1:946393500a4eba02 +geom 9: material #8 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:c0b8734402fc2ca3 camera=1:c0b8734402fc2ca3 shadow=1:c0b8734402fc2ca3 indirect=1:c0b8734402fc2ca3 +provenance material /World/Materials/Backdrop: MaterialOrigin { slots: [0, 1], displaced: false } +provenance material /World/Materials/PlateRough: MaterialOrigin { slots: [3], displaced: false } +provenance material /World/Materials/PlateRoughest: MaterialOrigin { slots: [2], displaced: false } +provenance material /World/Materials/PlateSmooth: MaterialOrigin { slots: [4], displaced: false } +provenance material /World/Materials/PlateSmoothest: MaterialOrigin { slots: [5], displaced: false } +provenance light /World/LightBig: LightOrigin { index: 0, geoms: 6..7 } +provenance light /World/LightMedium: LightOrigin { index: 1, geoms: 7..8 } +provenance light /World/LightSmall: LightOrigin { index: 2, geoms: 8..9 } +provenance light /World/LightTiny: LightOrigin { index: 3, geoms: 9..10 } +provenance geometry 0..1: /World/BackWall +provenance geometry 1..2: /World/Floor +provenance geometry 2..3: /World/Plate3 +provenance geometry 3..4: /World/Plate2 +provenance geometry 4..5: /World/Plate1 +provenance geometry 5..6: /World/Plate0 +provenance geometry 6..7: /World/LightBig +provenance geometry 7..8: /World/LightMedium +provenance geometry 8..9: /World/LightSmall +provenance geometry 9..10: /World/LightTiny +provenance mesh: MeshOrigin { geom_id: 0, slot: 0, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 1, slot: 1, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 2, slot: 2, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 3, slot: 3, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 4, slot: 4, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 5, slot: 5, baked: true, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 2412432479217055457, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 1: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 5856995924472605639, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 2: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 6402661692534233033, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 1 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 3: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 13696518014408431155, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 2 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 4: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 15384334289683032877, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 3 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 5: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 6481752197548623432, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 4 }), placements: 1, shared: false, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/World/Cam"), cameras: ["/World/Cam"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/World/Cam"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/veach_mis_usda-70c995e092ab1d61-21.image b/crates/crust-core/tests/data/import_baselines/veach_mis_usda-70c995e092ab1d61-21.image new file mode 100644 index 000000000..96aff8304 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/veach_mis_usda-70c995e092ab1d61-21.image @@ -0,0 +1 @@ +960x540 16spp clamp-off c795c604ff2181ef diff --git a/crates/crust-core/tests/data/import_baselines/veach_mis_usda-70c995e092ab1d61-22.digest b/crates/crust-core/tests/data/import_baselines/veach_mis_usda-70c995e092ab1d61-22.digest new file mode 100644 index 000000000..6c2cda342 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/veach_mis_usda-70c995e092ab1d61-22.digest @@ -0,0 +1,61 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/World/Cam") +camera: Camera { origin: Vec3A(0.0, 4.0, 12.0), lower_left_corner: Vec3A(-8.494889, -2.4422622, 2.981679), horizontal: Vec3A(16.989779, -0.0, 0.0), vertical: Vec3A(0.0, 9.411561, -1.6595122), u: Vec3A(1.0, -0.0, 0.0), v: Vec3A(0.0, 0.98480767, -0.17364816), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: Some("/Render/settings") +settings: RenderSettings { samples_per_pixel: 128, max_depth: 8, width: 960, height: 540, region: PixelRect { x0: 0, y0: 0, x1: 960, y1: 540 }, min_samples_per_pixel: 32, variance_threshold: 0.0, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: BalanceMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 16.0, aperture: [20.955, 15.2908], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 10.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/veach_mis.usda"], invisible_overrides: Some(0) } +layer: $DIR/veach_mis.usda +lights: 4 +light 0: area name Some("/World/LightBig") lpe None pmf 0.25 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 1: area name Some("/World/LightMedium") lpe None pmf 0.25 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 2: area name Some("/World/LightSmall") lpe None pmf 0.25 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 3: area name Some("/World/LightTiny") lpe None pmf 0.25 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 10 geometries, PrimitiveBreakdown { triangles: 12, spheres: 4, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 12, spheres: 4, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:68d4160149942562 camera=2:68d4160149942562 shadow=2:68d4160149942562 indirect=2:68d4160149942562 +geom 1: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:c752315e4cdb3b45 camera=2:c752315e4cdb3b45 shadow=2:c752315e4cdb3b45 indirect=2:c752315e4cdb3b45 +geom 2: material #1 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:faaee6e5a0219d28 camera=2:faaee6e5a0219d28 shadow=2:faaee6e5a0219d28 indirect=2:faaee6e5a0219d28 +geom 3: material #2 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:55522c246731933e camera=2:55522c246731933e shadow=2:55522c246731933e indirect=2:55522c246731933e +geom 4: material #3 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:6a1c895a634c0162 camera=2:6a1c895a634c0162 shadow=2:6a1c895a634c0162 indirect=2:6a1c895a634c0162 +geom 5: material #4 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:d7e184c050c2f9e4 camera=2:d7e184c050c2f9e4 shadow=2:d7e184c050c2f9e4 indirect=2:d7e184c050c2f9e4 +geom 6: material #5 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:0072c0dd41a28391 camera=1:0072c0dd41a28391 shadow=1:0072c0dd41a28391 indirect=1:0072c0dd41a28391 +geom 7: material #6 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:25d33e066e9377ce camera=1:25d33e066e9377ce shadow=1:25d33e066e9377ce indirect=1:25d33e066e9377ce +geom 8: material #7 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:946393500a4eba02 camera=1:946393500a4eba02 shadow=1:946393500a4eba02 indirect=1:946393500a4eba02 +geom 9: material #8 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:c0b8734402fc2ca3 camera=1:c0b8734402fc2ca3 shadow=1:c0b8734402fc2ca3 indirect=1:c0b8734402fc2ca3 +provenance material /World/Materials/Backdrop: MaterialOrigin { slots: [0, 1], displaced: false } +provenance material /World/Materials/PlateRough: MaterialOrigin { slots: [3], displaced: false } +provenance material /World/Materials/PlateRoughest: MaterialOrigin { slots: [2], displaced: false } +provenance material /World/Materials/PlateSmooth: MaterialOrigin { slots: [4], displaced: false } +provenance material /World/Materials/PlateSmoothest: MaterialOrigin { slots: [5], displaced: false } +provenance light /World/LightBig: LightOrigin { index: 0, geoms: 6..7 } +provenance light /World/LightMedium: LightOrigin { index: 1, geoms: 7..8 } +provenance light /World/LightSmall: LightOrigin { index: 2, geoms: 8..9 } +provenance light /World/LightTiny: LightOrigin { index: 3, geoms: 9..10 } +provenance geometry 0..1: /World/BackWall +provenance geometry 1..2: /World/Floor +provenance geometry 2..3: /World/Plate3 +provenance geometry 3..4: /World/Plate2 +provenance geometry 4..5: /World/Plate1 +provenance geometry 5..6: /World/Plate0 +provenance geometry 6..7: /World/LightBig +provenance geometry 7..8: /World/LightMedium +provenance geometry 8..9: /World/LightSmall +provenance geometry 9..10: /World/LightTiny +provenance mesh: MeshOrigin { geom_id: 0, slot: 0, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 1, slot: 1, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 2, slot: 2, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 3, slot: 3, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 4, slot: 4, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 5, slot: 5, baked: true, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 2412432479217055457, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 1: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 5856995924472605639, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 2: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 6402661692534233033, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 1 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 3: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 13696518014408431155, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 2 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 4: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 15384334289683032877, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 3 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 5: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 6481752197548623432, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 4 }), placements: 1, shared: false, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/World/Cam"), cameras: ["/World/Cam"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/World/Cam"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/veach_mis_usda-70c995e092ab1d61-22.image b/crates/crust-core/tests/data/import_baselines/veach_mis_usda-70c995e092ab1d61-22.image new file mode 100644 index 000000000..96aff8304 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/veach_mis_usda-70c995e092ab1d61-22.image @@ -0,0 +1 @@ +960x540 16spp clamp-off c795c604ff2181ef diff --git a/crates/crust-core/tests/data/import_baselines/veach_mis_usda-70c995e092ab1d61-23.digest b/crates/crust-core/tests/data/import_baselines/veach_mis_usda-70c995e092ab1d61-23.digest new file mode 100644 index 000000000..6c2cda342 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/veach_mis_usda-70c995e092ab1d61-23.digest @@ -0,0 +1,61 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/World/Cam") +camera: Camera { origin: Vec3A(0.0, 4.0, 12.0), lower_left_corner: Vec3A(-8.494889, -2.4422622, 2.981679), horizontal: Vec3A(16.989779, -0.0, 0.0), vertical: Vec3A(0.0, 9.411561, -1.6595122), u: Vec3A(1.0, -0.0, 0.0), v: Vec3A(0.0, 0.98480767, -0.17364816), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: Some("/Render/settings") +settings: RenderSettings { samples_per_pixel: 128, max_depth: 8, width: 960, height: 540, region: PixelRect { x0: 0, y0: 0, x1: 960, y1: 540 }, min_samples_per_pixel: 32, variance_threshold: 0.0, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: BalanceMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 16.0, aperture: [20.955, 15.2908], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 10.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/veach_mis.usda"], invisible_overrides: Some(0) } +layer: $DIR/veach_mis.usda +lights: 4 +light 0: area name Some("/World/LightBig") lpe None pmf 0.25 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 1: area name Some("/World/LightMedium") lpe None pmf 0.25 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 2: area name Some("/World/LightSmall") lpe None pmf 0.25 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 3: area name Some("/World/LightTiny") lpe None pmf 0.25 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 10 geometries, PrimitiveBreakdown { triangles: 12, spheres: 4, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 12, spheres: 4, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:68d4160149942562 camera=2:68d4160149942562 shadow=2:68d4160149942562 indirect=2:68d4160149942562 +geom 1: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:c752315e4cdb3b45 camera=2:c752315e4cdb3b45 shadow=2:c752315e4cdb3b45 indirect=2:c752315e4cdb3b45 +geom 2: material #1 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:faaee6e5a0219d28 camera=2:faaee6e5a0219d28 shadow=2:faaee6e5a0219d28 indirect=2:faaee6e5a0219d28 +geom 3: material #2 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:55522c246731933e camera=2:55522c246731933e shadow=2:55522c246731933e indirect=2:55522c246731933e +geom 4: material #3 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:6a1c895a634c0162 camera=2:6a1c895a634c0162 shadow=2:6a1c895a634c0162 indirect=2:6a1c895a634c0162 +geom 5: material #4 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:d7e184c050c2f9e4 camera=2:d7e184c050c2f9e4 shadow=2:d7e184c050c2f9e4 indirect=2:d7e184c050c2f9e4 +geom 6: material #5 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:0072c0dd41a28391 camera=1:0072c0dd41a28391 shadow=1:0072c0dd41a28391 indirect=1:0072c0dd41a28391 +geom 7: material #6 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:25d33e066e9377ce camera=1:25d33e066e9377ce shadow=1:25d33e066e9377ce indirect=1:25d33e066e9377ce +geom 8: material #7 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:946393500a4eba02 camera=1:946393500a4eba02 shadow=1:946393500a4eba02 indirect=1:946393500a4eba02 +geom 9: material #8 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:c0b8734402fc2ca3 camera=1:c0b8734402fc2ca3 shadow=1:c0b8734402fc2ca3 indirect=1:c0b8734402fc2ca3 +provenance material /World/Materials/Backdrop: MaterialOrigin { slots: [0, 1], displaced: false } +provenance material /World/Materials/PlateRough: MaterialOrigin { slots: [3], displaced: false } +provenance material /World/Materials/PlateRoughest: MaterialOrigin { slots: [2], displaced: false } +provenance material /World/Materials/PlateSmooth: MaterialOrigin { slots: [4], displaced: false } +provenance material /World/Materials/PlateSmoothest: MaterialOrigin { slots: [5], displaced: false } +provenance light /World/LightBig: LightOrigin { index: 0, geoms: 6..7 } +provenance light /World/LightMedium: LightOrigin { index: 1, geoms: 7..8 } +provenance light /World/LightSmall: LightOrigin { index: 2, geoms: 8..9 } +provenance light /World/LightTiny: LightOrigin { index: 3, geoms: 9..10 } +provenance geometry 0..1: /World/BackWall +provenance geometry 1..2: /World/Floor +provenance geometry 2..3: /World/Plate3 +provenance geometry 3..4: /World/Plate2 +provenance geometry 4..5: /World/Plate1 +provenance geometry 5..6: /World/Plate0 +provenance geometry 6..7: /World/LightBig +provenance geometry 7..8: /World/LightMedium +provenance geometry 8..9: /World/LightSmall +provenance geometry 9..10: /World/LightTiny +provenance mesh: MeshOrigin { geom_id: 0, slot: 0, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 1, slot: 1, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 2, slot: 2, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 3, slot: 3, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 4, slot: 4, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 5, slot: 5, baked: true, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 2412432479217055457, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 1: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 5856995924472605639, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 2: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 6402661692534233033, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 1 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 3: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 13696518014408431155, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 2 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 4: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 15384334289683032877, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 3 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 5: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 6481752197548623432, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 4 }), placements: 1, shared: false, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/World/Cam"), cameras: ["/World/Cam"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/World/Cam"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/veach_mis_usda-70c995e092ab1d61-23.image b/crates/crust-core/tests/data/import_baselines/veach_mis_usda-70c995e092ab1d61-23.image new file mode 100644 index 000000000..96aff8304 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/veach_mis_usda-70c995e092ab1d61-23.image @@ -0,0 +1 @@ +960x540 16spp clamp-off c795c604ff2181ef diff --git a/crates/crust-core/tests/data/import_baselines/veach_mis_usda-70c995e092ab1d61-24.digest b/crates/crust-core/tests/data/import_baselines/veach_mis_usda-70c995e092ab1d61-24.digest new file mode 100644 index 000000000..6c2cda342 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/veach_mis_usda-70c995e092ab1d61-24.digest @@ -0,0 +1,61 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/World/Cam") +camera: Camera { origin: Vec3A(0.0, 4.0, 12.0), lower_left_corner: Vec3A(-8.494889, -2.4422622, 2.981679), horizontal: Vec3A(16.989779, -0.0, 0.0), vertical: Vec3A(0.0, 9.411561, -1.6595122), u: Vec3A(1.0, -0.0, 0.0), v: Vec3A(0.0, 0.98480767, -0.17364816), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: Some("/Render/settings") +settings: RenderSettings { samples_per_pixel: 128, max_depth: 8, width: 960, height: 540, region: PixelRect { x0: 0, y0: 0, x1: 960, y1: 540 }, min_samples_per_pixel: 32, variance_threshold: 0.0, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: BalanceMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 16.0, aperture: [20.955, 15.2908], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 10.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/veach_mis.usda"], invisible_overrides: Some(0) } +layer: $DIR/veach_mis.usda +lights: 4 +light 0: area name Some("/World/LightBig") lpe None pmf 0.25 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 1: area name Some("/World/LightMedium") lpe None pmf 0.25 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 2: area name Some("/World/LightSmall") lpe None pmf 0.25 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 3: area name Some("/World/LightTiny") lpe None pmf 0.25 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 10 geometries, PrimitiveBreakdown { triangles: 12, spheres: 4, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 12, spheres: 4, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:68d4160149942562 camera=2:68d4160149942562 shadow=2:68d4160149942562 indirect=2:68d4160149942562 +geom 1: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:c752315e4cdb3b45 camera=2:c752315e4cdb3b45 shadow=2:c752315e4cdb3b45 indirect=2:c752315e4cdb3b45 +geom 2: material #1 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:faaee6e5a0219d28 camera=2:faaee6e5a0219d28 shadow=2:faaee6e5a0219d28 indirect=2:faaee6e5a0219d28 +geom 3: material #2 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:55522c246731933e camera=2:55522c246731933e shadow=2:55522c246731933e indirect=2:55522c246731933e +geom 4: material #3 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:6a1c895a634c0162 camera=2:6a1c895a634c0162 shadow=2:6a1c895a634c0162 indirect=2:6a1c895a634c0162 +geom 5: material #4 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:d7e184c050c2f9e4 camera=2:d7e184c050c2f9e4 shadow=2:d7e184c050c2f9e4 indirect=2:d7e184c050c2f9e4 +geom 6: material #5 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:0072c0dd41a28391 camera=1:0072c0dd41a28391 shadow=1:0072c0dd41a28391 indirect=1:0072c0dd41a28391 +geom 7: material #6 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:25d33e066e9377ce camera=1:25d33e066e9377ce shadow=1:25d33e066e9377ce indirect=1:25d33e066e9377ce +geom 8: material #7 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:946393500a4eba02 camera=1:946393500a4eba02 shadow=1:946393500a4eba02 indirect=1:946393500a4eba02 +geom 9: material #8 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:c0b8734402fc2ca3 camera=1:c0b8734402fc2ca3 shadow=1:c0b8734402fc2ca3 indirect=1:c0b8734402fc2ca3 +provenance material /World/Materials/Backdrop: MaterialOrigin { slots: [0, 1], displaced: false } +provenance material /World/Materials/PlateRough: MaterialOrigin { slots: [3], displaced: false } +provenance material /World/Materials/PlateRoughest: MaterialOrigin { slots: [2], displaced: false } +provenance material /World/Materials/PlateSmooth: MaterialOrigin { slots: [4], displaced: false } +provenance material /World/Materials/PlateSmoothest: MaterialOrigin { slots: [5], displaced: false } +provenance light /World/LightBig: LightOrigin { index: 0, geoms: 6..7 } +provenance light /World/LightMedium: LightOrigin { index: 1, geoms: 7..8 } +provenance light /World/LightSmall: LightOrigin { index: 2, geoms: 8..9 } +provenance light /World/LightTiny: LightOrigin { index: 3, geoms: 9..10 } +provenance geometry 0..1: /World/BackWall +provenance geometry 1..2: /World/Floor +provenance geometry 2..3: /World/Plate3 +provenance geometry 3..4: /World/Plate2 +provenance geometry 4..5: /World/Plate1 +provenance geometry 5..6: /World/Plate0 +provenance geometry 6..7: /World/LightBig +provenance geometry 7..8: /World/LightMedium +provenance geometry 8..9: /World/LightSmall +provenance geometry 9..10: /World/LightTiny +provenance mesh: MeshOrigin { geom_id: 0, slot: 0, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 1, slot: 1, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 2, slot: 2, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 3, slot: 3, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 4, slot: 4, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 5, slot: 5, baked: true, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 2412432479217055457, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 1: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 5856995924472605639, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 2: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 6402661692534233033, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 1 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 3: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 13696518014408431155, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 2 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 4: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 15384334289683032877, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 3 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 5: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 6481752197548623432, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 4 }), placements: 1, shared: false, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/World/Cam"), cameras: ["/World/Cam"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/World/Cam"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/veach_mis_usda-70c995e092ab1d61-24.image b/crates/crust-core/tests/data/import_baselines/veach_mis_usda-70c995e092ab1d61-24.image new file mode 100644 index 000000000..96aff8304 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/veach_mis_usda-70c995e092ab1d61-24.image @@ -0,0 +1 @@ +960x540 16spp clamp-off c795c604ff2181ef diff --git a/crates/crust-core/tests/data/import_baselines/veach_mis_usda-70c995e092ab1d61-25.digest b/crates/crust-core/tests/data/import_baselines/veach_mis_usda-70c995e092ab1d61-25.digest new file mode 100644 index 000000000..6c2cda342 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/veach_mis_usda-70c995e092ab1d61-25.digest @@ -0,0 +1,61 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/World/Cam") +camera: Camera { origin: Vec3A(0.0, 4.0, 12.0), lower_left_corner: Vec3A(-8.494889, -2.4422622, 2.981679), horizontal: Vec3A(16.989779, -0.0, 0.0), vertical: Vec3A(0.0, 9.411561, -1.6595122), u: Vec3A(1.0, -0.0, 0.0), v: Vec3A(0.0, 0.98480767, -0.17364816), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: Some("/Render/settings") +settings: RenderSettings { samples_per_pixel: 128, max_depth: 8, width: 960, height: 540, region: PixelRect { x0: 0, y0: 0, x1: 960, y1: 540 }, min_samples_per_pixel: 32, variance_threshold: 0.0, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: BalanceMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 16.0, aperture: [20.955, 15.2908], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 10.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/veach_mis.usda"], invisible_overrides: Some(0) } +layer: $DIR/veach_mis.usda +lights: 4 +light 0: area name Some("/World/LightBig") lpe None pmf 0.25 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 1: area name Some("/World/LightMedium") lpe None pmf 0.25 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 2: area name Some("/World/LightSmall") lpe None pmf 0.25 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 3: area name Some("/World/LightTiny") lpe None pmf 0.25 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 10 geometries, PrimitiveBreakdown { triangles: 12, spheres: 4, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 12, spheres: 4, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:68d4160149942562 camera=2:68d4160149942562 shadow=2:68d4160149942562 indirect=2:68d4160149942562 +geom 1: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:c752315e4cdb3b45 camera=2:c752315e4cdb3b45 shadow=2:c752315e4cdb3b45 indirect=2:c752315e4cdb3b45 +geom 2: material #1 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:faaee6e5a0219d28 camera=2:faaee6e5a0219d28 shadow=2:faaee6e5a0219d28 indirect=2:faaee6e5a0219d28 +geom 3: material #2 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:55522c246731933e camera=2:55522c246731933e shadow=2:55522c246731933e indirect=2:55522c246731933e +geom 4: material #3 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:6a1c895a634c0162 camera=2:6a1c895a634c0162 shadow=2:6a1c895a634c0162 indirect=2:6a1c895a634c0162 +geom 5: material #4 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:d7e184c050c2f9e4 camera=2:d7e184c050c2f9e4 shadow=2:d7e184c050c2f9e4 indirect=2:d7e184c050c2f9e4 +geom 6: material #5 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:0072c0dd41a28391 camera=1:0072c0dd41a28391 shadow=1:0072c0dd41a28391 indirect=1:0072c0dd41a28391 +geom 7: material #6 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:25d33e066e9377ce camera=1:25d33e066e9377ce shadow=1:25d33e066e9377ce indirect=1:25d33e066e9377ce +geom 8: material #7 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:946393500a4eba02 camera=1:946393500a4eba02 shadow=1:946393500a4eba02 indirect=1:946393500a4eba02 +geom 9: material #8 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:c0b8734402fc2ca3 camera=1:c0b8734402fc2ca3 shadow=1:c0b8734402fc2ca3 indirect=1:c0b8734402fc2ca3 +provenance material /World/Materials/Backdrop: MaterialOrigin { slots: [0, 1], displaced: false } +provenance material /World/Materials/PlateRough: MaterialOrigin { slots: [3], displaced: false } +provenance material /World/Materials/PlateRoughest: MaterialOrigin { slots: [2], displaced: false } +provenance material /World/Materials/PlateSmooth: MaterialOrigin { slots: [4], displaced: false } +provenance material /World/Materials/PlateSmoothest: MaterialOrigin { slots: [5], displaced: false } +provenance light /World/LightBig: LightOrigin { index: 0, geoms: 6..7 } +provenance light /World/LightMedium: LightOrigin { index: 1, geoms: 7..8 } +provenance light /World/LightSmall: LightOrigin { index: 2, geoms: 8..9 } +provenance light /World/LightTiny: LightOrigin { index: 3, geoms: 9..10 } +provenance geometry 0..1: /World/BackWall +provenance geometry 1..2: /World/Floor +provenance geometry 2..3: /World/Plate3 +provenance geometry 3..4: /World/Plate2 +provenance geometry 4..5: /World/Plate1 +provenance geometry 5..6: /World/Plate0 +provenance geometry 6..7: /World/LightBig +provenance geometry 7..8: /World/LightMedium +provenance geometry 8..9: /World/LightSmall +provenance geometry 9..10: /World/LightTiny +provenance mesh: MeshOrigin { geom_id: 0, slot: 0, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 1, slot: 1, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 2, slot: 2, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 3, slot: 3, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 4, slot: 4, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 5, slot: 5, baked: true, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 2412432479217055457, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 1: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 5856995924472605639, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 2: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 6402661692534233033, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 1 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 3: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 13696518014408431155, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 2 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 4: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 15384334289683032877, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 3 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 5: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 6481752197548623432, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 4 }), placements: 1, shared: false, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/World/Cam"), cameras: ["/World/Cam"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/World/Cam"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/veach_mis_usda-70c995e092ab1d61-25.image b/crates/crust-core/tests/data/import_baselines/veach_mis_usda-70c995e092ab1d61-25.image new file mode 100644 index 000000000..96aff8304 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/veach_mis_usda-70c995e092ab1d61-25.image @@ -0,0 +1 @@ +960x540 16spp clamp-off c795c604ff2181ef diff --git a/crates/crust-core/tests/data/import_baselines/veach_mis_usda-70c995e092ab1d61-3.digest b/crates/crust-core/tests/data/import_baselines/veach_mis_usda-70c995e092ab1d61-3.digest new file mode 100644 index 000000000..6c2cda342 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/veach_mis_usda-70c995e092ab1d61-3.digest @@ -0,0 +1,61 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/World/Cam") +camera: Camera { origin: Vec3A(0.0, 4.0, 12.0), lower_left_corner: Vec3A(-8.494889, -2.4422622, 2.981679), horizontal: Vec3A(16.989779, -0.0, 0.0), vertical: Vec3A(0.0, 9.411561, -1.6595122), u: Vec3A(1.0, -0.0, 0.0), v: Vec3A(0.0, 0.98480767, -0.17364816), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: Some("/Render/settings") +settings: RenderSettings { samples_per_pixel: 128, max_depth: 8, width: 960, height: 540, region: PixelRect { x0: 0, y0: 0, x1: 960, y1: 540 }, min_samples_per_pixel: 32, variance_threshold: 0.0, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: BalanceMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 16.0, aperture: [20.955, 15.2908], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 10.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/veach_mis.usda"], invisible_overrides: Some(0) } +layer: $DIR/veach_mis.usda +lights: 4 +light 0: area name Some("/World/LightBig") lpe None pmf 0.25 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 1: area name Some("/World/LightMedium") lpe None pmf 0.25 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 2: area name Some("/World/LightSmall") lpe None pmf 0.25 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 3: area name Some("/World/LightTiny") lpe None pmf 0.25 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 10 geometries, PrimitiveBreakdown { triangles: 12, spheres: 4, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 12, spheres: 4, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:68d4160149942562 camera=2:68d4160149942562 shadow=2:68d4160149942562 indirect=2:68d4160149942562 +geom 1: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:c752315e4cdb3b45 camera=2:c752315e4cdb3b45 shadow=2:c752315e4cdb3b45 indirect=2:c752315e4cdb3b45 +geom 2: material #1 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:faaee6e5a0219d28 camera=2:faaee6e5a0219d28 shadow=2:faaee6e5a0219d28 indirect=2:faaee6e5a0219d28 +geom 3: material #2 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:55522c246731933e camera=2:55522c246731933e shadow=2:55522c246731933e indirect=2:55522c246731933e +geom 4: material #3 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:6a1c895a634c0162 camera=2:6a1c895a634c0162 shadow=2:6a1c895a634c0162 indirect=2:6a1c895a634c0162 +geom 5: material #4 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:d7e184c050c2f9e4 camera=2:d7e184c050c2f9e4 shadow=2:d7e184c050c2f9e4 indirect=2:d7e184c050c2f9e4 +geom 6: material #5 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:0072c0dd41a28391 camera=1:0072c0dd41a28391 shadow=1:0072c0dd41a28391 indirect=1:0072c0dd41a28391 +geom 7: material #6 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:25d33e066e9377ce camera=1:25d33e066e9377ce shadow=1:25d33e066e9377ce indirect=1:25d33e066e9377ce +geom 8: material #7 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:946393500a4eba02 camera=1:946393500a4eba02 shadow=1:946393500a4eba02 indirect=1:946393500a4eba02 +geom 9: material #8 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:c0b8734402fc2ca3 camera=1:c0b8734402fc2ca3 shadow=1:c0b8734402fc2ca3 indirect=1:c0b8734402fc2ca3 +provenance material /World/Materials/Backdrop: MaterialOrigin { slots: [0, 1], displaced: false } +provenance material /World/Materials/PlateRough: MaterialOrigin { slots: [3], displaced: false } +provenance material /World/Materials/PlateRoughest: MaterialOrigin { slots: [2], displaced: false } +provenance material /World/Materials/PlateSmooth: MaterialOrigin { slots: [4], displaced: false } +provenance material /World/Materials/PlateSmoothest: MaterialOrigin { slots: [5], displaced: false } +provenance light /World/LightBig: LightOrigin { index: 0, geoms: 6..7 } +provenance light /World/LightMedium: LightOrigin { index: 1, geoms: 7..8 } +provenance light /World/LightSmall: LightOrigin { index: 2, geoms: 8..9 } +provenance light /World/LightTiny: LightOrigin { index: 3, geoms: 9..10 } +provenance geometry 0..1: /World/BackWall +provenance geometry 1..2: /World/Floor +provenance geometry 2..3: /World/Plate3 +provenance geometry 3..4: /World/Plate2 +provenance geometry 4..5: /World/Plate1 +provenance geometry 5..6: /World/Plate0 +provenance geometry 6..7: /World/LightBig +provenance geometry 7..8: /World/LightMedium +provenance geometry 8..9: /World/LightSmall +provenance geometry 9..10: /World/LightTiny +provenance mesh: MeshOrigin { geom_id: 0, slot: 0, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 1, slot: 1, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 2, slot: 2, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 3, slot: 3, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 4, slot: 4, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 5, slot: 5, baked: true, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 2412432479217055457, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 1: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 5856995924472605639, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 2: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 6402661692534233033, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 1 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 3: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 13696518014408431155, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 2 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 4: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 15384334289683032877, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 3 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 5: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 6481752197548623432, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 4 }), placements: 1, shared: false, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/World/Cam"), cameras: ["/World/Cam"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/World/Cam"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/veach_mis_usda-70c995e092ab1d61-3.image b/crates/crust-core/tests/data/import_baselines/veach_mis_usda-70c995e092ab1d61-3.image new file mode 100644 index 000000000..96aff8304 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/veach_mis_usda-70c995e092ab1d61-3.image @@ -0,0 +1 @@ +960x540 16spp clamp-off c795c604ff2181ef diff --git a/crates/crust-core/tests/data/import_baselines/veach_mis_usda-70c995e092ab1d61-4.digest b/crates/crust-core/tests/data/import_baselines/veach_mis_usda-70c995e092ab1d61-4.digest new file mode 100644 index 000000000..6c2cda342 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/veach_mis_usda-70c995e092ab1d61-4.digest @@ -0,0 +1,61 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/World/Cam") +camera: Camera { origin: Vec3A(0.0, 4.0, 12.0), lower_left_corner: Vec3A(-8.494889, -2.4422622, 2.981679), horizontal: Vec3A(16.989779, -0.0, 0.0), vertical: Vec3A(0.0, 9.411561, -1.6595122), u: Vec3A(1.0, -0.0, 0.0), v: Vec3A(0.0, 0.98480767, -0.17364816), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: Some("/Render/settings") +settings: RenderSettings { samples_per_pixel: 128, max_depth: 8, width: 960, height: 540, region: PixelRect { x0: 0, y0: 0, x1: 960, y1: 540 }, min_samples_per_pixel: 32, variance_threshold: 0.0, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: BalanceMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 16.0, aperture: [20.955, 15.2908], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 10.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/veach_mis.usda"], invisible_overrides: Some(0) } +layer: $DIR/veach_mis.usda +lights: 4 +light 0: area name Some("/World/LightBig") lpe None pmf 0.25 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 1: area name Some("/World/LightMedium") lpe None pmf 0.25 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 2: area name Some("/World/LightSmall") lpe None pmf 0.25 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 3: area name Some("/World/LightTiny") lpe None pmf 0.25 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 10 geometries, PrimitiveBreakdown { triangles: 12, spheres: 4, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 12, spheres: 4, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:68d4160149942562 camera=2:68d4160149942562 shadow=2:68d4160149942562 indirect=2:68d4160149942562 +geom 1: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:c752315e4cdb3b45 camera=2:c752315e4cdb3b45 shadow=2:c752315e4cdb3b45 indirect=2:c752315e4cdb3b45 +geom 2: material #1 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:faaee6e5a0219d28 camera=2:faaee6e5a0219d28 shadow=2:faaee6e5a0219d28 indirect=2:faaee6e5a0219d28 +geom 3: material #2 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:55522c246731933e camera=2:55522c246731933e shadow=2:55522c246731933e indirect=2:55522c246731933e +geom 4: material #3 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:6a1c895a634c0162 camera=2:6a1c895a634c0162 shadow=2:6a1c895a634c0162 indirect=2:6a1c895a634c0162 +geom 5: material #4 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:d7e184c050c2f9e4 camera=2:d7e184c050c2f9e4 shadow=2:d7e184c050c2f9e4 indirect=2:d7e184c050c2f9e4 +geom 6: material #5 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:0072c0dd41a28391 camera=1:0072c0dd41a28391 shadow=1:0072c0dd41a28391 indirect=1:0072c0dd41a28391 +geom 7: material #6 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:25d33e066e9377ce camera=1:25d33e066e9377ce shadow=1:25d33e066e9377ce indirect=1:25d33e066e9377ce +geom 8: material #7 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:946393500a4eba02 camera=1:946393500a4eba02 shadow=1:946393500a4eba02 indirect=1:946393500a4eba02 +geom 9: material #8 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:c0b8734402fc2ca3 camera=1:c0b8734402fc2ca3 shadow=1:c0b8734402fc2ca3 indirect=1:c0b8734402fc2ca3 +provenance material /World/Materials/Backdrop: MaterialOrigin { slots: [0, 1], displaced: false } +provenance material /World/Materials/PlateRough: MaterialOrigin { slots: [3], displaced: false } +provenance material /World/Materials/PlateRoughest: MaterialOrigin { slots: [2], displaced: false } +provenance material /World/Materials/PlateSmooth: MaterialOrigin { slots: [4], displaced: false } +provenance material /World/Materials/PlateSmoothest: MaterialOrigin { slots: [5], displaced: false } +provenance light /World/LightBig: LightOrigin { index: 0, geoms: 6..7 } +provenance light /World/LightMedium: LightOrigin { index: 1, geoms: 7..8 } +provenance light /World/LightSmall: LightOrigin { index: 2, geoms: 8..9 } +provenance light /World/LightTiny: LightOrigin { index: 3, geoms: 9..10 } +provenance geometry 0..1: /World/BackWall +provenance geometry 1..2: /World/Floor +provenance geometry 2..3: /World/Plate3 +provenance geometry 3..4: /World/Plate2 +provenance geometry 4..5: /World/Plate1 +provenance geometry 5..6: /World/Plate0 +provenance geometry 6..7: /World/LightBig +provenance geometry 7..8: /World/LightMedium +provenance geometry 8..9: /World/LightSmall +provenance geometry 9..10: /World/LightTiny +provenance mesh: MeshOrigin { geom_id: 0, slot: 0, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 1, slot: 1, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 2, slot: 2, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 3, slot: 3, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 4, slot: 4, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 5, slot: 5, baked: true, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 2412432479217055457, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 1: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 5856995924472605639, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 2: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 6402661692534233033, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 1 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 3: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 13696518014408431155, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 2 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 4: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 15384334289683032877, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 3 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 5: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 6481752197548623432, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 4 }), placements: 1, shared: false, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/World/Cam"), cameras: ["/World/Cam"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/World/Cam"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/veach_mis_usda-70c995e092ab1d61-4.image b/crates/crust-core/tests/data/import_baselines/veach_mis_usda-70c995e092ab1d61-4.image new file mode 100644 index 000000000..96aff8304 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/veach_mis_usda-70c995e092ab1d61-4.image @@ -0,0 +1 @@ +960x540 16spp clamp-off c795c604ff2181ef diff --git a/crates/crust-core/tests/data/import_baselines/veach_mis_usda-70c995e092ab1d61-5.digest b/crates/crust-core/tests/data/import_baselines/veach_mis_usda-70c995e092ab1d61-5.digest new file mode 100644 index 000000000..6c2cda342 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/veach_mis_usda-70c995e092ab1d61-5.digest @@ -0,0 +1,61 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/World/Cam") +camera: Camera { origin: Vec3A(0.0, 4.0, 12.0), lower_left_corner: Vec3A(-8.494889, -2.4422622, 2.981679), horizontal: Vec3A(16.989779, -0.0, 0.0), vertical: Vec3A(0.0, 9.411561, -1.6595122), u: Vec3A(1.0, -0.0, 0.0), v: Vec3A(0.0, 0.98480767, -0.17364816), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: Some("/Render/settings") +settings: RenderSettings { samples_per_pixel: 128, max_depth: 8, width: 960, height: 540, region: PixelRect { x0: 0, y0: 0, x1: 960, y1: 540 }, min_samples_per_pixel: 32, variance_threshold: 0.0, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: BalanceMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 16.0, aperture: [20.955, 15.2908], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 10.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/veach_mis.usda"], invisible_overrides: Some(0) } +layer: $DIR/veach_mis.usda +lights: 4 +light 0: area name Some("/World/LightBig") lpe None pmf 0.25 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 1: area name Some("/World/LightMedium") lpe None pmf 0.25 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 2: area name Some("/World/LightSmall") lpe None pmf 0.25 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 3: area name Some("/World/LightTiny") lpe None pmf 0.25 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 10 geometries, PrimitiveBreakdown { triangles: 12, spheres: 4, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 12, spheres: 4, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:68d4160149942562 camera=2:68d4160149942562 shadow=2:68d4160149942562 indirect=2:68d4160149942562 +geom 1: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:c752315e4cdb3b45 camera=2:c752315e4cdb3b45 shadow=2:c752315e4cdb3b45 indirect=2:c752315e4cdb3b45 +geom 2: material #1 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:faaee6e5a0219d28 camera=2:faaee6e5a0219d28 shadow=2:faaee6e5a0219d28 indirect=2:faaee6e5a0219d28 +geom 3: material #2 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:55522c246731933e camera=2:55522c246731933e shadow=2:55522c246731933e indirect=2:55522c246731933e +geom 4: material #3 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:6a1c895a634c0162 camera=2:6a1c895a634c0162 shadow=2:6a1c895a634c0162 indirect=2:6a1c895a634c0162 +geom 5: material #4 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:d7e184c050c2f9e4 camera=2:d7e184c050c2f9e4 shadow=2:d7e184c050c2f9e4 indirect=2:d7e184c050c2f9e4 +geom 6: material #5 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:0072c0dd41a28391 camera=1:0072c0dd41a28391 shadow=1:0072c0dd41a28391 indirect=1:0072c0dd41a28391 +geom 7: material #6 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:25d33e066e9377ce camera=1:25d33e066e9377ce shadow=1:25d33e066e9377ce indirect=1:25d33e066e9377ce +geom 8: material #7 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:946393500a4eba02 camera=1:946393500a4eba02 shadow=1:946393500a4eba02 indirect=1:946393500a4eba02 +geom 9: material #8 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:c0b8734402fc2ca3 camera=1:c0b8734402fc2ca3 shadow=1:c0b8734402fc2ca3 indirect=1:c0b8734402fc2ca3 +provenance material /World/Materials/Backdrop: MaterialOrigin { slots: [0, 1], displaced: false } +provenance material /World/Materials/PlateRough: MaterialOrigin { slots: [3], displaced: false } +provenance material /World/Materials/PlateRoughest: MaterialOrigin { slots: [2], displaced: false } +provenance material /World/Materials/PlateSmooth: MaterialOrigin { slots: [4], displaced: false } +provenance material /World/Materials/PlateSmoothest: MaterialOrigin { slots: [5], displaced: false } +provenance light /World/LightBig: LightOrigin { index: 0, geoms: 6..7 } +provenance light /World/LightMedium: LightOrigin { index: 1, geoms: 7..8 } +provenance light /World/LightSmall: LightOrigin { index: 2, geoms: 8..9 } +provenance light /World/LightTiny: LightOrigin { index: 3, geoms: 9..10 } +provenance geometry 0..1: /World/BackWall +provenance geometry 1..2: /World/Floor +provenance geometry 2..3: /World/Plate3 +provenance geometry 3..4: /World/Plate2 +provenance geometry 4..5: /World/Plate1 +provenance geometry 5..6: /World/Plate0 +provenance geometry 6..7: /World/LightBig +provenance geometry 7..8: /World/LightMedium +provenance geometry 8..9: /World/LightSmall +provenance geometry 9..10: /World/LightTiny +provenance mesh: MeshOrigin { geom_id: 0, slot: 0, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 1, slot: 1, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 2, slot: 2, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 3, slot: 3, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 4, slot: 4, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 5, slot: 5, baked: true, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 2412432479217055457, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 1: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 5856995924472605639, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 2: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 6402661692534233033, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 1 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 3: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 13696518014408431155, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 2 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 4: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 15384334289683032877, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 3 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 5: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 6481752197548623432, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 4 }), placements: 1, shared: false, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/World/Cam"), cameras: ["/World/Cam"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/World/Cam"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/veach_mis_usda-70c995e092ab1d61-5.image b/crates/crust-core/tests/data/import_baselines/veach_mis_usda-70c995e092ab1d61-5.image new file mode 100644 index 000000000..96aff8304 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/veach_mis_usda-70c995e092ab1d61-5.image @@ -0,0 +1 @@ +960x540 16spp clamp-off c795c604ff2181ef diff --git a/crates/crust-core/tests/data/import_baselines/veach_mis_usda-70c995e092ab1d61-6.digest b/crates/crust-core/tests/data/import_baselines/veach_mis_usda-70c995e092ab1d61-6.digest new file mode 100644 index 000000000..6c2cda342 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/veach_mis_usda-70c995e092ab1d61-6.digest @@ -0,0 +1,61 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/World/Cam") +camera: Camera { origin: Vec3A(0.0, 4.0, 12.0), lower_left_corner: Vec3A(-8.494889, -2.4422622, 2.981679), horizontal: Vec3A(16.989779, -0.0, 0.0), vertical: Vec3A(0.0, 9.411561, -1.6595122), u: Vec3A(1.0, -0.0, 0.0), v: Vec3A(0.0, 0.98480767, -0.17364816), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: Some("/Render/settings") +settings: RenderSettings { samples_per_pixel: 128, max_depth: 8, width: 960, height: 540, region: PixelRect { x0: 0, y0: 0, x1: 960, y1: 540 }, min_samples_per_pixel: 32, variance_threshold: 0.0, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: BalanceMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 16.0, aperture: [20.955, 15.2908], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 10.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/veach_mis.usda"], invisible_overrides: Some(0) } +layer: $DIR/veach_mis.usda +lights: 4 +light 0: area name Some("/World/LightBig") lpe None pmf 0.25 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 1: area name Some("/World/LightMedium") lpe None pmf 0.25 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 2: area name Some("/World/LightSmall") lpe None pmf 0.25 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 3: area name Some("/World/LightTiny") lpe None pmf 0.25 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 10 geometries, PrimitiveBreakdown { triangles: 12, spheres: 4, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 12, spheres: 4, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:68d4160149942562 camera=2:68d4160149942562 shadow=2:68d4160149942562 indirect=2:68d4160149942562 +geom 1: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:c752315e4cdb3b45 camera=2:c752315e4cdb3b45 shadow=2:c752315e4cdb3b45 indirect=2:c752315e4cdb3b45 +geom 2: material #1 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:faaee6e5a0219d28 camera=2:faaee6e5a0219d28 shadow=2:faaee6e5a0219d28 indirect=2:faaee6e5a0219d28 +geom 3: material #2 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:55522c246731933e camera=2:55522c246731933e shadow=2:55522c246731933e indirect=2:55522c246731933e +geom 4: material #3 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:6a1c895a634c0162 camera=2:6a1c895a634c0162 shadow=2:6a1c895a634c0162 indirect=2:6a1c895a634c0162 +geom 5: material #4 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:d7e184c050c2f9e4 camera=2:d7e184c050c2f9e4 shadow=2:d7e184c050c2f9e4 indirect=2:d7e184c050c2f9e4 +geom 6: material #5 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:0072c0dd41a28391 camera=1:0072c0dd41a28391 shadow=1:0072c0dd41a28391 indirect=1:0072c0dd41a28391 +geom 7: material #6 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:25d33e066e9377ce camera=1:25d33e066e9377ce shadow=1:25d33e066e9377ce indirect=1:25d33e066e9377ce +geom 8: material #7 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:946393500a4eba02 camera=1:946393500a4eba02 shadow=1:946393500a4eba02 indirect=1:946393500a4eba02 +geom 9: material #8 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:c0b8734402fc2ca3 camera=1:c0b8734402fc2ca3 shadow=1:c0b8734402fc2ca3 indirect=1:c0b8734402fc2ca3 +provenance material /World/Materials/Backdrop: MaterialOrigin { slots: [0, 1], displaced: false } +provenance material /World/Materials/PlateRough: MaterialOrigin { slots: [3], displaced: false } +provenance material /World/Materials/PlateRoughest: MaterialOrigin { slots: [2], displaced: false } +provenance material /World/Materials/PlateSmooth: MaterialOrigin { slots: [4], displaced: false } +provenance material /World/Materials/PlateSmoothest: MaterialOrigin { slots: [5], displaced: false } +provenance light /World/LightBig: LightOrigin { index: 0, geoms: 6..7 } +provenance light /World/LightMedium: LightOrigin { index: 1, geoms: 7..8 } +provenance light /World/LightSmall: LightOrigin { index: 2, geoms: 8..9 } +provenance light /World/LightTiny: LightOrigin { index: 3, geoms: 9..10 } +provenance geometry 0..1: /World/BackWall +provenance geometry 1..2: /World/Floor +provenance geometry 2..3: /World/Plate3 +provenance geometry 3..4: /World/Plate2 +provenance geometry 4..5: /World/Plate1 +provenance geometry 5..6: /World/Plate0 +provenance geometry 6..7: /World/LightBig +provenance geometry 7..8: /World/LightMedium +provenance geometry 8..9: /World/LightSmall +provenance geometry 9..10: /World/LightTiny +provenance mesh: MeshOrigin { geom_id: 0, slot: 0, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 1, slot: 1, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 2, slot: 2, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 3, slot: 3, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 4, slot: 4, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 5, slot: 5, baked: true, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 2412432479217055457, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 1: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 5856995924472605639, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 2: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 6402661692534233033, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 1 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 3: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 13696518014408431155, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 2 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 4: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 15384334289683032877, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 3 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 5: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 6481752197548623432, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 4 }), placements: 1, shared: false, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/World/Cam"), cameras: ["/World/Cam"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/World/Cam"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/veach_mis_usda-70c995e092ab1d61-6.image b/crates/crust-core/tests/data/import_baselines/veach_mis_usda-70c995e092ab1d61-6.image new file mode 100644 index 000000000..96aff8304 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/veach_mis_usda-70c995e092ab1d61-6.image @@ -0,0 +1 @@ +960x540 16spp clamp-off c795c604ff2181ef diff --git a/crates/crust-core/tests/data/import_baselines/veach_mis_usda-70c995e092ab1d61-7.digest b/crates/crust-core/tests/data/import_baselines/veach_mis_usda-70c995e092ab1d61-7.digest new file mode 100644 index 000000000..6c2cda342 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/veach_mis_usda-70c995e092ab1d61-7.digest @@ -0,0 +1,61 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/World/Cam") +camera: Camera { origin: Vec3A(0.0, 4.0, 12.0), lower_left_corner: Vec3A(-8.494889, -2.4422622, 2.981679), horizontal: Vec3A(16.989779, -0.0, 0.0), vertical: Vec3A(0.0, 9.411561, -1.6595122), u: Vec3A(1.0, -0.0, 0.0), v: Vec3A(0.0, 0.98480767, -0.17364816), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: Some("/Render/settings") +settings: RenderSettings { samples_per_pixel: 128, max_depth: 8, width: 960, height: 540, region: PixelRect { x0: 0, y0: 0, x1: 960, y1: 540 }, min_samples_per_pixel: 32, variance_threshold: 0.0, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: BalanceMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 16.0, aperture: [20.955, 15.2908], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 10.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/veach_mis.usda"], invisible_overrides: Some(0) } +layer: $DIR/veach_mis.usda +lights: 4 +light 0: area name Some("/World/LightBig") lpe None pmf 0.25 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 1: area name Some("/World/LightMedium") lpe None pmf 0.25 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 2: area name Some("/World/LightSmall") lpe None pmf 0.25 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 3: area name Some("/World/LightTiny") lpe None pmf 0.25 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 10 geometries, PrimitiveBreakdown { triangles: 12, spheres: 4, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 12, spheres: 4, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:68d4160149942562 camera=2:68d4160149942562 shadow=2:68d4160149942562 indirect=2:68d4160149942562 +geom 1: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:c752315e4cdb3b45 camera=2:c752315e4cdb3b45 shadow=2:c752315e4cdb3b45 indirect=2:c752315e4cdb3b45 +geom 2: material #1 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:faaee6e5a0219d28 camera=2:faaee6e5a0219d28 shadow=2:faaee6e5a0219d28 indirect=2:faaee6e5a0219d28 +geom 3: material #2 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:55522c246731933e camera=2:55522c246731933e shadow=2:55522c246731933e indirect=2:55522c246731933e +geom 4: material #3 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:6a1c895a634c0162 camera=2:6a1c895a634c0162 shadow=2:6a1c895a634c0162 indirect=2:6a1c895a634c0162 +geom 5: material #4 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:d7e184c050c2f9e4 camera=2:d7e184c050c2f9e4 shadow=2:d7e184c050c2f9e4 indirect=2:d7e184c050c2f9e4 +geom 6: material #5 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:0072c0dd41a28391 camera=1:0072c0dd41a28391 shadow=1:0072c0dd41a28391 indirect=1:0072c0dd41a28391 +geom 7: material #6 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:25d33e066e9377ce camera=1:25d33e066e9377ce shadow=1:25d33e066e9377ce indirect=1:25d33e066e9377ce +geom 8: material #7 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:946393500a4eba02 camera=1:946393500a4eba02 shadow=1:946393500a4eba02 indirect=1:946393500a4eba02 +geom 9: material #8 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:c0b8734402fc2ca3 camera=1:c0b8734402fc2ca3 shadow=1:c0b8734402fc2ca3 indirect=1:c0b8734402fc2ca3 +provenance material /World/Materials/Backdrop: MaterialOrigin { slots: [0, 1], displaced: false } +provenance material /World/Materials/PlateRough: MaterialOrigin { slots: [3], displaced: false } +provenance material /World/Materials/PlateRoughest: MaterialOrigin { slots: [2], displaced: false } +provenance material /World/Materials/PlateSmooth: MaterialOrigin { slots: [4], displaced: false } +provenance material /World/Materials/PlateSmoothest: MaterialOrigin { slots: [5], displaced: false } +provenance light /World/LightBig: LightOrigin { index: 0, geoms: 6..7 } +provenance light /World/LightMedium: LightOrigin { index: 1, geoms: 7..8 } +provenance light /World/LightSmall: LightOrigin { index: 2, geoms: 8..9 } +provenance light /World/LightTiny: LightOrigin { index: 3, geoms: 9..10 } +provenance geometry 0..1: /World/BackWall +provenance geometry 1..2: /World/Floor +provenance geometry 2..3: /World/Plate3 +provenance geometry 3..4: /World/Plate2 +provenance geometry 4..5: /World/Plate1 +provenance geometry 5..6: /World/Plate0 +provenance geometry 6..7: /World/LightBig +provenance geometry 7..8: /World/LightMedium +provenance geometry 8..9: /World/LightSmall +provenance geometry 9..10: /World/LightTiny +provenance mesh: MeshOrigin { geom_id: 0, slot: 0, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 1, slot: 1, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 2, slot: 2, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 3, slot: 3, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 4, slot: 4, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 5, slot: 5, baked: true, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 2412432479217055457, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 1: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 5856995924472605639, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 2: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 6402661692534233033, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 1 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 3: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 13696518014408431155, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 2 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 4: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 15384334289683032877, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 3 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 5: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 6481752197548623432, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 4 }), placements: 1, shared: false, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/World/Cam"), cameras: ["/World/Cam"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/World/Cam"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/veach_mis_usda-70c995e092ab1d61-7.image b/crates/crust-core/tests/data/import_baselines/veach_mis_usda-70c995e092ab1d61-7.image new file mode 100644 index 000000000..96aff8304 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/veach_mis_usda-70c995e092ab1d61-7.image @@ -0,0 +1 @@ +960x540 16spp clamp-off c795c604ff2181ef diff --git a/crates/crust-core/tests/data/import_baselines/veach_mis_usda-70c995e092ab1d61-8.digest b/crates/crust-core/tests/data/import_baselines/veach_mis_usda-70c995e092ab1d61-8.digest new file mode 100644 index 000000000..6c2cda342 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/veach_mis_usda-70c995e092ab1d61-8.digest @@ -0,0 +1,61 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/World/Cam") +camera: Camera { origin: Vec3A(0.0, 4.0, 12.0), lower_left_corner: Vec3A(-8.494889, -2.4422622, 2.981679), horizontal: Vec3A(16.989779, -0.0, 0.0), vertical: Vec3A(0.0, 9.411561, -1.6595122), u: Vec3A(1.0, -0.0, 0.0), v: Vec3A(0.0, 0.98480767, -0.17364816), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: Some("/Render/settings") +settings: RenderSettings { samples_per_pixel: 128, max_depth: 8, width: 960, height: 540, region: PixelRect { x0: 0, y0: 0, x1: 960, y1: 540 }, min_samples_per_pixel: 32, variance_threshold: 0.0, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: BalanceMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 16.0, aperture: [20.955, 15.2908], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 10.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/veach_mis.usda"], invisible_overrides: Some(0) } +layer: $DIR/veach_mis.usda +lights: 4 +light 0: area name Some("/World/LightBig") lpe None pmf 0.25 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 1: area name Some("/World/LightMedium") lpe None pmf 0.25 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 2: area name Some("/World/LightSmall") lpe None pmf 0.25 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 3: area name Some("/World/LightTiny") lpe None pmf 0.25 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 10 geometries, PrimitiveBreakdown { triangles: 12, spheres: 4, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 12, spheres: 4, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:68d4160149942562 camera=2:68d4160149942562 shadow=2:68d4160149942562 indirect=2:68d4160149942562 +geom 1: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:c752315e4cdb3b45 camera=2:c752315e4cdb3b45 shadow=2:c752315e4cdb3b45 indirect=2:c752315e4cdb3b45 +geom 2: material #1 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:faaee6e5a0219d28 camera=2:faaee6e5a0219d28 shadow=2:faaee6e5a0219d28 indirect=2:faaee6e5a0219d28 +geom 3: material #2 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:55522c246731933e camera=2:55522c246731933e shadow=2:55522c246731933e indirect=2:55522c246731933e +geom 4: material #3 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:6a1c895a634c0162 camera=2:6a1c895a634c0162 shadow=2:6a1c895a634c0162 indirect=2:6a1c895a634c0162 +geom 5: material #4 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:d7e184c050c2f9e4 camera=2:d7e184c050c2f9e4 shadow=2:d7e184c050c2f9e4 indirect=2:d7e184c050c2f9e4 +geom 6: material #5 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:0072c0dd41a28391 camera=1:0072c0dd41a28391 shadow=1:0072c0dd41a28391 indirect=1:0072c0dd41a28391 +geom 7: material #6 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:25d33e066e9377ce camera=1:25d33e066e9377ce shadow=1:25d33e066e9377ce indirect=1:25d33e066e9377ce +geom 8: material #7 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:946393500a4eba02 camera=1:946393500a4eba02 shadow=1:946393500a4eba02 indirect=1:946393500a4eba02 +geom 9: material #8 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:c0b8734402fc2ca3 camera=1:c0b8734402fc2ca3 shadow=1:c0b8734402fc2ca3 indirect=1:c0b8734402fc2ca3 +provenance material /World/Materials/Backdrop: MaterialOrigin { slots: [0, 1], displaced: false } +provenance material /World/Materials/PlateRough: MaterialOrigin { slots: [3], displaced: false } +provenance material /World/Materials/PlateRoughest: MaterialOrigin { slots: [2], displaced: false } +provenance material /World/Materials/PlateSmooth: MaterialOrigin { slots: [4], displaced: false } +provenance material /World/Materials/PlateSmoothest: MaterialOrigin { slots: [5], displaced: false } +provenance light /World/LightBig: LightOrigin { index: 0, geoms: 6..7 } +provenance light /World/LightMedium: LightOrigin { index: 1, geoms: 7..8 } +provenance light /World/LightSmall: LightOrigin { index: 2, geoms: 8..9 } +provenance light /World/LightTiny: LightOrigin { index: 3, geoms: 9..10 } +provenance geometry 0..1: /World/BackWall +provenance geometry 1..2: /World/Floor +provenance geometry 2..3: /World/Plate3 +provenance geometry 3..4: /World/Plate2 +provenance geometry 4..5: /World/Plate1 +provenance geometry 5..6: /World/Plate0 +provenance geometry 6..7: /World/LightBig +provenance geometry 7..8: /World/LightMedium +provenance geometry 8..9: /World/LightSmall +provenance geometry 9..10: /World/LightTiny +provenance mesh: MeshOrigin { geom_id: 0, slot: 0, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 1, slot: 1, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 2, slot: 2, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 3, slot: 3, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 4, slot: 4, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 5, slot: 5, baked: true, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 2412432479217055457, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 1: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 5856995924472605639, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 2: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 6402661692534233033, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 1 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 3: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 13696518014408431155, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 2 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 4: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 15384334289683032877, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 3 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 5: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 6481752197548623432, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 4 }), placements: 1, shared: false, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/World/Cam"), cameras: ["/World/Cam"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/World/Cam"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/veach_mis_usda-70c995e092ab1d61-8.image b/crates/crust-core/tests/data/import_baselines/veach_mis_usda-70c995e092ab1d61-8.image new file mode 100644 index 000000000..96aff8304 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/veach_mis_usda-70c995e092ab1d61-8.image @@ -0,0 +1 @@ +960x540 16spp clamp-off c795c604ff2181ef diff --git a/crates/crust-core/tests/data/import_baselines/veach_mis_usda-70c995e092ab1d61-9.digest b/crates/crust-core/tests/data/import_baselines/veach_mis_usda-70c995e092ab1d61-9.digest new file mode 100644 index 000000000..6c2cda342 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/veach_mis_usda-70c995e092ab1d61-9.digest @@ -0,0 +1,61 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/World/Cam") +camera: Camera { origin: Vec3A(0.0, 4.0, 12.0), lower_left_corner: Vec3A(-8.494889, -2.4422622, 2.981679), horizontal: Vec3A(16.989779, -0.0, 0.0), vertical: Vec3A(0.0, 9.411561, -1.6595122), u: Vec3A(1.0, -0.0, 0.0), v: Vec3A(0.0, 0.98480767, -0.17364816), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: Some("/Render/settings") +settings: RenderSettings { samples_per_pixel: 128, max_depth: 8, width: 960, height: 540, region: PixelRect { x0: 0, y0: 0, x1: 960, y1: 540 }, min_samples_per_pixel: 32, variance_threshold: 0.0, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: BalanceMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 16.0, aperture: [20.955, 15.2908], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 10.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/veach_mis.usda"], invisible_overrides: Some(0) } +layer: $DIR/veach_mis.usda +lights: 4 +light 0: area name Some("/World/LightBig") lpe None pmf 0.25 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 1: area name Some("/World/LightMedium") lpe None pmf 0.25 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 2: area name Some("/World/LightSmall") lpe None pmf 0.25 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 3: area name Some("/World/LightTiny") lpe None pmf 0.25 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 10 geometries, PrimitiveBreakdown { triangles: 12, spheres: 4, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 12, spheres: 4, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:68d4160149942562 camera=2:68d4160149942562 shadow=2:68d4160149942562 indirect=2:68d4160149942562 +geom 1: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:c752315e4cdb3b45 camera=2:c752315e4cdb3b45 shadow=2:c752315e4cdb3b45 indirect=2:c752315e4cdb3b45 +geom 2: material #1 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:faaee6e5a0219d28 camera=2:faaee6e5a0219d28 shadow=2:faaee6e5a0219d28 indirect=2:faaee6e5a0219d28 +geom 3: material #2 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:55522c246731933e camera=2:55522c246731933e shadow=2:55522c246731933e indirect=2:55522c246731933e +geom 4: material #3 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:6a1c895a634c0162 camera=2:6a1c895a634c0162 shadow=2:6a1c895a634c0162 indirect=2:6a1c895a634c0162 +geom 5: material #4 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:d7e184c050c2f9e4 camera=2:d7e184c050c2f9e4 shadow=2:d7e184c050c2f9e4 indirect=2:d7e184c050c2f9e4 +geom 6: material #5 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:0072c0dd41a28391 camera=1:0072c0dd41a28391 shadow=1:0072c0dd41a28391 indirect=1:0072c0dd41a28391 +geom 7: material #6 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:25d33e066e9377ce camera=1:25d33e066e9377ce shadow=1:25d33e066e9377ce indirect=1:25d33e066e9377ce +geom 8: material #7 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:946393500a4eba02 camera=1:946393500a4eba02 shadow=1:946393500a4eba02 indirect=1:946393500a4eba02 +geom 9: material #8 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:c0b8734402fc2ca3 camera=1:c0b8734402fc2ca3 shadow=1:c0b8734402fc2ca3 indirect=1:c0b8734402fc2ca3 +provenance material /World/Materials/Backdrop: MaterialOrigin { slots: [0, 1], displaced: false } +provenance material /World/Materials/PlateRough: MaterialOrigin { slots: [3], displaced: false } +provenance material /World/Materials/PlateRoughest: MaterialOrigin { slots: [2], displaced: false } +provenance material /World/Materials/PlateSmooth: MaterialOrigin { slots: [4], displaced: false } +provenance material /World/Materials/PlateSmoothest: MaterialOrigin { slots: [5], displaced: false } +provenance light /World/LightBig: LightOrigin { index: 0, geoms: 6..7 } +provenance light /World/LightMedium: LightOrigin { index: 1, geoms: 7..8 } +provenance light /World/LightSmall: LightOrigin { index: 2, geoms: 8..9 } +provenance light /World/LightTiny: LightOrigin { index: 3, geoms: 9..10 } +provenance geometry 0..1: /World/BackWall +provenance geometry 1..2: /World/Floor +provenance geometry 2..3: /World/Plate3 +provenance geometry 3..4: /World/Plate2 +provenance geometry 4..5: /World/Plate1 +provenance geometry 5..6: /World/Plate0 +provenance geometry 6..7: /World/LightBig +provenance geometry 7..8: /World/LightMedium +provenance geometry 8..9: /World/LightSmall +provenance geometry 9..10: /World/LightTiny +provenance mesh: MeshOrigin { geom_id: 0, slot: 0, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 1, slot: 1, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 2, slot: 2, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 3, slot: 3, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 4, slot: 4, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 5, slot: 5, baked: true, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 2412432479217055457, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 1: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 5856995924472605639, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 2: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 6402661692534233033, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 1 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 3: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 13696518014408431155, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 2 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 4: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 15384334289683032877, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 3 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 5: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 6481752197548623432, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 4 }), placements: 1, shared: false, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/World/Cam"), cameras: ["/World/Cam"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/World/Cam"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/veach_mis_usda-70c995e092ab1d61-9.image b/crates/crust-core/tests/data/import_baselines/veach_mis_usda-70c995e092ab1d61-9.image new file mode 100644 index 000000000..96aff8304 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/veach_mis_usda-70c995e092ab1d61-9.image @@ -0,0 +1 @@ +960x540 16spp clamp-off c795c604ff2181ef diff --git a/crates/crust-core/tests/data/import_baselines/veach_mis_usda-7b2ec235dd7d06ba-1.digest b/crates/crust-core/tests/data/import_baselines/veach_mis_usda-7b2ec235dd7d06ba-1.digest new file mode 100644 index 000000000..6c2cda342 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/veach_mis_usda-7b2ec235dd7d06ba-1.digest @@ -0,0 +1,61 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/World/Cam") +camera: Camera { origin: Vec3A(0.0, 4.0, 12.0), lower_left_corner: Vec3A(-8.494889, -2.4422622, 2.981679), horizontal: Vec3A(16.989779, -0.0, 0.0), vertical: Vec3A(0.0, 9.411561, -1.6595122), u: Vec3A(1.0, -0.0, 0.0), v: Vec3A(0.0, 0.98480767, -0.17364816), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: Some("/Render/settings") +settings: RenderSettings { samples_per_pixel: 128, max_depth: 8, width: 960, height: 540, region: PixelRect { x0: 0, y0: 0, x1: 960, y1: 540 }, min_samples_per_pixel: 32, variance_threshold: 0.0, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: BalanceMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 16.0, aperture: [20.955, 15.2908], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 10.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/veach_mis.usda"], invisible_overrides: Some(0) } +layer: $DIR/veach_mis.usda +lights: 4 +light 0: area name Some("/World/LightBig") lpe None pmf 0.25 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 1: area name Some("/World/LightMedium") lpe None pmf 0.25 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 2: area name Some("/World/LightSmall") lpe None pmf 0.25 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 3: area name Some("/World/LightTiny") lpe None pmf 0.25 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 10 geometries, PrimitiveBreakdown { triangles: 12, spheres: 4, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 12, spheres: 4, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:68d4160149942562 camera=2:68d4160149942562 shadow=2:68d4160149942562 indirect=2:68d4160149942562 +geom 1: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:c752315e4cdb3b45 camera=2:c752315e4cdb3b45 shadow=2:c752315e4cdb3b45 indirect=2:c752315e4cdb3b45 +geom 2: material #1 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:faaee6e5a0219d28 camera=2:faaee6e5a0219d28 shadow=2:faaee6e5a0219d28 indirect=2:faaee6e5a0219d28 +geom 3: material #2 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:55522c246731933e camera=2:55522c246731933e shadow=2:55522c246731933e indirect=2:55522c246731933e +geom 4: material #3 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:6a1c895a634c0162 camera=2:6a1c895a634c0162 shadow=2:6a1c895a634c0162 indirect=2:6a1c895a634c0162 +geom 5: material #4 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:d7e184c050c2f9e4 camera=2:d7e184c050c2f9e4 shadow=2:d7e184c050c2f9e4 indirect=2:d7e184c050c2f9e4 +geom 6: material #5 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:0072c0dd41a28391 camera=1:0072c0dd41a28391 shadow=1:0072c0dd41a28391 indirect=1:0072c0dd41a28391 +geom 7: material #6 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:25d33e066e9377ce camera=1:25d33e066e9377ce shadow=1:25d33e066e9377ce indirect=1:25d33e066e9377ce +geom 8: material #7 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:946393500a4eba02 camera=1:946393500a4eba02 shadow=1:946393500a4eba02 indirect=1:946393500a4eba02 +geom 9: material #8 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:c0b8734402fc2ca3 camera=1:c0b8734402fc2ca3 shadow=1:c0b8734402fc2ca3 indirect=1:c0b8734402fc2ca3 +provenance material /World/Materials/Backdrop: MaterialOrigin { slots: [0, 1], displaced: false } +provenance material /World/Materials/PlateRough: MaterialOrigin { slots: [3], displaced: false } +provenance material /World/Materials/PlateRoughest: MaterialOrigin { slots: [2], displaced: false } +provenance material /World/Materials/PlateSmooth: MaterialOrigin { slots: [4], displaced: false } +provenance material /World/Materials/PlateSmoothest: MaterialOrigin { slots: [5], displaced: false } +provenance light /World/LightBig: LightOrigin { index: 0, geoms: 6..7 } +provenance light /World/LightMedium: LightOrigin { index: 1, geoms: 7..8 } +provenance light /World/LightSmall: LightOrigin { index: 2, geoms: 8..9 } +provenance light /World/LightTiny: LightOrigin { index: 3, geoms: 9..10 } +provenance geometry 0..1: /World/BackWall +provenance geometry 1..2: /World/Floor +provenance geometry 2..3: /World/Plate3 +provenance geometry 3..4: /World/Plate2 +provenance geometry 4..5: /World/Plate1 +provenance geometry 5..6: /World/Plate0 +provenance geometry 6..7: /World/LightBig +provenance geometry 7..8: /World/LightMedium +provenance geometry 8..9: /World/LightSmall +provenance geometry 9..10: /World/LightTiny +provenance mesh: MeshOrigin { geom_id: 0, slot: 0, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 1, slot: 1, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 2, slot: 2, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 3, slot: 3, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 4, slot: 4, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 5, slot: 5, baked: true, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 2412432479217055457, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 1: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 5856995924472605639, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 2: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 6402661692534233033, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 1 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 3: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 13696518014408431155, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 2 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 4: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 15384334289683032877, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 3 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 5: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 6481752197548623432, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 4 }), placements: 1, shared: false, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/World/Cam"), cameras: ["/World/Cam"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/World/Cam"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/veach_mis_usda-7b2ec235dd7d06ba-1.image b/crates/crust-core/tests/data/import_baselines/veach_mis_usda-7b2ec235dd7d06ba-1.image new file mode 100644 index 000000000..96aff8304 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/veach_mis_usda-7b2ec235dd7d06ba-1.image @@ -0,0 +1 @@ +960x540 16spp clamp-off c795c604ff2181ef diff --git a/crates/crust-core/tests/data/import_baselines/veach_mis_usda-8251e3de3f3f6069-1.digest b/crates/crust-core/tests/data/import_baselines/veach_mis_usda-8251e3de3f3f6069-1.digest new file mode 100644 index 000000000..6c2cda342 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/veach_mis_usda-8251e3de3f3f6069-1.digest @@ -0,0 +1,61 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/World/Cam") +camera: Camera { origin: Vec3A(0.0, 4.0, 12.0), lower_left_corner: Vec3A(-8.494889, -2.4422622, 2.981679), horizontal: Vec3A(16.989779, -0.0, 0.0), vertical: Vec3A(0.0, 9.411561, -1.6595122), u: Vec3A(1.0, -0.0, 0.0), v: Vec3A(0.0, 0.98480767, -0.17364816), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: Some("/Render/settings") +settings: RenderSettings { samples_per_pixel: 128, max_depth: 8, width: 960, height: 540, region: PixelRect { x0: 0, y0: 0, x1: 960, y1: 540 }, min_samples_per_pixel: 32, variance_threshold: 0.0, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: BalanceMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 16.0, aperture: [20.955, 15.2908], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 10.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/veach_mis.usda"], invisible_overrides: Some(0) } +layer: $DIR/veach_mis.usda +lights: 4 +light 0: area name Some("/World/LightBig") lpe None pmf 0.25 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 1: area name Some("/World/LightMedium") lpe None pmf 0.25 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 2: area name Some("/World/LightSmall") lpe None pmf 0.25 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 3: area name Some("/World/LightTiny") lpe None pmf 0.25 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 10 geometries, PrimitiveBreakdown { triangles: 12, spheres: 4, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 12, spheres: 4, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:68d4160149942562 camera=2:68d4160149942562 shadow=2:68d4160149942562 indirect=2:68d4160149942562 +geom 1: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:c752315e4cdb3b45 camera=2:c752315e4cdb3b45 shadow=2:c752315e4cdb3b45 indirect=2:c752315e4cdb3b45 +geom 2: material #1 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:faaee6e5a0219d28 camera=2:faaee6e5a0219d28 shadow=2:faaee6e5a0219d28 indirect=2:faaee6e5a0219d28 +geom 3: material #2 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:55522c246731933e camera=2:55522c246731933e shadow=2:55522c246731933e indirect=2:55522c246731933e +geom 4: material #3 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:6a1c895a634c0162 camera=2:6a1c895a634c0162 shadow=2:6a1c895a634c0162 indirect=2:6a1c895a634c0162 +geom 5: material #4 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:d7e184c050c2f9e4 camera=2:d7e184c050c2f9e4 shadow=2:d7e184c050c2f9e4 indirect=2:d7e184c050c2f9e4 +geom 6: material #5 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:0072c0dd41a28391 camera=1:0072c0dd41a28391 shadow=1:0072c0dd41a28391 indirect=1:0072c0dd41a28391 +geom 7: material #6 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:25d33e066e9377ce camera=1:25d33e066e9377ce shadow=1:25d33e066e9377ce indirect=1:25d33e066e9377ce +geom 8: material #7 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:946393500a4eba02 camera=1:946393500a4eba02 shadow=1:946393500a4eba02 indirect=1:946393500a4eba02 +geom 9: material #8 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:c0b8734402fc2ca3 camera=1:c0b8734402fc2ca3 shadow=1:c0b8734402fc2ca3 indirect=1:c0b8734402fc2ca3 +provenance material /World/Materials/Backdrop: MaterialOrigin { slots: [0, 1], displaced: false } +provenance material /World/Materials/PlateRough: MaterialOrigin { slots: [3], displaced: false } +provenance material /World/Materials/PlateRoughest: MaterialOrigin { slots: [2], displaced: false } +provenance material /World/Materials/PlateSmooth: MaterialOrigin { slots: [4], displaced: false } +provenance material /World/Materials/PlateSmoothest: MaterialOrigin { slots: [5], displaced: false } +provenance light /World/LightBig: LightOrigin { index: 0, geoms: 6..7 } +provenance light /World/LightMedium: LightOrigin { index: 1, geoms: 7..8 } +provenance light /World/LightSmall: LightOrigin { index: 2, geoms: 8..9 } +provenance light /World/LightTiny: LightOrigin { index: 3, geoms: 9..10 } +provenance geometry 0..1: /World/BackWall +provenance geometry 1..2: /World/Floor +provenance geometry 2..3: /World/Plate3 +provenance geometry 3..4: /World/Plate2 +provenance geometry 4..5: /World/Plate1 +provenance geometry 5..6: /World/Plate0 +provenance geometry 6..7: /World/LightBig +provenance geometry 7..8: /World/LightMedium +provenance geometry 8..9: /World/LightSmall +provenance geometry 9..10: /World/LightTiny +provenance mesh: MeshOrigin { geom_id: 0, slot: 0, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 1, slot: 1, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 2, slot: 2, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 3, slot: 3, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 4, slot: 4, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 5, slot: 5, baked: true, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 2412432479217055457, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 1: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 5856995924472605639, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 2: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 6402661692534233033, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 1 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 3: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 13696518014408431155, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 2 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 4: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 15384334289683032877, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 3 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 5: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 6481752197548623432, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 4 }), placements: 1, shared: false, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/World/Cam"), cameras: ["/World/Cam"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/World/Cam"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/veach_mis_usda-8251e3de3f3f6069-1.image b/crates/crust-core/tests/data/import_baselines/veach_mis_usda-8251e3de3f3f6069-1.image new file mode 100644 index 000000000..96aff8304 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/veach_mis_usda-8251e3de3f3f6069-1.image @@ -0,0 +1 @@ +960x540 16spp clamp-off c795c604ff2181ef diff --git a/crates/crust-core/tests/data/import_baselines/veach_mis_usda-8251e3de3f3f6069-10.digest b/crates/crust-core/tests/data/import_baselines/veach_mis_usda-8251e3de3f3f6069-10.digest new file mode 100644 index 000000000..6c2cda342 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/veach_mis_usda-8251e3de3f3f6069-10.digest @@ -0,0 +1,61 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/World/Cam") +camera: Camera { origin: Vec3A(0.0, 4.0, 12.0), lower_left_corner: Vec3A(-8.494889, -2.4422622, 2.981679), horizontal: Vec3A(16.989779, -0.0, 0.0), vertical: Vec3A(0.0, 9.411561, -1.6595122), u: Vec3A(1.0, -0.0, 0.0), v: Vec3A(0.0, 0.98480767, -0.17364816), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: Some("/Render/settings") +settings: RenderSettings { samples_per_pixel: 128, max_depth: 8, width: 960, height: 540, region: PixelRect { x0: 0, y0: 0, x1: 960, y1: 540 }, min_samples_per_pixel: 32, variance_threshold: 0.0, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: BalanceMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 16.0, aperture: [20.955, 15.2908], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 10.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/veach_mis.usda"], invisible_overrides: Some(0) } +layer: $DIR/veach_mis.usda +lights: 4 +light 0: area name Some("/World/LightBig") lpe None pmf 0.25 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 1: area name Some("/World/LightMedium") lpe None pmf 0.25 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 2: area name Some("/World/LightSmall") lpe None pmf 0.25 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 3: area name Some("/World/LightTiny") lpe None pmf 0.25 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 10 geometries, PrimitiveBreakdown { triangles: 12, spheres: 4, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 12, spheres: 4, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:68d4160149942562 camera=2:68d4160149942562 shadow=2:68d4160149942562 indirect=2:68d4160149942562 +geom 1: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:c752315e4cdb3b45 camera=2:c752315e4cdb3b45 shadow=2:c752315e4cdb3b45 indirect=2:c752315e4cdb3b45 +geom 2: material #1 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:faaee6e5a0219d28 camera=2:faaee6e5a0219d28 shadow=2:faaee6e5a0219d28 indirect=2:faaee6e5a0219d28 +geom 3: material #2 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:55522c246731933e camera=2:55522c246731933e shadow=2:55522c246731933e indirect=2:55522c246731933e +geom 4: material #3 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:6a1c895a634c0162 camera=2:6a1c895a634c0162 shadow=2:6a1c895a634c0162 indirect=2:6a1c895a634c0162 +geom 5: material #4 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:d7e184c050c2f9e4 camera=2:d7e184c050c2f9e4 shadow=2:d7e184c050c2f9e4 indirect=2:d7e184c050c2f9e4 +geom 6: material #5 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:0072c0dd41a28391 camera=1:0072c0dd41a28391 shadow=1:0072c0dd41a28391 indirect=1:0072c0dd41a28391 +geom 7: material #6 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:25d33e066e9377ce camera=1:25d33e066e9377ce shadow=1:25d33e066e9377ce indirect=1:25d33e066e9377ce +geom 8: material #7 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:946393500a4eba02 camera=1:946393500a4eba02 shadow=1:946393500a4eba02 indirect=1:946393500a4eba02 +geom 9: material #8 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:c0b8734402fc2ca3 camera=1:c0b8734402fc2ca3 shadow=1:c0b8734402fc2ca3 indirect=1:c0b8734402fc2ca3 +provenance material /World/Materials/Backdrop: MaterialOrigin { slots: [0, 1], displaced: false } +provenance material /World/Materials/PlateRough: MaterialOrigin { slots: [3], displaced: false } +provenance material /World/Materials/PlateRoughest: MaterialOrigin { slots: [2], displaced: false } +provenance material /World/Materials/PlateSmooth: MaterialOrigin { slots: [4], displaced: false } +provenance material /World/Materials/PlateSmoothest: MaterialOrigin { slots: [5], displaced: false } +provenance light /World/LightBig: LightOrigin { index: 0, geoms: 6..7 } +provenance light /World/LightMedium: LightOrigin { index: 1, geoms: 7..8 } +provenance light /World/LightSmall: LightOrigin { index: 2, geoms: 8..9 } +provenance light /World/LightTiny: LightOrigin { index: 3, geoms: 9..10 } +provenance geometry 0..1: /World/BackWall +provenance geometry 1..2: /World/Floor +provenance geometry 2..3: /World/Plate3 +provenance geometry 3..4: /World/Plate2 +provenance geometry 4..5: /World/Plate1 +provenance geometry 5..6: /World/Plate0 +provenance geometry 6..7: /World/LightBig +provenance geometry 7..8: /World/LightMedium +provenance geometry 8..9: /World/LightSmall +provenance geometry 9..10: /World/LightTiny +provenance mesh: MeshOrigin { geom_id: 0, slot: 0, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 1, slot: 1, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 2, slot: 2, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 3, slot: 3, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 4, slot: 4, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 5, slot: 5, baked: true, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 2412432479217055457, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 1: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 5856995924472605639, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 2: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 6402661692534233033, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 1 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 3: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 13696518014408431155, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 2 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 4: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 15384334289683032877, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 3 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 5: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 6481752197548623432, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 4 }), placements: 1, shared: false, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/World/Cam"), cameras: ["/World/Cam"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/World/Cam"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/veach_mis_usda-8251e3de3f3f6069-10.image b/crates/crust-core/tests/data/import_baselines/veach_mis_usda-8251e3de3f3f6069-10.image new file mode 100644 index 000000000..96aff8304 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/veach_mis_usda-8251e3de3f3f6069-10.image @@ -0,0 +1 @@ +960x540 16spp clamp-off c795c604ff2181ef diff --git a/crates/crust-core/tests/data/import_baselines/veach_mis_usda-8251e3de3f3f6069-11.digest b/crates/crust-core/tests/data/import_baselines/veach_mis_usda-8251e3de3f3f6069-11.digest new file mode 100644 index 000000000..6c2cda342 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/veach_mis_usda-8251e3de3f3f6069-11.digest @@ -0,0 +1,61 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/World/Cam") +camera: Camera { origin: Vec3A(0.0, 4.0, 12.0), lower_left_corner: Vec3A(-8.494889, -2.4422622, 2.981679), horizontal: Vec3A(16.989779, -0.0, 0.0), vertical: Vec3A(0.0, 9.411561, -1.6595122), u: Vec3A(1.0, -0.0, 0.0), v: Vec3A(0.0, 0.98480767, -0.17364816), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: Some("/Render/settings") +settings: RenderSettings { samples_per_pixel: 128, max_depth: 8, width: 960, height: 540, region: PixelRect { x0: 0, y0: 0, x1: 960, y1: 540 }, min_samples_per_pixel: 32, variance_threshold: 0.0, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: BalanceMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 16.0, aperture: [20.955, 15.2908], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 10.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/veach_mis.usda"], invisible_overrides: Some(0) } +layer: $DIR/veach_mis.usda +lights: 4 +light 0: area name Some("/World/LightBig") lpe None pmf 0.25 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 1: area name Some("/World/LightMedium") lpe None pmf 0.25 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 2: area name Some("/World/LightSmall") lpe None pmf 0.25 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 3: area name Some("/World/LightTiny") lpe None pmf 0.25 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 10 geometries, PrimitiveBreakdown { triangles: 12, spheres: 4, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 12, spheres: 4, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:68d4160149942562 camera=2:68d4160149942562 shadow=2:68d4160149942562 indirect=2:68d4160149942562 +geom 1: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:c752315e4cdb3b45 camera=2:c752315e4cdb3b45 shadow=2:c752315e4cdb3b45 indirect=2:c752315e4cdb3b45 +geom 2: material #1 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:faaee6e5a0219d28 camera=2:faaee6e5a0219d28 shadow=2:faaee6e5a0219d28 indirect=2:faaee6e5a0219d28 +geom 3: material #2 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:55522c246731933e camera=2:55522c246731933e shadow=2:55522c246731933e indirect=2:55522c246731933e +geom 4: material #3 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:6a1c895a634c0162 camera=2:6a1c895a634c0162 shadow=2:6a1c895a634c0162 indirect=2:6a1c895a634c0162 +geom 5: material #4 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:d7e184c050c2f9e4 camera=2:d7e184c050c2f9e4 shadow=2:d7e184c050c2f9e4 indirect=2:d7e184c050c2f9e4 +geom 6: material #5 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:0072c0dd41a28391 camera=1:0072c0dd41a28391 shadow=1:0072c0dd41a28391 indirect=1:0072c0dd41a28391 +geom 7: material #6 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:25d33e066e9377ce camera=1:25d33e066e9377ce shadow=1:25d33e066e9377ce indirect=1:25d33e066e9377ce +geom 8: material #7 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:946393500a4eba02 camera=1:946393500a4eba02 shadow=1:946393500a4eba02 indirect=1:946393500a4eba02 +geom 9: material #8 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:c0b8734402fc2ca3 camera=1:c0b8734402fc2ca3 shadow=1:c0b8734402fc2ca3 indirect=1:c0b8734402fc2ca3 +provenance material /World/Materials/Backdrop: MaterialOrigin { slots: [0, 1], displaced: false } +provenance material /World/Materials/PlateRough: MaterialOrigin { slots: [3], displaced: false } +provenance material /World/Materials/PlateRoughest: MaterialOrigin { slots: [2], displaced: false } +provenance material /World/Materials/PlateSmooth: MaterialOrigin { slots: [4], displaced: false } +provenance material /World/Materials/PlateSmoothest: MaterialOrigin { slots: [5], displaced: false } +provenance light /World/LightBig: LightOrigin { index: 0, geoms: 6..7 } +provenance light /World/LightMedium: LightOrigin { index: 1, geoms: 7..8 } +provenance light /World/LightSmall: LightOrigin { index: 2, geoms: 8..9 } +provenance light /World/LightTiny: LightOrigin { index: 3, geoms: 9..10 } +provenance geometry 0..1: /World/BackWall +provenance geometry 1..2: /World/Floor +provenance geometry 2..3: /World/Plate3 +provenance geometry 3..4: /World/Plate2 +provenance geometry 4..5: /World/Plate1 +provenance geometry 5..6: /World/Plate0 +provenance geometry 6..7: /World/LightBig +provenance geometry 7..8: /World/LightMedium +provenance geometry 8..9: /World/LightSmall +provenance geometry 9..10: /World/LightTiny +provenance mesh: MeshOrigin { geom_id: 0, slot: 0, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 1, slot: 1, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 2, slot: 2, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 3, slot: 3, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 4, slot: 4, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 5, slot: 5, baked: true, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 2412432479217055457, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 1: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 5856995924472605639, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 2: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 6402661692534233033, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 1 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 3: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 13696518014408431155, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 2 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 4: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 15384334289683032877, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 3 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 5: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 6481752197548623432, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 4 }), placements: 1, shared: false, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/World/Cam"), cameras: ["/World/Cam"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/World/Cam"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/veach_mis_usda-8251e3de3f3f6069-11.image b/crates/crust-core/tests/data/import_baselines/veach_mis_usda-8251e3de3f3f6069-11.image new file mode 100644 index 000000000..96aff8304 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/veach_mis_usda-8251e3de3f3f6069-11.image @@ -0,0 +1 @@ +960x540 16spp clamp-off c795c604ff2181ef diff --git a/crates/crust-core/tests/data/import_baselines/veach_mis_usda-8251e3de3f3f6069-2.digest b/crates/crust-core/tests/data/import_baselines/veach_mis_usda-8251e3de3f3f6069-2.digest new file mode 100644 index 000000000..6c2cda342 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/veach_mis_usda-8251e3de3f3f6069-2.digest @@ -0,0 +1,61 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/World/Cam") +camera: Camera { origin: Vec3A(0.0, 4.0, 12.0), lower_left_corner: Vec3A(-8.494889, -2.4422622, 2.981679), horizontal: Vec3A(16.989779, -0.0, 0.0), vertical: Vec3A(0.0, 9.411561, -1.6595122), u: Vec3A(1.0, -0.0, 0.0), v: Vec3A(0.0, 0.98480767, -0.17364816), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: Some("/Render/settings") +settings: RenderSettings { samples_per_pixel: 128, max_depth: 8, width: 960, height: 540, region: PixelRect { x0: 0, y0: 0, x1: 960, y1: 540 }, min_samples_per_pixel: 32, variance_threshold: 0.0, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: BalanceMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 16.0, aperture: [20.955, 15.2908], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 10.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/veach_mis.usda"], invisible_overrides: Some(0) } +layer: $DIR/veach_mis.usda +lights: 4 +light 0: area name Some("/World/LightBig") lpe None pmf 0.25 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 1: area name Some("/World/LightMedium") lpe None pmf 0.25 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 2: area name Some("/World/LightSmall") lpe None pmf 0.25 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 3: area name Some("/World/LightTiny") lpe None pmf 0.25 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 10 geometries, PrimitiveBreakdown { triangles: 12, spheres: 4, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 12, spheres: 4, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:68d4160149942562 camera=2:68d4160149942562 shadow=2:68d4160149942562 indirect=2:68d4160149942562 +geom 1: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:c752315e4cdb3b45 camera=2:c752315e4cdb3b45 shadow=2:c752315e4cdb3b45 indirect=2:c752315e4cdb3b45 +geom 2: material #1 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:faaee6e5a0219d28 camera=2:faaee6e5a0219d28 shadow=2:faaee6e5a0219d28 indirect=2:faaee6e5a0219d28 +geom 3: material #2 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:55522c246731933e camera=2:55522c246731933e shadow=2:55522c246731933e indirect=2:55522c246731933e +geom 4: material #3 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:6a1c895a634c0162 camera=2:6a1c895a634c0162 shadow=2:6a1c895a634c0162 indirect=2:6a1c895a634c0162 +geom 5: material #4 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:d7e184c050c2f9e4 camera=2:d7e184c050c2f9e4 shadow=2:d7e184c050c2f9e4 indirect=2:d7e184c050c2f9e4 +geom 6: material #5 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:0072c0dd41a28391 camera=1:0072c0dd41a28391 shadow=1:0072c0dd41a28391 indirect=1:0072c0dd41a28391 +geom 7: material #6 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:25d33e066e9377ce camera=1:25d33e066e9377ce shadow=1:25d33e066e9377ce indirect=1:25d33e066e9377ce +geom 8: material #7 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:946393500a4eba02 camera=1:946393500a4eba02 shadow=1:946393500a4eba02 indirect=1:946393500a4eba02 +geom 9: material #8 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:c0b8734402fc2ca3 camera=1:c0b8734402fc2ca3 shadow=1:c0b8734402fc2ca3 indirect=1:c0b8734402fc2ca3 +provenance material /World/Materials/Backdrop: MaterialOrigin { slots: [0, 1], displaced: false } +provenance material /World/Materials/PlateRough: MaterialOrigin { slots: [3], displaced: false } +provenance material /World/Materials/PlateRoughest: MaterialOrigin { slots: [2], displaced: false } +provenance material /World/Materials/PlateSmooth: MaterialOrigin { slots: [4], displaced: false } +provenance material /World/Materials/PlateSmoothest: MaterialOrigin { slots: [5], displaced: false } +provenance light /World/LightBig: LightOrigin { index: 0, geoms: 6..7 } +provenance light /World/LightMedium: LightOrigin { index: 1, geoms: 7..8 } +provenance light /World/LightSmall: LightOrigin { index: 2, geoms: 8..9 } +provenance light /World/LightTiny: LightOrigin { index: 3, geoms: 9..10 } +provenance geometry 0..1: /World/BackWall +provenance geometry 1..2: /World/Floor +provenance geometry 2..3: /World/Plate3 +provenance geometry 3..4: /World/Plate2 +provenance geometry 4..5: /World/Plate1 +provenance geometry 5..6: /World/Plate0 +provenance geometry 6..7: /World/LightBig +provenance geometry 7..8: /World/LightMedium +provenance geometry 8..9: /World/LightSmall +provenance geometry 9..10: /World/LightTiny +provenance mesh: MeshOrigin { geom_id: 0, slot: 0, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 1, slot: 1, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 2, slot: 2, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 3, slot: 3, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 4, slot: 4, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 5, slot: 5, baked: true, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 2412432479217055457, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 1: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 5856995924472605639, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 2: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 6402661692534233033, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 1 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 3: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 13696518014408431155, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 2 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 4: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 15384334289683032877, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 3 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 5: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 6481752197548623432, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 4 }), placements: 1, shared: false, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/World/Cam"), cameras: ["/World/Cam"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/World/Cam"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/veach_mis_usda-8251e3de3f3f6069-2.image b/crates/crust-core/tests/data/import_baselines/veach_mis_usda-8251e3de3f3f6069-2.image new file mode 100644 index 000000000..96aff8304 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/veach_mis_usda-8251e3de3f3f6069-2.image @@ -0,0 +1 @@ +960x540 16spp clamp-off c795c604ff2181ef diff --git a/crates/crust-core/tests/data/import_baselines/veach_mis_usda-8251e3de3f3f6069-3.digest b/crates/crust-core/tests/data/import_baselines/veach_mis_usda-8251e3de3f3f6069-3.digest new file mode 100644 index 000000000..6c2cda342 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/veach_mis_usda-8251e3de3f3f6069-3.digest @@ -0,0 +1,61 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/World/Cam") +camera: Camera { origin: Vec3A(0.0, 4.0, 12.0), lower_left_corner: Vec3A(-8.494889, -2.4422622, 2.981679), horizontal: Vec3A(16.989779, -0.0, 0.0), vertical: Vec3A(0.0, 9.411561, -1.6595122), u: Vec3A(1.0, -0.0, 0.0), v: Vec3A(0.0, 0.98480767, -0.17364816), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: Some("/Render/settings") +settings: RenderSettings { samples_per_pixel: 128, max_depth: 8, width: 960, height: 540, region: PixelRect { x0: 0, y0: 0, x1: 960, y1: 540 }, min_samples_per_pixel: 32, variance_threshold: 0.0, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: BalanceMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 16.0, aperture: [20.955, 15.2908], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 10.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/veach_mis.usda"], invisible_overrides: Some(0) } +layer: $DIR/veach_mis.usda +lights: 4 +light 0: area name Some("/World/LightBig") lpe None pmf 0.25 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 1: area name Some("/World/LightMedium") lpe None pmf 0.25 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 2: area name Some("/World/LightSmall") lpe None pmf 0.25 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 3: area name Some("/World/LightTiny") lpe None pmf 0.25 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 10 geometries, PrimitiveBreakdown { triangles: 12, spheres: 4, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 12, spheres: 4, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:68d4160149942562 camera=2:68d4160149942562 shadow=2:68d4160149942562 indirect=2:68d4160149942562 +geom 1: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:c752315e4cdb3b45 camera=2:c752315e4cdb3b45 shadow=2:c752315e4cdb3b45 indirect=2:c752315e4cdb3b45 +geom 2: material #1 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:faaee6e5a0219d28 camera=2:faaee6e5a0219d28 shadow=2:faaee6e5a0219d28 indirect=2:faaee6e5a0219d28 +geom 3: material #2 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:55522c246731933e camera=2:55522c246731933e shadow=2:55522c246731933e indirect=2:55522c246731933e +geom 4: material #3 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:6a1c895a634c0162 camera=2:6a1c895a634c0162 shadow=2:6a1c895a634c0162 indirect=2:6a1c895a634c0162 +geom 5: material #4 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:d7e184c050c2f9e4 camera=2:d7e184c050c2f9e4 shadow=2:d7e184c050c2f9e4 indirect=2:d7e184c050c2f9e4 +geom 6: material #5 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:0072c0dd41a28391 camera=1:0072c0dd41a28391 shadow=1:0072c0dd41a28391 indirect=1:0072c0dd41a28391 +geom 7: material #6 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:25d33e066e9377ce camera=1:25d33e066e9377ce shadow=1:25d33e066e9377ce indirect=1:25d33e066e9377ce +geom 8: material #7 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:946393500a4eba02 camera=1:946393500a4eba02 shadow=1:946393500a4eba02 indirect=1:946393500a4eba02 +geom 9: material #8 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:c0b8734402fc2ca3 camera=1:c0b8734402fc2ca3 shadow=1:c0b8734402fc2ca3 indirect=1:c0b8734402fc2ca3 +provenance material /World/Materials/Backdrop: MaterialOrigin { slots: [0, 1], displaced: false } +provenance material /World/Materials/PlateRough: MaterialOrigin { slots: [3], displaced: false } +provenance material /World/Materials/PlateRoughest: MaterialOrigin { slots: [2], displaced: false } +provenance material /World/Materials/PlateSmooth: MaterialOrigin { slots: [4], displaced: false } +provenance material /World/Materials/PlateSmoothest: MaterialOrigin { slots: [5], displaced: false } +provenance light /World/LightBig: LightOrigin { index: 0, geoms: 6..7 } +provenance light /World/LightMedium: LightOrigin { index: 1, geoms: 7..8 } +provenance light /World/LightSmall: LightOrigin { index: 2, geoms: 8..9 } +provenance light /World/LightTiny: LightOrigin { index: 3, geoms: 9..10 } +provenance geometry 0..1: /World/BackWall +provenance geometry 1..2: /World/Floor +provenance geometry 2..3: /World/Plate3 +provenance geometry 3..4: /World/Plate2 +provenance geometry 4..5: /World/Plate1 +provenance geometry 5..6: /World/Plate0 +provenance geometry 6..7: /World/LightBig +provenance geometry 7..8: /World/LightMedium +provenance geometry 8..9: /World/LightSmall +provenance geometry 9..10: /World/LightTiny +provenance mesh: MeshOrigin { geom_id: 0, slot: 0, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 1, slot: 1, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 2, slot: 2, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 3, slot: 3, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 4, slot: 4, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 5, slot: 5, baked: true, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 2412432479217055457, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 1: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 5856995924472605639, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 2: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 6402661692534233033, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 1 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 3: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 13696518014408431155, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 2 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 4: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 15384334289683032877, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 3 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 5: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 6481752197548623432, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 4 }), placements: 1, shared: false, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/World/Cam"), cameras: ["/World/Cam"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/World/Cam"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/veach_mis_usda-8251e3de3f3f6069-3.image b/crates/crust-core/tests/data/import_baselines/veach_mis_usda-8251e3de3f3f6069-3.image new file mode 100644 index 000000000..96aff8304 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/veach_mis_usda-8251e3de3f3f6069-3.image @@ -0,0 +1 @@ +960x540 16spp clamp-off c795c604ff2181ef diff --git a/crates/crust-core/tests/data/import_baselines/veach_mis_usda-8251e3de3f3f6069-4.digest b/crates/crust-core/tests/data/import_baselines/veach_mis_usda-8251e3de3f3f6069-4.digest new file mode 100644 index 000000000..6c2cda342 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/veach_mis_usda-8251e3de3f3f6069-4.digest @@ -0,0 +1,61 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/World/Cam") +camera: Camera { origin: Vec3A(0.0, 4.0, 12.0), lower_left_corner: Vec3A(-8.494889, -2.4422622, 2.981679), horizontal: Vec3A(16.989779, -0.0, 0.0), vertical: Vec3A(0.0, 9.411561, -1.6595122), u: Vec3A(1.0, -0.0, 0.0), v: Vec3A(0.0, 0.98480767, -0.17364816), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: Some("/Render/settings") +settings: RenderSettings { samples_per_pixel: 128, max_depth: 8, width: 960, height: 540, region: PixelRect { x0: 0, y0: 0, x1: 960, y1: 540 }, min_samples_per_pixel: 32, variance_threshold: 0.0, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: BalanceMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 16.0, aperture: [20.955, 15.2908], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 10.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/veach_mis.usda"], invisible_overrides: Some(0) } +layer: $DIR/veach_mis.usda +lights: 4 +light 0: area name Some("/World/LightBig") lpe None pmf 0.25 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 1: area name Some("/World/LightMedium") lpe None pmf 0.25 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 2: area name Some("/World/LightSmall") lpe None pmf 0.25 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 3: area name Some("/World/LightTiny") lpe None pmf 0.25 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 10 geometries, PrimitiveBreakdown { triangles: 12, spheres: 4, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 12, spheres: 4, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:68d4160149942562 camera=2:68d4160149942562 shadow=2:68d4160149942562 indirect=2:68d4160149942562 +geom 1: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:c752315e4cdb3b45 camera=2:c752315e4cdb3b45 shadow=2:c752315e4cdb3b45 indirect=2:c752315e4cdb3b45 +geom 2: material #1 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:faaee6e5a0219d28 camera=2:faaee6e5a0219d28 shadow=2:faaee6e5a0219d28 indirect=2:faaee6e5a0219d28 +geom 3: material #2 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:55522c246731933e camera=2:55522c246731933e shadow=2:55522c246731933e indirect=2:55522c246731933e +geom 4: material #3 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:6a1c895a634c0162 camera=2:6a1c895a634c0162 shadow=2:6a1c895a634c0162 indirect=2:6a1c895a634c0162 +geom 5: material #4 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:d7e184c050c2f9e4 camera=2:d7e184c050c2f9e4 shadow=2:d7e184c050c2f9e4 indirect=2:d7e184c050c2f9e4 +geom 6: material #5 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:0072c0dd41a28391 camera=1:0072c0dd41a28391 shadow=1:0072c0dd41a28391 indirect=1:0072c0dd41a28391 +geom 7: material #6 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:25d33e066e9377ce camera=1:25d33e066e9377ce shadow=1:25d33e066e9377ce indirect=1:25d33e066e9377ce +geom 8: material #7 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:946393500a4eba02 camera=1:946393500a4eba02 shadow=1:946393500a4eba02 indirect=1:946393500a4eba02 +geom 9: material #8 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:c0b8734402fc2ca3 camera=1:c0b8734402fc2ca3 shadow=1:c0b8734402fc2ca3 indirect=1:c0b8734402fc2ca3 +provenance material /World/Materials/Backdrop: MaterialOrigin { slots: [0, 1], displaced: false } +provenance material /World/Materials/PlateRough: MaterialOrigin { slots: [3], displaced: false } +provenance material /World/Materials/PlateRoughest: MaterialOrigin { slots: [2], displaced: false } +provenance material /World/Materials/PlateSmooth: MaterialOrigin { slots: [4], displaced: false } +provenance material /World/Materials/PlateSmoothest: MaterialOrigin { slots: [5], displaced: false } +provenance light /World/LightBig: LightOrigin { index: 0, geoms: 6..7 } +provenance light /World/LightMedium: LightOrigin { index: 1, geoms: 7..8 } +provenance light /World/LightSmall: LightOrigin { index: 2, geoms: 8..9 } +provenance light /World/LightTiny: LightOrigin { index: 3, geoms: 9..10 } +provenance geometry 0..1: /World/BackWall +provenance geometry 1..2: /World/Floor +provenance geometry 2..3: /World/Plate3 +provenance geometry 3..4: /World/Plate2 +provenance geometry 4..5: /World/Plate1 +provenance geometry 5..6: /World/Plate0 +provenance geometry 6..7: /World/LightBig +provenance geometry 7..8: /World/LightMedium +provenance geometry 8..9: /World/LightSmall +provenance geometry 9..10: /World/LightTiny +provenance mesh: MeshOrigin { geom_id: 0, slot: 0, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 1, slot: 1, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 2, slot: 2, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 3, slot: 3, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 4, slot: 4, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 5, slot: 5, baked: true, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 2412432479217055457, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 1: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 5856995924472605639, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 2: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 6402661692534233033, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 1 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 3: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 13696518014408431155, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 2 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 4: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 15384334289683032877, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 3 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 5: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 6481752197548623432, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 4 }), placements: 1, shared: false, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/World/Cam"), cameras: ["/World/Cam"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/World/Cam"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/veach_mis_usda-8251e3de3f3f6069-4.image b/crates/crust-core/tests/data/import_baselines/veach_mis_usda-8251e3de3f3f6069-4.image new file mode 100644 index 000000000..96aff8304 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/veach_mis_usda-8251e3de3f3f6069-4.image @@ -0,0 +1 @@ +960x540 16spp clamp-off c795c604ff2181ef diff --git a/crates/crust-core/tests/data/import_baselines/veach_mis_usda-8251e3de3f3f6069-5.digest b/crates/crust-core/tests/data/import_baselines/veach_mis_usda-8251e3de3f3f6069-5.digest new file mode 100644 index 000000000..6c2cda342 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/veach_mis_usda-8251e3de3f3f6069-5.digest @@ -0,0 +1,61 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/World/Cam") +camera: Camera { origin: Vec3A(0.0, 4.0, 12.0), lower_left_corner: Vec3A(-8.494889, -2.4422622, 2.981679), horizontal: Vec3A(16.989779, -0.0, 0.0), vertical: Vec3A(0.0, 9.411561, -1.6595122), u: Vec3A(1.0, -0.0, 0.0), v: Vec3A(0.0, 0.98480767, -0.17364816), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: Some("/Render/settings") +settings: RenderSettings { samples_per_pixel: 128, max_depth: 8, width: 960, height: 540, region: PixelRect { x0: 0, y0: 0, x1: 960, y1: 540 }, min_samples_per_pixel: 32, variance_threshold: 0.0, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: BalanceMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 16.0, aperture: [20.955, 15.2908], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 10.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/veach_mis.usda"], invisible_overrides: Some(0) } +layer: $DIR/veach_mis.usda +lights: 4 +light 0: area name Some("/World/LightBig") lpe None pmf 0.25 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 1: area name Some("/World/LightMedium") lpe None pmf 0.25 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 2: area name Some("/World/LightSmall") lpe None pmf 0.25 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 3: area name Some("/World/LightTiny") lpe None pmf 0.25 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 10 geometries, PrimitiveBreakdown { triangles: 12, spheres: 4, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 12, spheres: 4, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:68d4160149942562 camera=2:68d4160149942562 shadow=2:68d4160149942562 indirect=2:68d4160149942562 +geom 1: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:c752315e4cdb3b45 camera=2:c752315e4cdb3b45 shadow=2:c752315e4cdb3b45 indirect=2:c752315e4cdb3b45 +geom 2: material #1 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:faaee6e5a0219d28 camera=2:faaee6e5a0219d28 shadow=2:faaee6e5a0219d28 indirect=2:faaee6e5a0219d28 +geom 3: material #2 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:55522c246731933e camera=2:55522c246731933e shadow=2:55522c246731933e indirect=2:55522c246731933e +geom 4: material #3 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:6a1c895a634c0162 camera=2:6a1c895a634c0162 shadow=2:6a1c895a634c0162 indirect=2:6a1c895a634c0162 +geom 5: material #4 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:d7e184c050c2f9e4 camera=2:d7e184c050c2f9e4 shadow=2:d7e184c050c2f9e4 indirect=2:d7e184c050c2f9e4 +geom 6: material #5 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:0072c0dd41a28391 camera=1:0072c0dd41a28391 shadow=1:0072c0dd41a28391 indirect=1:0072c0dd41a28391 +geom 7: material #6 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:25d33e066e9377ce camera=1:25d33e066e9377ce shadow=1:25d33e066e9377ce indirect=1:25d33e066e9377ce +geom 8: material #7 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:946393500a4eba02 camera=1:946393500a4eba02 shadow=1:946393500a4eba02 indirect=1:946393500a4eba02 +geom 9: material #8 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:c0b8734402fc2ca3 camera=1:c0b8734402fc2ca3 shadow=1:c0b8734402fc2ca3 indirect=1:c0b8734402fc2ca3 +provenance material /World/Materials/Backdrop: MaterialOrigin { slots: [0, 1], displaced: false } +provenance material /World/Materials/PlateRough: MaterialOrigin { slots: [3], displaced: false } +provenance material /World/Materials/PlateRoughest: MaterialOrigin { slots: [2], displaced: false } +provenance material /World/Materials/PlateSmooth: MaterialOrigin { slots: [4], displaced: false } +provenance material /World/Materials/PlateSmoothest: MaterialOrigin { slots: [5], displaced: false } +provenance light /World/LightBig: LightOrigin { index: 0, geoms: 6..7 } +provenance light /World/LightMedium: LightOrigin { index: 1, geoms: 7..8 } +provenance light /World/LightSmall: LightOrigin { index: 2, geoms: 8..9 } +provenance light /World/LightTiny: LightOrigin { index: 3, geoms: 9..10 } +provenance geometry 0..1: /World/BackWall +provenance geometry 1..2: /World/Floor +provenance geometry 2..3: /World/Plate3 +provenance geometry 3..4: /World/Plate2 +provenance geometry 4..5: /World/Plate1 +provenance geometry 5..6: /World/Plate0 +provenance geometry 6..7: /World/LightBig +provenance geometry 7..8: /World/LightMedium +provenance geometry 8..9: /World/LightSmall +provenance geometry 9..10: /World/LightTiny +provenance mesh: MeshOrigin { geom_id: 0, slot: 0, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 1, slot: 1, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 2, slot: 2, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 3, slot: 3, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 4, slot: 4, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 5, slot: 5, baked: true, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 2412432479217055457, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 1: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 5856995924472605639, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 2: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 6402661692534233033, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 1 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 3: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 13696518014408431155, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 2 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 4: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 15384334289683032877, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 3 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 5: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 6481752197548623432, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 4 }), placements: 1, shared: false, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/World/Cam"), cameras: ["/World/Cam"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/World/Cam"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/veach_mis_usda-8251e3de3f3f6069-5.image b/crates/crust-core/tests/data/import_baselines/veach_mis_usda-8251e3de3f3f6069-5.image new file mode 100644 index 000000000..96aff8304 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/veach_mis_usda-8251e3de3f3f6069-5.image @@ -0,0 +1 @@ +960x540 16spp clamp-off c795c604ff2181ef diff --git a/crates/crust-core/tests/data/import_baselines/veach_mis_usda-8251e3de3f3f6069-6.digest b/crates/crust-core/tests/data/import_baselines/veach_mis_usda-8251e3de3f3f6069-6.digest new file mode 100644 index 000000000..6c2cda342 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/veach_mis_usda-8251e3de3f3f6069-6.digest @@ -0,0 +1,61 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/World/Cam") +camera: Camera { origin: Vec3A(0.0, 4.0, 12.0), lower_left_corner: Vec3A(-8.494889, -2.4422622, 2.981679), horizontal: Vec3A(16.989779, -0.0, 0.0), vertical: Vec3A(0.0, 9.411561, -1.6595122), u: Vec3A(1.0, -0.0, 0.0), v: Vec3A(0.0, 0.98480767, -0.17364816), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: Some("/Render/settings") +settings: RenderSettings { samples_per_pixel: 128, max_depth: 8, width: 960, height: 540, region: PixelRect { x0: 0, y0: 0, x1: 960, y1: 540 }, min_samples_per_pixel: 32, variance_threshold: 0.0, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: BalanceMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 16.0, aperture: [20.955, 15.2908], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 10.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/veach_mis.usda"], invisible_overrides: Some(0) } +layer: $DIR/veach_mis.usda +lights: 4 +light 0: area name Some("/World/LightBig") lpe None pmf 0.25 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 1: area name Some("/World/LightMedium") lpe None pmf 0.25 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 2: area name Some("/World/LightSmall") lpe None pmf 0.25 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 3: area name Some("/World/LightTiny") lpe None pmf 0.25 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 10 geometries, PrimitiveBreakdown { triangles: 12, spheres: 4, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 12, spheres: 4, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:68d4160149942562 camera=2:68d4160149942562 shadow=2:68d4160149942562 indirect=2:68d4160149942562 +geom 1: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:c752315e4cdb3b45 camera=2:c752315e4cdb3b45 shadow=2:c752315e4cdb3b45 indirect=2:c752315e4cdb3b45 +geom 2: material #1 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:faaee6e5a0219d28 camera=2:faaee6e5a0219d28 shadow=2:faaee6e5a0219d28 indirect=2:faaee6e5a0219d28 +geom 3: material #2 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:55522c246731933e camera=2:55522c246731933e shadow=2:55522c246731933e indirect=2:55522c246731933e +geom 4: material #3 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:6a1c895a634c0162 camera=2:6a1c895a634c0162 shadow=2:6a1c895a634c0162 indirect=2:6a1c895a634c0162 +geom 5: material #4 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:d7e184c050c2f9e4 camera=2:d7e184c050c2f9e4 shadow=2:d7e184c050c2f9e4 indirect=2:d7e184c050c2f9e4 +geom 6: material #5 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:0072c0dd41a28391 camera=1:0072c0dd41a28391 shadow=1:0072c0dd41a28391 indirect=1:0072c0dd41a28391 +geom 7: material #6 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:25d33e066e9377ce camera=1:25d33e066e9377ce shadow=1:25d33e066e9377ce indirect=1:25d33e066e9377ce +geom 8: material #7 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:946393500a4eba02 camera=1:946393500a4eba02 shadow=1:946393500a4eba02 indirect=1:946393500a4eba02 +geom 9: material #8 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:c0b8734402fc2ca3 camera=1:c0b8734402fc2ca3 shadow=1:c0b8734402fc2ca3 indirect=1:c0b8734402fc2ca3 +provenance material /World/Materials/Backdrop: MaterialOrigin { slots: [0, 1], displaced: false } +provenance material /World/Materials/PlateRough: MaterialOrigin { slots: [3], displaced: false } +provenance material /World/Materials/PlateRoughest: MaterialOrigin { slots: [2], displaced: false } +provenance material /World/Materials/PlateSmooth: MaterialOrigin { slots: [4], displaced: false } +provenance material /World/Materials/PlateSmoothest: MaterialOrigin { slots: [5], displaced: false } +provenance light /World/LightBig: LightOrigin { index: 0, geoms: 6..7 } +provenance light /World/LightMedium: LightOrigin { index: 1, geoms: 7..8 } +provenance light /World/LightSmall: LightOrigin { index: 2, geoms: 8..9 } +provenance light /World/LightTiny: LightOrigin { index: 3, geoms: 9..10 } +provenance geometry 0..1: /World/BackWall +provenance geometry 1..2: /World/Floor +provenance geometry 2..3: /World/Plate3 +provenance geometry 3..4: /World/Plate2 +provenance geometry 4..5: /World/Plate1 +provenance geometry 5..6: /World/Plate0 +provenance geometry 6..7: /World/LightBig +provenance geometry 7..8: /World/LightMedium +provenance geometry 8..9: /World/LightSmall +provenance geometry 9..10: /World/LightTiny +provenance mesh: MeshOrigin { geom_id: 0, slot: 0, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 1, slot: 1, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 2, slot: 2, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 3, slot: 3, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 4, slot: 4, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 5, slot: 5, baked: true, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 2412432479217055457, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 1: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 5856995924472605639, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 2: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 6402661692534233033, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 1 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 3: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 13696518014408431155, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 2 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 4: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 15384334289683032877, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 3 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 5: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 6481752197548623432, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 4 }), placements: 1, shared: false, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/World/Cam"), cameras: ["/World/Cam"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/World/Cam"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/veach_mis_usda-8251e3de3f3f6069-6.image b/crates/crust-core/tests/data/import_baselines/veach_mis_usda-8251e3de3f3f6069-6.image new file mode 100644 index 000000000..96aff8304 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/veach_mis_usda-8251e3de3f3f6069-6.image @@ -0,0 +1 @@ +960x540 16spp clamp-off c795c604ff2181ef diff --git a/crates/crust-core/tests/data/import_baselines/veach_mis_usda-8251e3de3f3f6069-7.digest b/crates/crust-core/tests/data/import_baselines/veach_mis_usda-8251e3de3f3f6069-7.digest new file mode 100644 index 000000000..6c2cda342 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/veach_mis_usda-8251e3de3f3f6069-7.digest @@ -0,0 +1,61 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/World/Cam") +camera: Camera { origin: Vec3A(0.0, 4.0, 12.0), lower_left_corner: Vec3A(-8.494889, -2.4422622, 2.981679), horizontal: Vec3A(16.989779, -0.0, 0.0), vertical: Vec3A(0.0, 9.411561, -1.6595122), u: Vec3A(1.0, -0.0, 0.0), v: Vec3A(0.0, 0.98480767, -0.17364816), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: Some("/Render/settings") +settings: RenderSettings { samples_per_pixel: 128, max_depth: 8, width: 960, height: 540, region: PixelRect { x0: 0, y0: 0, x1: 960, y1: 540 }, min_samples_per_pixel: 32, variance_threshold: 0.0, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: BalanceMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 16.0, aperture: [20.955, 15.2908], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 10.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/veach_mis.usda"], invisible_overrides: Some(0) } +layer: $DIR/veach_mis.usda +lights: 4 +light 0: area name Some("/World/LightBig") lpe None pmf 0.25 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 1: area name Some("/World/LightMedium") lpe None pmf 0.25 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 2: area name Some("/World/LightSmall") lpe None pmf 0.25 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 3: area name Some("/World/LightTiny") lpe None pmf 0.25 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 10 geometries, PrimitiveBreakdown { triangles: 12, spheres: 4, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 12, spheres: 4, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:68d4160149942562 camera=2:68d4160149942562 shadow=2:68d4160149942562 indirect=2:68d4160149942562 +geom 1: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:c752315e4cdb3b45 camera=2:c752315e4cdb3b45 shadow=2:c752315e4cdb3b45 indirect=2:c752315e4cdb3b45 +geom 2: material #1 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:faaee6e5a0219d28 camera=2:faaee6e5a0219d28 shadow=2:faaee6e5a0219d28 indirect=2:faaee6e5a0219d28 +geom 3: material #2 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:55522c246731933e camera=2:55522c246731933e shadow=2:55522c246731933e indirect=2:55522c246731933e +geom 4: material #3 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:6a1c895a634c0162 camera=2:6a1c895a634c0162 shadow=2:6a1c895a634c0162 indirect=2:6a1c895a634c0162 +geom 5: material #4 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:d7e184c050c2f9e4 camera=2:d7e184c050c2f9e4 shadow=2:d7e184c050c2f9e4 indirect=2:d7e184c050c2f9e4 +geom 6: material #5 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:0072c0dd41a28391 camera=1:0072c0dd41a28391 shadow=1:0072c0dd41a28391 indirect=1:0072c0dd41a28391 +geom 7: material #6 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:25d33e066e9377ce camera=1:25d33e066e9377ce shadow=1:25d33e066e9377ce indirect=1:25d33e066e9377ce +geom 8: material #7 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:946393500a4eba02 camera=1:946393500a4eba02 shadow=1:946393500a4eba02 indirect=1:946393500a4eba02 +geom 9: material #8 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:c0b8734402fc2ca3 camera=1:c0b8734402fc2ca3 shadow=1:c0b8734402fc2ca3 indirect=1:c0b8734402fc2ca3 +provenance material /World/Materials/Backdrop: MaterialOrigin { slots: [0, 1], displaced: false } +provenance material /World/Materials/PlateRough: MaterialOrigin { slots: [3], displaced: false } +provenance material /World/Materials/PlateRoughest: MaterialOrigin { slots: [2], displaced: false } +provenance material /World/Materials/PlateSmooth: MaterialOrigin { slots: [4], displaced: false } +provenance material /World/Materials/PlateSmoothest: MaterialOrigin { slots: [5], displaced: false } +provenance light /World/LightBig: LightOrigin { index: 0, geoms: 6..7 } +provenance light /World/LightMedium: LightOrigin { index: 1, geoms: 7..8 } +provenance light /World/LightSmall: LightOrigin { index: 2, geoms: 8..9 } +provenance light /World/LightTiny: LightOrigin { index: 3, geoms: 9..10 } +provenance geometry 0..1: /World/BackWall +provenance geometry 1..2: /World/Floor +provenance geometry 2..3: /World/Plate3 +provenance geometry 3..4: /World/Plate2 +provenance geometry 4..5: /World/Plate1 +provenance geometry 5..6: /World/Plate0 +provenance geometry 6..7: /World/LightBig +provenance geometry 7..8: /World/LightMedium +provenance geometry 8..9: /World/LightSmall +provenance geometry 9..10: /World/LightTiny +provenance mesh: MeshOrigin { geom_id: 0, slot: 0, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 1, slot: 1, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 2, slot: 2, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 3, slot: 3, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 4, slot: 4, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 5, slot: 5, baked: true, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 2412432479217055457, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 1: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 5856995924472605639, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 2: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 6402661692534233033, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 1 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 3: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 13696518014408431155, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 2 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 4: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 15384334289683032877, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 3 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 5: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 6481752197548623432, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 4 }), placements: 1, shared: false, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/World/Cam"), cameras: ["/World/Cam"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/World/Cam"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/veach_mis_usda-8251e3de3f3f6069-7.image b/crates/crust-core/tests/data/import_baselines/veach_mis_usda-8251e3de3f3f6069-7.image new file mode 100644 index 000000000..96aff8304 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/veach_mis_usda-8251e3de3f3f6069-7.image @@ -0,0 +1 @@ +960x540 16spp clamp-off c795c604ff2181ef diff --git a/crates/crust-core/tests/data/import_baselines/veach_mis_usda-8251e3de3f3f6069-8.digest b/crates/crust-core/tests/data/import_baselines/veach_mis_usda-8251e3de3f3f6069-8.digest new file mode 100644 index 000000000..6c2cda342 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/veach_mis_usda-8251e3de3f3f6069-8.digest @@ -0,0 +1,61 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/World/Cam") +camera: Camera { origin: Vec3A(0.0, 4.0, 12.0), lower_left_corner: Vec3A(-8.494889, -2.4422622, 2.981679), horizontal: Vec3A(16.989779, -0.0, 0.0), vertical: Vec3A(0.0, 9.411561, -1.6595122), u: Vec3A(1.0, -0.0, 0.0), v: Vec3A(0.0, 0.98480767, -0.17364816), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: Some("/Render/settings") +settings: RenderSettings { samples_per_pixel: 128, max_depth: 8, width: 960, height: 540, region: PixelRect { x0: 0, y0: 0, x1: 960, y1: 540 }, min_samples_per_pixel: 32, variance_threshold: 0.0, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: BalanceMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 16.0, aperture: [20.955, 15.2908], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 10.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/veach_mis.usda"], invisible_overrides: Some(0) } +layer: $DIR/veach_mis.usda +lights: 4 +light 0: area name Some("/World/LightBig") lpe None pmf 0.25 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 1: area name Some("/World/LightMedium") lpe None pmf 0.25 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 2: area name Some("/World/LightSmall") lpe None pmf 0.25 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 3: area name Some("/World/LightTiny") lpe None pmf 0.25 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 10 geometries, PrimitiveBreakdown { triangles: 12, spheres: 4, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 12, spheres: 4, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:68d4160149942562 camera=2:68d4160149942562 shadow=2:68d4160149942562 indirect=2:68d4160149942562 +geom 1: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:c752315e4cdb3b45 camera=2:c752315e4cdb3b45 shadow=2:c752315e4cdb3b45 indirect=2:c752315e4cdb3b45 +geom 2: material #1 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:faaee6e5a0219d28 camera=2:faaee6e5a0219d28 shadow=2:faaee6e5a0219d28 indirect=2:faaee6e5a0219d28 +geom 3: material #2 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:55522c246731933e camera=2:55522c246731933e shadow=2:55522c246731933e indirect=2:55522c246731933e +geom 4: material #3 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:6a1c895a634c0162 camera=2:6a1c895a634c0162 shadow=2:6a1c895a634c0162 indirect=2:6a1c895a634c0162 +geom 5: material #4 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:d7e184c050c2f9e4 camera=2:d7e184c050c2f9e4 shadow=2:d7e184c050c2f9e4 indirect=2:d7e184c050c2f9e4 +geom 6: material #5 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:0072c0dd41a28391 camera=1:0072c0dd41a28391 shadow=1:0072c0dd41a28391 indirect=1:0072c0dd41a28391 +geom 7: material #6 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:25d33e066e9377ce camera=1:25d33e066e9377ce shadow=1:25d33e066e9377ce indirect=1:25d33e066e9377ce +geom 8: material #7 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:946393500a4eba02 camera=1:946393500a4eba02 shadow=1:946393500a4eba02 indirect=1:946393500a4eba02 +geom 9: material #8 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:c0b8734402fc2ca3 camera=1:c0b8734402fc2ca3 shadow=1:c0b8734402fc2ca3 indirect=1:c0b8734402fc2ca3 +provenance material /World/Materials/Backdrop: MaterialOrigin { slots: [0, 1], displaced: false } +provenance material /World/Materials/PlateRough: MaterialOrigin { slots: [3], displaced: false } +provenance material /World/Materials/PlateRoughest: MaterialOrigin { slots: [2], displaced: false } +provenance material /World/Materials/PlateSmooth: MaterialOrigin { slots: [4], displaced: false } +provenance material /World/Materials/PlateSmoothest: MaterialOrigin { slots: [5], displaced: false } +provenance light /World/LightBig: LightOrigin { index: 0, geoms: 6..7 } +provenance light /World/LightMedium: LightOrigin { index: 1, geoms: 7..8 } +provenance light /World/LightSmall: LightOrigin { index: 2, geoms: 8..9 } +provenance light /World/LightTiny: LightOrigin { index: 3, geoms: 9..10 } +provenance geometry 0..1: /World/BackWall +provenance geometry 1..2: /World/Floor +provenance geometry 2..3: /World/Plate3 +provenance geometry 3..4: /World/Plate2 +provenance geometry 4..5: /World/Plate1 +provenance geometry 5..6: /World/Plate0 +provenance geometry 6..7: /World/LightBig +provenance geometry 7..8: /World/LightMedium +provenance geometry 8..9: /World/LightSmall +provenance geometry 9..10: /World/LightTiny +provenance mesh: MeshOrigin { geom_id: 0, slot: 0, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 1, slot: 1, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 2, slot: 2, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 3, slot: 3, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 4, slot: 4, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 5, slot: 5, baked: true, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 2412432479217055457, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 1: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 5856995924472605639, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 2: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 6402661692534233033, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 1 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 3: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 13696518014408431155, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 2 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 4: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 15384334289683032877, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 3 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 5: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 6481752197548623432, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 4 }), placements: 1, shared: false, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/World/Cam"), cameras: ["/World/Cam"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/World/Cam"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/veach_mis_usda-8251e3de3f3f6069-8.image b/crates/crust-core/tests/data/import_baselines/veach_mis_usda-8251e3de3f3f6069-8.image new file mode 100644 index 000000000..96aff8304 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/veach_mis_usda-8251e3de3f3f6069-8.image @@ -0,0 +1 @@ +960x540 16spp clamp-off c795c604ff2181ef diff --git a/crates/crust-core/tests/data/import_baselines/veach_mis_usda-8251e3de3f3f6069-9.digest b/crates/crust-core/tests/data/import_baselines/veach_mis_usda-8251e3de3f3f6069-9.digest new file mode 100644 index 000000000..6c2cda342 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/veach_mis_usda-8251e3de3f3f6069-9.digest @@ -0,0 +1,61 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/World/Cam") +camera: Camera { origin: Vec3A(0.0, 4.0, 12.0), lower_left_corner: Vec3A(-8.494889, -2.4422622, 2.981679), horizontal: Vec3A(16.989779, -0.0, 0.0), vertical: Vec3A(0.0, 9.411561, -1.6595122), u: Vec3A(1.0, -0.0, 0.0), v: Vec3A(0.0, 0.98480767, -0.17364816), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: Some("/Render/settings") +settings: RenderSettings { samples_per_pixel: 128, max_depth: 8, width: 960, height: 540, region: PixelRect { x0: 0, y0: 0, x1: 960, y1: 540 }, min_samples_per_pixel: 32, variance_threshold: 0.0, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: BalanceMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 16.0, aperture: [20.955, 15.2908], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 10.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/veach_mis.usda"], invisible_overrides: Some(0) } +layer: $DIR/veach_mis.usda +lights: 4 +light 0: area name Some("/World/LightBig") lpe None pmf 0.25 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 1: area name Some("/World/LightMedium") lpe None pmf 0.25 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 2: area name Some("/World/LightSmall") lpe None pmf 0.25 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 3: area name Some("/World/LightTiny") lpe None pmf 0.25 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 10 geometries, PrimitiveBreakdown { triangles: 12, spheres: 4, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 12, spheres: 4, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:68d4160149942562 camera=2:68d4160149942562 shadow=2:68d4160149942562 indirect=2:68d4160149942562 +geom 1: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:c752315e4cdb3b45 camera=2:c752315e4cdb3b45 shadow=2:c752315e4cdb3b45 indirect=2:c752315e4cdb3b45 +geom 2: material #1 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:faaee6e5a0219d28 camera=2:faaee6e5a0219d28 shadow=2:faaee6e5a0219d28 indirect=2:faaee6e5a0219d28 +geom 3: material #2 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:55522c246731933e camera=2:55522c246731933e shadow=2:55522c246731933e indirect=2:55522c246731933e +geom 4: material #3 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:6a1c895a634c0162 camera=2:6a1c895a634c0162 shadow=2:6a1c895a634c0162 indirect=2:6a1c895a634c0162 +geom 5: material #4 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:d7e184c050c2f9e4 camera=2:d7e184c050c2f9e4 shadow=2:d7e184c050c2f9e4 indirect=2:d7e184c050c2f9e4 +geom 6: material #5 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:0072c0dd41a28391 camera=1:0072c0dd41a28391 shadow=1:0072c0dd41a28391 indirect=1:0072c0dd41a28391 +geom 7: material #6 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:25d33e066e9377ce camera=1:25d33e066e9377ce shadow=1:25d33e066e9377ce indirect=1:25d33e066e9377ce +geom 8: material #7 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:946393500a4eba02 camera=1:946393500a4eba02 shadow=1:946393500a4eba02 indirect=1:946393500a4eba02 +geom 9: material #8 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:c0b8734402fc2ca3 camera=1:c0b8734402fc2ca3 shadow=1:c0b8734402fc2ca3 indirect=1:c0b8734402fc2ca3 +provenance material /World/Materials/Backdrop: MaterialOrigin { slots: [0, 1], displaced: false } +provenance material /World/Materials/PlateRough: MaterialOrigin { slots: [3], displaced: false } +provenance material /World/Materials/PlateRoughest: MaterialOrigin { slots: [2], displaced: false } +provenance material /World/Materials/PlateSmooth: MaterialOrigin { slots: [4], displaced: false } +provenance material /World/Materials/PlateSmoothest: MaterialOrigin { slots: [5], displaced: false } +provenance light /World/LightBig: LightOrigin { index: 0, geoms: 6..7 } +provenance light /World/LightMedium: LightOrigin { index: 1, geoms: 7..8 } +provenance light /World/LightSmall: LightOrigin { index: 2, geoms: 8..9 } +provenance light /World/LightTiny: LightOrigin { index: 3, geoms: 9..10 } +provenance geometry 0..1: /World/BackWall +provenance geometry 1..2: /World/Floor +provenance geometry 2..3: /World/Plate3 +provenance geometry 3..4: /World/Plate2 +provenance geometry 4..5: /World/Plate1 +provenance geometry 5..6: /World/Plate0 +provenance geometry 6..7: /World/LightBig +provenance geometry 7..8: /World/LightMedium +provenance geometry 8..9: /World/LightSmall +provenance geometry 9..10: /World/LightTiny +provenance mesh: MeshOrigin { geom_id: 0, slot: 0, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 1, slot: 1, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 2, slot: 2, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 3, slot: 3, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 4, slot: 4, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 5, slot: 5, baked: true, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 2412432479217055457, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 1: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 5856995924472605639, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 2: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 6402661692534233033, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 1 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 3: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 13696518014408431155, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 2 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 4: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 15384334289683032877, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 3 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 5: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 6481752197548623432, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 4 }), placements: 1, shared: false, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/World/Cam"), cameras: ["/World/Cam"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/World/Cam"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/veach_mis_usda-8251e3de3f3f6069-9.image b/crates/crust-core/tests/data/import_baselines/veach_mis_usda-8251e3de3f3f6069-9.image new file mode 100644 index 000000000..96aff8304 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/veach_mis_usda-8251e3de3f3f6069-9.image @@ -0,0 +1 @@ +960x540 16spp clamp-off c795c604ff2181ef diff --git a/crates/crust-core/tests/data/import_baselines/veach_mis_usda-918cd4cfc31f23ae-1.digest b/crates/crust-core/tests/data/import_baselines/veach_mis_usda-918cd4cfc31f23ae-1.digest new file mode 100644 index 000000000..6c2cda342 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/veach_mis_usda-918cd4cfc31f23ae-1.digest @@ -0,0 +1,61 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/World/Cam") +camera: Camera { origin: Vec3A(0.0, 4.0, 12.0), lower_left_corner: Vec3A(-8.494889, -2.4422622, 2.981679), horizontal: Vec3A(16.989779, -0.0, 0.0), vertical: Vec3A(0.0, 9.411561, -1.6595122), u: Vec3A(1.0, -0.0, 0.0), v: Vec3A(0.0, 0.98480767, -0.17364816), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: Some("/Render/settings") +settings: RenderSettings { samples_per_pixel: 128, max_depth: 8, width: 960, height: 540, region: PixelRect { x0: 0, y0: 0, x1: 960, y1: 540 }, min_samples_per_pixel: 32, variance_threshold: 0.0, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: BalanceMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 16.0, aperture: [20.955, 15.2908], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 10.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/veach_mis.usda"], invisible_overrides: Some(0) } +layer: $DIR/veach_mis.usda +lights: 4 +light 0: area name Some("/World/LightBig") lpe None pmf 0.25 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 1: area name Some("/World/LightMedium") lpe None pmf 0.25 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 2: area name Some("/World/LightSmall") lpe None pmf 0.25 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 3: area name Some("/World/LightTiny") lpe None pmf 0.25 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 10 geometries, PrimitiveBreakdown { triangles: 12, spheres: 4, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 12, spheres: 4, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:68d4160149942562 camera=2:68d4160149942562 shadow=2:68d4160149942562 indirect=2:68d4160149942562 +geom 1: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:c752315e4cdb3b45 camera=2:c752315e4cdb3b45 shadow=2:c752315e4cdb3b45 indirect=2:c752315e4cdb3b45 +geom 2: material #1 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:faaee6e5a0219d28 camera=2:faaee6e5a0219d28 shadow=2:faaee6e5a0219d28 indirect=2:faaee6e5a0219d28 +geom 3: material #2 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:55522c246731933e camera=2:55522c246731933e shadow=2:55522c246731933e indirect=2:55522c246731933e +geom 4: material #3 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:6a1c895a634c0162 camera=2:6a1c895a634c0162 shadow=2:6a1c895a634c0162 indirect=2:6a1c895a634c0162 +geom 5: material #4 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:d7e184c050c2f9e4 camera=2:d7e184c050c2f9e4 shadow=2:d7e184c050c2f9e4 indirect=2:d7e184c050c2f9e4 +geom 6: material #5 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:0072c0dd41a28391 camera=1:0072c0dd41a28391 shadow=1:0072c0dd41a28391 indirect=1:0072c0dd41a28391 +geom 7: material #6 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:25d33e066e9377ce camera=1:25d33e066e9377ce shadow=1:25d33e066e9377ce indirect=1:25d33e066e9377ce +geom 8: material #7 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:946393500a4eba02 camera=1:946393500a4eba02 shadow=1:946393500a4eba02 indirect=1:946393500a4eba02 +geom 9: material #8 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:c0b8734402fc2ca3 camera=1:c0b8734402fc2ca3 shadow=1:c0b8734402fc2ca3 indirect=1:c0b8734402fc2ca3 +provenance material /World/Materials/Backdrop: MaterialOrigin { slots: [0, 1], displaced: false } +provenance material /World/Materials/PlateRough: MaterialOrigin { slots: [3], displaced: false } +provenance material /World/Materials/PlateRoughest: MaterialOrigin { slots: [2], displaced: false } +provenance material /World/Materials/PlateSmooth: MaterialOrigin { slots: [4], displaced: false } +provenance material /World/Materials/PlateSmoothest: MaterialOrigin { slots: [5], displaced: false } +provenance light /World/LightBig: LightOrigin { index: 0, geoms: 6..7 } +provenance light /World/LightMedium: LightOrigin { index: 1, geoms: 7..8 } +provenance light /World/LightSmall: LightOrigin { index: 2, geoms: 8..9 } +provenance light /World/LightTiny: LightOrigin { index: 3, geoms: 9..10 } +provenance geometry 0..1: /World/BackWall +provenance geometry 1..2: /World/Floor +provenance geometry 2..3: /World/Plate3 +provenance geometry 3..4: /World/Plate2 +provenance geometry 4..5: /World/Plate1 +provenance geometry 5..6: /World/Plate0 +provenance geometry 6..7: /World/LightBig +provenance geometry 7..8: /World/LightMedium +provenance geometry 8..9: /World/LightSmall +provenance geometry 9..10: /World/LightTiny +provenance mesh: MeshOrigin { geom_id: 0, slot: 0, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 1, slot: 1, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 2, slot: 2, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 3, slot: 3, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 4, slot: 4, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 5, slot: 5, baked: true, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 2412432479217055457, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 1: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 5856995924472605639, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 2: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 6402661692534233033, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 1 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 3: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 13696518014408431155, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 2 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 4: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 15384334289683032877, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 3 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 5: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 6481752197548623432, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 4 }), placements: 1, shared: false, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/World/Cam"), cameras: ["/World/Cam"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/World/Cam"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/veach_mis_usda-918cd4cfc31f23ae-1.image b/crates/crust-core/tests/data/import_baselines/veach_mis_usda-918cd4cfc31f23ae-1.image new file mode 100644 index 000000000..96aff8304 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/veach_mis_usda-918cd4cfc31f23ae-1.image @@ -0,0 +1 @@ +960x540 16spp clamp-off c795c604ff2181ef diff --git a/crates/crust-core/tests/data/import_baselines/veach_mis_usda-c455222f332b9874-1.digest b/crates/crust-core/tests/data/import_baselines/veach_mis_usda-c455222f332b9874-1.digest new file mode 100644 index 000000000..6c2cda342 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/veach_mis_usda-c455222f332b9874-1.digest @@ -0,0 +1,61 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/World/Cam") +camera: Camera { origin: Vec3A(0.0, 4.0, 12.0), lower_left_corner: Vec3A(-8.494889, -2.4422622, 2.981679), horizontal: Vec3A(16.989779, -0.0, 0.0), vertical: Vec3A(0.0, 9.411561, -1.6595122), u: Vec3A(1.0, -0.0, 0.0), v: Vec3A(0.0, 0.98480767, -0.17364816), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: Some("/Render/settings") +settings: RenderSettings { samples_per_pixel: 128, max_depth: 8, width: 960, height: 540, region: PixelRect { x0: 0, y0: 0, x1: 960, y1: 540 }, min_samples_per_pixel: 32, variance_threshold: 0.0, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: BalanceMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 16.0, aperture: [20.955, 15.2908], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 10.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/veach_mis.usda"], invisible_overrides: Some(0) } +layer: $DIR/veach_mis.usda +lights: 4 +light 0: area name Some("/World/LightBig") lpe None pmf 0.25 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 1: area name Some("/World/LightMedium") lpe None pmf 0.25 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 2: area name Some("/World/LightSmall") lpe None pmf 0.25 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 3: area name Some("/World/LightTiny") lpe None pmf 0.25 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 10 geometries, PrimitiveBreakdown { triangles: 12, spheres: 4, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 12, spheres: 4, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:68d4160149942562 camera=2:68d4160149942562 shadow=2:68d4160149942562 indirect=2:68d4160149942562 +geom 1: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:c752315e4cdb3b45 camera=2:c752315e4cdb3b45 shadow=2:c752315e4cdb3b45 indirect=2:c752315e4cdb3b45 +geom 2: material #1 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:faaee6e5a0219d28 camera=2:faaee6e5a0219d28 shadow=2:faaee6e5a0219d28 indirect=2:faaee6e5a0219d28 +geom 3: material #2 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:55522c246731933e camera=2:55522c246731933e shadow=2:55522c246731933e indirect=2:55522c246731933e +geom 4: material #3 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:6a1c895a634c0162 camera=2:6a1c895a634c0162 shadow=2:6a1c895a634c0162 indirect=2:6a1c895a634c0162 +geom 5: material #4 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:d7e184c050c2f9e4 camera=2:d7e184c050c2f9e4 shadow=2:d7e184c050c2f9e4 indirect=2:d7e184c050c2f9e4 +geom 6: material #5 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:0072c0dd41a28391 camera=1:0072c0dd41a28391 shadow=1:0072c0dd41a28391 indirect=1:0072c0dd41a28391 +geom 7: material #6 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:25d33e066e9377ce camera=1:25d33e066e9377ce shadow=1:25d33e066e9377ce indirect=1:25d33e066e9377ce +geom 8: material #7 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:946393500a4eba02 camera=1:946393500a4eba02 shadow=1:946393500a4eba02 indirect=1:946393500a4eba02 +geom 9: material #8 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:c0b8734402fc2ca3 camera=1:c0b8734402fc2ca3 shadow=1:c0b8734402fc2ca3 indirect=1:c0b8734402fc2ca3 +provenance material /World/Materials/Backdrop: MaterialOrigin { slots: [0, 1], displaced: false } +provenance material /World/Materials/PlateRough: MaterialOrigin { slots: [3], displaced: false } +provenance material /World/Materials/PlateRoughest: MaterialOrigin { slots: [2], displaced: false } +provenance material /World/Materials/PlateSmooth: MaterialOrigin { slots: [4], displaced: false } +provenance material /World/Materials/PlateSmoothest: MaterialOrigin { slots: [5], displaced: false } +provenance light /World/LightBig: LightOrigin { index: 0, geoms: 6..7 } +provenance light /World/LightMedium: LightOrigin { index: 1, geoms: 7..8 } +provenance light /World/LightSmall: LightOrigin { index: 2, geoms: 8..9 } +provenance light /World/LightTiny: LightOrigin { index: 3, geoms: 9..10 } +provenance geometry 0..1: /World/BackWall +provenance geometry 1..2: /World/Floor +provenance geometry 2..3: /World/Plate3 +provenance geometry 3..4: /World/Plate2 +provenance geometry 4..5: /World/Plate1 +provenance geometry 5..6: /World/Plate0 +provenance geometry 6..7: /World/LightBig +provenance geometry 7..8: /World/LightMedium +provenance geometry 8..9: /World/LightSmall +provenance geometry 9..10: /World/LightTiny +provenance mesh: MeshOrigin { geom_id: 0, slot: 0, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 1, slot: 1, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 2, slot: 2, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 3, slot: 3, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 4, slot: 4, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 5, slot: 5, baked: true, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 2412432479217055457, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 1: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 5856995924472605639, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 2: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 6402661692534233033, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 1 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 3: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 13696518014408431155, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 2 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 4: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 15384334289683032877, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 3 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 5: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 6481752197548623432, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 4 }), placements: 1, shared: false, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/World/Cam"), cameras: ["/World/Cam"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/World/Cam"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/veach_mis_usda-c455222f332b9874-1.image b/crates/crust-core/tests/data/import_baselines/veach_mis_usda-c455222f332b9874-1.image new file mode 100644 index 000000000..96aff8304 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/veach_mis_usda-c455222f332b9874-1.image @@ -0,0 +1 @@ +960x540 16spp clamp-off c795c604ff2181ef diff --git a/crates/crust-core/tests/data/import_baselines/veach_mis_usda-c455222f332b9874-2.digest b/crates/crust-core/tests/data/import_baselines/veach_mis_usda-c455222f332b9874-2.digest new file mode 100644 index 000000000..6c2cda342 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/veach_mis_usda-c455222f332b9874-2.digest @@ -0,0 +1,61 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/World/Cam") +camera: Camera { origin: Vec3A(0.0, 4.0, 12.0), lower_left_corner: Vec3A(-8.494889, -2.4422622, 2.981679), horizontal: Vec3A(16.989779, -0.0, 0.0), vertical: Vec3A(0.0, 9.411561, -1.6595122), u: Vec3A(1.0, -0.0, 0.0), v: Vec3A(0.0, 0.98480767, -0.17364816), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: Some("/Render/settings") +settings: RenderSettings { samples_per_pixel: 128, max_depth: 8, width: 960, height: 540, region: PixelRect { x0: 0, y0: 0, x1: 960, y1: 540 }, min_samples_per_pixel: 32, variance_threshold: 0.0, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: BalanceMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 16.0, aperture: [20.955, 15.2908], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 10.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/veach_mis.usda"], invisible_overrides: Some(0) } +layer: $DIR/veach_mis.usda +lights: 4 +light 0: area name Some("/World/LightBig") lpe None pmf 0.25 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 1: area name Some("/World/LightMedium") lpe None pmf 0.25 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 2: area name Some("/World/LightSmall") lpe None pmf 0.25 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 3: area name Some("/World/LightTiny") lpe None pmf 0.25 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 10 geometries, PrimitiveBreakdown { triangles: 12, spheres: 4, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 12, spheres: 4, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:68d4160149942562 camera=2:68d4160149942562 shadow=2:68d4160149942562 indirect=2:68d4160149942562 +geom 1: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:c752315e4cdb3b45 camera=2:c752315e4cdb3b45 shadow=2:c752315e4cdb3b45 indirect=2:c752315e4cdb3b45 +geom 2: material #1 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:faaee6e5a0219d28 camera=2:faaee6e5a0219d28 shadow=2:faaee6e5a0219d28 indirect=2:faaee6e5a0219d28 +geom 3: material #2 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:55522c246731933e camera=2:55522c246731933e shadow=2:55522c246731933e indirect=2:55522c246731933e +geom 4: material #3 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:6a1c895a634c0162 camera=2:6a1c895a634c0162 shadow=2:6a1c895a634c0162 indirect=2:6a1c895a634c0162 +geom 5: material #4 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:d7e184c050c2f9e4 camera=2:d7e184c050c2f9e4 shadow=2:d7e184c050c2f9e4 indirect=2:d7e184c050c2f9e4 +geom 6: material #5 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:0072c0dd41a28391 camera=1:0072c0dd41a28391 shadow=1:0072c0dd41a28391 indirect=1:0072c0dd41a28391 +geom 7: material #6 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:25d33e066e9377ce camera=1:25d33e066e9377ce shadow=1:25d33e066e9377ce indirect=1:25d33e066e9377ce +geom 8: material #7 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:946393500a4eba02 camera=1:946393500a4eba02 shadow=1:946393500a4eba02 indirect=1:946393500a4eba02 +geom 9: material #8 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:c0b8734402fc2ca3 camera=1:c0b8734402fc2ca3 shadow=1:c0b8734402fc2ca3 indirect=1:c0b8734402fc2ca3 +provenance material /World/Materials/Backdrop: MaterialOrigin { slots: [0, 1], displaced: false } +provenance material /World/Materials/PlateRough: MaterialOrigin { slots: [3], displaced: false } +provenance material /World/Materials/PlateRoughest: MaterialOrigin { slots: [2], displaced: false } +provenance material /World/Materials/PlateSmooth: MaterialOrigin { slots: [4], displaced: false } +provenance material /World/Materials/PlateSmoothest: MaterialOrigin { slots: [5], displaced: false } +provenance light /World/LightBig: LightOrigin { index: 0, geoms: 6..7 } +provenance light /World/LightMedium: LightOrigin { index: 1, geoms: 7..8 } +provenance light /World/LightSmall: LightOrigin { index: 2, geoms: 8..9 } +provenance light /World/LightTiny: LightOrigin { index: 3, geoms: 9..10 } +provenance geometry 0..1: /World/BackWall +provenance geometry 1..2: /World/Floor +provenance geometry 2..3: /World/Plate3 +provenance geometry 3..4: /World/Plate2 +provenance geometry 4..5: /World/Plate1 +provenance geometry 5..6: /World/Plate0 +provenance geometry 6..7: /World/LightBig +provenance geometry 7..8: /World/LightMedium +provenance geometry 8..9: /World/LightSmall +provenance geometry 9..10: /World/LightTiny +provenance mesh: MeshOrigin { geom_id: 0, slot: 0, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 1, slot: 1, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 2, slot: 2, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 3, slot: 3, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 4, slot: 4, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 5, slot: 5, baked: true, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 2412432479217055457, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 1: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 5856995924472605639, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 2: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 6402661692534233033, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 1 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 3: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 13696518014408431155, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 2 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 4: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 15384334289683032877, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 3 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 5: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 6481752197548623432, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 4 }), placements: 1, shared: false, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/World/Cam"), cameras: ["/World/Cam"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/World/Cam"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/veach_mis_usda-c455222f332b9874-2.image b/crates/crust-core/tests/data/import_baselines/veach_mis_usda-c455222f332b9874-2.image new file mode 100644 index 000000000..96aff8304 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/veach_mis_usda-c455222f332b9874-2.image @@ -0,0 +1 @@ +960x540 16spp clamp-off c795c604ff2181ef diff --git a/crates/crust-core/tests/data/import_baselines/veach_mis_usda-c455222f332b9874-3.digest b/crates/crust-core/tests/data/import_baselines/veach_mis_usda-c455222f332b9874-3.digest new file mode 100644 index 000000000..6c2cda342 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/veach_mis_usda-c455222f332b9874-3.digest @@ -0,0 +1,61 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/World/Cam") +camera: Camera { origin: Vec3A(0.0, 4.0, 12.0), lower_left_corner: Vec3A(-8.494889, -2.4422622, 2.981679), horizontal: Vec3A(16.989779, -0.0, 0.0), vertical: Vec3A(0.0, 9.411561, -1.6595122), u: Vec3A(1.0, -0.0, 0.0), v: Vec3A(0.0, 0.98480767, -0.17364816), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: Some("/Render/settings") +settings: RenderSettings { samples_per_pixel: 128, max_depth: 8, width: 960, height: 540, region: PixelRect { x0: 0, y0: 0, x1: 960, y1: 540 }, min_samples_per_pixel: 32, variance_threshold: 0.0, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: BalanceMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 16.0, aperture: [20.955, 15.2908], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 10.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/veach_mis.usda"], invisible_overrides: Some(0) } +layer: $DIR/veach_mis.usda +lights: 4 +light 0: area name Some("/World/LightBig") lpe None pmf 0.25 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 1: area name Some("/World/LightMedium") lpe None pmf 0.25 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 2: area name Some("/World/LightSmall") lpe None pmf 0.25 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 3: area name Some("/World/LightTiny") lpe None pmf 0.25 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 10 geometries, PrimitiveBreakdown { triangles: 12, spheres: 4, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 12, spheres: 4, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:68d4160149942562 camera=2:68d4160149942562 shadow=2:68d4160149942562 indirect=2:68d4160149942562 +geom 1: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:c752315e4cdb3b45 camera=2:c752315e4cdb3b45 shadow=2:c752315e4cdb3b45 indirect=2:c752315e4cdb3b45 +geom 2: material #1 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:faaee6e5a0219d28 camera=2:faaee6e5a0219d28 shadow=2:faaee6e5a0219d28 indirect=2:faaee6e5a0219d28 +geom 3: material #2 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:55522c246731933e camera=2:55522c246731933e shadow=2:55522c246731933e indirect=2:55522c246731933e +geom 4: material #3 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:6a1c895a634c0162 camera=2:6a1c895a634c0162 shadow=2:6a1c895a634c0162 indirect=2:6a1c895a634c0162 +geom 5: material #4 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:d7e184c050c2f9e4 camera=2:d7e184c050c2f9e4 shadow=2:d7e184c050c2f9e4 indirect=2:d7e184c050c2f9e4 +geom 6: material #5 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:0072c0dd41a28391 camera=1:0072c0dd41a28391 shadow=1:0072c0dd41a28391 indirect=1:0072c0dd41a28391 +geom 7: material #6 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:25d33e066e9377ce camera=1:25d33e066e9377ce shadow=1:25d33e066e9377ce indirect=1:25d33e066e9377ce +geom 8: material #7 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:946393500a4eba02 camera=1:946393500a4eba02 shadow=1:946393500a4eba02 indirect=1:946393500a4eba02 +geom 9: material #8 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:c0b8734402fc2ca3 camera=1:c0b8734402fc2ca3 shadow=1:c0b8734402fc2ca3 indirect=1:c0b8734402fc2ca3 +provenance material /World/Materials/Backdrop: MaterialOrigin { slots: [0, 1], displaced: false } +provenance material /World/Materials/PlateRough: MaterialOrigin { slots: [3], displaced: false } +provenance material /World/Materials/PlateRoughest: MaterialOrigin { slots: [2], displaced: false } +provenance material /World/Materials/PlateSmooth: MaterialOrigin { slots: [4], displaced: false } +provenance material /World/Materials/PlateSmoothest: MaterialOrigin { slots: [5], displaced: false } +provenance light /World/LightBig: LightOrigin { index: 0, geoms: 6..7 } +provenance light /World/LightMedium: LightOrigin { index: 1, geoms: 7..8 } +provenance light /World/LightSmall: LightOrigin { index: 2, geoms: 8..9 } +provenance light /World/LightTiny: LightOrigin { index: 3, geoms: 9..10 } +provenance geometry 0..1: /World/BackWall +provenance geometry 1..2: /World/Floor +provenance geometry 2..3: /World/Plate3 +provenance geometry 3..4: /World/Plate2 +provenance geometry 4..5: /World/Plate1 +provenance geometry 5..6: /World/Plate0 +provenance geometry 6..7: /World/LightBig +provenance geometry 7..8: /World/LightMedium +provenance geometry 8..9: /World/LightSmall +provenance geometry 9..10: /World/LightTiny +provenance mesh: MeshOrigin { geom_id: 0, slot: 0, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 1, slot: 1, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 2, slot: 2, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 3, slot: 3, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 4, slot: 4, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 5, slot: 5, baked: true, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 2412432479217055457, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 1: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 5856995924472605639, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 2: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 6402661692534233033, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 1 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 3: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 13696518014408431155, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 2 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 4: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 15384334289683032877, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 3 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 5: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 6481752197548623432, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 4 }), placements: 1, shared: false, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/World/Cam"), cameras: ["/World/Cam"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/World/Cam"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/veach_mis_usda-c455222f332b9874-3.image b/crates/crust-core/tests/data/import_baselines/veach_mis_usda-c455222f332b9874-3.image new file mode 100644 index 000000000..96aff8304 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/veach_mis_usda-c455222f332b9874-3.image @@ -0,0 +1 @@ +960x540 16spp clamp-off c795c604ff2181ef diff --git a/crates/crust-core/tests/data/import_baselines/veach_mis_usda-ecedf2e2c801d4c5-1.digest b/crates/crust-core/tests/data/import_baselines/veach_mis_usda-ecedf2e2c801d4c5-1.digest new file mode 100644 index 000000000..6c2cda342 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/veach_mis_usda-ecedf2e2c801d4c5-1.digest @@ -0,0 +1,61 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/World/Cam") +camera: Camera { origin: Vec3A(0.0, 4.0, 12.0), lower_left_corner: Vec3A(-8.494889, -2.4422622, 2.981679), horizontal: Vec3A(16.989779, -0.0, 0.0), vertical: Vec3A(0.0, 9.411561, -1.6595122), u: Vec3A(1.0, -0.0, 0.0), v: Vec3A(0.0, 0.98480767, -0.17364816), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: Some("/Render/settings") +settings: RenderSettings { samples_per_pixel: 128, max_depth: 8, width: 960, height: 540, region: PixelRect { x0: 0, y0: 0, x1: 960, y1: 540 }, min_samples_per_pixel: 32, variance_threshold: 0.0, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: BalanceMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 16.0, aperture: [20.955, 15.2908], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 10.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/veach_mis.usda"], invisible_overrides: Some(0) } +layer: $DIR/veach_mis.usda +lights: 4 +light 0: area name Some("/World/LightBig") lpe None pmf 0.25 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 1: area name Some("/World/LightMedium") lpe None pmf 0.25 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 2: area name Some("/World/LightSmall") lpe None pmf 0.25 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 3: area name Some("/World/LightTiny") lpe None pmf 0.25 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 10 geometries, PrimitiveBreakdown { triangles: 12, spheres: 4, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 12, spheres: 4, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:68d4160149942562 camera=2:68d4160149942562 shadow=2:68d4160149942562 indirect=2:68d4160149942562 +geom 1: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:c752315e4cdb3b45 camera=2:c752315e4cdb3b45 shadow=2:c752315e4cdb3b45 indirect=2:c752315e4cdb3b45 +geom 2: material #1 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:faaee6e5a0219d28 camera=2:faaee6e5a0219d28 shadow=2:faaee6e5a0219d28 indirect=2:faaee6e5a0219d28 +geom 3: material #2 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:55522c246731933e camera=2:55522c246731933e shadow=2:55522c246731933e indirect=2:55522c246731933e +geom 4: material #3 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:6a1c895a634c0162 camera=2:6a1c895a634c0162 shadow=2:6a1c895a634c0162 indirect=2:6a1c895a634c0162 +geom 5: material #4 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:d7e184c050c2f9e4 camera=2:d7e184c050c2f9e4 shadow=2:d7e184c050c2f9e4 indirect=2:d7e184c050c2f9e4 +geom 6: material #5 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:0072c0dd41a28391 camera=1:0072c0dd41a28391 shadow=1:0072c0dd41a28391 indirect=1:0072c0dd41a28391 +geom 7: material #6 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:25d33e066e9377ce camera=1:25d33e066e9377ce shadow=1:25d33e066e9377ce indirect=1:25d33e066e9377ce +geom 8: material #7 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:946393500a4eba02 camera=1:946393500a4eba02 shadow=1:946393500a4eba02 indirect=1:946393500a4eba02 +geom 9: material #8 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:c0b8734402fc2ca3 camera=1:c0b8734402fc2ca3 shadow=1:c0b8734402fc2ca3 indirect=1:c0b8734402fc2ca3 +provenance material /World/Materials/Backdrop: MaterialOrigin { slots: [0, 1], displaced: false } +provenance material /World/Materials/PlateRough: MaterialOrigin { slots: [3], displaced: false } +provenance material /World/Materials/PlateRoughest: MaterialOrigin { slots: [2], displaced: false } +provenance material /World/Materials/PlateSmooth: MaterialOrigin { slots: [4], displaced: false } +provenance material /World/Materials/PlateSmoothest: MaterialOrigin { slots: [5], displaced: false } +provenance light /World/LightBig: LightOrigin { index: 0, geoms: 6..7 } +provenance light /World/LightMedium: LightOrigin { index: 1, geoms: 7..8 } +provenance light /World/LightSmall: LightOrigin { index: 2, geoms: 8..9 } +provenance light /World/LightTiny: LightOrigin { index: 3, geoms: 9..10 } +provenance geometry 0..1: /World/BackWall +provenance geometry 1..2: /World/Floor +provenance geometry 2..3: /World/Plate3 +provenance geometry 3..4: /World/Plate2 +provenance geometry 4..5: /World/Plate1 +provenance geometry 5..6: /World/Plate0 +provenance geometry 6..7: /World/LightBig +provenance geometry 7..8: /World/LightMedium +provenance geometry 8..9: /World/LightSmall +provenance geometry 9..10: /World/LightTiny +provenance mesh: MeshOrigin { geom_id: 0, slot: 0, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 1, slot: 1, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 2, slot: 2, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 3, slot: 3, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 4, slot: 4, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 5, slot: 5, baked: true, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 2412432479217055457, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 1: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 5856995924472605639, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 2: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 6402661692534233033, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 1 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 3: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 13696518014408431155, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 2 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 4: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 15384334289683032877, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 3 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 5: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 6481752197548623432, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 4 }), placements: 1, shared: false, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/World/Cam"), cameras: ["/World/Cam"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/World/Cam"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/veach_mis_usda-ecedf2e2c801d4c5-1.image b/crates/crust-core/tests/data/import_baselines/veach_mis_usda-ecedf2e2c801d4c5-1.image new file mode 100644 index 000000000..96aff8304 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/veach_mis_usda-ecedf2e2c801d4c5-1.image @@ -0,0 +1 @@ +960x540 16spp clamp-off c795c604ff2181ef diff --git a/crates/crust-core/tests/data/import_baselines/veach_mis_usda-ecedf2e2c801d4c5-2.digest b/crates/crust-core/tests/data/import_baselines/veach_mis_usda-ecedf2e2c801d4c5-2.digest new file mode 100644 index 000000000..6c2cda342 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/veach_mis_usda-ecedf2e2c801d4c5-2.digest @@ -0,0 +1,61 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/World/Cam") +camera: Camera { origin: Vec3A(0.0, 4.0, 12.0), lower_left_corner: Vec3A(-8.494889, -2.4422622, 2.981679), horizontal: Vec3A(16.989779, -0.0, 0.0), vertical: Vec3A(0.0, 9.411561, -1.6595122), u: Vec3A(1.0, -0.0, 0.0), v: Vec3A(0.0, 0.98480767, -0.17364816), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: Some("/Render/settings") +settings: RenderSettings { samples_per_pixel: 128, max_depth: 8, width: 960, height: 540, region: PixelRect { x0: 0, y0: 0, x1: 960, y1: 540 }, min_samples_per_pixel: 32, variance_threshold: 0.0, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: BalanceMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 16.0, aperture: [20.955, 15.2908], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 10.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/veach_mis.usda"], invisible_overrides: Some(0) } +layer: $DIR/veach_mis.usda +lights: 4 +light 0: area name Some("/World/LightBig") lpe None pmf 0.25 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 1: area name Some("/World/LightMedium") lpe None pmf 0.25 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 2: area name Some("/World/LightSmall") lpe None pmf 0.25 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 3: area name Some("/World/LightTiny") lpe None pmf 0.25 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 10 geometries, PrimitiveBreakdown { triangles: 12, spheres: 4, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 12, spheres: 4, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:68d4160149942562 camera=2:68d4160149942562 shadow=2:68d4160149942562 indirect=2:68d4160149942562 +geom 1: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:c752315e4cdb3b45 camera=2:c752315e4cdb3b45 shadow=2:c752315e4cdb3b45 indirect=2:c752315e4cdb3b45 +geom 2: material #1 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:faaee6e5a0219d28 camera=2:faaee6e5a0219d28 shadow=2:faaee6e5a0219d28 indirect=2:faaee6e5a0219d28 +geom 3: material #2 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:55522c246731933e camera=2:55522c246731933e shadow=2:55522c246731933e indirect=2:55522c246731933e +geom 4: material #3 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:6a1c895a634c0162 camera=2:6a1c895a634c0162 shadow=2:6a1c895a634c0162 indirect=2:6a1c895a634c0162 +geom 5: material #4 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:d7e184c050c2f9e4 camera=2:d7e184c050c2f9e4 shadow=2:d7e184c050c2f9e4 indirect=2:d7e184c050c2f9e4 +geom 6: material #5 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:0072c0dd41a28391 camera=1:0072c0dd41a28391 shadow=1:0072c0dd41a28391 indirect=1:0072c0dd41a28391 +geom 7: material #6 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:25d33e066e9377ce camera=1:25d33e066e9377ce shadow=1:25d33e066e9377ce indirect=1:25d33e066e9377ce +geom 8: material #7 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:946393500a4eba02 camera=1:946393500a4eba02 shadow=1:946393500a4eba02 indirect=1:946393500a4eba02 +geom 9: material #8 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:c0b8734402fc2ca3 camera=1:c0b8734402fc2ca3 shadow=1:c0b8734402fc2ca3 indirect=1:c0b8734402fc2ca3 +provenance material /World/Materials/Backdrop: MaterialOrigin { slots: [0, 1], displaced: false } +provenance material /World/Materials/PlateRough: MaterialOrigin { slots: [3], displaced: false } +provenance material /World/Materials/PlateRoughest: MaterialOrigin { slots: [2], displaced: false } +provenance material /World/Materials/PlateSmooth: MaterialOrigin { slots: [4], displaced: false } +provenance material /World/Materials/PlateSmoothest: MaterialOrigin { slots: [5], displaced: false } +provenance light /World/LightBig: LightOrigin { index: 0, geoms: 6..7 } +provenance light /World/LightMedium: LightOrigin { index: 1, geoms: 7..8 } +provenance light /World/LightSmall: LightOrigin { index: 2, geoms: 8..9 } +provenance light /World/LightTiny: LightOrigin { index: 3, geoms: 9..10 } +provenance geometry 0..1: /World/BackWall +provenance geometry 1..2: /World/Floor +provenance geometry 2..3: /World/Plate3 +provenance geometry 3..4: /World/Plate2 +provenance geometry 4..5: /World/Plate1 +provenance geometry 5..6: /World/Plate0 +provenance geometry 6..7: /World/LightBig +provenance geometry 7..8: /World/LightMedium +provenance geometry 8..9: /World/LightSmall +provenance geometry 9..10: /World/LightTiny +provenance mesh: MeshOrigin { geom_id: 0, slot: 0, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 1, slot: 1, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 2, slot: 2, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 3, slot: 3, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 4, slot: 4, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 5, slot: 5, baked: true, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 2412432479217055457, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 1: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 5856995924472605639, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 2: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 6402661692534233033, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 1 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 3: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 13696518014408431155, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 2 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 4: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 15384334289683032877, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 3 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 5: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 6481752197548623432, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 4 }), placements: 1, shared: false, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/World/Cam"), cameras: ["/World/Cam"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/World/Cam"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/veach_mis_usda-ecedf2e2c801d4c5-2.image b/crates/crust-core/tests/data/import_baselines/veach_mis_usda-ecedf2e2c801d4c5-2.image new file mode 100644 index 000000000..96aff8304 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/veach_mis_usda-ecedf2e2c801d4c5-2.image @@ -0,0 +1 @@ +960x540 16spp clamp-off c795c604ff2181ef diff --git a/crates/crust-core/tests/data/import_baselines/veach_mis_usda-ecedf2e2c801d4c5-3.digest b/crates/crust-core/tests/data/import_baselines/veach_mis_usda-ecedf2e2c801d4c5-3.digest new file mode 100644 index 000000000..6c2cda342 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/veach_mis_usda-ecedf2e2c801d4c5-3.digest @@ -0,0 +1,61 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/World/Cam") +camera: Camera { origin: Vec3A(0.0, 4.0, 12.0), lower_left_corner: Vec3A(-8.494889, -2.4422622, 2.981679), horizontal: Vec3A(16.989779, -0.0, 0.0), vertical: Vec3A(0.0, 9.411561, -1.6595122), u: Vec3A(1.0, -0.0, 0.0), v: Vec3A(0.0, 0.98480767, -0.17364816), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: Some("/Render/settings") +settings: RenderSettings { samples_per_pixel: 128, max_depth: 8, width: 960, height: 540, region: PixelRect { x0: 0, y0: 0, x1: 960, y1: 540 }, min_samples_per_pixel: 32, variance_threshold: 0.0, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: BalanceMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 16.0, aperture: [20.955, 15.2908], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 10.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/veach_mis.usda"], invisible_overrides: Some(0) } +layer: $DIR/veach_mis.usda +lights: 4 +light 0: area name Some("/World/LightBig") lpe None pmf 0.25 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 1: area name Some("/World/LightMedium") lpe None pmf 0.25 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 2: area name Some("/World/LightSmall") lpe None pmf 0.25 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 3: area name Some("/World/LightTiny") lpe None pmf 0.25 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 10 geometries, PrimitiveBreakdown { triangles: 12, spheres: 4, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 12, spheres: 4, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:68d4160149942562 camera=2:68d4160149942562 shadow=2:68d4160149942562 indirect=2:68d4160149942562 +geom 1: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:c752315e4cdb3b45 camera=2:c752315e4cdb3b45 shadow=2:c752315e4cdb3b45 indirect=2:c752315e4cdb3b45 +geom 2: material #1 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:faaee6e5a0219d28 camera=2:faaee6e5a0219d28 shadow=2:faaee6e5a0219d28 indirect=2:faaee6e5a0219d28 +geom 3: material #2 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:55522c246731933e camera=2:55522c246731933e shadow=2:55522c246731933e indirect=2:55522c246731933e +geom 4: material #3 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:6a1c895a634c0162 camera=2:6a1c895a634c0162 shadow=2:6a1c895a634c0162 indirect=2:6a1c895a634c0162 +geom 5: material #4 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:d7e184c050c2f9e4 camera=2:d7e184c050c2f9e4 shadow=2:d7e184c050c2f9e4 indirect=2:d7e184c050c2f9e4 +geom 6: material #5 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:0072c0dd41a28391 camera=1:0072c0dd41a28391 shadow=1:0072c0dd41a28391 indirect=1:0072c0dd41a28391 +geom 7: material #6 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:25d33e066e9377ce camera=1:25d33e066e9377ce shadow=1:25d33e066e9377ce indirect=1:25d33e066e9377ce +geom 8: material #7 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:946393500a4eba02 camera=1:946393500a4eba02 shadow=1:946393500a4eba02 indirect=1:946393500a4eba02 +geom 9: material #8 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:c0b8734402fc2ca3 camera=1:c0b8734402fc2ca3 shadow=1:c0b8734402fc2ca3 indirect=1:c0b8734402fc2ca3 +provenance material /World/Materials/Backdrop: MaterialOrigin { slots: [0, 1], displaced: false } +provenance material /World/Materials/PlateRough: MaterialOrigin { slots: [3], displaced: false } +provenance material /World/Materials/PlateRoughest: MaterialOrigin { slots: [2], displaced: false } +provenance material /World/Materials/PlateSmooth: MaterialOrigin { slots: [4], displaced: false } +provenance material /World/Materials/PlateSmoothest: MaterialOrigin { slots: [5], displaced: false } +provenance light /World/LightBig: LightOrigin { index: 0, geoms: 6..7 } +provenance light /World/LightMedium: LightOrigin { index: 1, geoms: 7..8 } +provenance light /World/LightSmall: LightOrigin { index: 2, geoms: 8..9 } +provenance light /World/LightTiny: LightOrigin { index: 3, geoms: 9..10 } +provenance geometry 0..1: /World/BackWall +provenance geometry 1..2: /World/Floor +provenance geometry 2..3: /World/Plate3 +provenance geometry 3..4: /World/Plate2 +provenance geometry 4..5: /World/Plate1 +provenance geometry 5..6: /World/Plate0 +provenance geometry 6..7: /World/LightBig +provenance geometry 7..8: /World/LightMedium +provenance geometry 8..9: /World/LightSmall +provenance geometry 9..10: /World/LightTiny +provenance mesh: MeshOrigin { geom_id: 0, slot: 0, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 1, slot: 1, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 2, slot: 2, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 3, slot: 3, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 4, slot: 4, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 5, slot: 5, baked: true, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 2412432479217055457, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 1: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 5856995924472605639, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 2: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 6402661692534233033, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 1 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 3: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 13696518014408431155, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 2 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 4: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 15384334289683032877, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 3 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 5: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 6481752197548623432, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 4 }), placements: 1, shared: false, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/World/Cam"), cameras: ["/World/Cam"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/World/Cam"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/veach_mis_usda-ecedf2e2c801d4c5-3.image b/crates/crust-core/tests/data/import_baselines/veach_mis_usda-ecedf2e2c801d4c5-3.image new file mode 100644 index 000000000..96aff8304 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/veach_mis_usda-ecedf2e2c801d4c5-3.image @@ -0,0 +1 @@ +960x540 16spp clamp-off c795c604ff2181ef diff --git a/crates/crust-core/tests/data/import_baselines/veach_mis_usda-eeb660d07679d619-1.digest b/crates/crust-core/tests/data/import_baselines/veach_mis_usda-eeb660d07679d619-1.digest new file mode 100644 index 000000000..4eaf1aa8c --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/veach_mis_usda-eeb660d07679d619-1.digest @@ -0,0 +1,61 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/World/Cam") +camera: Camera { origin: Vec3A(0.0, 4.0, 12.0), lower_left_corner: Vec3A(-8.494889, -2.4422622, 2.981679), horizontal: Vec3A(16.989779, -0.0, 0.0), vertical: Vec3A(0.0, 9.411561, -1.6595122), u: Vec3A(1.0, -0.0, 0.0), v: Vec3A(0.0, 0.98480767, -0.17364816), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: Some("/Render/settings") +settings: RenderSettings { samples_per_pixel: 128, max_depth: 8, width: 960, height: 540, region: PixelRect { x0: 0, y0: 0, x1: 960, y1: 540 }, min_samples_per_pixel: 32, variance_threshold: 0.0, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: BalanceMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 16.0, aperture: [20.955, 15.2908], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 10.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/veach_mis.usda"], invisible_overrides: Some(0) } +layer: $DIR/veach_mis.usda +lights: 4 +light 0: area name Some("/World/LightBig") lpe None pmf 0.25 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 1: area name Some("/World/LightMedium") lpe None pmf 0.25 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 2: area name Some("/World/LightSmall") lpe None pmf 0.25 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 3: area name Some("/World/LightTiny") lpe None pmf 0.25 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 10 geometries, PrimitiveBreakdown { triangles: 12, spheres: 4, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 12, spheres: 4, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:68d4160149942562 camera=2:68d4160149942562 shadow=2:68d4160149942562 indirect=2:68d4160149942562 +geom 1: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:c752315e4cdb3b45 camera=2:c752315e4cdb3b45 shadow=2:c752315e4cdb3b45 indirect=2:c752315e4cdb3b45 +geom 2: material #1 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:faaee6e5a0219d28 camera=2:faaee6e5a0219d28 shadow=2:faaee6e5a0219d28 indirect=2:faaee6e5a0219d28 +geom 3: material #2 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:55522c246731933e camera=2:55522c246731933e shadow=2:55522c246731933e indirect=2:55522c246731933e +geom 4: material #3 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:6a1c895a634c0162 camera=2:6a1c895a634c0162 shadow=2:6a1c895a634c0162 indirect=2:6a1c895a634c0162 +geom 5: material #4 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:d7e184c050c2f9e4 camera=2:d7e184c050c2f9e4 shadow=2:d7e184c050c2f9e4 indirect=2:d7e184c050c2f9e4 +geom 6: material #5 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:0072c0dd41a28391 camera=1:0072c0dd41a28391 shadow=1:0072c0dd41a28391 indirect=1:0072c0dd41a28391 +geom 7: material #6 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:25d33e066e9377ce camera=1:25d33e066e9377ce shadow=1:25d33e066e9377ce indirect=1:25d33e066e9377ce +geom 8: material #7 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:946393500a4eba02 camera=1:946393500a4eba02 shadow=1:946393500a4eba02 indirect=1:946393500a4eba02 +geom 9: material #8 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:c0b8734402fc2ca3 camera=1:c0b8734402fc2ca3 shadow=1:c0b8734402fc2ca3 indirect=1:c0b8734402fc2ca3 +provenance material /World/Materials/Backdrop: MaterialOrigin { slots: [0, 1], displaced: false } +provenance material /World/Materials/PlateRough: MaterialOrigin { slots: [3], displaced: false } +provenance material /World/Materials/PlateRoughest: MaterialOrigin { slots: [2], displaced: false } +provenance material /World/Materials/PlateSmooth: MaterialOrigin { slots: [4], displaced: false } +provenance material /World/Materials/PlateSmoothest: MaterialOrigin { slots: [5], displaced: false } +provenance light /World/LightBig: LightOrigin { index: 0, geoms: 6..7 } +provenance light /World/LightMedium: LightOrigin { index: 1, geoms: 7..8 } +provenance light /World/LightSmall: LightOrigin { index: 2, geoms: 8..9 } +provenance light /World/LightTiny: LightOrigin { index: 3, geoms: 9..10 } +provenance geometry 0..1: /World/BackWall +provenance geometry 1..2: /World/Floor +provenance geometry 2..3: /World/Plate3 +provenance geometry 3..4: /World/Plate2 +provenance geometry 4..5: /World/Plate1 +provenance geometry 5..6: /World/Plate0 +provenance geometry 6..7: /World/LightBig +provenance geometry 7..8: /World/LightMedium +provenance geometry 8..9: /World/LightSmall +provenance geometry 9..10: /World/LightTiny +provenance mesh: MeshOrigin { geom_id: 0, slot: 0, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 1, slot: 1, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 2, slot: 2, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 3, slot: 3, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 4, slot: 4, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 5, slot: 5, baked: true, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 2412432479217055457, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 1: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 5856995924472605639, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 2: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 6402661692534233033, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 1 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 3: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 13696518014408431155, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 2 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 4: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 15384334289683032877, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 3 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 5: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 6481752197548623432, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 4 }), placements: 1, shared: false, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: true, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/World/Cam"), cameras: ["/World/Cam"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/World/Cam"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/veach_mis_usda-eeb660d07679d619-1.image b/crates/crust-core/tests/data/import_baselines/veach_mis_usda-eeb660d07679d619-1.image new file mode 100644 index 000000000..96aff8304 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/veach_mis_usda-eeb660d07679d619-1.image @@ -0,0 +1 @@ +960x540 16spp clamp-off c795c604ff2181ef diff --git a/crates/crust-core/tests/data/import_baselines/veach_mis_usda-f7c825bf3b0bac82-1.digest b/crates/crust-core/tests/data/import_baselines/veach_mis_usda-f7c825bf3b0bac82-1.digest new file mode 100644 index 000000000..6c2cda342 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/veach_mis_usda-f7c825bf3b0bac82-1.digest @@ -0,0 +1,61 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/World/Cam") +camera: Camera { origin: Vec3A(0.0, 4.0, 12.0), lower_left_corner: Vec3A(-8.494889, -2.4422622, 2.981679), horizontal: Vec3A(16.989779, -0.0, 0.0), vertical: Vec3A(0.0, 9.411561, -1.6595122), u: Vec3A(1.0, -0.0, 0.0), v: Vec3A(0.0, 0.98480767, -0.17364816), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: Some("/Render/settings") +settings: RenderSettings { samples_per_pixel: 128, max_depth: 8, width: 960, height: 540, region: PixelRect { x0: 0, y0: 0, x1: 960, y1: 540 }, min_samples_per_pixel: 32, variance_threshold: 0.0, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: BalanceMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 16.0, aperture: [20.955, 15.2908], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 10.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/veach_mis.usda"], invisible_overrides: Some(0) } +layer: $DIR/veach_mis.usda +lights: 4 +light 0: area name Some("/World/LightBig") lpe None pmf 0.25 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 1: area name Some("/World/LightMedium") lpe None pmf 0.25 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 2: area name Some("/World/LightSmall") lpe None pmf 0.25 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 3: area name Some("/World/LightTiny") lpe None pmf 0.25 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 10 geometries, PrimitiveBreakdown { triangles: 12, spheres: 4, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 12, spheres: 4, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:68d4160149942562 camera=2:68d4160149942562 shadow=2:68d4160149942562 indirect=2:68d4160149942562 +geom 1: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:c752315e4cdb3b45 camera=2:c752315e4cdb3b45 shadow=2:c752315e4cdb3b45 indirect=2:c752315e4cdb3b45 +geom 2: material #1 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:faaee6e5a0219d28 camera=2:faaee6e5a0219d28 shadow=2:faaee6e5a0219d28 indirect=2:faaee6e5a0219d28 +geom 3: material #2 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:55522c246731933e camera=2:55522c246731933e shadow=2:55522c246731933e indirect=2:55522c246731933e +geom 4: material #3 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:6a1c895a634c0162 camera=2:6a1c895a634c0162 shadow=2:6a1c895a634c0162 indirect=2:6a1c895a634c0162 +geom 5: material #4 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:d7e184c050c2f9e4 camera=2:d7e184c050c2f9e4 shadow=2:d7e184c050c2f9e4 indirect=2:d7e184c050c2f9e4 +geom 6: material #5 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:0072c0dd41a28391 camera=1:0072c0dd41a28391 shadow=1:0072c0dd41a28391 indirect=1:0072c0dd41a28391 +geom 7: material #6 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:25d33e066e9377ce camera=1:25d33e066e9377ce shadow=1:25d33e066e9377ce indirect=1:25d33e066e9377ce +geom 8: material #7 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:946393500a4eba02 camera=1:946393500a4eba02 shadow=1:946393500a4eba02 indirect=1:946393500a4eba02 +geom 9: material #8 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:c0b8734402fc2ca3 camera=1:c0b8734402fc2ca3 shadow=1:c0b8734402fc2ca3 indirect=1:c0b8734402fc2ca3 +provenance material /World/Materials/Backdrop: MaterialOrigin { slots: [0, 1], displaced: false } +provenance material /World/Materials/PlateRough: MaterialOrigin { slots: [3], displaced: false } +provenance material /World/Materials/PlateRoughest: MaterialOrigin { slots: [2], displaced: false } +provenance material /World/Materials/PlateSmooth: MaterialOrigin { slots: [4], displaced: false } +provenance material /World/Materials/PlateSmoothest: MaterialOrigin { slots: [5], displaced: false } +provenance light /World/LightBig: LightOrigin { index: 0, geoms: 6..7 } +provenance light /World/LightMedium: LightOrigin { index: 1, geoms: 7..8 } +provenance light /World/LightSmall: LightOrigin { index: 2, geoms: 8..9 } +provenance light /World/LightTiny: LightOrigin { index: 3, geoms: 9..10 } +provenance geometry 0..1: /World/BackWall +provenance geometry 1..2: /World/Floor +provenance geometry 2..3: /World/Plate3 +provenance geometry 3..4: /World/Plate2 +provenance geometry 4..5: /World/Plate1 +provenance geometry 5..6: /World/Plate0 +provenance geometry 6..7: /World/LightBig +provenance geometry 7..8: /World/LightMedium +provenance geometry 8..9: /World/LightSmall +provenance geometry 9..10: /World/LightTiny +provenance mesh: MeshOrigin { geom_id: 0, slot: 0, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 1, slot: 1, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 2, slot: 2, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 3, slot: 3, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 4, slot: 4, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 5, slot: 5, baked: true, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 2412432479217055457, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 1: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 5856995924472605639, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 2: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 6402661692534233033, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 1 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 3: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 13696518014408431155, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 2 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 4: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 15384334289683032877, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 3 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 5: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 6481752197548623432, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 4 }), placements: 1, shared: false, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/World/Cam"), cameras: ["/World/Cam"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/World/Cam"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/veach_mis_usda-f7c825bf3b0bac82-1.image b/crates/crust-core/tests/data/import_baselines/veach_mis_usda-f7c825bf3b0bac82-1.image new file mode 100644 index 000000000..96aff8304 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/veach_mis_usda-f7c825bf3b0bac82-1.image @@ -0,0 +1 @@ +960x540 16spp clamp-off c795c604ff2181ef diff --git a/crates/crust-core/tests/data/import_baselines/visibility_usda-0f9ed9fc0b62a02c-1.digest b/crates/crust-core/tests/data/import_baselines/visibility_usda-0f9ed9fc0b62a02c-1.digest new file mode 100644 index 000000000..e88ac60f9 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/visibility_usda-0f9ed9fc0b62a02c-1.digest @@ -0,0 +1,27 @@ +time: Some(2.0) +working space: Linear Rec.709 (sRGB) +camera path: Some("/W/Hidden/Cam") +camera: Camera { origin: Vec3A(10.0, 0.0, 5.0), lower_left_corner: Vec3A(7.2816353, -1.5290802, -5.0), horizontal: Vec3A(5.4367294, 0.0, 0.0), vertical: Vec3A(0.0, 3.0581603, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: None +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 640, height: 360, region: PixelRect { x0: 0, y0: 0, x1: 640, y1: 360 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 2, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 50.0, aperture: [20.955, 15.2908], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 10.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/visibility.usda"], invisible_overrides: Some(0) } +layer: $DIR/visibility.usda +lights: 1 +light 0: area name Some("/W/Key") lpe None pmf 1.0 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 4 geometries, PrimitiveBreakdown { triangles: 0, spheres: 1, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 3 } top level, PrimitiveBreakdown { triangles: 2, spheres: 1, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 3 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:02ff87c392969355 camera=2:02ff87c392969355 shadow=2:02ff87c392969355 indirect=2:02ff87c392969355 +geom 1: material #1 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:13c54b934599bf61 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=1:13c54b934599bf61 +geom 2: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:6008e2a8e10973d5 camera=2:6008e2a8e10973d5 shadow=2:6008e2a8e10973d5 indirect=2:6008e2a8e10973d5 +geom 3: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:da267fdba289dc38 camera=2:da267fdba289dc38 shadow=2:da267fdba289dc38 indirect=2:da267fdba289dc38 +provenance light /W/Key: LightOrigin { index: 0, geoms: 1..2 } +provenance geometry 0..1: /W/Shown/D +provenance geometry 1..2: /W/Key +provenance geometry 2..4: /W/Scatter +provenance mesh: MeshOrigin { geom_id: 0, slot: 0, baked: false, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 3224020731942780983, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: true, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: Some(2.0), camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/W/Hidden/Cam"), cameras: ["/W/Hidden/Cam"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/W/Hidden/Cam"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/visibility_usda-0f9ed9fc0b62a02c-1.image b/crates/crust-core/tests/data/import_baselines/visibility_usda-0f9ed9fc0b62a02c-1.image new file mode 100644 index 000000000..c734c5b1d --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/visibility_usda-0f9ed9fc0b62a02c-1.image @@ -0,0 +1 @@ +640x360 16spp clamp-off a04a09c0d4b5e325 diff --git a/crates/crust-core/tests/data/import_baselines/visibility_usda-2bf7c45881effd3f-1.digest b/crates/crust-core/tests/data/import_baselines/visibility_usda-2bf7c45881effd3f-1.digest new file mode 100644 index 000000000..536f9c762 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/visibility_usda-2bf7c45881effd3f-1.digest @@ -0,0 +1,29 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/W/Hidden/Cam") +camera: Camera { origin: Vec3A(10.0, 0.0, 5.0), lower_left_corner: Vec3A(7.2816353, -1.5290802, -5.0), horizontal: Vec3A(5.4367294, 0.0, 0.0), vertical: Vec3A(0.0, 3.0581603, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: None +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 640, height: 360, region: PixelRect { x0: 0, y0: 0, x1: 640, y1: 360 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 50.0, aperture: [20.955, 15.2908], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 10.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/visibility.usda"], invisible_overrides: Some(0) } +layer: $DIR/visibility.usda +lights: 2 +light 0: area name Some("/W/Key") lpe None pmf 0.5 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 1: distant name Some("/W/Blink") lpe None pmf 0.5 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 4 geometries, PrimitiveBreakdown { triangles: 0, spheres: 1, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 3 } top level, PrimitiveBreakdown { triangles: 2, spheres: 1, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 3 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:02ff87c392969355 camera=2:02ff87c392969355 shadow=2:02ff87c392969355 indirect=2:02ff87c392969355 +geom 1: material #1 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:13c54b934599bf61 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=1:13c54b934599bf61 +geom 2: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:6008e2a8e10973d5 camera=2:6008e2a8e10973d5 shadow=2:6008e2a8e10973d5 indirect=2:6008e2a8e10973d5 +geom 3: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:da267fdba289dc38 camera=2:da267fdba289dc38 shadow=2:da267fdba289dc38 indirect=2:da267fdba289dc38 +provenance light /W/Blink: LightOrigin { index: 1, geoms: 2..2 } +provenance light /W/Key: LightOrigin { index: 0, geoms: 1..2 } +provenance geometry 0..1: /W/Shown/D +provenance geometry 1..2: /W/Key +provenance geometry 2..4: /W/Scatter +provenance mesh: MeshOrigin { geom_id: 0, slot: 0, baked: false, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 3224020731942780983, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: true, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: Some("/W/Hidden/Cam"), subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/W/Hidden/Cam"), cameras: ["/W/Hidden/Cam"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/W/Hidden/Cam"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/visibility_usda-2bf7c45881effd3f-1.image b/crates/crust-core/tests/data/import_baselines/visibility_usda-2bf7c45881effd3f-1.image new file mode 100644 index 000000000..c734c5b1d --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/visibility_usda-2bf7c45881effd3f-1.image @@ -0,0 +1 @@ +640x360 16spp clamp-off a04a09c0d4b5e325 diff --git a/crates/crust-core/tests/data/import_baselines/visibility_usda-d0c678c9c1d6a069-1.digest b/crates/crust-core/tests/data/import_baselines/visibility_usda-d0c678c9c1d6a069-1.digest new file mode 100644 index 000000000..3048b6e34 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/visibility_usda-d0c678c9c1d6a069-1.digest @@ -0,0 +1,29 @@ +time: Some(1.0) +working space: Linear Rec.709 (sRGB) +camera path: Some("/W/Hidden/Cam") +camera: Camera { origin: Vec3A(10.0, 0.0, 5.0), lower_left_corner: Vec3A(7.2816353, -1.5290802, -5.0), horizontal: Vec3A(5.4367294, 0.0, 0.0), vertical: Vec3A(0.0, 3.0581603, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: None +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 640, height: 360, region: PixelRect { x0: 0, y0: 0, x1: 640, y1: 360 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 1, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 50.0, aperture: [20.955, 15.2908], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 10.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/visibility.usda"], invisible_overrides: Some(0) } +layer: $DIR/visibility.usda +lights: 2 +light 0: area name Some("/W/Key") lpe None pmf 0.5 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 1: distant name Some("/W/Blink") lpe None pmf 0.5 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 4 geometries, PrimitiveBreakdown { triangles: 0, spheres: 1, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 3 } top level, PrimitiveBreakdown { triangles: 2, spheres: 1, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 3 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:02ff87c392969355 camera=2:02ff87c392969355 shadow=2:02ff87c392969355 indirect=2:02ff87c392969355 +geom 1: material #1 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:13c54b934599bf61 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=1:13c54b934599bf61 +geom 2: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:6008e2a8e10973d5 camera=2:6008e2a8e10973d5 shadow=2:6008e2a8e10973d5 indirect=2:6008e2a8e10973d5 +geom 3: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:da267fdba289dc38 camera=2:da267fdba289dc38 shadow=2:da267fdba289dc38 indirect=2:da267fdba289dc38 +provenance light /W/Blink: LightOrigin { index: 1, geoms: 2..2 } +provenance light /W/Key: LightOrigin { index: 0, geoms: 1..2 } +provenance geometry 0..1: /W/Shown/D +provenance geometry 1..2: /W/Key +provenance geometry 2..4: /W/Scatter +provenance mesh: MeshOrigin { geom_id: 0, slot: 0, baked: false, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 3224020731942780983, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: true, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: Some(1.0), camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/W/Hidden/Cam"), cameras: ["/W/Hidden/Cam"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/W/Hidden/Cam"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/visibility_usda-d0c678c9c1d6a069-1.image b/crates/crust-core/tests/data/import_baselines/visibility_usda-d0c678c9c1d6a069-1.image new file mode 100644 index 000000000..c734c5b1d --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/visibility_usda-d0c678c9c1d6a069-1.image @@ -0,0 +1 @@ +640x360 16spp clamp-off a04a09c0d4b5e325 diff --git a/crates/crust-core/tests/data/import_baselines/visibility_usda-f7d5c6c9644dd6bb-1.digest b/crates/crust-core/tests/data/import_baselines/visibility_usda-f7d5c6c9644dd6bb-1.digest new file mode 100644 index 000000000..d2df34b73 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/visibility_usda-f7d5c6c9644dd6bb-1.digest @@ -0,0 +1,29 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/W/Hidden/Cam") +camera: Camera { origin: Vec3A(10.0, 0.0, 5.0), lower_left_corner: Vec3A(7.2816353, -1.5290802, -5.0), horizontal: Vec3A(5.4367294, 0.0, 0.0), vertical: Vec3A(0.0, 3.0581603, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: None +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 640, height: 360, region: PixelRect { x0: 0, y0: 0, x1: 640, y1: 360 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 50.0, aperture: [20.955, 15.2908], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 10.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/visibility.usda"], invisible_overrides: Some(0) } +layer: $DIR/visibility.usda +lights: 2 +light 0: area name Some("/W/Key") lpe None pmf 0.5 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 1: distant name Some("/W/Blink") lpe None pmf 0.5 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 4 geometries, PrimitiveBreakdown { triangles: 0, spheres: 1, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 3 } top level, PrimitiveBreakdown { triangles: 2, spheres: 1, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 3 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:02ff87c392969355 camera=2:02ff87c392969355 shadow=2:02ff87c392969355 indirect=2:02ff87c392969355 +geom 1: material #1 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:13c54b934599bf61 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=1:13c54b934599bf61 +geom 2: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:6008e2a8e10973d5 camera=2:6008e2a8e10973d5 shadow=2:6008e2a8e10973d5 indirect=2:6008e2a8e10973d5 +geom 3: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:da267fdba289dc38 camera=2:da267fdba289dc38 shadow=2:da267fdba289dc38 indirect=2:da267fdba289dc38 +provenance light /W/Blink: LightOrigin { index: 1, geoms: 2..2 } +provenance light /W/Key: LightOrigin { index: 0, geoms: 1..2 } +provenance geometry 0..1: /W/Shown/D +provenance geometry 1..2: /W/Key +provenance geometry 2..4: /W/Scatter +provenance mesh: MeshOrigin { geom_id: 0, slot: 0, baked: false, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 3224020731942780983, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: true, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/W/Hidden/Cam"), cameras: ["/W/Hidden/Cam"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/W/Hidden/Cam"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/visibility_usda-f7d5c6c9644dd6bb-1.image b/crates/crust-core/tests/data/import_baselines/visibility_usda-f7d5c6c9644dd6bb-1.image new file mode 100644 index 000000000..c734c5b1d --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/visibility_usda-f7d5c6c9644dd6bb-1.image @@ -0,0 +1 @@ +640x360 16spp clamp-off a04a09c0d4b5e325 diff --git a/crates/crust-core/tests/data/import_baselines/visible_light_usda-c593161971da5ec4-1.digest b/crates/crust-core/tests/data/import_baselines/visible_light_usda-c593161971da5ec4-1.digest new file mode 100644 index 000000000..2c4ad9083 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/visible_light_usda-c593161971da5ec4-1.digest @@ -0,0 +1,21 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: None +camera: Camera { origin: Vec3A(15.0, 3.0, 3.0), lower_left_corner: Vec3A(4.8863316, -0.044797063, 4.174048), horizontal: Vec3A(1.2295314, 0.0, -6.147657), vertical: Vec3A(-0.44830504, 3.4967792, -0.08966101), u: Vec3A(0.19611613, 0.0, -0.9805807), v: Vec3A(-0.1271232, 0.991561, -0.02542464), lens_radius: 0.05, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: None +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 640, height: 360, region: PixelRect { x0: 0, y0: 0, x1: 640, y1: 360 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: None, depth_of_field: true, motion_blur: false, layer_stack: ["$DIR/visible_light.usda"], invisible_overrides: Some(0) } +layer: $DIR/visible_light.usda +warning: Warning { code: CameraMissing, kind: Skipped, count: 1, prims: [], message: "USD stage has no UsdGeomCamera — falling back to world::get_settings camera" } +lights: 1 +light 0: area name Some("/World/L") lpe None pmf 1.0 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 1 geometries, PrimitiveBreakdown { triangles: 0, spheres: 1, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 0, spheres: 1, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +geom 0: material #0 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:984632b55acb5495 camera=1:984632b55acb5495 shadow=1:984632b55acb5495 indirect=1:984632b55acb5495 +provenance light /World/L: LightOrigin { index: 0, geoms: 0..1 } +provenance geometry 0..1: /World/L +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: None, cameras: [], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: None, offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/visible_light_usda-c593161971da5ec4-1.image b/crates/crust-core/tests/data/import_baselines/visible_light_usda-c593161971da5ec4-1.image new file mode 100644 index 000000000..0d5371bdf --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/visible_light_usda-c593161971da5ec4-1.image @@ -0,0 +1 @@ +640x360 16spp clamp-off 7262827b81999b78 diff --git a/crates/crust-core/tests/data/import_baselines/volume_in_prototype_usda-d6406b3b1214ee81-1.digest b/crates/crust-core/tests/data/import_baselines/volume_in_prototype_usda-d6406b3b1214ee81-1.digest new file mode 100644 index 000000000..d1a0e9bf9 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/volume_in_prototype_usda-d6406b3b1214ee81-1.digest @@ -0,0 +1,19 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: None +camera: Camera { origin: Vec3A(15.0, 3.0, 3.0), lower_left_corner: Vec3A(4.8863316, -0.044797063, 4.174048), horizontal: Vec3A(1.2295314, 0.0, -6.147657), vertical: Vec3A(-0.44830504, 3.4967792, -0.08966101), u: Vec3A(0.19611613, 0.0, -0.9805807), v: Vec3A(-0.1271232, 0.991561, -0.02542464), lens_radius: 0.05, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: None +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 640, height: 360, region: PixelRect { x0: 0, y0: 0, x1: 640, y1: 360 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: None, depth_of_field: true, motion_blur: false, layer_stack: ["$DIR/volume_in_prototype.usda"], invisible_overrides: Some(0) } +layer: $DIR/volume_in_prototype.usda +warning: Warning { code: VolumeInPrototype, kind: Skipped, count: 2, prims: ["/__Prototype_0/Fog", "/World/Scatter/Protos/Puff"], message: "Volume at /__Prototype_0/Fog is inside a prototype — volumes cannot be instanced, skipped" } +warning: Warning { code: InstancingEmptyPrototype, kind: Skipped, count: 2, prims: ["/__Prototype_0", "/World/Scatter/Protos/Puff"], message: "Prototype /__Prototype_0 contributed no geometry" } +warning: Warning { code: CameraMissing, kind: Skipped, count: 1, prims: [], message: "USD stage has no UsdGeomCamera — falling back to world::get_settings camera" } +lights: 0 +volumes: 0 +world: 0 geometries, PrimitiveBreakdown { triangles: 0, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 0, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: None, cameras: [], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: None, offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/volume_in_prototype_usda-d6406b3b1214ee81-1.image b/crates/crust-core/tests/data/import_baselines/volume_in_prototype_usda-d6406b3b1214ee81-1.image new file mode 100644 index 000000000..c734c5b1d --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/volume_in_prototype_usda-d6406b3b1214ee81-1.image @@ -0,0 +1 @@ +640x360 16spp clamp-off a04a09c0d4b5e325 diff --git a/crates/crust-core/tests/data/import_baselines/volume_usda-93019f1c5ebc08a0-1.digest b/crates/crust-core/tests/data/import_baselines/volume_usda-93019f1c5ebc08a0-1.digest new file mode 100644 index 000000000..95d74b5b0 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/volume_usda-93019f1c5ebc08a0-1.digest @@ -0,0 +1,19 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: None +camera: Camera { origin: Vec3A(15.0, 3.0, 3.0), lower_left_corner: Vec3A(4.8863316, -0.044797063, 4.174048), horizontal: Vec3A(1.2295314, 0.0, -6.147657), vertical: Vec3A(-0.44830504, 3.4967792, -0.08966101), u: Vec3A(0.19611613, 0.0, -0.9805807), v: Vec3A(-0.1271232, 0.991561, -0.02542464), lens_radius: 0.05, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: Some("/Render/settings") +settings: RenderSettings { samples_per_pixel: 3, max_depth: 32, width: 8, height: 8, region: PixelRect { x0: 0, y0: 0, x1: 8, y1: 8 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: Some(PassSummary { path: "/Render/Passes/matte", holdouts: 0, camera_hidden: 0 }) +source: Source { lens: None, depth_of_field: true, motion_blur: false, layer_stack: ["$DIR/volume.usda"], invisible_overrides: Some(0) } +layer: $DIR/volume.usda +warning: Warning { code: RenderPassVolumeIgnored, kind: Skipped, count: 1, prims: ["/World/Fog"], message: "/World/Fog: a volume region in collection:matte of render pass /Render/Passes/matte, which crust does not apply to volumes — the camera sees it as without the pass" } +warning: Warning { code: CameraMissing, kind: Skipped, count: 1, prims: [], message: "USD stage has no UsdGeomCamera — falling back to world::get_settings camera" } +lights: 0 +volumes: 1 +volume 0: sigma_s Vec3A(0.5, 0.5, 0.5) sigma_a Vec3A(0.0, 0.0, 0.0) g 0.0 emission Vec3A(0.0, 0.0, 0.0) mask RayMask(4294967295) class 65535 homogeneous true +world: 0 geometries, PrimitiveBreakdown { triangles: 0, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 0, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +provenance spheres: [] +provenance volumes: ["/World/Fog"] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: Some("/Render/Passes/matte"), keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: None, cameras: [], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: None, offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/volume_usda-93019f1c5ebc08a0-1.image b/crates/crust-core/tests/data/import_baselines/volume_usda-93019f1c5ebc08a0-1.image new file mode 100644 index 000000000..8aad9360c --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/volume_usda-93019f1c5ebc08a0-1.image @@ -0,0 +1 @@ +8x8 16spp clamp-off 9fa9e040e0eedf25 diff --git a/crates/crust-core/tests/data/import_baselines/volume_usda-a8034cd85e6f3de3-1.digest b/crates/crust-core/tests/data/import_baselines/volume_usda-a8034cd85e6f3de3-1.digest new file mode 100644 index 000000000..97b0f3db0 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/volume_usda-a8034cd85e6f3de3-1.digest @@ -0,0 +1,19 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: None +camera: Camera { origin: Vec3A(15.0, 3.0, 3.0), lower_left_corner: Vec3A(4.8863316, -0.044797063, 4.174048), horizontal: Vec3A(1.2295314, 0.0, -6.147657), vertical: Vec3A(-0.44830504, 3.4967792, -0.08966101), u: Vec3A(0.19611613, 0.0, -0.9805807), v: Vec3A(-0.1271232, 0.991561, -0.02542464), lens_radius: 0.05, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: Some("/Render/settings") +settings: RenderSettings { samples_per_pixel: 3, max_depth: 32, width: 8, height: 8, region: PixelRect { x0: 0, y0: 0, x1: 8, y1: 8 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: Some(PassSummary { path: "/Render/Passes/hidden", holdouts: 0, camera_hidden: 0 }) +source: Source { lens: None, depth_of_field: true, motion_blur: false, layer_stack: ["$DIR/volume.usda"], invisible_overrides: Some(0) } +layer: $DIR/volume.usda +warning: Warning { code: RenderPassVolumeIgnored, kind: Skipped, count: 1, prims: ["/World/Fog"], message: "/World/Fog: a volume region outside collection:cameraVisibility of render pass /Render/Passes/hidden, which crust does not apply to volumes — the camera sees it as without the pass" } +warning: Warning { code: CameraMissing, kind: Skipped, count: 1, prims: [], message: "USD stage has no UsdGeomCamera — falling back to world::get_settings camera" } +lights: 0 +volumes: 1 +volume 0: sigma_s Vec3A(0.5, 0.5, 0.5) sigma_a Vec3A(0.0, 0.0, 0.0) g 0.0 emission Vec3A(0.0, 0.0, 0.0) mask RayMask(4294967295) class 65535 homogeneous true +world: 0 geometries, PrimitiveBreakdown { triangles: 0, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 0, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +provenance spheres: [] +provenance volumes: ["/World/Fog"] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: Some("/Render/Passes/hidden"), keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: None, cameras: [], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: None, offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/volume_usda-a8034cd85e6f3de3-1.image b/crates/crust-core/tests/data/import_baselines/volume_usda-a8034cd85e6f3de3-1.image new file mode 100644 index 000000000..8aad9360c --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/volume_usda-a8034cd85e6f3de3-1.image @@ -0,0 +1 @@ +8x8 16spp clamp-off 9fa9e040e0eedf25 diff --git a/crates/crust-core/tests/data/import_baselines/volume_usda-aafdaaa0da96ff01-1.digest b/crates/crust-core/tests/data/import_baselines/volume_usda-aafdaaa0da96ff01-1.digest new file mode 100644 index 000000000..97b0f3db0 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/volume_usda-aafdaaa0da96ff01-1.digest @@ -0,0 +1,19 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: None +camera: Camera { origin: Vec3A(15.0, 3.0, 3.0), lower_left_corner: Vec3A(4.8863316, -0.044797063, 4.174048), horizontal: Vec3A(1.2295314, 0.0, -6.147657), vertical: Vec3A(-0.44830504, 3.4967792, -0.08966101), u: Vec3A(0.19611613, 0.0, -0.9805807), v: Vec3A(-0.1271232, 0.991561, -0.02542464), lens_radius: 0.05, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: Some("/Render/settings") +settings: RenderSettings { samples_per_pixel: 3, max_depth: 32, width: 8, height: 8, region: PixelRect { x0: 0, y0: 0, x1: 8, y1: 8 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: Some(PassSummary { path: "/Render/Passes/hidden", holdouts: 0, camera_hidden: 0 }) +source: Source { lens: None, depth_of_field: true, motion_blur: false, layer_stack: ["$DIR/volume.usda"], invisible_overrides: Some(0) } +layer: $DIR/volume.usda +warning: Warning { code: RenderPassVolumeIgnored, kind: Skipped, count: 1, prims: ["/World/Fog"], message: "/World/Fog: a volume region outside collection:cameraVisibility of render pass /Render/Passes/hidden, which crust does not apply to volumes — the camera sees it as without the pass" } +warning: Warning { code: CameraMissing, kind: Skipped, count: 1, prims: [], message: "USD stage has no UsdGeomCamera — falling back to world::get_settings camera" } +lights: 0 +volumes: 1 +volume 0: sigma_s Vec3A(0.5, 0.5, 0.5) sigma_a Vec3A(0.0, 0.0, 0.0) g 0.0 emission Vec3A(0.0, 0.0, 0.0) mask RayMask(4294967295) class 65535 homogeneous true +world: 0 geometries, PrimitiveBreakdown { triangles: 0, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 0, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +provenance spheres: [] +provenance volumes: ["/World/Fog"] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: Some("/Render/Passes/hidden"), keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: None, cameras: [], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: None, offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/volume_usda-aafdaaa0da96ff01-1.image b/crates/crust-core/tests/data/import_baselines/volume_usda-aafdaaa0da96ff01-1.image new file mode 100644 index 000000000..8aad9360c --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/volume_usda-aafdaaa0da96ff01-1.image @@ -0,0 +1 @@ +8x8 16spp clamp-off 9fa9e040e0eedf25 diff --git a/crates/crust-core/tests/data/import_baselines/volume_usda-bac87085eea27fa2-1.digest b/crates/crust-core/tests/data/import_baselines/volume_usda-bac87085eea27fa2-1.digest new file mode 100644 index 000000000..ab32e0df1 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/volume_usda-bac87085eea27fa2-1.digest @@ -0,0 +1,18 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: None +camera: Camera { origin: Vec3A(15.0, 3.0, 3.0), lower_left_corner: Vec3A(4.8863316, -0.044797063, 4.174048), horizontal: Vec3A(1.2295314, 0.0, -6.147657), vertical: Vec3A(-0.44830504, 3.4967792, -0.08966101), u: Vec3A(0.19611613, 0.0, -0.9805807), v: Vec3A(-0.1271232, 0.991561, -0.02542464), lens_radius: 0.05, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: Some("/Render/settings") +settings: RenderSettings { samples_per_pixel: 3, max_depth: 32, width: 8, height: 8, region: PixelRect { x0: 0, y0: 0, x1: 8, y1: 8 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: None, depth_of_field: true, motion_blur: false, layer_stack: ["$DIR/volume.usda"], invisible_overrides: Some(0) } +layer: $DIR/volume.usda +warning: Warning { code: CameraMissing, kind: Skipped, count: 1, prims: [], message: "USD stage has no UsdGeomCamera — falling back to world::get_settings camera" } +lights: 0 +volumes: 1 +volume 0: sigma_s Vec3A(0.5, 0.5, 0.5) sigma_a Vec3A(0.0, 0.0, 0.0) g 0.0 emission Vec3A(0.0, 0.0, 0.0) mask RayMask(4294967295) class 65535 homogeneous true +world: 0 geometries, PrimitiveBreakdown { triangles: 0, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 0, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +provenance spheres: [] +provenance volumes: ["/World/Fog"] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: None, cameras: [], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: None, offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/volume_usda-bac87085eea27fa2-1.image b/crates/crust-core/tests/data/import_baselines/volume_usda-bac87085eea27fa2-1.image new file mode 100644 index 000000000..8aad9360c --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/volume_usda-bac87085eea27fa2-1.image @@ -0,0 +1 @@ +8x8 16spp clamp-off 9fa9e040e0eedf25 diff --git a/crates/crust-core/tests/data/import_baselines/volume_usda-ca0a3fd05666d468-1.digest b/crates/crust-core/tests/data/import_baselines/volume_usda-ca0a3fd05666d468-1.digest new file mode 100644 index 000000000..ab32e0df1 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/volume_usda-ca0a3fd05666d468-1.digest @@ -0,0 +1,18 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: None +camera: Camera { origin: Vec3A(15.0, 3.0, 3.0), lower_left_corner: Vec3A(4.8863316, -0.044797063, 4.174048), horizontal: Vec3A(1.2295314, 0.0, -6.147657), vertical: Vec3A(-0.44830504, 3.4967792, -0.08966101), u: Vec3A(0.19611613, 0.0, -0.9805807), v: Vec3A(-0.1271232, 0.991561, -0.02542464), lens_radius: 0.05, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: Some("/Render/settings") +settings: RenderSettings { samples_per_pixel: 3, max_depth: 32, width: 8, height: 8, region: PixelRect { x0: 0, y0: 0, x1: 8, y1: 8 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: None, depth_of_field: true, motion_blur: false, layer_stack: ["$DIR/volume.usda"], invisible_overrides: Some(0) } +layer: $DIR/volume.usda +warning: Warning { code: CameraMissing, kind: Skipped, count: 1, prims: [], message: "USD stage has no UsdGeomCamera — falling back to world::get_settings camera" } +lights: 0 +volumes: 1 +volume 0: sigma_s Vec3A(0.5, 0.5, 0.5) sigma_a Vec3A(0.0, 0.0, 0.0) g 0.0 emission Vec3A(0.0, 0.0, 0.0) mask RayMask(4294967295) class 65535 homogeneous true +world: 0 geometries, PrimitiveBreakdown { triangles: 0, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 0, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +provenance spheres: [] +provenance volumes: ["/World/Fog"] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: None, cameras: [], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: None, offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/volume_usda-ca0a3fd05666d468-1.image b/crates/crust-core/tests/data/import_baselines/volume_usda-ca0a3fd05666d468-1.image new file mode 100644 index 000000000..8aad9360c --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/volume_usda-ca0a3fd05666d468-1.image @@ -0,0 +1 @@ +8x8 16spp clamp-off 9fa9e040e0eedf25 diff --git a/crates/crust-core/tests/data/import_baselines/volume_usda-dc3452b116e9581a-1.digest b/crates/crust-core/tests/data/import_baselines/volume_usda-dc3452b116e9581a-1.digest new file mode 100644 index 000000000..95d74b5b0 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/volume_usda-dc3452b116e9581a-1.digest @@ -0,0 +1,19 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: None +camera: Camera { origin: Vec3A(15.0, 3.0, 3.0), lower_left_corner: Vec3A(4.8863316, -0.044797063, 4.174048), horizontal: Vec3A(1.2295314, 0.0, -6.147657), vertical: Vec3A(-0.44830504, 3.4967792, -0.08966101), u: Vec3A(0.19611613, 0.0, -0.9805807), v: Vec3A(-0.1271232, 0.991561, -0.02542464), lens_radius: 0.05, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: Some("/Render/settings") +settings: RenderSettings { samples_per_pixel: 3, max_depth: 32, width: 8, height: 8, region: PixelRect { x0: 0, y0: 0, x1: 8, y1: 8 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: Some(PassSummary { path: "/Render/Passes/matte", holdouts: 0, camera_hidden: 0 }) +source: Source { lens: None, depth_of_field: true, motion_blur: false, layer_stack: ["$DIR/volume.usda"], invisible_overrides: Some(0) } +layer: $DIR/volume.usda +warning: Warning { code: RenderPassVolumeIgnored, kind: Skipped, count: 1, prims: ["/World/Fog"], message: "/World/Fog: a volume region in collection:matte of render pass /Render/Passes/matte, which crust does not apply to volumes — the camera sees it as without the pass" } +warning: Warning { code: CameraMissing, kind: Skipped, count: 1, prims: [], message: "USD stage has no UsdGeomCamera — falling back to world::get_settings camera" } +lights: 0 +volumes: 1 +volume 0: sigma_s Vec3A(0.5, 0.5, 0.5) sigma_a Vec3A(0.0, 0.0, 0.0) g 0.0 emission Vec3A(0.0, 0.0, 0.0) mask RayMask(4294967295) class 65535 homogeneous true +world: 0 geometries, PrimitiveBreakdown { triangles: 0, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 0, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +provenance spheres: [] +provenance volumes: ["/World/Fog"] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: Some("/Render/Passes/matte"), keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: None, cameras: [], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: None, offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/volume_usda-dc3452b116e9581a-1.image b/crates/crust-core/tests/data/import_baselines/volume_usda-dc3452b116e9581a-1.image new file mode 100644 index 000000000..8aad9360c --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/volume_usda-dc3452b116e9581a-1.image @@ -0,0 +1 @@ +8x8 16spp clamp-off 9fa9e040e0eedf25 diff --git a/crates/crust-core/tests/data/import_baselines/wide_ok_usda-07bfe44a3376f28e-1.digest b/crates/crust-core/tests/data/import_baselines/wide_ok_usda-07bfe44a3376f28e-1.digest new file mode 100644 index 000000000..74b66c6ce --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/wide_ok_usda-07bfe44a3376f28e-1.digest @@ -0,0 +1,26 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/World/cam") +camera: Camera { origin: Vec3A(0.0, 0.0, 0.0), lower_left_corner: Vec3A(-5.0, -3.75, -10.0), horizontal: Vec3A(10.0, 0.0, 0.0), vertical: Vec3A(0.0, 7.5, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: Some("/Render/settings") +settings: RenderSettings { samples_per_pixel: 16, max_depth: 2, width: 32, height: 24, region: PixelRect { x0: 0, y0: 0, x1: 32, y1: 24 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [AovProduct { prim_path: "/Render/p", name: "p.exr", vars: [AovVar { prim_path: "/Render/C", name: "C", channel_prefix: None, source: Color, components: 3, precision: Float, accumulation: Filtered, clear: 0.0, expression: None, raw: false, variance: false }, AovVar { prim_path: "/Render/matte", name: "matte", channel_prefix: None, source: Primvar(PrimvarSource { index: 0, components: 1, role: Float }), components: 1, precision: Float, accumulation: Filtered, clear: 0.0, expression: None, raw: false, variance: false }, AovVar { prim_path: "/Render/depth", name: "depth", channel_prefix: None, source: Depth, components: 1, precision: Float, accumulation: Closest, clear: inf, expression: None, raw: false, variance: false }, AovVar { prim_path: "/Render/depth_filtered", name: "depth_filtered", channel_prefix: None, source: Depth, components: 1, precision: Float, accumulation: Filtered, clear: inf, expression: None, raw: false, variance: false }, AovVar { prim_path: "/Render/variance", name: "variance", channel_prefix: None, source: Variance, components: 1, precision: Float, accumulation: Filtered, clear: 0.0, expression: None, raw: false, variance: false }, AovVar { prim_path: "/Render/look_out", name: "look_out", channel_prefix: None, source: Filter(FilterSource { display: false, filter: 0, output: 0, components: 3, radiance: true }), components: 3, precision: Float, accumulation: Filtered, clear: 0.0, expression: None, raw: false, variance: false }, AovVar { prim_path: "/Render/f_out", name: "f_out", channel_prefix: None, source: Filter(FilterSource { display: false, filter: 1, output: 0, components: 2, radiance: true }), components: 2, precision: Float, accumulation: Filtered, clear: 0.0, expression: None, raw: false, variance: false }], attributes: [] }], precomp: Some(Precomp { sample_filters: ["/Render/look", "/Render/f"], display_filters: [], display: "beauty" }) } +pass: None +source: Source { lens: Some(Lens { focal_length: 24.0, aperture: [24.0, 18.0], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 10.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/wide_ok.usda"], invisible_overrides: Some(0) } +layer: $DIR/wide_ok.usda +lights: 1 +light 0: dome name Some("/World/sky") lpe None pmf 1.0 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 2 geometries, PrimitiveBreakdown { triangles: 4, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 4, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov Some((Some(0), false)) swapped false curves false scale 1.0 motion [] pieces all=2:2a13523c8e09c13d camera=2:2a13523c8e09c13d shadow=2:2a13523c8e09c13d indirect=2:2a13523c8e09c13d +geom 1: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:31db52e4afd4a225 camera=2:31db52e4afd4a225 shadow=2:31db52e4afd4a225 indirect=2:31db52e4afd4a225 +provenance light /World/sky: LightOrigin { index: 0, geoms: 0..0 } +provenance geometry 0..1: /World/Card +provenance geometry 1..2: /World/Wall +provenance mesh: MeshOrigin { geom_id: 0, slot: 0, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 1, slot: 1, baked: true, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 3430351340666728903, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 1: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 13118596165941616386, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: true, working: None, camera: Some("/World/cam"), cameras: ["/World/cam"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [("matte", 1)], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/World/cam"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/wide_ok_usda-07bfe44a3376f28e-1.image b/crates/crust-core/tests/data/import_baselines/wide_ok_usda-07bfe44a3376f28e-1.image new file mode 100644 index 000000000..f08c49d36 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/wide_ok_usda-07bfe44a3376f28e-1.image @@ -0,0 +1 @@ +32x24 16spp clamp-off e72b7b7cff87e77d diff --git a/crates/crust-core/tests/data/import_baselines/wide_usda-98ba41961b37bb34-1.digest b/crates/crust-core/tests/data/import_baselines/wide_usda-98ba41961b37bb34-1.digest new file mode 100644 index 000000000..58ef35700 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/wide_usda-98ba41961b37bb34-1.digest @@ -0,0 +1,27 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/World/cam") +camera: Camera { origin: Vec3A(0.0, 0.0, 0.0), lower_left_corner: Vec3A(-5.0, -3.75, -10.0), horizontal: Vec3A(10.0, 0.0, 0.0), vertical: Vec3A(0.0, 7.5, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: Some("/Render/settings") +settings: RenderSettings { samples_per_pixel: 16, max_depth: 2, width: 32, height: 24, region: PixelRect { x0: 0, y0: 0, x1: 32, y1: 24 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [AovProduct { prim_path: "/Render/p", name: "p.exr", vars: [AovVar { prim_path: "/Render/C", name: "C", channel_prefix: None, source: Color, components: 3, precision: Float, accumulation: Filtered, clear: 0.0, expression: None, raw: false, variance: false }, AovVar { prim_path: "/Render/matte", name: "matte", channel_prefix: None, source: Primvar(PrimvarSource { index: 0, components: 1, role: Float }), components: 1, precision: Float, accumulation: Filtered, clear: 0.0, expression: None, raw: false, variance: false }, AovVar { prim_path: "/Render/depth", name: "depth", channel_prefix: None, source: Depth, components: 1, precision: Float, accumulation: Closest, clear: inf, expression: None, raw: false, variance: false }, AovVar { prim_path: "/Render/depth_filtered", name: "depth_filtered", channel_prefix: None, source: Depth, components: 1, precision: Float, accumulation: Filtered, clear: inf, expression: None, raw: false, variance: false }, AovVar { prim_path: "/Render/variance", name: "variance", channel_prefix: None, source: Variance, components: 1, precision: Float, accumulation: Filtered, clear: 0.0, expression: None, raw: false, variance: false }, AovVar { prim_path: "/Render/look_out", name: "look_out", channel_prefix: None, source: Filter(FilterSource { display: false, filter: 0, output: 0, components: 3, radiance: true }), components: 3, precision: Float, accumulation: Filtered, clear: 0.0, expression: None, raw: false, variance: false }], attributes: [] }], precomp: Some(Precomp { sample_filters: ["/Render/look", "/Render/f"], display_filters: [], display: "beauty" }) } +pass: None +source: Source { lens: Some(Lens { focal_length: 24.0, aperture: [24.0, 18.0], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 10.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/wide.usda"], invisible_overrides: Some(0) } +layer: $DIR/wide.usda +warning: Warning { code: AovTypeMismatch, kind: Skipped, count: 1, prims: ["/Render/f_out"], message: "/Render/f_out: a filter output cannot be written as \"color4f\" (one to three float or half channels); no channel written" } +lights: 1 +light 0: dome name Some("/World/sky") lpe None pmf 1.0 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 2 geometries, PrimitiveBreakdown { triangles: 4, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 4, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov Some((Some(0), false)) swapped false curves false scale 1.0 motion [] pieces all=2:2a13523c8e09c13d camera=2:2a13523c8e09c13d shadow=2:2a13523c8e09c13d indirect=2:2a13523c8e09c13d +geom 1: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=2:31db52e4afd4a225 camera=2:31db52e4afd4a225 shadow=2:31db52e4afd4a225 indirect=2:31db52e4afd4a225 +provenance light /World/sky: LightOrigin { index: 0, geoms: 0..0 } +provenance geometry 0..1: /World/Card +provenance geometry 1..2: /World/Wall +provenance mesh: MeshOrigin { geom_id: 0, slot: 0, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 1, slot: 1, baked: true, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 3430351340666728903, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 1: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 13118596165941616386, n_points: 4, n_indices: 4, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: true, working: None, camera: Some("/World/cam"), cameras: ["/World/cam"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [("matte", 1)], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/World/cam"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/wide_usda-98ba41961b37bb34-1.image b/crates/crust-core/tests/data/import_baselines/wide_usda-98ba41961b37bb34-1.image new file mode 100644 index 000000000..f08c49d36 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/wide_usda-98ba41961b37bb34-1.image @@ -0,0 +1 @@ +32x24 16spp clamp-off e72b7b7cff87e77d diff --git a/crates/crust-core/tests/data/import_baselines/window_bottom_quarter_usda-3769adf96d53a2f1-1.digest b/crates/crust-core/tests/data/import_baselines/window_bottom_quarter_usda-3769adf96d53a2f1-1.digest new file mode 100644 index 000000000..f0bf0062d --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/window_bottom_quarter_usda-3769adf96d53a2f1-1.digest @@ -0,0 +1,18 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/World/other") +camera: Camera { origin: Vec3A(0.0, 0.0, 0.0), lower_left_corner: Vec3A(-2.0954998, -2.0954998, -10.0), horizontal: Vec3A(4.1909995, 0.0, 0.0), vertical: Vec3A(0.0, 4.1909995, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: Some("/Render/settings") +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 100, height: 100, region: PixelRect { x0: 0, y0: 75, x1: 100, y1: 100 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [AovProduct { prim_path: "/Render/p", name: "p.exr", vars: [AovVar { prim_path: "/Render/beauty", name: "beauty", channel_prefix: None, source: Color, components: 4, precision: Float, accumulation: Filtered, clear: 0.0, expression: None, raw: false, variance: false }], attributes: [] }], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 50.0, aperture: [20.955, 15.2908], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 10.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/window_bottom_quarter.usda"], invisible_overrides: Some(0) } +layer: $DIR/window_bottom_quarter.usda +lights: 0 +volumes: 0 +world: 1 geometries, PrimitiveBreakdown { triangles: 0, spheres: 1, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 0, spheres: 1, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:fb1e7d48790aec95 camera=1:fb1e7d48790aec95 shadow=1:fb1e7d48790aec95 indirect=1:fb1e7d48790aec95 +provenance geometry 0..1: /World/ball +provenance spheres: [0] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/World/other"), cameras: ["/World/other", "/World/cam"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/World/other"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/window_bottom_quarter_usda-3769adf96d53a2f1-1.image b/crates/crust-core/tests/data/import_baselines/window_bottom_quarter_usda-3769adf96d53a2f1-1.image new file mode 100644 index 000000000..6a456e4e1 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/window_bottom_quarter_usda-3769adf96d53a2f1-1.image @@ -0,0 +1 @@ +100x100 16spp clamp-off e94d157b19346225 diff --git a/crates/crust-core/tests/data/import_baselines/window_boundaries_usda-8ec00fd05808f90e-1.digest b/crates/crust-core/tests/data/import_baselines/window_boundaries_usda-8ec00fd05808f90e-1.digest new file mode 100644 index 000000000..ffbda5240 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/window_boundaries_usda-8ec00fd05808f90e-1.digest @@ -0,0 +1,18 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/World/other") +camera: Camera { origin: Vec3A(0.0, 0.0, 0.0), lower_left_corner: Vec3A(-3.0581603, -1.5290802, -10.0), horizontal: Vec3A(6.1163206, 0.0, 0.0), vertical: Vec3A(0.0, 3.0581603, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: Some("/Render/settings") +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 8, height: 4, region: PixelRect { x0: 2, y0: 1, x1: 6, y1: 3 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [AovProduct { prim_path: "/Render/p", name: "p.exr", vars: [AovVar { prim_path: "/Render/beauty", name: "beauty", channel_prefix: None, source: Color, components: 4, precision: Float, accumulation: Filtered, clear: 0.0, expression: None, raw: false, variance: false }], attributes: [] }], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 50.0, aperture: [20.955, 15.2908], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 10.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/window_boundaries.usda"], invisible_overrides: Some(0) } +layer: $DIR/window_boundaries.usda +lights: 0 +volumes: 0 +world: 1 geometries, PrimitiveBreakdown { triangles: 0, spheres: 1, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 0, spheres: 1, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:fb1e7d48790aec95 camera=1:fb1e7d48790aec95 shadow=1:fb1e7d48790aec95 indirect=1:fb1e7d48790aec95 +provenance geometry 0..1: /World/ball +provenance spheres: [0] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/World/other"), cameras: ["/World/other", "/World/cam"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/World/other"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/window_boundaries_usda-8ec00fd05808f90e-1.image b/crates/crust-core/tests/data/import_baselines/window_boundaries_usda-8ec00fd05808f90e-1.image new file mode 100644 index 000000000..92ac514d4 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/window_boundaries_usda-8ec00fd05808f90e-1.image @@ -0,0 +1 @@ +8x4 16spp clamp-off c86ec345c0ee8125 diff --git a/crates/crust-core/tests/data/import_baselines/window_centres_usda-5b25bbbab727a81b-1.digest b/crates/crust-core/tests/data/import_baselines/window_centres_usda-5b25bbbab727a81b-1.digest new file mode 100644 index 000000000..d143c2859 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/window_centres_usda-5b25bbbab727a81b-1.digest @@ -0,0 +1,18 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/World/other") +camera: Camera { origin: Vec3A(0.0, 0.0, 0.0), lower_left_corner: Vec3A(-3.0581603, -1.5290802, -10.0), horizontal: Vec3A(6.1163206, 0.0, 0.0), vertical: Vec3A(0.0, 3.0581603, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: Some("/Render/settings") +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 8, height: 4, region: PixelRect { x0: 2, y0: 0, x1: 3, y1: 4 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [AovProduct { prim_path: "/Render/p", name: "p.exr", vars: [AovVar { prim_path: "/Render/beauty", name: "beauty", channel_prefix: None, source: Color, components: 4, precision: Float, accumulation: Filtered, clear: 0.0, expression: None, raw: false, variance: false }], attributes: [] }], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 50.0, aperture: [20.955, 15.2908], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 10.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/window_centres.usda"], invisible_overrides: Some(0) } +layer: $DIR/window_centres.usda +lights: 0 +volumes: 0 +world: 1 geometries, PrimitiveBreakdown { triangles: 0, spheres: 1, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 0, spheres: 1, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:fb1e7d48790aec95 camera=1:fb1e7d48790aec95 shadow=1:fb1e7d48790aec95 indirect=1:fb1e7d48790aec95 +provenance geometry 0..1: /World/ball +provenance spheres: [0] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/World/other"), cameras: ["/World/other", "/World/cam"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/World/other"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/window_centres_usda-5b25bbbab727a81b-1.image b/crates/crust-core/tests/data/import_baselines/window_centres_usda-5b25bbbab727a81b-1.image new file mode 100644 index 000000000..92ac514d4 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/window_centres_usda-5b25bbbab727a81b-1.image @@ -0,0 +1 @@ +8x4 16spp clamp-off c86ec345c0ee8125 diff --git a/crates/crust-core/tests/data/import_baselines/window_default_usda-1d0d1bbb6d0e388d-1.digest b/crates/crust-core/tests/data/import_baselines/window_default_usda-1d0d1bbb6d0e388d-1.digest new file mode 100644 index 000000000..3133f71cf --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/window_default_usda-1d0d1bbb6d0e388d-1.digest @@ -0,0 +1,18 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/World/other") +camera: Camera { origin: Vec3A(0.0, 0.0, 0.0), lower_left_corner: Vec3A(-2.7183647, -1.5290802, -10.0), horizontal: Vec3A(5.4367294, 0.0, 0.0), vertical: Vec3A(0.0, 3.0581603, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: Some("/Render/settings") +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 64, height: 36, region: PixelRect { x0: 0, y0: 0, x1: 64, y1: 36 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [AovProduct { prim_path: "/Render/p", name: "p.exr", vars: [AovVar { prim_path: "/Render/beauty", name: "beauty", channel_prefix: None, source: Color, components: 4, precision: Float, accumulation: Filtered, clear: 0.0, expression: None, raw: false, variance: false }], attributes: [] }], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 50.0, aperture: [20.955, 15.2908], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 10.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/window_default.usda"], invisible_overrides: Some(0) } +layer: $DIR/window_default.usda +lights: 0 +volumes: 0 +world: 1 geometries, PrimitiveBreakdown { triangles: 0, spheres: 1, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 0, spheres: 1, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:fb1e7d48790aec95 camera=1:fb1e7d48790aec95 shadow=1:fb1e7d48790aec95 indirect=1:fb1e7d48790aec95 +provenance geometry 0..1: /World/ball +provenance spheres: [0] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/World/other"), cameras: ["/World/other", "/World/cam"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/World/other"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/window_default_usda-1d0d1bbb6d0e388d-1.image b/crates/crust-core/tests/data/import_baselines/window_default_usda-1d0d1bbb6d0e388d-1.image new file mode 100644 index 000000000..f4ebc1648 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/window_default_usda-1d0d1bbb6d0e388d-1.image @@ -0,0 +1 @@ +64x36 16spp clamp-off 1028d44458cc9325 diff --git a/crates/crust-core/tests/data/import_baselines/window_empty_usda-c239bdc771be269c-1.digest b/crates/crust-core/tests/data/import_baselines/window_empty_usda-c239bdc771be269c-1.digest new file mode 100644 index 000000000..19d48d574 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/window_empty_usda-c239bdc771be269c-1.digest @@ -0,0 +1,19 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/World/other") +camera: Camera { origin: Vec3A(0.0, 0.0, 0.0), lower_left_corner: Vec3A(-2.7183647, -1.5290802, -10.0), horizontal: Vec3A(5.4367294, 0.0, 0.0), vertical: Vec3A(0.0, 3.0581603, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: Some("/Render/settings") +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 640, height: 360, region: PixelRect { x0: 0, y0: 0, x1: 640, y1: 360 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [AovProduct { prim_path: "/Render/p", name: "p.exr", vars: [AovVar { prim_path: "/Render/beauty", name: "beauty", channel_prefix: None, source: Color, components: 4, precision: Float, accumulation: Filtered, clear: 0.0, expression: None, raw: false, variance: false }], attributes: [] }], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 50.0, aperture: [20.955, 15.2908], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 10.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/window_empty.usda"], invisible_overrides: Some(0) } +layer: $DIR/window_empty.usda +warning: Warning { code: ProductInvalidDataWindow, kind: Refused, count: 1, prims: [], message: "dataWindowNDC = (0.5, 0.5, 0.5, 0.6) selects no pixel of the 640x360 frame; rendering the full frame" } +lights: 0 +volumes: 0 +world: 1 geometries, PrimitiveBreakdown { triangles: 0, spheres: 1, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 0, spheres: 1, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:fb1e7d48790aec95 camera=1:fb1e7d48790aec95 shadow=1:fb1e7d48790aec95 indirect=1:fb1e7d48790aec95 +provenance geometry 0..1: /World/ball +provenance spheres: [0] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/World/other"), cameras: ["/World/other", "/World/cam"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/World/other"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/window_empty_usda-c239bdc771be269c-1.image b/crates/crust-core/tests/data/import_baselines/window_empty_usda-c239bdc771be269c-1.image new file mode 100644 index 000000000..c734c5b1d --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/window_empty_usda-c239bdc771be269c-1.image @@ -0,0 +1 @@ +640x360 16spp clamp-off a04a09c0d4b5e325 diff --git a/crates/crust-core/tests/data/import_baselines/window_full_vs_unauthored_usda-6f84b7cb89845fa4-1.digest b/crates/crust-core/tests/data/import_baselines/window_full_vs_unauthored_usda-6f84b7cb89845fa4-1.digest new file mode 100644 index 000000000..9c5bc9ec2 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/window_full_vs_unauthored_usda-6f84b7cb89845fa4-1.digest @@ -0,0 +1,18 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/World/other") +camera: Camera { origin: Vec3A(0.0, 0.0, 0.0), lower_left_corner: Vec3A(-2.7183647, -1.5290802, -10.0), horizontal: Vec3A(5.4367294, 0.0, 0.0), vertical: Vec3A(0.0, 3.0581603, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: Some("/Render/settings") +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 64, height: 36, region: PixelRect { x0: 0, y0: 0, x1: 64, y1: 36 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [AovProduct { prim_path: "/Render/a", name: "a.exr", vars: [AovVar { prim_path: "/Render/beauty", name: "beauty", channel_prefix: None, source: Color, components: 4, precision: Float, accumulation: Filtered, clear: 0.0, expression: None, raw: false, variance: false }], attributes: [] }, AovProduct { prim_path: "/Render/b", name: "b.exr", vars: [AovVar { prim_path: "/Render/beauty", name: "beauty", channel_prefix: None, source: Color, components: 4, precision: Float, accumulation: Filtered, clear: 0.0, expression: None, raw: false, variance: false }], attributes: [] }], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 50.0, aperture: [20.955, 15.2908], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 10.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/window_full_vs_unauthored.usda"], invisible_overrides: Some(0) } +layer: $DIR/window_full_vs_unauthored.usda +lights: 0 +volumes: 0 +world: 1 geometries, PrimitiveBreakdown { triangles: 0, spheres: 1, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 0, spheres: 1, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:fb1e7d48790aec95 camera=1:fb1e7d48790aec95 shadow=1:fb1e7d48790aec95 indirect=1:fb1e7d48790aec95 +provenance geometry 0..1: /World/ball +provenance spheres: [0] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/World/other"), cameras: ["/World/other", "/World/cam"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/World/other"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/window_full_vs_unauthored_usda-6f84b7cb89845fa4-1.image b/crates/crust-core/tests/data/import_baselines/window_full_vs_unauthored_usda-6f84b7cb89845fa4-1.image new file mode 100644 index 000000000..f4ebc1648 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/window_full_vs_unauthored_usda-6f84b7cb89845fa4-1.image @@ -0,0 +1 @@ +64x36 16spp clamp-off 1028d44458cc9325 diff --git a/crates/crust-core/tests/data/import_baselines/window_honoured_usda-0e440c93c494db71-1.digest b/crates/crust-core/tests/data/import_baselines/window_honoured_usda-0e440c93c494db71-1.digest new file mode 100644 index 000000000..f1fd640c1 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/window_honoured_usda-0e440c93c494db71-1.digest @@ -0,0 +1,18 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/World/other") +camera: Camera { origin: Vec3A(0.0, 0.0, 0.0), lower_left_corner: Vec3A(-2.7183647, -1.5290802, -10.0), horizontal: Vec3A(5.4367294, 0.0, 0.0), vertical: Vec3A(0.0, 3.0581603, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: Some("/Render/settings") +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 64, height: 36, region: PixelRect { x0: 16, y0: 0, x1: 64, y1: 36 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [AovProduct { prim_path: "/Render/p", name: "p.exr", vars: [AovVar { prim_path: "/Render/beauty", name: "beauty", channel_prefix: None, source: Color, components: 4, precision: Float, accumulation: Filtered, clear: 0.0, expression: None, raw: false, variance: false }], attributes: [] }], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 50.0, aperture: [20.955, 15.2908], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 10.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/window_honoured.usda"], invisible_overrides: Some(0) } +layer: $DIR/window_honoured.usda +lights: 0 +volumes: 0 +world: 1 geometries, PrimitiveBreakdown { triangles: 0, spheres: 1, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 0, spheres: 1, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:fb1e7d48790aec95 camera=1:fb1e7d48790aec95 shadow=1:fb1e7d48790aec95 indirect=1:fb1e7d48790aec95 +provenance geometry 0..1: /World/ball +provenance spheres: [0] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/World/other"), cameras: ["/World/other", "/World/cam"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/World/other"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/window_honoured_usda-0e440c93c494db71-1.image b/crates/crust-core/tests/data/import_baselines/window_honoured_usda-0e440c93c494db71-1.image new file mode 100644 index 000000000..f4ebc1648 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/window_honoured_usda-0e440c93c494db71-1.image @@ -0,0 +1 @@ +64x36 16spp clamp-off 1028d44458cc9325 diff --git a/crates/crust-core/tests/data/import_baselines/window_no_products_usda-9317bad8a6d2e63d-1.digest b/crates/crust-core/tests/data/import_baselines/window_no_products_usda-9317bad8a6d2e63d-1.digest new file mode 100644 index 000000000..f40d5cb8a --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/window_no_products_usda-9317bad8a6d2e63d-1.digest @@ -0,0 +1,18 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/World/other") +camera: Camera { origin: Vec3A(0.0, 0.0, 0.0), lower_left_corner: Vec3A(-2.7183647, -1.5290802, -10.0), horizontal: Vec3A(5.4367294, 0.0, 0.0), vertical: Vec3A(0.0, 3.0581603, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: Some("/Render/settings") +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 640, height: 360, region: PixelRect { x0: 320, y0: 0, x1: 640, y1: 360 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 50.0, aperture: [20.955, 15.2908], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 10.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/window_no_products.usda"], invisible_overrides: Some(0) } +layer: $DIR/window_no_products.usda +lights: 0 +volumes: 0 +world: 1 geometries, PrimitiveBreakdown { triangles: 0, spheres: 1, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 0, spheres: 1, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:fb1e7d48790aec95 camera=1:fb1e7d48790aec95 shadow=1:fb1e7d48790aec95 indirect=1:fb1e7d48790aec95 +provenance geometry 0..1: /World/ball +provenance spheres: [0] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/World/other"), cameras: ["/World/other", "/World/cam"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/World/other"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/window_no_products_usda-9317bad8a6d2e63d-1.image b/crates/crust-core/tests/data/import_baselines/window_no_products_usda-9317bad8a6d2e63d-1.image new file mode 100644 index 000000000..c734c5b1d --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/window_no_products_usda-9317bad8a6d2e63d-1.image @@ -0,0 +1 @@ +640x360 16spp clamp-off a04a09c0d4b5e325 diff --git a/crates/crust-core/tests/data/import_baselines/window_off_frame_usda-0e5c269b6dd24fb6-1.digest b/crates/crust-core/tests/data/import_baselines/window_off_frame_usda-0e5c269b6dd24fb6-1.digest new file mode 100644 index 000000000..a5120979f --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/window_off_frame_usda-0e5c269b6dd24fb6-1.digest @@ -0,0 +1,19 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/World/other") +camera: Camera { origin: Vec3A(0.0, 0.0, 0.0), lower_left_corner: Vec3A(-2.7183647, -1.5290802, -10.0), horizontal: Vec3A(5.4367294, 0.0, 0.0), vertical: Vec3A(0.0, 3.0581603, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: Some("/Render/settings") +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 640, height: 360, region: PixelRect { x0: 0, y0: 0, x1: 640, y1: 360 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [AovProduct { prim_path: "/Render/p", name: "p.exr", vars: [AovVar { prim_path: "/Render/beauty", name: "beauty", channel_prefix: None, source: Color, components: 4, precision: Float, accumulation: Filtered, clear: 0.0, expression: None, raw: false, variance: false }], attributes: [] }], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 50.0, aperture: [20.955, 15.2908], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 10.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/window_off_frame.usda"], invisible_overrides: Some(0) } +layer: $DIR/window_off_frame.usda +warning: Warning { code: ProductInvalidDataWindow, kind: Refused, count: 1, prims: [], message: "dataWindowNDC = (1.2, 0, 1.5, 1) selects no pixel of the 640x360 frame; rendering the full frame" } +lights: 0 +volumes: 0 +world: 1 geometries, PrimitiveBreakdown { triangles: 0, spheres: 1, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 0, spheres: 1, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:fb1e7d48790aec95 camera=1:fb1e7d48790aec95 shadow=1:fb1e7d48790aec95 indirect=1:fb1e7d48790aec95 +provenance geometry 0..1: /World/ball +provenance spheres: [0] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/World/other"), cameras: ["/World/other", "/World/cam"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/World/other"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/window_off_frame_usda-0e5c269b6dd24fb6-1.image b/crates/crust-core/tests/data/import_baselines/window_off_frame_usda-0e5c269b6dd24fb6-1.image new file mode 100644 index 000000000..c734c5b1d --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/window_off_frame_usda-0e5c269b6dd24fb6-1.image @@ -0,0 +1 @@ +640x360 16spp clamp-off a04a09c0d4b5e325 diff --git a/crates/crust-core/tests/data/import_baselines/window_one_pixel_usda-66ddf756a5e443fe-1.digest b/crates/crust-core/tests/data/import_baselines/window_one_pixel_usda-66ddf756a5e443fe-1.digest new file mode 100644 index 000000000..c5b9eb7fa --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/window_one_pixel_usda-66ddf756a5e443fe-1.digest @@ -0,0 +1,18 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/World/other") +camera: Camera { origin: Vec3A(0.0, 0.0, 0.0), lower_left_corner: Vec3A(-3.8227005, -1.5290802, -10.0), horizontal: Vec3A(7.645401, 0.0, 0.0), vertical: Vec3A(0.0, 3.0581603, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: Some("/Render/settings") +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 10, height: 4, region: PixelRect { x0: 3, y0: 1, x1: 4, y1: 2 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [AovProduct { prim_path: "/Render/p", name: "p.exr", vars: [AovVar { prim_path: "/Render/beauty", name: "beauty", channel_prefix: None, source: Color, components: 4, precision: Float, accumulation: Filtered, clear: 0.0, expression: None, raw: false, variance: false }], attributes: [] }], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 50.0, aperture: [20.955, 15.2908], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 10.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/window_one_pixel.usda"], invisible_overrides: Some(0) } +layer: $DIR/window_one_pixel.usda +lights: 0 +volumes: 0 +world: 1 geometries, PrimitiveBreakdown { triangles: 0, spheres: 1, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 0, spheres: 1, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:fb1e7d48790aec95 camera=1:fb1e7d48790aec95 shadow=1:fb1e7d48790aec95 indirect=1:fb1e7d48790aec95 +provenance geometry 0..1: /World/ball +provenance spheres: [0] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/World/other"), cameras: ["/World/other", "/World/cam"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/World/other"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/window_one_pixel_usda-66ddf756a5e443fe-1.image b/crates/crust-core/tests/data/import_baselines/window_one_pixel_usda-66ddf756a5e443fe-1.image new file mode 100644 index 000000000..ff3f586a4 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/window_one_pixel_usda-66ddf756a5e443fe-1.image @@ -0,0 +1 @@ +10x4 16spp clamp-off fcfda4c07d71b8a5 diff --git a/crates/crust-core/tests/data/import_baselines/window_overscan_usda-c27e01fde4009f5e-1.digest b/crates/crust-core/tests/data/import_baselines/window_overscan_usda-c27e01fde4009f5e-1.digest new file mode 100644 index 000000000..935e329ae --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/window_overscan_usda-c27e01fde4009f5e-1.digest @@ -0,0 +1,19 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/World/other") +camera: Camera { origin: Vec3A(0.0, 0.0, 0.0), lower_left_corner: Vec3A(-2.7183647, -1.5290802, -10.0), horizontal: Vec3A(5.4367294, 0.0, 0.0), vertical: Vec3A(0.0, 3.0581603, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: Some("/Render/settings") +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 640, height: 360, region: PixelRect { x0: 0, y0: 0, x1: 640, y1: 360 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [AovProduct { prim_path: "/Render/p", name: "p.exr", vars: [AovVar { prim_path: "/Render/beauty", name: "beauty", channel_prefix: None, source: Color, components: 4, precision: Float, accumulation: Filtered, clear: 0.0, expression: None, raw: false, variance: false }], attributes: [] }], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 50.0, aperture: [20.955, 15.2908], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 10.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/window_overscan.usda"], invisible_overrides: Some(0) } +layer: $DIR/window_overscan.usda +warning: Warning { code: ProductDataWindowClipped, kind: Approximated, count: 1, prims: [], message: "dataWindowNDC = (-0.1, 0, 1.1, 1) reaches outside the frame; overscan is not supported, so it is clipped to it" } +lights: 0 +volumes: 0 +world: 1 geometries, PrimitiveBreakdown { triangles: 0, spheres: 1, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 0, spheres: 1, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:fb1e7d48790aec95 camera=1:fb1e7d48790aec95 shadow=1:fb1e7d48790aec95 indirect=1:fb1e7d48790aec95 +provenance geometry 0..1: /World/ball +provenance spheres: [0] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/World/other"), cameras: ["/World/other", "/World/cam"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/World/other"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/window_overscan_usda-c27e01fde4009f5e-1.image b/crates/crust-core/tests/data/import_baselines/window_overscan_usda-c27e01fde4009f5e-1.image new file mode 100644 index 000000000..c734c5b1d --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/window_overscan_usda-c27e01fde4009f5e-1.image @@ -0,0 +1 @@ +640x360 16spp clamp-off a04a09c0d4b5e325 diff --git a/crates/crust-core/tests/data/import_baselines/window_product_overrides_usda-bb3b29ebf7dd99a8-1.digest b/crates/crust-core/tests/data/import_baselines/window_product_overrides_usda-bb3b29ebf7dd99a8-1.digest new file mode 100644 index 000000000..dd254ec2b --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/window_product_overrides_usda-bb3b29ebf7dd99a8-1.digest @@ -0,0 +1,18 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/World/other") +camera: Camera { origin: Vec3A(0.0, 0.0, 0.0), lower_left_corner: Vec3A(-2.0954998, -2.0954998, -10.0), horizontal: Vec3A(4.1909995, 0.0, 0.0), vertical: Vec3A(0.0, 4.1909995, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: Some("/Render/settings") +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 100, height: 100, region: PixelRect { x0: 50, y0: 0, x1: 100, y1: 50 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [AovProduct { prim_path: "/Render/p", name: "p.exr", vars: [AovVar { prim_path: "/Render/beauty", name: "beauty", channel_prefix: None, source: Color, components: 4, precision: Float, accumulation: Filtered, clear: 0.0, expression: None, raw: false, variance: false }], attributes: [] }], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 50.0, aperture: [20.955, 15.2908], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 10.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/window_product_overrides.usda"], invisible_overrides: Some(0) } +layer: $DIR/window_product_overrides.usda +lights: 0 +volumes: 0 +world: 1 geometries, PrimitiveBreakdown { triangles: 0, spheres: 1, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 0, spheres: 1, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:fb1e7d48790aec95 camera=1:fb1e7d48790aec95 shadow=1:fb1e7d48790aec95 indirect=1:fb1e7d48790aec95 +provenance geometry 0..1: /World/ball +provenance spheres: [0] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/World/other"), cameras: ["/World/other", "/World/cam"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/World/other"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/window_product_overrides_usda-bb3b29ebf7dd99a8-1.image b/crates/crust-core/tests/data/import_baselines/window_product_overrides_usda-bb3b29ebf7dd99a8-1.image new file mode 100644 index 000000000..6a456e4e1 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/window_product_overrides_usda-bb3b29ebf7dd99a8-1.image @@ -0,0 +1 @@ +100x100 16spp clamp-off e94d157b19346225 diff --git a/crates/crust-core/tests/data/import_baselines/window_products_differ_usda-78414609fe85fc23-1.digest b/crates/crust-core/tests/data/import_baselines/window_products_differ_usda-78414609fe85fc23-1.digest new file mode 100644 index 000000000..6ad652568 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/window_products_differ_usda-78414609fe85fc23-1.digest @@ -0,0 +1,19 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/World/other") +camera: Camera { origin: Vec3A(0.0, 0.0, 0.0), lower_left_corner: Vec3A(-2.7183647, -1.5290802, -10.0), horizontal: Vec3A(5.4367294, 0.0, 0.0), vertical: Vec3A(0.0, 3.0581603, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: Some("/Render/settings") +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 64, height: 36, region: PixelRect { x0: 0, y0: 0, x1: 64, y1: 36 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [AovProduct { prim_path: "/Render/a", name: "a.exr", vars: [AovVar { prim_path: "/Render/beauty", name: "beauty", channel_prefix: None, source: Color, components: 4, precision: Float, accumulation: Filtered, clear: 0.0, expression: None, raw: false, variance: false }], attributes: [] }, AovProduct { prim_path: "/Render/b", name: "b.exr", vars: [AovVar { prim_path: "/Render/beauty", name: "beauty", channel_prefix: None, source: Color, components: 4, precision: Float, accumulation: Filtered, clear: 0.0, expression: None, raw: false, variance: false }], attributes: [] }], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 50.0, aperture: [20.955, 15.2908], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 10.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/window_products_differ.usda"], invisible_overrides: Some(0) } +layer: $DIR/window_products_differ.usda +warning: Warning { code: ProductRegionMismatch, kind: Approximated, count: 1, prims: ["/Render/b"], message: "/Render/b: asks for dataWindowNDC (0.5, 0, 1, 1), but the render's is (0, 0, 1, 1) (the first product's); its file is written with that" } +lights: 0 +volumes: 0 +world: 1 geometries, PrimitiveBreakdown { triangles: 0, spheres: 1, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 0, spheres: 1, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:fb1e7d48790aec95 camera=1:fb1e7d48790aec95 shadow=1:fb1e7d48790aec95 indirect=1:fb1e7d48790aec95 +provenance geometry 0..1: /World/ball +provenance spheres: [0] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/World/other"), cameras: ["/World/other", "/World/cam"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/World/other"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/window_products_differ_usda-78414609fe85fc23-1.image b/crates/crust-core/tests/data/import_baselines/window_products_differ_usda-78414609fe85fc23-1.image new file mode 100644 index 000000000..f4ebc1648 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/window_products_differ_usda-78414609fe85fc23-1.image @@ -0,0 +1 @@ +64x36 16spp clamp-off 1028d44458cc9325 diff --git a/crates/crust-core/tests/data/import_baselines/window_right_half_usda-c5f5b85f1946cb91-1.digest b/crates/crust-core/tests/data/import_baselines/window_right_half_usda-c5f5b85f1946cb91-1.digest new file mode 100644 index 000000000..c987dfde8 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/window_right_half_usda-c5f5b85f1946cb91-1.digest @@ -0,0 +1,18 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/World/other") +camera: Camera { origin: Vec3A(0.0, 0.0, 0.0), lower_left_corner: Vec3A(-2.7183647, -1.5290802, -10.0), horizontal: Vec3A(5.4367294, 0.0, 0.0), vertical: Vec3A(0.0, 3.0581603, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: Some("/Render/settings") +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 640, height: 360, region: PixelRect { x0: 320, y0: 0, x1: 640, y1: 360 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [AovProduct { prim_path: "/Render/p", name: "p.exr", vars: [AovVar { prim_path: "/Render/beauty", name: "beauty", channel_prefix: None, source: Color, components: 4, precision: Float, accumulation: Filtered, clear: 0.0, expression: None, raw: false, variance: false }], attributes: [] }], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 50.0, aperture: [20.955, 15.2908], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 10.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/window_right_half.usda"], invisible_overrides: Some(0) } +layer: $DIR/window_right_half.usda +lights: 0 +volumes: 0 +world: 1 geometries, PrimitiveBreakdown { triangles: 0, spheres: 1, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 0, spheres: 1, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:fb1e7d48790aec95 camera=1:fb1e7d48790aec95 shadow=1:fb1e7d48790aec95 indirect=1:fb1e7d48790aec95 +provenance geometry 0..1: /World/ball +provenance spheres: [0] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/World/other"), cameras: ["/World/other", "/World/cam"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/World/other"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/window_right_half_usda-c5f5b85f1946cb91-1.image b/crates/crust-core/tests/data/import_baselines/window_right_half_usda-c5f5b85f1946cb91-1.image new file mode 100644 index 000000000..c734c5b1d --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/window_right_half_usda-c5f5b85f1946cb91-1.image @@ -0,0 +1 @@ +640x360 16spp clamp-off a04a09c0d4b5e325 diff --git a/crates/crust-core/tests/data/import_baselines/window_unauthored_usda-5d663894090b1282-1.digest b/crates/crust-core/tests/data/import_baselines/window_unauthored_usda-5d663894090b1282-1.digest new file mode 100644 index 000000000..224a4d7e1 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/window_unauthored_usda-5d663894090b1282-1.digest @@ -0,0 +1,18 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/World/other") +camera: Camera { origin: Vec3A(0.0, 0.0, 0.0), lower_left_corner: Vec3A(-2.7183647, -1.5290802, -10.0), horizontal: Vec3A(5.4367294, 0.0, 0.0), vertical: Vec3A(0.0, 3.0581603, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: Some("/Render/settings") +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 64, height: 36, region: PixelRect { x0: 0, y0: 0, x1: 64, y1: 36 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 50.0, aperture: [20.955, 15.2908], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 10.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/window_unauthored.usda"], invisible_overrides: Some(0) } +layer: $DIR/window_unauthored.usda +lights: 0 +volumes: 0 +world: 1 geometries, PrimitiveBreakdown { triangles: 0, spheres: 1, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 0, spheres: 1, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:fb1e7d48790aec95 camera=1:fb1e7d48790aec95 shadow=1:fb1e7d48790aec95 indirect=1:fb1e7d48790aec95 +provenance geometry 0..1: /World/ball +provenance spheres: [0] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/World/other"), cameras: ["/World/other", "/World/cam"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/World/other"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/window_unauthored_usda-5d663894090b1282-1.image b/crates/crust-core/tests/data/import_baselines/window_unauthored_usda-5d663894090b1282-1.image new file mode 100644 index 000000000..f4ebc1648 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/window_unauthored_usda-5d663894090b1282-1.image @@ -0,0 +1 @@ +64x36 16spp clamp-off 1028d44458cc9325 diff --git a/crates/crust-core/tests/data/import_baselines/working_acescg_usda-453466808888f80c-1.digest b/crates/crust-core/tests/data/import_baselines/working_acescg_usda-453466808888f80c-1.digest new file mode 100644 index 000000000..7261f6f1d --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/working_acescg_usda-453466808888f80c-1.digest @@ -0,0 +1,25 @@ +time: None +working space: ACEScg +camera path: None +camera: Camera { origin: Vec3A(15.0, 3.0, 3.0), lower_left_corner: Vec3A(4.8863316, -0.044797063, 4.174048), horizontal: Vec3A(1.2295314, 0.0, -6.147657), vertical: Vec3A(-0.44830504, 3.4967792, -0.08966101), u: Vec3A(0.19611613, 0.0, -0.9805807), v: Vec3A(-0.1271232, 0.991561, -0.02542464), lens_radius: 0.05, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: Some("/Render/settings") +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 640, height: 360, region: PixelRect { x0: 0, y0: 0, x1: 640, y1: 360 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: None, depth_of_field: true, motion_blur: false, layer_stack: ["$DIR/working_acescg.usda"], invisible_overrides: Some(0) } +layer: $DIR/working_acescg.usda +warning: Warning { code: CameraMissing, kind: Skipped, count: 1, prims: [], message: "USD stage has no UsdGeomCamera — falling back to world::get_settings camera" } +lights: 2 +light 0: area name Some("/World/Tagged") lpe None pmf 0.5 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 1: area name Some("/World/Plain") lpe None pmf 0.5 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 2 geometries, PrimitiveBreakdown { triangles: 0, spheres: 2, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 0, spheres: 2, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +geom 0: material #0 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:984632b55acb5495 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=1:984632b55acb5495 +geom 1: material #1 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:984632b55acb5495 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=1:984632b55acb5495 +provenance light /World/Plain: LightOrigin { index: 1, geoms: 1..2 } +provenance light /World/Tagged: LightOrigin { index: 0, geoms: 0..1 } +provenance geometry 0..1: /World/Tagged +provenance geometry 1..2: /World/Plain +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: None, cameras: [], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: None, offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("ACEScg") diff --git a/crates/crust-core/tests/data/import_baselines/working_acescg_usda-453466808888f80c-1.image b/crates/crust-core/tests/data/import_baselines/working_acescg_usda-453466808888f80c-1.image new file mode 100644 index 000000000..c734c5b1d --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/working_acescg_usda-453466808888f80c-1.image @@ -0,0 +1 @@ +640x360 16spp clamp-off a04a09c0d4b5e325 diff --git a/crates/crust-core/tests/data/import_baselines/working_default_usda-5aec729f1efbcf98-1.digest b/crates/crust-core/tests/data/import_baselines/working_default_usda-5aec729f1efbcf98-1.digest new file mode 100644 index 000000000..6a3f711d8 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/working_default_usda-5aec729f1efbcf98-1.digest @@ -0,0 +1,25 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: None +camera: Camera { origin: Vec3A(15.0, 3.0, 3.0), lower_left_corner: Vec3A(4.8863316, -0.044797063, 4.174048), horizontal: Vec3A(1.2295314, 0.0, -6.147657), vertical: Vec3A(-0.44830504, 3.4967792, -0.08966101), u: Vec3A(0.19611613, 0.0, -0.9805807), v: Vec3A(-0.1271232, 0.991561, -0.02542464), lens_radius: 0.05, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: Some("/Render/settings") +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 640, height: 360, region: PixelRect { x0: 0, y0: 0, x1: 640, y1: 360 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: None, depth_of_field: true, motion_blur: false, layer_stack: ["$DIR/working_default.usda"], invisible_overrides: Some(0) } +layer: $DIR/working_default.usda +warning: Warning { code: CameraMissing, kind: Skipped, count: 1, prims: [], message: "USD stage has no UsdGeomCamera — falling back to world::get_settings camera" } +lights: 2 +light 0: area name Some("/World/Tagged") lpe None pmf 0.5 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 1: area name Some("/World/Plain") lpe None pmf 0.5 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 2 geometries, PrimitiveBreakdown { triangles: 0, spheres: 2, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 0, spheres: 2, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +geom 0: material #0 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:984632b55acb5495 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=1:984632b55acb5495 +geom 1: material #1 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:984632b55acb5495 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=1:984632b55acb5495 +provenance light /World/Plain: LightOrigin { index: 1, geoms: 1..2 } +provenance light /World/Tagged: LightOrigin { index: 0, geoms: 0..1 } +provenance geometry 0..1: /World/Tagged +provenance geometry 1..2: /World/Plain +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: None, cameras: [], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: None, offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/working_default_usda-5aec729f1efbcf98-1.image b/crates/crust-core/tests/data/import_baselines/working_default_usda-5aec729f1efbcf98-1.image new file mode 100644 index 000000000..c734c5b1d --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/working_default_usda-5aec729f1efbcf98-1.image @@ -0,0 +1 @@ +640x360 16spp clamp-off a04a09c0d4b5e325 diff --git a/crates/crust-core/tests/data/import_baselines/working_host_usda-964cb93fefda7817-1.digest b/crates/crust-core/tests/data/import_baselines/working_host_usda-964cb93fefda7817-1.digest new file mode 100644 index 000000000..c18eeacb7 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/working_host_usda-964cb93fefda7817-1.digest @@ -0,0 +1,17 @@ +time: None +working space: Linear Rec.2020 +camera path: None +camera: Camera { origin: Vec3A(15.0, 3.0, 3.0), lower_left_corner: Vec3A(4.8863316, -0.044797063, 4.174048), horizontal: Vec3A(1.2295314, 0.0, -6.147657), vertical: Vec3A(-0.44830504, 3.4967792, -0.08966101), u: Vec3A(0.19611613, 0.0, -0.9805807), v: Vec3A(-0.1271232, 0.991561, -0.02542464), lens_radius: 0.05, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: None +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 640, height: 360, region: PixelRect { x0: 0, y0: 0, x1: 640, y1: 360 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: None, depth_of_field: true, motion_blur: false, layer_stack: ["$DIR/working_host.usda"], invisible_overrides: Some(0) } +layer: $DIR/working_host.usda +warning: Warning { code: CameraMissing, kind: Skipped, count: 1, prims: [], message: "USD stage has no UsdGeomCamera — falling back to world::get_settings camera" } +lights: 0 +volumes: 0 +world: 0 geometries, PrimitiveBreakdown { triangles: 0, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 0, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: Some("lin_rec2020"), pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: None, cameras: [], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: None, offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.2020") diff --git a/crates/crust-core/tests/data/import_baselines/working_host_usda-964cb93fefda7817-1.image b/crates/crust-core/tests/data/import_baselines/working_host_usda-964cb93fefda7817-1.image new file mode 100644 index 000000000..c734c5b1d --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/working_host_usda-964cb93fefda7817-1.image @@ -0,0 +1 @@ +640x360 16spp clamp-off a04a09c0d4b5e325 diff --git a/crates/crust-core/tests/data/import_baselines/working_srgb_usda-8fdff51064dc58c9-1.digest b/crates/crust-core/tests/data/import_baselines/working_srgb_usda-8fdff51064dc58c9-1.digest new file mode 100644 index 000000000..884867ded --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/working_srgb_usda-8fdff51064dc58c9-1.digest @@ -0,0 +1,26 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: None +camera: Camera { origin: Vec3A(15.0, 3.0, 3.0), lower_left_corner: Vec3A(4.8863316, -0.044797063, 4.174048), horizontal: Vec3A(1.2295314, 0.0, -6.147657), vertical: Vec3A(-0.44830504, 3.4967792, -0.08966101), u: Vec3A(0.19611613, 0.0, -0.9805807), v: Vec3A(-0.1271232, 0.991561, -0.02542464), lens_radius: 0.05, orthographic: false, clip: CameraClip { near: None, far: None, planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: Some("/Render/settings") +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 640, height: 360, region: PixelRect { x0: 0, y0: 0, x1: 640, y1: 360 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: None, depth_of_field: true, motion_blur: false, layer_stack: ["$DIR/working_srgb.usda"], invisible_overrides: Some(0) } +layer: $DIR/working_srgb.usda +warning: Warning { code: ColorWorkingSpaceRefused, kind: Refused, count: 1, prims: ["/Render/settings"], message: "/Render/settings: renderingColorSpace refused (working colour space `srgb_texture` (sRGB Encoded Rec.709 (sRGB)) is not scene-linear); rendering in lin_rec709" } +warning: Warning { code: CameraMissing, kind: Skipped, count: 1, prims: [], message: "USD stage has no UsdGeomCamera — falling back to world::get_settings camera" } +lights: 2 +light 0: area name Some("/World/Tagged") lpe None pmf 0.5 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +light 1: area name Some("/World/Plain") lpe None pmf 0.5 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 2 geometries, PrimitiveBreakdown { triangles: 0, spheres: 2, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } top level, PrimitiveBreakdown { triangles: 0, spheres: 2, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 0 } unique, motion false +geom 0: material #0 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:984632b55acb5495 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=1:984632b55acb5495 +geom 1: material #1 Signature { kind: "Emissive", cutout: false, straight: false, boundary: false, emits: true, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent true map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=1:984632b55acb5495 camera=0:cbf29ce484222325 shadow=0:cbf29ce484222325 indirect=1:984632b55acb5495 +provenance light /World/Plain: LightOrigin { index: 1, geoms: 1..2 } +provenance light /World/Tagged: LightOrigin { index: 0, geoms: 0..1 } +provenance geometry 0..1: /World/Tagged +provenance geometry 1..2: /World/Plain +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: None, cameras: [], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: None, offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/working_srgb_usda-8fdff51064dc58c9-1.image b/crates/crust-core/tests/data/import_baselines/working_srgb_usda-8fdff51064dc58c9-1.image new file mode 100644 index 000000000..c734c5b1d --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/working_srgb_usda-8fdff51064dc58c9-1.image @@ -0,0 +1 @@ +640x360 16spp clamp-off a04a09c0d4b5e325 diff --git a/crates/crust-core/tests/data/import_baselines/x_usda-4b3ed4428fa191c7-1.digest b/crates/crust-core/tests/data/import_baselines/x_usda-4b3ed4428fa191c7-1.digest new file mode 100644 index 000000000..0801fcdf1 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/x_usda-4b3ed4428fa191c7-1.digest @@ -0,0 +1,40 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/scene/camera1") +camera: Camera { origin: Vec3A(0.0074343784, 1.9913422, 4.0133057), lower_left_corner: Vec3A(-8.881443, -3.0086517, -0.98669434), horizontal: Vec3A(17.777756, 0.0, 0.0), vertical: Vec3A(0.0, 9.999988, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: Some(Vec4(0.0, 0.0, -1.0, 3.9133058)), far: Some(Vec4(0.0, 0.0, 1.0, 9995.986)), planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: Some("/Render/settings") +settings: RenderSettings { samples_per_pixel: 16, max_depth: 32, width: 96, height: 54, region: PixelRect { x0: 0, y0: 0, x1: 96, y1: 54 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 12.700017, aperture: [25.4, 25.4], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 5.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/x.usda", "$TMP/crust_mcp_cli/render_final/shots/shot.usda"], invisible_overrides: Some(0) } +layer: $TMP/crust_mcp_cli/render_final/shots/shot.usda +layer: $DIR/x.usda +warning: Warning { code: MaterialFallbackDefault, kind: Skipped, count: 1, prims: ["/scene/Looks/initialShadingGroup"], message: "Material /scene/Looks/initialShadingGroup has no surface shader — using default grey OpenPBR" } +lights: 1 +light 0: dome name Some("/scene/Sky") lpe None pmf 1.0 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 5 geometries, PrimitiveBreakdown { triangles: 822, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 2 } top level, PrimitiveBreakdown { triangles: 1582, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 2 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.3585339 motion [] pieces all=760:2344ecf63e12c441 camera=760:2344ecf63e12c441 shadow=760:2344ecf63e12c441 indirect=760:2344ecf63e12c441 +geom 1: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.25 motion [] pieces all=800:4a8c9f44d777e131 camera=800:4a8c9f44d777e131 shadow=800:4a8c9f44d777e131 indirect=800:4a8c9f44d777e131 +geom 2: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=12:94a297badef437e1 camera=12:94a297badef437e1 shadow=12:94a297badef437e1 indirect=12:94a297badef437e1 +geom 3: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.2 motion [] pieces all=760:c2b60a75c52c78b9 camera=760:c2b60a75c52c78b9 shadow=760:c2b60a75c52c78b9 indirect=760:c2b60a75c52c78b9 +geom 4: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 4.0 motion [] pieces all=10:88b22fc3345d5b05 camera=10:88b22fc3345d5b05 shadow=10:88b22fc3345d5b05 indirect=10:88b22fc3345d5b05 +provenance material /scene/Looks/initialShadingGroup: MaterialOrigin { slots: [0, 1, 2, 3, 4], displaced: false } +provenance light /scene/Sky: LightOrigin { index: 0, geoms: 5..5 } +provenance geometry 0..1: /scene/pSphere2 +provenance geometry 1..2: /scene/pTorus1 +provenance geometry 2..3: /scene/pCube2 +provenance geometry 3..4: /scene/pSphere1 +provenance geometry 4..5: /scene/pCube1 +provenance mesh: MeshOrigin { geom_id: 0, slot: 0, baked: false, moving: false } +provenance mesh: MeshOrigin { geom_id: 1, slot: 1, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 2, slot: 2, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 3, slot: 0, baked: false, moving: false } +provenance mesh: MeshOrigin { geom_id: 4, slot: 3, baked: true, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 17119738035130870988, n_points: 382, n_indices: 1560, n_uvs: None, smooth: false, material: 0 }), placements: 2, shared: false, displaced: false } +provenance mesh slot 1: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 6096447469814747168, n_points: 400, n_indices: 1600, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 2: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 1739488954094729910, n_points: 8, n_indices: 24, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 3: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 12343188411137242430, n_points: 8, n_indices: 20, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: true, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/scene/camera1"), cameras: ["/scene/camera1"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/scene/camera1"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/x_usda-4b3ed4428fa191c7-1.image b/crates/crust-core/tests/data/import_baselines/x_usda-4b3ed4428fa191c7-1.image new file mode 100644 index 000000000..62bbb62d1 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/x_usda-4b3ed4428fa191c7-1.image @@ -0,0 +1 @@ +96x54 16spp clamp-off e7b2857721bb831d diff --git a/crates/crust-core/tests/data/import_baselines/x_usda-4f6345f399f0a5af-1.digest b/crates/crust-core/tests/data/import_baselines/x_usda-4f6345f399f0a5af-1.digest new file mode 100644 index 000000000..0801fcdf1 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/x_usda-4f6345f399f0a5af-1.digest @@ -0,0 +1,40 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/scene/camera1") +camera: Camera { origin: Vec3A(0.0074343784, 1.9913422, 4.0133057), lower_left_corner: Vec3A(-8.881443, -3.0086517, -0.98669434), horizontal: Vec3A(17.777756, 0.0, 0.0), vertical: Vec3A(0.0, 9.999988, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: Some(Vec4(0.0, 0.0, -1.0, 3.9133058)), far: Some(Vec4(0.0, 0.0, 1.0, 9995.986)), planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: Some("/Render/settings") +settings: RenderSettings { samples_per_pixel: 16, max_depth: 32, width: 96, height: 54, region: PixelRect { x0: 0, y0: 0, x1: 96, y1: 54 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 12.700017, aperture: [25.4, 25.4], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 5.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/x.usda", "$TMP/crust_mcp_cli/render_final/shots/shot.usda"], invisible_overrides: Some(0) } +layer: $TMP/crust_mcp_cli/render_final/shots/shot.usda +layer: $DIR/x.usda +warning: Warning { code: MaterialFallbackDefault, kind: Skipped, count: 1, prims: ["/scene/Looks/initialShadingGroup"], message: "Material /scene/Looks/initialShadingGroup has no surface shader — using default grey OpenPBR" } +lights: 1 +light 0: dome name Some("/scene/Sky") lpe None pmf 1.0 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 5 geometries, PrimitiveBreakdown { triangles: 822, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 2 } top level, PrimitiveBreakdown { triangles: 1582, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 2 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.3585339 motion [] pieces all=760:2344ecf63e12c441 camera=760:2344ecf63e12c441 shadow=760:2344ecf63e12c441 indirect=760:2344ecf63e12c441 +geom 1: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.25 motion [] pieces all=800:4a8c9f44d777e131 camera=800:4a8c9f44d777e131 shadow=800:4a8c9f44d777e131 indirect=800:4a8c9f44d777e131 +geom 2: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=12:94a297badef437e1 camera=12:94a297badef437e1 shadow=12:94a297badef437e1 indirect=12:94a297badef437e1 +geom 3: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.2 motion [] pieces all=760:c2b60a75c52c78b9 camera=760:c2b60a75c52c78b9 shadow=760:c2b60a75c52c78b9 indirect=760:c2b60a75c52c78b9 +geom 4: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 4.0 motion [] pieces all=10:88b22fc3345d5b05 camera=10:88b22fc3345d5b05 shadow=10:88b22fc3345d5b05 indirect=10:88b22fc3345d5b05 +provenance material /scene/Looks/initialShadingGroup: MaterialOrigin { slots: [0, 1, 2, 3, 4], displaced: false } +provenance light /scene/Sky: LightOrigin { index: 0, geoms: 5..5 } +provenance geometry 0..1: /scene/pSphere2 +provenance geometry 1..2: /scene/pTorus1 +provenance geometry 2..3: /scene/pCube2 +provenance geometry 3..4: /scene/pSphere1 +provenance geometry 4..5: /scene/pCube1 +provenance mesh: MeshOrigin { geom_id: 0, slot: 0, baked: false, moving: false } +provenance mesh: MeshOrigin { geom_id: 1, slot: 1, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 2, slot: 2, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 3, slot: 0, baked: false, moving: false } +provenance mesh: MeshOrigin { geom_id: 4, slot: 3, baked: true, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 17119738035130870988, n_points: 382, n_indices: 1560, n_uvs: None, smooth: false, material: 0 }), placements: 2, shared: false, displaced: false } +provenance mesh slot 1: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 6096447469814747168, n_points: 400, n_indices: 1600, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 2: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 1739488954094729910, n_points: 8, n_indices: 24, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 3: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 12343188411137242430, n_points: 8, n_indices: 20, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: true, working_space: None, pass: None, keep_geometry: false }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/scene/camera1"), cameras: ["/scene/camera1"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/scene/camera1"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/x_usda-4f6345f399f0a5af-1.image b/crates/crust-core/tests/data/import_baselines/x_usda-4f6345f399f0a5af-1.image new file mode 100644 index 000000000..62bbb62d1 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/x_usda-4f6345f399f0a5af-1.image @@ -0,0 +1 @@ +96x54 16spp clamp-off e7b2857721bb831d diff --git a/crates/crust-core/tests/data/import_baselines/x_usda-a701d438407a1ca1-1.digest b/crates/crust-core/tests/data/import_baselines/x_usda-a701d438407a1ca1-1.digest new file mode 100644 index 000000000..86488e952 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/x_usda-a701d438407a1ca1-1.digest @@ -0,0 +1,40 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/scene/camera1") +camera: Camera { origin: Vec3A(0.0074343784, 1.9913422, 4.0133057), lower_left_corner: Vec3A(-8.881443, -3.0086517, -0.98669434), horizontal: Vec3A(17.777756, 0.0, 0.0), vertical: Vec3A(0.0, 9.999988, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: Some(Vec4(0.0, 0.0, -1.0, 3.9133058)), far: Some(Vec4(0.0, 0.0, 1.0, 9995.986)), planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: Some("/Render/settings") +settings: RenderSettings { samples_per_pixel: 16, max_depth: 32, width: 96, height: 54, region: PixelRect { x0: 0, y0: 0, x1: 96, y1: 54 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 12.700017, aperture: [25.4, 25.4], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 5.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/x.usda", "$TMP/crust_mcp_cli/render_final/shots/shot.usda"], invisible_overrides: Some(0) } +layer: $TMP/crust_mcp_cli/render_final/shots/shot.usda +layer: $DIR/x.usda +warning: Warning { code: MaterialFallbackDefault, kind: Skipped, count: 1, prims: ["/scene/Looks/initialShadingGroup"], message: "Material /scene/Looks/initialShadingGroup has no surface shader — using default grey OpenPBR" } +lights: 1 +light 0: dome name Some("/scene/Sky") lpe None pmf 1.0 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 5 geometries, PrimitiveBreakdown { triangles: 822, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 2 } top level, PrimitiveBreakdown { triangles: 1582, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 2 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.3585339 motion [] pieces all=760:2344ecf63e12c441 camera=760:2344ecf63e12c441 shadow=760:2344ecf63e12c441 indirect=760:2344ecf63e12c441 +geom 1: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.25 motion [] pieces all=800:4a8c9f44d777e131 camera=800:4a8c9f44d777e131 shadow=800:4a8c9f44d777e131 indirect=800:4a8c9f44d777e131 +geom 2: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=12:94a297badef437e1 camera=12:94a297badef437e1 shadow=12:94a297badef437e1 indirect=12:94a297badef437e1 +geom 3: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.2 motion [] pieces all=760:c2b60a75c52c78b9 camera=760:c2b60a75c52c78b9 shadow=760:c2b60a75c52c78b9 indirect=760:c2b60a75c52c78b9 +geom 4: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 4.0 motion [] pieces all=10:88b22fc3345d5b05 camera=10:88b22fc3345d5b05 shadow=10:88b22fc3345d5b05 indirect=10:88b22fc3345d5b05 +provenance material /scene/Looks/initialShadingGroup: MaterialOrigin { slots: [0, 1, 2, 3, 4], displaced: false } +provenance light /scene/Sky: LightOrigin { index: 0, geoms: 5..5 } +provenance geometry 0..1: /scene/pSphere2 +provenance geometry 1..2: /scene/pTorus1 +provenance geometry 2..3: /scene/pCube2 +provenance geometry 3..4: /scene/pSphere1 +provenance geometry 4..5: /scene/pCube1 +provenance mesh: MeshOrigin { geom_id: 0, slot: 0, baked: false, moving: false } +provenance mesh: MeshOrigin { geom_id: 1, slot: 1, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 2, slot: 2, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 3, slot: 0, baked: false, moving: false } +provenance mesh: MeshOrigin { geom_id: 4, slot: 3, baked: true, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 17119738035130870988, n_points: 382, n_indices: 1560, n_uvs: None, smooth: false, material: 0 }), placements: 2, shared: false, displaced: false } +provenance mesh slot 1: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 6096447469814747168, n_points: 400, n_indices: 1600, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 2: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 1739488954094729910, n_points: 8, n_indices: 24, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 3: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 12343188411137242430, n_points: 8, n_indices: 20, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: true }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/scene/camera1"), cameras: ["/scene/camera1"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/scene/camera1"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/x_usda-a701d438407a1ca1-1.image b/crates/crust-core/tests/data/import_baselines/x_usda-a701d438407a1ca1-1.image new file mode 100644 index 000000000..62bbb62d1 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/x_usda-a701d438407a1ca1-1.image @@ -0,0 +1 @@ +96x54 16spp clamp-off e7b2857721bb831d diff --git a/crates/crust-core/tests/data/import_baselines/x_usda-d5611726aa414464-1.digest b/crates/crust-core/tests/data/import_baselines/x_usda-d5611726aa414464-1.digest new file mode 100644 index 000000000..3926d03a6 --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/x_usda-d5611726aa414464-1.digest @@ -0,0 +1,40 @@ +time: None +working space: Linear Rec.709 (sRGB) +camera path: Some("/scene/camera1") +camera: Camera { origin: Vec3A(0.0074343784, 1.9913422, 4.0133057), lower_left_corner: Vec3A(-8.881443, -3.0086517, -0.98669434), horizontal: Vec3A(17.777756, 0.0, 0.0), vertical: Vec3A(0.0, 9.999988, 0.0), u: Vec3A(1.0, 0.0, 0.0), v: Vec3A(0.0, 1.0, 0.0), lens_radius: 0.0, orthographic: false, clip: CameraClip { near: Some(Vec4(0.0, 0.0, -1.0, 3.9133058)), far: Some(Vec4(0.0, 0.0, 1.0, 9995.986)), planes: [Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0), Vec4(0.0, 0.0, 0.0, 0.0)], count: 0 } } +settings prim: None +settings: RenderSettings { samples_per_pixel: 128, max_depth: 32, width: 640, height: 360, region: PixelRect { x0: 0, y0: 0, x1: 640, y1: 360 }, min_samples_per_pixel: 32, variance_threshold: 0.05, adaptive_neighbour_tolerance: 1.0, frame: 0, guiding: false, guiding_train_iterations: 4, guiding_prob: 0.5, sampling_strategy: PowerMis, pixel_filter: Triangle { radius: 1.0 }, sampler: Sobol, light_selection: Power, indirect_clamp: Some(10.0), light_samples: 1, light_samples_indirect: 1, motion_blur: true, depth_of_field: true, exposure_scale: 1.0 } +aovs: AovRequest { products: [], precomp: None } +pass: None +source: Source { lens: Some(Lens { focal_length: 12.700017, aperture: [25.4, 25.4], aperture_offset: [0.0, 0.0], conform: "expandAperture", pixel_aspect: 1.0, f_stop: 0.0, focus_distance: 5.0 }), depth_of_field: false, motion_blur: false, layer_stack: ["$DIR/x.usda", "$TMP/crust_mcp_cli/render_final/shots/shot.usda"], invisible_overrides: Some(0) } +layer: $TMP/crust_mcp_cli/render_final/shots/shot.usda +layer: $DIR/x.usda +warning: Warning { code: MaterialFallbackDefault, kind: Skipped, count: 1, prims: ["/scene/Looks/initialShadingGroup"], message: "Material /scene/Looks/initialShadingGroup has no surface shader — using default grey OpenPBR" } +lights: 1 +light 0: dome name Some("/scene/Sky") lpe None pmf 1.0 shadow RayMask(2) restricted false nee-only false twinned false gains LobeGains { diffuse: 1.0, specular: 1.0 } +volumes: 0 +world: 5 geometries, PrimitiveBreakdown { triangles: 822, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 2 } top level, PrimitiveBreakdown { triangles: 1582, spheres: 0, disks: 0, cylinders: 0, curve_segments: 0, cubic_curve_spans: 0, instances: 2 } unique, motion false +geom 0: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 4.0 motion [] pieces all=10:88b22fc3345d5b05 camera=10:88b22fc3345d5b05 shadow=10:88b22fc3345d5b05 indirect=10:88b22fc3345d5b05 +geom 1: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.2 motion [] pieces all=760:c2b60a75c52c78b9 camera=760:c2b60a75c52c78b9 shadow=760:c2b60a75c52c78b9 indirect=760:c2b60a75c52c78b9 +geom 2: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 1.0 motion [] pieces all=12:94a297badef437e1 camera=12:94a297badef437e1 shadow=12:94a297badef437e1 indirect=12:94a297badef437e1 +geom 3: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.25 motion [] pieces all=800:4a8c9f44d777e131 camera=800:4a8c9f44d777e131 shadow=800:4a8c9f44d777e131 indirect=800:4a8c9f44d777e131 +geom 4: material #0 Signature { kind: "OpenPBR", cutout: false, straight: false, boundary: false, emits: false, uv: false, uv_primvar: None, face_texture: None, curve: None, primvars: Some([]) } class 65535 holdout false transparent false map None uv None shading None strands None aov None swapped false curves false scale 0.3585339 motion [] pieces all=760:2344ecf63e12c441 camera=760:2344ecf63e12c441 shadow=760:2344ecf63e12c441 indirect=760:2344ecf63e12c441 +provenance material /scene/Looks/initialShadingGroup: MaterialOrigin { slots: [0, 1, 2, 3, 4], displaced: false } +provenance light /scene/Sky: LightOrigin { index: 0, geoms: 0..0 } +provenance geometry 0..1: /scene/pCube1 +provenance geometry 1..2: /scene/pSphere1 +provenance geometry 2..3: /scene/pCube2 +provenance geometry 3..4: /scene/pTorus1 +provenance geometry 4..5: /scene/pSphere2 +provenance mesh: MeshOrigin { geom_id: 0, slot: 0, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 1, slot: 1, baked: false, moving: false } +provenance mesh: MeshOrigin { geom_id: 2, slot: 2, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 3, slot: 3, baked: true, moving: false } +provenance mesh: MeshOrigin { geom_id: 4, slot: 1, baked: false, moving: false } +provenance mesh slot 0: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 12343188411137242430, n_points: 8, n_indices: 20, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 1: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 17119738035130870988, n_points: 382, n_indices: 1560, n_uvs: None, smooth: false, material: 0 }), placements: 2, shared: false, displaced: false } +provenance mesh slot 2: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 1739488954094729910, n_points: 8, n_indices: 24, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance mesh slot 3: MeshSlotFacts { key: Some(MeshKeyFacts { geo_hash: 6096447469814747168, n_points: 400, n_indices: 1600, n_uvs: None, smooth: false, material: 0 }), placements: 1, shared: false, displaced: false } +provenance spheres: [] +provenance volumes: [] +provenance stage: StageFacts { options: UsdImportOptions { frame: None, camera: None, subdivision_level: None, subdivision_edge_length: None, skip_stage_teardown: false, working_space: None, pass: None, keep_geometry: true }, render_settings: Some("/Render/settings"), subdiv_level: 0, adaptive: None, domes_seen_by_camera: true, precomp: false, working: None, camera: Some("/scene/camera1"), cameras: ["/scene/camera1"], dicing: None, on_screen_shapes: None, unsized_shapes: false, primvars: [], mtlx_library: Library { defs: [], by_name: {}, impls: {}, files: [] }, shutter: ShutterKey { camera: Some("/scene/camera1"), offsets: [0, 0], interval: None, query: false, frame_pose: false } } working Some("Linear Rec.709 (sRGB)") diff --git a/crates/crust-core/tests/data/import_baselines/x_usda-d5611726aa414464-1.image b/crates/crust-core/tests/data/import_baselines/x_usda-d5611726aa414464-1.image new file mode 100644 index 000000000..7172edbfe --- /dev/null +++ b/crates/crust-core/tests/data/import_baselines/x_usda-d5611726aa414464-1.image @@ -0,0 +1 @@ +640x360 16spp clamp-off 64ede904b11bab22 diff --git a/crates/crust-core/tests/instanced_instancers.rs b/crates/crust-core/tests/instanced_instancers.rs new file mode 100644 index 000000000..b5eb41665 --- /dev/null +++ b/crates/crust-core/tests/instanced_instancers.rs @@ -0,0 +1,483 @@ +//! Point instancers and native instances nested in each other, as ALab's +//! vegetation nests them: a `PointInstancer` inside an instance, and one whose +//! prototype is itself an instance, whose prims are then reached as instance +//! proxies. Import parity compares each scene with the direct importer's +//! baseline (`parity`). + +use crust_core::{Scene, WarningCode}; + +const STAGE: &str = r#"#usda 1.0 +( + defaultPrim = "World" +) + +def Xform "Plant" ( + instanceable = true +) +{ + def PointInstancer "Leaves" + { + rel prototypes = [] + int[] protoIndices = [0, 0, 0] + point3f[] positions = [(0, 0, 0), (1, 0, 0), (2, 0, 0)] + def Scope "Prototypes" + { + def Mesh "Leaf" + { + int[] faceVertexCounts = [4] + int[] faceVertexIndices = [0, 1, 2, 3] + point3f[] points = [(0, 0, 0), (0.5, 0, 0), (0.5, 0.5, 0), (0, 0.5, 0)] + uniform token subdivisionScheme = "none" + } + } + } +} + +def Xform "World" +{ + def Camera "Cam" + { + double3 xformOp:translate = (1, 0, 10) + uniform token[] xformOpOrder = ["xformOp:translate"] + } + def Xform "A" ( + prepend references = + instanceable = true + ) + { + } + def Xform "B" ( + prepend references = + instanceable = true + ) + { + double3 xformOp:translate = (0, 2, 0) + uniform token[] xformOpOrder = ["xformOp:translate"] + } +} +"#; + +#[test] +fn a_point_instancer_inside_an_instance_places_its_prototypes() { + let dir = std::env::temp_dir().join("crust_instanced_instancers"); + std::fs::create_dir_all(&dir).expect("temp dir"); + let path = dir.join("plants.usda"); + std::fs::write(&path, STAGE).expect("write stage"); + let scene = Scene::from_usd(&path).expect("imports"); + let empty = scene + .warnings + .iter() + .find(|w| w.code == WarningCode::InstancingEmptyPrototype); + assert!(empty.is_none(), "{empty:?}"); + assert!(scene.world.count() > 0, "the leaves are placed"); +} + +/// A point instancer whose prototype is an instanceable reference: the +/// prototype's mesh is an instance proxy under it. +const INSTANCED_PROTOTYPE: &str = r#"#usda 1.0 +def Xform "LeafAsset" +{ + def Mesh "Geo" + { + int[] faceVertexCounts = [4] + int[] faceVertexIndices = [0, 1, 2, 3] + point3f[] points = [(0, 0, 0), (0.5, 0, 0), (0.5, 0.5, 0), (0, 0.5, 0)] + uniform token subdivisionScheme = "none" + } +} +def Xform "World" +{ + def Camera "Cam" + { + double3 xformOp:translate = (1, 0, 10) + uniform token[] xformOpOrder = ["xformOp:translate"] + } + def PointInstancer "Leaves" + { + rel prototypes = [] + int[] protoIndices = [0, 0, 0] + point3f[] positions = [(0, 0, 0), (1, 0, 0), (2, 0, 0)] + def Scope "Prototypes" + { + def Xform "Leaf" ( + prepend references = + instanceable = true + ) + { + } + } + } +} +"#; + +#[test] +fn an_instanced_point_instancer_prototype_is_read_through_its_proxies() { + let dir = std::env::temp_dir().join("crust_instanced_instancers"); + std::fs::create_dir_all(&dir).expect("temp dir"); + let path = dir.join("instanced_prototype.usda"); + std::fs::write(&path, INSTANCED_PROTOTYPE).expect("write stage"); + let scene = Scene::from_usd(&path).expect("imports"); + let empty = scene + .warnings + .iter() + .find(|w| w.code == WarningCode::InstancingEmptyPrototype); + assert!(empty.is_none(), "{empty:?}"); + assert!(scene.world.count() > 1, "the leaves are placed"); +} + +/// [`INSTANCED_PROTOTYPE`] with a material bound inside the instanced asset: +/// its binding is resolved in the proxy's namespace, as the stage names it. +const BOUND_INSTANCED_PROTOTYPE: &str = r#"#usda 1.0 +def Xform "LeafAsset" +{ + def Mesh "Geo" (prepend apiSchemas = ["MaterialBindingAPI"]) + { + int[] faceVertexCounts = [4] + int[] faceVertexIndices = [0, 1, 2, 3] + point3f[] points = [(0, 0, 0), (0.5, 0, 0), (0.5, 0.5, 0), (0, 0.5, 0)] + uniform token subdivisionScheme = "none" + rel material:binding = + } + def Scope "Looks" + { + def Material "Green" + { + token outputs:surface.connect = + def Shader "Surface" + { + uniform token info:id = "UsdPreviewSurface" + color3f inputs:diffuseColor = (0.1, 0.6, 0.1) + token outputs:surface + } + } + } +} +def Xform "World" +{ + def Camera "Cam" + { + double3 xformOp:translate = (1, 0, 10) + uniform token[] xformOpOrder = ["xformOp:translate"] + } + def PointInstancer "Leaves" + { + rel prototypes = [] + int[] protoIndices = [0, 0, 0] + point3f[] positions = [(0, 0, 0), (1, 0, 0), (2, 0, 0)] + def Scope "Prototypes" + { + def Xform "Leaf" ( + prepend references = + instanceable = true + ) + { + } + } + } +} +"#; + +#[test] +fn a_binding_inside_an_instanced_prototype_is_named_in_the_proxys_namespace() { + let dir = std::env::temp_dir().join("crust_instanced_instancers"); + std::fs::create_dir_all(&dir).expect("temp dir"); + let path = dir.join("bound_instanced_prototype.usda"); + std::fs::write(&path, BOUND_INSTANCED_PROTOTYPE).expect("write stage"); + let scene = Scene::from_usd(&path).expect("imports"); + let fallback = scene + .warnings + .iter() + .find(|w| w.code == WarningCode::MaterialFallbackDefault); + assert!(fallback.is_none(), "{fallback:?}"); + assert!(scene.world.count() > 1, "the leaves are placed"); +} + +/// Two point instancers whose prototypes are instanceable references to one +/// asset, each prototype binding a material it carries — ALab's bonsai +/// generations. The asset is one USD prototype, read once through Moho's +/// propagated prototype, its material resolved once and its mesh shared by +/// both instancers (the change's third behaviour change, D3c): the direct +/// importer walked each instancer's prototype through its instance proxies +/// and resolved the material once per instancer. The image is the same. +const SHARED_ASSET: &str = r#"#usda 1.0 +def Xform "Branch" +{ + def Mesh "Geo" (prepend apiSchemas = ["MaterialBindingAPI"]) + { + int[] faceVertexCounts = [4] + int[] faceVertexIndices = [0, 1, 2, 3] + point3f[] points = [(0, 0, 0), (0.5, 0, 0), (0.5, 0.5, 0), (0, 0.5, 0)] + uniform token subdivisionScheme = "none" + rel material:binding = + } + def Scope "Looks" + { + def Material "Bark" + { + token outputs:surface.connect = + def Shader "S" + { + uniform token info:id = "UsdPreviewSurface" + color3f inputs:diffuseColor = (0.4, 0.25, 0.1) + token outputs:surface + } + } + } +} +def Xform "World" +{ + def Camera "Cam" + { + double3 xformOp:translate = (1, 1, 10) + uniform token[] xformOpOrder = ["xformOp:translate"] + } + def PointInstancer "Generation1" + { + rel prototypes = [] + int[] protoIndices = [0, 0] + point3f[] positions = [(0, 0, 0), (1, 0, 0)] + def Scope "Prototypes" + { + def Xform "Branch" (prepend references = instanceable = true) {} + } + } + def PointInstancer "Generation2" + { + rel prototypes = [] + int[] protoIndices = [0, 0] + point3f[] positions = [(0, 2, 0), (1, 2, 0)] + def Scope "Prototypes" + { + def Xform "Branch" (prepend references = instanceable = true) {} + } + } +} +"#; + +#[test] +fn instancers_of_one_instanced_asset_share_its_prototype() { + let dir = std::env::temp_dir().join("crust_instanced_instancers"); + std::fs::create_dir_all(&dir).expect("temp dir"); + let path = dir.join("shared_asset.usda"); + std::fs::write(&path, SHARED_ASSET).expect("write stage"); + let scene = Scene::from_usd(&path).expect("imports"); + // Both instancers read the one native prototype of `/Branch`, so its + // material is converted once and shared (D3c); the digest holds that. + assert_eq!( + scene.world.count(), + 5, + "two copies per instancer, and the asset itself" + ); +} + +/// A point instancer whose prototypes are prims *inside* a native instance — +/// Moana's coral: `Prototypes/Archive` is instanceable, so each target is an +/// instance proxy. The direct importer read the proxied meshes on the stage. +const PROXY_TARGETS: &str = r#"#usda 1.0 +def Xform "ArchiveAsset" +{ + def Mesh "Piece1" + { + int[] faceVertexCounts = [4] + int[] faceVertexIndices = [0, 1, 2, 3] + point3f[] points = [(0, 0, 0), (0.5, 0, 0), (0.5, 0.5, 0), (0, 0.5, 0)] + uniform token subdivisionScheme = "none" + } + def Mesh "Piece2" + { + int[] faceVertexCounts = [3] + int[] faceVertexIndices = [0, 1, 2] + point3f[] points = [(0, 0, 0), (0.5, 0, 0), (0, 0.5, 0)] + uniform token subdivisionScheme = "none" + } +} +def Xform "World" +{ + def Camera "Cam" + { + double3 xformOp:translate = (1, 1, 10) + uniform token[] xformOpOrder = ["xformOp:translate"] + } + def PointInstancer "Scatter" + { + rel prototypes = [, ] + int[] protoIndices = [0, 1, 0] + point3f[] positions = [(0, 0, 0), (1, 0, 0), (2, 0, 0)] + def Scope "Prototypes" + { + def Xform "Archive" (prepend references = instanceable = true) {} + } + } +} +"#; + +/// Moho's M12: point instancing copies an instance-proxy target from the +/// instance's propagated prototype (`/ForInstancer/prototype`), +/// so the import places the proxied meshes, equal to the direct importer's. +#[test] +fn a_point_instancer_targeting_prims_inside_an_instance_places_them() { + let dir = std::env::temp_dir().join("crust_instanced_instancers"); + std::fs::create_dir_all(&dir).expect("temp dir"); + let path = dir.join("proxy_targets.usda"); + std::fs::write(&path, PROXY_TARGETS).expect("write stage"); + let scene = Scene::from_usd(&path).expect("imports"); + let empty = scene + .warnings + .iter() + .find(|w| w.code == WarningCode::InstancingEmptyPrototype); + assert!(empty.is_none(), "{empty:?}"); +} + +/// [`PROXY_TARGETS`] with a material inside the instanced asset, bound by the +/// targets: Moana's coral binds each archive piece to a material of its own +/// archive. The copy's binding names the material in the instance's +/// propagated prototype, outside the copy; it is read there and named under +/// the instance, as the direct importer read it through the proxy. +const PROXY_TARGET_MATERIALS: &str = r#"#usda 1.0 +def Xform "ArchiveAsset" +{ + def Mesh "Piece1" (prepend apiSchemas = ["MaterialBindingAPI"]) + { + int[] faceVertexCounts = [4] + int[] faceVertexIndices = [0, 1, 2, 3] + point3f[] points = [(0, 0, 0), (0.5, 0, 0), (0.5, 0.5, 0), (0, 0.5, 0)] + uniform token subdivisionScheme = "none" + rel material:binding = + } + def Mesh "Piece2" (prepend apiSchemas = ["MaterialBindingAPI"]) + { + int[] faceVertexCounts = [3] + int[] faceVertexIndices = [0, 1, 2] + point3f[] points = [(0, 0, 0), (0.5, 0, 0), (0, 0.5, 0)] + uniform token subdivisionScheme = "none" + rel material:binding = + } + def Scope "Looks" + { + def Material "Red" + { + token outputs:surface.connect = + def Shader "S" + { + uniform token info:id = "UsdPreviewSurface" + color3f inputs:diffuseColor = (0.8, 0.1, 0.1) + token outputs:surface + } + } + def Material "Blue" + { + token outputs:surface.connect = + def Shader "S" + { + uniform token info:id = "UsdPreviewSurface" + color3f inputs:diffuseColor = (0.1, 0.1, 0.8) + token outputs:surface + } + } + } +} +def Xform "World" +{ + def Camera "Cam" + { + double3 xformOp:translate = (1, 1, 10) + uniform token[] xformOpOrder = ["xformOp:translate"] + } + def PointInstancer "Scatter" + { + rel prototypes = [, ] + int[] protoIndices = [0, 1, 0] + point3f[] positions = [(0, 0, 0), (1, 0, 0), (2, 0, 0)] + def Scope "Prototypes" + { + def Xform "Archive" (prepend references = instanceable = true) {} + } + } +} +"#; + +#[test] +fn a_point_instancer_target_inside_an_instance_keeps_its_material() { + let dir = std::env::temp_dir().join("crust_instanced_instancers"); + std::fs::create_dir_all(&dir).expect("temp dir"); + let path = dir.join("proxy_target_materials.usda"); + std::fs::write(&path, PROXY_TARGET_MATERIALS).expect("write stage"); + let scene = Scene::from_usd(&path).expect("imports"); + let fallback = scene + .warnings + .iter() + .find(|w| w.code == WarningCode::MaterialFallbackDefault); + assert!(fallback.is_none(), "{fallback:?}"); +} + +/// [`PROXY_TARGET_MATERIALS`]' instancer inside an instanced element, as +/// Moana's coral elements are: the instancer's targets are held re-rooted in +/// the element's propagated prototype, and the archive instance they lie in +/// is named under the element's USD prototype. +const NESTED_PROXY_TARGET_MATERIALS: &str = r#"#usda 1.0 +def Xform "ArchiveAsset" +{ + def Mesh "Piece1" (prepend apiSchemas = ["MaterialBindingAPI"]) + { + int[] faceVertexCounts = [4] + int[] faceVertexIndices = [0, 1, 2, 3] + point3f[] points = [(0, 0, 0), (0.5, 0, 0), (0.5, 0.5, 0), (0, 0.5, 0)] + uniform token subdivisionScheme = "none" + rel material:binding = + } + def Scope "Looks" + { + def Material "Red" + { + token outputs:surface.connect = + def Shader "S" + { + uniform token info:id = "UsdPreviewSurface" + color3f inputs:diffuseColor = (0.8, 0.1, 0.1) + token outputs:surface + } + } + } +} +def Xform "Element" +{ + def PointInstancer "Scatter" + { + rel prototypes = [] + int[] protoIndices = [0, 0] + point3f[] positions = [(0, 0, 0), (1, 0, 0)] + def Scope "Prototypes" + { + def Xform "Archive" (prepend references = instanceable = true) {} + } + } +} +def Xform "World" +{ + def Camera "Cam" + { + double3 xformOp:translate = (1, 1, 10) + uniform token[] xformOpOrder = ["xformOp:translate"] + } + def Xform "E1" (prepend references = instanceable = true) {} + def Xform "E2" (prepend references = instanceable = true) + { + double3 xformOp:translate = (0, 1, 0) + uniform token[] xformOpOrder = ["xformOp:translate"] + } +} +"#; + +#[test] +fn an_instanced_point_instancer_target_inside_an_instance_keeps_its_material() { + let dir = std::env::temp_dir().join("crust_instanced_instancers"); + std::fs::create_dir_all(&dir).expect("temp dir"); + let path = dir.join("nested_proxy_target_materials.usda"); + std::fs::write(&path, NESTED_PROXY_TARGET_MATERIALS).expect("write stage"); + let scene = Scene::from_usd(&path).expect("imports"); + let fallback = scene + .warnings + .iter() + .find(|w| w.code == WarningCode::MaterialFallbackDefault); + assert!(fallback.is_none(), "{fallback:?}"); +} diff --git a/crates/crust-core/tests/layering.rs b/crates/crust-core/tests/layering.rs index 6113fad5c..69603adff 100644 --- a/crates/crust-core/tests/layering.rs +++ b/crates/crust-core/tests/layering.rs @@ -54,7 +54,7 @@ const LAYERS: &[(&str, &[&str])] = &[ "volume", ], ), - ("import", &["live", "place", "scene", "world"]), + ("import", &["live", "parity", "place", "scene", "world"]), ( "tools", &["check", "compare", "diagnostic", "inspect", "stamp"], diff --git a/crates/crust-core/tests/live.rs b/crates/crust-core/tests/live.rs index a100dad9b..0cf7530fa 100644 --- a/crates/crust-core/tests/live.rs +++ b/crates/crust-core/tests/live.rs @@ -523,10 +523,12 @@ def Xform "World" /// A stage with a mesh authoring `primvars:rest`, whose settings target /// `products` (one of `` and ``). -fn primvar_stage(products: &str) -> PathBuf { +fn primvar_stage(name: &str, products: &str) -> PathBuf { + // One file per test: tests run in parallel, and two rewriting one file + // let a third read it half-written. let dir = std::env::temp_dir().join("crust_live_tests"); std::fs::create_dir_all(&dir).expect("temp dir"); - let path = dir.join("live_primvars.usda"); + let path = dir.join(format!("live_primvars_{name}.usda")); std::fs::write( &path, format!( @@ -596,7 +598,7 @@ fn a_settings_change_asking_for_new_primvars_reimports() { settings: true, ..Default::default() }; - let path = primvar_stage(""); + let path = primvar_stage("retarget", ""); let scene = Scene::from_usd(&path).expect("load"); assert!(!scene.world.has_primvars()); let prov = scene.provenance.as_ref().expect("provenance"); @@ -611,7 +613,7 @@ fn a_settings_change_asking_for_new_primvars_reimports() { .map(|_| ()), Ok(()) ); - primvar_stage(""); + primvar_stage("retarget", ""); match prov.rebuild( &path, &crust_core::NoAssets, @@ -648,7 +650,7 @@ fn a_primvar_warning_does_not_block_a_settings_edit() { settings: true, ..Default::default() }; - let path = primvar_stage(""); + let path = primvar_stage("warnings", ""); let text = std::fs::read_to_string(&path).expect("read stage"); // `rest` moves to the mesh's parent (not inherited), and a second mesh // authors it with two components (a mismatch). diff --git a/crates/crust-core/tests/one_openusd.rs b/crates/crust-core/tests/one_openusd.rs new file mode 100644 index 000000000..ed26938f4 --- /dev/null +++ b/crates/crust-core/tests/one_openusd.rs @@ -0,0 +1,54 @@ +//! One openusd in the build, by construction: no crate of the workspace +//! depends on `openusd` or `openusd-schemas` itself. Every crate reaches them +//! through Moho's re-exports (`moho::openusd`, `moho::openusd_schemas`), so +//! the stage Moho's scene index reads and the stage crust's code handles are +//! the same type, at the rev Moho pins. + +use std::path::{Path, PathBuf}; + +/// The workspace's member manifests and the root one. +fn manifests() -> Vec { + let root = Path::new(env!("CARGO_MANIFEST_DIR")).join("../.."); + let mut out = vec![root.join("Cargo.toml")]; + for entry in std::fs::read_dir(root.join("crates")).expect("crates/") { + let manifest = entry.expect("an entry").path().join("Cargo.toml"); + if manifest.exists() { + out.push(manifest); + } + } + out +} + +#[test] +fn no_crate_depends_on_openusd_directly() { + let mut offenders = Vec::new(); + for manifest in manifests() { + let text = std::fs::read_to_string(&manifest).expect("a readable manifest"); + for (n, line) in text.lines().enumerate() { + let line = line.trim_start(); + let key = line.split(['=', '.', ' ']).next().unwrap_or(""); + if matches!(key, "openusd" | "openusd-schemas") { + offenders.push(format!("{}:{}: {line}", manifest.display(), n + 1)); + } + } + } + assert!( + offenders.is_empty(), + "depend on openusd through moho (`moho::openusd`), not directly:\n{}", + offenders.join("\n") + ); +} + +/// Moho's re-exports are what crust names: a stage built through them is +/// the stage the scene index takes. +#[test] +fn moho_reexports_the_stage_the_index_reads() { + let registry = moho::openusd_schemas::schema_registry(); + let stage = moho::openusd::usd::Stage::builder() + .schema_registry(registry) + .open("../../samples/cornellbox.usda") + .expect("the Cornell box opens"); + let index = moho::stage::StageSceneIndex::new(); + index.set_stage(stage); + assert!(index.stage().is_some()); +} diff --git a/crates/crust-core/tests/render_passes.rs b/crates/crust-core/tests/render_passes.rs index 7c0336932..b53d90aac 100644 --- a/crates/crust-core/tests/render_passes.rs +++ b/crates/crust-core/tests/render_passes.rs @@ -19,6 +19,13 @@ fn dir() -> PathBuf { /// A stage with `body` under `/World`, `/Render/settings` (8×8, 3 spp) /// and `passes` under `/Render/Passes`, plus `extra` at the root. fn stage(name: &str, body: &str, passes: &str, extra: &str) -> PathBuf { + stage_with(name, body, passes, "", extra) +} + +/// [`stage`], with `render` beside `/Render/settings` in `/Render`. (One +/// `Render` prim spec: a second, an `over`, in the same layer would make the +/// whole `/Render` an undefined `over`, which a scene index leaves out.) +fn stage_with(name: &str, body: &str, passes: &str, render: &str, extra: &str) -> PathBuf { let path = dir().join(format!("{name}.usda")); let text = format!( r#"#usda 1.0 @@ -43,6 +50,7 @@ def Scope "Render" {{ {passes} }} +{render} }} {extra} "# @@ -189,8 +197,6 @@ const CAMERAS: &str = r#" def Camera "Cam" "#; const CHAR_SETTINGS: &str = r#" -over "Render" -{ def RenderSettings "charSettings" { int2 resolution = (16, 4) @@ -207,7 +213,6 @@ over "Render" { string sourceName = "color" } -} "#; /// render-passes spec, "Each pass renders its own products" and "A pass with @@ -215,7 +220,7 @@ over "Render" /// parameter come from the pass's settings, and the provenance names them. #[test] fn the_render_source_chooses_the_settings() { - let path = stage( + let path = stage_with( "render_source", CAMERAS, &[ @@ -227,6 +232,7 @@ fn the_render_source_chooses_the_settings() { ] .concat(), CHAR_SETTINGS, + "", ); let char_pass = load(&path, Some("/Render/Passes/char")); assert_eq!(char_pass.settings.get_dimensions(), (16, 4)); @@ -320,6 +326,33 @@ fn prune_and_render_visibility_warn_and_are_not_read() { } } +/// A pass applying all four of its collections: `matte` and +/// `cameraVisibility` are read, `prune` and `renderVisibility` each warn once +/// and leave what they name rendered. +#[test] +fn a_pass_applying_all_four_collections() { + let path = stage( + "all_four", + &[ball("Held", -2.0), ball("Hidden", 2.0)].concat(), + &pass( + "all", + " prepend rel collection:matte:includes = \n\ + prepend rel collection:cameraVisibility:excludes = \n\ + prepend rel collection:prune:includes = \n\ + prepend rel collection:renderVisibility:excludes = ", + ), + "", + ); + let scene = load(&path, Some("/Render/Passes/all")); + assert_eq!( + count(&scene, WarningCode::RenderPassCollectionNotRead), + 2, + "prune and renderVisibility each warn" + ); + let summary = scene.pass.as_ref().expect("a pass"); + assert_eq!((summary.holdouts, summary.camera_hidden), (1, 1)); +} + // --------------------------------------------------------------------------- // Membership // --------------------------------------------------------------------------- diff --git a/crates/crust-core/tests/streamed_light_links.rs b/crates/crust-core/tests/streamed_light_links.rs new file mode 100644 index 000000000..a700c2da3 --- /dev/null +++ b/crates/crust-core/tests/streamed_light_links.rs @@ -0,0 +1,72 @@ +//! A light linked to receivers in other chunks of a streamed import (the +//! `moho-import` change, task 10.2): the light's `lightLink` is judged after +//! the last chunk against every receiver walked, whichever chunk held it. +//! Checked against the direct importer's baseline (`crust_core::parity`). + +#![allow(clippy::unwrap_used)] + +use crust_core::Scene; + +fn mesh(name: &str, x: f32) -> String { + format!( + r#" + def Mesh "{name}" + {{ + int[] faceVertexCounts = [4] + int[] faceVertexIndices = [0, 1, 2, 3] + point3f[] points = [({x0}, 0, 0), ({x1}, 0, 0), ({x1}, 1, 0), ({x0}, 1, 0)] + }}"#, + x0 = x, + x1 = x + 1.0 + ) +} + +#[test] +fn a_light_links_receivers_in_other_chunks() { + let dir = std::env::temp_dir().join("crust_streamed_light_links"); + std::fs::create_dir_all(&dir).unwrap(); + let stage = format!( + r#"#usda 1.0 +def Xform "World" +{{ + def Scope "Lights" + {{ + def RectLight "key" (prepend apiSchemas = ["CollectionAPI:lightLink", "CollectionAPI:shadowLink"]) + {{ + float inputs:intensity = 10 + rel collection:lightLink:includes = [, ] + uniform bool collection:lightLink:includeRoot = 0 + rel collection:shadowLink:excludes = + double3 xformOp:translate = (0, 0.5, 3) + uniform token[] xformOpOrder = ["xformOp:translate"] + }} + def DistantLight "fill" {{ float inputs:intensity = 0.5 }} + }} + def Xform "A" + {{{} + }} + def Xform "B" + {{{} + }} + def Xform "C" + {{{} + def Xform "Inner" + {{{} + }} + }} +}} +"#, + mesh("M", -3.0), + mesh("M", -1.0), + mesh("M", 1.0), + mesh("M", 3.0), + ); + let path = dir.join("links.usda"); + std::fs::write(&path, stage).unwrap(); + let scene = Scene::from_usd(&path).unwrap(); + assert_eq!(scene.lights.count(), 2); + assert!( + (0..scene.lights.count()).any(|i| scene.lights.restricted(i)), + "the key light is linked" + ); +} diff --git a/crates/crust-core/tests/streamed_materials.rs b/crates/crust-core/tests/streamed_materials.rs new file mode 100644 index 000000000..3e216869c --- /dev/null +++ b/crates/crust-core/tests/streamed_materials.rs @@ -0,0 +1,121 @@ +//! Materials a streamed chunk binds from outside itself (the `moho-import` +//! change, task 9.4): from the payload-free scene input when no payload +//! hides them, from the side input over a stage masked to them when one +//! does. Each import is checked against the direct importer's baseline +//! (`crust_core::parity`), and each quad's colour says which material it +//! got. + +#![allow(clippy::unwrap_used)] + +use crust_core::{MASK_CAMERA, Ray, Scene, Vec3A, WarningCode}; + +fn quad(name: &str, x: f32, mat: &str) -> String { + format!( + r#" + def Xform "{name}" + {{ + def Mesh "Quad" (prepend apiSchemas = ["MaterialBindingAPI"]) + {{ + uniform token subdivisionScheme = "none" + int[] faceVertexCounts = [4] + int[] faceVertexIndices = [0, 1, 2, 3] + point3f[] points = [({x0}, 0, 0), ({x1}, 0, 0), ({x1}, 1, 0), ({x0}, 1, 0)] + rel material:binding = <{mat}> + }} + }}"#, + x0 = x, + x1 = x + 1.0 + ) +} + +fn material(name: &str, rgb: (f32, f32, f32)) -> String { + format!( + r#" + def Material "{name}" + {{ + token outputs:surface.connect = + def Shader "S" + {{ + uniform token info:id = "UsdPreviewSurface" + color3f inputs:diffuseColor = ({}, {}, {}) + float inputs:roughness = 1 + token outputs:surface + }} + }}"#, + rgb.0, rgb.1, rgb.2 + ) +} + +/// The reflectance of the quad under `x`. +fn reflectance(scene: &Scene, x: f32) -> Vec3A { + let r = Ray::new(Vec3A::new(x, 0.5, 5.0), Vec3A::new(0.0, 0.0, -1.0)).with_mask(MASK_CAMERA); + let hit = scene + .world + .intersect(&r, 0.001, f32::INFINITY) + .expect("hits the quad"); + hit.mat.eval(&r, &hit.rec, Vec3A::Z).expect("a lobe").0 +} + +fn no_fallback(scene: &Scene) { + let fallbacks: Vec<_> = scene + .warnings + .iter() + .filter(|w| w.code == WarningCode::MaterialFallbackDefault) + .collect(); + assert!(fallbacks.is_empty(), "{fallbacks:#?}"); +} + +/// `/World/Looks` beside four geometry chunks: five children of one root, +/// so each is a masked chunk, and the quads' material is on none of their +/// stages. No payload hides it, so the payload-free scene input holds it. +#[test] +fn materials_beside_four_geometry_chunks_resolve_from_the_scene_input() { + let dir = std::env::temp_dir().join("crust_streamed_materials_beside"); + std::fs::create_dir_all(&dir).unwrap(); + let stage = format!( + "#usda 1.0\ndef Xform \"World\"\n{{\n def Scope \"Looks\"\n {{{}\n }}{}{}{}{}\n}}\n", + material("Red", (0.8, 0.1, 0.1)), + quad("A", -3.0, "/World/Looks/Red"), + quad("B", -1.0, "/World/Looks/Red"), + quad("C", 1.0, "/World/Looks/Red"), + quad("D", 3.0, "/World/Looks/Red"), + ); + let path = dir.join("beside.usda"); + std::fs::write(&path, stage).unwrap(); + let scene = Scene::from_usd(&path).unwrap(); + for x in [-2.5, -0.5, 1.5, 3.5] { + let f = reflectance(&scene, x); + assert!(f.x > 4.0 * f.y && f.x > 4.0 * f.z, "red at x = {x}: {f}"); + } + no_fallback(&scene); +} + +/// A material that lives only inside another chunk's payload: `/World/B` +/// loads `b.usda`, which holds `Looks/Blue` and B's own quad, and A binds +/// that material. The scene input does not load B's payload, so A's chunk +/// reads the material from the side input, over a stage masked to it. +#[test] +fn a_material_inside_another_chunks_payload_resolves_from_the_side_input() { + let dir = std::env::temp_dir().join("crust_streamed_materials_payload"); + std::fs::create_dir_all(&dir).unwrap(); + let b = format!( + "#usda 1.0\n(\n defaultPrim = \"B\"\n)\ndef Xform \"B\"\n{{\n def Scope \"Looks\"\n {{{}\n }}{}\n}}\n", + material("Blue", (0.1, 0.1, 0.8)), + quad("Geo", -1.0, "/B/Looks/Blue"), + ); + std::fs::write(dir.join("b.usda"), b).unwrap(); + let stage = format!( + "#usda 1.0\ndef Xform \"World\"\n{{{}\n def Xform \"B\" (prepend payload = @./b.usda@)\n {{\n }}{}{}\n}}\n", + quad("A", -3.0, "/World/B/Looks/Blue"), + quad("C", 1.0, "/World/B/Looks/Blue"), + quad("D", 3.0, "/World/B/Looks/Blue"), + ); + let path = dir.join("payload.usda"); + std::fs::write(&path, stage).unwrap(); + let scene = Scene::from_usd(&path).unwrap(); + for x in [-2.5, -0.5, 1.5, 3.5] { + let f = reflectance(&scene, x); + assert!(f.z > 4.0 * f.x && f.z > 4.0 * f.y, "blue at x = {x}: {f}"); + } + no_fallback(&scene); +} diff --git a/crates/crust-core/tests/time_motion.rs b/crates/crust-core/tests/time_motion.rs index b160f48b2..891f1d731 100644 --- a/crates/crust-core/tests/time_motion.rs +++ b/crates/crust-core/tests/time_motion.rs @@ -660,3 +660,31 @@ fn a_static_stage_asking_for_motion_vectors_is_not_warned_about() { assert_eq!(warned(&scene, WarningCode::CameraShutterInstantaneous), 0); assert_eq!(motion(&scene, -0.5, 0.0, 0.0), Vec3A::X); } + +/// A shutter `f32` cannot hold, `[-0.1, 0.3]` around frame 5: the card's +/// transform at the shutter's ends is read at Hydra's `f32` offsets from the +/// frame, so the ends' bits may differ from the direct importer's — the +/// import-parity exception this fixture exercises (its `.f32-shutter` +/// baselines) — while the motion is the same to far below a pixel. The track +/// crosses x = 0 at shutter open, where `f32` resolves the offset's error +/// (1.5e-9 frames) instead of rounding it away. +#[test] +fn an_inexact_shutter_moves_the_card_over_its_offsets() { + let shutter = "double shutter:open = -0.1\n double shutter:close = 0.3"; + let track = r#"double3 xformOp:translate.timeSamples = { + 1: (-3.9, 0, 0), + 10: (5.1, 0, 0), + } + uniform token[] xformOpOrder = ["xformOp:translate"]"#; + // A card whose left edge is its origin, so that edge's x is the + // translation itself. + let card = card("Card", track).replace( + "[(-0.3, -0.3, 0), (0.3, -0.3, 0), (0.3, 0.3, 0), (-0.3, 0.3, 0)]", + "[(0, -0.3, 0), (0.6, -0.3, 0), (0.6, 0.3, 0), (0, 0.3, 0)]", + ); + let scene = load("inexact_shutter", &stage(shutter, &card, "")); + // One unit per frame: the left edge at x = 0 at shutter open (4.9), 0.4 + // units further at shutter close (5.3). + let v = motion(&scene, 0.3, 0.0, 0.0); + assert!(near(v, Vec3A::new(0.4, 0.0, 0.0)), "{v}"); +} diff --git a/crates/crust-core/tests/usd_adaptive.rs b/crates/crust-core/tests/usd_adaptive.rs index d330ec6ef..4c32152be 100644 --- a/crates/crust-core/tests/usd_adaptive.rs +++ b/crates/crust-core/tests/usd_adaptive.rs @@ -1084,3 +1084,26 @@ fn products_do_not_override_the_dicing_camera() { assert_eq!(diced.camera_path.as_deref(), Some("/W/Near")); assert_eq!(tessellation(&diced), tessellation(&through_cam)); } + +/// The instancing samples with adaptive subdivision on (the `moho-import` +/// change, task 12.2): placements counted per subtree on the index, the +/// shared-or-unshared decision taken per propagated prototype, each import +/// checked against the direct importer's baseline (`crust_core::parity`). +/// `instancing.usda` and `purpose_bindings.usda` stream; `nested_instancing` +/// is read on one stage. +#[test] +fn the_instancing_samples_import_adaptively_as_their_baselines() { + let samples = Path::new(env!("CARGO_MANIFEST_DIR")).join("../../samples"); + let options = UsdImportOptions { + subdivision_edge_length: Some(2.0), + ..Default::default() + }; + for name in [ + "instancing.usda", + "nested_instancing.usda", + "purpose_bindings.usda", + ] { + let scene = load(&samples.join(name), &options); + assert!(scene.world.count() > 0, "{name} imports geometry"); + } +} diff --git a/crates/crust-core/tests/usd_layers.rs b/crates/crust-core/tests/usd_layers.rs index 94bda8f9b..d9ae5194f 100644 --- a/crates/crust-core/tests/usd_layers.rs +++ b/crates/crust-core/tests/usd_layers.rs @@ -2,6 +2,7 @@ //! host watches to see the stage change on disk (`crust mcp`'s session). use crust_core::Scene; +use moho::openusd; use std::path::{Path, PathBuf}; fn work_dir(name: &str) -> PathBuf { diff --git a/crates/crust-core/tests/usd_products.rs b/crates/crust-core/tests/usd_products.rs index 6771f1c9b..24187ef66 100644 --- a/crates/crust-core/tests/usd_products.rs +++ b/crates/crust-core/tests/usd_products.rs @@ -7,6 +7,7 @@ use crust_core::{ Accumulation, AovRequest, AovSource, ChannelKind, NoAssets, PixelRect, Precision, PrimvarRole, PrimvarSource, Scene, UsdImportOptions, WarningCode, }; +use moho::{openusd, openusd_schemas}; use std::path::PathBuf; /// A stage with one camera under `/World` and `render` (prims under @@ -494,11 +495,11 @@ fn the_resolver_agrees_with_compute_render_spec() { assert_eq!(spec.products.len(), scene.aovs.products.len()); for (theirs, ours) in spec.products.iter().zip(&scene.aovs.products) { - assert_eq!(theirs.render_product_path, ours.prim_path); + assert_eq!(theirs.render_product_path.as_str(), ours.prim_path); assert_eq!(theirs.name, ours.name); let [w, h] = theirs.resolution; assert_eq!((w as usize, h as usize), scene.settings.get_dimensions()); - assert_eq!(theirs.camera_path.as_deref(), Some("/World/cam")); + assert_eq!(theirs.camera_path.as_str(), "/World/cam"); let their_vars: Vec<_> = theirs .render_var_indices .iter() diff --git a/crates/crust-core/tests/usd_scene.rs b/crates/crust-core/tests/usd_scene.rs index 11903ad64..023b817bf 100644 --- a/crates/crust-core/tests/usd_scene.rs +++ b/crates/crust-core/tests/usd_scene.rs @@ -1,3 +1,4 @@ +use moho::{openusd, openusd_schemas}; use std::path::PathBuf; use crust_core::{Light, Ray, Scene, Vec3A}; @@ -315,9 +316,11 @@ fn openpbr_showcase_materials_all_decode() { .find_map(TerminalSource::shader) .unwrap_or_else(|| panic!("Material {} has no surface shader", p)); let id = shader - .id() + .node_def() + .shader_id() .unwrap() .unwrap_or_else(|| panic!("Shader at {} has no info:id", shader.path())); + let id = id.as_str(); assert_eq!( id, "crust:openpbr", "Material {} shader id was {:?}, expected `crust:openpbr`", diff --git a/crates/crust-core/tests/warnings.rs b/crates/crust-core/tests/warnings.rs index 79447c598..bed754957 100644 --- a/crates/crust-core/tests/warnings.rs +++ b/crates/crust-core/tests/warnings.rs @@ -637,6 +637,21 @@ fn a_dome_map_without_a_decoder() { assert_eq!(codes(&scene), [WarningCode::AssetUnsupportedByHost]); } +/// The absolute asset paths `stage` names (`@/…@`) that are not on disk: a +/// sample referencing a file outside the repository (the DPEL MaterialX +/// assets, not committed) has its baseline recorded where that file exists, +/// so it is skipped, and said so, where it does not (CI), as +/// `crust-render/tests/import_parity.rs` skips it. +fn missing_external_assets(stage: &Path) -> Vec { + let text = std::fs::read_to_string(stage).expect("read the sample"); + text.split('@') + .skip(1) + .step_by(2) + .filter(|path| path.starts_with('/') && !Path::new(path).exists()) + .map(str::to_owned) + .collect() +} + /// Every sample imports to the same records twice, and every code it raises /// is one the vocabulary lists. #[test] @@ -650,6 +665,15 @@ fn sample_imports_are_deterministic() { stages.sort(); assert!(!stages.is_empty()); for stage in stages { + let missing = missing_external_assets(&stage); + if !missing.is_empty() { + eprintln!( + "skipped {}: needs {} (not committed)", + stage.display(), + missing.join(", ") + ); + continue; + } let first = Scene::from_usd(&stage).map(|s| s.warnings); let second = Scene::from_usd(&stage).map(|s| s.warnings); match (first, second) { diff --git a/crates/crust-core/tests/xform_uncomposable.rs b/crates/crust-core/tests/xform_uncomposable.rs new file mode 100644 index 000000000..9778a2326 --- /dev/null +++ b/crates/crust-core/tests/xform_uncomposable.rs @@ -0,0 +1,50 @@ +//! A transform stack openusd cannot compose — the inverse of a singular +//! `transform` — keeps its parent's transform with an `xform.uncomposable` +//! warning quoting openusd's reason (the `moho-import` change reads that +//! reason off the stage, design D7). Checked against the direct importer's +//! baseline (`crust_core::parity`), warning text included. + +#![allow(clippy::unwrap_used)] + +use crust_core::{Scene, WarningCode}; + +#[test] +fn an_uncomposable_stack_warns_with_openusds_reason() { + let dir = std::env::temp_dir().join("crust_xform_uncomposable"); + std::fs::create_dir_all(&dir).unwrap(); + let path = dir.join("singular.usda"); + std::fs::write( + &path, + r#"#usda 1.0 +def Xform "World" +{ + def Xform "Bad" + { + matrix4d xformOp:transform = ((0, 0, 0, 0), (0, 0, 0, 0), (0, 0, 0, 0), (0, 0, 0, 1)) + uniform token[] xformOpOrder = ["!invert!xformOp:transform"] + def Mesh "M" + { + int[] faceVertexCounts = [3] + int[] faceVertexIndices = [0, 1, 2] + point3f[] points = [(0, 0, 0), (1, 0, 0), (0, 1, 0)] + } + } +} +"#, + ) + .unwrap(); + let scene = Scene::from_usd(&path).unwrap(); + let warned: Vec<_> = scene + .warnings + .iter() + .filter(|w| w.code == WarningCode::XformUncomposable) + .collect(); + assert_eq!(warned.len(), 1, "{:#?}", scene.warnings); + assert!( + warned[0] + .message + .contains("could not compose its xformOp stack"), + "{}", + warned[0].message + ); +} diff --git a/crates/crust-hydra/Cargo.toml b/crates/crust-hydra/Cargo.toml index e80056e4d..107ad3e39 100644 --- a/crates/crust-hydra/Cargo.toml +++ b/crates/crust-hydra/Cargo.toml @@ -22,6 +22,9 @@ crate-type = ["staticlib", "rlib"] crust-render = { path = "../crust-render", default-features = false, features = ["session", "jit", "mmap"] } crust-core = { path = "../crust-core" } crust-assets = { path = "../crust-assets" } -# The session thread keeps the authoring stage the classifier reads. -openusd.workspace = true tracing.workspace = true + +[dev-dependencies] +# Every import a test performs is compared with the direct importer's +# baseline (crust-core's test-only `parity` feature). +crust-core = { path = "../crust-core", features = ["parity"] } diff --git a/crates/crust-render/Cargo.toml b/crates/crust-render/Cargo.toml index 402c1ec02..b580c728f 100644 --- a/crates/crust-render/Cargo.toml +++ b/crates/crust-render/Cargo.toml @@ -33,9 +33,9 @@ jit = ["crust-core/jit"] mmap = ["crust-core/mmap"] # The live session's core (`session`): an override layer followed on disk, # each change classified and applied in place or by a re-import. Needs only -# openusd, which authors and diffs the layer: no MCP SDK, no async runtime. -# `crust-hydra` builds the library with it alone. -session = ["dep:openusd"] +# openusd (through Moho), which authors and diffs the layer: no MCP SDK, no +# async runtime. `crust-hydra` builds the library with it alone. +session = ["dep:moho"] # `crust mcp`: a Model Context Protocol server over stdio for an agent's # live session (the `mcp-session` capability). It brings in the MCP SDK and # an async runtime, which carry only the protocol: the session itself runs @@ -45,7 +45,7 @@ mcp = [ "session", "dep:rmcp", "dep:tokio", - "openusd/serde", + "moho/serde", "dep:serde", "dep:schemars", "dep:serde_json", @@ -74,10 +74,10 @@ ctrlc = "3.4" rmcp = { version = "3.5.1", default-features = false, features = ["server", "macros", "transport-io"], optional = true } tokio = { version = "1.52", default-features = false, features = ["rt", "macros", "io-std", "sync", "time"], optional = true } # `session`: the session authors and diffs its override layer through -# openusd, the same crate (and version) crust-core imports with. `mcp` adds -# `serde`, so a queried value reaches the client as the JSON of its -# `sdf::Value`. -openusd = { workspace = true, optional = true } +# openusd, reached as `moho::openusd`, the same crate crust-core imports with. +# `mcp` adds `moho/serde`, so a queried value reaches the client as the JSON of +# its `sdf::Value`. +moho = { workspace = true, optional = true } # `mcp`: the tools' parameters and results. `schemars` is the version rmcp # derives its input schemas with. serde = { version = "1.0", features = ["derive"], optional = true } @@ -91,8 +91,10 @@ base64 = { version = "0.23", optional = true } # (`tex_probe`, `ptex_seams`) — the decoded `PtexColor` deliberately does not # replace those, since they sample without the colour decode. [dev-dependencies] -openusd.workspace = true -openusd-schemas = { workspace = true, features = ["geom"] } +# Every import a test performs is compared with the direct importer's +# baseline (crust-core's test-only `parity` feature). +crust-core = { path = "../crust-core", features = ["parity"] } +moho.workspace = true ptex.workspace = true # `std` for `tracing::subscriber::with_default`, which the product writer's # test uses to see the warning an authored `crust:*` attribute gets. diff --git a/crates/crust-render/examples/mass_spike.rs b/crates/crust-render/examples/mass_spike.rs index f5871b2fb..98a8fb81f 100644 --- a/crates/crust-render/examples/mass_spike.rs +++ b/crates/crust-render/examples/mass_spike.rs @@ -27,6 +27,7 @@ //! ``` use crust_core::{Ray, Scene, Vec3A}; +use moho::{openusd, openusd_schemas}; use openusd::{sdf, usd}; use std::path::{Path, PathBuf}; diff --git a/crates/crust-render/examples/proto_probe.rs b/crates/crust-render/examples/proto_probe.rs index d498b833f..ea2939ae0 100644 --- a/crates/crust-render/examples/proto_probe.rs +++ b/crates/crust-render/examples/proto_probe.rs @@ -14,6 +14,7 @@ //! cargo run --release -p crust-render --example proto_probe -- stage.usda [/prim/path] //! ``` +use moho::{openusd, openusd_schemas}; use openusd::{sdf, usd}; fn main() { diff --git a/crates/crust-render/examples/ptex_verify.rs b/crates/crust-render/examples/ptex_verify.rs index a85874d72..e4d93035c 100644 --- a/crates/crust-render/examples/ptex_verify.rs +++ b/crates/crust-render/examples/ptex_verify.rs @@ -25,6 +25,7 @@ //! model.usd /path/to/mesh_prim color.ptx //! ``` +use moho::openusd; use openusd::{sdf, usd}; fn main() { diff --git a/crates/crust-render/examples/rel_probe.rs b/crates/crust-render/examples/rel_probe.rs index 9b95ce678..e1610856a 100644 --- a/crates/crust-render/examples/rel_probe.rs +++ b/crates/crust-render/examples/rel_probe.rs @@ -12,6 +12,7 @@ //! cargo run --release -p crust-render --example rel_probe -- stage.usd[a] [relName] //! ``` +use moho::openusd; use openusd::{sdf, usd}; fn main() { diff --git a/crates/crust-render/examples/xform_probe.rs b/crates/crust-render/examples/xform_probe.rs index 7253f8588..3cf21b842 100644 --- a/crates/crust-render/examples/xform_probe.rs +++ b/crates/crust-render/examples/xform_probe.rs @@ -11,6 +11,7 @@ //! cargo run --release -p crust-render --example xform_probe -- stage.usda /prim/path //! ``` +use moho::{openusd, openusd_schemas}; use openusd::{sdf, usd}; use openusd_schemas::geom::{Xform, XformableExt}; diff --git a/crates/crust-render/src/mcp/edit.rs b/crates/crust-render/src/mcp/edit.rs index 85be9b6f6..64412c9b3 100644 --- a/crates/crust-render/src/mcp/edit.rs +++ b/crates/crust-render/src/mcp/edit.rs @@ -16,6 +16,7 @@ //! The other list ops (`references`, `payload`, relationship targets, …) //! are replaced as a whole, as any other field: `bind_material` rebinds. +use moho::openusd; use openusd::sdf::{self, AbstractData, Specifier, Value}; use openusd::usd::Stage; use std::path::Path; diff --git a/crates/crust-render/src/mcp/place.rs b/crates/crust-render/src/mcp/place.rs index 7ed09e027..d1c45e832 100644 --- a/crates/crust-render/src/mcp/place.rs +++ b/crates/crust-render/src/mcp/place.rs @@ -11,6 +11,7 @@ use super::session::Open; use crust_core::live::Provenance; use crust_core::place::{self, Amount, Dropped, ScatterRequest, UpAxis}; use glam::{DMat4, DVec3}; +use moho::openusd; use openusd::sdf; use std::path::{Path, PathBuf}; use std::time::Instant; diff --git a/crates/crust-render/src/mcp/query.rs b/crates/crust-render/src/mcp/query.rs index 88fed471d..39650a374 100644 --- a/crates/crust-render/src/mcp/query.rs +++ b/crates/crust-render/src/mcp/query.rs @@ -2,6 +2,7 @@ //! which layers say so. Values are read at the default time, as the //! session's import (no frame) reads them. +use moho::openusd; use openusd::sdf; use openusd::usd::{LoadPolicy, Prim, ResolveInfoSource, Stage}; use serde_json::{Map, Value, json}; diff --git a/crates/crust-render/src/mcp/session.rs b/crates/crust-render/src/mcp/session.rs index cbcbef887..e30cc5ea9 100644 --- a/crates/crust-render/src/mcp/session.rs +++ b/crates/crust-render/src/mcp/session.rs @@ -26,6 +26,7 @@ use crust_render::session::sources::Sources; use crust_render::session::{ classify_saved, import_kept, loader, open_stage, replace_file, update_or_import, }; +use moho::openusd; use openusd::sdf; use openusd::usd::Stage; use std::future::Future; diff --git a/crates/crust-render/src/mcp/tests.rs b/crates/crust-render/src/mcp/tests.rs index 36f38f1ae..e76e6fd90 100644 --- a/crates/crust-render/src/mcp/tests.rs +++ b/crates/crust-render/src/mcp/tests.rs @@ -6,6 +6,7 @@ use super::session::State; use crate::{Cli, Command, RenderRun, render_and_write}; use clap::Parser; use crust_core::RenderControl; +use moho::{openusd, openusd_schemas}; use serde_json::{Value, json}; use std::path::{Path, PathBuf}; use std::time::Duration; diff --git a/crates/crust-render/src/session/delta.rs b/crates/crust-render/src/session/delta.rs index 2c0e9cc75..fb246b1a8 100644 --- a/crates/crust-render/src/session/delta.rs +++ b/crates/crust-render/src/session/delta.rs @@ -14,6 +14,7 @@ //! that name them, compose to nothing on their own. use crust_core::live::{Change, Provenance}; +use moho::openusd; use openusd::sdf::{self, AbstractData, SpecType, Specifier, Value}; use openusd::usd::Stage; use std::fmt; diff --git a/crates/crust-render/src/session/layer.rs b/crates/crust-render/src/session/layer.rs index 6efcbe287..e1e5deb91 100644 --- a/crates/crust-render/src/session/layer.rs +++ b/crates/crust-render/src/session/layer.rs @@ -2,6 +2,7 @@ //! only composition arc is a sublayer on the input; every edit is an opinion //! in it; it is saved after every edit batch. +use moho::openusd; use openusd::sdf; use std::path::{Component, Path, PathBuf}; diff --git a/crates/crust-render/src/session/live.rs b/crates/crust-render/src/session/live.rs index f58916fe3..0b4eb9c50 100644 --- a/crates/crust-render/src/session/live.rs +++ b/crates/crust-render/src/session/live.rs @@ -36,6 +36,7 @@ use super::{import_kept, loader, open_stage, update_or_import}; use crate::Assets; use crust_assets::FileAssets; use crust_core::{AovFilm, AovRequest, Buffer, RenderControl, RenderOutcome}; +use moho::openusd; use openusd::sdf::{self, AbstractData, Value}; use openusd::usd::Stage; use std::panic::{AssertUnwindSafe, catch_unwind}; diff --git a/crates/crust-render/src/session/mod.rs b/crates/crust-render/src/session/mod.rs index d75b6a647..d4538e176 100644 --- a/crates/crust-render/src/session/mod.rs +++ b/crates/crust-render/src/session/mod.rs @@ -5,6 +5,7 @@ //! Both take the change through here, so an edit classifies the same in //! either host and its scene is the one `crust render` imports. +use moho::openusd; pub mod delta; pub mod layer; pub mod live; diff --git a/crates/crust-render/tests/import_parity.rs b/crates/crust-render/tests/import_parity.rs new file mode 100644 index 000000000..afcb21412 --- /dev/null +++ b/crates/crust-render/tests/import_parity.rs @@ -0,0 +1,296 @@ +//! Import parity on the committed samples (the `moho-import` change, spec +//! `import-parity`): each sample's `crust check --json` report, timings +//! excluded, against the baseline recorded from the direct importer. +//! +//! The `crust` process this runs is built with crust-core's `parity` feature +//! (the dev-dependency in `Cargo.toml`), so each check also compares the +//! imported scene's digest with its baseline (`crust_core::parity`), and with +//! `CRUST_PARITY_IMAGES=1` its 16 spp image. `CRUST_RECORD_BASELINES=1` +//! records every baseline instead. + +use std::path::{Path, PathBuf}; +use std::process::Command; + +/// The workspace's `samples/`. +fn samples() -> PathBuf { + Path::new(env!("CARGO_MANIFEST_DIR")) + .join("../../samples") + .canonicalize() + .expect("samples/") +} + +/// Samples that reference files outside the repository, with the file each +/// needs: compared only where that file exists, and listed as skipped +/// otherwise (in CI). They are also the heavy ones (four to ten minutes each +/// unoptimised), so an unoptimised build compares them only with +/// `CRUST_PARITY_EXTERNAL=1`; an optimised one (`cargo test --release`, the +/// image run) always does. +const EXTERNAL: &[(&str, &str)] = &[ + ("materialx_lion.usda", "MaterialXTeapotLion-1.0"), + ("materialx_teapot.usda", "MaterialXTeapotLion-1.0"), + ( + "materialx_showcase.usda", + "/home/philippe.llerena/Workspace/samples/MaterialXTeapotLion-1.0", + ), +]; + +/// Every committed top-level `samples/*.usd*` stage. +fn sample_stages() -> Vec { + let mut stages: Vec = std::fs::read_dir(samples()) + .expect("list samples/") + .filter_map(|e| e.ok().map(|e| e.path())) + .filter(|p| { + p.extension() + .and_then(|e| e.to_str()) + .is_some_and(|e| matches!(e, "usd" | "usda" | "usdc" | "usdz")) + }) + .collect(); + stages.sort(); + stages +} + +/// Where the report baselines live, beside crust-core's digests. +fn baseline_dir() -> PathBuf { + Path::new(env!("CARGO_MANIFEST_DIR")).join("../crust-core/tests/data/import_baselines/check") +} + +/// `crust check --json -` on `stage`, with the import's phases (timings and +/// memory samples) removed and the workspace written as `$ROOT`. +fn report(stage: &Path) -> String { + let out = Command::new(env!("CARGO_BIN_EXE_crust")) + .current_dir(samples()) + .args(["check", "-i"]) + .arg(stage) + .args(["--json", "-", "-l", "error"]) + .output() + .expect("run crust check"); + assert!( + out.status.success(), + "crust check {} failed:\n{}", + stage.display(), + String::from_utf8_lossy(&out.stderr) + ); + let mut json: serde_json::Value = serde_json::from_slice(&out.stdout).unwrap_or_else(|e| { + panic!( + "crust check {} printed no report ({e}):\n{}", + stage.display(), + String::from_utf8_lossy(&out.stdout) + ) + }); + if let Some(report) = json.as_object_mut() { + report.remove("import"); + } + let text = serde_json::to_string_pretty(&json).expect("re-serialize"); + let root = samples() + .parent() + .expect("the workspace") + .display() + .to_string(); + text.replace(&root, "$ROOT") + "\n" +} + +/// The report baseline comparison for one sample: `None` when equal (or +/// recorded), else what differs. In the image run (`images`) the check still +/// runs — its `crust` process compares the digest and the image, and fails on +/// a difference — but the report is not compared: the second import the image +/// takes doubles the textures it counts. +fn compare(stage: &Path, record: bool, images: bool) -> Option { + let name = stage + .file_name() + .expect("a file") + .to_string_lossy() + .into_owned(); + let dir = baseline_dir(); + let actual = report(stage); + if images { + return None; + } + let file = dir.join(format!("{name}.json")); + if record { + std::fs::create_dir_all(&dir).expect("baseline dir"); + std::fs::write(&file, &actual).expect("record the baseline"); + return None; + } + let Ok(expected) = std::fs::read_to_string(&file) else { + return Some(format!( + "{name}: no baseline {} — record it with CRUST_RECORD_BASELINES=1", + file.display() + )); + }; + // The listed parity exception: prototype numbers are not compared. + let (expected, actual) = ( + crust_core::parity::without_prototype_numbers(&expected), + crust_core::parity::without_prototype_numbers(&actual), + ); + if expected == actual { + return None; + } + let line = expected + .lines() + .zip(actual.lines()) + .position(|(a, b)| a != b) + .unwrap_or(expected.lines().count().min(actual.lines().count())); + Some(format!( + "{name}: the check report differs from {} at line {}:\n baseline: {}\n import: {}", + file.display(), + line + 1, + expected.lines().nth(line).unwrap_or(""), + actual.lines().nth(line).unwrap_or("") + )) +} + +#[test] +fn every_sample_imports_as_its_baseline() { + // The image run (`scripts/parity_images.sh`) imports each stage twice, + // which the report's counts see: it records images only, never reports. + let images = std::env::var("CRUST_PARITY_IMAGES").is_ok_and(|v| v == "1"); + let record = !images && std::env::var("CRUST_RECORD_BASELINES").is_ok_and(|v| v == "1"); + let external = cfg!(not(debug_assertions)) + || std::env::var("CRUST_PARITY_EXTERNAL").is_ok_and(|v| v == "1"); + let mut stages = Vec::new(); + for stage in sample_stages() { + let name = stage + .file_name() + .expect("a file") + .to_string_lossy() + .into_owned(); + if let Some((_, needs)) = EXTERNAL.iter().find(|(s, _)| *s == name) { + let needed = samples().join(needs); + if !needed.exists() { + eprintln!("skipped {name}: needs {} (not committed)", needed.display()); + continue; + } + if !external { + eprintln!("skipped {name}: external and heavy, set CRUST_PARITY_EXTERNAL=1"); + continue; + } + } + stages.push(stage); + } + // Each check is its own process: run them side by side. + let failures: Vec = std::thread::scope(|scope| { + let runs: Vec<_> = stages + .iter() + .map(|stage| scope.spawn(move || compare(stage, record, images))) + .collect(); + runs.into_iter() + .filter_map(|run| run.join().expect("a sample's check panicked")) + .collect() + }); + assert!(failures.is_empty(), "{}", failures.join("\n")); + assert!(stages.len() >= 40, "only {} samples compared", stages.len()); +} + +/// A stage of five top-level subtrees, which the importer streams one masked +/// stage at a time: four boxes and a light under `/World`, a camera beside. +const FIVE_SUBTREES: &str = r#"#usda 1.0 +( + defaultPrim = "World" +) + +def Xform "World" +{ + def Camera "cam" + { + double3 xformOp:translate = (0, 0, 12) + uniform token[] xformOpOrder = ["xformOp:translate"] + } + def Xform "A" + { + def Cube "box" { double3 xformOp:translate = (-3, 0, 0) uniform token[] xformOpOrder = ["xformOp:translate"] } + } + def Xform "B" + { + def Sphere "ball" { double3 xformOp:translate = (-1, 0, 0) uniform token[] xformOpOrder = ["xformOp:translate"] } + } + def Xform "C" + { + def Cube "box" { double3 xformOp:translate = (1, 0, 0) uniform token[] xformOpOrder = ["xformOp:translate"] } + } + def Xform "D" + { + def Cylinder "can" { double3 xformOp:translate = (3, 0, 0) uniform token[] xformOpOrder = ["xformOp:translate"] } + } + def SphereLight "key" + { + float inputs:intensity = 50 + float inputs:radius = 0.5 + double3 xformOp:translate = (0, 4, 4) + uniform token[] xformOpOrder = ["xformOp:translate"] + } +} +"#; + +/// `crust ` in `dir`, with `CRUST_STREAM_IMPORT` set to `stream`. +fn crust_streaming(dir: &Path, stream: &str, args: &[&str]) -> std::process::Output { + Command::new(env!("CARGO_BIN_EXE_crust")) + .current_dir(dir) + .env("CRUST_STREAM_IMPORT", stream) + .args(args) + .output() + .expect("run crust") +} + +/// Streaming is scheduling only: a stage of five subtrees imports to the same +/// report and renders the same image streamed and on one stage +/// (`CRUST_STREAM_IMPORT=0`). +#[test] +fn streamed_and_single_stage_imports_are_equal() { + let dir = std::env::temp_dir() + .join("crust_import_parity") + .join("five_subtrees"); + let _ = std::fs::remove_dir_all(&dir); + std::fs::create_dir_all(&dir).expect("temp dir"); + std::fs::write(dir.join("stage.usda"), FIVE_SUBTREES).expect("write stage"); + let mut reports = Vec::new(); + for (stream, image) in [("1", "streamed.exr"), ("0", "single.exr")] { + let out = crust_streaming( + &dir, + stream, + &[ + "render", + "-i", + "stage.usda", + "-s", + "16", + "--indirect-clamp", + "0", + "-o", + image, + "-l", + "error", + ], + ); + assert!( + out.status.success(), + "{}", + String::from_utf8_lossy(&out.stderr) + ); + let out = crust_streaming( + &dir, + stream, + &["check", "-i", "stage.usda", "--json", "-", "-l", "error"], + ); + assert!( + out.status.success(), + "{}", + String::from_utf8_lossy(&out.stderr) + ); + let mut json: serde_json::Value = serde_json::from_slice(&out.stdout).expect("a report"); + if let Some(report) = json.as_object_mut() { + report.remove("import"); + } + reports.push(json); + } + assert_eq!(reports[0], reports[1], "the reports differ"); + let diff = Command::new(env!("CARGO_BIN_EXE_crust")) + .current_dir(&dir) + .args(["diff", "streamed.exr", "single.exr"]) + .output() + .expect("run crust diff"); + assert!( + diff.status.success(), + "the images differ: {}", + String::from_utf8_lossy(&diff.stdout) + ); +} diff --git a/crates/crust-render/tests/mcp.rs b/crates/crust-render/tests/mcp.rs index 5c7332ef9..3e6ff9c0c 100644 --- a/crates/crust-render/tests/mcp.rs +++ b/crates/crust-render/tests/mcp.rs @@ -3,6 +3,7 @@ //! messages on stdout, whatever the log level. #![cfg(feature = "mcp")] +use moho::openusd; use serde_json::{Value, json}; use std::io::{BufRead, BufReader, Write}; use std::path::{Path, PathBuf}; diff --git a/deny.toml b/deny.toml index 45b1035ff..115d7d933 100644 --- a/deny.toml +++ b/deny.toml @@ -60,9 +60,11 @@ unknown-registry = "deny" unknown-git = "deny" allow-registry = ["https://github.com/rust-lang/crates.io-index"] # The git dependencies, each resolved to a commit in Cargo.lock: OpenSubdiv-rs, -# pinned by release tag, and openusd / openusd-schemas, patched to `main` -# (see `[patch.crates-io]` in the workspace Cargo.toml). +# pinned by release tag, openusd / openusd-schemas, patched to one rev, and Moho +# (the scene index the index import route reads through), pinned by rev to the +# Moho commit that pins that same openusd rev (see the workspace Cargo.toml). allow-git = [ + "https://github.com/doubleailes/Moho", "https://github.com/doubleailes/OpenSubdiv-rs", - "https://github.com/mxpv/openusd", + "https://github.com/doubleailes/openusd", ] diff --git a/docs/architecture.md b/docs/architecture.md index 7c7aadc08..40df057fc 100644 --- a/docs/architecture.md +++ b/docs/architecture.md @@ -22,7 +22,8 @@ graph TD nn["crust-nn
tiny networks: hash grid, MLP, Adam"] utils["utils
sampling warps, MIS heuristics"] oqmc["openqmc-rs
QMC samplers (crates.io)"] - usd["openusd + openusd-schemas"] + moho["moho
scene index over openusd (Hydra 2.0)"] + usd["openusd + openusd-schemas
through moho's re-exports"] ptex["ptex-rs"] osd["opensubdiv-rs"] ocio["ocio
OpenColorIO port"] @@ -39,7 +40,8 @@ graph TD jit --> mtlx core --> utils core --> oqmc - core --> usd + core --> moho + moho --> usd core --> osd core --> ocio ``` @@ -50,7 +52,7 @@ graph TD | `crust-mtlx` | `.mtlx` parsing, graph → slot-indexed `Program`, the BSDF closure tree and EDF terms, surface-shader nodes expanded into their nodegraphs | crust types (it defines the `Texture` trait it consumes) | | `crust-jit` | compiling a `Program` to machine code, bit-identical to the interpreter | everything but `crust-mtlx` | | `crust-nn` | tiny, bit-deterministic networks: the multi-resolution hash grid, dense layers, sigmoid cross-entropy, Adam, gradient checking (what `neural` light selection learns visibility with) | crust types, threads (the caller maps a batch's chunks) and random numbers (the caller draws them) | -| `crust-core` | USD import, `Scene`, `Renderer`, integrator, materials, lights, volumes, guiding, colour management (the OCIO config, every transfer curve), stats/profile, the diagnostic (`diagnostic/`: phases, trials, the `crust-diagnostic/1` report and its Markdown), the light path inspector (`inspect/`: the `crust-light-paths/1` report) | image, texture and IES decoding; UI | +| `crust-core` | USD import (through Moho's scene index, `scene/usd_import/index/`), `Scene`, `Renderer`, integrator, materials, lights, volumes, guiding, colour management (the OCIO config, every transfer curve), stats/profile, the diagnostic (`diagnostic/`: phases, trials, the `crust-diagnostic/1` report and its Markdown), the light path inspector (`inspect/`: the `crust-light-paths/1` report) | image, texture and IES decoding; UI | | `crust-assets` | every file decoder (EXR, PNG/HDR, Ptex, IES, `.tx`), the tile caches, `maketx` | the integrator | | `crust-render` | lib + bin. The library (`lib.rs`): the scene flags and the CLI's import-and-check policy (`load_scene`, `apply_scene_overrides`, `check_scene`, `select_products`), the product writer (`products.rs`), and with cargo feature `session` (openusd only) the live session's core (`session/`: the override layer diffed, classified, updated in place or re-imported). The binary (`main.rs`): argument parsing, logging, progress bar, writing EXR + PNG, printing and saving the diagnostic's and the light path inspector's reports, exit codes; `crust mcp`, the MCP server (`mcp/`, cargo feature `mcp`, implies `session`, on by default) | decoding anything | | `crust-hydra` | crust behind a C ABI (`include/crust_hydra.h`) for `hdCrust`, the C++ Hydra render delegate in `hydra/hdCrust` (built with CMake against OpenUSD 26, outside `cargo build`): a `Session` on the layers the delegate writes (the `crust-render` session core), a render thread polled for snapshots, AOVs at completion, panics caught at every entry point under `[profile.hydra]` (`panic = "unwind"`), `tracing` and import warnings forwarded to the host. `deny(unsafe_code)` with five audited blocks, all in `ffi.rs` | Hydra and C++ (the plugin speaks them) | @@ -58,7 +60,7 @@ graph TD Two properties of this graph are deliberate and worth keeping: -- **`crust-core` decodes no assets.** It parses USD itself (through `openusd`), +- **`crust-core` decodes no assets.** It reads USD through Moho's scene index (openusd beneath, through Moho's re-exports), but every byte read from an image, Ptex or IES file crosses the `AssetLoader` seam (below) into `crust-assets`. That is why the engine library has no codec dependencies and why the probe examples in @@ -79,10 +81,13 @@ crust-render::main → render (`crust render`; `crust ls ` is Scene::list ├─ FileAssets::new() crust-assets: residency policy from CRUST_* env ├─ Scene::from_usd_with_options(path, &assets, opts) │ └─ scene::usd_import::load_scene crust-core - │ ├─ index stage (payloads unloaded) → RenderSettings, RenderProducts (AovRequest), camera choice, chunk list - │ ├─ for each chunk: open masked stage → traverse_into → drop stage - │ │ prims dispatch to mesh / shapes / instancing / lights / volume / camera - │ │ materials resolve through materials::resolve_material (cached per stage epoch) + │ ├─ index stage (payloads unloaded) → the scene input, a Moho chain::input over it: + │ │ RenderSettings, RenderProducts (AovRequest), camera choice, chunk list + │ ├─ for each chunk: open masked stage → its chain::input joins the MergingSceneIndex + │ │ (a side input for materials bound from outside it, streaming::unresolved) + │ │ → index::walk::walk over its children → remove the input, drop the stage + │ │ prims dispatch by Hydra type to mesh / shapes / instancing / lights / volume / camera + │ │ materials resolve through materials::resolve_material (cached by Moho's paths) │ │ assets decode through AssetLoader (timed as "Load assets") │ ├─ mesh::flush_meshes bake-once vs instance, now that counts are final │ └─ WorldBuilder::commit top-level SBVH (crust-rt) @@ -184,7 +189,7 @@ both sides must keep; the contract lives in the doc comment at the definition. | area | modules | |------|---------| | scene description | `scene.rs` (`Scene`, `AssetLoader`, `UsdImportOptions`), `camera.rs`, `world.rs` (procedural fallback scene) | -| USD import | `scene/usd_import/` — module map in its `mod.rs`; `scene/usd_import/implicit.rs` (`Cube`, `Plane`, `Cylinder`, `Cone`, `Capsule` and the `_1` variants tessellated as OpenUSD's GeomUtil does, pinned point for point by `tests/geomutil_oracle.rs`, their radial count chosen from the screen when a camera is named); `scene/subdiv/` (OpenSubdiv refinement: `uniform`, per-face `adaptive`, `topology`, `normals`); `scene/displace.rs` (scalar displacement of tessellated meshes, once per distinct mesh) | +| USD import | `scene/usd_import/` — module map in its `mod.rs`; `scene/usd_import/index/` (the import through Moho: the inputs and their chains, the walk, `PrimData` over a prim's schemas and generic data, the material networks, the instancers, and `stage_facts`, the one place that reads the stage for what is not imaging data); `scene/usd_import/implicit.rs` (`Cube`, `Plane`, `Cylinder`, `Cone`, `Capsule` and the `_1` variants tessellated as OpenUSD's GeomUtil does, pinned point for point by `tests/geomutil_oracle.rs`, their radial count chosen from the screen when a camera is named); `scene/subdiv/` (OpenSubdiv refinement: `uniform`, per-face `adaptive`, `topology`, `normals`); `scene/displace.rs` (scalar displacement of tessellated meshes, once per distinct mesh) | | geometry bridge | `rt_world.rs` (`World`, side tables), `strands.rs` (`StrandTable`, `CurveHit`), `primvars.rs` (`PrimvarTable`, `MeshHit`), `hittable.rs` (`HitRecord`), `ray.rs` (`Ray`, `RayCone`, ray masks), `aabb.rs` (re-export of the kernel's) | | AOVs | `aov.rs` (the source vocabulary, `AovRequest`, the per-unit planes and the full-frame `AovFilm`, the sample filters' unit evaluation and planes); products resolved in `scene/usd_import/products.rs`; `precomp.rs` (the precomp: sample filters compiled by `crust_mtlx::compile_value_graph`, the five display operations, `run`, `displayed`), read by `scene/usd_import/precomp.rs`; `lpe/` (OSL light path expressions: parser, one DFA per render; the lobe events it matches are the materials' `material/lobe.rs`); `tracer/route.rs` (routing a path's light into the expressions, and the albedo) | | integrator | `tracer/` — `mod.rs` (`Renderer`: passes, tiles, guiding schedule, the per-pass sampler dispatch), `path.rs` (`trace_path`, NEE, MIS weights, QMC domain keys), `settings.rs` (`RenderSettings`, `SamplingStrategy`); `sampler.rs` (`SamplerKind`: the six OpenQMC samplers by token), `filter.rs` (pixel filter importance sampling), `buffer.rs` (and `var_of_mean`, the one variance estimator), `region.rs` (`PixelRect`) | @@ -237,7 +242,7 @@ other. The pairs: (`settings`, `materials`, `lights`) must give the scene a fresh import of the same layer gives, warnings included. So the rebuild calls the functions the traversal called (`read_index`, `apply_exposure`, `resolve_fresh`, - `emit_light`), never copies of them; `World::check_materials` and + `emit_light`), never copies of them, over a scene index of the masked stage; `World::check_materials` and `LightList::check_replace` refuse a swap that would move anything the world, the geometry or the list was built on (`Signature`, in `rt_world.rs`); and the renderer is rebuilt with `Renderer::new`, so the light selection is a fresh one's. A new @@ -357,17 +362,31 @@ other. The pairs: `site/content/docs/reference/warnings.md`, kind included — `the_reference_page_lists_every_code` fails until the two agree. It must be raised on the importing thread: the collector is a thread-local entered by - `load_scene` (like `EvalTimeScope`), so a warning raised from a rayon task + `load_scene`, so a warning raised from a rayon task during the import would be logged but not recorded. A debug build panics when that happens (`recording_from_a_rayon_worker_during_an_import_panics`); work done on other threads (the `--auto-tx` conversions) collects its failures and raises them after joining. -- **Import cache keys.** Anything keyed on a prototype path is scoped by the - stage epoch (`ImportCaches::epoch`), because `/__Prototype_N` is renumbered - per masked stage. +- **Import cache keys.** Anything keyed on a prototype is keyed by Moho's + propagated prototype path (or a point instancer's copy), stable across a + streamed import's stages, never by openusd's `/__Prototype_N`, which is + renumbered per masked stage; a name under `/__Prototype_N` is kept for + warnings and provenance only. +- **A family's index reader ↔ its in-place rebuild.** Each schema family reads + the scene index through one reader (`usd_import/`, dispatched by Hydra type + from `index::walk`), and its in-place rebuild (`usd_import/live.rs`) builds a + scene index over the masked stage and calls that same reader. Change one and + the other follows, or an edit applied in place stops equalling a full + re-import (`crust-core/tests/live.rs`). +- **One openusd, through Moho.** crust reaches openusd only through + `moho::openusd` and `moho::openusd_schemas`, so it builds against exactly the + rev Moho pins; Moho is pinned by git `rev` in the root `Cargo.toml`, one rev + across the stack (Moho, then crust-render, then Mantle), and no manifest names + openusd (`crust-core/tests/one_openusd.rs`). Bumping Moho is its own commit. - **Stage listing.** `crust ls` (`Scene::list_usd`, `usd_import/listing.rs`) - walks the stage apart from `traverse_into`, and must meet exactly the - cameras and lights it meets: the same chunks, `prune_reason` (invisible + walks the stage itself (the one walk that does), apart from the import's + walk over the scene index, and must meet exactly the cameras and lights it + meets: the same chunks, the same pruning (`Prune`; invisible subtrees walked for cameras only), instances and `PointInstancer`s not entered. A light type the import learns must join `listing::is_kind`. Pinned by `list_usd_lists_what_a_render_uses`, which renders through every diff --git a/hydra/hdCrust/test/compare.sh b/hydra/hdCrust/test/compare.sh index e0b092081..10c3d8672 100644 --- a/hydra/hdCrust/test/compare.sh +++ b/hydra/hdCrust/test/compare.sh @@ -21,7 +21,7 @@ PREFIX="${1:?install prefix of hdCrust (cmake --install ... --prefix)}" WORK="${2:?a work directory}" # `pwd -W` (Git Bash) gives the path a native Windows program can open. ROOT="$(cd "$(dirname "$0")/../../.." && (pwd -W 2>/dev/null || pwd))" -CRUST="$ROOT/target/release/crust" +CRUST="${CRUST:-$ROOT/target/release/crust}" TEST="$PREFIX/bin/hdCrustTest" export PXR_PLUGINPATH_NAME="$PREFIX/plugin/usd/hdCrust/resources" # Git Bash on Windows: leave USD prim paths (`/World/Cam`) alone. diff --git a/hydra/hdCrust/test/crust_sysroot.sh b/hydra/hdCrust/test/crust_sysroot.sh new file mode 100755 index 000000000..a181aeae3 --- /dev/null +++ b/hydra/hdCrust/test/crust_sysroot.sh @@ -0,0 +1,18 @@ +#!/usr/bin/env bash +# The release `crust` run under the pixi environment's sysroot loader and C +# library (glibc 2.39), the ones hdCrustTest and the plugin run under, so the +# CLI side of compare.sh and interaction.sh uses the same libm as the delegate +# and the two images can be bit-equal. Only for a host whose own glibc is +# older than the OpenUSD package needs (anderslanglands/aswf-pixi#57): there +# the plugin runs only through the sysroot's loader, and a CLI on the host's +# libm differs from it by an ulp on a few pixels. The pixi tasks +# `compare-sysroot` and `interaction-sysroot` (hydra/pixi.toml) set +# CRUST to this script; CI (ubuntu, glibc 2.39) runs the scripts as they are. +# +# Invoking the loader directly rather than patchelf-ing the binary: nothing is +# rewritten, so the same target/release/crust still runs on the host. +set -euo pipefail +ROOT="$(cd "$(dirname "$0")/../../.." && pwd)" +SYSROOT="${CONDA_PREFIX:?run inside the hydra pixi environment}/x86_64-conda-linux-gnu/sysroot/lib64" +exec "$SYSROOT/ld-linux-x86-64.so.2" --library-path "$SYSROOT:$CONDA_PREFIX/lib" \ + "$ROOT/target/release/crust" "$@" diff --git a/hydra/hdCrust/test/interaction.sh b/hydra/hdCrust/test/interaction.sh index aa2793440..82952b2a6 100644 --- a/hydra/hdCrust/test/interaction.sh +++ b/hydra/hdCrust/test/interaction.sh @@ -22,7 +22,7 @@ PREFIX="${1:?install prefix of hdCrust}" WORK="${2:?a work directory}" # `pwd -W` (Git Bash) gives the path a native Windows program can open. ROOT="$(cd "$(dirname "$0")/../../.." && (pwd -W 2>/dev/null || pwd))" -CRUST="$ROOT/target/release/crust" +CRUST="${CRUST:-$ROOT/target/release/crust}" TEST="$PREFIX/bin/hdCrustTest" export PXR_PLUGINPATH_NAME="$PREFIX/plugin/usd/hdCrust/resources" export MSYS_NO_PATHCONV=1 diff --git a/hydra/hdCrust/test/usdc_roundtrip.sh b/hydra/hdCrust/test/usdc_roundtrip.sh index 0b236ccfd..959a01ad6 100644 --- a/hydra/hdCrust/test/usdc_roundtrip.sh +++ b/hydra/hdCrust/test/usdc_roundtrip.sh @@ -13,7 +13,7 @@ set -uo pipefail WORK="${1:?a work directory}" ROOT="$(cd "$(dirname "$0")/../../.." && (pwd -W 2>/dev/null || pwd))" -CRUST="$ROOT/target/release/crust" +CRUST="${CRUST:-$ROOT/target/release/crust}" export MSYS_NO_PATHCONV=1 mkdir -p "$WORK" diff --git a/hydra/pixi.toml b/hydra/pixi.toml index 40bfd0096..da232e718 100644 --- a/hydra/pixi.toml +++ b/hydra/pixi.toml @@ -27,6 +27,21 @@ sysroot_linux-64 = ">=2.38" [target.linux-64.activation] scripts = ["hide_mtlx_stdlib.sh"] +# On a host whose glibc is older than the OpenUSD package needs (2.38; its +# metadata says 2.17: anderslanglands/aswf-pixi#57), hdCrust runs only through +# the sysroot's loader (`CONDA_OVERRIDE_GLIBC=2.39`, and the plugin's test +# linked with `-Wl,--dynamic-linker=/lib64/ld-linux-x86-64.so.2 +# -Wl,-rpath,/lib64`), so it takes the sysroot's libm while a host +# `crust` takes the host's, and compare.sh and interaction.sh differ by an ulp +# on a few pixels. These tasks run the CLI side under the same loader +# (hdCrust/test/crust_sysroot.sh), so both sides share one libm: +# pixi run compare-sysroot +# pixi run interaction-sysroot +# CI (ubuntu, glibc 2.39) needs no wrapper and runs the scripts directly. +[target.linux-64.tasks] +compare-sysroot = "CRUST=$PIXI_PROJECT_ROOT/hdCrust/test/crust_sysroot.sh bash hdCrust/test/compare.sh" +interaction-sysroot = "CRUST=$PIXI_PROJECT_ROOT/hdCrust/test/crust_sysroot.sh bash hdCrust/test/interaction.sh" + # What that sysroot needs of the machine (ubuntu-latest has 2.39). Linux only. [system-requirements] libc = "2.39" diff --git a/openspec/changes/moho-import/.openspec.yaml b/openspec/changes/moho-import/.openspec.yaml new file mode 100644 index 000000000..7ccf7c369 --- /dev/null +++ b/openspec/changes/moho-import/.openspec.yaml @@ -0,0 +1,2 @@ +schema: spec-driven +created: 2026-10-25 diff --git a/openspec/changes/moho-import/design.md b/openspec/changes/moho-import/design.md new file mode 100644 index 000000000..408c22434 --- /dev/null +++ b/openspec/changes/moho-import/design.md @@ -0,0 +1,625 @@ +## Context + +See proposal.md for why. This section records the state the plan starts from: Crust at +`dacc6475`, Moho at `92c8b84`, openusd at `68a867a`. + +**Crust's importer** (`crates/crust-core/src/scene/usd_import/`, about 23k lines). +`load_scene` works in three stages. + +- **The index stage.** `load_scene` first opens a `LoadNone` index stage. `read_index` + reads the render settings, products, vars, passes, the working colour space, the + dicing camera and the shutter from it. It is kept until light links are resolved. +- **The traversal.** `traverse_stage` runs over one stage, or over one `LoadAll` stage + per chunk when the stage has at least 4 top-level subtrees (`stream_roots`; each chunk + is masked to its subtree plus the active pass prim). Each chunk is walked from the + root by `traverse_into`, an explicit stack. That walk composes world matrices + (`compose_with_parent`) and prunes abstract, inactive, `proxy`/`guide` and invisible + prims, still walking invisible subtrees for cameras. It dispatches by typed schema. + Geometry ids are handed out in traversal order. They key light links, pass flags and + provenance. +- **After the last chunk.** Light links are resolved (`LightLinks::resolve`), meshes + are flushed (the bake-versus-instance decision needs every chunk's placement counts), + and the top-level BVH is committed. + +| module | reads from openusd | Moho counterpart | +|---|---|---| +| `time` | thread-local time code (`EvalTimeScope`) | the index's time: `set_time`, sampled offsets | +| `settings`, `products`, `precomp` | `RenderSettings`/`Product`/`Var`, `crust:*` settings, `driver:parameters:*`, `ri:*`, `compute_render_spec`, filter prims named by relationship | `renderSettings` (flattened products and vars, `namespacedSettings`), scene globals and `__usdStageMetadata` (M3), generic data on filter prims | +| `passes` | the active `RenderPass`: `matte`, `cameraVisibility`, opinions of `prune`/`renderVisibility` | `renderPass`, its `collections` (`renderVisibility`, and `prune`, `matte`, `cameraVisibility` when applied: M6) | +| `camera`, `adaptive` | `UsdGeomCamera`, `metersPerUnit` (and whether it is authored), conform policy | `camera` schema, `__usdStageMetadata/metersPerUnit/{value, authored}` on the absolute root (M3) | +| `xform` | `xformOpOrder` stacks, `XformQuery`, sample times over the shutter, `crust:motion:translate` | `xform` (local) and flattened world `xform`, sample times; generic data | +| `attrs` | `crust:rayMask`, `crust:subdivision*`, `crust:light:cameraVisible`, `primvars:ri:attributes:visibility:camera`, colour spaces | `__usdAttributes` (value, authored, colorSpace), `primvars` | +| `mesh` | topology, holes, subdivision tags, primvars (indices, interpolation, elementSize, colour space), normals precedence, `crust:displacementBound` | `mesh`, `primvars` (de-indexed reads), generic data | +| `shapes`, `strands` | `Sphere`, `BasisCurves`, `NurbsCurves`, `primvars:curve*`, widths | `sphere`, `basisCurves`, `nurbsCurves`, `primvars` | +| `implicit` | `Cube`, `Cone`, `Cylinder(_1)`, `Capsule(_1)`, `Plane`, tessellated by Crust | the shape schemas (not meshed by Moho, as Crust needs) | +| `materials`, `preview`, `mtlx_network` | binding resolution (`full` purpose, then all purposes; collection bindings), terminals, `info:id`, inputs and connections, `crust:openpbr`, `PxrDisneyBsdf`, `.mtlx` references read off layer specs, materials outside the chunk on a side stage, `prim_stack` and connections for provenance | `materialBindings` (resolved per purpose), `material` networks per context, asset values; no `.mtlx` arc (openusd has no MaterialX format, see `mtlx-format-plugin`) | +| `lights`, `light_links` | every UsdLux type, shaping, IES, dome texture and pole, `crust:light:*`; link collections via `compute_membership_query`, read on the index stage or the chunk | `light` (open container), `collections` (complete membership expressions), `categories` (after the merge, `chain::merged`: M1) | +| `volume` | `crust:volume:*` on any prim; a material's volume terminal | generic data; `material` volume terminal | +| `instancing` | `is_instance`/`prototype` (`/__Prototype_N`, epoch-scoped), placements counted per subtree, raw `PointInstancer` arrays with per-index warnings | `instancer` prims, `instancerTopology`, `hydra:instance*` primvars, stable prototype paths under `MohoNiPropagatedPrototypes` / `ForInstancer`, `primOrigin/scenePath` naming each prototype prim's USD source (M4) | +| `mod.rs` (stage facts) | `layer_identifiers`, `layer_stack`, session/root layer specs (`invisible_overrides`), `has_authored_time_code_range` | the time range's authored-ness: `__usdStageMetadata` (M3); the rest none: not imaging data (D7) | +| `live` | rebuilds one material, light, or the settings on a masked stage through the import's functions | the same functions, over an index of that stage (D8) | +| `listing` | `crust ls` | unchanged (not an import) | + +**Live edits today** (`crate::live`, `usd_import/live.rs`). The MCP session and the +host session diff layers. A classifier, fed by the scene's `Provenance` (arc sources +from `prim_stack`, the prims a material reads, per-light and per-mesh origins), decides +whether an edit can be rebuilt in place. A rebuild calls the import's own functions on a +stage masked to the edited prim. The rule "an MCP edit applied in place equals a full +re-import" is pinned bitwise. + +**Moho** gives `StageSceneIndex` (`new`, `set_stage`, `set_time`, +`apply_pending_updates`, `set_include_unloaded_prims`, and `stage()`), +`moho::chain::standard`, `chain::input` (the standard chain without light linking) and +`chain::merged` (light linking over a merging index), `moho::streaming::unresolved`, the +public filters (so a chain can be assembled from them), +`MergingSceneIndex` (`add_input_scene`, `insert_input_scene`, `remove_input_scene`), +typed schemas, and `__usdAttributes`/`__usdRelationships`. Its contract is +`Moho/openspec/specs/*/spec.md`. Data sources are `Rc` and confined to one thread; +values are `Send`. Moho's `moho-spike` is the streaming memory benchmark: on Moana, +strategy (B), a masked stage per chunk, peaks at 1.97 GiB, and strategy (D) does (B) +through Moho (`scripts/streaming-spike.sh --with-d`). + +**Moho's rev.** The plan was written while Moho's gaps M1 to M7 were open. Moho's change +`scene-index-gaps` closed them and merged into Moho's `main` at `fc391a5` (Moho-side +follow-ups, below); the workspace pinned `moho` at that rev, and builds against it as CI +does, with no local patch. Moho's M8 to M10 (gaps found while migrating, below) merged +at `788b1ac`, together with Moho's repin of openusd to `doubleailes/openusd` at +`d7d2a29` (upstream `0a4bb1b` plus the clip fixes of mxpv/openusd#175). The workspace +pins `moho` at `788b1ac` and patches openusd to that same fork and rev, in one commit +(D1). + +**Constraints.** +- Moho pins openusd by `rev`. crust-render patches by `branch = "main"`, which locks to + the same commit but is a different Cargo source. +- Moho is public. It is consumed by git rev, and a sibling path patch is optional for + co-development. +- crust-core stays `deny(unsafe_code)`. Moho is `forbid`. +- The import is single-threaded (`time.rs`). Only `MeshArena::commit_slots` uses rayon, + on arrays already read. + +## Goals / Non-Goals + +**Goals:** +- One import, through Moho, that produces for every scene the `Scene` the direct + importer produced, as recorded in baselines before anything migrated: the same + geometry in the same order, the same materials, lights, camera, settings, AOVs, + warnings and provenance. +- Migrate one family at a time, with parity against the baselines green after each + move. +- Delete the direct importer at the end of this change: its readers, the bridge, + `EvalTimeScope` and the prototype epoch. Every host then imports through Moho. +- Keep the direct importer's memory bound on streamed scenes (one chunk's stage at a + time), and measure memory and import time on ALab and Moana against its recorded + baselines. As UsdImaging did when it moved onto scene indices, parity is the gate and + performance is reported. +- One openusd copy in the build, checked rather than assumed. +- An importer shaped for S3: readers are functions of (index, path) that feed Crust's + builders, so a later change can call them for dirtied prims. + +**Non-Goals:** +- S3: dirty notices driving in-place updates, observers on the index, retiring the + layer-diff classifier, or the session keeping an index alive between applies. +- Behaviour changes that Hydra semantics would bring, such as primvar inheritance, + `includedPurposes` (that is `payload-and-purpose-view`'s) or binding purposes beyond + today's. +- Changing Moho. The gaps the plan found (M1 to M7) are closed in Moho's own change + `scene-index-gaps`; a new gap stops the work on that point and goes through Moho's + OpenSpec flow, not a workaround here. +- `crust ls` (`listing.rs`) and the MCP session's authoring stage. Neither imports a + scene. + +## Decisions + +### D1. One openusd: the patch pins Moho's rev + +`[patch.crates-io]` changes from `branch = "main"` to +`rev = "68a867a69f3fb429a30f9e1155a0a30a3d2cdf9f"` for both openusd and openusd-schemas. +`[workspace.dependencies]` gains +`moho = { git = "https://github.com/doubleailes/Moho", rev = "92c8b847822823f796b81b85452c3c400d77e5ec" }`. +Cargo identifies a git source by URL plus reference, so `?branch=main` and `?rev=…` are +two packages even at one commit. Moho's `openusd = { git, rev }` and crust's patched +crates.io `openusd 0.8` resolve to one package only when both name the same rev. Three +checks guard it: +- `cargo tree -i openusd` and `cargo tree -i openusd-schemas` each show one package; +- `cargo tree -d` lists no openusd crate; +- a compile-time test in crust-core passes a `moho::openusd::usd::Stage` where an + `openusd::usd::Stage` is expected, and the same for one openusd-schemas type. It stops + compiling if two copies ever appear. + +*Alternatives:* `branch = "main"` in Moho. Rejected: Moho's rule is an exact rev, and +`main` moves. A `git =` entry in `[workspace.dependencies]` in place of the patch. +Rejected: the patch keeps the `0.8` requirement, so dropping it is still the whole +revert. + +Since Moho's `788b1ac` the rev is `d7d2a29406871508b6ec3ffe9173a5941b1c6123` of +`https://github.com/doubleailes/openusd`, the fork Moho pins, so the patch names that +URL (a git source is URL plus reference). The same three checks hold. + +**openusd through Moho (from Moho `e64f228`).** The user's decision: crust takes +openusd only through Moho's re-exports. Moho #12 forwards openusd's features (`mmap`, +`serde`, and the schema families `media`, `physics`, `proc`, `semantics`, `skel`, `ui`; +`geom`, `lux`, `render`, `shade` and `vol` always on). The workspace drops its +`openusd` and `openusd-schemas` entries and the `[patch.crates-io]`; crust-core's `mmap` +is `moho/mmap`, crust-render's `session` depends on an optional `moho` and `mcp` adds +`moho/serde`. One openusd is then a property of the graph, and `one_openusd.rs` checks +that no manifest names openusd directly. The paragraphs above record how the pin was +kept before. + +The bump order becomes Moho, then crust-render, then Mantle. `cargo update -p openusd` +stops being the way to move. A bump edits both revs: Moho's rev in the `moho` entry and +the openusd rev in the patch. `CLAUDE.md` says so. + +### D2. Use openusd through Moho's re-exports at the index boundary + +New index-route code names openusd types as `moho::openusd` and +`moho::openusd_schemas`. The workspace's own `openusd` and `openusd-schemas` +dependencies stay. crust-core needs features Moho does not turn on (`mmap`, the `skel`, +`proc` and `media` schema families), crust-render needs `serde`, and the direct importer +uses them. Feature unification gives both names the same crate (D1's test proves it). A +reader of the index code can see which types cross the Moho boundary. + +### D3. One route, and baselines from today's importer + +There is no route switch. The import moves to Moho in place, and the direct importer is +deleted at the end of this change (the user's decision: "the Crust importer can drop and +move to Moho"). A switch would only keep two readers alive to drift apart, which is what +the move exists to end. + +What replaces the live A/B is a set of **baselines recorded from the direct importer** +before anything migrates (task group 2), kept for the whole change, as UsdImaging kept +its legacy route's baselines when it moved onto scene indices: +- a scene digest (D11) for every committed sample and import test fixture; +- the `crust check --json` report, timings excluded, for every committed sample; +- a hash of the 16 spp image's pixels (`--indirect-clamp 0`) for every committed sample + and import test fixture; +- for ALab and Moana, the report, the EXR, and the peak memory and import time. + +The small baselines are committed under `crust-core/tests/data/import_baselines/`. The +large-scene ones are kept in a local directory by `scripts/import_parity.sh record` +(EXRs of hundreds of megabytes are not committed), and their memory and time go into the +`usd-scene-import` design record. `CRUST_RECORD_BASELINES=1` (tests) and `record` +(script) regenerate them; after the first recording that is a behavioural change of its +own, never a way to accept a migration's difference. + +Until a family moves, the transitional bridge (D6) keeps its direct reader running +under the index walk, so the tests stay green at every commit. The direct readers, the +bridge, `EvalTimeScope` and the prototype epoch are deleted together in the final code +group, once every family reads the index and parity holds on the samples, fixtures, +ALab and Moana. + +### D3a. The first behaviour change: undefined prims are not imported + +The direct importer walked every prim, defined or not, and read an `over`-only prim by +its type. USD defines no such prim, and the scene index, like UsdImaging, holds only +defined ones (`active`, `defined`, not abstract). The user's decision: the import follows +USD's rule, and an `over` with no `def` anywhere is not imported. It is the one change +of behaviour this change makes (D3b and D3c add two more). On the committed samples and fixtures it changes no +baseline: the one fixture that met it authored two specs of one prim in one layer by +accident, and was corrected rather than re-baselined. On ALab it drops one camera the +direct importer listed from the provenance (`over Camera "renderCam"` under the +`trailer_cameras` rigs), which the recorded `crust check` report and image do not show; +nothing else changes. A baseline that changes for this reason only is re-recorded, and +each such change is checked to be explained by it. + +### D3b. The second behaviour change: prims in an instance inherit its bindings + +In USD a prim inside an instance inherits the material bindings of the instance's +ancestors (`ComputeBoundMaterial` on an instance proxy), and UsdImaging propagates them +into the instance's prototype, grouping instances by binding. The direct importer +resolved a prototype prim's binding inside `/__Prototype_N` only. The user's decision: +the import takes Moho's propagated prototypes as they are (Hydra's model), a fix to the +direct importer's rule. Prototype prims are read in the instancing chain at their +re-rooted paths; a binding inside a propagated prototype names the re-rooted material +(Moho's M11), read there, and named, in warnings and provenance, by the USD prim it +comes from (`primOrigin`). Instances of one USD prototype bound differently become +several prototypes, which can change placement counts, shared-or-unshared and +bake-or-instance. A baseline that changes for this reason only is re-recorded, each +change checked against it. On the committed samples and fixtures none does. + +### D3c. The third behaviour change: a prototype is built once per import + +The direct importer keyed a prototype's parts by `(epoch, /__Prototype_N)`, the epoch +numbering a streamed import's stages, so a prototype placed in two chunks was built +twice. The parts are now keyed by Moho's propagated prototype path (or a point +instancer's copy), which is stable across stages, with no epoch (the user's decision): +a prototype is built once for the whole import and its parts reused in every chunk; +its materials, keyed by their re-rooted paths, are reused with it. The same key reuses +a prototype across point instancers (the user's decision, after ALab's 12.4 run): two +instancers whose prototypes are instanceable references to one asset read Moho's one +propagated prototype for it, so its parts and materials are built once, where the +direct importer walked each instancer's prototype through its instance proxies and +built it once per instancer. Geometry, materials +and placements are otherwise equal, and so are the images. The digests that change for +this reason only, re-recorded after their images were checked equal: +- `samples/purpose_bindings.usda` (streamed, two instances in two chunks): one + prototype block instead of two (unique triangles 38 to 26, one mesh slot and one + material fewer, the `crust check` report's BVH sizes with them); +- `usd_inline.rs`, `a_volume_cube_in_a_prototype_is_neither_a_volume_nor_a_box`: the + prototype walked once, so `volume.in_prototype` and `instancing.empty_prototype` + count 2 instead of 3. +- `usd_adaptive.rs`, `the_instancing_samples_import_adaptively_as_their_baselines` + (added with 12.2, recorded from the direct importer): `purpose_bindings.usda` with + adaptive subdivision, the same one block, mesh slot and material fewer. +- `instanced_instancers.rs`, `instancers_of_one_instanced_asset_share_its_prototype` + (recorded from the direct importer, then re-recorded): two instancers of one + instanceable asset share its mesh and material (unique triangles 6 to 4, one material + and one mesh slot fewer). +- ALab (`import_parity.sh`, 12.4): its SPRUCE point instancers' instanceable prototypes + share one propagated prototype, so the `crust check` report's unique triangles go + from 12,007,504 to 12,001,706 (BVH sizes with them). The report was re-recorded and + the direct importer's EXR kept; the check then passes, report and image equal. +- Moana (`import_parity.sh`, 12.4, after Moho's M12): the point instancers of + `isCoral1` to `isCoral5` place prims of one instanced archive, whose materials and + meshes are now built once, so unique triangles go from 60,880,698 to 60,844,338 (BVH + sizes with them). The report was re-recorded and the direct importer's EXR kept; the + check then passes, report and image equal. + +### D4. Index layout: S0's merged index, the consumer deciding what is in + +- **Single stage** (fewer than 4 subtrees, or `CRUST_STREAM_IMPORT=0`): one + `StageSceneIndex` over a `LoadAll` stage opened with Crust's `stage_builder()`, which + keeps the schema registry and the `mmap` resolver. The chain is built over it (D6). +- **Streamed**: `chain::merged` (light linking, M1) over a `MergingSceneIndex` whose + inputs are each a `chain::input`: + - the **scene input**, weakest and permanent: a chain over the `LoadNone` index stage + with `set_include_unloaded_prims(true)`. It replaces `read_index`'s direct reads of + settings, products, passes and cameras outside payloads. + - one **chunk input** at a time: a chain over a `LoadAll` stage masked to the chunk + (and the active pass prim, as today), added with `add_input_scene(chunk, root)`, + walked, then removed with `remove_input_scene`, and its stage dropped. That is S0's + strategy (B) and its memory bound. + - a **side input** when a chunk binds a material that neither the chunk nor the scene + input holds. `moho::streaming::unresolved(index)` lists those paths (the bound + materials and the network nodes outside a material that no input holds, M2). The + side input is a `chain::input` over a stage masked to them, payloads loaded, + inserted weaker than the chunks and stronger than the scene input, as Moho's + streaming pattern specifies. It is grown and reopened under the same rules as + today's `OutsideMaterials`, until a round resolves nothing new (a path no stage + holds, a dangling binding, stays listed and, once masked in, opens nothing more), + and removed after the last chunk. Because `unresolved` answers for the whole merged + index, the rounds run per chunk, right after it is added and before it is walked, + with at most `MAX_SIDE_STAGE_OPENS` per chunk rather than per material; the stage + is kept across chunks, so a chunk binding nothing new opens none. Moho lists what is + missing; Crust decides what is loaded. The material readers read at the top of the + chain, where `MaterialNodeResolvingSceneIndex` (M10) fills a network's node outside + the chunk from whichever input holds it. What is read off a material's stage + rather than the index (D7) is read off the stage of the input that holds it: the + chunk's, the side stage, or the scene input's. +- Crust keeps opening every stage itself and hands it to `set_stage`. Moho never loads + or unloads. + +*Alternative:* one chain per chunk, walked without a merging index. Rejected. S0 decided +on the merged index, the scene input already holds what `read_index` reads, and a +material in the scene input must be reachable from a chunk's prims by path. + +### D5. The traversal: Crust walks, in the direct importer's order + +The index route has its own walk, from the absolute root, over the index's `children`, +with the direct importer's stack discipline (push in order, pop last-first). Geometry ids, +light-link runs, pass flags and provenance depend on visit order, and bitwise image +parity depends on geometry order. While streaming, a chunk is walked from the root down +to and through that chunk's root only. Below the chunk root the merged children come +from the chunk input in stage order (the scene input's children there are a subset). +Outside the chunk, only the ancestors are visited, as the masked stage gives today. +`MergingSceneIndex::children` returns the inputs' children strongest first, then the +prims implied by deeper roots (Moho specifies that order, M7). It is not the stage's +namespace order above a chunk root, so the walk never relies on it there. + +- World transforms come from the flattened `xform`. Pruning applies today's rule from + the index: abstract and inactive prims are absent from it, and each prim's own + `purpose` and `visibility` (generic attribute data, not the flattened values: Hydra + lets a child's authored purpose override an ancestor's `proxy`, where Crust prunes + the subtree) prune `proxy`/`guide` and invisible subtrees, the latter still walked + for cameras. Shutter samples come from `sample_times` over the shutter offsets. +- Dispatch is by Hydra prim type (`mesh`, `sphere`, `basisCurves`, `instancer`, the + light types, `camera`, ...). A prim with `crust:volume:type` in its generic data + dispatches as a volume first, as today. A geometry prim that no branch reads is + counted for `geom.unsupported_type` from its type, as today. + +### D6. Migration by family, with a transitional bridge + +The bridge is a device of this change only: it exists so that the index walk replaces +the direct traversal at once while the tests stay green, and it goes with the direct +readers it calls (D3). The index route starts with every family on a **bridge**: for a prim at a stage path, +the bridge asks the input that holds it (the current chunk, the side input or the scene +input) for its `StageSceneIndex::stage()` and hands the existing reader the `usd::Prim` +at that path, at the same time code. Parity with the baselines therefore holds from the +first commit of the index walk. Each family then moves on its own to an **index reader**: a function of (scene +index, path) that reads schemas and generic data and calls the same builders the direct +reader calls. The move is accepted when `import-parity` is green against the unchanged baselines. + +What an index reader reads: the Hydra schema where it carries exactly what the direct +reader read (prim types, transforms, topology, bindings, membership), and Moho's generic +attribute data where the direct reader depends on whether a value is authored, on +metadata, or on a renderer attribute (`crust:*`). The generic data is read with the +direct readers' rule — a value counts when a layer authors it (`index/data.rs`) — and +decoded by their own decoders, so the two readers cannot disagree. A flattened schema +that resolves opinions Crust resolves itself with warnings (UsdRender's products over +the settings) is not used in their place. + +The bridge cannot reach a prim that exists only in Moho's namespace (re-rooted +prototypes). So until instancing moves, the index route builds each input's chain +without the two instancing filters, in `chain::input`'s order, with light linking over +the result as `chain::standard` (one stage, the stage as membership oracle) or +`chain::merged` (a merging index) puts it: +``` +StageSceneIndex -> Flattening -> MaterialBindingResolving -> RenderSettingsFlattening (per input) + -> LightLinking (over the input, or the merge) +``` +An instance or `PointInstancer` prim goes through the bridge to today's +`emit_native_instance` and `emit_point_instancer`, and that holds the prototype epoch +scoping. Instancing moves last. With it the chains become `moho::chain::standard` (one stage) or +`chain::input` per input under `chain::merged` (streamed), and +prototypes are keyed by Moho's stable prototype paths. Those paths need no epoch, +because they agree across chunks by construction. After that move the bridge has no +callers, and it is deleted with the direct readers and the epoch (D3). + +Family order follows the data each one needs: +1. settings, products, precomp, passes, camera (the camera needs the aspect); +2. transforms and motion; +3. meshes (primvars, subdivision, adaptive level, displacement bound); +4. implicit shapes and spheres; +5. curves; +6. materials; +7. lights and light links; +8. volumes; +9. instancing. + +*Alternative:* write the whole index importer, then compare. Rejected. 23k lines with +no intermediate parity would make a difference undiagnosable, and Mantle's design asks +for one module at a time. + +### D7. What is not imaging data is read from the stage + +Some facts are not scene description: the layers a scene composed (`Scene::layers`, +`Source::layer_stack`), session/root-layer `invisible` overrides, a material's +composition arcs (`prim_stack`) for provenance, and a `.mtlx` reference read off layer +specs. The index route reads these from `StageSceneIndex::stage()`, behind one module +(`index/stage_facts.rs`), each with a comment naming why it is not a schema read. Two +are pending other work (the `.mtlx` arc moves to `mtlx-format-plugin`; `prim_stack` +provenance goes with S3's classifier). The rest (layers, layer-spec overrides) are a +host's business, not a scene index's. This is the documented escape hatch, not a silent +workaround. + +Whether the time range or `metersPerUnit` is authored is not among them any more. Moho +gives it on the absolute root as `__usdStageMetadata//{value, authored}` (M3), so +the index route reads it there, not from `stage_facts`. A prototype prim's USD source is +not either: every prim carries `primOrigin/scenePath` (M4). + +### D8. In-place rebuilds move with their family + +`usd_import/live.rs` rebuilds a material, a light, or the settings and camera on a +masked stage through the import's functions. When a family moves, its rebuild builds a +`StageSceneIndex` over that masked stage and calls the same index reader as the import. +This keeps the pair "an in-place update equals a full re-import" true, with +`crust-core/tests/live.rs` checking it at every step. The classifier and `Provenance` are S3's to +replace. They keep their inputs, which D7 reads from the stage where Moho has no +counterpart. + +### D9. Light links: Crust keeps deciding after the last chunk + +Moho runs light linking after the merge (`chain::merged`, M1), so a receiver in chunk B +gets the categories of a light in chunk A or in the scene input. But a receiver's +categories are only complete while every light's input is present, and an offline import +removes each chunk before the next is added: a receiver walked in chunk B cannot see a +light that only chunk D, not yet added, holds. The direct importer already defers link +decisions to after the last chunk, judging recorded paths. The index route keeps that +structure. It reads each light's `collections/lightLink` and `collections/shadowLink` +(Moho's complete membership expressions), judges every recorded receiver path after the +last chunk, and does not read `categories`. An agreement test asserts that Moho's +`categories` match Crust's answers, on a single stage (`chain::standard`) and on a +streamed fixture (`chain::merged` with every input present), so switching Crust to +`categories` is a tested option. Whether to switch is an open question (below). +Today's choice between the index stage and the chunk for a light's link opinions +stays, read per input rather than from the merged data: the scene input's expression +when the scene input holds the light's link opinions exactly as the chunk does (it +composes every subtree, so a nested collection elsewhere resolves), else the chunk's, +with the same warning when a nested collection is not composed. The merged data would +always prefer the chunk's, which a nested collection outside it changes. The reason a +collection has no membership (`light_link.unreadable_collection`) is openusd's error, +read in `stage_facts` for that diagnostic only (D7), as `xform.uncomposable` is. + +### D10. Time: the index owns it + +Every `StageSceneIndex` the import builds is set to the import's time; with none, the +index's time is left unset, Moho's default time, which reads authored defaults as today. The index route +reads sampled data at offset 0, and at the shutter offsets for motion. `EvalTimeScope` +stays only for bridged readers, and it is deleted with them (D3); the `CLAUDE.md` rule +that the import reads its time from a thread-local goes with it. `LiveSession::set_time` (`live-session-time`) keeps its behaviour: a time +change is a full import. + +### D11. What parity compares + +See `specs/import-parity`. Every comparison is with the baselines recorded from the +direct importer (D3). In short: +- a structural `Scene` digest, test-only in crust-core, over geometry in id order, + materials by resolved parameters, the light list, camera, settings, AOV request, + warnings in order, provenance, layers and `Source`, as stable text so a difference is + named, not just detected; +- the `crust check --json` report minus timings; +- the 16 spp image, by a hash of its pixels in the tests and bitwise with `crust diff` + in `scripts/import_parity.sh`; +- for ALab and Moana, `--stats` peak memory and import time, the minimum of `-n` runs, + against the baseline's, reported and not gated. + +A difference that is correct (for example a Hydra semantic Crust should adopt) is not +let through. It is recorded under Open Questions and left for its own behavioural +change. + +The image run (`scripts/parity_images.sh`) lists the tests it expects to fail in +`scripts/parity_images.expected`, each with its reason: the second import and its render +are visible to them (asset requests, log lines, timings). A listing excuses a test's +failure, never an import difference: every `parity:` diagnostic in the run fails it, +whichever test or `crust` process raised it, and so does a build error or a test target +that reports no result (both found in review of PR #415, which showed a listed test could +hide a baseline mismatch and a failed build could pass). `every_sample_imports_as_its_baseline` +is no longer listed: in the image run it still runs each sample's check, whose `crust` +process compares the digest and the image, and only skips the report comparison, which the +second import's doubled texture counts would fail. The one exception is a stage, not a +test: `stage:cornellbox_guided.usda` excuses that stage's *image* differences. Its image +differs from the baseline in about 1 run in 6, always with the same other hash, on the +direct importer as on the index import; its digest always matches and is still compared. +Guided rendering is nondeterministic there; that is not an import difference, and its +cause is a crust-render follow-up to investigate separately, outside this change. + +### Moho-side follow-ups (closed in Moho's `scene-index-gaps`) + +Planning this change found seven gaps in Moho. Moho's change `scene-index-gaps` closed +all of them, with tests, and merged into Moho's `main` at `fc391a5`, the rev Crust pins +(Context, "Moho's rev"). + +- **M1. Cross-input light linking.** *Closed:* `moho::chain::input(stage)` is the + standard chain without light linking, `moho::chain::merged(merging)` is light linking + after the merge, judging the lights' complete membership expressions, and + `chain::standard` is `input` plus linking. Streamed imports are built as + `chain::input` per input under a `MergingSceneIndex`, with `chain::merged` on top. + Crust still judges expressions after the last chunk (D9). +- **M2. Prims outside the loaded chunks.** *Closed:* `moho::streaming::unresolved(index)` + lists the bound materials, and the network nodes outside a material, that no input + holds. D4's side input is built from it. +- **M3. Authored-ness in the scene globals.** *Closed:* the absolute root carries + `__usdStageMetadata//{value, authored}` for `startTimeCode`, `endTimeCode`, + `timeCodesPerSecond`, `framesPerSecond`, `metersPerUnit`, `upAxis` and + `renderSettingsPrimPath`. The time range's and `metersPerUnit`'s authored-ness leave + `stage_facts` (D7). +- **M4. Source paths for prototype prims.** *Closed:* every prim carries Hydra's + `primOrigin/scenePath`, the USD path, made relative to the prototype root inside a + USD prototype; the instancing filters keep it. A prototype prim's stage path is the + instance's prototype joined with it, so warnings and provenance inside prototypes name + the same prims as the direct importer, and `import-parity` has no exception for them. +- **M5. An index strategy in `moho-spike`.** *Closed:* strategy (D) does (B) through + Moho; `scripts/streaming-spike.sh --with-d` runs it. Its Moana peak is recorded beside + (B)'s with the parity runs. +- **M6. Pass collections.** *Closed:* a render pass's `collections` hold + `renderVisibility`, and `prune`, `matte` and `cameraVisibility` when applied. The + `prune`/`renderVisibility` warning reads them there. +- **M7. Merged children order.** *Closed (documented):* inputs strongest first, each + input's children in its own order, then the prims implied by deeper roots. D5 still + does not rely on it above a chunk root. + +### Moho-side gaps found while migrating (open) + +Moving the families onto the index found more gaps. Each blocks the readers that +need it; none is worked around in Crust. + +- **M8. The USD prim type and applied API schemas.** Hydra's `__usdPrimInfo` + (`UsdImagingUsdPrimInfoSchema`) carries `typeName` and `apiSchemas` (with `specifier` + and `kind`); Moho's carries only the native-instancing entries. Crust needs the USD + type where a Hydra type does not tell it: the `geom.unsupported_type` warning counts + unread Gprims by USD type (an `IsA Gprim` test on it), `xform.unknown_type` warns on a + type the schema registry does not know, `DomeLight` and `DomeLight_1` share the Hydra + type `domeLight` but read different attributes, and a bad `--pass` error names the + USD type. A light's `ShapingAPI` changes its cone fallback, which needs the applied + API schemas. Until then those readers stay on the bridge (the `--pass` error reads + the stage in `stage_facts`). +- **Shutter offsets are `f32` (decided, a listed parity exception).** Moho's + `xform/matrix` is a sampled data source read at an `f32` offset from the index's time, + as Hydra's `HdSampledDataSource` is. Crust reads a transform at the shutter's ends that + way, so an offset `f32` cannot hold reads a time up to about 1e-9 frames off the + direct importer's `f64` one, and the matrix may differ in its last bits. The user kept + Hydra's model; `import-parity` lists the difference beside the prototype numbers, with + a fixture. `xform.uncomposable` quotes openusd's error, read in `stage_facts` for that + diagnostic only (D7): the index's xform schema carries no error. +- **M9. Time variance at the default time.** A sampled data source answers + `sample_times` only when the index has a time, so at the default time (a render + without `-f`) a consumer cannot ask whether a transform might vary. Crust warns about + time-sampled transforms over a shutter with no frame (`time.motion_needs_frame`, + `camera.shutter_instantaneous`), which needs it. The transform family (5.1, 5.2) + waits on it. (Crust also composes transforms in `f32` from `f64` locals; reading + Moho's local `xform/matrix` rather than the flattened world matrix keeps those bits, + so that part needs nothing from Moho.) +- **M10. A network node outside a chunk's mask.** On a stage masked to a chunk, Moho's + `material` network drops an input whose upstream shader is off the stage: neither the + node nor the connection is there, so `streaming::unresolved` cannot list the node and + the side input (D4) never brings it in. A streamed material wired to a shared node + outside its chunk then loses that input (`usd_scene.rs`, + `a_streamed_material_reads_a_shared_node_outside_its_subtree`), where the direct + reader composes the node. Moho will keep such a connection, naming the node by its + absolute path, and fill the node after the merge from the prim at that path, as light + linking runs after the merge. The material networks (9.2) wait on it, kept off the + branch until then. +- **M12. A point-instancer prototype inside a native instance (closed at Moho + `d09cc94`).** Moana's coral (`elements/isCoral`) scatters prims inside the native + instance `Prototypes/xgStaghorn`: each target is an instance proxy, which the scene + index does not hold, so Moho's point instancing copied it as an empty, untyped prim + and the import placed nothing (geometries 2,912,341 to 13,638 on that element, with + 174 `instancing.empty_prototype`). Moho now copies such a target from the instance's + propagated prototype, at `/ForInstancer/prototype`; Crust takes + copies from `instancerTopology/prototypes` and names them by their targets. A copy's + binding names a material beside the target, in the instance's propagated prototype + and outside the copy: Crust reads it there and names it under the instance, the + target's nearest ancestor the instancing chain holds as an instance (for an + instancer inside a prototype, that instance as the chain holds it, named under the + USD prototype). `instanced_instancers.rs` covers the three cases, each recorded from + the direct importer: `a_point_instancer_targeting_prims_inside_an_instance_places_them` + (expected to fail until that rev), and the material cases + `a_point_instancer_target_inside_an_instance_keeps_its_material` and + `an_instanced_point_instancer_target_inside_an_instance_keeps_its_material`. All + three match their digests and images. + +## Risks / Trade-offs + +- **[Visit order differs, so geometry ids differ, so the image differs]** → D5 walks + per chunk with the direct importer's stack discipline. The digest compares geometry in id + order, so a reorder is caught at the first family that emits geometry, not at the end. +- **[Prototype namespace mismatch]** (Moho re-roots prototypes by content and binding; + Crust keys `/__Prototype_N` by epoch) → instancing moves last, on the standard chain. + Moho groups instances by binding, while Crust's `MeshKey` deduplicates by geometry + and material. These are different keys, so the bake-versus-instance decision is + re-checked by the digest, including placement counts per subtree (adaptive + subdivision). +- **[Hydra preprocessing hides what Crust warns about]** (a `PointInstancer`'s + out-of-range `protoIndices`, `inactiveIds` already removed from `instancerTopology`; + unauthored-ness) → the index reader reads the raw arrays from `__usdAttributes` where a + warning depends on them, as the generic data exists for. +- **[Inherited constant primvars]** Moho's flattened `primvars` include ancestors' + constant primvars, which Crust does not read today → the index reader reads a prim's + own constant primvars from its generic data, preserving today's behaviour. Whether to + adopt USD's inheritance is an Open Question. +- **[Import time overhead]** (layers of `Rc` data sources, string-keyed containers) → + the ALab and Moana runs measure it, reported, not gated (`import-parity`). Hot arrays (points, indices, + primvars) are read once as shared `sdf::Value` arrays, never element by element + through data sources. +- **[Memory]** (the scene input keeps a `LoadNone` stage alive for the whole traversal, + as the direct importer already keeps its index stage until light links) → it is dropped + at the same point, and Moana's peak is reported beside the direct importer's and the spike's (B) and (D). Each chunk input is removed and its + stage dropped before the next opens. +- **[openusd bump friction]** (three repos pinned to one rev) → D1's checks fail loudly. + The bump order is written in `CLAUDE.md`. +- **[Pending changes touch the same code]** (`payload-and-purpose-view` adds + `includedPurposes`, binding purposes and load-set flags; `mtlx-format-plugin` moves + the `.mtlx` arc into composition) → if one lands before this change ends, its + behaviour lands in the direct readers and the index readers alike, and its baselines + are recorded as its own behavioural change, not folded into a migration step. +- **[Thread confinement]** (Moho data sources are `!Send`) → the import is already + single-threaded. `commit_slots` takes arrays, never data sources. Values crossing to + rayon are `sdf::Value`/`Vec`, which are `Send`. + +## Migration Plan + +1. Dependencies (D1, D2) land alone. No behaviour change. CI is green with one openusd. +2. The digest and the parity harness land, and the baselines are recorded from the + direct importer: samples, fixtures, ALab and Moana. +3. The index skeleton replaces the direct traversal, with every family bridged. Parity + with the baselines holds from here on. +4. One task group per family, each merged only with parity green on the samples and + fixtures. ALab is run at the materials milestone, ALab and Moana at instancing and at + the end. +5. The direct readers, the bridge, `EvalTimeScope` and the epoch are deleted. hdCrust's + scripts, `crust diagnostic`, the MCP tests and `check_images.sh` run against the + direct importer's recordings. The design record and docs are updated. +6. Rollback is a revert: before step 5, of the family step that broke parity; after it, + of the change. There is no switch to fall back on. + +## Open Questions + +- **Primvar inheritance.** USD (and Hydra's flattening) makes an ancestor's constant + primvar visible to descendants, and Crust reads a prim's own only. Adopting + inheritance is a behavioural change to `usd-scene-import`, proposed separately after + this change. It does not change this plan: parity keeps today's behaviour. +- **Light links on `categories`.** M1 has landed. Does Crust read Moho's categories + instead of judging expressions itself after the last chunk (D9)? An offline import + removes chunks as it goes, so categories read during the walk would miss lights in + chunks not yet added; reading them would need a second pass or lights collected + ahead. Left to the user; the agreement test (single stage and streamed) is there to + switch on. diff --git a/openspec/changes/moho-import/proposal.md b/openspec/changes/moho-import/proposal.md new file mode 100644 index 000000000..1e77a9d96 --- /dev/null +++ b/openspec/changes/moho-import/proposal.md @@ -0,0 +1,108 @@ +## Why + +Crust reads USD in one place, `crust-core::scene::usd_import`, and every family module +there reads `openusd` prims directly. Mantle's `scene-index` program (step S2) moves +that reader onto Moho, a Hydra-2.0-style scene index over openusd that Mantle's IPR and +Obsidian also consume. Two readers of the same stage drift apart. With one index, an IPR +frame and `crust render -i` read the scene the same way, and S3's live updates get dirty +locators to work from. Moho's S1 core is done, with schemas for every family Crust +imports, so the importer can now migrate. The move is gated on parity with baselines +recorded from today's importer, so nothing a render produces changes while it happens, +and the direct importer goes at the end of it. + +## What Changes + +- **One openusd across the stack.** The workspace's `[patch.crates-io]` pins openusd and + openusd-schemas by `rev = "68a867a69f3fb429a30f9e1155a0a30a3d2cdf9f"` instead of + `branch = "main"`. Moho uses the same rev, and Cargo treats a `branch` source and a + `rev` source as different crates, so without this the build would carry two openusd + copies. Moho is added as a git dependency at + `rev = "92c8b847822823f796b81b85452c3c400d77e5ec"`, and `deny.toml` allows its source. +- **Baselines from today's importer, first.** Before anything migrates, the direct + importer records baselines and they are kept for the whole change: a scene digest, the + `crust check --json` report (timings excluded) and a 16 spp image hash for every + committed sample and import test fixture, and for ALab and Moana the report, the EXR + and the memory and time. A regenerate flag rewrites them. This is what UsdImaging did + when it moved onto scene indices: the same baselines, a new route. +- **The importer reads through Moho.** The scene is read through a Moho scene index. For + a small stage that is one standard chain. For a streamed stage it is `chain::merged` + over a `MergingSceneIndex` of a payload-free scene input and one masked chunk input at + a time. The importer pulls Hydra prims, schemas and generic attribute data (`crust:*`) + instead of `usd::Prim`. It produces the same `Scene` as the direct importer did, + through the same builders. There is one route and no switch. +- **Module-by-module migration.** Each schema family (settings and products, camera, + transforms and motion, meshes, implicit shapes, curves, materials, lights and light + links, volumes, instancing) moves to the index on its own, and each move is gated by + parity with the baselines. While a family has not moved, a transitional bridge hands + its existing reader the `usd::Prim` at the same path, so the tests stay green + throughout. The bridge exists only inside this change. +- **The direct importer goes.** Once every family reads the index and parity holds on + the samples, the fixtures, ALab and Moana, the direct readers, the bridge, + `EvalTimeScope` and the prototype epoch are deleted. Every host (`crust render`, + `check`, `diagnostic`, `mcp`, hdCrust) then imports through Moho. +- **A parity check.** `crust-core/tests/import_parity.rs` compares every sample with its + baselines, and the import tests compare every fixture with theirs. + `scripts/import_parity.sh record|check` does the same for large scenes (ALab, Moana), + reporting memory and time without gating on them. Moho's S0 harness (`moho-spike`, + strategies (B) and (D)) is the reference for streaming memory. +- **Moho-side gaps go to Moho.** Crust does not work around them silently. The gaps the + plan found (cross-chunk light linking, materials outside the loaded chunks, + authored-ness of scene globals, source paths for prototype prims, an index strategy in + the spike, pass collections, merged children order) are closed in Moho's change + `scene-index-gaps`. Crust builds against it and bumps the `moho` rev once it merges + (design, "Moho-side follow-ups"). + +Not in this change: S3, where Moho's dirty locators replace the layer-diff classifier +for live edits. In-place rebuilds keep today's classifier. Only the functions they call +move with their family, so an in-place update still equals a re-import. + +## Capabilities + +### New Capabilities + +- `scene-index-import`: Crust reads every stage through the Moho scene index, the one + import route. This covers the hosts that import through it, streaming by chunk under + a merging index within the direct importer's memory bound, the index owning the time, + and the rule that the import reads what the direct importer read. +- `import-parity`: the check that the import through Moho equals baselines recorded + from the direct importer. It defines the baselines and their regeneration, what + "equal" means (the scene, the `crust check` report, a bitwise image), where the check + runs (tests on the samples and fixtures, and a script for ALab and Moana with memory + and time reported), and how each family's move and the direct importer's removal are + gated on it. + +### Modified Capabilities + +None. The import through Moho must reproduce the direct importer's behaviour exactly +(`import-parity`), so `usd-scene-import`'s requirements are unchanged; its design record +is updated. Behaviour changes that Moho's Hydra semantics would bring, such as +inheriting ancestors' constant primvars, are left for later changes (design, Open +Questions). + +## Impact + +- **Dependencies:** root `Cargo.toml` (`[patch.crates-io]` from branch to rev, a `moho` + entry in `[workspace.dependencies]`), `Cargo.lock`, `deny.toml` (`allow-git` gains + `https://github.com/doubleailes/Moho`). `crust-core` depends on `moho`. Bumping openusd + goes in order: Moho, then crust-render, then Mantle. `cargo update -p openusd` no + longer moves the pin. +- **Code:** `crates/crust-core/src/scene/usd_import/`. A new `index/` module with its own + walk replaces `traverse_into`, each family module gains an index reader that feeds the + same builders, and the direct readers, `time.rs` (`EvalTimeScope`) and the prototype + epoch are deleted at the end. `usd_import/live.rs` rebuilds move with their families. + `listing.rs` (`crust ls`) is not an import and stays. +- **Hosts:** `crust render`, `check`, `diagnostic`, `crust mcp` and `crust-hydra` all + import through `load_scene`, so they all read through Moho. hdCrust's `compare.sh`, + `interaction.sh` and `usdc_roundtrip.sh` exercise it. +- **Tests and tooling:** a scene digest behind a test-only feature, `import_parity.rs` + and recorded baselines under `crust-core/tests/data/import_baselines/`, a baseline + helper for the import tests, `scripts/import_parity.sh`, and recorded ALab and Moana + baselines. +- **Docs:** `openspec/specs/usd-scene-import/design.md` (the import through Moho, the + baselines, the closed gaps), `docs/architecture.md` (Moho in the crate map), + `CLAUDE.md` (openusd pinned by rev, the Moho rule, local co-development, the retired + `EvalTimeScope` and epoch rules), and a site architecture page on the import. +- **Performance:** render throughput is untouched, because only the import changes. + Import time and peak memory are measured on ALab and Moana and reported against the + direct importer's baselines, not gated (`import-parity`), as UsdImaging's move onto + scene indices was gated on parity alone. diff --git a/openspec/changes/moho-import/specs/import-parity/spec.md b/openspec/changes/moho-import/specs/import-parity/spec.md new file mode 100644 index 000000000..11c257fcf --- /dev/null +++ b/openspec/changes/moho-import/specs/import-parity/spec.md @@ -0,0 +1,143 @@ +## Purpose + +The check that the import through Moho produces what Crust's direct importer produced: +the baselines recorded from the direct importer before anything migrated, what "equal" +means, where the check runs (tests on the committed samples and import fixtures, and a +script for ALab and Moana with memory and time reported), and how it gates each step of +the migration and the direct importer's removal. As UsdImaging did when it moved onto +scene indices: the same baselines, a new route. + +## ADDED Requirements + +### Requirement: Baselines from the direct importer + +Before any schema family migrates, baselines SHALL be recorded from the direct importer +and kept for the whole migration: +- the scene digest, for every committed sample and every import test fixture; +- the `crust check --json` report, timings excluded, for every committed sample; +- the 16 spp render at `--indirect-clamp 0`, for every committed sample and every import + test fixture, by a hash of its pixels; +- for ALab and Moana, the `crust check` report, the 16 spp EXR, and the `--stats` peak + memory and import time (`Parse USD stage`) as a report. + +The digest SHALL cover the geometry in id order (primitives, transforms, materials, +masks), the light list, the camera, the render settings, the AOV request, the warnings +in order, the provenance, the layers and the scene's `Source`. A regenerate flag +(`CRUST_RECORD_BASELINES=1` for the tests, `record` for the script) SHALL rewrite the +baselines; it is used to record them from the direct importer, and afterwards only for a +behavioural change that is its own decision. + +#### Scenario: Recording + +- **WHEN** `CRUST_RECORD_BASELINES=1 cargo test -p crust-core --test import_parity` + runs at the commit that adds the baselines +- **THEN** every listed sample's digest, report and image hash is written from the + direct importer + +### Requirement: What equal means + +An import SHALL equal its baseline when all of these hold: +- its scene digest matches the baseline's; +- its `crust check --json` report matches, timings excluded; +- its render at `-s 16 --indirect-clamp 0` is bitwise equal. + +No tolerance SHALL apply. A difference SHALL be fixed, or listed here with its reason. +The change makes three behaviour changes (`scene-index-import`): undefined prims are not +imported; a prim inside an instance inherits the instance's ancestors' bindings, through +the propagated prototypes; and a prototype is built once per import, reused across a +streamed import's chunks and across point instancers. A baseline that differs for one of these reasons only SHALL be +re-recorded, each changed baseline checked to be explained by it and its image checked +equal where the reason does not change the render. +The one listed exception SHALL be the number openusd gives a native prototype +(`/__Prototype_`): openusd numbers a stage's prototypes in the order they are first +asked for, the scene index's population walk asks in another order than the direct +importer's walk did, and a streamed import numbers each chunk's stage from 0, so the +number is a composition artifact that cannot be mapped between imports. The check +SHALL write it as `#` and compare the rest of every path, never ignore the path +wholesale. Prim paths inside a prototype SHALL otherwise be equal, named from the +scene index's `primOrigin/scenePath`. +The second listed exception SHALL be a shutter whose offsets `f32` cannot hold exactly +(`-0.1`, `0.3`): the index reads a transform at the shutter's ends as Hydra's sampled +data sources do, at `f32` offsets from the frame, so the ends' matrices may differ from +the direct importer's `f64` reads in their last bits. Such an import SHALL equal a +`.f32-shutter` baseline recorded from the index beside the direct one, and that baseline +SHALL differ from the direct one in geometry lines only; exact offsets SHALL stay +bit-identical. A fixture (`time_motion.rs`, +`an_inexact_shutter_moves_the_card_over_its_offsets`) exercises it. A difference that cannot be fixed in Crust SHALL +be reported (a Moho gap goes to Moho), never accepted silently. + +#### Scenario: An equal scene + +- **WHEN** `samples/cornellbox.usda` is imported through Moho +- **THEN** its digest, report and 16 spp image equal the baseline's + +#### Scenario: A reordered geometry is caught + +- **WHEN** a change makes the import visit two meshes in the other order +- **THEN** the digests differ and the check names the first geometry id that differs + +### Requirement: Parity tests on the samples and import fixtures + +`cargo test` SHALL run the parity check on every committed `samples/*.usd*` scene, +comparing digests and reports with the baselines, and SHALL compare every import an +import test performs (fixtures, CLI tests, live re-imports) with its baseline digest. +`scripts/parity_images.sh` (an optimised run with `CRUST_PARITY_IMAGES=1`) SHALL also +compare each import's 16 spp image hash; an unoptimised build renders too slowly to do +so on every run. The tests that observe the second import it makes (asset requests, +log lines, render time) SHALL be listed with that reason, and no other test SHALL fail +in that mode. A sample that cannot run in CI SHALL be listed with its reason. + +#### Scenario: The test suite + +- **WHEN** `cargo test -p crust-core --test import_parity` runs +- **THEN** every listed sample is imported and compared with its baseline, and any + difference fails the test, naming the sample and what differs + +#### Scenario: Fixtures + +- **WHEN** the existing import tests run +- **THEN** each scene they build is compared with the baseline recorded for it from the + direct importer + +### Requirement: Large-scene parity, with memory and time reported + +`scripts/import_parity.sh check [render flags]` SHALL import and render +the scene with the current build and compare the `crust check` report and the 16 spp +image with the baseline in ``, and SHALL exit non-zero when they differ. It SHALL +report the current and baseline `--stats` peak memory and import time and their ratios, +without gating on them: as UsdImaging did when it moved onto scene indices, parity is +the gate and performance is measured. + +The results for ALab and Moana, and Moho's `moho-spike` strategy (B) and (D) peaks on +the same machine as the streaming reference, SHALL be recorded in the +`usd-scene-import` design record. + +#### Scenario: Moana + +- **WHEN** `scripts/import_parity.sh check ~/Workspace/samples/island/usd/island.usda --camera /island/cam/shotCam` runs +- **THEN** it exits 0 only if the report and image match the baseline, and prints both + peak memories and import times with their ratios + +#### Scenario: Memory and time do not gate + +- **WHEN** the import's peak memory or import time is higher than the baseline's, and + the report and image match +- **THEN** the script prints the ratios and exits 0 + +### Requirement: Parity gates every step + +A schema family SHALL move to the scene index only with the parity tests green. The +direct importer SHALL be removed only when the parity tests are green and +`scripts/import_parity.sh check` passes on ALab and Moana. + +#### Scenario: A family moves + +- **WHEN** the mesh family's index reader replaces its bridged reader +- **THEN** the change is accepted only with `import_parity` passing against the + unchanged baselines + +#### Scenario: The direct importer goes + +- **WHEN** the direct readers, the bridge and `EvalTimeScope` are deleted +- **THEN** the parity tests are green and the ALab and Moana runs for that commit pass + against their baselines diff --git a/openspec/changes/moho-import/specs/scene-index-import/spec.md b/openspec/changes/moho-import/specs/scene-index-import/spec.md new file mode 100644 index 000000000..a3b3be70c --- /dev/null +++ b/openspec/changes/moho-import/specs/scene-index-import/spec.md @@ -0,0 +1,154 @@ +## Purpose + +How Crust reads a USD stage: through the Moho scene index, which every host imports +through. It covers how a large stage streams by chunk, the index owning the time, and +that the import through Moho reads exactly what Crust's direct importer read before it +was removed. + +## ADDED Requirements + +### Requirement: One import route, through Moho + +The importer SHALL read every stage through a Moho scene index of it: Hydra prims, +schemas and Moho's generic attribute data, never `usd::Prim` readers walking the stage. +There SHALL be one route. The direct importer, which read openusd prims, SHALL be +removed, with no switch to select it. Facts that are not imaging data (the layers a +scene composed, layer-spec overrides, a material's composition arcs for provenance, a +`.mtlx` reference read off layer specs) SHALL be read from the indexed stage in one +module, each with its reason. + +#### Scenario: A render + +- **WHEN** `crust render -i samples/cornellbox.usda -s 16 --indirect-clamp 0` runs +- **THEN** the scene is imported through the Moho scene index, and the EXR is bitwise + equal to the baseline recorded from the direct importer + +#### Scenario: No route to select + +- **WHEN** the importer's options and the `crust::Config` switches are listed +- **THEN** none of them selects an import route + +### Requirement: Every host imports through Moho + +`crust render`, `crust check`, `crust diagnostic`, the `crust mcp` session and the +Hydra delegate (`crust-hydra`) SHALL import through the Moho scene index. An in-place +update in a live session SHALL rebuild through the same index readers as the import it +updates, and SHALL remain equal to a full re-import. + +#### Scenario: check reports the scene read through Moho + +- **WHEN** `crust check -i samples/cornellbox.usda --json -` runs +- **THEN** its report, timings aside, equals the baseline recorded from the direct + importer + +#### Scenario: An in-place edit + +- **WHEN** an MCP session changes a material's input, and the edit is applied in place +- **THEN** the rendered image is bitwise equal to a full re-import of the edited layer + +### Requirement: The import reads what the direct importer read + +For every prim the direct importer imported, the import through Moho SHALL import the +same thing, as recorded in the baselines (`import-parity`): +- the same geometry, materials, lights, volumes and cameras; +- the same render settings, products, vars and passes; +- the same warnings, with the same codes, in the same order; +- the same prims pruned (abstract, inactive, `proxy`/`guide` purpose, invisible), with + invisible subtrees still searched for cameras. + +Three exceptions SHALL apply, each as USD and UsdImaging have it: +- undefined prims: an `over` that no layer defines SHALL NOT be imported, where the + direct importer read it by its type; +- bindings in instances: a prim inside a native instance SHALL take the material its + instance's ancestors bind when it binds none itself, through Moho's propagated + prototypes, where the direct importer resolved bindings inside `/__Prototype_N` only; +- prototypes built once: a prototype's parts SHALL be keyed by its propagated path and + reused in every chunk of a streamed import and by every point instancer whose + prototypes reference it, where the direct importer rebuilt them per chunk and per + instancer. + +Renderer attributes (`crust:*`) SHALL be read from the scene index's generic attribute +data, with the same authored-versus-fallback rule as the direct importer. + +#### Scenario: A renderer attribute + +- **WHEN** a mesh authors `crust:rayMask` and `crust:subdivisionLevel` +- **THEN** both apply to the mesh exactly as the direct importer applied them + +#### Scenario: Pruning and cameras + +- **WHEN** a stage holds an invisible rig scope containing a camera and a light, and a + `GEO_PROXY` scope with `purpose = "proxy"` +- **THEN** the light and the proxies are not imported, and `--camera` can still name + the rig's camera, as with the direct importer + +#### Scenario: An undefined prim + +- **WHEN** a layer authors `over Camera "renderCam"` and no layer defines that prim +- **THEN** the import does not hold it: it is no camera the render can go through + +#### Scenario: A prototype in two chunks + +- **WHEN** a streamed import places one prototype from two chunks +- **THEN** its parts are built once and placed twice, and the image is the direct + importer's + +#### Scenario: Two instancers of one instanced asset + +- **WHEN** two point instancers' prototypes are instanceable references to one asset + that binds its own material +- **THEN** the asset's mesh and material are built once and shared by both instancers, + and the image is the direct importer's + +#### Scenario: Warnings + +- **WHEN** a stage's baseline records warnings from the direct importer +- **THEN** the import raises the same warning codes, at the same prims, in the same + order + +### Requirement: The import streams within the direct importer's memory bound + +When a stage has at least 4 top-level subtrees, and `CRUST_STREAM_IMPORT` is not `0`, +the import SHALL stream, as the direct importer did. It SHALL hold at most +one chunk's payloads composed at a time, beside the payload-free scene and any materials +bound from outside the chunk. Each chunk's stage SHALL be dropped before the next is +opened. A material bound from outside a chunk SHALL resolve as it did with the direct +importer. + +#### Scenario: Moana + +- **WHEN** the Moana island is imported +- **THEN** at most one chunk's stage is open at any time, and each is dropped before the + next is opened + +#### Scenario: A material in a sibling chunk + +- **WHEN** a streamed stage binds geometry in `/World/Box` to a material under + `/World/Looks` +- **THEN** the import resolves that material, as the direct importer did, instead of + falling back to the default material + +#### Scenario: Streaming off + +- **WHEN** `CRUST_STREAM_IMPORT=0` is set +- **THEN** the import reads one fully loaded stage, and its result equals the streamed + import's + +### Requirement: The index owns the time + +The import SHALL resolve every value at the import's time code (`-f`), and at the +shutter offsets around it for motion, through the scene index's time, with no +thread-local time. With no time code, it SHALL read default values, as the direct +importer did. + +#### Scenario: A frame + +- **WHEN** `crust render -i samples/animation.usda -f 12 -s 16` runs +- **THEN** the EXR is bitwise equal to the baseline recorded from the direct importer + +#### Scenario: Motion over the shutter + +- **WHEN** `samples/motionblur.usda` is rendered at 16 spp +- **THEN** the EXR is bitwise equal to its baseline, the moving geometry is sampled at + the same shutter times, and the same "time-sampled motion not produced" warnings are + raised diff --git a/openspec/changes/moho-import/tasks.md b/openspec/changes/moho-import/tasks.md new file mode 100644 index 000000000..297bda98c --- /dev/null +++ b/openspec/changes/moho-import/tasks.md @@ -0,0 +1,375 @@ +# Tasks + +Every task ends green on `cargo fmt --all -- --check`, +`cargo clippy --workspace --all-targets -- -D warnings` and +`cargo test --workspace --no-fail-fast`. "Parity green" means +`cargo test -p crust-core --test import_parity` passes, comparing today's import with the +baselines recorded from the direct importer before anything migrated (group 2). + +## 1. One openusd, and Moho as a dependency (design D1, D2) + +- [x] 1.1 Switch `[patch.crates-io]` in the root `Cargo.toml` from `branch = "main"` to + `rev = "68a867a69f3fb429a30f9e1155a0a30a3d2cdf9f"` for `openusd` and + `openusd-schemas`, and rewrite the comment above it: pinned by rev to Moho's, bumped in + order Moho, then crust-render, then Mantle, and no longer moved by `cargo update -p`. + Regenerate `Cargo.lock`. Verify that `Cargo.lock`'s three openusd entries read + `?rev=68a867a…#68a867a…`, that `cargo tree -i openusd` shows one package, and that + `cargo deny --locked check` is clean. +- [x] 1.2 Add `moho = { git = "https://github.com/doubleailes/Moho", rev = "92c8b847822823f796b81b85452c3c400d77e5ec" }` + to `[workspace.dependencies]` and `moho.workspace = true` to crust-core. Add + `https://github.com/doubleailes/Moho` to `allow-git` in `deny.toml`, and update the + comment there. Verify: + - `cargo tree -i openusd` and `cargo tree -i openusd-schemas` each show a single + package, with `moho` among its dependents; + - `cargo tree -d -e no-build` lists no openusd crate (openusd is also openusd-schemas' + build-time code generator, so a plain `cargo tree -d` lists the one package twice, + host and target, as it did before this change); + - `cargo deny --locked check` is clean. +- [x] 1.3 Add a compile-time guard test in crust-core (`tests/one_openusd.rs`) that + passes a `moho::openusd::usd::Stage` where an `openusd::usd::Stage` is expected, and a + `moho::openusd_schemas` type where the workspace's `openusd_schemas` type is expected. + Verify that it compiles and passes. Then check, once, that it fails to compile with + the patch temporarily set back to `branch = "main"`, and record that in the test's doc + comment. +- [x] 1.4 Update `CLAUDE.md`'s openusd paragraph: pinned by rev, the Moho entry pinned + by rev, one openusd across Moho, crust-render and Mantle, and the bump order. Document + local co-development with Moho through a Cargo config file passed with `--config` + (`[patch."https://github.com/doubleailes/Moho"] moho = { path = "../Moho/crates/moho" }`). + `.cargo/config.toml` is tracked in this repository, so the patch does not go there, and + a path patch rewrites `Cargo.lock`'s `moho` entry, which is restored before a commit. + Verify with `grep` that `CLAUDE.md` names both revs' rule and the bump order. +- [x] 1.5 Build against Moho's `scene-index-gaps` (M1 to M7 closed), and bump the `moho` + rev in `[workspace.dependencies]` to its merge on Moho's `main` (`fc391a5`), dropping + the local patch. Verify that `cargo tree -i moho` names the merged rev, that + `cargo tree -i openusd` still shows one package, and that the workspace builds and + passes its tests without the patch. + +## 2. Baselines from today's importer (design D3, D11, spec `import-parity`) + +Recorded before anything migrates, from the direct importer as it is at the start of +this group, and kept for the whole change. + +- [x] 2.1 Add a test-only scene digest in crust-core (`src/parity.rs`, behind a `parity` + feature that only tests enable, through dev-dependencies). It records, as stable text + with the stage's directory, the workspace and the temporary directory normalised: + - geometry in id order (every piece a ray of each category sees, hashed bit for bit, + instances through their transforms; the material by sharing order and `Signature`; + light class, holdout and transparent-emitter flags; side tables; scale; motion); + - the light list (kind, name, LPE tag, pmf, shadow mask, link flags, lobe gains) and + the volumes; + - camera, settings, the AOV request and the pass; + - warnings in order, and the provenance (maps sorted); + - the scene's layers and `Source`. + + A material's parameters and a light's radiance are not in it (neither describes + itself); the 16 spp image covers them. Comparing two digests names the first + differing line. Verify with a unit test where two scenes that differ in one + geometry's order report that geometry id. +- [x] 2.2 Check every import against a baseline. With the `parity` feature, every + successful `load_scene` compares the scene's digest with the baseline under + `crust-core/tests/data/import_baselines/`, keyed by the layers it composed (paths and + text, normalised), the options, the environment switches and the importing test (its + thread's name, or a `crust` process's command line), and panics naming the stage and + the first difference. `CRUST_RECORD_BASELINES=1` records instead; + `CRUST_PARITY_IMAGES=1` also re-imports the stage and compares a hash of its 16 spp + image (indirect clamp off), meant for `cargo test --release`, since an unoptimised + build renders every import of the suite too slowly. Turn the feature on for + crust-core's, crust-render's and crust-hydra's tests, so every import test fixture, + the CLI tests and the live re-imports are all checked without converting call sites, + and record the baselines from the direct importer. Verify that the whole workspace's + tests pass against them, and that a deliberate change to one import fails the test + that imported it, naming the first difference. +- [x] 2.3 Add `crust-render/tests/import_parity.rs`: for each committed `samples/*.usd*`, + `crust check --json` with the import's phases removed, compared with a baseline under + `import_baselines/check/` (the same `CRUST_RECORD_BASELINES=1` records it), its + digest checked by the `crust` process itself. The samples that need files outside the + repository (`materialx_lion`, `materialx_teapot`, `materialx_showcase`) are listed and + skipped where those files are missing; they take four to ten minutes each + unoptimised, so a debug run compares them only with `CRUST_PARITY_EXTERNAL=1`, and a + release run always does. The samples run side by side. Record the reports, and the image hashes of + every import of the suite with `scripts/parity_images.sh record` (a release run with + `CRUST_PARITY_IMAGES=1`), from the direct importer. The second import and its render + are visible to the few tests that count asset requests or log lines, time a render or + render a panicking material; they fail in that mode and are listed in + `scripts/parity_images.expected`, and the script passes when no import differs and + no other test fails. Verify that the test lists every sample, and that + `scripts/parity_images.sh` passes. +- [x] 2.4 Add `scripts/import_parity.sh record|check [render flags]`. + `record` renders the scene `-n` times at `-s 16 --indirect-clamp 0` with `--stats` and + keeps the `crust check --json` report (timings removed), the EXR, and the peak memory + and `Parse USD stage` time (the minimum over the runs) in ``. `check` does the + same with the current build and compares: it exits non-zero on any report or image + difference (`crust diff`), and prints both builds' memory and time with their ratios, + without gating on them. Verify on `samples/cornellbox.usda` (record, then check exits + 0), and that a deliberately different render makes `check` exit non-zero. +- [x] 2.5 Record the large-scene baselines from the direct importer with + `scripts/import_parity.sh record`: ALab (`samples/ALab/entry.usda -f 1004`) and Moana + (`--camera /island/cam/shotCam`), plus Moho's `scripts/streaming-spike.sh --with-d` + strategies (B) and (D) on Moana, on one machine. Also record `scripts/check_images.sh + record` goldens and a `crust diagnostic --budget 2m` report on + `samples/cornellbox.usda` (for group 14). Write the memory and time report in + `openspec/specs/usd-scene-import/design.md` under a new "Index import" section, and + keep the baseline directory for groups 9, 12 and 14. Verify that the section names + the machine, the revs and the commands. + +## 3. The index skeleton and the bridge (design D4, D5, D6, D7, D10) + +- [x] 3.1 Create `usd_import/index/` (`mod.rs`, `walk.rs`, `bridge.rs`, + `stage_facts.rs`), importing openusd through `moho::openusd` and + `moho::openusd_schemas` (D2). Build the bridge chain (D6): per input + `StageSceneIndex` → `Flattening` → `MaterialBindingResolving` → + `RenderSettingsFlattening`, with no instancing filters, and light linking over it. + Every stage is opened with Crust's `stage_builder()` and set to the import's time + (none leaves the index's time unset, which is Moho's default time). Verify with a unit test that a chain over + `samples/cornellbox.usda` lists its prims with their Hydra types. +- [x] 3.2 Single stage: `load_scene` wraps the `LoadAll` stage in one chain and walks + it from the absolute root with the direct traversal's stack discipline, in place of + `traverse_into`. Pruning reads the index: abstract and inactive prims are absent from + it, and each prim's own `purpose` and `visibility` come from the generic attribute + data, pruning the subtree where they are authored (Hydra's flattened purpose lets a + child's authored purpose override an ancestor's `proxy`, which would change what + renders), keeping the camera search in invisible subtrees. Every prim goes to the existing readers through + the bridge (`StageSceneIndex::stage()` and the same path, under `EvalTimeScope`). + Verify parity green on every single-stage sample and fixture. +- [x] 3.3 Streaming: build `chain::merged` over a `MergingSceneIndex` with the scene + input (`LoadNone`, `set_include_unloaded_prims(true)`) and one chunk input at a time + (masked to the chunk and the active pass prim). Add the input, walk from the root + through that chunk's root only, remove it, drop its stage, and advance the epoch as + today. The bridge resolves each path to the stage of the input that holds it. Verify: + - parity green on every streamed sample and on a fixture with 5 top-level subtrees; + - with `CRUST_STREAM_IMPORT=0`, a test that the streamed and single-stage imports are + equal. +- [x] 3.4 Move the non-imaging stage facts (D7) behind `index/stage_facts.rs`: layers + and layer stack, and invisible overrides, each with a comment naming the reason it is + not imaging data. Read the time range's authored-ness (`check_time_range`) from the + root's `__usdStageMetadata/{startTimeCode,endTimeCode}/authored` (M3), not from the + stage. Verify parity green (`Scene::layers` and `Source` are in the digest), and that + the time-range warnings match the baselines on a stage with and one without an + authored range. +- [x] 3.5 Make `crust check`, `crust diagnostic` and the session's import go through + `load_scene`'s index walk. Verify with a crust-render test that `check --json` on + `samples/cornellbox.usda` equals its baseline, timings aside. + +## 4. Settings, products, precomp, passes and camera + +- [x] 4.1 Index reader for render settings: `renderSettings` from the scene input + (camera, resolution, pixel aspect, conform policy, data window, motion and depth of + field toggles, `renderingColorSpace`), and `crust:*` from `namespacedSettings`. The + active settings come from the scene globals and the host's pass. Replaces + `read_index`'s settings reads. Verify parity green, plus a test on `samples/aovs.usda` + and the settings fixtures. +- [x] 4.2 Index reader for products and vars (`products`, `orderedVars` forwarded + targets, every `UsdRenderSettingsBase` attribute a product overrides, + `driver:parameters:*`, `ri:*`, `crust:aov:*`, `crust:filter*`), read from the generic + data with the direct reader's own resolution of product over settings (UsdRender's + compute-spec rule as Crust implements it, with its warnings), not from the flattened + `renderProducts`, which carries resolved values without the authored-ness those + warnings depend on. The precomp's settings relationships and display-filter inputs + read from the index; the filters' shader ids, kernel assets and sample-filter graphs + are shading networks and move with them (9.2). Verify parity green on `aovs.usda`, + `aovs_lpe.usda`, `primvar_aovs.usda` and `precomp.usda`. +- [x] 4.3 Index reader for the active pass: `renderPass` and its `collections` + (`matte`, `cameraVisibility`, and `prune`/`renderVisibility` for the existing warning + that they are not honoured, M6). Membership is judged per chunk at the instance or + instancer path, as today. Verify parity green on `crust-core/tests/render_passes.rs` + and `holdouts.rs`, including a pass that applies all four collections. +- [x] 4.4 Index reader for cameras: the `camera` schema (projection, apertures and + offsets, clipping, focus, shutter, exposure), `metersPerUnit` and its authored-ness + from the root's `__usdStageMetadata/metersPerUnit/{value, authored}` (M3), and the + dicing camera. Verify parity green on `camera_*.rs`, `aspect_conform.rs` and + `orthographic` fixtures, with `metersPerUnit` authored and not. +- [x] 4.5 Move the settings-and-camera rebuild in `usd_import/live.rs` to the index + readers (D8). Verify that `crust-core/tests/live.rs` passes, with the in-place versus + re-import bitwise checks. + +## 5. Transforms and motion + +- [x] 5.1 Take world matrices from the `xform` (`resetXformStack` honoured), in place of + `compose_with_parent`: the local `xform/matrix` of the input's stage scene index, + composed by Crust as before, so the `f32`-from-`f64` bits stay (design, M9 note; the + flattened matrix would round differently). Take `Timing` and spans from the + `xform/matrix` values at the shutter offsets (`f32`, the listed exception) and the op + attributes' `mightBeTimeVarying` (M9), plus `crust:motion:translate` from generic + data. The walks still on the bridge (placement count, prototypes, a camera's + ancestors, the live rebuilds) keep `compose_with_parent` until their families move. Verify parity green on `motionblur.usda`, `motionvector.usda`, + `animation.usda` at `-f`, and the transform stack fixtures in `usd_scene.rs`. +- [x] 5.2 Move the "time-sampled motion not produced" reporting to the index's sample + times. Verify that the warnings match the baselines in the motion fixtures. + +## 6. Meshes + +- [x] 6.1 Index reader for `mesh`: topology, holes, orientation, subdivision scheme and + tags, `doubleSided`, and points and normals (`primvars:normals` precedence) read once + as whole arrays. It feeds `MeshSource` and the existing bake and instance placement + path. Verify parity green on `cornellbox.usda`, `displacement.usda`, the subdivision + fixtures and `mesh_normals.rs`. +- [x] 6.2 Primvars: the render vars' primvars and materials' primvars with indices, + interpolation, `elementSize` and colour space, de-indexed as the direct reader does. + Constant primvars are read from the prim's own generic data, not the flattened + (inherited) set (design, Risks). Verify parity green on `mesh_primvars.rs`, + `primvar_aovs.usda` and `ptex_quads.usda`. +- [x] 6.3 `crust:subdivisionLevel`, `crust:subdivisionEdgeLength`, + `crust:displacementBound` and `primvars:displacementbound:sphere` from generic data, + and the adaptive level from the camera's projection. Verify parity green on the + adaptive subdivision fixtures and `pxr_displace.usda`. +- [x] 6.4 Move the mesh parts of `usd_import/live.rs` (`mesh_source`, bake helpers) to + the index reader. Verify that `live.rs` and the `live-geometry-edits` tests pass. + +## 7. Implicit shapes and spheres + +- [x] 7.1 Index readers for `sphere`, `cube`, `cone`, `cylinder`, `capsule` and `plane` + (radius, size, height, axis, radiusTop/Bottom, width, length, doubleSided), tessellated + by Crust's existing `implicit` code. Analytic spheres stay analytic. Verify parity + green on `implicit_shapes.usda`, and that `geomutil_oracle` passes unchanged. +- [x] 7.2 Move the sphere rebuild in `live.rs` to the index reader. Verify that + `live.rs` passes. + +## 8. Curves + +- [x] 8.1 Index readers for `basisCurves` and `nurbsCurves` (topology, widths, order, + knots, ranges, point weights) and the `primvars:curve*` and `st` primvars that strand + requests read. Verify parity green on `curves.usda`, `hair.usda`, + `hair_variation.usda`, `curve_attributes.rs` and `hair.rs`. + +## 9. Materials + +- [x] 9.1 Binding: read `materialBindings` for the render purpose, then the + all-purpose binding, from the material binding resolving filter. Check it against + `winning_binding_target` with a test that runs both on `purpose_bindings.usda` and the + binding fixtures, while the direct reader still exists. Verify parity green. +- [x] 9.2 Networks: `material` per render context (universal, `mtlx`, `ri`), and the + precomp's display-filter shader ids, kernel assets and sample-filter graphs. Terminals, + `nodeIdentifier`, parameters with colour space and resolved asset paths, and + connections feed `preview` (`UsdPreviewSurface`, `UsdUVTexture`, primvar readers), + `mtlx_network` (inline `ND_*`), `PxrDisneyBsdf` and `PxrDisplace`. `crust:openpbr` is + read from the material's generic data. Verify parity green on every `materialx_*`, + `openpbr_showcase.usda`, `ptex_quads.usda` and `mtlx_surfaces.rs`. Waits on Moho's M10 + (design, "Moho-side gaps found while migrating"); also verify + `a_streamed_material_reads_a_shared_node_outside_its_subtree` in `usd_scene.rs`. +- [x] 9.3 `.mtlx` references: read the arc through `stage_facts` (D7) as + `mtlx_reference` does, unless `mtlx-format-plugin` has landed, in which case the + composed shader prims are read like any network. Verify parity green on + `materialx_teapot.usda` and `materialx_lion.usda`. +- [x] 9.4 Materials outside a chunk: add the side input (D4), a `chain::input` over a + stage masked to the paths `moho::streaming::unresolved` lists (M2), inserted weaker + than the chunk and stronger than the scene input, grown and reopened under + `OutsideMaterials`' rules (at most `MAX_SIDE_STAGE_OPENS` per chunk, design D4) until a + round resolves nothing new, and removed after the last chunk. Verify: + - parity on a fixture with `/World/Looks` beside four geometry chunks; + - parity on a fixture whose material lives only in another chunk's payload; + - parity on the Cornell box streamed. +- [x] 9.5 Provenance for materials (`material_reads`: arcs from `prim_stack`, targets + from the generic `connections`), through `stage_facts` for the arcs. Move the material + rebuild in `live.rs` to the index readers. Verify that `live.rs` passes, and parity + green (provenance is in the digest). +- [x] 9.6 Run `scripts/import_parity.sh check` on ALab against its baseline. Verify that + it exits 0, and record the run in the design record. + +## 10. Lights and light links (design D9) + +- [x] 10.1 Index readers for every light type through the `light` container + (intensity, exposure, colour and temperature, normalize, the type's own inputs, dome + texture and pole axis, shaping and IES), plus `crust:light:*` from generic data. They + feed the existing `emit_*_light` builders. Verify parity green on `lights.rs`, + `domelight.usda`, `dome_backdrop.usda`, `rectlight.usda`, `many_lights.usda`, + `light_visibility.usda`, `hidden_lights.rs` and the IES samples. +- [x] 10.2 Light links: record receivers as today. Read each light's + `collections/lightLink` and `collections/shadowLink` expressions from the merged data, + and judge them after the last chunk without reading `categories` (D9; whether to read + `categories` now that M1 has landed is the open question). Add agreement tests + asserting that Moho's `categories` agree with Crust's answers: on a single stage + (`chain::standard`), and on a streamed fixture whose light and receivers sit in + different chunks (`chain::merged` over every input). Verify parity green on + `light_linking.usda` and `light_linking.rs`, and on that streamed fixture. +- [x] 10.3 Move the light rebuild in `live.rs` to the index readers. Verify that + `live.rs` passes. + +## 11. Volumes + +- [x] 11.1 Index reader for `crust:volume:*` regions from generic data, dispatched + before geometry as today, and the material's volume terminal from the `material` + network. Verify parity green on `fog.usda`, `materialx_volume.usda` and `medium.rs`. + (The regions and their dispatch read the index; the volume terminal moved with the + material networks, 9.2. `fog.usda`, `materialx_volume.usda` and `medium.rs` are green + in the suite and the image run.) + +## 12. Instancing and the standard chain + +- [x] 12.1 Switch to `moho::chain::standard` (one stage), and to `chain::input` per + input under `chain::merged` (streamed). Read `instancer` prims: + - native instances: `instancerTopology` and `hydra:instanceTransforms`, with + prototypes walked under their stable paths through the same readers; + - point instancers: raw `protoIndices`, positions, orientations, scales and + invisible/inactive ids from `__usdAttributes` where a warning depends on them, and + `instancerTopology` otherwise. + + Key prototype caches on the stable prototype paths, with no epoch. Name prims inside + a prototype, in warnings and provenance, by the instance's prototype joined with + `primOrigin/scenePath` (M4). Verify parity green on `instancing.usda`, + `nested_instancing.usda`, `PointInstancedMedCity.usd`, the Kitchen set variants and the + `usd_scene.rs` instancing tests, with no path normalisation; a remaining difference is + reported, not normalised. (Done: one chain per input, `moho::chain::input`, under + `chain::standard`'s or `chain::merged`'s top; prototypes read at Moho's propagated + paths, named by their USD prims, materials through Moho's re-rooted bindings (M11); + caches on the propagated path, no epoch (D3c). A native instance is placed at its own + world transform, which `hydra:instanceTransforms` holds too; a prototype reached + through an instance proxy is still walked on the stage. The prototype numbers keep + the listed normalisation: the USD names are openusd's `/__Prototype_N`.) +- [x] 12.2 Placement counts for adaptive subdivision and the bake-versus-instance + decision from instancers, per top-level subtree. Instances judged at the instance or + instancer path for links and passes. Verify that parity is green with adaptive + subdivision on, on the instancing samples, streamed and not. +- [x] 12.3 Every index reader reads only the scene index or `stage_facts`: no bridged + call remains. Verify with `grep` that `index/` names no `usd::Prim` outside + `stage_facts.rs`, and that parity is green. +- [x] 12.4 Run `scripts/import_parity.sh check` on ALab and Moana against their + baselines. Verify that both exit 0, and record the runs (and Moho's spike strategies + (B) and (D) on the same machine) in the design record. + +## 13. Delete the direct importer (design D3, D6) + +- [x] 13.1 Delete the direct readers and the traversal they served (`traverse_into`, + `count_placements`' stage walk, the per-family `usd::Prim` readers no index reader + calls), the bridge (`index/bridge.rs`), `EvalTimeScope` and `time.rs`, and the + prototype epoch (`ImportCaches::epoch`, `MaterialCache::epoch`). `listing.rs` + (`crust ls`) is not an import and stays. Verify with `grep` that none of them remains, + that `usd_import/` reads openusd only through `index/` and `stage_facts.rs` (and + `listing.rs`), and that parity is green. +- [x] 13.2 Update the `CLAUDE.md` rules the deletion retires or changes: "The USD import + is single-threaded and reads the time code from a thread-local (`EvalTimeScope`)", and + the pair "Anything keyed on a prototype path is scoped by the stage epoch". Verify + with `grep` that neither names a deleted item. + +## 14. Hosts and large scenes + +- [x] 14.1 hdCrust: run `hydra/hdCrust/test/compare.sh`, `interaction.sh` and + `usdc_roundtrip.sh`. Verify that all three pass. +- [x] 14.2 Run `crust diagnostic --budget 2m` on `samples/cornellbox.usda` and compare + its report with the one recorded from the direct importer in group 2, timings aside, + and run the MCP session tests (`crust-render` with feature `mcp`). Verify equal + reports and green tests. +- [x] 14.3 Run `scripts/check_images.sh check` against the goldens recorded from the + direct importer in group 2. Verify exit 0. +- [x] 14.4 Run `scripts/import_parity.sh check` on ALab and Moana against their + baselines on the final commit. Verify that both exit 0 and that the full CI is green, + and record the runs in the design record. + +## 15. Documentation and specs + +- [x] 15.1 Update `openspec/specs/usd-scene-import/design.md`: + - the import through Moho (layout, walk order, the bridge's history, stage facts); + - the baselines and the parity runs; + - Moho's gaps M1 to M7, closed in `scene-index-gaps`, with the Moho rev that closes + them, and any parity exception that remains (none is planned). + + Verify that M1 to M7 are each named with what Crust uses from them. +- [x] 15.2 Update `docs/architecture.md`: Moho in the crate map and render flow, the + `index/` module, and the new invariant that each family's index reader and its + in-place rebuild change together. Update the `usd_import/mod.rs` module table to + name each family's index reader. Verify with `grep` that each document names Moho + and the rev rule. +- [x] 15.3 Add a page on the import to the site's architecture section (Crust reads + USD through Moho, the scene index; how it streams), and update any site page that + names the direct importer. Verify with `zola build`. +- [x] 15.4 Drop the implementation status note on "One import route, through Moho", and + run `openspec validate moho-import --strict`. diff --git a/openspec/specs/usd-scene-import/design.md b/openspec/specs/usd-scene-import/design.md index 224f37607..6c05d4439 100644 --- a/openspec/specs/usd-scene-import/design.md +++ b/openspec/specs/usd-scene-import/design.md @@ -8,24 +8,28 @@ ## Overview, streaming import and import time -The only scene format. The module is split by schema family — `mod.rs` holds -`load_scene`, the streaming chunk loop, the traversal and the import-wide state -(`ImportCtx`, `ImportCaches`), and dispatches into `mesh`, `shapes`, `instancing`, -`lights`, `light_links`, `materials`, `preview`, `volume`, `camera`, `xform`, -`settings`, `attrs` and `time`; the table in `mod.rs`'s module doc says which reads what. Siblings expose what +The only scene format, read through Moho, the Hydra-2.0-style scene index over openusd +(§ Index import below). The module is split by schema family — `mod.rs` holds +`load_scene`, the streaming chunk loop and the import-wide state (`ImportCtx`, +`ImportCaches`); `index/` holds the scene indices, the walk over them and the stage +facts; the walk dispatches each prim by its Hydra type into `mesh`, `shapes`, +`instancing`, `lights`, `light_links`, `materials`, `preview`, `volume`, `camera`, +`xform`, `settings` and the rest, each its family's index reader; the table in `mod.rs`'s +module doc says which reads what. Siblings expose what they share as `pub(super)` and import each other explicitly — keep it that way (no `use super::*`), so a file's `use` block stays its real dependency list. -`load_scene` opens the stage, imports `RenderSettings` first (the -camera needs the aspect ratio), then traverses prims with an explicit stack that bakes the -Xform hierarchy into world matrices. +`load_scene` opens the stage and builds the scene index over it, imports +`RenderSettings` first (the camera needs the aspect ratio), then walks the index's prims +with an explicit stack that bakes the transform hierarchy into world matrices. **Streaming import.** A production stage is dominated by USD itself, not by the renderer's own structures: composing all of Moana costs openusd 75.74 GiB and 6m19s, against 1.10 GiB and 2.6s for a stage masked to one element. So `load_scene` opens a cheap index stage (`InitialLoadSet::LoadNone`) for the settings and the list of -top-level subtrees, then composes, traverses and **drops one masked stage per subtree** -(`stream_roots` + `traverse_into`), bounding the composed set at about one element. +top-level subtrees, then composes, walks and **drops one masked stage per subtree** +(`stream_roots`; each chunk's scene index joins a merging index, is walked and is +removed), bounding the composed set at about one element. On the island: 117.10 GiB / 13:20 → 43.76 GiB / 09:19, output pixel-identical. `MIN_STREAM_CHUNKS` keeps the single-stage path for scenes too small to repay the re-opens; `CRUST_STREAM_IMPORT=0` forces it. @@ -35,39 +39,43 @@ its subtree alone, so a `Material` in another top-level subtree (`/World/Looks` `/MaterialX/Materials`) is absent from the stage that traverses the geometry bound to it. It used to resolve to grey with "not resolvable" — the Cornell box's `/scene/Looks` did, from five sibling chunks, unseen because that material is empty; -a stage laid out that way lost every material. Now -`materials::material_stage` notices a material outside the chunk's mask, walks the -chunk's `material:binding*` relationships once (`outside_binding_targets`, instance -proxies included) and opens **one** stage masked to every out-of-chunk target, -resolving the material there. The stage is kept across chunks (`OutsideMaterials`) -and re-opened only when a chunk binds a path it does not cover, with its mask grown -to the union, then dropped after the last chunk, before the top-level commit. A -dangling target stays in the mask, so it costs no second open, and still reports -"not resolvable". The cost is one more masked open per import (the root layer -parsed once more, the materials composed) for a stage that binds from outside its -chunks, and none for one that does not. On a small stage with a large root layer -the single-stage import (`CRUST_STREAM_IMPORT=0`) can be faster than streaming -altogether, which `MIN_STREAM_CHUNKS` (a count of subtrees) does not see. Rejected: re-opening the chunk with an expanded mask (C++ USD's -`ExpandPopulationMask`) composes the chunk's geometry twice, which the common -"one `/Looks` scope beside N geometry chunks" layout would pay per chunk; walking -the index stage up front composes everything outside payloads, which on ALab is the -whole stage. A chunk with nothing bound from outside pays nothing: the walk runs at -the first miss. A material whose network connects to a prim outside itself (a node -graph shared from another scope) needs that prim too, whether the material is in the -chunk or not: `connected_outside` follows its connections (and theirs, through each -reached prim's subtree) on whichever stage holds it, and any target the mask lacks -sends the material to the side stage with the target masked in beside it — one more -open per hop of a chain of shared graphs, at most `MAX_SIDE_STAGE_OPENS` (8) per -material. The mask moves only with a stage opened to it, so a failed open leaves the -stage and its mask in step. -The subtlety is cache keying: prototype paths (`/__Prototype_N`) are **numbered per -composition**, so every masked stage has its own `/__Prototype_0`. Anything keyed on -such a path must be scoped per stage, or one chunk's data is silently handed to the -next — see `MaterialCache::key` and `ImportCaches::epoch`. Keying materials on the bare -path cost 5 835 258 triangles before it was caught, and *no single element reproduces -it*: it needs two chunks that both carry prototype-internal materials. - -**Where import time goes** (ALab frame 1004, single-stage, stack-sampled with +a stage laid out that way lost every material. The direct importer then +walked the chunk's bindings once and opened **one** stage masked to every +out-of-chunk target, kept across chunks and grown when a chunk bound a path it did not +cover. The index import keeps that stage and its rules as Moho's streaming pattern +puts them: after a chunk's input joins the merging index, `moho::streaming::unresolved` +lists what the chunk's prims depend on that no input holds (bound materials, and the +network nodes outside a material, which a node graph shared from another scope needs), +and a **side input** over a stage masked to them, payloads loaded, sits between the +chunks and the payload-free scene (`index::Streamed::resolve_outside`). The rounds run +per chunk, before it is walked, until one resolves nothing new — at most +`MAX_SIDE_STAGE_OPENS` (8) per chunk, one per hop of a chain of shared graphs; the +stage is kept across chunks, so a chunk binding nothing new opens none, and it is +removed after the last chunk, before the top-level commit. A dangling target stays in +the mask, so it costs no second open, and still reports "not resolvable". Materials are +read at the top of the chain, where `MaterialNodeResolvingSceneIndex` fills a network's +node outside the chunk from whichever input holds it; what is read off a material's +stage rather than the index (a `.mtlx` reference, its composition arcs) is read off the +stage of the input that holds it (`materials::material_stage`). The cost is one more +masked open per import for a stage that binds from outside its chunks, and none for one +that does not. On a small stage with a large root layer the single-stage import +(`CRUST_STREAM_IMPORT=0`) can be faster than streaming altogether, which +`MIN_STREAM_CHUNKS` (a count of subtrees) does not see. Rejected: re-opening the chunk +with an expanded mask (C++ USD's `ExpandPopulationMask`) composes the chunk's geometry +twice, which the common "one `/Looks` scope beside N geometry chunks" layout would pay +per chunk; walking the index stage up front composes everything outside payloads, which +on ALab is the whole stage. +The subtlety is cache keying: openusd's prototype paths (`/__Prototype_N`) are +**numbered per composition**, so every masked stage has its own `/__Prototype_0`. +Keying materials on the bare path cost 5 835 258 triangles before it was caught, and +*no single element reproduces it*: it needs two chunks that both carry +prototype-internal materials. The direct importer scoped such keys by a stage epoch; +the index import keys prototypes, and the materials inside them, by Moho's propagated +prototype paths (or a point instancer's copy), which agree across chunks by +construction, so a prototype is built once per import (`moho-import`'s third behaviour +change). A `/__Prototype_N` name is kept for warnings and provenance only. + +**Where import time goes** (the direct importer: ALab frame 1004, single-stage, stack-sampled with `eu-stack` every 1.5 s — callgrind is hours on a 30 GiB import, and `perf` is not installed here). Before the fixes below, `Traverse prims` was 3:24: - **~35% is openusd composing the stage**, serially and lazily: the first query into a @@ -731,7 +739,7 @@ rendered in usdview rendered with holes here. bend round them), the seam at +X before the frame, the `rightHanded` winding, and `UsdImagingGprimAdapter::GetImplicitBasis(axis)` as the frame (a cyclic permutation of the coordinates). `Cylinder` passes equal radii, `Capsule` likewise. Readers take - `double` or `float` at `eval_time()` with the schema fallbacks. + `double` or `float` at the index's time with the schema fallbacks. - **Trap: the cone is not a cylinder with `rTop = 0`.** GeomUtil's cone has no top fan: its quads close on a ring of N coincident apex points, so the side's normals stay smooth round the apex instead of averaging to the spine. A `Cylinder_1` with @@ -794,10 +802,9 @@ rendered in usdview rendered with holes here. - **Unread `Gprim`s are reported.** A prim no reading branch takes and that `is_a("Gprim")` (openusd's `UsdPrim::IsA`, through the schema registry) is counted by type in `ImportCaches::unread`: once per prim the top-level walk meets, once per prim - per prototype *build*. Placements never add (the walk runs once per build), but a - streamed load rebuilds a prototype once per chunk that uses it, and `/__Prototype_N` - is renumbered per chunk (`ImportCaches::epoch`), so the count is "prims read", exact - only for a load that is not streamed. One `geom.unsupported_type` per type is raised at + per prototype *build*. Placements never add (the walk runs once per build), and a + prototype is built once per import (keyed by Moho's propagated path), so the count is + "prims read". One `geom.unsupported_type` per type is raised at the end of the load, on the importing thread, its message carrying the count; so the record's own `count` is the number of types. - **The oracle.** `scripts/geomutil_oracle.py` downloads micromamba from @@ -957,14 +964,14 @@ same point. `gridDims` int[3] + `gridData` float[] (x-fastest, length must equal nx·ny·nz — warns and skips otherwise). Sample scenes: `samples/fog.usda` (homogeneous god rays), `samples/smoke.usda` (noise plume + emissive ember + tiny explicit grid). -- **Frame / time code** (`-f/--frame`, `Scene::from_usd_at_frame`). Every attribute read in - the importer goes through `eval_time()` — `Attribute::get_at` at the requested code — - so transforms, points, camera, lights, instancer arrays and render settings all move - together; an attribute with no time samples reads its default either way, and only - animated ones change. The time lives in a scoped **thread-local** (`EvalTimeScope`) - rather than a parameter, because ~40 read sites in helpers handed only a `Prim` would - otherwise all carry a value none of them decide; that is sound only because the import - is single-threaded — parallelising it means threading the time explicitly. **No +- **Frame / time code** (`-f/--frame`, `Scene::from_usd_at_frame`). Every value the + importer reads resolves at the requested code: the scene index owns the time (every + `StageSceneIndex` the import builds is set to it), so transforms, points, camera, + lights, instancer arrays and render settings all move together; an attribute with no + time samples reads its default either way, and only animated ones change. A read off + the stage (`crust ls`, the stage facts) takes the time code as a parameter. (The + direct importer kept it in a scoped thread-local, `EvalTimeScope`, which went with + it.) **No frame means the attribute *default*, not frame 0**: a stage that authors only `timeSamples` reads its schema fallback, which is exactly the pre-`--frame` behaviour (pinned pixel-identical on the samples). The one exception is transforms: openusd @@ -1041,9 +1048,11 @@ same point. boxed because every entry carries one and few move). A prim moves when its own ops might vary (`XformQuery::transform_might_be_time_varying`) or its parent moves and it does not `!resetXformStack!`; it is then composed at both ends by - `compose_at` — `compose_with_parent` under a nested `EvalTimeScope`, quiet - (the read at the frame already warned) — so the composition rule stays one - function. `pair.open` reuses `W_f` when `shutter:open == 0`. `W_f` is still + `compose_at` — the same composition at the shutter's offset, quiet (the read at + the frame already warned) — so the composition rule stays one function. (On the + index, the transform at an offset is Moho's sampled `xform/matrix` at that offset + from the index's time, an `f32` as Hydra takes it: `moho-import`'s listed + exception.) `pair.open` reuses `W_f` when `shutter:open == 0`. `W_f` is still what lights, cameras, the zero-scale tests and `count_placements` read. The question is asked only when the offsets open an interval or a `motionvector` var is requested (`TransformMotion::query`); otherwise `timing` returns @@ -1433,7 +1442,7 @@ changed what the import calls: `SettingsBaseSchema` for the shared camera and framing attributes. - **`Imageable` / `Xformable` are views, not traits.** `xform.rs` views a prim through the type-checked `Xformable::from_prim` and composes its stack with - `XformQuery::new(..).local_transformation(eval_time())` and `resets_xform_stack()` + `XformQuery::new(..).local_transformation(time)` and `resets_xform_stack()` (was `local_to_parent_transform` on a wrapper implementing the traits). The check is against the schema registry: a prim that is not `Xformable` (an untyped prim, a `Scope`, a type the registry does not know) passes its parent's transform through, @@ -1583,6 +1592,272 @@ The displacement Ptex files are read raw and preloaded or streamed under the sam as colour Ptex. At the default level 0 every island mesh is displaced at its cage resolution, which moves cage vertices only and warns once. +## Index import + +The `moho-import` change moves the importer onto Moho, a Hydra-2.0-style scene index over +openusd, and deletes the direct importer at its end. It is gated on parity with +baselines recorded from the direct importer before anything migrated, as UsdImaging's +move onto scene indices was: the same baselines, a new route. + +### The import through Moho + +- **Layout.** One stage (fewer than `MIN_STREAM_CHUNKS` subtrees, or + `CRUST_STREAM_IMPORT=0`): one `StageSceneIndex` over a `LoadAll` stage, under + `moho::chain::input` (native and point instancing, flattening, material binding + resolution, render settings flattening), with light linking and + `MaterialNodeResolvingSceneIndex` on top — `chain::standard`'s shape. Streamed: the + same top over a `MergingSceneIndex` whose inputs are each a `chain::input`: the + payload-free scene (weakest, permanent, `include_unloaded_prims`), one chunk's masked + stage at a time (added, walked, removed, its stage dropped: Moho's spike strategy + (B), and its memory bound), and the side input for what a chunk depends on that no + input holds (§ Overview). Crust opens every stage itself, with its `stage_builder()` + (the schema registry, the `mmap` resolver); Moho never loads or unloads. +- **The walk** (`index::walk`) runs from the absolute root over one input's children, + in the direct importer's order (push in order, pop last-first), because geometry ids, + light-link runs, pass flags and provenance follow visit order and bitwise image + parity follows geometry order; the merging index's children, inputs strongest first, + are never relied on above a chunk root. Abstract and inactive prims are absent from + the index; each prim's own `purpose` and `visibility` (generic data, not Hydra's + flattened values, which let a child's purpose override an ancestor's `proxy`) prune + the subtree. Each prim is dispatched by Hydra type to its family's index reader. +- **What is read.** A reader reads the Hydra schema where it carries what the direct + reader read (types, transforms, topology, bindings, collections), and Moho's generic + attribute data (`__usdAttributes`, `__usdRelationships`) where the direct reader + depended on authored-ness, metadata or a renderer attribute (`crust:*`), with the + direct readers' rule and decoders (`index/data.rs`). Prototype prims are read at + Moho's propagated paths (`MohoNiPropagatedPrototypes/…`, a point instancer's + `ForInstancer…` copies) and named, in warnings and provenance, by the USD prims they + come from. +- **Stage facts.** What is not imaging data — the layers a scene composed, layer-spec + `invisible` overrides, a material's composition arcs for provenance, a `.mtlx` + reference, openusd's own errors for the `xform.uncomposable` and + `light_link.unreadable_collection` diagnostics, the subtrees to stream, a placement + tool's authored ops — is read off the stage in one module, `index/stage_facts.rs`, + each with its reason. `crust ls` (`listing.rs`) is not an import and walks the stage. +- **The bridge, and its end.** The migration started with every family bridged: the + index walk handed the direct reader the `usd::Prim` at the prim's path, so parity held + from the first commit; each family then moved to its index reader, accepted on + unchanged baselines, instancing last. The bridge went with the direct readers, the + thread-local time (`EvalTimeScope`) and the per-stage epoch that scoped + `/__Prototype_N` keys. +- **The rev rule.** crust reaches openusd only through `moho::openusd` and + `moho::openusd_schemas`; Moho is pinned by git `rev` in the root `Cargo.toml`, one rev + across the stack, bumped in order (Moho, then crust-render, then Mantle), each bump its + own commit, with no manifest naming openusd (`crust-core/tests/one_openusd.rs`). + +### Behaviour changes and parity exceptions + +Three behaviour changes, each a fix to the direct importer toward USD and Hydra, with +the baselines they changed re-recorded and checked (`moho-import` design D3a to D3c): +an undefined prim (an `over` no layer defines) is not imported; a prim inside a native +instance inherits the bindings of the instance's ancestors, through Moho's propagated +prototypes (instances bound differently become different prototypes); and a prototype +is built once per import, its parts and materials reused across a streamed import's +chunks and across point instancers placing one instanced asset. Two listed exceptions: +the number openusd gives a native prototype (`/__Prototype_`, numbered in the order +it is first asked for, per stage) is not compared; and a transform at a shutter offset +`f32` cannot hold reads Moho's sampled `xform/matrix` at that `f32` offset, as Hydra's +sampled data sources do, a time up to about 1e-9 frames off the direct importer's +`f64` one (a fixture pins it; `CRUST_RECORD_F32_SHUTTER`). + +### Moho's gaps + +Seven gaps found planning the change, closed in Moho's `scene-index-gaps` at `fc391a5`: +- **M1**, light linking across inputs: `chain::input` per input, `chain::merged` (light + linking after the merge) on top. Crust uses the shape, and judges the lights' + membership expressions itself after the last chunk (an agreement test checks Moho's + `categories` against its answers). +- **M2**, prims outside the loaded chunks: `streaming::unresolved`, which builds the + side input. +- **M3**, authored-ness on the absolute root (`__usdStageMetadata//{value, + authored}`): the time range and `metersPerUnit` read there. +- **M4**, `primOrigin/scenePath` on every prim: names a prototype prim by its USD source. +- **M5**, strategy (D) in Moho's spike: the streaming memory reference beside (B). +- **M6**, a render pass's `collections`: the `prune`/`renderVisibility`, `matte` and + `cameraVisibility` reads. +- **M7**, the merged children order, documented: the walk does not rely on it above a + chunk root. + +Five more found while migrating, each closed in Moho, none worked around in Crust: +**M8** (`__usdPrimInfo` `typeName` and `apiSchemas`: typing by schema `IsA`, the +`ShapingAPI` cone, the unread-type warnings), **M9** (`mightBeTimeVarying` in the +generic data: motion warnings at the default time) and **M10** (a network node outside +a chunk's mask, filled by `MaterialNodeResolvingSceneIndex`) at `788b1ac`, with Moho's +repin of openusd to `doubleailes/openusd` `d7d2a29`; **M11** (path values re-rooted +inside propagated prototypes: bindings inside instances) at `e64f228`; **M12** (a point +instancer's target inside a native instance copied from the instance's propagated +prototype: Moana's coral) at `d09cc94`, the rev Crust pins at the change's end. + +### Baselines + +- **Every import of the test suite** — the samples, each import test's fixtures, the CLI + tests, the live re-imports — is compared with a digest recorded from the direct + importer (`crust_core::parity`, the test-only `parity` feature; baselines in + `crates/crust-core/tests/data/import_baselines/`, keyed by the layers composed, the + options, the switches and the importing test). `crates/crust-render/tests/import_parity.rs` + also compares each committed sample's `crust check --json` report, import phases + removed. `scripts/parity_images.sh` re-renders every import of the suite at 16 spp + (indirect clamp off) in an optimised build and compares a hash of its pixels. + `CRUST_RECORD_BASELINES=1` (or `record`) rewrites them. +- **ALab and Moana** — `scripts/import_parity.sh record` keeps the `crust check` report, + the 16 spp EXR and the import's peak memory and parse time, in a local directory + (`target/import-baselines/`, not committed: the EXRs are large), together with + `scripts/check_images.sh record` goldens and a `crust diagnostic --budget 2m` report on + the Cornell box. + +Recorded on 2026-10-25, on an Intel Xeon E5-2699 v4 (2×22 cores, 72 threads, 93 GiB), +Rocky Linux 9 (kernel 5.14), rustc 1.99.0, crust-render `d31cacc6` (direct importer), +openusd `68a867a`, Moho `fc391a5`: + +| scene | command | peak memory (end of import) | `Parse USD stage` | +|---|---|---|---| +| ALab | `scripts/import_parity.sh record ~/Workspace/samples/ALab/entry.usda -f 1004 --camera /root/camera01/GEO/renderCam_hrc/renderCam_buffer/renderCam_srt/renderCam` | 10.96 GiB | 31.13 s | +| Moana | `scripts/import_parity.sh record ~/Workspace/samples/island/usd/island.usda --camera /island/cam/shotCam` | 23.88 GiB | 173.66 s | + +One run each (`N=1`), with a debug build running beside them, so the times are an upper +bound; the comparisons that follow are made on the same machine with the same command. + +Moho's streaming spike on Moana, the reference for streaming memory +(`scripts/streaming-spike.sh --skip-c --with-d`, Moho `fc391a5`, the same machine): + +| strategy | chunks | total | peak | final | largest chunk | +|---|---|---|---|---|---| +| (A) one stage, payloads loaded and unloaded | 22 | 52.54 s | 5.05 GiB | 2.43 GiB | 4.81 GiB | +| (B) a masked stage per chunk (Crust's streaming) | 22 | 49.74 s | 1.97 GiB | 1.69 GiB | 1.69 GiB | +| (D) (B) read through Moho's merging index | 22 | 304.57 s | 2.35 GiB | 1.72 GiB | 1.78 GiB | + +(D) holds (B)'s memory bound within 0.38 GiB and reads every prim's data through the +index, six times slower than raw reads. + +### Progress run (settings to curves on the index) + +`scripts/import_parity.sh check` on the same machine at `848457c5`, where settings, +products, passes, cameras, meshes, implicit shapes, spheres, curves, volume regions and +material bindings read the scene index, and transforms, materials, lights and instancing +still read through the bridge: + +| scene | report and 16 spp image | peak memory (ratio) | `Parse USD stage` (ratio) | +|---|---|---|---| +| ALab | equal | 21.12 GiB (1.93) | 46.90 s (1.51) | +| Moana | equal | 24.22 GiB (1.01) | 210.14 s (1.21) | + +ALab's digest matches the direct importer's but for the cameras the provenance lists: +an `over Camera` the direct importer counted is not a defined prim, so the index does +not hold it (the change's open question "Undefined prims"). ALab's memory doubles, for a +cause not yet found: an earlier measurement put Moho's prim cache at about 6% over a raw +read, so it is not the cache. The likelier, unverified cause is Moho's read path (for +example listing every time sample, which opens every value clip). It is a follow-up, to +investigate in Moho after S2. Reported, not gated. + +### Run after the repin (Moho `788b1ac`, openusd `doubleailes/openusd` `d7d2a29`) + +`scripts/import_parity.sh check` on the same machine at `87816b44`, the bump that brought +Moho's M8 to M10 and its repin of openusd to the fork carrying mxpv/openusd#175's clip +fixes, with the families as in the progress run above: + +| scene | report and 16 spp image | peak memory (ratio) | `Parse USD stage` (ratio) | +|---|---|---|---| +| ALab | equal | 21.12 GiB (1.93) | 45.77 s (1.47) | +| Moana | equal | 24.09 GiB (1.01) | 235.49 s (1.36) | + +One run each; a debug build and test run shared the machine with Moana, so its time is +an upper bound. The clip fixes take openusd's own read of ALab from 26.0 to 11.1 GiB, +but the import's peak does not move; its cause is the follow-up the progress run names +(Moho's read path, to investigate after S2). Reported, not gated. + +### Materials on the index (task 9.6) + +`scripts/import_parity.sh check` on ALab at `b122b8eb`, where material bindings, +networks (preview, MaterialX, Pxr, displacement), materials outside a streamed chunk +(the side input) and material provenance read the scene index: + +| scene | report and 16 spp image | peak memory (ratio) | `Parse USD stage` (ratio) | +|---|---|---|---| +| ALab | equal | 21.10 GiB (1.93) | 47.75 s (1.53) | + +One run, alone on the machine. + +### Instancing on the index (task 12.4) + +`scripts/import_parity.sh check` on the same machine with Moho `d09cc94` (M11 and M12 +in), the instancing family on the index and the bridge gone. ALab at `933ce471`, +alone on the machine. Moana at `33c9fd65`, alone on the machine for the timings below; +that run differed only in the unique triangles named next, and after the report was +re-recorded a second run passed (24.18 GiB, 2139.21 s, with a debug build beside it): + +| scene | report and 16 spp image | peak memory (ratio) | `Parse USD stage` (ratio) | +|---|---|---|---| +| ALab | equal | 21.17 GiB (1.93) | 55.41 s (1.78) | +| Moana | equal | 24.04 GiB (1.01) | 2053.05 s (11.82) | + +Both reports were re-recorded for the change's third behaviour change alone +(`moho-import` D3c, cross-instancer reuse), keeping the direct importer's EXRs, which +the images equal: ALab's unique triangles 12,007,504 to 12,001,706, Moana's 60,880,698 +to 60,844,338 (its coral, `isCoral1` to `isCoral5`, whose point instancers place prims +of one instanced archive), with the BVH sizes that follow. Everything else in the +reports, warnings and geometry counts included, is equal. + +Moho's spike on Moana at `d09cc94`, the same machine (`--skip-c --with-d`): + +| strategy | chunks | total | peak | final | largest chunk | +|---|---|---|---|---|---| +| (A) | 22 | 51.62 s | 5.05 GiB | 2.43 GiB | 4.81 GiB | +| (B) | 22 | 49.47 s | 1.91 GiB | 1.64 GiB | 1.69 GiB | +| (D) | 22 | 380.41 s | 2.36 GiB | 1.90 GiB | 1.90 GiB | + +Moana's import is twelve times the direct importer's time. (D), which only reads every +prim's data through Moho's merging index, is already 7.7 times (B), so most of it is the +index's read path; the rest is Crust's material resolution, which builds a scene index +over the material's stage when the walked chunk does not hold it (39 times on +`isHibiscus` alone), and the instancing walks. Reported, not gated; a follow-up with +ALab's memory, after S2. + +Earlier Moana timings taken after a `cargo test --release` (the image parity run) are +not comparable: that run leaves a test build at `target/release/crust`, with +crust-core's test-only `parity` feature, which digests every import. +`import_parity.sh` and `check_images.sh` now always rebuild the release binary first. + +### Hosts (tasks 14.1 to 14.3) + +- `scripts/check_images.sh check` against the goldens recorded from the direct + importer: all 48 scenes bit-identical. `cornellbox_guided`'s golden was re-rendered + with the direct importer first: guided rendering is nondeterministic (the listed + parity-image exception), the recorded golden was an outlier, and four direct and six + index renders all agree with each other. +- `crust diagnostic --budget 2m samples/cornellbox.usda` equals the direct importer's + report but for its timings and what follows from them (efficiency ratios, the profile + shares); scene, settings, findings, crops, MRSEs and luminance shifts are equal, and + so is the verdict (converged, no change), three runs in three. It must be run with the + release profile as configured (fat LTO): with LTO off, as the parity scripts build + for speed, rendering is a few per cent slower, the trials' time-equalised sample + counts change, and the verdict flipped in two runs of three. With LTO on, cornellbox + still renders about 2.5% slower than the direct importer's binary (4.56 s against + 4.45 s at 1024 spp), with no render code changed and the scene digests equal. +- hdCrust (`compare.sh`, `interaction.sh`, `usdc_roundtrip.sh`): the Hydra workflow + passes on the reference runner (ubuntu, glibc 2.39) at `58b1a25a`, + https://github.com/doubleailes/Crust/actions/runs/40494072921. On this machine + (glibc 2.34; the OpenUSD package needs 2.38, anderslanglands/aswf-pixi#57) the plugin + runs only through the pixi sysroot's loader, so it takes the sysroot's libm while a + host `crust` takes the host's: the two sides differed by an ulp on a few pixels, + before the change as after it (hdCrust built at the direct importer's commit gave + the same outcomes and bit-identical images). With the CLI under the same loader + (`pixi run compare-sysroot` / `interaction-sysroot`, `hydra/pixi.toml`), all three + pass locally too. + +### Final runs (task 14.4) + +`scripts/import_parity.sh check` at `58b1a25a` (the change's code as of `933ce471`; what +followed is documentation), alone on the machine: + +| scene | report and 16 spp image | peak memory (ratio) | `Parse USD stage` (ratio) | +|---|---|---|---| +| ALab | equal | 21.14 GiB (1.93) | 57.13 s (1.84) | +| Moana | equal | 24.18 GiB (1.01) | 2171.33 s (12.50) | + +Both against the reports re-recorded for D3c (§ Instancing on the index) and the direct +importer's EXRs. ALab's memory and Moana's import time are the follow-ups recorded +above, for Moho after S2. + ## Provenance and in-place rebuilds An imported `Scene` carries `provenance` (`crust_core::live::Provenance`): which `World` @@ -1602,14 +1877,16 @@ What it asked of the import, so a rebuild runs the traversal's code and not a co camera exposure step is `apply_exposure`. - The traversal's light dispatch is `emit_light`, and a cache miss in `cached_material` is `resolve_fresh` (with `resolve_displacement` beside it). -- `camera::local_to_world` (the root-to-prim fold of `compose_with_parent`) gives a - rebuilt light the transform the traversal composed for it. +- `xform::stage_local_to_world` (the root-to-prim fold of `compose_index` over a scene + index of the masked stage) gives a rebuilt light the transform the walk composed for + it. - A rebuilt light's geometry gets the `geom_id`s it had by claiming the ids before it in a scratch `WorldBuilder` (`reserve_slot`) before the emitter runs. -*Trap:* `MaterialCache::origins` leaves out prototype-scoped paths. One -`/__Prototype_N/...` path names a different material in each streamed chunk (that is -what the epoch in its key is for); an authored path has one `Arc` across every chunk. +*Trap:* `MaterialCache::origins` leaves out materials named under openusd's +`/__Prototype_N`. The cache keys a material inside a prototype by Moho's propagated path, +stable across a streamed import's chunks, but names it under the USD prototype, and one +`/__Prototype_N/...` name can stand for a different material in each chunk. ## Known gaps: instancing diff --git a/scripts/check_images.sh b/scripts/check_images.sh index b057f0984..1c4d33247 100755 --- a/scripts/check_images.sh +++ b/scripts/check_images.sh @@ -34,10 +34,11 @@ if [ -z "$DIR" ]; then exit 2 fi +# Always built first: `cargo test --release` leaves a test build at this +# path, with crust-core's test-only `parity` feature, which checks every +# import against a baseline and so is not the renderer being gated. BIN=target/release/crust -if [ ! -x "$BIN" ]; then - cargo build --release -p crust-render -fi +cargo build --release -p crust-render if ! "$BIN" diff --help >/dev/null 2>&1; then echo "error: $BIN has no diff subcommand; rebuild it (cargo build --release -p crust-render)" >&2 exit 2 diff --git a/scripts/import_parity.sh b/scripts/import_parity.sh new file mode 100755 index 000000000..9a0a5b9a5 --- /dev/null +++ b/scripts/import_parity.sh @@ -0,0 +1,132 @@ +#!/usr/bin/env bash +# Import parity on one (large) scene: the current build against a baseline +# recorded from Crust's direct importer (the `moho-import` change, spec +# `import-parity`). This is how ALab and Moana are checked; the committed +# samples and the test fixtures are checked by `cargo test`. +# +# Usage: +# scripts/import_parity.sh record [render flags...] +# scripts/import_parity.sh check [render flags...] +# +# `record` keeps in : the `crust check --json` report with the import's +# phases (timings, memory) removed, the 16 spp EXR (`--indirect-clamp 0`), and +# the import's peak memory and `Parse USD stage` time — the minimum over N runs. +# `check` does the same with the current build and compares: it exits 1 when +# the report or the image differs (`crust diff`), and prints both builds' +# memory and time with their ratios. Memory and time are reported, never gated: +# as UsdImaging did when it moved onto scene indices, parity is the gate. +# +# Give `check` the render flags `record` was given. Environment: +# N= renders per side for the timings (default 1; the image and +# report come from the first) +# BIN= the binary (default target/release/crust, always rebuilt +# first: `cargo test --release` leaves a test build there, with +# crust-core's test-only `parity` feature, which digests and +# checks every import and so measures the wrong thing) +# +# Examples: +# scripts/import_parity.sh record ~/baselines/alab samples/ALab/entry.usda -f 1004 +# scripts/import_parity.sh check ~/baselines/alab samples/ALab/entry.usda -f 1004 +# scripts/import_parity.sh record ~/baselines/moana \ +# ~/Workspace/samples/island/usd/island.usda --camera /island/cam/shotCam + +set -euo pipefail + +MODE="${1:-}" +DIR="${2:-}" +SCENE="${3:-}" +EXTRA=("${@:4}") +N="${N:-1}" +BIN="${BIN:-}" + +if { [ "$MODE" != record ] && [ "$MODE" != check ]; } || [ -z "$DIR" ] || [ -z "$SCENE" ]; then + sed -n '2,30p' "$0" + exit 2 +fi +if [ -z "$BIN" ]; then + cargo build --release -p crust-render + BIN=target/release/crust +fi + +mkdir -p "$DIR" +WORK="$(mktemp -d)" +trap 'rm -rf "$WORK"' EXIT + +# The report without its import phases, and with the scene's directory written +# `$DIR`, so it compares across builds and checkouts. +strip_report() { + python3 -I -c ' +import json, sys, os, re +report = json.load(open(sys.argv[1])) +report.pop("import", None) +text = json.dumps(report, indent=2, sort_keys=True) +text = text.replace(os.path.dirname(os.path.abspath(sys.argv[2])), "$DIR") +# The listed parity exception (spec import-parity): openusd numbers the stage +# prototypes in the order they are first asked for, which the scene index +# population walk changes; the number is not compared, the rest of the path is. +text = re.sub(r"__Prototype_[0-9]+", "__Prototype_#", text) +print(text) +' "$1" "$SCENE" +} + +# ` ` from a `crust-stats/1` report. +import_cost() { + python3 -I -c ' +import json, sys +s = json.load(open(sys.argv[1])) +parse = next(p for p in s["phases"] if p["name"] == "Parse USD stage") +peak = parse.get("peak_end") or s.get("peak_memory_bytes") or 0 +print(peak, parse["time_s"]) +' "$1" +} + +# Renders N times into $1 (a prefix), keeping the first image and the +# minimum peak memory and parse time. +measure() { + local out="$1" best_peak="" best_time="" + "$BIN" check -i "$SCENE" "${EXTRA[@]}" --json "$WORK/check.json" -l error >/dev/null + strip_report "$WORK/check.json" > "$out.check.json" + for i in $(seq 1 "$N"); do + "$BIN" render -i "$SCENE" "${EXTRA[@]}" -s 16 --indirect-clamp 0 \ + -o "$WORK/run$i.exr" --stats-json "$WORK/stats$i.json" -l error >/dev/null + read -r peak time < <(import_cost "$WORK/stats$i.json") + if [ -z "$best_peak" ] || [ "$peak" -lt "$best_peak" ]; then best_peak="$peak"; fi + if [ -z "$best_time" ] || python3 -I -c "import sys; sys.exit(not float('$time') < float('$best_time'))"; then + best_time="$time" + fi + done + cp "$WORK/run1.exr" "$out.exr" + echo "$best_peak $best_time" > "$out.cost" +} + +if [ "$MODE" = record ]; then + measure "$DIR/baseline" + read -r peak time < "$DIR/baseline.cost" + printf 'recorded %s: peak %.2f GiB, Parse USD stage %.2f s (min of %s)\n' \ + "$SCENE" "$(python3 -I -c "print($peak / 2**30)")" "$time" "$N" + exit 0 +fi + +measure "$WORK/current" +status=0 +if ! diff -u "$DIR/baseline.check.json" "$WORK/current.check.json" > "$WORK/report.diff"; then + echo "REPORT DIFFERS from $DIR/baseline.check.json:" + head -40 "$WORK/report.diff" + status=1 +fi +if ! "$BIN" diff "$DIR/baseline.exr" "$WORK/current.exr" >/dev/null 2>&1; then + echo "IMAGE DIFFERS from $DIR/baseline.exr" + status=1 +fi +read -r bpeak btime < "$DIR/baseline.cost" +read -r cpeak ctime < "$WORK/current.cost" +python3 -I -c " +b_peak, b_time, c_peak, c_time = $bpeak, $btime, $cpeak, $ctime +gib = 2**30 +print(f'peak memory: baseline {b_peak / gib:8.2f} GiB current {c_peak / gib:8.2f} GiB ratio {c_peak / max(b_peak, 1):.3f}') +print(f'Parse USD stage: baseline {b_time:8.2f} s current {c_time:8.2f} s ratio {c_time / max(b_time, 1e-9):.3f}') +" +if [ "$status" = 0 ]; then + echo "parity: report and image equal to the baseline" +fi +exit "$status" diff --git a/scripts/parity_images.expected b/scripts/parity_images.expected new file mode 100644 index 000000000..0c4d1e56f --- /dev/null +++ b/scripts/parity_images.expected @@ -0,0 +1,26 @@ +stage:cornellbox_guided.usda # its guided render is nondeterministic (about 1 run in 6, the direct importer's too): its image may differ from the baseline in any test that imports it; its digest is still compared +a_checkpointed_render_ends_with_the_files_of_one_without +a_declined_preview_texture_falls_back_to_its_fallback_then_the_constant +a_long_render_returns_within_its_budget_and_keeps_refining +a_missing_texture_shared_by_three_materials +a_product_differing_only_in_motion_blur_is_kept_and_warned_about +a_raw_dome_texture_keeps_the_working_space +a_source_edited_after_conversion_is_used_with_a_warning +a_streamed_cutout_reads_the_same_alpha +a_tx_arnold_wrote_is_not_rewritten_under_auto_tx +a_window_wholly_outside_the_frame_warns_once +an_empty_window_renders_the_full_frame_with_one_warning +an_expression_variance_resolves_and_its_misuses_are_refused +an_unauthored_and_a_full_window_are_the_same_region +ctrl_c_writes_the_partial_render_and_exits_130 +displaced_at_cage_logs_once_and_counts_every_mesh +dome_texture_is_resolved_and_requested_from_the_host +materialx_textures_reach_the_host_with_their_udim_token +only_meshes_open_displacement_maps +overscan_is_clipped_with_one_warning +preview_textures_anchor_on_their_layer_and_read_the_named_primvar +preview_textures_reach_the_host_with_their_source_color_space +products_that_disagree_on_depth_of_field_render_with_the_first +ptex_load_time_is_billed_to_the_asset_phase +tests_ffi::a_panicking_material_during_a_render_is_an_error_and_the_next_apply_renders +the_documented_look_dev_session_runs diff --git a/scripts/parity_images.sh b/scripts/parity_images.sh new file mode 100755 index 000000000..1626c2df1 --- /dev/null +++ b/scripts/parity_images.sh @@ -0,0 +1,121 @@ +#!/usr/bin/env bash +# The import-parity image run (the `moho-import` change, spec `import-parity`): +# every import the test suite performs is imported a second time and rendered +# at 16 spp with the indirect clamp off, and a hash of its pixels compared with +# the baseline recorded from the direct importer (`crust_core::parity`). +# +# Usage: +# scripts/parity_images.sh # compare +# scripts/parity_images.sh record # record the image baselines +# +# Optimised but without LTO (which moves no bits, see the workspace +# Cargo.toml) to keep the build short. The second import and its render are +# visible to the few tests that count asset requests or log lines, time a +# render, or render a material that panics on purpose; those fail in this mode +# and are listed in scripts/parity_images.expected (`#` starts a comment +# there, giving each entry's reason). +# +# The run passes only when: +# - cargo built every test target and each one reported a result (a build +# error, or a test binary that dies before its summary, fails the run); +# - no import differs from its baseline: every `parity:` diagnostic in the log +# fails the run, whichever test or `crust` process raised it, unless it is +# an image difference of a stage listed as `stage:` in the expected +# file (a stage whose render is known to vary from run to run, with its +# reason; its digest is still compared); +# - every failed test is listed by name (it fails here for a reason that is +# not an import difference, which the rule above still checks), or failed +# only on excused image differences. + +set -uo pipefail +cd "$(dirname "$0")/.." + +export CRUST_PARITY_IMAGES=1 +if [ "${1:-}" = record ]; then + export CRUST_RECORD_BASELINES=1 +fi +LOG="${PARITY_IMAGES_LOG:-}" +if [ -z "$LOG" ]; then + LOG="$(mktemp)" + trap 'rm -f "$LOG"' EXIT + CARGO_PROFILE_RELEASE_LTO=false CARGO_PROFILE_RELEASE_CODEGEN_UNITS=16 \ + cargo test --release --workspace --no-fail-fast >"$LOG" 2>&1 + cargo_status=$? +else + # PARITY_IMAGES_LOG names the log of a run already made (and + # PARITY_IMAGES_STATUS its exit status): the checks below, without the run. + cargo_status="${PARITY_IMAGES_STATUS:-0}" +fi + +status=0 +entries="$(sed 's/#.*//; s/[[:space:]]*$//; /^$/d' scripts/parity_images.expected | sort -u)" +tests_listed="$(printf '%s\n' "$entries" | grep -v '^stage:' || true)" +stages_listed="$(printf '%s\n' "$entries" | sed -n 's/^stage://p')" + +# The build, and a result from every test target. +if grep -qE '^error(\[E[0-9]+\])?: ' "$LOG" \ + && grep -vE '^error: ([0-9]+ targets? failed|test failed)' "$LOG" | grep -qE '^error(\[E[0-9]+\])?: '; then + echo "THE TESTS DID NOT BUILD OR RUN:" + grep -E '^error' "$LOG" | grep -vE '^error: ([0-9]+ targets? failed|test failed)' | head -20 + status=1 +fi +silent="$(awk ' + /^ *(Running|Doc-tests) / { if (pending) print target; target = $0; pending = 1; next } + /^test result: / { pending = 0 } + END { if (pending) print target }' "$LOG")" +if [ -n "$silent" ]; then + echo "TEST TARGETS THAT REPORTED NO RESULT:" + printf '%s\n' "$silent" + status=1 +fi + +# A `parity:` diagnostic is excused only when it is an image difference +# (`parity: importing differs from its baseline <...>.image`) of a +# listed stage: a digest difference, a missing baseline or a failed +# re-import never is. +excused() { + local stage + stage="$(printf '%s\n' "$1" | sed -nE 's/.*parity: importing ([^ ]+) differs from its baseline [^ ]+\.image,.*/\1/p' | sed 's#.*/##')" + [ -n "$stage" ] && printf '%s\n' "$stages_listed" | grep -qxF "$stage" +} + +# Every `parity:` diagnostic, whichever test or process raised it. +unexplained="$(grep -E 'parity: ' "$LOG" | while IFS= read -r line; do + excused "$line" || printf '%s\n' "$line" +done)" +if [ -n "$unexplained" ]; then + echo "IMPORTS DIFFER FROM THEIR BASELINES:" + printf '%s\n' "$unexplained" | head -60 + status=1 +fi + +# Each failed test, judged by its `---- stdout ----` section: listed +# by name, or failing only on excused image differences. +failed="$(grep -E '^test .* FAILED$' "$LOG" | sed 's/^test //; s/ \.\.\. FAILED$//' | sort -u)" +unexpected="$(printf '%s\n' "$failed" | sed '/^$/d' | while IFS= read -r name; do + printf '%s\n' "$tests_listed" | grep -qxF "$name" && continue + diagnostics="$(awk -v n="---- $name stdout ----" ' + $0 == n { on = 1; next } + on && (/^---- .* stdout ----$/ || /^failures:$/) { on = 0 } + on { print }' "$LOG" | grep -E 'parity: ')" + only_excused=1 + [ -z "$diagnostics" ] && only_excused=0 + while IFS= read -r line; do + [ -z "$line" ] || excused "$line" || only_excused=0 + done <<<"$diagnostics" + [ "$only_excused" = 1 ] || printf '%s\n' "$name" +done)" +if [ -n "$unexpected" ]; then + echo "TESTS FAILING THAT ARE NOT EXPECTED TO IN THIS MODE:" + printf '%s\n' "$unexpected" + status=1 +fi +if [ "$status" = 0 ] && [ "$cargo_status" != 0 ] && [ -z "$failed" ]; then + echo "CARGO FAILED (exit $cargo_status) WITHOUT A FAILED TEST:" + tail -20 "$LOG" + status=1 +fi +if [ "$status" = 0 ]; then + echo "parity images: every import renders as its baseline" +fi +exit "$status" diff --git a/site/content/docs/architecture/overview.md b/site/content/docs/architecture/overview.md index 94ecb9ebc..2734b2456 100644 --- a/site/content/docs/architecture/overview.md +++ b/site/content/docs/architecture/overview.md @@ -2,7 +2,7 @@ title = "Overview" description = "The crates that make up Crust Render, and how a render flows through them." date = 2026-10-01T08:00:00+00:00 -updated = 2026-10-23T08:00:00+00:00 +updated = 2026-10-27T08:00:00+00:00 draft = false weight = 10 sort_by = "weight" @@ -36,7 +36,7 @@ in the repository. (USD import, integrator, materials, lights, volumes, guiding) │ │ │ │ │ │ │ ▼ ▼ ▼ ▼ ▼ ▼ ▼ - crust-rt crust-mtlx crust-jit crust-nn utils openqmc-rs openusd, + crust-rt crust-mtlx crust-jit crust-nn utils openqmc-rs moho ──► openusd, (kernel) (MaterialX) (JIT) (networks) (math) (sampling) opensubdiv-rs ``` @@ -52,9 +52,12 @@ in the repository. | `crust-hydra` | crust behind a C interface for [`hdCrust`](@/docs/help/usdview.md), the Hydra render delegate: a session on the layers the delegate writes, rendered progressively | Hydra (the C++ plugin in `hydra/hdCrust` speaks it) | | `utils` | stateless math: sampling warps, MIS heuristics, luminance | everything | -Three libraries come from outside the workspace, all pure Rust: +These libraries come from outside the workspace, all pure Rust: -- [`openusd`](https://github.com/mxpv/openusd) reads and composes USD stages. +- [`openusd`](https://github.com/mxpv/openusd) reads and composes USD stages, and + [Moho](https://github.com/doubleailes/Moho) is the scene index over it, on the model of + Hydra 2.0, that Crust reads every stage through + ([The USD import](@/docs/architecture/usd-import.md)). - [`openqmc-rs`](https://crates.io/crates/openqmc-rs) is a port of the Academy Software Foundation's [OpenQMC](https://github.com/AcademySoftwareFoundation/openqmc) quasi-Monte Carlo sampler. It produces exactly the same samples as the C++ library. @@ -69,9 +72,11 @@ they could be extracted too. 1. **Command line.** `crust-render` parses its flags and builds the asset loader, which reads the `CRUST_*` texture settings. -2. **USD import** (`crust-core`). A light "index" stage is opened with payloads unloaded, - to read the render settings, pick the camera and list the top-level subtrees. Each - subtree is then composed on its own masked stage, traversed and dropped. Prims become +2. **USD import** (`crust-core`, through Moho's scene index). A light "index" stage is + opened with payloads unloaded, to read the render settings, pick the camera and list + the top-level subtrees. Each subtree is then composed on its own masked stage, added + to the scene index, walked and dropped + ([The USD import](@/docs/architecture/usd-import.md)). Prims become meshes, spheres, curves, instances, lights, volumes or the camera. Materials are resolved and cached. Every image, Ptex or IES file is decoded by `crust-assets`. 3. **Geometry build** (`crust-rt`). Meshes are either baked into world space or kept as diff --git a/site/content/docs/architecture/usd-import.md b/site/content/docs/architecture/usd-import.md new file mode 100644 index 000000000..c85fef910 --- /dev/null +++ b/site/content/docs/architecture/usd-import.md @@ -0,0 +1,75 @@ ++++ +title = "The USD import" +description = "How Crust Render reads a USD stage: through Moho, a scene index in the model of Hydra 2.0, one subtree at a time." +date = 2026-10-27T08:00:00+00:00 +updated = 2026-10-27T08:00:00+00:00 +draft = false +weight = 15 +sort_by = "weight" +template = "docs/page.html" + +[extra] +lead = 'Crust Render reads every stage through Moho, a scene index over openusd built on the model of Hydra 2.0, and streams a large stage one subtree at a time.' +toc = true +top = false ++++ + +## Through a scene index + +The renderer never walks USD prims itself. Every stage is read through +[Moho](https://github.com/doubleailes/Moho), a scene index over the pure-Rust +[openusd](https://github.com/mxpv/openusd) crate, on the model of Hydra 2.0, the scene +description layer of Pixar's OpenUSD: + +- a **scene index** gives each prim a Hydra type (`mesh`, `camera`, `sphereLight`, …) and + its data as **data sources**, read lazily; +- **filters** stack on top of it, as UsdImaging stacks them. Native instancing and point + instancing produce prototypes, flattening composes transforms and visibility, + material binding resolution answers which material each prim renders with, and + light linking turns collections into categories; +- the index owns the **time**, so a render at `-f 12` reads every value at frame 12, and + motion blur reads transforms at the shutter's offsets around it. + +Crust walks the top of that stack in namespace order and hands each prim, by its Hydra +type, to the reader for its family: meshes, curves, implicit shapes, lights, cameras, +materials, instancers, volumes, render settings and products. A reader takes the +schema's data where Hydra carries what Crust needs. Elsewhere it reads the attribute +values Moho carries alongside, with whether each is authored. That is where Crust +reads its own `crust:*` attributes. + +A few facts are not scene description: the layers a stage composed, an override +authored to hide a prim, where a material's specs come from. Crust reads those from the +stage itself, in one place, and nowhere else. + +## One subtree at a time + +A production stage is dominated by USD itself: composing all of the Moana Island costs +75 GiB, a single element about 1 GiB. So a stage with at least four top-level subtrees is +imported in pieces: + +1. A light stage, with payloads unloaded, gives the render settings, the camera and the + list of subtrees. It stays in the index as its weakest input. +2. Each subtree is composed on a stage of its own, masked to it, and added to a + **merging** scene index above the light stage. It is walked, then removed, and its + stage is dropped before the next one opens. +3. A material bound from outside the subtree, or a shading node shared from elsewhere, + is listed by Moho as unresolved. Crust opens one more masked stage holding just + those prims and keeps it, between the subtrees and the light stage, until the last + subtree is done. + +At most one subtree's payloads are composed at a time, which is what bounds the import's +memory. Light links are judged after the last subtree, once every light has been seen. +Set [`CRUST_STREAM_IMPORT=0`](@/docs/reference/environment-variables.md#crust-stream-import) to import +under one fully loaded stage instead. Both give the same scene. + +## Prototypes + +Moho gives each instanced prototype one stable path, the same in every subtree. A +prototype is therefore built once for the whole render and placed wherever it is used, +whichever subtree or point instancer places it. Warnings and the material provenance an +MCP session reports still name the prims by their USD paths, not by the index's. + +## One openusd + +Crust reaches openusd only through Moho, which pins it to one revision, the one Mantle +uses too. A bump moves Moho first, then Crust Render, then Mantle.